1   
  2   
  3   
  4   
  5   
  6   
  7   
  8   
  9   
 10   
 11   
 12   
 13   
 14   
 15   
 16   
 17   
 18   
 19   
 20   
 21   
 22   
 23  from os import F_OK, access, sep 
 24  from tempfile import mkdtemp, mktemp 
 25   
 26   
 27  from data_store import Relax_data_store; ds = Relax_data_store() 
 28  from pipe_control.mol_res_spin import spin_loop 
 29  from status import Status; status = Status() 
 30  from test_suite.system_tests.base_classes import SystemTestCase 
 31   
 32   
 33 -class Noe(SystemTestCase): 
  34      """Class for testing various aspects specific to the NOE analysis.""" 
 35   
 37          """Set up for all the functional tests.""" 
 38   
 39           
 40          self.interpreter.pipe.create('noe', 'noe') 
 41   
 42           
 43          ds.tmpfile = mktemp() 
 44   
 45           
 46          ds.tmpdir = mkdtemp() 
 47          self.tmpdir = ds.tmpdir 
  48   
 49   
 51          """Catch U{bug #21562<https://web.archive.org/web/https://gna.org/bugs/?21562>}, the failure of the NOE analysis when replicated spectra are used.""" 
 52   
 53           
 54          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'noe'+sep+'bug_21562_noe_replicate_fail.py') 
 55   
 56           
 57          file = open(ds.tmpfile) 
 58          lines = file.readlines() 
 59          file.close() 
 60   
 61           
 62          data = [ 
 63              "# Parameter description:  The steady-state NOE value.\n", 
 64              "#\n", 
 65              "# mol_name       res_num    res_name    spin_num    spin_name    value                   error                   \n", 
 66              "2AT7_fmf_mol1    12         PHE         150         N               0.803029108487728      0.0199040298831904    \n", 
 67              "2AT7_fmf_mol1    13         ASN         170         N               0.829415981681132      0.0339996453012768    \n", 
 68              "2AT7_fmf_mol1    14         LYS         184         N               0.755789564728523      0.0250941717735858    \n" 
 69          ] 
 70   
 71           
 72          print("\n\nThe real data:") 
 73          for i in range(len(lines)): 
 74              print(repr(data[i])) 
 75          print("\nThe generated data:") 
 76          for i in range(len(lines)): 
 77              print(repr(lines[i])) 
 78          print("\n") 
 79   
 80           
 81          for i in range(len(lines)): 
 82              self.assertEqual(data[i], lines[i]) 
  83   
 84   
 86          """Catch U{bug #21591<https://web.archive.org/web/https://gna.org/bugs/?21591>}, the failure of the NOE analysis.""" 
 87   
 88           
 89          self.interpreter.spin.create(mol_name='XYZ_mol1', res_num=120, res_name='GLY', spin_num=1865, spin_name='N') 
 90   
 91           
 92          path = status.install_path + sep+'test_suite'+sep+'shared_data'+sep+'peak_lists' 
 93          self.interpreter.spectrum.read_intensities(file='noe.140109.8.001.list', dir=path, spectrum_id='ref_ave') 
 94          self.interpreter.spectrum.read_intensities(file='noe.140109.8.002.list', dir=path, spectrum_id='sat_ave') 
 95   
 96           
 97          self.interpreter.noe.spectrum_type('ref', 'ref_ave') 
 98          self.interpreter.noe.spectrum_type('sat', 'sat_ave') 
 99   
100           
101          self.interpreter.spectrum.baseplane_rmsd(error=1.3e06, spectrum_id='ref_ave') 
102          self.interpreter.spectrum.baseplane_rmsd(error=1.4e06, spectrum_id='sat_ave') 
103   
104           
105          self.interpreter.spectrum.error_analysis() 
106   
107           
108          self.interpreter.calc() 
109   
110           
111          self.interpreter.value.write(param='noe', file=ds.tmpfile) 
112   
113           
114          file = open(ds.tmpfile) 
115          lines = file.readlines() 
116          file.close() 
117   
118           
119          data = [ 
120              "# Parameter description:  The steady-state NOE value.\n", 
121              "#\n", 
122              "# mol_name    res_num    res_name    spin_num    spin_name    value                   error                   \n", 
123              "XYZ_mol1      120        GLY         1865        N               0.520373965716017       0.208104738641507    \n", 
124          ] 
125   
126           
127          print("\n\nThe real data:") 
128          for i in range(len(lines)): 
129              print(repr(data[i])) 
130          print("\nThe generated data:") 
131          for i in range(len(lines)): 
132              print(repr(lines[i])) 
133          print("\n") 
134   
135           
136          for i in range(len(lines)): 
137              self.assertEqual(data[i], lines[i]) 
 138   
