1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 from copy import deepcopy
25
26
27 from data_store import Relax_data_store; ds = Relax_data_store()
28 from lib.dispersion.variables import MODEL_LIST_FULL, \
29 MODEL_PARAMS, \
30 MODEL_R2EFF, \
31 MODEL_NOREX, \
32 MODEL_LM63, \
33 MODEL_LM63_3SITE, \
34 MODEL_CR72, \
35 MODEL_CR72_FULL, \
36 MODEL_IT99, \
37 MODEL_TSMFK01, \
38 MODEL_B14, \
39 MODEL_B14_FULL, \
40 MODEL_M61, \
41 MODEL_M61B, \
42 MODEL_DPL94, \
43 MODEL_TP02, \
44 MODEL_TAP03, \
45 MODEL_MP05, \
46 MODEL_NS_CPMG_2SITE_3D, \
47 MODEL_NS_CPMG_2SITE_3D_FULL, \
48 MODEL_NS_CPMG_2SITE_STAR, \
49 MODEL_NS_CPMG_2SITE_STAR_FULL, \
50 MODEL_NS_CPMG_2SITE_EXPANDED, \
51 MODEL_NS_R1RHO_2SITE, \
52 MODEL_NS_R1RHO_3SITE, \
53 MODEL_NS_R1RHO_3SITE_LINEAR, \
54 MODEL_MMQ_CR72, \
55 MODEL_NS_MMQ_2SITE, \
56 MODEL_NS_MMQ_3SITE, \
57 MODEL_NS_MMQ_3SITE_LINEAR, \
58 MODEL_EXP_TYPE_R2EFF, \
59 MODEL_EXP_TYPE_NOREX, \
60 MODEL_EXP_TYPE_LM63, \
61 MODEL_EXP_TYPE_LM63_3SITE, \
62 MODEL_EXP_TYPE_CR72, \
63 MODEL_EXP_TYPE_CR72_FULL, \
64 MODEL_EXP_TYPE_TSMFK01, \
65 MODEL_EXP_TYPE_TSMFK01, \
66 MODEL_EXP_TYPE_B14, \
67 MODEL_EXP_TYPE_B14_FULL, \
68 MODEL_EXP_TYPE_M61, \
69 MODEL_EXP_TYPE_M61B, \
70 MODEL_EXP_TYPE_DPL94, \
71 MODEL_EXP_TYPE_TP02, \
72 MODEL_EXP_TYPE_TAP03, \
73 MODEL_EXP_TYPE_MP05, \
74 MODEL_EXP_TYPE_NS_CPMG_2SITE_3D, \
75 MODEL_EXP_TYPE_NS_CPMG_2SITE_3D_FULL, \
76 MODEL_EXP_TYPE_NS_CPMG_2SITE_STAR, \
77 MODEL_EXP_TYPE_NS_CPMG_2SITE_STAR_FULL, \
78 MODEL_EXP_TYPE_NS_CPMG_2SITE_EXPANDED, \
79 MODEL_EXP_TYPE_NS_R1RHO_2SITE, \
80 MODEL_EXP_TYPE_NS_R1RHO_3SITE, \
81 MODEL_EXP_TYPE_NS_R1RHO_3SITE_LINEAR, \
82 MODEL_EXP_TYPE_MMQ_CR72, \
83 MODEL_EXP_TYPE_NS_MMQ_2SITE, \
84 MODEL_EXP_TYPE_NS_MMQ_3SITE, \
85 MODEL_EXP_TYPE_NS_MMQ_3SITE_LINEAR
86 from pipe_control import mol_res_spin
87 from specific_analyses.relax_disp.api import Relax_disp
88 from specific_analyses.relax_disp.parameters import loop_parameters
89 from test_suite.unit_tests.base_classes import UnitTestCase
90
91
93 """Unit tests for the functions of the specific_analyses.relax_disp.api module."""
94
96 """Setup some structures for the unit tests."""
97
98
99 ds.add(pipe_name='testing', pipe_type='relax_disp')
100
101
102 self.exp_type = {
103 MODEL_R2EFF: MODEL_EXP_TYPE_R2EFF,
104 MODEL_NOREX: MODEL_EXP_TYPE_NOREX,
105 MODEL_LM63: MODEL_EXP_TYPE_LM63,
106 MODEL_LM63_3SITE: MODEL_EXP_TYPE_LM63_3SITE,
107 MODEL_CR72: MODEL_EXP_TYPE_CR72,
108 MODEL_CR72_FULL: MODEL_EXP_TYPE_CR72_FULL,
109 MODEL_IT99: MODEL_EXP_TYPE_TSMFK01,
110 MODEL_TSMFK01: MODEL_EXP_TYPE_TSMFK01,
111 MODEL_B14: MODEL_EXP_TYPE_B14,
112 MODEL_B14_FULL: MODEL_EXP_TYPE_B14_FULL,
113 MODEL_M61: MODEL_EXP_TYPE_M61,
114 MODEL_M61B: MODEL_EXP_TYPE_M61B,
115 MODEL_DPL94: MODEL_EXP_TYPE_DPL94,
116 MODEL_TP02: MODEL_EXP_TYPE_TP02,
117 MODEL_TAP03: MODEL_EXP_TYPE_TAP03,
118 MODEL_MP05: MODEL_EXP_TYPE_MP05,
119 MODEL_NS_CPMG_2SITE_3D: MODEL_EXP_TYPE_NS_CPMG_2SITE_3D,
120 MODEL_NS_CPMG_2SITE_3D_FULL: MODEL_EXP_TYPE_NS_CPMG_2SITE_3D_FULL,
121 MODEL_NS_CPMG_2SITE_STAR: MODEL_EXP_TYPE_NS_CPMG_2SITE_STAR,
122 MODEL_NS_CPMG_2SITE_STAR_FULL: MODEL_EXP_TYPE_NS_CPMG_2SITE_STAR_FULL,
123 MODEL_NS_CPMG_2SITE_EXPANDED: MODEL_EXP_TYPE_NS_CPMG_2SITE_EXPANDED,
124 MODEL_NS_R1RHO_2SITE: MODEL_EXP_TYPE_NS_R1RHO_2SITE,
125 MODEL_NS_R1RHO_3SITE: MODEL_EXP_TYPE_NS_R1RHO_3SITE,
126 MODEL_NS_R1RHO_3SITE_LINEAR: MODEL_EXP_TYPE_NS_R1RHO_3SITE_LINEAR,
127 MODEL_MMQ_CR72: MODEL_EXP_TYPE_MMQ_CR72,
128 MODEL_NS_MMQ_2SITE: MODEL_EXP_TYPE_NS_MMQ_2SITE,
129 MODEL_NS_MMQ_3SITE: MODEL_EXP_TYPE_NS_MMQ_3SITE,
130 MODEL_NS_MMQ_3SITE_LINEAR: MODEL_EXP_TYPE_NS_MMQ_3SITE_LINEAR
131 }
132
133
135 """Test the specific_analyses.relax_disp.api.sim_init_values() function for a cluster of 2 spins."""
136
137
138 fixed_values = {
139 'r1': 2.2,
140 'r2eff': 10.0,
141 'r2': 15.0,
142 'r2a': 12.0,
143 'r2b': 18.0,
144 'pA': 0.80,
145 'pB': 0.15,
146 'k_AB': 0.001,
147 'k_BA': 0.003,
148 'kex': 0.01,
149 'kex_AB': 0.015,
150 'kex_BC': 0.017,
151 'kex_AC': 0.016,
152 'kB': 0.005,
153 'kC': 0.004,
154 'tex': 50.0,
155 'dw': 1.0,
156 'dw_AB': 1.02,
157 'dw_BC': 1.03,
158 'dwH': 0.1,
159 'dwH_AB': 0.12,
160 'dwH_BC': 0.13,
161 'phi_ex': 0.5,
162 'phi_ex_B': 0.4,
163 'phi_ex_C': 0.3,
164 }
165
166
167 print("Checking the parameter conversion and setting for a cluster of 2 spins.")
168 for model in MODEL_LIST_FULL:
169
170 print(" Model '%s'." % model)
171
172
173 ds.add(pipe_name=model, pipe_type='relax_disp')
174 if model == MODEL_R2EFF:
175 cdp.model_type = 'R2eff'
176 else:
177 cdp.model_type = 'disp'
178 cdp.exp_type_list = [self.exp_type[model]]
179 cdp.spectrometer_frq_list = [1e6]
180 cdp.sim_number = 2
181
182
183 cdp.mol.add_item(mol_name="sim test")
184 cdp.mol[0].res[0].num = 1
185 cdp.mol[0].res.add_item(res_num=2)
186 mol_res_spin.metadata_update()
187 spins = [cdp.mol[0].res[0].spin[0], cdp.mol[0].res[1].spin[0]]
188 for spin in spins:
189 spin.model = model
190 if model == MODEL_R2EFF:
191 spin.params = ['r2eff']
192 else:
193 spin.params = deepcopy(MODEL_PARAMS[model])
194 spin.chi2 = 1000.0
195 spin.iter = 20
196 spin.f_count = 300
197 spin.g_count = 200
198 spin.h_count = 100
199 spin.warning = None
200 spin.isotope = '15N'
201
202
203 for name, param_index, spin_index, R20_key in loop_parameters(spins):
204
205 if name in ['r1', 'r2', 'r2a', 'r2b']:
206 key = "%s - %.8f MHz" % (cdp.exp_type_list[0], cdp.spectrometer_frq_list[0]/1e6)
207 print(" Setting spin %i parameter %s['%s'] to %s." % (spin_index, name, key, fixed_values[name]))
208 setattr(spins[spin_index], name, {key: fixed_values[name]})
209
210
211 elif spin_index == None:
212 print(" Setting global parameter %s to %s." % (name, fixed_values[name]))
213 setattr(spins[0], name, fixed_values[name])
214 setattr(spins[1], name, fixed_values[name])
215
216
217 else:
218 print(" Setting spin %i parameter %s to %s." % (spin_index, name, fixed_values[name]))
219 setattr(spins[spin_index], name, fixed_values[name])
220
221
222 api = Relax_disp()
223 api.sim_init_values()
224
225
226 for i in range(cdp.sim_number):
227 print(" Simulation %i." % i)
228
229
230 if 'pB' in MODEL_PARAMS[model]:
231 print(" Checking parameter pC.")
232 self.assertAlmostEqual(spins[0].pC_sim[i], 0.05)
233 self.assertAlmostEqual(spins[1].pC_sim[i], 0.05)
234 elif 'pA' in MODEL_PARAMS[model]:
235 print(" Checking parameter pB.")
236 self.assertAlmostEqual(spins[0].pB_sim[i], 0.20)
237 self.assertAlmostEqual(spins[1].pB_sim[i], 0.20)
238
239
240 if 'kex' in MODEL_PARAMS[model]:
241 print(" Checking parameter tex.")
242 self.assertAlmostEqual(spins[0].tex_sim[i], 100.0)
243 self.assertAlmostEqual(spins[1].tex_sim[i], 100.0)
244 elif 'tex' in MODEL_PARAMS[model]:
245 print(" Checking parameter kex.")
246 self.assertAlmostEqual(spins[0].kex_sim[i], 0.02)
247 self.assertAlmostEqual(spins[1].kex_sim[i], 0.02)
248
249
250 if 'kex' in MODEL_PARAMS[model] and 'pA' in MODEL_PARAMS[model]:
251 print(" Checking parameter k_AB.")
252 self.assertAlmostEqual(spins[0].k_AB_sim[i], 0.002)
253 self.assertAlmostEqual(spins[1].k_AB_sim[i], 0.002)
254 print(" Checking parameter k_BA.")
255 self.assertAlmostEqual(spins[0].k_BA_sim[i], 0.008)
256 self.assertAlmostEqual(spins[1].k_BA_sim[i], 0.008)
257