Hi all-- I'm trying to figure out how to orthogonalize symmetry operators given a unit cell, which doesn't seem to be something we have code for. These appear in PDB files in the REMARK 290 section but I haven't been able to find any other software that generates them, and the relationship between the symops and the real-space equivalents is unclear. I assume this is conceptually similar to orthogonalizing fractional coordinates, but unit_cell.orthogonalize() does not quite do what I wanted. In the PDB, for P63 it has this (excerpted): REMARK 290 2555 -Y,X-Y,Z ... REMARK 290 SMTRY1 2 -0.500000 -0.866025 0.000000 0.00000 REMARK 290 SMTRY2 2 0.866025 -0.500000 0.000000 0.00000 REMARK 290 SMTRY3 2 0.000000 0.000000 1.000000 0.00000 which looks like it should be relatively straightforward, but I'm not very good with matrices. Does anyone know the correct math for this? The corresponding rt_mx object from sgtbx looks like this: r=(0.0, -1.0, 0.0, 1.0, -1.0, 0.0, 0.0, 0.0, 1.0) t=(0.0, 0.0, 0.0) (Yes, I realize that there are much easier ways to apply symmetry operators to coordinates, but I want to limit the number of matrix multiplications involved when starting from Cartesian coordinates.) thanks, Nat
Hi Nat, it should be something like this:1. Symmetry operation on fractional coordinates: Yfrac = S*Xfrac2. 'Fractionalisation' operation: Xfrac = G^t*Xcart3. 'Orthoganalisation' of the result: Ycart = G*Yfrac4. All together: Ycart = G*S*Xfrac = G*S*G^t*Xcart where S is a symmetry operator G is the orthogonalisation matrix and G^t is it's transpose. So you can pre-compute G*S*G^t, Cheers, o. From: [email protected] Date: Sun, 17 Aug 2014 15:36:00 -0700 To: [email protected] Subject: [cctbxbb] real-space symmetry operators Hi all-- I'm trying to figure out how to orthogonalize symmetry operators given a unit cell, which doesn't seem to be something we have code for. These appear in PDB files in the REMARK 290 section but I haven't been able to find any other software that generates them, and the relationship between the symops and the real-space equivalents is unclear. I assume this is conceptually similar to orthogonalizing fractional coordinates, but unit_cell.orthogonalize() does not quite do what I wanted. In the PDB, for P63 it has this (excerpted): REMARK 290 2555 -Y,X-Y,Z ...REMARK 290 SMTRY1 2 -0.500000 -0.866025 0.000000 0.00000REMARK 290 SMTRY2 2 0.866025 -0.500000 0.000000 0.00000 REMARK 290 SMTRY3 2 0.000000 0.000000 1.000000 0.00000 which looks like it should be relatively straightforward, but I'm not very good with matrices. Does anyone know the correct math for this? The corresponding rt_mx object from sgtbx looks like this: r=(0.0, -1.0, 0.0, 1.0, -1.0, 0.0, 0.0, 0.0, 1.0) t=(0.0, 0.0, 0.0) (Yes, I realize that there are much easier ways to apply symmetry operators to coordinates, but I want to limit the number of matrix multiplications involved when starting from Cartesian coordinates.) thanks,Nat _______________________________________________ cctbxbb mailing list [email protected] http://phenix-online.org/mailman/listinfo/cctbxbb
Hi, I have once written a code for this: from scitbx import matrix from cctbx import crystal # example is 4BWY symm = crystal.symmetry((197.725, 197.725, 562.576, 90, 90, 120), space_group="H32") uc = symm.unit_cell() frac = matrix.sqr(uc.fractionalization_matrix()) ortho = matrix.sqr(uc.orthogonalization_matrix()) for symop in symm.space_group().all_ops(): print ortho * symop.r().as_rational() * frac print ortho * symop.t().as_rational() (From my blog: http://d.hatena.ne.jp/biochem_fan/20140618/1403040854 ) Best regards, Takanori Nakane (2014/08/18 1:04), Oleg Dolomanov wrote:
Hi Nat, it should be something like this:1. Symmetry operation on fractional coordinates: Yfrac = S*Xfrac2. 'Fractionalisation' operation: Xfrac = G^t*Xcart3. 'Orthoganalisation' of the result: Ycart = G*Yfrac4. All together: Ycart = G*S*Xfrac = G*S*G^t*Xcart where S is a symmetry operator G is the orthogonalisation matrix and G^t is it's transpose. So you can pre-compute G*S*G^t, Cheers, o. From: [email protected] Date: Sun, 17 Aug 2014 15:36:00 -0700 To: [email protected] Subject: [cctbxbb] real-space symmetry operators
Hi all-- I'm trying to figure out how to orthogonalize symmetry operators given a unit cell, which doesn't seem to be something we have code for. These appear in PDB files in the REMARK 290 section but I haven't been able to find any other software that generates them, and the relationship between the symops and the real-space equivalents is unclear. I assume this is conceptually similar to orthogonalizing fractional coordinates, but unit_cell.orthogonalize() does not quite do what I wanted. In the PDB, for P63 it has this (excerpted):
REMARK 290 2555 -Y,X-Y,Z ...REMARK 290 SMTRY1 2 -0.500000 -0.866025 0.000000 0.00000REMARK 290 SMTRY2 2 0.866025 -0.500000 0.000000 0.00000
REMARK 290 SMTRY3 2 0.000000 0.000000 1.000000 0.00000 which looks like it should be relatively straightforward, but I'm not very good with matrices. Does anyone know the correct math for this? The corresponding rt_mx object from sgtbx looks like this:
r=(0.0, -1.0, 0.0, 1.0, -1.0, 0.0, 0.0, 0.0, 1.0) t=(0.0, 0.0, 0.0)
(Yes, I realize that there are much easier ways to apply symmetry operators to coordinates, but I want to limit the number of matrix multiplications involved when starting from Cartesian coordinates.)
thanks,Nat
_______________________________________________ cctbxbb mailing list [email protected] http://phenix-online.org/mailman/listinfo/cctbxbb
_______________________________________________ cctbxbb mailing list [email protected] http://phenix-online.org/mailman/listinfo/cctbxbb
Sorry, in my previous e-mail I meant inverts of the G matrix instead of the transpose... o
participants (3)
-
Nathaniel Echols
-
Oleg Dolomanov
-
Takanori Nakane