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