OK, let's experiment.
I'm taking a porin model and I know that the data is affected by
twinning (porin.pdb and porin.mtz).
1) Let's run Xtriage to find out the twin law:
phenix.xtriage porin.mtz
and it gives me this:
Statistics
depending on twin laws
-----------------------------------------------------------------------------------------------------------------
| Operator | type | R
obs. | Britton alpha | H alpha | ML alpha |
-----------------------------------------------------------------------------------------------------------------
| -2/3*h-1/3*k+2/3*l,-1/3*h-2/3*k-2/3*l,2/3*h-2/3*k+1/3*l | PM |
0.410 | 0.079 | 0.084 | 0.022 |
| -h,1/3*h-1/3*k+2/3*l,2/3*h+4/3*k+1/3*l | PM |
0.419 | 0.070 | 0.069 | 0.022 |
| -1/3*h+1/3*k-2/3*l,-k,-4/3*h-2/3*k+1/3*l | PM |
0.415 | 0.070 | 0.075 | 0.022 |
| -h,2/3*h+1/3*k-2/3*l,-2/3*h-4/3*k-1/3*l | PM |
0.420 | 0.068 | 0.069 | 0.022 |
| 1/3*h+2/3*k+2/3*l,-k,4/3*h+2/3*k-1/3*l | PM |
0.415 | 0.074 | 0.077 | 0.022 |
| -1/3*h-2/3*k-2/3*l,-2/3*h-1/3*k+2/3*l,-2/3*h+2/3*k-1/3*l | PM |
0.413 | 0.078 | 0.079 | 0.022 |
| h,-h-k,-l | M |
0.195 | 0.292 | 0.315 | 0.304 |
-----------------------------------------------------------------------------------------------------------------
so I'm still puzzled which twin law to choose from the above list, so I
run phenix.model_vs_data:
phenix.model_vs_data porin.{mtz,pdb} > model_vs_data.log
phenix.model_vs_data will score the possibilities: it internally runs
Xtriage to get the twin law and then it computes the R-factors with and
without considering twining and based on this it tells you what you
have.
Ok, phenix.model_vs_data outputs:
(...)
Data:
twinned : h,-h-k,-l
(...)
and I take "h,-h-k,-l" as my twin_law.
2) Next, I' going to run two refinements - with and without considering
twinning:
phenix.refine porin.{pdb,mtz} output.prefix=twin twin_law="h,-h-k,-l"
--overwrite
and
phenix.refine porin.{pdb,mtz} output.prefix=no_twin
Obviously, considering twinning is a good idea:
twin_001.pdb:
Final: r_work = 0.1207 r_free = 0.157
no_twin_001.pdb:
Final: r_work = 0.2038 r_free = 0.2475
3) Now let's play with SA omit maps. The file "porin.pdb" contains a
ligand "C8E".
I'm omitting the ligand from twin_001.pdb file (twin_001_NoLigand.pdb)
and start SA refinement:
phenix.refine porin.mtz twin_001_NoLigand.pdb
output.prefix=twin_sa_omit twin_law="h,-h-k,-l"
simulated_annealing=true --overwrite
and the result is:
twin_sa_omit_001.pdb:
Final: r_work = 0.1224 r_free = 0.1650
which is slightly worse than
twin_001.pdb:
Final: r_work = 0.1207 r_free = 0.157
but is not surprising at all since:
- By omitting the ligand we made the model worse. One should not expect
the omit map look better than the regular map;
- SA is good for correcting large errors. This is why it does very good
at the beginning of refinement, but it rather harms when you run it
with a good close-to-final structure.
The maps twin_sa_omit_001_map_coeffs.mtz and twin_001_map_coeffs.mtz
look almost identical, and the mFo-DFc omit map shows the ligand.
>From this I conclude that the program works as expected and does not
contain obvious bugs. If you experience a problem with your particular
structure, then I think it's case-specific.
All the files mentioned above are located here:
http://cci.lbl.gov/~afonine/twinning_experience/porin/
Let me know if you have any questions.
Pavel.