139   
141          """Test the NOE analysis. 
142   
143          The test has been modified to also catch U{bug #21863<https://web.archive.org/web/https://gna.org/bugs/?21863>}. 
144          """ 
145   
146           
147          self.script_exec(status.install_path + sep+'test_suite'+sep+'system_tests'+sep+'scripts'+sep+'noe'+sep+'noe.py') 
148   
149           
150          sat = [5050.0, 51643.0, 53663.0, -65111.0, -181131.0, -105322.0] 
151          ref = [148614.0, 166842.0, 128690.0, 99566.0, 270047.0, 130959.0] 
152          noe = [0.033980647852826784, 0.30953237194471417, 0.4169943274535706, -0.6539481349054899, -0.6707387973204665, -0.8042364404126482] 
153          noe_err = [0.02020329903276632, 0.2320024671657343, 0.026067523940084526, 0.038300618865378507, 0.014260663438353431, 0.03183614777183591] 
154   
155           
156          i = 0 
157          for spin in spin_loop(): 
158               
159              if not spin.select: 
160                  continue 
161   
162               
163              self.assertEqual(sat[i], spin.peak_intensity['sat_ave']) 
164              self.assertEqual(ref[i], spin.peak_intensity['ref_ave']) 
165   
166               
167              self.assertEqual(noe[i], spin.noe) 
168              self.assertAlmostEqual(noe_err[i], spin.noe_err) 
169   
170               
171              i += 1 
172   
173           
174          data = [[ 
175              '@version 50121\n', 
176              '@page size 842, 595\n', 
177              '@with g0\n', 
178              '@    view 0.15, 0.15, 1.28, 0.85\n', 
179              '@    xaxis  label "Residue number"\n', 
180              '@    xaxis  label char size 1.00\n', 
181              '@    xaxis  tick major size 0.50\n', 
182              '@    xaxis  tick major linewidth 0.5\n', 
183              '@    xaxis  tick minor linewidth 0.5\n', 
184              '@    xaxis  tick minor size 0.25\n', 
185              '@    xaxis  ticklabel char size 0.70\n', 
186              '@    yaxis  label "\\qPeak intensities\\Q"\n', 
187              '@    yaxis  label char size 1.00\n', 
188              '@    yaxis  tick major size 0.50\n', 
189              '@    yaxis  tick major linewidth 0.5\n', 
190              '@    yaxis  tick minor linewidth 0.5\n', 
191              '@    yaxis  tick minor size 0.25\n', 
192              '@    yaxis  ticklabel char size 0.70\n', 
193              '@    legend on\n', 
194              '@    legend box fill pattern 1\n', 
195              '@    legend char size 1.0\n', 
196              '@    frame linewidth 0.5\n', 
197              '@    s0 symbol 1\n', 
198              '@    s0 symbol size 0.45\n', 
199              '@    s0 symbol linewidth 0.5\n', 
200              '@    s0 errorbar size 0.5\n', 
201              '@    s0 errorbar linewidth 0.5\n', 
202              '@    s0 errorbar riser linewidth 0.5\n', 
203              '@    s0 legend "ref_ave"\n', 
204              '@    s1 symbol 2\n', 
205              '@    s1 symbol size 0.45\n', 
206              '@    s1 symbol linewidth 0.5\n', 
207              '@    s1 errorbar size 0.5\n', 
208              '@    s1 errorbar linewidth 0.5\n', 
209              '@    s1 errorbar riser linewidth 0.5\n', 
210              '@    s1 legend "sat_ave"\n', 
211              '@target G0.S0\n', 
212              '@type xydy\n', 
213              '4                              148614.000000000000000         3600.000000000000000          \n', 
214              '5                              166842.000000000000000         122000.000000000000000        \n', 
215              '6                              128690.000000000000000         3600.000000000000000          \n', 
216              '40                             99566.000000000000000          3600.000000000000000          \n', 
217              '40                             270047.000000000000000         3600.000000000000000          \n', 
218              '55                             130959.000000000000000         3600.000000000000000          \n', 
219              '&\n', 
220              '@target G0.S1\n', 
221              '@type xydy\n', 
222              '4                              5050.000000000000000           3000.000000000000000          \n', 
223              '5                              51643.000000000000000          8500.000000000000000          \n', 
224              '6                              53663.000000000000000          3000.000000000000000          \n', 
225              '40                             -65111.000000000000000         3000.000000000000000          \n', 
226              '40                             -181131.000000000000000        3000.000000000000000          \n', 
227              '55                             -105322.000000000000000        3000.000000000000000          \n', 
228              '&\n', 
229              '@with g0\n', 
230              '@autoscale\n' 
231          ], [ 
232              '@version 50121\n', 
233              '@page size 842, 595\n', 
234              '@with g0\n', 
235              '@    view 0.15, 0.15, 1.28, 0.85\n', 
236              '@    xaxis  label "Residue number"\n', 
237              '@    xaxis  label char size 1.00\n', 
238              '@    xaxis  tick major size 0.50\n', 
239              '@    xaxis  tick major linewidth 0.5\n', 
240              '@    xaxis  tick minor linewidth 0.5\n', 
241              '@    xaxis  tick minor size 0.25\n', 
242              '@    xaxis  ticklabel char size 0.70\n', 
243              '@    yaxis  label "\\qNOE\\Q"\n', 
244              '@    yaxis  label char size 1.00\n', 
245              '@    yaxis  tick major size 0.50\n', 
246              '@    yaxis  tick major linewidth 0.5\n', 
247              '@    yaxis  tick minor linewidth 0.5\n', 
248              '@    yaxis  tick minor size 0.25\n', 
249              '@    yaxis  ticklabel char size 0.70\n', 
250              '@    legend on\n', 
251              '@    legend box fill pattern 1\n', 
252              '@    legend char size 1.0\n', 
253              '@    frame linewidth 0.5\n', 
254              '@    s0 symbol 1\n', 
255              '@    s0 symbol size 0.45\n', 
256              '@    s0 symbol linewidth 0.5\n', 
257              '@    s0 errorbar size 0.5\n', 
258              '@    s0 errorbar linewidth 0.5\n', 
259              '@    s0 errorbar riser linewidth 0.5\n', 
260              '@    s0 legend "N spins"\n', 
261              '@    s1 symbol 2\n', 
262              '@    s1 symbol size 0.45\n', 
263              '@    s1 symbol linewidth 0.5\n', 
264              '@    s1 errorbar size 0.5\n', 
265              '@    s1 errorbar linewidth 0.5\n', 
266              '@    s1 errorbar riser linewidth 0.5\n', 
267              '@    s1 legend "NE1 spins"\n', 
268              '@target G0.S0\n', 
269              '@type xydy\n', 
270              '4                              0.033980647852827              0.020203299032766             \n', 
271              '5                              0.309532371944714              0.232002467165734             \n', 
272              '6                              0.416994327453571              0.026067523940085             \n', 
273              '40                             -0.653948134905490             0.038300618865379             \n', 
274              '55                             -0.804236440412648             0.031836147771836             \n', 
275              '&\n', 
276              '@target G0.S1\n', 
277              '@type xydy\n', 
278              '40                             -0.670738797320466             0.014260663438353             \n', 
279              '&\n', 
280              '@with g0\n', 
281              '@autoscale\n' 
282          ]] 
283   
284           
285          ids = ['intensities', 'noe'] 
286          for i in range(len(ids)): 
287               
288              file_name = "%s.agr" % ids[i] 
289   
290               
291              self.assert_(access(ds.tmpdir+sep+file_name, F_OK)) 
292   
293               
294              file = open(ds.tmpdir + sep + file_name) 
295              lines = file.readlines() 
296              file.close() 
297   
298               
299              self.assertNotEqual(lines, []) 
300   
301               
302              for j in range(len(lines)): 
303                  print("            '%s\\n'," % lines[j][:-1].replace('"', "\\\"")) 
304              for j in range(len(lines)): 
305                  self.assertEqual(data[i][j], lines[j]) 
  306