[phenixbb] occupancy refinement default selections - bug or feature?

Pavel Afonine PAfonine at lbl.gov
Wed Jan 20 22:05:01 PST 2010

Hi Ed,

> There is a ligand residue in the structure that have its occupancy set
> to 0.75.  refine with default parameters apparently refines every atom
> individually, so in the end I have a strange situation where ligand
> atoms have different occupancies.

what phenix.refine does with your occupancies by default is described here:


If you want to refine one occupancy per whole ligand, you need to tell 
phenix.refine abut it, for example

phenix.refine model.pdb data.mtz 
refine.occupancies.constrained_group.selection="chain X and resname LIG"

Based on user's feedback, future versions of phenix.refine will 
automatically recognize what is supposed to be refined with group 
occupancy - it's on top of my to-do list.

Please let me know if it's still not clear and we will have a closer look.

> Interestingly, when I place altLoc identifier "A" in front of the
> residue name of the ligand, single occupancy value is refined (although
> there is no second conformation).  It settles down near 0.7 (close to
> what I selected previously based on a traditional approach of
> eliminating difference density and roughly matching B-factors of
> hydrogen-bonded protein atoms with ligand), so apparently constraints
> (e.g. total occupancy for all the conformers) are not applied.
> Is this intentional behavior (I understand that groups can be defined in
> the input file but adding altLoc letter seems like a simple trick)?  I
> think most people would initially expect that occupancy will not vary
> within a residue, so the default behavior may seem like a bug to some
> (the only situation I can think of where such variation is justified is
> to model radiation damage).

Yes, I agree with everything.
You can do this trick too (setting altLoc, say A, to the whole ligand), 
and another "more expected/suggested" way of doing this is what I wrote 
And once again, future versions of phenix.refine will recognize 
situations like this and handle them fully automatically - it will be 
~ten lines of code in mmtbx/utils.py or so -:)

All the best!

More information about the phenixbb mailing list