Package test_suite :: Package unit_tests :: Package _specific_analyses :: Package _relax_disp :: Module test_api
[hide private]
[frames] | no frames]

Source Code for Module test_suite.unit_tests._specific_analyses._relax_disp.test_api

  1  ############################################################################### 
  2  #                                                                             # 
  3  # Copyright (C) 2019 Edward d'Auvergne                                        # 
  4  #                                                                             # 
  5  # This file is part of the program relax (http://www.nmr-relax.com).          # 
  6  #                                                                             # 
  7  # This program is free software: you can redistribute it and/or modify        # 
  8  # it under the terms of the GNU General Public License as published by        # 
  9  # the Free Software Foundation, either version 3 of the License, or           # 
 10  # (at your option) any later version.                                         # 
 11  #                                                                             # 
 12  # This program is distributed in the hope that it will be useful,             # 
 13  # but WITHOUT ANY WARRANTY; without even the implied warranty of              # 
 14  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               # 
 15  # GNU General Public License for more details.                                # 
 16  #                                                                             # 
 17  # You should have received a copy of the GNU General Public License           # 
 18  # along with this program.  If not, see <http://www.gnu.org/licenses/>.       # 
 19  #                                                                             # 
 20  ############################################################################### 
 21   
 22   
 23  # Python module imports. 
 24  from copy import deepcopy 
 25   
 26  # relax module imports. 
 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   
92 -class Test_api(UnitTestCase):
93 """Unit tests for the functions of the specific_analyses.relax_disp.api module.""" 94
95 - def setUp(self):
96 """Setup some structures for the unit tests.""" 97 98 # Create a dispersion data pipe. 99 ds.add(pipe_name='testing', pipe_type='relax_disp') 100 101 # The experiment types for all models. 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
134 - def test_sim_init_values(self):
135 """Test the specific_analyses.relax_disp.api.sim_init_values() function for a cluster of 2 spins.""" 136 137 # Test parameter values. 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 # Loop over all models. 167 print("Checking the parameter conversion and setting for a cluster of 2 spins.") 168 for model in MODEL_LIST_FULL: 169 # Printout. 170 print(" Model '%s'." % model) 171 172 # Set up the data store. 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 # Set up the spin systems. 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 # Set the ordinary parameter values, as these are copied into the simulation structures. 203 for name, param_index, spin_index, R20_key in loop_parameters(spins): 204 # R1/R2 parameters. 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 # Global parameters. 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 # Spin parameters. 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 # MC simulation setup. 222 api = Relax_disp() 223 api.sim_init_values() 224 225 # Checks. 226 for i in range(cdp.sim_number): 227 print(" Simulation %i." % i) 228 229 # Check the probabilities. 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 # Check the kex-tex pair. 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 # Check the rates. 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