ProSHADE  0.6.5 (NOV 2018)
Protein Shape Descriptors and Symmetry Detection
All Classes Namespaces Files Functions Variables Pages
getSymmetry.py
1 
4 
5 
7 import sys;
8 import os;
9 
10 cwd = os.getcwd ( );
11 proshadePath = cwd + "/../install/python3";
12 
13 sys.path.append ( proshadePath );
14 import proshade3 as proshade;
15 
16 
18 def parseDVecFromProshade ( cSyms ):
19  vecIt = 0;
20  myAxis = [];
21  myAxes = [];
22  while True:
23  if vecIt == len ( cSyms ):
24  break;
25  if cSyms [ vecIt ] == -999.999:
26  myAxes.append ( myAxis )
27  myAxis = [];
28  vecIt = vecIt + 1;
29  else:
30  myAxis.append ( cSyms[vecIt] );
31  vecIt = vecIt + 1;
32  return myAxes;
33 
34 def parseDVecDVecFromProshade ( dSym ):
35  vecIt = 0;
36  myAxis = [];
37  myAxes = [];
38  mySymmetry = [];
39  while True:
40  if vecIt == len ( dSym ):
41  break;
42  if dSym [ vecIt ] == -999.999:
43  myAxes.append ( myAxis );
44  myAxis = [];
45  vecIt = vecIt + 1;
46  elif dSym [ vecIt ] == -777.777:
47  mySymmetry.append ( myAxes );
48  myAxes = [];
49  myAxis = [];
50  vecIt = vecIt + 1;
51  else:
52  myAxis.append ( dSym[vecIt] );
53  vecIt = vecIt + 1;
54  return mySymmetry;
55 
56 
58 setUp = proshade.ProSHADE_settings ();
59 
60 
62 setUp.mapResolution = 6.0;
63 setUp.bandwidth = 0;
64 setUp.glIntegOrder = 0;
65 setUp.theta = 0;
66 setUp.phi = 0;
67 
68 # ... Settings regarding B factors
69 setUp.bFactorValue = 80.0;
70 setUp.bFactorChange = 0.0;
71 
72 # ... Setting regarding maps and removing noise
73 setUp.noIQRsFromMap = 4.0;
74 
75 # ... Settings regarding concentric shells
76 setUp.shellSpacing = 0.0;
77 setUp.manualShells = 0;
78 
79 # ... Settings regarding map with phases
80 setUp.useCOM = False;
81 setUp.maskBlurFactor = 500.0;
82 setUp.maskBlurFactorGiven = False;
83 
84 # ... Settings regarding space around the structure in lattice
85 setUp.extraSpace = 8.0;
86 
87 # ... Settings regarding peak detection
88 setUp.peakHeightNoIQRs = 3.0;
89 setUp.peakDistanceForReal = 0.20;
90 setUp.peakSurroundingPoints = 1;
91 
92 # ... Settings regarding tolerances
93 setUp.aaErrorTolerance = 0.1;
94 setUp.symGapTolerance = 0.3;
95 
96 # ... Settings regarding the task
97 setUp.taskToPerform = proshade.Symmetry;
98 
99 # ... Settings regarding the symmetry type required
100 setUp.symmetryFold = 0;
101 setUp.symmetryType = "";
102 
103 # ... Settings regarding loudness
104 setUp.verbose = -1;
105 setUp.htmlReport = False;
106 
107 # ... Get command line info
108 if len(sys.argv) < 2:
109  print ( "Usage: python getSymmetry.py [filename1] to get symmetry information for structure in [filename1]." );
110  quit ( -1 );
111 else:
112  hlpPyStrVec = proshade.StringList( len(sys.argv)-1 );
113  hlpPyStrVec[ 0 ] = str( sys.argv[ 1 ] );
114 
115 # ... set the file list
116 setUp.structFiles = hlpPyStrVec;
117 
118 
120 runProshade = proshade.ProSHADE ( setUp );
121 
122 
124 cyclicSymmetries = runProshade.getCyclicSymmetriesPy ( );
125 dihedralSymmetries = runProshade.getDihedralSymmetriesPy ( );
126 tetrahedralSymmetries = runProshade.getTetrahedralSymmetriesPy ( );
127 octahedralSymmetries = runProshade.getOctahedralSymmetriesPy ( );
128 icosahedralSymmetries = runProshade.getIcosahedralSymmetriesPy ( );
129 symElemsRecommended = runProshade.getRecommendedSymmetryElementsPy ( );
130 symElemsRequested = runProshade.getSpecificSymmetryElementsPy ( "C", 4 );
131 
132 
134 sys.stdout.write ( "ProSHADE module version: " + runProshade.getProSHADEVersion ( ) + "\n" );
135 sys.stdout.write ( "\n" );
136 sys.stdout.flush ( );
137 
138 # ... Cyclic symmetries
139 sys.stdout.write ( "Cyclic symmetry axes detected:\n" );
140 sys.stdout.write ( "-----------------------------------------------------------\n" );
141 sys.stdout.write ( "Symmetry Fold x y z Angle Peak \n" );
142 sys.stdout.write ( " Type (rad) height \n" );
143 sys.stdout.write ( "-----------------------------------------------------------\n" );
144 
145 myAxes = parseDVecFromProshade ( cyclicSymmetries );
146 for it in range ( 0, len ( myAxes ) ):
147  sys.stdout.write ( " C %d %+1.3f %+1.3f %+1.3f %+1.3f %+1.3f" % ( myAxes[it][0], myAxes[it][1], myAxes[it][2], myAxes[it][3], 6.282 / myAxes[it][0], myAxes[it][4] ) + "\n" );
148 sys.stdout.write ( "\n" );
149 sys.stdout.flush ( );
150 
151 # ... Dihedral symmetries
152 sys.stdout.write ( "Dihedral symmetry axes detected:\n" );
153 sys.stdout.write ( "-----------------------------------------------------------\n" );
154 sys.stdout.write ( "Symmetry Fold x y z Angle Peak \n" );
155 sys.stdout.write ( " Type (rad) height \n" );
156 sys.stdout.write ( "-----------------------------------------------------------\n" );
157 
158 mySymmetry = parseDVecDVecFromProshade ( dihedralSymmetries );
159 for sym in range ( 0, len( mySymmetry ) ):
160  myAxes = mySymmetry[sym];
161  sys.stdout.write ( " D %d %+1.3f %+1.3f %+1.3f %+1.3f %+1.3f" % ( myAxes[0][0], myAxes[0][1], myAxes[0][2], myAxes[0][3], 6.282 / myAxes[0][0], myAxes[0][4] ) + "\n" );
162  for subAx in range ( 1, len( mySymmetry[sym] ) ):
163  sys.stdout.write ( " %d %+1.3f %+1.3f %+1.3f %+1.3f %+1.3f" % ( myAxes[subAx][0], myAxes[subAx][1], myAxes[subAx][2], myAxes[subAx][3], 6.282 / myAxes[subAx][0], myAxes[subAx][4] ) + "\n" );
164 sys.stdout.write ( "\n" );
165 sys.stdout.flush ( );
166 
167 # ... Tetrahedral symmetries
168 sys.stdout.write ( "Tetrahedral symmetry axes detected:\n" );
169 sys.stdout.write ( "-----------------------------------------------------------\n" );
170 sys.stdout.write ( "Symmetry Fold x y z Angle Peak \n" );
171 sys.stdout.write ( " Type (rad) height \n" );
172 sys.stdout.write ( "-----------------------------------------------------------\n" );
173 
174 myAxes = parseDVecFromProshade ( tetrahedralSymmetries );
175 for it in range ( 0, len ( myAxes ) ):
176  sys.stdout.write ( " T %d %+1.3f %+1.3f %+1.3f %+1.3f %+1.3f" % ( myAxes[it][0], myAxes[it][1], myAxes[it][2], myAxes[it][3], 6.282 / myAxes[it][0], myAxes[it][4] ) + "\n" );
177 sys.stdout.write ( "\n" );
178 sys.stdout.flush ( );
179 
180 # ... Octahedral symmetries
181 sys.stdout.write ( "Octahedral symmetry axes detected:\n" );
182 sys.stdout.write ( "-----------------------------------------------------------\n" );
183 sys.stdout.write ( "Symmetry Fold x y z Angle Peak \n" );
184 sys.stdout.write ( " Type (rad) height \n" );
185 sys.stdout.write ( "-----------------------------------------------------------\n" );
186 
187 myAxes = parseDVecFromProshade ( octahedralSymmetries );
188 for it in range ( 0, len ( myAxes ) ):
189  sys.stdout.write ( " O %d %+1.3f %+1.3f %+1.3f %+1.3f %+1.3f" % ( myAxes[it][0], myAxes[it][1], myAxes[it][2], myAxes[it][3], 6.282 / myAxes[it][0], myAxes[it][4] ) + "\n" );
190 sys.stdout.write ( "\n" );
191 sys.stdout.flush ( );
192 
193 # ... Icosahedral symmetries
194 sys.stdout.write ( "Icosahedral symmetry axes detected:\n" );
195 sys.stdout.write ( "-----------------------------------------------------------\n" );
196 sys.stdout.write ( "Symmetry Fold x y z Angle Peak \n" );
197 sys.stdout.write ( " Type (rad) height \n" );
198 sys.stdout.write ( "-----------------------------------------------------------\n" );
199 
200 myAxes = parseDVecFromProshade ( icosahedralSymmetries );
201 for it in range ( 0, len ( myAxes ) ):
202  sys.stdout.write ( " I %d %+1.3f %+1.3f %+1.3f %+1.3f %+1.3f" % ( myAxes[it][0], myAxes[it][1], myAxes[it][2], myAxes[it][3], 6.282 / myAxes[it][0], myAxes[it][4] ) + "\n" );
203 sys.stdout.write ( "\n" );
204 sys.stdout.flush ( );
205 
206 # ... Recommended (simple highest peak approach, this will be improved in the future, do not take the work 'recommended' too seriously) symmetry elements
207 sys.stdout.write ( "-----------------------------------------------------------\n" );
208 sys.stdout.write ( "-----------------------------------------------------------\n" );
209 sys.stdout.write ( "Recommended symmetry: " );
210 if len ( parseDVecFromProshade ( icosahedralSymmetries ) ) > 0:
211  sys.stdout.write ( "ICOSAHEDRAL\n" );
212 elif len ( parseDVecFromProshade ( octahedralSymmetries ) ) > 0:
213  sys.stdout.write ( "OCTAHEDRAL\n" );
214 elif len ( parseDVecFromProshade ( tetrahedralSymmetries ) ) > 0:
215  sys.stdout.write ( "TETRAHEDRAL\n" );
216 elif len ( parseDVecDVecFromProshade ( dihedralSymmetries ) ) > 0:
217  sys.stdout.write ( "DIHEDRAL\n" );
218 elif len ( parseDVecFromProshade ( cyclicSymmetries ) ) > 0:
219  sys.stdout.write ( "CYCLIC\n" );
220 sys.stdout.write ( "Recommended symmetry elements table: \n" );
221 sys.stdout.write ( "-----------------------------------------------------------\n" );
222 sys.stdout.write ( "Symmetry x y z Angle \n" );
223 sys.stdout.write ( " Type (rad) \n" );
224 sys.stdout.write ( "-----------------------------------------------------------\n" );
225 
226 myElems = parseDVecFromProshade ( symElemsRecommended );
227 if len ( myElems ) > 0:
228  sys.stdout.write ( " E %+1.3f %+1.3f %+1.3f %+1.3f" % ( myElems[0][1], myElems[0][2], myElems[0][3], myElems[0][4] ) + "\n" );
229  for elem in range ( 1, len( myElems ) ):
230  sys.stdout.write ( " C%d %+1.3f %+1.3f %+1.3f %+1.3f" % ( myElems[elem][0], myElems[elem][1], myElems[elem][2], myElems[elem][3], myElems[elem][4] ) + "\n" );
231 sys.stdout.write ( "\n" );
232 sys.stdout.flush ( );
233 
234 # ... Requested symmetry elements
235 sys.stdout.write ( "Requested symmetry elements table: \n" );
236 sys.stdout.write ( "-----------------------------------------------------------\n" );
237 sys.stdout.write ( "Symmetry x y z Angle \n" );
238 sys.stdout.write ( " Type (rad) \n" );
239 sys.stdout.write ( "-----------------------------------------------------------\n" );
240 
241 myElems = parseDVecFromProshade ( symElemsRequested );
242 if len ( myElems ) > 0:
243  sys.stdout.write ( " E %+1.3f %+1.3f %+1.3f %+1.3f" % ( myElems[0][1], myElems[0][2], myElems[0][3], myElems[0][4] ) + "\n" );
244  for elem in range ( 1, len( myElems ) ):
245  sys.stdout.write ( " C%d %+1.3f %+1.3f %+1.3f %+1.3f" % ( myElems[elem][0], myElems[elem][1], myElems[elem][2], myElems[elem][3], myElems[elem][4] ) + "\n" );
246 sys.stdout.write ( "\n" );
247 sys.stdout.flush ( );
248 
249 
251 quit ( );
252