1   
  2   
  3   
  4   
  5   
  6   
  7   
  8   
  9   
 10   
 11   
 12   
 13   
 14   
 15   
 16   
 17   
 18   
 19   
 20   
 21   
 22   
 23   
 24   
 25  from math import pi 
 26  from os import sep 
 27  from tempfile import mkdtemp 
 28   
 29   
 30  from base_classes import SystemTestCase 
 31  from data import Relax_data_store; ds = Relax_data_store() 
 32  from generic_fns import pipes 
 33  from generic_fns.mol_res_spin import return_spin 
 34  from relax_errors import RelaxError 
 35  from relax_io import test_binary 
 36  from status import Status; status = Status() 
 37   
 38   
 40      """Class for testing various aspects specific to model-free analysis using the program 'Modelfree4'.""" 
 41   
 43          """Set up for all the functional tests.""" 
 44   
 45           
 46          ds.tmpdir = mkdtemp() 
  47   
 48   
 50          """Test a complete model-free analysis using the program 'Modelfree4'.""" 
 51   
 52           
 53          try: 
 54              test_binary('modelfree4') 
 55          except: 
 56              return 
 57   
 58           
 59          self.interpreter.run(script_file=status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'palmer.py') 
 60   
 61           
 62          spin = return_spin(':0', pipe='m2') 
 63          if spin.te == 1.951*1e-12: 
 64              compiler = 'gcc'     
 65          else: 
 66              compiler = 'pgf'     
 67   
 68           
 69          models = ['m1', 'm2', 'm3'] 
 70          params = [['s2'], ['s2', 'te'], ['s2', 'rex']] 
 71          spin_names = [':-2&:Gly', ':-1&:Gly', ':0&:Gly'] 
 72          if compiler == 'gcc': 
 73              s2 = [[0.869, 0.732, None], [0.869, 0.730, None], [0.715, 0.643, None]] 
 74              te = [[None, None, None], [0.0, 1.951, None], [None, None, None]]     
 75              rex = [[None, None, None], [None, None, None], [4.308, 4.278, None]] 
 76          else: 
 77              s2 = [[0.869, 0.732, None], [0.869, 0.730, None], [0.715, 0.643, None]] 
 78              te = [[None, None, None], [0.0, 1.952, None], [None, None, None]]     
 79              rex = [[None, None, None], [None, None, None], [4.308, 4.278, None]] 
 80          chi2 = [[36.6223, 20.3954, None], [36.6223, 20.3299, None], [1.9763, 0.6307, None]] 
 81          for model_index in xrange(3): 
 82              print(("Model " + repr(models[model_index]))) 
 83              for spin_index in xrange(3): 
 84                  print(("Spin " + repr(spin_names[spin_index]))) 
 85   
 86                   
 87                  spin = return_spin(spin_names[spin_index], pipe=models[model_index]) 
 88   
 89                   
 90                  if te[model_index][spin_index]: 
 91                      te[model_index][spin_index] = te[model_index][spin_index] * 1e-12 
 92                  if rex[model_index][spin_index]: 
 93                      rex[model_index][spin_index] = rex[model_index][spin_index] / (2.0 * pi * cdp.frq[cdp.ri_ids[0]])**2 
 94   
 95                   
 96                  self.assertEqual(spin.model, models[model_index]) 
 97                  self.assertEqual(spin.params, params[model_index]) 
 98                  self.assertEqual(spin.s2, s2[model_index][spin_index]) 
 99                  self.assertEqual(spin.s2f, None) 
100                  self.assertEqual(spin.s2s, None) 
101                  if te[model_index][spin_index] == None: 
102                      self.assertEqual(spin.te, te[model_index][spin_index]) 
103                  else: 
104                      self.assertAlmostEqual(spin.te, te[model_index][spin_index]) 
105                  self.assertEqual(spin.tf, None) 
106                  self.assertEqual(spin.ts, None) 
107                  self.assertEqual(spin.rex, rex[model_index][spin_index]) 
108                  self.assertEqual(spin.chi2, chi2[model_index][spin_index]) 
109   
110           
111          models = ['m3', 'm3'] 
112          params = [['s2', 'rex'], ['s2', 'rex']] 
113          s2 = [0.844, 0.760] 
114          te = [None, None] 
115          rex = [0.005, 0.404] 
116          chi2 = [1.7966, 0.7389] 
117          for spin_index in xrange(3): 
118               
119              spin = return_spin(spin_names[spin_index], pipe='aic') 
120   
121               
122              if not spin.select: 
123                  continue 
124   
125               
126              if te[spin_index]: 
127                  te[spin_index] = te[spin_index] * 1e-12 
128              if rex[spin_index]: 
129                  rex[spin_index] = rex[spin_index] / (2.0 * pi * cdp.frq[cdp.ri_ids[0]])**2 
130   
131               
132              self.assertEqual(spin.model, models[spin_index]) 
133              self.assertEqual(spin.params, params[spin_index]) 
134              self.assertEqual(spin.s2, s2[spin_index]) 
135              self.assertEqual(spin.s2f, None) 
136              self.assertEqual(spin.s2s, None) 
137              self.assertEqual(spin.te, te[spin_index]) 
138              self.assertEqual(spin.tf, None) 
139              self.assertEqual(spin.ts, None) 
140              self.assertEqual(spin.rex, rex[spin_index]) 
141              self.assertEqual(spin.chi2, chi2[spin_index]) 
142   
143           
144          final_pipe = pipes.get_pipe('aic') 
145          self.assertEqual(final_pipe.chi2, 2.5356) 
146          self.assertEqual(final_pipe.diff_tensor.tm, 12.045) 
 147   
