11#!/usr/bin/env python
22
3- ''' Quick and extremely dirty script for generating code for SpaceGroup that
3+ """ Quick and extremely dirty script for generating code for SpaceGroup that
44are defined in cctbx, but not in mmLib. It was used to generate module
55sgtbxspacegroups.
66
77This is a utility script that should not be included with code distribution.
88
99Not to be included with code distributions.
10- '''
10+ """
1111
1212
13- import re
1413import math
14+ import re
15+
1516import numpy
16- from diffpy .structure .spacegroups import SpaceGroup , SymOp
17- from diffpy .structure .spacegroups import mmLibSpaceGroupList
18- from diffpy .structure .spacegroups import IsSpaceGroupIdentifier
1917from cctbx import sgtbx
2018
19+ from diffpy .structure .spacegroups import IsSpaceGroupIdentifier , SpaceGroup , SymOp , mmLibSpaceGroupList
20+
21+
2122def tupleToSGArray (tpl ):
2223 if not _rtarrays :
2324 import diffpy .structure .SpaceGroups as sgmod
25+
2426 for n in dir (sgmod ):
25- if not n .startswith ('Rot_' ) and not n .startswith ('Tr_' ): continue
27+ if not n .startswith ("Rot_" ) and not n .startswith ("Tr_" ):
28+ continue
2629 a = getattr (sgmod , n )
2730 t = tuple (a .flatten ())
2831 _rtarrays [t ] = a
@@ -31,29 +34,30 @@ def tupleToSGArray(tpl):
3134 if tpl not in _rtarrays :
3235 _rtarrays [tpl ] = numpy .array (tpl , dtype = float )
3336 return _rtarrays [tpl ]
37+
38+
3439_rtarrays = {}
3540
3641
3742def mmSpaceGroupFromSymbol (symbol ):
38- """Construct SpaceGroup instance from a string symbol using sgtbx data.
39- """
43+ """Construct SpaceGroup instance from a string symbol using sgtbx data."""
4044 sginfo = sgtbx .space_group_info (symbol )
4145 symop_list = []
4246 symop_list = getSymOpList (sginfo .group ())
4347 sgtype = sginfo .type ()
4448 uhm = sgtype .lookup_symbol ()
4549 sgsmbls = sgtbx .space_group_symbols (uhm )
4650 kw = {}
47- kw [' number' ] = sgtype .number ()
48- kw [' num_sym_equiv' ] = len (symop_list )
49- kw [' num_primitive_sym_equiv' ] = countUniqueRotations (symop_list )
50- kw [' short_name' ] = sgsmbls .hermann_mauguin ().replace (' ' , '' )
51+ kw [" number" ] = sgtype .number ()
52+ kw [" num_sym_equiv" ] = len (symop_list )
53+ kw [" num_primitive_sym_equiv" ] = countUniqueRotations (symop_list )
54+ kw [" short_name" ] = sgsmbls .hermann_mauguin ().replace (" " , "" )
5155 pgt = sgsmbls .point_group_type ()
52- pgn = "PG" + re .sub (r' -(\d)' , ' \\ 1bar' , pgt )
53- kw [' point_group_name' ] = pgn
54- kw [' crystal_system' ] = sgsmbls .crystal_system ().upper ()
55- kw [' pdb_name' ] = sgsmbls .hermann_mauguin ()
56- kw [' symop_list' ] = symop_list
56+ pgn = "PG" + re .sub (r" -(\d)" , " \\ 1bar" , pgt )
57+ kw [" point_group_name" ] = pgn
58+ kw [" crystal_system" ] = sgsmbls .crystal_system ().upper ()
59+ kw [" pdb_name" ] = sgsmbls .hermann_mauguin ()
60+ kw [" symop_list" ] = symop_list
5761 mmsg = SpaceGroup (** kw )
5862 return mmsg
5963
@@ -87,7 +91,8 @@ def countUniqueRotations(symop_list):
8791
8892
8993def cmpSpaceGroups (sg0 , sg1 ):
90- if sg0 is sg1 : return True
94+ if sg0 is sg1 :
95+ return True
9196 s0 = hashMMSpaceGroup (sg0 )
9297 s1 = hashMMSpaceGroup (sg1 )
9398 return s0 == s1
@@ -100,6 +105,8 @@ def findEquivalentMMSpaceGroup(grp):
100105 _equivmmsg .setdefault (ssgn , sgn )
101106 ssg = hashSgtbxGroup (grp )
102107 return _equivmmsg .get (ssg )
108+
109+
103110_equivmmsg = {}
104111
105112
@@ -112,24 +119,27 @@ def findEquivalentSgtbxSpaceGroup(sgmm):
112119 _equivsgtbx .setdefault (hgrp , grp )
113120 hgmm = hashMMSpaceGroup (sgmm )
114121 return _equivsgtbx .get (hgmm )
122+
123+
115124_equivsgtbx = {}
116125
117126
118127def hashMMSpaceGroup (sg ):
119128 lines = [str (sg .number % 1000 )] + sorted (map (str , sg .iter_symops ()))
120- s = ' \n ' .join (lines )
129+ s = " \n " .join (lines )
121130 return s
122131
123132
124133def hashSgtbxGroup (grp ):
125134 n = grp .type ().number ()
126135 lines = [str (n )] + sorted (map (str , getSymOpList (grp )))
127- s = ' \n ' .join (lines )
136+ s = " \n " .join (lines )
128137 return s
129138
139+
130140sgnumbers = [sg .number for sg in mmLibSpaceGroupList ]
131141
132- _SGsrc = ''' \
142+ _SGsrc = """ \
133143 sg%(number)i = SpaceGroup(
134144 number = %(number)i,
135145 num_sym_equiv = %(num_sym_equiv)i,
@@ -142,32 +152,37 @@ def hashSgtbxGroup(grp):
142152 @SYMOPS@
143153 ]
144154)
145- '''
155+ """
156+
146157
147158def SGCode (mmsg ):
148159 src0 = _SGsrc % mmsg .__dict__
149- src1 = src0 .replace (' @SYMOPS@' , SymOpsCode (mmsg ))
160+ src1 = src0 .replace (" @SYMOPS@" , SymOpsCode (mmsg ))
150161 return src1
151162
152163
153164def SymOpsCode (mmsg ):
154- lst = ["%8s%s," % ('' , SymOpCode (op )) for op in mmsg .iter_symops ()]
155- src = ' \n ' .join (lst ).strip ()
165+ lst = ["%8s%s," % ("" , SymOpCode (op )) for op in mmsg .iter_symops ()]
166+ src = " \n " .join (lst ).strip ()
156167 return src
157168
158169
159170def SymOpCode (op ):
160171 if not _rtnames :
161172 import diffpy .structure .SpaceGroups as sgmod
173+
162174 for n in dir (sgmod ):
163- if not n .startswith ('Rot_' ) and not n .startswith ('Tr_' ): continue
175+ if not n .startswith ("Rot_" ) and not n .startswith ("Tr_" ):
176+ continue
164177 a = getattr (sgmod , n )
165178 at = tuple (a .flatten ())
166- _rtnames [at ] = ' sgmod.' + n
179+ _rtnames [at ] = " sgmod." + n
167180 nR = _rtnames [tuple (op .R .flatten ())]
168181 nt = _rtnames [tuple (op .t )]
169- src = ' SymOp(%s, %s)' % (nR , nt )
182+ src = " SymOp(%s, %s)" % (nR , nt )
170183 return src
184+
185+
171186_rtnames = {}
172187
173188
@@ -176,16 +191,20 @@ def main():
176191 for smbls in sgtbx .space_group_symbol_iterator ():
177192 uhm = smbls .universal_hermann_mauguin ()
178193 grp = sgtbx .space_group_info (uhm ).group ()
179- if findEquivalentMMSpaceGroup (grp ): continue
180- shn = smbls .hermann_mauguin ().replace (' ' , '' )
181- if IsSpaceGroupIdentifier (shn ): continue
194+ if findEquivalentMMSpaceGroup (grp ):
195+ continue
196+ shn = smbls .hermann_mauguin ().replace (" " , "" )
197+ if IsSpaceGroupIdentifier (shn ):
198+ continue
182199 sg = mmSpaceGroupFromSymbol (uhm )
183200 hsg = hashMMSpaceGroup (sg )
184- if hsg in duplicates : continue
201+ if hsg in duplicates :
202+ continue
185203 adjustMMSpaceGroupNumber (sg )
186204 duplicates .add (hsg )
187205 print (SGCode (sg ))
188206 return
189207
190- if __name__ == '__main__' :
208+
209+ if __name__ == "__main__" :
191210 main ()
0 commit comments