Hi Andrew,
I guess what happens is this:
When you use the expand_to_p1() command, the symmetry operators for P 32 2 1 are applied on the fractional coordniates as given. You expect a mod(1) operator to be carried out as well.
The advantage of not applying this operator is that you do not loose 'connectivity' between atoms.
I can imagine that this is not a real issue for certain inorganic compounds, but for organic compounds and proteins not having the 'intuitive' connectivity in the coordinates (atoms close to each other are bonded) this is an issue.
I agree with Eric that the negative fractional do not fit in your view of a perfect world view either.
I guess Ralf/the cctbx has something somewhere to do the mod(1) operation to get the fractional coordinates in the range you like.
HTH
Peter
----- Original Message -----
From: David A Carr
Hello,
I have encountered the following inconsistency when working with cctbx. The compound I am working with is as follows.
#Silicon Dioxide Quartz low. #Si O2 #ICSD Coll Number 62410
label="Si", site=(0.4643,0.0,0.6667) label="O", site=(0.411,0.2773,0.7783)
unit_cell="4.8430, 4.8430, 5.3480, 90.0, 90.0, 120.0",
space_group_symbol="P 32 2 1"
The error is can be seen in the below. In the second and third Si lines the z value is not a fraction of the unit. Similarly two of the oxygens are placed outside the unit cell. Why does cctbx place these outside of the unit cell?
Number of scatterers: 9 At special positions: 0 Unit cell: (4.843, 4.843, 5.348, 90, 90, 120) Space group: P 1 (No. 1) Label, Scattering, Multiplicity, Coordinates, Occupancy, Uiso Si1 Si 1 ( 0.4643 0.0000 0.6667) 1.00 0.0000 Si1 Si 1 ( 0.0000 0.4643 1.3333) 1.00 0.0000 Si1 Si 1 (-0.4643 -0.4643 1.0000) 1.00 0.0000 O1 O 1 ( 0.4110 0.2773 0.7783) 1.00 0.0000 O1 O 1 (-0.2773 0.1337 1.4450) 1.00 0.0000 O1 O 1 (-0.1337 -0.4110 1.1116) 1.00 0.0000 O1 O 1 ( 0.1337 -0.2773 -0.4450) 1.00 0.0000 O1 O 1 (-0.4110 -0.1337 -0.1116) 1.00 0.0000 O1 O 1 ( 0.2773 0.4110 -0.7783) 1.00 0.0000
Below shows the expected fractional coordinates as expected. Based on the space group P 32 2 1.
0.4643 0.0000 0.6667 0.0000 0.4643 0.3333 -0.4643 -0.4643 0.0000 0.4110 0.2773 0.7783 -0.2773 0.1337 0.4450 -0.1337 -0.4110 0.1116 0.1337 -0.2773 -0.4450 -0.4110 -0.1337 -0.1116 0.2773 0.4110 -0.7783
Any insight into this would be of help. I am hoping to use cctbx as a part of our current software development project.
Thanks,
D.Andrew Carr [email protected]
# Below is the code that generates the error # posted above. #--------------------------------------------------- from cctbx import xray from cctbx import crystal from cctbx.array_family import flex
def demo(): crystal_symmetry = crystal.symmetry( unit_cell="4.8430, 4.8430, 5.3480, 90.0, 90.0, 120.0", space_group_symbol="P 32 2 1") scatterers = flex.xray_scatterer() scatterers.append(xray.scatterer( label="Si", site=(0.4643,0.0,0.6667))) scatterers.append(xray.scatterer( label="O", site=(0.411,0.2773,0.7783))) icsd_structure = xray.structure( crystal_symmetry=crystal_symmetry, scatterers=scatterers) print "ICSD Structure" icsd_structure.show_summary().show_scatterers() print icsd_structure.show_distances(distance_cutoff=2.5) print "Primitive" primitive_structure = icsd_structure.primitive_setting() primitive_structure.show_summary().show_scatterers() print p1_structure = primitive_structure.expand_to_p1() p1_structure.show_summary().show_scatterers() print print "Expanded to P1" icsd_structure.expand_to_p1().show_summary().show_scatterers() print "OK"
if (__name__ == "__main__"): demo()