Hello Takanori, thanks for feedback! It is always very much appreciated!
I have recently encountered a similar situation, where I took a CIF file for a ligand from the CCP4 monomer library and found planarity restraints are silently ignored in PHENIX. This is very confusing and dangerous.
I can see how this may be confusing so I agree with Keitaro that a warning would be good to have. Also, phenix.refine always outputs .geo file that lists all the restraints for all atoms, which allows to check presence or absence of particular restraints for atoms in question.
with this logic you interpret the number and not use it. Follow this road you may end up with odd things, like let's treat 0 as "constraints", 0.1 as "strong restraints", 1.5 as "weak restraints", etc and in each case do something very different - I hope you get the idea.
The "zero sigma" limit of a Gaussian is an infinitely sharp probability distribution (= delta function). So I think the transition from restraints to constraints is not "odd" but quite natural both mathematically and semantically.
Theoretically it is all right of course, but in terms of code it may be quite different pieces of code. It is much less cryptic if a decision to use one option (restraints) or another (constraints) is a made based on a clearly named parameter rather than inferring from interpreting a number.
Anyway, if PHENIX does not want to treat 0 as constraints, I would prefer an error stop, not just a warning,
It is always a balance between being conservative vs relaxed, automated vs less automated. There is no perfect solution for drawing the line, Iafraid. I'm sure if we make phenix.refine stop every time it sees esd=0 there will be a great deal of people flooding mailboxes saying "why it's stopping, I don't care, I want my refinement job finished", etc. phenix.refine favors automation paradigm while providing a lot of room for flexibility. You can define custom bonds, angles, torsions, planes, groups of planes to be parallel, as many as you wish and for any atoms of your choice. And you can make sure that what you defined was actually used by inspecting .geo files. A practical solution to "esd=0 issue" that is somewhere in between the two extremes ("stop if esd=0" vs "ignore and keep going") is to replace esd=0 with say esd=0.01 (or whatever is used for rings in TYR or PHE). This will let program going as before and you will get your plane that I bet one wouldn't be able to tell that it is not perfect just by looking at it!
because most people don't mean "ignore this record" by zero sigma.
Frankly, I don't know and I wouldn't be so sure. I'd say many wouldn't tell (and care about) the difference between restraints vs constrains, not to mention nuances about meaning of esd=0, which is fine. Those who don't mean "ignore this record" are probably trained to use the program X, where this assumption is made. Perhaps it's not too unreasonable to realize that not everything adopted in program X is equally and fully adopted in program Y. I can make a list of hundreds other similar decisions that are made under the hood of phenix.refine automatically. - Do hydrogens participate in bulk-solvent mask calculation? - Do vdw radii of non-H change when H are used in refinement? - What program does if it sees non-positive definite anisotropic ADP or any of T, L or S matrix? - What happens if input PDB has ANISOU records, TLS is not requested and resolution is not great for anisotropic refinement? - Are H treated as riding or freely refined if data resolution is 0.73A? - What data resolution is used when you request to do rigid-body refinement? - What refinement target is used (LS or ML) if there is less than 50 test (free) reflections? ... Yep, I can go on for 100+ more items like this. If every time we stop and ask users what to do that would not go well! All the best, Pavel