148   
150          """Test a complete model-free analysis using 'Modelfree4' with the OMP relaxation data, a PDB file, and a spheroid tensor.""" 
151   
152           
153          try: 
154              test_binary('modelfree4') 
155          except: 
156              return 
157   
158           
159          self.interpreter.run(script_file=status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'palmer_omp.py') 
160   
161           
162          spin = return_spin(':9', pipe='m2') 
163          if spin.s2 == 0.855: 
164              raise RelaxError("You are using an old, buggy Modelfree4 version!  You must upgrade to version 4.20 or later.") 
165   
166           
167          if spin.te == 20.043*1e-12: 
168              compiler = 'gcc'     
169          else: 
170              compiler = 'pgf'     
171   
172           
173          models = ['m1', 'm2', 'm3'] 
174          params = [['s2'], ['s2', 'te'], ['s2', 'rex']] 
175          spin_names = [':9', ':10', ':11'] 
176          s2 = [[0.822, 0.799, 0.823], [0.788, 0.777, 0.812], [0.822, 0.799, 0.823]] 
177          if compiler == 'gcc': 
178              te = [[None, None, None], [61.506, 36.084, 20.043], [None, None, None]] 
179          else: 
180              te = [[None, None, None], [61.506, 36.087, 20.039], [None, None, None]] 
181          rex = [[None, None, None], [None, None, None], [0.0, 0.0, 0.0]] 
182          chi2 = [[143.6773, 105.1767, 61.6684], [40.9055, 57.1562, 48.4927], [143.6773, 105.1767, 61.6684]] 
183   
184           
185          for model_index in xrange(3): 
186              print(("Model " + repr(models[model_index]))) 
187              for spin_index in xrange(3): 
188                  print(("Spin " + repr(spin_names[spin_index]))) 
189   
190                   
191                  spin = return_spin(spin_names[spin_index], pipe=models[model_index]) 
192   
193                   
194                  if te[model_index][spin_index]: 
195                      te[model_index][spin_index] = te[model_index][spin_index] * 1e-12 
196                  if rex[model_index][spin_index]: 
197                      rex[model_index][spin_index] = rex[model_index][spin_index] / (2.0 * pi * cdp.frq[cdp.ri_ids[0]])**2 
198   
199                   
200                  self.assertEqual(spin.model, models[model_index]) 
201                  self.assertEqual(spin.params, params[model_index]) 
202                  self.assertEqual(spin.s2, s2[model_index][spin_index]) 
203                  self.assertEqual(spin.s2f, None) 
204                  self.assertEqual(spin.s2s, None) 
205                  self.assertEqual(spin.te, te[model_index][spin_index]) 
206                  self.assertEqual(spin.tf, None) 
207                  self.assertEqual(spin.ts, None) 
208                  self.assertEqual(spin.rex, rex[model_index][spin_index]) 
209                  self.assertEqual(spin.chi2, chi2[model_index][spin_index]) 
210   
211           
212          models = ['m2', 'm2', 'm2'] 
213          params = [['s2', 'te'], ['s2', 'te'], ['s2', 'te']] 
214          if compiler == 'gcc': 
215              s2 = [0.782, 0.760, 0.785] 
216              te = [60.009, 29.134, 12.590] 
217              chi2 = [24.0495, 8.1168, 0.5332] 
218          else: 
219              s2 = [0.755, 0.761, 0.787] 
220              te = [52.197, 29.361, 12.677] 
221              chi2 = [7.254, 8.0437, 0.5327] 
222   
223           
224          for spin_index in xrange(3): 
225               
226              spin = return_spin(spin_names[spin_index], pipe='aic') 
227   
228               
229              if te[spin_index]: 
230                  te[spin_index] = te[spin_index] * 1e-12 
231   
232               
233              self.assertEqual(spin.model, models[spin_index]) 
234              self.assertEqual(spin.params, params[spin_index]) 
235              self.assertEqual(spin.s2, s2[spin_index]) 
236              self.assertEqual(spin.s2f, None) 
237              self.assertEqual(spin.s2s, None) 
238              self.assertAlmostEqual(spin.te, te[spin_index]) 
239              self.assertEqual(spin.tf, None) 
240              self.assertEqual(spin.ts, None) 
241              self.assertEqual(spin.rex, None) 
242              self.assertEqual(spin.chi2, chi2[spin_index]) 
243   
244           
245          final_pipe = pipes.get_pipe('aic') 
246          if compiler == 'gcc': 
247              self.assertEqual(final_pipe.chi2, 32.6995) 
248              self.assertEqual(final_pipe.diff_tensor.tm, 8.964) 
249              self.assertEqual(final_pipe.diff_tensor.Dratio, 1.324) 
250              self.assertEqual(final_pipe.diff_tensor.theta, (-52.070 / 360.0) * 2.0 * pi + pi) 
251              self.assertEqual(final_pipe.diff_tensor.phi, (2.377 / 360.0) * 2.0 * pi) 
252          else: 
253              self.assertEqual(final_pipe.chi2, 15.8304) 
254              self.assertEqual(final_pipe.diff_tensor.tm, 8.443) 
255              self.assertEqual(final_pipe.diff_tensor.Dratio, 1.053) 
256              self.assertEqual(final_pipe.diff_tensor.theta, (68.864 / 360.0) * 2.0 * pi) 
257              self.assertEqual(final_pipe.diff_tensor.phi, (73.913 / 360.0) * 2.0 * pi) 
  258