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/python";
12 
13 sys.path.append ( proshadePath );
14 import 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  setUp.appendStructure ( str( sys.argv[ 1 ] ) );
113 
114 
116 runProshade = proshade.ProSHADE ( setUp );
117 
118 
120 cyclicSymmetries = runProshade.getCyclicSymmetriesPy ( );
121 dihedralSymmetries = runProshade.getDihedralSymmetriesPy ( );
122 tetrahedralSymmetries = runProshade.getTetrahedralSymmetriesPy ( );
123 octahedralSymmetries = runProshade.getOctahedralSymmetriesPy ( );
124 icosahedralSymmetries = runProshade.getIcosahedralSymmetriesPy ( );
125 symElemsRecommended = runProshade.getRecommendedSymmetryElementsPy ( );
126 symElemsRequested = runProshade.getSpecificSymmetryElementsPy ( "C", 4 );
127 
128 
130 sys.stdout.write ( "ProSHADE module version: " + runProshade.getProSHADEVersion ( ) + "\n" );
131 sys.stdout.write ( "\n" );
132 sys.stdout.flush ( );
133 
134 # ... Cyclic symmetries
135 sys.stdout.write ( "Cyclic symmetry axes detected:\n" );
136 sys.stdout.write ( "-----------------------------------------------------------\n" );
137 sys.stdout.write ( "Symmetry Fold x y z Angle Peak \n" );
138 sys.stdout.write ( " Type (rad) height \n" );
139 sys.stdout.write ( "-----------------------------------------------------------\n" );
140 
141 myAxes = parseDVecFromProshade ( cyclicSymmetries );
142 for it in range ( 0, len ( myAxes ) ):
143  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" );
144 sys.stdout.write ( "\n" );
145 sys.stdout.flush ( );
146 
147 # ... Dihedral symmetries
148 sys.stdout.write ( "Dihedral symmetry axes detected:\n" );
149 sys.stdout.write ( "-----------------------------------------------------------\n" );
150 sys.stdout.write ( "Symmetry Fold x y z Angle Peak \n" );
151 sys.stdout.write ( " Type (rad) height \n" );
152 sys.stdout.write ( "-----------------------------------------------------------\n" );
153 
154 mySymmetry = parseDVecDVecFromProshade ( dihedralSymmetries );
155 for sym in range ( 0, len( mySymmetry ) ):
156  myAxes = mySymmetry[sym];
157  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" );
158  for subAx in range ( 1, len( mySymmetry[sym] ) ):
159  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" );
160 sys.stdout.write ( "\n" );
161 sys.stdout.flush ( );
162 
163 # ... Tetrahedral symmetries
164 sys.stdout.write ( "Tetrahedral symmetry axes detected:\n" );
165 sys.stdout.write ( "-----------------------------------------------------------\n" );
166 sys.stdout.write ( "Symmetry Fold x y z Angle Peak \n" );
167 sys.stdout.write ( " Type (rad) height \n" );
168 sys.stdout.write ( "-----------------------------------------------------------\n" );
169 
170 myAxes = parseDVecFromProshade ( tetrahedralSymmetries );
171 for it in range ( 0, len ( myAxes ) ):
172  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" );
173 sys.stdout.write ( "\n" );
174 sys.stdout.flush ( );
175 
176 # ... Octahedral symmetries
177 sys.stdout.write ( "Octahedral symmetry axes detected:\n" );
178 sys.stdout.write ( "-----------------------------------------------------------\n" );
179 sys.stdout.write ( "Symmetry Fold x y z Angle Peak \n" );
180 sys.stdout.write ( " Type (rad) height \n" );
181 sys.stdout.write ( "-----------------------------------------------------------\n" );
182 
183 myAxes = parseDVecFromProshade ( octahedralSymmetries );
184 for it in range ( 0, len ( myAxes ) ):
185  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" );
186 sys.stdout.write ( "\n" );
187 sys.stdout.flush ( );
188 
189 # ... Icosahedral symmetries
190 sys.stdout.write ( "Icosahedral symmetry axes detected:\n" );
191 sys.stdout.write ( "-----------------------------------------------------------\n" );
192 sys.stdout.write ( "Symmetry Fold x y z Angle Peak \n" );
193 sys.stdout.write ( " Type (rad) height \n" );
194 sys.stdout.write ( "-----------------------------------------------------------\n" );
195 
196 myAxes = parseDVecFromProshade ( icosahedralSymmetries );
197 for it in range ( 0, len ( myAxes ) ):
198  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" );
199 sys.stdout.write ( "\n" );
200 sys.stdout.flush ( );
201 
202 # ... Recommended (simple highest peak approach, this will be improved in the future, do not take the work 'recommended' too seriously) symmetry elements
203 sys.stdout.write ( "-----------------------------------------------------------\n" );
204 sys.stdout.write ( "-----------------------------------------------------------\n" );
205 sys.stdout.write ( "Recommended symmetry: " );
206 if len ( parseDVecFromProshade ( icosahedralSymmetries ) ) > 0:
207  sys.stdout.write ( "ICOSAHEDRAL\n" );
208 elif len ( parseDVecFromProshade ( octahedralSymmetries ) ) > 0:
209  sys.stdout.write ( "OCTAHEDRAL\n" );
210 elif len ( parseDVecFromProshade ( tetrahedralSymmetries ) ) > 0:
211  sys.stdout.write ( "TETRAHEDRAL\n" );
212 elif len ( parseDVecDVecFromProshade ( dihedralSymmetries ) ) > 0:
213  sys.stdout.write ( "DIHEDRAL\n" );
214 elif len ( parseDVecFromProshade ( cyclicSymmetries ) ) > 0:
215  sys.stdout.write ( "CYCLIC\n" );
216 sys.stdout.write ( "-----------------------------------------------------------\n" );
217 sys.stdout.write ( "-----------------------------------------------------------\n\n" );
218 sys.stdout.write ( "Recommended symmetry elements table: \n" );
219 sys.stdout.write ( "-----------------------------------------------------------\n" );
220 sys.stdout.write ( "Symmetry x y z Angle \n" );
221 sys.stdout.write ( " Type (rad) \n" );
222 sys.stdout.write ( "-----------------------------------------------------------\n" );
223 
224 myElems = parseDVecFromProshade ( symElemsRecommended );
225 if len ( myElems ) > 0:
226  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" );
227  for elem in range ( 1, len( myElems ) ):
228  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" );
229 sys.stdout.write ( "\n" );
230 sys.stdout.flush ( );
231 
232 # ... Requested symmetry elements
233 sys.stdout.write ( "Requested symmetry elements table: \n" );
234 sys.stdout.write ( "-----------------------------------------------------------\n" );
235 sys.stdout.write ( "Symmetry x y z Angle \n" );
236 sys.stdout.write ( " Type (rad) \n" );
237 sys.stdout.write ( "-----------------------------------------------------------\n" );
238 
239 myElems = parseDVecFromProshade ( symElemsRequested );
240 if len ( myElems ) > 0:
241  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" );
242  for elem in range ( 1, len( myElems ) ):
243  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" );
244 sys.stdout.write ( "\n" );
245 sys.stdout.flush ( );
246 
247 
249 quit ( );
250