On Thu, Dec 16, 2010 at 1:18 PM, <herman.schreu...@sanofi-aventis.com> wrote: > Of course there is no dicontinuity, but you create one the moment you decide > that certain symmetry operators no longer apply to certain atoms.
Change 'atoms' in that statement to 'reflections', or to 'map grid points', then read it again. Does the (-h,k,-l) operator apply to the (0,k,0) reflections or the (-x,y,-z) operator to the grid points (0,y,0)? Do you multiply the intensities of the (0,k,0) reflections or the electron densities of the (0,y,0) points by 0.5 because they are on the axis in order to make it easier to program, or do you decide that will confuse the user, and instead deal with the multiplicity factor internally in the program? > Confusion arises e.g. when you download a pdb file of fairly high resolution > and find a water molecule with an occupancy of e.g. 0.45 at 0.02 Å from a > symmetry axis. Is it a special water suffering from some rounding errors with > a total occupancy of 0.45, or a rotationally disordered water (perhaps > refined by an overzealous crystallographer) with a combined occupancy of 0.90? For the sake of argument let's say that 0.02 Ang is too big to be rounding error. So if you see that big a shift then the intention of the refinement program (or rather the programmer) which allowed such a value to be appear in the output should be that it's real. If the intention of the user was that the atom is actually on axis then the program should not have allowed such a large shift, since it will be interpreted as 'much bigger than rounding error' and therefore 'significantly off-axis'. Of course even if the intention of the user was that splitting the atom across the 2-fold is meaningful, the user may still have got it wrong if the data doesn't justify splitting the atom like that. The important point is how the program's actions are interpreted by other programs and users - that's why we have conventions. Single precision floating point rounding error is ~ 1 in 10^7, so even if we allow 100 times that with a 100 Ang axis it's still only 0.001 Ang. Despite Dale being able to successful refine a 1/2 atom 0.001 Ang from an axis I don't think he can claim that moving an atom by 0.001 Ang makes any difference above rounding error to the structure factors. If the data can't detect the difference, then the user should not be claiming that there is one, and programs should not allow atoms to be set as close as 0.001 Ang, (or whatever the consensus is a suitable multiple of the rounding error) from an axis: it just makes no sense. You just have to decide what is the smallest realistic shift that the best data could possibly detect under optimal conditions, agree that programs can't set an off-axis shift below that, and set the rounding error test lower than that (say by an order of magnitude for safety). As I said CRYSTALS must do something like this and it has worked fine for the last 40 years on small molecules where clearly the resolution is going to allow you to detect much smaller off-axis shifts than for macromolecules, so the choice of rounding threshold will be even more critical. > This in my eyes unneccessary distinction between special and non-special > positions does create confusion and unnecessarily complicates the programming > of programs working with coordinates files. I suspect the reason that the CIF committee decided that it was necessary to adopt this convention is that it makes transparent the connection between occupancy, the chemical formula and static disorder, i.e. if you see partial occupancy then you know its disordered; occupancy=1 simply and clearly signifies that a whole atom is present. This connection is obfuscated by multiplying by the point multiplicity, which is really just an algorithmic issue for the programmer to deal with internally (exactly as for reflections and map grid points), and shouldn't 'leak out' into the user's domain. It's a very minor complication compared with everything else that goes on in a refinement program. If you're dealing with reflections or maps you still have to program the point multiplicity, you can't avoid it. So it's not as though you have to write additional subroutines specifically for atoms. Cheers -- Ian