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

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

   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  # Python module imports. 
  23  from copy import deepcopy 
  24  from numpy import array, array_equal, diag, float64 
  25   
  26  # relax module imports. 
  27  from data_store import Relax_data_store; ds = Relax_data_store() 
  28  from data_store.mol_res_spin import SpinContainer 
  29  from lib.dispersion.variables import MODEL_LIST_FULL, \ 
  30      MODEL_PARAMS, \ 
  31      MODEL_R2EFF, \ 
  32      MODEL_NOREX, \ 
  33      MODEL_LM63, \ 
  34      MODEL_LM63_3SITE, \ 
  35      MODEL_CR72, \ 
  36      MODEL_CR72_FULL, \ 
  37      MODEL_IT99, \ 
  38      MODEL_TSMFK01, \ 
  39      MODEL_B14, \ 
  40      MODEL_B14_FULL, \ 
  41      MODEL_M61, \ 
  42      MODEL_M61B, \ 
  43      MODEL_DPL94, \ 
  44      MODEL_TP02, \ 
  45      MODEL_TAP03, \ 
  46      MODEL_MP05, \ 
  47      MODEL_NS_CPMG_2SITE_3D, \ 
  48      MODEL_NS_CPMG_2SITE_3D_FULL, \ 
  49      MODEL_NS_CPMG_2SITE_STAR, \ 
  50      MODEL_NS_CPMG_2SITE_STAR_FULL, \ 
  51      MODEL_NS_CPMG_2SITE_EXPANDED, \ 
  52      MODEL_NS_R1RHO_2SITE, \ 
  53      MODEL_NS_R1RHO_3SITE, \ 
  54      MODEL_NS_R1RHO_3SITE_LINEAR, \ 
  55      MODEL_MMQ_CR72, \ 
  56      MODEL_NS_MMQ_2SITE, \ 
  57      MODEL_NS_MMQ_3SITE, \ 
  58      MODEL_NS_MMQ_3SITE_LINEAR, \ 
  59      MODEL_EXP_TYPE_R2EFF, \ 
  60      MODEL_EXP_TYPE_NOREX, \ 
  61      MODEL_EXP_TYPE_LM63, \ 
  62      MODEL_EXP_TYPE_LM63_3SITE, \ 
  63      MODEL_EXP_TYPE_CR72, \ 
  64      MODEL_EXP_TYPE_CR72_FULL, \ 
  65      MODEL_EXP_TYPE_TSMFK01, \ 
  66      MODEL_EXP_TYPE_TSMFK01, \ 
  67      MODEL_EXP_TYPE_B14, \ 
  68      MODEL_EXP_TYPE_B14_FULL, \ 
  69      MODEL_EXP_TYPE_M61, \ 
  70      MODEL_EXP_TYPE_M61B, \ 
  71      MODEL_EXP_TYPE_DPL94, \ 
  72      MODEL_EXP_TYPE_TP02, \ 
  73      MODEL_EXP_TYPE_TAP03, \ 
  74      MODEL_EXP_TYPE_MP05, \ 
  75      MODEL_EXP_TYPE_NS_CPMG_2SITE_3D, \ 
  76      MODEL_EXP_TYPE_NS_CPMG_2SITE_3D_FULL, \ 
  77      MODEL_EXP_TYPE_NS_CPMG_2SITE_STAR, \ 
  78      MODEL_EXP_TYPE_NS_CPMG_2SITE_STAR_FULL, \ 
  79      MODEL_EXP_TYPE_NS_CPMG_2SITE_EXPANDED, \ 
  80      MODEL_EXP_TYPE_NS_R1RHO_2SITE, \ 
  81      MODEL_EXP_TYPE_NS_R1RHO_3SITE, \ 
  82      MODEL_EXP_TYPE_NS_R1RHO_3SITE_LINEAR, \ 
  83      MODEL_EXP_TYPE_MMQ_CR72, \ 
  84      MODEL_EXP_TYPE_NS_MMQ_2SITE, \ 
  85      MODEL_EXP_TYPE_NS_MMQ_3SITE, \ 
  86      MODEL_EXP_TYPE_NS_MMQ_3SITE_LINEAR 
  87  from specific_analyses.relax_disp.parameters import linear_constraints, loop_parameters, param_conversion, param_num 
  88  from test_suite.unit_tests.base_classes import UnitTestCase 
  89   
  90   
91 -class Test_parameters(UnitTestCase):
92 """Unit tests for the functions of the specific_analyses.relax_disp.parameters module.""" 93
94 - def setUp(self):
95 """Setup some structures for the unit tests.""" 96 97 # Create a dispersion data pipe. 98 ds.add(pipe_name='testing', pipe_type='relax_disp') 99 100 # The experiment types for all models. 101 self.exp_type = { 102 MODEL_R2EFF: MODEL_EXP_TYPE_R2EFF, 103 MODEL_NOREX: MODEL_EXP_TYPE_NOREX, 104 MODEL_LM63: MODEL_EXP_TYPE_LM63, 105 MODEL_LM63_3SITE: MODEL_EXP_TYPE_LM63_3SITE, 106 MODEL_CR72: MODEL_EXP_TYPE_CR72, 107 MODEL_CR72_FULL: MODEL_EXP_TYPE_CR72_FULL, 108 MODEL_IT99: MODEL_EXP_TYPE_TSMFK01, 109 MODEL_TSMFK01: MODEL_EXP_TYPE_TSMFK01, 110 MODEL_B14: MODEL_EXP_TYPE_B14, 111 MODEL_B14_FULL: MODEL_EXP_TYPE_B14_FULL, 112 MODEL_M61: MODEL_EXP_TYPE_M61, 113 MODEL_M61B: MODEL_EXP_TYPE_M61B, 114 MODEL_DPL94: MODEL_EXP_TYPE_DPL94, 115 MODEL_TP02: MODEL_EXP_TYPE_TP02, 116 MODEL_TAP03: MODEL_EXP_TYPE_TAP03, 117 MODEL_MP05: MODEL_EXP_TYPE_MP05, 118 MODEL_NS_CPMG_2SITE_3D: MODEL_EXP_TYPE_NS_CPMG_2SITE_3D, 119 MODEL_NS_CPMG_2SITE_3D_FULL: MODEL_EXP_TYPE_NS_CPMG_2SITE_3D_FULL, 120 MODEL_NS_CPMG_2SITE_STAR: MODEL_EXP_TYPE_NS_CPMG_2SITE_STAR, 121 MODEL_NS_CPMG_2SITE_STAR_FULL: MODEL_EXP_TYPE_NS_CPMG_2SITE_STAR_FULL, 122 MODEL_NS_CPMG_2SITE_EXPANDED: MODEL_EXP_TYPE_NS_CPMG_2SITE_EXPANDED, 123 MODEL_NS_R1RHO_2SITE: MODEL_EXP_TYPE_NS_R1RHO_2SITE, 124 MODEL_NS_R1RHO_3SITE: MODEL_EXP_TYPE_NS_R1RHO_3SITE, 125 MODEL_NS_R1RHO_3SITE_LINEAR: MODEL_EXP_TYPE_NS_R1RHO_3SITE_LINEAR, 126 MODEL_MMQ_CR72: MODEL_EXP_TYPE_MMQ_CR72, 127 MODEL_NS_MMQ_2SITE: MODEL_EXP_TYPE_NS_MMQ_2SITE, 128 MODEL_NS_MMQ_3SITE: MODEL_EXP_TYPE_NS_MMQ_3SITE, 129 MODEL_NS_MMQ_3SITE_LINEAR: MODEL_EXP_TYPE_NS_MMQ_3SITE_LINEAR 130 }
131 132
134 """Test the specific_analyses.relax_disp.parameters.linear_constraints() function for a cluster of 2 spins.""" 135 136 # The expected parameter information. 137 expected = { 138 MODEL_R2EFF: { 139 'scaling_matrix': diag(array([1, 1], float64)), 140 'A': array( 141 [[ 1, 0], 142 [-1, 0], 143 [ 0, 1], 144 [ 0, -1]], 145 float64), 146 'b': array([0, -200, 0, -200], float64) 147 }, 148 MODEL_NOREX: { 149 'scaling_matrix': diag(array([10, 10], float64)), 150 'A': array( 151 [[ 1, 0], 152 [-1, 0], 153 [ 0, 1], 154 [ 0, -1]], 155 float64), 156 'b': array([0, -20, 0, -20], float64) 157 }, 158 MODEL_LM63: { # ['r2', 'phi_ex', 'kex'] 159 'scaling_matrix': diag(array([10, 10, 1, 1, 10000], float64)), 160 'A': array( 161 [[ 1, 0, 0, 0, 0], 162 [-1, 0, 0, 0, 0], 163 [ 0, 1, 0, 0, 0], 164 [ 0, -1, 0, 0, 0], 165 [ 0, 0, 1, 0, 0], 166 [ 0, 0, 0, 1, 0], 167 [ 0, 0, 0, 0, 1], 168 [ 0, 0, 0, 0, -1]], 169 float64), 170 'b': array([0, -20, 0, -20, 0, 0, 0, -200], float64) 171 }, 172 MODEL_LM63_3SITE: { # ['r2', 'phi_ex_B', 'phi_ex_C', 'kB', 'kC'] 173 'scaling_matrix': diag(array([10, 10, 1, 1, 1, 1, 10000, 10000], float64)), 174 'A': array( 175 [[ 1, 0, 0, 0, 0, 0, 0, 0], 176 [-1, 0, 0, 0, 0, 0, 0, 0], 177 [ 0, 1, 0, 0, 0, 0, 0, 0], 178 [ 0, -1, 0, 0, 0, 0, 0, 0], 179 [ 0, 0, 1, 0, 0, 0, 0, 0], 180 [ 0, 0, 0, 1, 0, 0, 0, 0], 181 [ 0, 0, 0, 0, 1, 0, 0, 0], 182 [ 0, 0, 0, 0, 0, 1, 0, 0], 183 [ 0, 0, 0, 0, 0, 0, 1, 0], 184 [ 0, 0, 0, 0, 0, 0, -1, 0], 185 [ 0, 0, 0, 0, 0, 0, 0, 1], 186 [ 0, 0, 0, 0, 0, 0, 0, -1]], 187 float64), 188 'b': array([0, -20, 0, -20, 0, 0, 0, 0, 0, -200, 0, -200], float64) 189 }, 190 MODEL_CR72: { # ['r2', 'dw', 'pA', 'kex'] 191 'scaling_matrix': diag(array([10, 10, 1, 1, 1, 10000], float64)), 192 'A': array( 193 [[ 1, 0, 0, 0, 0, 0], 194 [-1, 0, 0, 0, 0, 0], 195 [ 0, 1, 0, 0, 0, 0], 196 [ 0, -1, 0, 0, 0, 0], 197 [ 0, 0, 1, 0, 0, 0], 198 [ 0, 0, 0, 1, 0, 0], 199 [ 0, 0, 0, 0, -1, 0], 200 [ 0, 0, 0, 0, 1, 0], 201 [ 0, 0, 0, 0, 0, 1], 202 [ 0, 0, 0, 0, 0, -1]], 203 float64), 204 'b': array([0, -20, 0, -20, 0, 0, -1, 0.5, 0, -200], float64) 205 }, 206 MODEL_CR72_FULL: { # ['r2a', 'r2b', 'dw', 'pA', 'kex'] 207 'scaling_matrix': diag(array([10, 10, 10, 10, 1, 1, 1, 10000], float64)), 208 'A': array( 209 [[ 1, 0, 0, 0, 0, 0, 0, 0], 210 [-1, 0, 0, 0, 0, 0, 0, 0], 211 [ 0, 1, 0, 0, 0, 0, 0, 0], 212 [ 0, -1, 0, 0, 0, 0, 0, 0], 213 [ 0, 0, 1, 0, 0, 0, 0, 0], 214 [ 0, 0, -1, 0, 0, 0, 0, 0], 215 [ 0, 0, 0, 1, 0, 0, 0, 0], 216 [ 0, 0, 0, -1, 0, 0, 0, 0], 217 [ 0, 0, 0, 0, 1, 0, 0, 0], 218 [ 0, 0, 0, 0, 0, 1, 0, 0], 219 [ 0, 0, 0, 0, 0, 0, -1, 0], 220 [ 0, 0, 0, 0, 0, 0, 1, 0], 221 [ 0, 0, 0, 0, 0, 0, 0, 1], 222 [ 0, 0, 0, 0, 0, 0, 0, -1]], 223 float64), 224 'b': array([0, -20, 0, -20, 0, -20, 0, -20, 0, 0, -1, 0.5, 0, -200], float64) 225 }, 226 MODEL_IT99: { # ['r2', 'dw', 'pA', 'tex'] 227 'scaling_matrix': diag(array([10, 10, 1, 1, 1, 1e-4], float64)), 228 'A': array( 229 [[ 1, 0, 0, 0, 0, 0], 230 [-1, 0, 0, 0, 0, 0], 231 [ 0, 1, 0, 0, 0, 0], 232 [ 0, -1, 0, 0, 0, 0], 233 [ 0, 0, 1, 0, 0, 0], 234 [ 0, 0, 0, 1, 0, 0], 235 [ 0, 0, 0, 0, -1, 0], 236 [ 0, 0, 0, 0, 1, 0], 237 [ 0, 0, 0, 0, 0, 1]], 238 float64), 239 'b': array([0, -20, 0, -20, 0, 0, -1, 0.5, 0], float64) 240 }, 241 MODEL_TSMFK01: { # ['r2a', 'dw', 'k_AB'] 242 'scaling_matrix': diag(array([10, 10, 1, 1, 20], float64)), 243 'A': array( 244 [[ 1, 0, 0, 0, 0], 245 [-1, 0, 0, 0, 0], 246 [ 0, 1, 0, 0, 0], 247 [ 0, -1, 0, 0, 0], 248 [ 0, 0, 1, 0, 0], 249 [ 0, 0, 0, 1, 0], 250 [ 0, 0, 0, 0, 1], 251 [ 0, 0, 0, 0, -1]], 252 float64), 253 'b': array([0, -20, 0, -20, 0, 0, 0, -5], float64) 254 }, 255 MODEL_B14: { # ['r2', 'dw', 'pA', 'kex'] 256 'scaling_matrix': diag(array([10, 10, 1, 1, 1, 10000], float64)), 257 'A': array( 258 [[ 1, 0, 0, 0, 0, 0], 259 [-1, 0, 0, 0, 0, 0], 260 [ 0, 1, 0, 0, 0, 0], 261 [ 0, -1, 0, 0, 0, 0], 262 [ 0, 0, 1, 0, 0, 0], 263 [ 0, 0, 0, 1, 0, 0], 264 [ 0, 0, 0, 0, -1, 0], 265 [ 0, 0, 0, 0, 1, 0], 266 [ 0, 0, 0, 0, 0, 1], 267 [ 0, 0, 0, 0, 0, -1]], 268 float64), 269 'b': array([0, -20, 0, -20, 0, 0, -1, 0.5, 0, -200], float64) 270 }, 271 MODEL_B14_FULL: { # ['r2a', 'r2b', 'dw', 'pA', 'kex'] 272 'scaling_matrix': diag(array([10, 10, 10, 10, 1, 1, 1, 10000], float64)), 273 'A': array( 274 [[ 1, 0, 0, 0, 0, 0, 0, 0], 275 [-1, 0, 0, 0, 0, 0, 0, 0], 276 [ 0, 1, 0, 0, 0, 0, 0, 0], 277 [ 0, -1, 0, 0, 0, 0, 0, 0], 278 [ 0, 0, 1, 0, 0, 0, 0, 0], 279 [ 0, 0, -1, 0, 0, 0, 0, 0], 280 [ 0, 0, 0, 1, 0, 0, 0, 0], 281 [ 0, 0, 0, -1, 0, 0, 0, 0], 282 [ 0, 0, 0, 0, 1, 0, 0, 0], 283 [ 0, 0, 0, 0, 0, 1, 0, 0], 284 [ 0, 0, 0, 0, 0, 0, -1, 0], 285 [ 0, 0, 0, 0, 0, 0, 1, 0], 286 [ 0, 0, 0, 0, 0, 0, 0, 1], 287 [ 0, 0, 0, 0, 0, 0, 0, -1]], 288 float64), 289 'b': array([0, -20, 0, -20, 0, -20, 0, -20, 0, 0, -1, 0.5, 0, -200], float64) 290 }, 291 MODEL_M61: { # ['r2', 'phi_ex', 'kex'] 292 'scaling_matrix': diag(array([10, 10, 1, 1, 10000], float64)), 293 'A': array( 294 [[ 1, 0, 0, 0, 0], 295 [-1, 0, 0, 0, 0], 296 [ 0, 1, 0, 0, 0], 297 [ 0, -1, 0, 0, 0], 298 [ 0, 0, 1, 0, 0], 299 [ 0, 0, 0, 1, 0], 300 [ 0, 0, 0, 0, 1], 301 [ 0, 0, 0, 0, -1]], 302 float64), 303 'b': array([0, -20, 0, -20, 0, 0, 0, -200], float64) 304 }, 305 MODEL_M61B: { # ['r2', 'dw', 'pA', 'kex'] 306 'scaling_matrix': diag(array([10, 10, 1, 1, 1, 10000], float64)), 307 'A': array( 308 [[ 1, 0, 0, 0, 0, 0], 309 [-1, 0, 0, 0, 0, 0], 310 [ 0, 1, 0, 0, 0, 0], 311 [ 0, -1, 0, 0, 0, 0], 312 [ 0, 0, 1, 0, 0, 0], 313 [ 0, 0, 0, 1, 0, 0], 314 [ 0, 0, 0, 0, -1, 0], 315 [ 0, 0, 0, 0, 1, 0], 316 [ 0, 0, 0, 0, 0, 1], 317 [ 0, 0, 0, 0, 0, -1]], 318 float64), 319 'b': array([0, -20, 0, -20, 0, 0, -1, 0.85, 0, -200], float64) 320 }, 321 MODEL_DPL94: { # ['r2', 'phi_ex', 'kex'] 322 'scaling_matrix': diag(array([10, 10, 1, 1, 10000], float64)), 323 'A': array( 324 [[ 1, 0, 0, 0, 0], 325 [-1, 0, 0, 0, 0], 326 [ 0, 1, 0, 0, 0], 327 [ 0, -1, 0, 0, 0], 328 [ 0, 0, 1, 0, 0], 329 [ 0, 0, 0, 1, 0], 330 [ 0, 0, 0, 0, 1], 331 [ 0, 0, 0, 0, -1]], 332 float64), 333 'b': array([0, -20, 0, -20, 0, 0, 0, -200], float64) 334 }, 335 MODEL_TP02: { # ['r2', 'dw', 'pA', 'kex'] 336 'scaling_matrix': diag(array([10, 10, 1, 1, 1, 10000], float64)), 337 'A': array( 338 [[ 1, 0, 0, 0, 0, 0], 339 [-1, 0, 0, 0, 0, 0], 340 [ 0, 1, 0, 0, 0, 0], 341 [ 0, -1, 0, 0, 0, 0], 342 [ 0, 0, 1, 0, 0, 0], 343 [ 0, 0, 0, 1, 0, 0], 344 [ 0, 0, 0, 0, -1, 0], 345 [ 0, 0, 0, 0, 1, 0], 346 [ 0, 0, 0, 0, 0, 1], 347 [ 0, 0, 0, 0, 0, -1]], 348 float64), 349 'b': array([0, -20, 0, -20, 0, 0, -1, 0.5, 0, -200], float64) 350 }, 351 MODEL_TAP03: { # ['r2', 'dw', 'pA', 'kex'] 352 'scaling_matrix': diag(array([10, 10, 1, 1, 1, 10000], float64)), 353 'A': array( 354 [[ 1, 0, 0, 0, 0, 0], 355 [-1, 0, 0, 0, 0, 0], 356 [ 0, 1, 0, 0, 0, 0], 357 [ 0, -1, 0, 0, 0, 0], 358 [ 0, 0, 1, 0, 0, 0], 359 [ 0, 0, 0, 1, 0, 0], 360 [ 0, 0, 0, 0, -1, 0], 361 [ 0, 0, 0, 0, 1, 0], 362 [ 0, 0, 0, 0, 0, 1], 363 [ 0, 0, 0, 0, 0, -1]], 364 float64), 365 'b': array([0, -20, 0, -20, 0, 0, -1, 0.5, 0, -200], float64) 366 }, 367 MODEL_MP05: { # ['r2', 'dw', 'pA', 'kex'] 368 'scaling_matrix': diag(array([10, 10, 1, 1, 1, 10000], float64)), 369 'A': array( 370 [[ 1, 0, 0, 0, 0, 0], 371 [-1, 0, 0, 0, 0, 0], 372 [ 0, 1, 0, 0, 0, 0], 373 [ 0, -1, 0, 0, 0, 0], 374 [ 0, 0, 1, 0, 0, 0], 375 [ 0, 0, 0, 1, 0, 0], 376 [ 0, 0, 0, 0, -1, 0], 377 [ 0, 0, 0, 0, 1, 0], 378 [ 0, 0, 0, 0, 0, 1], 379 [ 0, 0, 0, 0, 0, -1]], 380 float64), 381 'b': array([0, -20, 0, -20, 0, 0, -1, 0.5, 0, -200], float64) 382 }, 383 MODEL_NS_CPMG_2SITE_3D: { # ['r2', 'dw', 'pA', 'kex'] 384 'scaling_matrix': diag(array([10, 10, 1, 1, 1, 10000], float64)), 385 'A': array( 386 [[ 1, 0, 0, 0, 0, 0], 387 [-1, 0, 0, 0, 0, 0], 388 [ 0, 1, 0, 0, 0, 0], 389 [ 0, -1, 0, 0, 0, 0], 390 [ 0, 0, 1, 0, 0, 0], 391 [ 0, 0, 0, 1, 0, 0], 392 [ 0, 0, 0, 0, -1, 0], 393 [ 0, 0, 0, 0, 1, 0], 394 [ 0, 0, 0, 0, 0, 1], 395 [ 0, 0, 0, 0, 0, -1]], 396 float64), 397 'b': array([0, -20, 0, -20, 0, 0, -1, 0.5, 0, -200], float64) 398 }, 399 MODEL_NS_CPMG_2SITE_3D_FULL: { # ['r2a', 'r2b', 'dw', 'pA', 'kex'] 400 'scaling_matrix': diag(array([10, 10, 10, 10, 1, 1, 1, 10000], float64)), 401 'A': array( 402 [[ 1, 0, 0, 0, 0, 0, 0, 0], 403 [-1, 0, 0, 0, 0, 0, 0, 0], 404 [ 0, 1, 0, 0, 0, 0, 0, 0], 405 [ 0, -1, 0, 0, 0, 0, 0, 0], 406 [ 0, 0, 1, 0, 0, 0, 0, 0], 407 [ 0, 0, -1, 0, 0, 0, 0, 0], 408 [ 0, 0, 0, 1, 0, 0, 0, 0], 409 [ 0, 0, 0, -1, 0, 0, 0, 0], 410 [ 0, 0, 0, 0, 1, 0, 0, 0], 411 [ 0, 0, 0, 0, 0, 1, 0, 0], 412 [ 0, 0, 0, 0, 0, 0, -1, 0], 413 [ 0, 0, 0, 0, 0, 0, 1, 0], 414 [ 0, 0, 0, 0, 0, 0, 0, 1], 415 [ 0, 0, 0, 0, 0, 0, 0, -1]], 416 float64), 417 'b': array([0, -20, 0, -20, 0, -20, 0, -20, 0, 0, -1, 0.5, 0, -200], float64) 418 }, 419 MODEL_NS_CPMG_2SITE_STAR: { # ['r2', 'dw', 'pA', 'kex'] 420 'scaling_matrix': diag(array([10, 10, 1, 1, 1, 10000], float64)), 421 'A': array( 422 [[ 1, 0, 0, 0, 0, 0], 423 [-1, 0, 0, 0, 0, 0], 424 [ 0, 1, 0, 0, 0, 0], 425 [ 0, -1, 0, 0, 0, 0], 426 [ 0, 0, 1, 0, 0, 0], 427 [ 0, 0, 0, 1, 0, 0], 428 [ 0, 0, 0, 0, -1, 0], 429 [ 0, 0, 0, 0, 1, 0], 430 [ 0, 0, 0, 0, 0, 1], 431 [ 0, 0, 0, 0, 0, -1]], 432 float64), 433 'b': array([0, -20, 0, -20, 0, 0, -1, 0.5, 0, -200], float64) 434 }, 435 MODEL_NS_CPMG_2SITE_STAR_FULL: { # ['r2a', 'r2b', 'dw', 'pA', 'kex'] 436 'scaling_matrix': diag(array([10, 10, 10, 10, 1, 1, 1, 10000], float64)), 437 'A': array( 438 [[ 1, 0, 0, 0, 0, 0, 0, 0], 439 [-1, 0, 0, 0, 0, 0, 0, 0], 440 [ 0, 1, 0, 0, 0, 0, 0, 0], 441 [ 0, -1, 0, 0, 0, 0, 0, 0], 442 [ 0, 0, 1, 0, 0, 0, 0, 0], 443 [ 0, 0, -1, 0, 0, 0, 0, 0], 444 [ 0, 0, 0, 1, 0, 0, 0, 0], 445 [ 0, 0, 0, -1, 0, 0, 0, 0], 446 [ 0, 0, 0, 0, 1, 0, 0, 0], 447 [ 0, 0, 0, 0, 0, 1, 0, 0], 448 [ 0, 0, 0, 0, 0, 0, -1, 0], 449 [ 0, 0, 0, 0, 0, 0, 1, 0], 450 [ 0, 0, 0, 0, 0, 0, 0, 1], 451 [ 0, 0, 0, 0, 0, 0, 0, -1]], 452 float64), 453 'b': array([0, -20, 0, -20, 0, -20, 0, -20, 0, 0, -1, 0.5, 0, -200], float64) 454 }, 455 MODEL_NS_CPMG_2SITE_EXPANDED: { # ['r2', 'dw', 'pA', 'kex'] 456 'scaling_matrix': diag(array([10, 10, 1, 1, 1, 10000], float64)), 457 'A': array( 458 [[ 1, 0, 0, 0, 0, 0], 459 [-1, 0, 0, 0, 0, 0], 460 [ 0, 1, 0, 0, 0, 0], 461 [ 0, -1, 0, 0, 0, 0], 462 [ 0, 0, 1, 0, 0, 0], 463 [ 0, 0, 0, 1, 0, 0], 464 [ 0, 0, 0, 0, -1, 0], 465 [ 0, 0, 0, 0, 1, 0], 466 [ 0, 0, 0, 0, 0, 1], 467 [ 0, 0, 0, 0, 0, -1]], 468 float64), 469 'b': array([0, -20, 0, -20, 0, 0, -1, 0.5, 0, -200], float64) 470 }, 471 MODEL_NS_R1RHO_2SITE: { # ['r2', 'dw', 'pA', 'kex'] 472 'scaling_matrix': diag(array([10, 10, 1, 1, 1, 10000], float64)), 473 'A': array( 474 [[ 1, 0, 0, 0, 0, 0], 475 [-1, 0, 0, 0, 0, 0], 476 [ 0, 1, 0, 0, 0, 0], 477 [ 0, -1, 0, 0, 0, 0], 478 [ 0, 0, 1, 0, 0, 0], 479 [ 0, 0, 0, 1, 0, 0], 480 [ 0, 0, 0, 0, -1, 0], 481 [ 0, 0, 0, 0, 1, 0], 482 [ 0, 0, 0, 0, 0, 1], 483 [ 0, 0, 0, 0, 0, -1]], 484 float64), 485 'b': array([0, -20, 0, -20, 0, 0, -1, 0.5, 0, -200], float64) 486 }, 487 MODEL_NS_R1RHO_3SITE: { # ['r2', 'dw_AB', 'dw_BC', 'pA', 'kex_AB', 'pB', 'kex_BC', 'kex_AC'] 488 'scaling_matrix': diag(array([10, 10, 1, 1, 1, 1, 1, 10000, 1, 10000, 10000], float64)), 489 'A': array( 490 [[ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 491 [-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 492 [ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], 493 [ 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0], 494 [ 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0], 495 [ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], 496 [ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], 497 [ 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0], 498 [ 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0], 499 [ 0, 0, 0, 0, 0, 0, 1, 0, -1, 0, 0], 500 [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], 501 [ 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0], 502 [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], 503 [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1]], 504 float64), 505 'b': array([0, -20, 0, -20, -1, 0.5, 0, -200, -1, 0, 0, -200, 0, -200], float64) 506 }, 507 MODEL_NS_R1RHO_3SITE_LINEAR: { # ['r2', 'dw_AB', 'dw_BC', 'pA', 'kex_AB', 'pB', 'kex_BC'] 508 'scaling_matrix': diag(array([10, 10, 1, 1, 1, 1, 1, 10000, 1, 10000], float64)), 509 'A': array( 510 [[ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], 511 [-1, 0, 0, 0, 0, 0, 0, 0, 0, 0], 512 [ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], 513 [ 0, -1, 0, 0, 0, 0, 0, 0, 0, 0], 514 [ 0, 0, 0, 0, 0, 0, -1, 0, 0, 0], 515 [ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], 516 [ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], 517 [ 0, 0, 0, 0, 0, 0, 0, -1, 0, 0], 518 [ 0, 0, 0, 0, 0, 0, -1, 0, -1, 0], 519 [ 0, 0, 0, 0, 0, 0, 1, 0, -1, 0], 520 [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], 521 [ 0, 0, 0, 0, 0, 0, 0, 0, 0, -1]], 522 float64), 523 'b': array([0, -20, 0, -20, -1, 0.5, 0, -200, -1, 0, 0, -200], float64) 524 }, 525 MODEL_MMQ_CR72: { # ['r2', 'dw', 'dwH', 'pA', 'kex'] 526 'scaling_matrix': diag(array([10, 10, 1, 1, 1, 1, 1, 10000], float64)), 527 'A': array( 528 [[ 1, 0, 0, 0, 0, 0, 0, 0], 529 [-1, 0, 0, 0, 0, 0, 0, 0], 530 [ 0, 1, 0, 0, 0, 0, 0, 0], 531 [ 0, -1, 0, 0, 0, 0, 0, 0], 532 [ 0, 0, 0, 0, 0, 0, -1, 0], 533 [ 0, 0, 0, 0, 0, 0, 1, 0], 534 [ 0, 0, 0, 0, 0, 0, 0, 1], 535 [ 0, 0, 0, 0, 0, 0, 0, -1]], 536 float64), 537 'b': array([0, -20, 0, -20, -1, 0.5, 0, -200], float64) 538 }, 539 MODEL_NS_MMQ_2SITE: { # ['r2', 'dw', 'dwH', 'pA', 'kex'] 540 'scaling_matrix': diag(array([10, 10, 1, 1, 1, 1, 1, 10000], float64)), 541 'A': array( 542 [[ 1, 0, 0, 0, 0, 0, 0, 0], 543 [-1, 0, 0, 0, 0, 0, 0, 0], 544 [ 0, 1, 0, 0, 0, 0, 0, 0], 545 [ 0, -1, 0, 0, 0, 0, 0, 0], 546 [ 0, 0, 0, 0, 0, 0, -1, 0], 547 [ 0, 0, 0, 0, 0, 0, 1, 0], 548 [ 0, 0, 0, 0, 0, 0, 0, 1], 549 [ 0, 0, 0, 0, 0, 0, 0, -1]], 550 float64), 551 'b': array([0, -20, 0, -20, -1, 0.5, 0, -200], float64) 552 }, 553 MODEL_NS_MMQ_3SITE: { # ['r2', 'dw_AB', 'dw_BC', 'dwH_AB', 'dwH_BC', 'pA', 'kex_AB', 'pB', 'kex_BC', 'kex_AC'] 554 'scaling_matrix': diag(array([10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10000, 1, 10000, 10000], float64)), 555 'A': array( 556 [[ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 557 [-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 558 [ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 559 [ 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 560 [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0], 561 [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], 562 [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], 563 [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0], 564 [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0], 565 [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, -1, 0, 0], 566 [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], 567 [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0], 568 [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], 569 [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1]], 570 float64), 571 'b': array([0, -20, 0, -20, -1, 0.5, 0, -200, -1, 0, 0, -200, 0, -200], float64) 572 }, 573 MODEL_NS_MMQ_3SITE_LINEAR: { # ['r2', 'dw_AB', 'dw_BC', 'dwH_AB', 'dwH_BC', 'pA', 'kex_AB', 'pB', 'kex_BC'] 574 'scaling_matrix': diag(array([10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10000, 1, 10000], float64)), 575 'A': array( 576 [[ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 577 [-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 578 [ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 579 [ 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 580 [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0], 581 [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], 582 [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], 583 [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0], 584 [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0], 585 [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, -1, 0], 586 [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], 587 [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1]], 588 float64), 589 'b': array([0, -20, 0, -20, -1, 0.5, 0, -200, -1, 0, 0, -200], float64) 590 }, 591 } 592 593 # Loop over all models. 594 print("Checking the linear constraints for a cluster of 2 spins.") 595 for model in MODEL_LIST_FULL: 596 # Sanity check. 597 if model not in expected: 598 raise RelaxError("The model '%s' is not being checked." % model) 599 600 # Printout. 601 print(" Model '%s'." % model) 602 603 # Set up the data store. 604 ds.add(pipe_name=model, pipe_type='relax_disp') 605 if model == MODEL_R2EFF: 606 cdp.model_type = 'R2eff' 607 else: 608 cdp.model_type = 'disp' 609 cdp.exp_type_list = [self.exp_type[model]] 610 cdp.spectrometer_frq_list = [1e6] 611 spins = [SpinContainer(), SpinContainer()] 612 for spin in spins: 613 spin.model = model 614 spin.params = deepcopy(MODEL_PARAMS[model]) 615 616 # Build the linear constraints. 617 A, b = linear_constraints(spins=spins, scaling_matrix=expected[model]['scaling_matrix']) 618 619 # Array checks. 620 self.assert_(array_equal(A, expected[model]['A'])) 621 self.assert_(array_equal(b, expected[model]['b']))
622 623
625 """Test the specific_analyses.relax_disp.parameters.linear_constraints() function for a single spin.""" 626 627 # The expected parameter information. 628 expected = { 629 MODEL_R2EFF: { 630 'scaling_matrix': diag(array([1], float64)), 631 'A': array([[1], [-1]], float64), 632 'b': array([0, -200], float64) 633 }, 634 MODEL_NOREX: { 635 'scaling_matrix': diag(array([10], float64)), 636 'A': array([[1], [-1]], float64), 637 'b': array([0, -20], float64) 638 }, 639 MODEL_LM63: { 640 'scaling_matrix': diag(array([10, 1, 10000], float64)), 641 'A': array( 642 [[ 1, 0, 0], 643 [-1, 0, 0], 644 [ 0, 1, 0], 645 [ 0, 0, 1], 646 [ 0, 0, -1]], 647 float64), 648 'b': array([0, -20, 0, 0, -200], float64) 649 }, 650 MODEL_LM63_3SITE: { 651 'scaling_matrix': diag(array([10, 1, 1, 10000, 10000], float64)), 652 'A': array( 653 [[ 1, 0, 0, 0, 0], 654 [-1, 0, 0, 0, 0], 655 [ 0, 1, 0, 0, 0], 656 [ 0, 0, 1, 0, 0], 657 [ 0, 0, 0, 1, 0], 658 [ 0, 0, 0, -1, 0], 659 [ 0, 0, 0, 0, 1], 660 [ 0, 0, 0, 0, -1]], 661 float64), 662 'b': array([0, -20, 0, 0, 0, -200, 0, -200], float64) 663 }, 664 MODEL_CR72: { 665 'scaling_matrix': diag(array([10, 1, 1, 10000], float64)), 666 'A': array( 667 [[ 1, 0, 0, 0], 668 [-1, 0, 0, 0], 669 [ 0, 1, 0, 0], 670 [ 0, 0, -1, 0], 671 [ 0, 0, 1, 0], 672 [ 0, 0, 0, 1], 673 [ 0, 0, 0, -1]], 674 float64), 675 'b': array([0, -20, 0, -1, 0.5, 0, -200], float64) 676 }, 677 MODEL_CR72_FULL: { 678 'scaling_matrix': diag(array([10, 10, 1, 1, 10000], float64)), 679 'A': array( 680 [[ 1, 0, 0, 0, 0], 681 [-1, 0, 0, 0, 0], 682 [ 0, 1, 0, 0, 0], 683 [ 0, -1, 0, 0, 0], 684 [ 0, 0, 1, 0, 0], 685 [ 0, 0, 0, -1, 0], 686 [ 0, 0, 0, 1, 0], 687 [ 0, 0, 0, 0, 1], 688 [ 0, 0, 0, 0, -1]], 689 float64), 690 'b': array([0, -20, 0, -20, 0, -1, 0.5, 0, -200], float64) 691 }, 692 MODEL_IT99: { 693 'scaling_matrix': diag(array([10, 1, 1, 1e-4], float64)), 694 'A': array( 695 [[ 1, 0, 0, 0], 696 [-1, 0, 0, 0], 697 [ 0, 1, 0, 0], 698 [ 0, 0, -1, 0], 699 [ 0, 0, 1, 0], 700 [ 0, 0, 0, 1]], 701 float64), 702 'b': array([0, -20, 0, -1, 0.5, 0], float64) 703 }, 704 MODEL_TSMFK01: { 705 'scaling_matrix': diag(array([10, 1, 20], float64)), 706 'A': array( 707 [[ 1, 0, 0], 708 [-1, 0, 0], 709 [ 0, 1, 0], 710 [ 0, 0, 1], 711 [ 0, 0, -1]], 712 float64), 713 'b': array([0, -20, 0, 0, -5], float64) 714 }, 715 MODEL_B14: { 716 'scaling_matrix': diag(array([10, 1, 1, 10000], float64)), 717 'A': array( 718 [[ 1, 0, 0, 0], 719 [-1, 0, 0, 0], 720 [ 0, 1, 0, 0], 721 [ 0, 0, -1, 0], 722 [ 0, 0, 1, 0], 723 [ 0, 0, 0, 1], 724 [ 0, 0, 0, -1]], 725 float64), 726 'b': array([0, -20, 0, -1, 0.5, 0, -200], float64) 727 }, 728 MODEL_B14_FULL: { 729 'scaling_matrix': diag(array([10, 10, 1, 1, 10000], float64)), 730 'A': array( 731 [[ 1, 0, 0, 0, 0], 732 [-1, 0, 0, 0, 0], 733 [ 0, 1, 0, 0, 0], 734 [ 0, -1, 0, 0, 0], 735 [ 0, 0, 1, 0, 0], 736 [ 0, 0, 0, -1, 0], 737 [ 0, 0, 0, 1, 0], 738 [ 0, 0, 0, 0, 1], 739 [ 0, 0, 0, 0, -1]], 740 float64), 741 'b': array([0, -20, 0, -20, 0, -1, 0.5, 0, -200], float64) 742 }, 743 MODEL_M61: { 744 'scaling_matrix': diag(array([10, 1, 10000], float64)), 745 'A': array( 746 [[ 1, 0, 0], 747 [-1, 0, 0], 748 [ 0, 1, 0], 749 [ 0, 0, 1], 750 [ 0, 0, -1]], 751 float64), 752 'b': array([0, -20, 0, 0, -200], float64) 753 }, 754 MODEL_M61B: { 755 'scaling_matrix': diag(array([10, 1, 1, 10000], float64)), 756 'A': array( 757 [[ 1, 0, 0, 0], 758 [-1, 0, 0, 0], 759 [ 0, 1, 0, 0], 760 [ 0, 0, -1, 0], 761 [ 0, 0, 1, 0], 762 [ 0, 0, 0, 1], 763 [ 0, 0, 0, -1]], 764 float64), 765 'b': array([0, -20, 0, -1, 0.85, 0, -200], float64) 766 }, 767 MODEL_DPL94: { 768 'scaling_matrix': diag(array([10, 1, 10000], float64)), 769 'A': array( 770 [[ 1, 0, 0], 771 [-1, 0, 0], 772 [ 0, 1, 0], 773 [ 0, 0, 1], 774 [ 0, 0, -1]], 775 float64), 776 'b': array([0, -20, 0, 0, -200], float64) 777 }, 778 MODEL_TP02: { 779 'scaling_matrix': diag(array([10, 1, 1, 10000], float64)), 780 'A': array( 781 [[ 1, 0, 0, 0], 782 [-1, 0, 0, 0], 783 [ 0, 1, 0, 0], 784 [ 0, 0, -1, 0], 785 [ 0, 0, 1, 0], 786 [ 0, 0, 0, 1], 787 [ 0, 0, 0, -1]], 788 float64), 789 'b': array([0, -20, 0, -1, 0.5, 0, -200], float64) 790 }, 791 MODEL_TAP03: { 792 'scaling_matrix': diag(array([10, 1, 1, 10000], float64)), 793 'A': array( 794 [[ 1, 0, 0, 0], 795 [-1, 0, 0, 0], 796 [ 0, 1, 0, 0], 797 [ 0, 0, -1, 0], 798 [ 0, 0, 1, 0], 799 [ 0, 0, 0, 1], 800 [ 0, 0, 0, -1]], 801 float64), 802 'b': array([0, -20, 0, -1, 0.5, 0, -200], float64) 803 }, 804 MODEL_MP05: { 805 'scaling_matrix': diag(array([10, 1, 1, 10000], float64)), 806 'A': array( 807 [[ 1, 0, 0, 0], 808 [-1, 0, 0, 0], 809 [ 0, 1, 0, 0], 810 [ 0, 0, -1, 0], 811 [ 0, 0, 1, 0], 812 [ 0, 0, 0, 1], 813 [ 0, 0, 0, -1]], 814 float64), 815 'b': array([0, -20, 0, -1, 0.5, 0, -200], float64) 816 }, 817 MODEL_NS_CPMG_2SITE_3D: { 818 'scaling_matrix': diag(array([10, 1, 1, 10000], float64)), 819 'A': array( 820 [[ 1, 0, 0, 0], 821 [-1, 0, 0, 0], 822 [ 0, 1, 0, 0], 823 [ 0, 0, -1, 0], 824 [ 0, 0, 1, 0], 825 [ 0, 0, 0, 1], 826 [ 0, 0, 0, -1]], 827 float64), 828 'b': array([0, -20, 0, -1, 0.5, 0, -200], float64) 829 }, 830 MODEL_NS_CPMG_2SITE_3D_FULL: { 831 'scaling_matrix': diag(array([10, 10, 1, 1, 10000], float64)), 832 'A': array( 833 [[ 1, 0, 0, 0, 0], 834 [-1, 0, 0, 0, 0], 835 [ 0, 1, 0, 0, 0], 836 [ 0, -1, 0, 0, 0], 837 [ 0, 0, 1, 0, 0], 838 [ 0, 0, 0, -1, 0], 839 [ 0, 0, 0, 1, 0], 840 [ 0, 0, 0, 0, 1], 841 [ 0, 0, 0, 0, -1]], 842 float64), 843 'b': array([0, -20, 0, -20, 0, -1, 0.5, 0, -200], float64) 844 }, 845 MODEL_NS_CPMG_2SITE_STAR: { 846 'scaling_matrix': diag(array([10, 1, 1, 10000], float64)), 847 'A': array( 848 [[ 1, 0, 0, 0], 849 [-1, 0, 0, 0], 850 [ 0, 1, 0, 0], 851 [ 0, 0, -1, 0], 852 [ 0, 0, 1, 0], 853 [ 0, 0, 0, 1], 854 [ 0, 0, 0, -1]], 855 float64), 856 'b': array([0, -20, 0, -1, 0.5, 0, -200], float64) 857 }, 858 MODEL_NS_CPMG_2SITE_STAR_FULL: { 859 'scaling_matrix': diag(array([10, 10, 1, 1, 10000], float64)), 860 'A': array( 861 [[ 1, 0, 0, 0, 0], 862 [-1, 0, 0, 0, 0], 863 [ 0, 1, 0, 0, 0], 864 [ 0, -1, 0, 0, 0], 865 [ 0, 0, 1, 0, 0], 866 [ 0, 0, 0, -1, 0], 867 [ 0, 0, 0, 1, 0], 868 [ 0, 0, 0, 0, 1], 869 [ 0, 0, 0, 0, -1]], 870 float64), 871 'b': array([0, -20, 0, -20, 0, -1, 0.5, 0, -200], float64) 872 }, 873 MODEL_NS_CPMG_2SITE_EXPANDED: { 874 'scaling_matrix': diag(array([10, 1, 1, 10000], float64)), 875 'A': array( 876 [[ 1, 0, 0, 0], 877 [-1, 0, 0, 0], 878 [ 0, 1, 0, 0], 879 [ 0, 0, -1, 0], 880 [ 0, 0, 1, 0], 881 [ 0, 0, 0, 1], 882 [ 0, 0, 0, -1]], 883 float64), 884 'b': array([0, -20, 0, -1, 0.5, 0, -200], float64) 885 }, 886 MODEL_NS_R1RHO_2SITE: { 887 'scaling_matrix': diag(array([10, 1, 1, 10000], float64)), 888 'A': array( 889 [[ 1, 0, 0, 0], 890 [-1, 0, 0, 0], 891 [ 0, 1, 0, 0], 892 [ 0, 0, -1, 0], 893 [ 0, 0, 1, 0], 894 [ 0, 0, 0, 1], 895 [ 0, 0, 0, -1]], 896 float64), 897 'b': array([0, -20, 0, -1, 0.5, 0, -200], float64) 898 }, 899 MODEL_NS_R1RHO_3SITE: { # ['r2', 'dw_AB', 'dw_BC', 'pA', 'kex_AB', 'pB', 'kex_BC', 'kex_AC'] 900 'scaling_matrix': diag(array([10, 1, 1, 1, 10000, 1, 10000, 10000], float64)), 901 'A': array( 902 [[ 1, 0, 0, 0, 0, 0, 0, 0], 903 [-1, 0, 0, 0, 0, 0, 0, 0], 904 [ 0, 0, 0, -1, 0, 0, 0, 0], 905 [ 0, 0, 0, 1, 0, 0, 0, 0], 906 [ 0, 0, 0, 0, 1, 0, 0, 0], 907 [ 0, 0, 0, 0, -1, 0, 0, 0], 908 [ 0, 0, 0, -1, 0, -1, 0, 0], 909 [ 0, 0, 0, 1, 0, -1, 0, 0], 910 [ 0, 0, 0, 0, 0, 0, 1, 0], 911 [ 0, 0, 0, 0, 0, 0, -1, 0], 912 [ 0, 0, 0, 0, 0, 0, 0, 1], 913 [ 0, 0, 0, 0, 0, 0, 0, -1]], 914 float64), 915 'b': array([0, -20, -1, 0.5, 0, -200, -1, 0, 0, -200, 0, -200], float64) 916 }, 917 MODEL_NS_R1RHO_3SITE_LINEAR: { # ['r2', 'dw_AB', 'dw_BC', 'pA', 'kex_AB', 'pB', 'kex_BC'] 918 'scaling_matrix': diag(array([10, 1, 1, 1, 10000, 1, 10000], float64)), 919 'A': array( 920 [[ 1, 0, 0, 0, 0, 0, 0], 921 [-1, 0, 0, 0, 0, 0, 0], 922 [ 0, 0, 0, -1, 0, 0, 0], 923 [ 0, 0, 0, 1, 0, 0, 0], 924 [ 0, 0, 0, 0, 1, 0, 0], 925 [ 0, 0, 0, 0, -1, 0, 0], 926 [ 0, 0, 0, -1, 0, -1, 0], 927 [ 0, 0, 0, 1, 0, -1, 0], 928 [ 0, 0, 0, 0, 0, 0, 1], 929 [ 0, 0, 0, 0, 0, 0, -1]], 930 float64), 931 'b': array([0, -20, -1, 0.5, 0, -200, -1, 0, 0, -200], float64) 932 }, 933 MODEL_MMQ_CR72: { # ['r2', 'dw', 'dwH', 'pA', 'kex'] 934 'scaling_matrix': diag(array([10, 1, 1, 1, 10000], float64)), 935 'A': array( 936 [[ 1, 0, 0, 0, 0], 937 [-1, 0, 0, 0, 0], 938 [ 0, 0, 0, -1, 0], 939 [ 0, 0, 0, 1, 0], 940 [ 0, 0, 0, 0, 1], 941 [ 0, 0, 0, 0, -1]], 942 float64), 943 'b': array([0, -20, -1, 0.5, 0, -200], float64) 944 }, 945 MODEL_NS_MMQ_2SITE: { # ['r2', 'dw', 'dwH', 'pA', 'kex'] 946 'scaling_matrix': diag(array([10, 1, 1, 1, 10000], float64)), 947 'A': array( 948 [[ 1, 0, 0, 0, 0], 949 [-1, 0, 0, 0, 0], 950 [ 0, 0, 0, -1, 0], 951 [ 0, 0, 0, 1, 0], 952 [ 0, 0, 0, 0, 1], 953 [ 0, 0, 0, 0, -1]], 954 float64), 955 'b': array([0, -20, -1, 0.5, 0, -200], float64) 956 }, 957 MODEL_NS_MMQ_3SITE: { # ['r2', 'dw_AB', 'dw_BC', 'dwH_AB', 'dwH_BC', 'pA', 'kex_AB', 'pB', 'kex_BC', 'kex_AC'] 958 'scaling_matrix': diag(array([10, 1, 1, 1, 1, 1, 10000, 1, 10000, 10000], float64)), 959 'A': array( 960 [[ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], 961 [-1, 0, 0, 0, 0, 0, 0, 0, 0, 0], 962 [ 0, 0, 0, 0, 0, -1, 0, 0, 0, 0], 963 [ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], 964 [ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], 965 [ 0, 0, 0, 0, 0, 0, -1, 0, 0, 0], 966 [ 0, 0, 0, 0, 0, -1, 0, -1, 0, 0], 967 [ 0, 0, 0, 0, 0, 1, 0, -1, 0, 0], 968 [ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], 969 [ 0, 0, 0, 0, 0, 0, 0, 0, -1, 0], 970 [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], 971 [ 0, 0, 0, 0, 0, 0, 0, 0, 0, -1]], 972 float64), 973 'b': array([0, -20, -1, 0.5, 0, -200, -1, 0, 0, -200, 0, -200], float64) 974 }, 975 MODEL_NS_MMQ_3SITE_LINEAR: { # ['r2', 'dw_AB', 'dw_BC', 'dwH_AB', 'dwH_BC', 'pA', 'kex_AB', 'pB', 'kex_BC'] 976 'scaling_matrix': diag(array([10, 1, 1, 1, 1, 1, 10000, 1, 10000], float64)), 977 'A': array( 978 [[ 1, 0, 0, 0, 0, 0, 0, 0, 0], 979 [-1, 0, 0, 0, 0, 0, 0, 0, 0], 980 [ 0, 0, 0, 0, 0, -1, 0, 0, 0], 981 [ 0, 0, 0, 0, 0, 1, 0, 0, 0], 982 [ 0, 0, 0, 0, 0, 0, 1, 0, 0], 983 [ 0, 0, 0, 0, 0, 0, -1, 0, 0], 984 [ 0, 0, 0, 0, 0, -1, 0, -1, 0], 985 [ 0, 0, 0, 0, 0, 1, 0, -1, 0], 986 [ 0, 0, 0, 0, 0, 0, 0, 0, 1], 987 [ 0, 0, 0, 0, 0, 0, 0, 0, -1]], 988 float64), 989 'b': array([0, -20, -1, 0.5, 0, -200, -1, 0, 0, -200], float64) 990 }, 991 } 992 993 # Loop over all models. 994 print("Checking the linear constraints for a single spin.") 995 for model in MODEL_LIST_FULL: 996 # Sanity check. 997 if model not in expected: 998 raise RelaxError("The model '%s' is not being checked." % model) 999 1000 # Printout. 1001 print(" Model '%s'." % model) 1002 1003 # Set up the data store. 1004 ds.add(pipe_name=model, pipe_type='relax_disp') 1005 if model == MODEL_R2EFF: 1006 cdp.model_type = 'R2eff' 1007 else: 1008 cdp.model_type = 'disp' 1009 cdp.exp_type_list = [self.exp_type[model]] 1010 cdp.spectrometer_frq_list = [1e6] 1011 spin = SpinContainer() 1012 spin.model = model 1013 spin.params = deepcopy(MODEL_PARAMS[model]) 1014 1015 # Build the linear constraints. 1016 A, b = linear_constraints(spins=[spin], scaling_matrix=expected[model]['scaling_matrix']) 1017 1018 # Array checks. 1019 self.assert_(array_equal(A, expected[model]['A'])) 1020 self.assert_(array_equal(b, expected[model]['b']))
1021 1022
1024 """Test the specific_analyses.relax_disp.parameters.loop_parameters() function for a cluster of 2 spins.""" 1025 1026 # The expected parameter information. 1027 expected = { 1028 MODEL_R2EFF: [ 1029 ['r2eff', 0, None], 1030 ['r2eff', 1, None], 1031 ], 1032 MODEL_NOREX: [ 1033 ['r2', 0, 'No Rex - 1.00000000 MHz'], 1034 ['r2', 1, 'No Rex - 1.00000000 MHz'], 1035 ], 1036 MODEL_LM63: [ 1037 ['r2', 0, 'SQ CPMG - 1.00000000 MHz'], 1038 ['r2', 1, 'SQ CPMG - 1.00000000 MHz'], 1039 ['phi_ex', 0, None], 1040 ['phi_ex', 1, None], 1041 ['kex', None, None], 1042 ], 1043 MODEL_LM63_3SITE: [ 1044 ['r2', 0, 'SQ CPMG - 1.00000000 MHz'], 1045 ['r2', 1, 'SQ CPMG - 1.00000000 MHz'], 1046 ['phi_ex_B', 0, None], 1047 ['phi_ex_C', 0, None], 1048 ['phi_ex_B', 1, None], 1049 ['phi_ex_C', 1, None], 1050 ['kB', None, None], 1051 ['kC', None, None], 1052 ], 1053 MODEL_CR72: [ 1054 ['r2', 0, 'SQ CPMG - 1.00000000 MHz'], 1055 ['r2', 1, 'SQ CPMG - 1.00000000 MHz'], 1056 ['dw', 0, None], 1057 ['dw', 1, None], 1058 ['pA', None, None], 1059 ['kex', None, None], 1060 ], 1061 MODEL_CR72_FULL: [ 1062 ['r2a', 0, 'SQ CPMG - 1.00000000 MHz'], 1063 ['r2b', 0, 'SQ CPMG - 1.00000000 MHz'], 1064 ['r2a', 1, 'SQ CPMG - 1.00000000 MHz'], 1065 ['r2b', 1, 'SQ CPMG - 1.00000000 MHz'], 1066 ['dw', 0, None], 1067 ['dw', 1, None], 1068 ['pA', None, None], 1069 ['kex', None, None], 1070 ], 1071 MODEL_IT99: [ 1072 ['r2', 0, 'SQ CPMG - 1.00000000 MHz'], 1073 ['r2', 1, 'SQ CPMG - 1.00000000 MHz'], 1074 ['dw', 0, None], 1075 ['dw', 1, None], 1076 ['pA', None, None], 1077 ['tex', None, None], 1078 ], 1079 MODEL_TSMFK01: [ 1080 ['r2a', 0, 'SQ CPMG - 1.00000000 MHz'], 1081 ['r2a', 1, 'SQ CPMG - 1.00000000 MHz'], 1082 ['dw', 0, None], 1083 ['dw', 1, None], 1084 ['k_AB', None, None], 1085 ], 1086 MODEL_B14: [ 1087 ['r2', 0, 'SQ CPMG - 1.00000000 MHz'], 1088 ['r2', 1, 'SQ CPMG - 1.00000000 MHz'], 1089 ['dw', 0, None], 1090 ['dw', 1, None], 1091 ['pA', None, None], 1092 ['kex', None, None], 1093 ], 1094 MODEL_B14_FULL: [ 1095 ['r2a', 0, 'SQ CPMG - 1.00000000 MHz'], 1096 ['r2b', 0, 'SQ CPMG - 1.00000000 MHz'], 1097 ['r2a', 1, 'SQ CPMG - 1.00000000 MHz'], 1098 ['r2b', 1, 'SQ CPMG - 1.00000000 MHz'], 1099 ['dw', 0, None], 1100 ['dw', 1, None], 1101 ['pA', None, None], 1102 ['kex', None, None], 1103 ], 1104 MODEL_M61: [ 1105 ['r2', 0, 'R1rho - 1.00000000 MHz'], 1106 ['r2', 1, 'R1rho - 1.00000000 MHz'], 1107 ['phi_ex', 0, None], 1108 ['phi_ex', 1, None], 1109 ['kex', None, None], 1110 ], 1111 MODEL_M61B: [ 1112 ['r2', 0, 'R1rho - 1.00000000 MHz'], 1113 ['r2', 1, 'R1rho - 1.00000000 MHz'], 1114 ['dw', 0, None], 1115 ['dw', 1, None], 1116 ['pA', None, None], 1117 ['kex', None, None], 1118 ], 1119 MODEL_DPL94: [ 1120 ['r2', 0, 'R1rho - 1.00000000 MHz'], 1121 ['r2', 1, 'R1rho - 1.00000000 MHz'], 1122 ['phi_ex', 0, None], 1123 ['phi_ex', 1, None], 1124 ['kex', None, None], 1125 ], 1126 MODEL_TP02: [ 1127 ['r2', 0, 'R1rho - 1.00000000 MHz'], 1128 ['r2', 1, 'R1rho - 1.00000000 MHz'], 1129 ['dw', 0, None], 1130 ['dw', 1, None], 1131 ['pA', None, None], 1132 ['kex', None, None], 1133 ], 1134 MODEL_TAP03: [ 1135 ['r2', 0, 'R1rho - 1.00000000 MHz'], 1136 ['r2', 1, 'R1rho - 1.00000000 MHz'], 1137 ['dw', 0, None], 1138 ['dw', 1, None], 1139 ['pA', None, None], 1140 ['kex', None, None], 1141 ], 1142 MODEL_MP05: [ 1143 ['r2', 0, 'R1rho - 1.00000000 MHz'], 1144 ['r2', 1, 'R1rho - 1.00000000 MHz'], 1145 ['dw', 0, None], 1146 ['dw', 1, None], 1147 ['pA', None, None], 1148 ['kex', None, None], 1149 ], 1150 MODEL_NS_CPMG_2SITE_3D: [ 1151 ['r2', 0, 'SQ CPMG - 1.00000000 MHz'], 1152 ['r2', 1, 'SQ CPMG - 1.00000000 MHz'], 1153 ['dw', 0, None], 1154 ['dw', 1, None], 1155 ['pA', None, None], 1156 ['kex', None, None], 1157 ], 1158 MODEL_NS_CPMG_2SITE_3D_FULL: [ 1159 ['r2a', 0, 'SQ CPMG - 1.00000000 MHz'], 1160 ['r2b', 0, 'SQ CPMG - 1.00000000 MHz'], 1161 ['r2a', 1, 'SQ CPMG - 1.00000000 MHz'], 1162 ['r2b', 1, 'SQ CPMG - 1.00000000 MHz'], 1163 ['dw', 0, None], 1164 ['dw', 1, None], 1165 ['pA', None, None], 1166 ['kex', None, None], 1167 ], 1168 MODEL_NS_CPMG_2SITE_STAR: [ 1169 ['r2', 0, 'SQ CPMG - 1.00000000 MHz'], 1170 ['r2', 1, 'SQ CPMG - 1.00000000 MHz'], 1171 ['dw', 0, None], 1172 ['dw', 1, None], 1173 ['pA', None, None], 1174 ['kex', None, None], 1175 ], 1176 MODEL_NS_CPMG_2SITE_STAR_FULL: [ 1177 ['r2a', 0, 'SQ CPMG - 1.00000000 MHz'], 1178 ['r2b', 0, 'SQ CPMG - 1.00000000 MHz'], 1179 ['r2a', 1, 'SQ CPMG - 1.00000000 MHz'], 1180 ['r2b', 1, 'SQ CPMG - 1.00000000 MHz'], 1181 ['dw', 0, None], 1182 ['dw', 1, None], 1183 ['pA', None, None], 1184 ['kex', None, None], 1185 ], 1186 MODEL_NS_CPMG_2SITE_EXPANDED: [ 1187 ['r2', 0, 'SQ CPMG - 1.00000000 MHz'], 1188 ['r2', 1, 'SQ CPMG - 1.00000000 MHz'], 1189 ['dw', 0, None], 1190 ['dw', 1, None], 1191 ['pA', None, None], 1192 ['kex', None, None], 1193 ], 1194 MODEL_NS_R1RHO_2SITE: [ 1195 ['r2', 0, 'R1rho - 1.00000000 MHz'], 1196 ['r2', 1, 'R1rho - 1.00000000 MHz'], 1197 ['dw', 0, None], 1198 ['dw', 1, None], 1199 ['pA', None, None], 1200 ['kex', None, None], 1201 ], 1202 MODEL_NS_R1RHO_3SITE: [ 1203 ['r2', 0, 'R1rho - 1.00000000 MHz'], 1204 ['r2', 1, 'R1rho - 1.00000000 MHz'], 1205 ['dw_AB', 0, None], 1206 ['dw_BC', 0, None], 1207 ['dw_AB', 1, None], 1208 ['dw_BC', 1, None], 1209 ['pA', None, None], 1210 ['kex_AB', None, None], 1211 ['pB', None, None], 1212 ['kex_BC', None, None], 1213 ['kex_AC', None, None], 1214 ], 1215 MODEL_NS_R1RHO_3SITE_LINEAR: [ 1216 ['r2', 0, 'R1rho - 1.00000000 MHz'], 1217 ['r2', 1, 'R1rho - 1.00000000 MHz'], 1218 ['dw_AB', 0, None], 1219 ['dw_BC', 0, None], 1220 ['dw_AB', 1, None], 1221 ['dw_BC', 1, None], 1222 ['pA', None, None], 1223 ['kex_AB', None, None], 1224 ['pB', None, None], 1225 ['kex_BC', None, None], 1226 ], 1227 MODEL_MMQ_CR72: [ 1228 ['r2', 0, 'CPMG: SQ, DQ, MQ, ZQ, 1H SQ, 1H MQ - 1.00000000 MHz'], 1229 ['r2', 1, 'CPMG: SQ, DQ, MQ, ZQ, 1H SQ, 1H MQ - 1.00000000 MHz'], 1230 ['dw', 0, None], 1231 ['dw', 1, None], 1232 ['dwH', 0, None], 1233 ['dwH', 1, None], 1234 ['pA', None, None], 1235 ['kex', None, None], 1236 ], 1237 MODEL_NS_MMQ_2SITE: [ 1238 ['r2', 0, 'CPMG: SQ, DQ, MQ, ZQ, 1H SQ, 1H MQ - 1.00000000 MHz'], 1239 ['r2', 1, 'CPMG: SQ, DQ, MQ, ZQ, 1H SQ, 1H MQ - 1.00000000 MHz'], 1240 ['dw', 0, None], 1241 ['dw', 1, None], 1242 ['dwH', 0, None], 1243 ['dwH', 1, None], 1244 ['pA', None, None], 1245 ['kex', None, None], 1246 ], 1247 MODEL_NS_MMQ_3SITE: [ 1248 ['r2', 0, 'CPMG: SQ, DQ, MQ, ZQ, 1H SQ, 1H MQ - 1.00000000 MHz'], 1249 ['r2', 1, 'CPMG: SQ, DQ, MQ, ZQ, 1H SQ, 1H MQ - 1.00000000 MHz'], 1250 ['dw_AB', 0, None], 1251 ['dw_BC', 0, None], 1252 ['dw_AB', 1, None], 1253 ['dw_BC', 1, None], 1254 ['dwH_AB', 0, None], 1255 ['dwH_BC', 0, None], 1256 ['dwH_AB', 1, None], 1257 ['dwH_BC', 1, None], 1258 ['pA', None, None], 1259 ['kex_AB', None, None], 1260 ['pB', None, None], 1261 ['kex_BC', None, None], 1262 ['kex_AC', None, None], 1263 ], 1264 MODEL_NS_MMQ_3SITE_LINEAR: [ 1265 ['r2', 0, 'CPMG: SQ, DQ, MQ, ZQ, 1H SQ, 1H MQ - 1.00000000 MHz'], 1266 ['r2', 1, 'CPMG: SQ, DQ, MQ, ZQ, 1H SQ, 1H MQ - 1.00000000 MHz'], 1267 ['dw_AB', 0, None], 1268 ['dw_BC', 0, None], 1269 ['dw_AB', 1, None], 1270 ['dw_BC', 1, None], 1271 ['dwH_AB', 0, None], 1272 ['dwH_BC', 0, None], 1273 ['dwH_AB', 1, None], 1274 ['dwH_BC', 1, None], 1275 ['pA', None, None], 1276 ['kex_AB', None, None], 1277 ['pB', None, None], 1278 ['kex_BC', None, None], 1279 ], 1280 } 1281 1282 # Loop over all models. 1283 print("Checking the parameter looping for a cluster of 2 spins.") 1284 for model in MODEL_LIST_FULL: 1285 # Sanity check. 1286 if model not in expected: 1287 raise RelaxError("The model '%s' is not being checked." % model) 1288 1289 # Printout. 1290 print(" Model '%s'." % model) 1291 1292 # Set up the data store. 1293 ds.add(pipe_name=model, pipe_type='relax_disp') 1294 if model == MODEL_R2EFF: 1295 cdp.model_type = 'R2eff' 1296 else: 1297 cdp.model_type = 'disp' 1298 cdp.exp_type_list = [self.exp_type[model]] 1299 cdp.spectrometer_frq_list = [1e6] 1300 spins = [SpinContainer(), SpinContainer()] 1301 for spin in spins: 1302 spin.model = model 1303 spin.params = deepcopy(MODEL_PARAMS[model]) 1304 1305 # Check the parameter loop. 1306 i = 0 1307 for name, param_index, spin_index, R20_key in loop_parameters(spins): 1308 print(" Parameter '%s', %s, %s, %s." % (name, param_index, spin_index, repr(R20_key))) 1309 self.assertEqual(name, expected[model][i][0]) 1310 self.assertEqual(spin_index, expected[model][i][1]) 1311 self.assertEqual(R20_key, expected[model][i][2]) 1312 i += 1 1313 1314 # Parameter count check. 1315 self.assertEqual(i, len(expected[model]))
1316 1317
1319 """Test the specific_analyses.relax_disp.parameters.loop_parameters() function for a single spin.""" 1320 1321 # The expected parameter information. 1322 expected = { 1323 MODEL_R2EFF: [ 1324 ['r2eff', 0, None], 1325 ], 1326 MODEL_NOREX: [ 1327 ['r2', 0, 'No Rex - 1.00000000 MHz'], 1328 ], 1329 MODEL_LM63: [ 1330 ['r2', 0, 'SQ CPMG - 1.00000000 MHz'], 1331 ['phi_ex', 0, None], 1332 ['kex', None, None], 1333 ], 1334 MODEL_LM63_3SITE: [ 1335 ['r2', 0, 'SQ CPMG - 1.00000000 MHz'], 1336 ['phi_ex_B', 0, None], 1337 ['phi_ex_C', 0, None], 1338 ['kB', None, None], 1339 ['kC', None, None], 1340 ], 1341 MODEL_CR72: [ 1342 ['r2', 0, 'SQ CPMG - 1.00000000 MHz'], 1343 ['dw', 0, None], 1344 ['pA', None, None], 1345 ['kex', None, None], 1346 ], 1347 MODEL_CR72_FULL: [ 1348 ['r2a', 0, 'SQ CPMG - 1.00000000 MHz'], 1349 ['r2b', 0, 'SQ CPMG - 1.00000000 MHz'], 1350 ['dw', 0, None], 1351 ['pA', None, None], 1352 ['kex', None, None], 1353 ], 1354 MODEL_IT99: [ 1355 ['r2', 0, 'SQ CPMG - 1.00000000 MHz'], 1356 ['dw', 0, None], 1357 ['pA', None, None], 1358 ['tex', None, None], 1359 ], 1360 MODEL_TSMFK01: [ 1361 ['r2a', 0, 'SQ CPMG - 1.00000000 MHz'], 1362 ['dw', 0, None], 1363 ['k_AB', None, None], 1364 ], 1365 MODEL_B14: [ 1366 ['r2', 0, 'SQ CPMG - 1.00000000 MHz'], 1367 ['dw', 0, None], 1368 ['pA', None, None], 1369 ['kex', None, None], 1370 ], 1371 MODEL_B14_FULL: [ 1372 ['r2a', 0, 'SQ CPMG - 1.00000000 MHz'], 1373 ['r2b', 0, 'SQ CPMG - 1.00000000 MHz'], 1374 ['dw', 0, None], 1375 ['pA', None, None], 1376 ['kex', None, None], 1377 ], 1378 MODEL_M61: [ 1379 ['r2', 0, 'R1rho - 1.00000000 MHz'], 1380 ['phi_ex', 0, None], 1381 ['kex', None, None], 1382 ], 1383 MODEL_M61B: [ 1384 ['r2', 0, 'R1rho - 1.00000000 MHz'], 1385 ['dw', 0, None], 1386 ['pA', None, None], 1387 ['kex', None, None], 1388 ], 1389 MODEL_DPL94: [ 1390 ['r2', 0, 'R1rho - 1.00000000 MHz'], 1391 ['phi_ex', 0, None], 1392 ['kex', None, None], 1393 ], 1394 MODEL_TP02: [ 1395 ['r2', 0, 'R1rho - 1.00000000 MHz'], 1396 ['dw', 0, None], 1397 ['pA', None, None], 1398 ['kex', None, None], 1399 ], 1400 MODEL_TAP03: [ 1401 ['r2', 0, 'R1rho - 1.00000000 MHz'], 1402 ['dw', 0, None], 1403 ['pA', None, None], 1404 ['kex', None, None], 1405 ], 1406 MODEL_MP05: [ 1407 ['r2', 0, 'R1rho - 1.00000000 MHz'], 1408 ['dw', 0, None], 1409 ['pA', None, None], 1410 ['kex', None, None], 1411 ], 1412 MODEL_NS_CPMG_2SITE_3D: [ 1413 ['r2', 0, 'SQ CPMG - 1.00000000 MHz'], 1414 ['dw', 0, None], 1415 ['pA', None, None], 1416 ['kex', None, None], 1417 ], 1418 MODEL_NS_CPMG_2SITE_3D_FULL: [ 1419 ['r2a', 0, 'SQ CPMG - 1.00000000 MHz'], 1420 ['r2b', 0, 'SQ CPMG - 1.00000000 MHz'], 1421 ['dw', 0, None], 1422 ['pA', None, None], 1423 ['kex', None, None], 1424 ], 1425 MODEL_NS_CPMG_2SITE_STAR: [ 1426 ['r2', 0, 'SQ CPMG - 1.00000000 MHz'], 1427 ['dw', 0, None], 1428 ['pA', None, None], 1429 ['kex', None, None], 1430 ], 1431 MODEL_NS_CPMG_2SITE_STAR_FULL: [ 1432 ['r2a', 0, 'SQ CPMG - 1.00000000 MHz'], 1433 ['r2b', 0, 'SQ CPMG - 1.00000000 MHz'], 1434 ['dw', 0, None], 1435 ['pA', None, None], 1436 ['kex', None, None], 1437 ], 1438 MODEL_NS_CPMG_2SITE_EXPANDED: [ 1439 ['r2', 0, 'SQ CPMG - 1.00000000 MHz'], 1440 ['dw', 0, None], 1441 ['pA', None, None], 1442 ['kex', None, None], 1443 ], 1444 MODEL_NS_R1RHO_2SITE: [ 1445 ['r2', 0, 'R1rho - 1.00000000 MHz'], 1446 ['dw', 0, None], 1447 ['pA', None, None], 1448 ['kex', None, None], 1449 ], 1450 MODEL_NS_R1RHO_3SITE: [ 1451 ['r2', 0, 'R1rho - 1.00000000 MHz'], 1452 ['dw_AB', 0, None], 1453 ['dw_BC', 0, None], 1454 ['pA', None, None], 1455 ['kex_AB', None, None], 1456 ['pB', None, None], 1457 ['kex_BC', None, None], 1458 ['kex_AC', None, None], 1459 ], 1460 MODEL_NS_R1RHO_3SITE_LINEAR: [ 1461 ['r2', 0, 'R1rho - 1.00000000 MHz'], 1462 ['dw_AB', 0, None], 1463 ['dw_BC', 0, None], 1464 ['pA', None, None], 1465 ['kex_AB', None, None], 1466 ['pB', None, None], 1467 ['kex_BC', None, None], 1468 ], 1469 MODEL_MMQ_CR72: [ 1470 ['r2', 0, 'CPMG: SQ, DQ, MQ, ZQ, 1H SQ, 1H MQ - 1.00000000 MHz'], 1471 ['dw', 0, None], 1472 ['dwH', 0, None], 1473 ['pA', None, None], 1474 ['kex', None, None], 1475 ], 1476 MODEL_NS_MMQ_2SITE: [ 1477 ['r2', 0, 'CPMG: SQ, DQ, MQ, ZQ, 1H SQ, 1H MQ - 1.00000000 MHz'], 1478 ['dw', 0, None], 1479 ['dwH', 0, None], 1480 ['pA', None, None], 1481 ['kex', None, None], 1482 ], 1483 MODEL_NS_MMQ_3SITE: [ 1484 ['r2', 0, 'CPMG: SQ, DQ, MQ, ZQ, 1H SQ, 1H MQ - 1.00000000 MHz'], 1485 ['dw_AB', 0, None], 1486 ['dw_BC', 0, None], 1487 ['dwH_AB', 0, None], 1488 ['dwH_BC', 0, None], 1489 ['pA', None, None], 1490 ['kex_AB', None, None], 1491 ['pB', None, None], 1492 ['kex_BC', None, None], 1493 ['kex_AC', None, None], 1494 ], 1495 MODEL_NS_MMQ_3SITE_LINEAR: [ 1496 ['r2', 0, 'CPMG: SQ, DQ, MQ, ZQ, 1H SQ, 1H MQ - 1.00000000 MHz'], 1497 ['dw_AB', 0, None], 1498 ['dw_BC', 0, None], 1499 ['dwH_AB', 0, None], 1500 ['dwH_BC', 0, None], 1501 ['pA', None, None], 1502 ['kex_AB', None, None], 1503 ['pB', None, None], 1504 ['kex_BC', None, None], 1505 ], 1506 } 1507 1508 # Loop over all models. 1509 print("Checking the parameter looping for a single spin.") 1510 for model in MODEL_LIST_FULL: 1511 # Sanity check. 1512 if model not in expected: 1513 raise RelaxError("The model '%s' is not being checked." % model) 1514 1515 # Printout. 1516 print(" Model '%s'." % model) 1517 1518 # Set up the data store. 1519 ds.add(pipe_name=model, pipe_type='relax_disp') 1520 if model == MODEL_R2EFF: 1521 cdp.model_type = 'R2eff' 1522 else: 1523 cdp.model_type = 'disp' 1524 cdp.exp_type_list = [self.exp_type[model]] 1525 cdp.spectrometer_frq_list = [1e6] 1526 spin = SpinContainer() 1527 spin.model = model 1528 spin.params = deepcopy(MODEL_PARAMS[model]) 1529 1530 # Check the parameter loop. 1531 i = 0 1532 for name, param_index, spin_index, R20_key in loop_parameters([spin]): 1533 print(" Parameter '%s', %s, %s, %s." % (name, param_index, spin_index, repr(R20_key))) 1534 self.assertEqual(name, expected[model][i][0]) 1535 self.assertEqual(spin_index, expected[model][i][1]) 1536 self.assertEqual(R20_key, expected[model][i][2]) 1537 i += 1 1538 1539 # Parameter count check. 1540 self.assertEqual(i, len(expected[model]))
1541 1542
1544 """Test the specific_analyses.relax_disp.parameters.param_conversion() function for a cluster of 2 spins.""" 1545 1546 # Test parameter values. 1547 fixed_values = { 1548 'r2eff': 10.0, 1549 'r2': 15.0, 1550 'r2a': 12.0, 1551 'r2b': 18.0, 1552 'pA': 0.80, 1553 'pB': 0.15, 1554 'k_AB': 0.001, 1555 'k_BA': 0.003, 1556 'kex': 0.01, 1557 'kex_AB': 0.015, 1558 'kex_BC': 0.017, 1559 'kex_AC': 0.016, 1560 'kB': 0.005, 1561 'kC': 0.004, 1562 'tex': 50.0, 1563 'dw': 1.0, 1564 'dw_AB': 1.02, 1565 'dw_BC': 1.03, 1566 'dwH': 0.1, 1567 'dwH_AB': 0.12, 1568 'dwH_BC': 0.13, 1569 'phi_ex': 0.5, 1570 'phi_ex_B': 0.4, 1571 'phi_ex_C': 0.3, 1572 } 1573 1574 # Loop over all models. 1575 print("Checking the parameter conversion and setting for a cluster of 2 spins.") 1576 for model in MODEL_LIST_FULL: 1577 # Printout. 1578 print(" Model '%s'." % model) 1579 1580 # Set up the data store. 1581 ds.add(pipe_name=model, pipe_type='relax_disp') 1582 if model == MODEL_R2EFF: 1583 cdp.model_type = 'R2eff' 1584 else: 1585 cdp.model_type = 'disp' 1586 cdp.exp_type_list = [self.exp_type[model]] 1587 cdp.spectrometer_frq_list = [1e6] 1588 spins = [SpinContainer(), SpinContainer()] 1589 for spin in spins: 1590 spin.model = model 1591 spin.params = deepcopy(MODEL_PARAMS[model]) 1592 1593 # First set the parameter values. 1594 for name, param_index, spin_index, R20_key in loop_parameters(spins): 1595 # R2 parameters. 1596 if name in ['r2', 'r2a', 'r2b']: 1597 key = "%s - %.8f MHz" % (cdp.exp_type_list[0], cdp.spectrometer_frq_list[0]/1e6) 1598 print(" Setting spin %i parameter %s['%s'] to %s." % (spin_index, name, key, fixed_values[name])) 1599 setattr(spins[spin_index], name, {key: fixed_values[name]}) 1600 1601 # Global parameters. 1602 elif spin_index == None: 1603 print(" Setting global parameter %s to %s." % (name, fixed_values[name])) 1604 setattr(spins[0], name, fixed_values[name]) 1605 setattr(spins[1], name, fixed_values[name]) 1606 1607 # Spin parameters. 1608 else: 1609 print(" Setting spin %i parameter %s to %s." % (spin_index, name, fixed_values[name])) 1610 setattr(spins[spin_index], name, fixed_values[name]) 1611 1612 # Then perform the conversion. 1613 param_conversion(key=None, spins=spins, sim_index=None) 1614 1615 # Check the probabilities. 1616 if 'pB' in MODEL_PARAMS[model]: 1617 print(" Checking parameter pC.") 1618 self.assertAlmostEqual(spins[0].pC, 0.05) 1619 self.assertAlmostEqual(spins[1].pC, 0.05) 1620 elif 'pA' in MODEL_PARAMS[model]: 1621 print(" Checking parameter pB.") 1622 self.assertAlmostEqual(spins[0].pB, 0.20) 1623 self.assertAlmostEqual(spins[1].pB, 0.20) 1624 1625 # Check the kex-tex pair. 1626 if 'kex' in MODEL_PARAMS[model]: 1627 print(" Checking parameter tex.") 1628 self.assertAlmostEqual(spins[0].tex, 100.0) 1629 self.assertAlmostEqual(spins[1].tex, 100.0) 1630 elif 'tex' in MODEL_PARAMS[model]: 1631 print(" Checking parameter kex.") 1632 self.assertAlmostEqual(spins[0].kex, 0.02) 1633 self.assertAlmostEqual(spins[1].kex, 0.02) 1634 1635 # Check the rates. 1636 if 'kex' in MODEL_PARAMS[model] and 'pA' in MODEL_PARAMS[model]: 1637 print(" Checking parameter k_AB.") 1638 self.assertAlmostEqual(spins[0].k_AB, 0.002) 1639 self.assertAlmostEqual(spins[1].k_AB, 0.002) 1640 print(" Checking parameter k_BA.") 1641 self.assertAlmostEqual(spins[0].k_BA, 0.008) 1642 self.assertAlmostEqual(spins[1].k_BA, 0.008)
1643 1644
1646 """Test the specific_analyses.relax_disp.parameters.param_conversion() function for a cluster of 2 spins for Monte Carlo simulations.""" 1647 1648 # Test parameter values. 1649 fixed_values = { 1650 'r2eff': 10.0, 1651 'r2': 15.0, 1652 'r2a': 12.0, 1653 'r2b': 18.0, 1654 'pA': 0.80, 1655 'pB': 0.15, 1656 'k_AB': 0.001, 1657 'k_BA': 0.003, 1658 'kex': 0.01, 1659 'kex_AB': 0.015, 1660 'kex_BC': 0.017, 1661 'kex_AC': 0.016, 1662 'kB': 0.005, 1663 'kC': 0.004, 1664 'tex': 50.0, 1665 'dw': 1.0, 1666 'dw_AB': 1.02, 1667 'dw_BC': 1.03, 1668 'dwH': 0.1, 1669 'dwH_AB': 0.12, 1670 'dwH_BC': 0.13, 1671 'phi_ex': 0.5, 1672 'phi_ex_B': 0.4, 1673 'phi_ex_C': 0.3, 1674 } 1675 1676 # Loop over all models. 1677 print("Checking the parameter conversion and setting for a cluster of 2 spins.") 1678 for model in MODEL_LIST_FULL: 1679 # Printout. 1680 print(" Model '%s'." % model) 1681 1682 # Set up the data store. 1683 ds.add(pipe_name=model, pipe_type='relax_disp') 1684 if model == MODEL_R2EFF: 1685 cdp.model_type = 'R2eff' 1686 else: 1687 cdp.model_type = 'disp' 1688 cdp.exp_type_list = [self.exp_type[model]] 1689 cdp.spectrometer_frq_list = [1e6] 1690 spins = [SpinContainer(), SpinContainer()] 1691 for spin in spins: 1692 spin.model = model 1693 spin.params = deepcopy(MODEL_PARAMS[model]) 1694 1695 # First set the parameter values. 1696 for name, param_index, spin_index, R20_key in loop_parameters(spins): 1697 # The MC simulation parameter name. 1698 sim_name = "%s_sim" % name 1699 1700 # R2 parameters. 1701 if name in ['r2', 'r2a', 'r2b']: 1702 key = "%s - %.8f MHz" % (cdp.exp_type_list[0], cdp.spectrometer_frq_list[0]/1e6) 1703 print(" Setting spin %i parameter %s[0]['%s'] to %s." % (spin_index, sim_name, key, fixed_values[name])) 1704 setattr(spins[spin_index], sim_name, [{key: fixed_values[name]}]) 1705 1706 # Global parameters. 1707 elif spin_index == None: 1708 print(" Setting global parameter %s[0] to %s." % (sim_name, fixed_values[name])) 1709 setattr(spins[0], sim_name, [fixed_values[name]]) 1710 setattr(spins[1], sim_name, [fixed_values[name]]) 1711 1712 # Spin parameters. 1713 else: 1714 print(" Setting spin %i parameter %s[0] to %s." % (spin_index, sim_name, fixed_values[name])) 1715 setattr(spins[spin_index], sim_name, [fixed_values[name]]) 1716 1717 # Set up the conversion structures. 1718 for spin in spins: 1719 if 'pB' in MODEL_PARAMS[model]: 1720 spin.pC_sim = [None] 1721 elif 'pA' in MODEL_PARAMS[model]: 1722 spin.pB_sim = [None] 1723 if 'kex' in MODEL_PARAMS[model]: 1724 spin.tex_sim = [None] 1725 elif 'tex' in MODEL_PARAMS[model]: 1726 spin.kex_sim = [None] 1727 if 'kex' in MODEL_PARAMS[model] and 'pA' in MODEL_PARAMS[model]: 1728 spin.k_AB_sim = [None] 1729 spin.k_BA_sim = [None] 1730 1731 # Then perform the conversion. 1732 param_conversion(key=None, spins=spins, sim_index=0) 1733 1734 # Check the probabilities. 1735 if 'pB' in MODEL_PARAMS[model]: 1736 print(" Checking parameter pC.") 1737 self.assertAlmostEqual(spins[0].pC_sim[0], 0.05) 1738 self.assertAlmostEqual(spins[1].pC_sim[0], 0.05) 1739 elif 'pA' in MODEL_PARAMS[model]: 1740 print(" Checking parameter pB.") 1741 self.assertAlmostEqual(spins[0].pB_sim[0], 0.20) 1742 self.assertAlmostEqual(spins[1].pB_sim[0], 0.20) 1743 1744 # Check the kex-tex pair. 1745 if 'kex' in MODEL_PARAMS[model]: 1746 print(" Checking parameter tex.") 1747 self.assertAlmostEqual(spins[0].tex_sim[0], 100.0) 1748 self.assertAlmostEqual(spins[1].tex_sim[0], 100.0) 1749 elif 'tex' in MODEL_PARAMS[model]: 1750 print(" Checking parameter kex.") 1751 self.assertAlmostEqual(spins[0].kex_sim[0], 0.02) 1752 self.assertAlmostEqual(spins[1].kex_sim[0], 0.02) 1753 1754 # Check the rates. 1755 if 'kex' in MODEL_PARAMS[model] and 'pA' in MODEL_PARAMS[model]: 1756 print(" Checking parameter k_AB.") 1757 self.assertAlmostEqual(spins[0].k_AB_sim[0], 0.002) 1758 self.assertAlmostEqual(spins[1].k_AB_sim[0], 0.002) 1759 print(" Checking parameter k_BA.") 1760 self.assertAlmostEqual(spins[0].k_BA_sim[0], 0.008) 1761 self.assertAlmostEqual(spins[1].k_BA_sim[0], 0.008)
1762 1763
1765 """Test the specific_analyses.relax_disp.parameters.param_conversion() function for a single spin.""" 1766 1767 # Test parameter values. 1768 fixed_values = { 1769 'r2eff': 10.0, 1770 'r2': 15.0, 1771 'r2a': 12.0, 1772 'r2b': 18.0, 1773 'pA': 0.80, 1774 'pB': 0.15, 1775 'k_AB': 0.001, 1776 'k_BA': 0.003, 1777 'kex': 0.01, 1778 'kex_AB': 0.015, 1779 'kex_BC': 0.017, 1780 'kex_AC': 0.016, 1781 'kB': 0.005, 1782 'kC': 0.004, 1783 'tex': 50.0, 1784 'dw': 1.0, 1785 'dw_AB': 1.02, 1786 'dw_BC': 1.03, 1787 'dwH': 0.1, 1788 'dwH_AB': 0.12, 1789 'dwH_BC': 0.13, 1790 'phi_ex': 0.5, 1791 'phi_ex_B': 0.4, 1792 'phi_ex_C': 0.3, 1793 } 1794 1795 # Loop over all models. 1796 print("Checking the parameter conversion and setting for a single spin.") 1797 for model in MODEL_LIST_FULL: 1798 # Printout. 1799 print(" Model '%s'." % model) 1800 1801 # Set up the data store. 1802 ds.add(pipe_name=model, pipe_type='relax_disp') 1803 if model == MODEL_R2EFF: 1804 cdp.model_type = 'R2eff' 1805 else: 1806 cdp.model_type = 'disp' 1807 cdp.exp_type_list = [self.exp_type[model]] 1808 cdp.spectrometer_frq_list = [1e6] 1809 spin = SpinContainer() 1810 spin.model = model 1811 spin.params = deepcopy(MODEL_PARAMS[model]) 1812 1813 # First set the parameter values. 1814 for name, param_index, spin_index, R20_key in loop_parameters([spin]): 1815 # R2 parameters. 1816 if name in ['r2', 'r2a', 'r2b']: 1817 key = "%s - %.8f MHz" % (cdp.exp_type_list[0], cdp.spectrometer_frq_list[0]/1e6) 1818 print(" Setting spin %i parameter %s['%s'] to %s." % (spin_index, name, key, fixed_values[name])) 1819 setattr(spin, name, {key: fixed_values[name]}) 1820 1821 # Global parameters. 1822 elif spin_index == None: 1823 print(" Setting global parameter %s to %s." % (name, fixed_values[name])) 1824 setattr(spin, name, fixed_values[name]) 1825 1826 # Spin parameters. 1827 else: 1828 print(" Setting spin %i parameter %s to %s." % (spin_index, name, fixed_values[name])) 1829 setattr(spin, name, fixed_values[name]) 1830 1831 # Then perform the conversion. 1832 param_conversion(key=None, spins=[spin], sim_index=None) 1833 1834 # Check the probabilities. 1835 if 'pB' in MODEL_PARAMS[model]: 1836 print(" Checking parameter pC.") 1837 self.assertAlmostEqual(spin.pC, 0.05) 1838 elif 'pA' in MODEL_PARAMS[model]: 1839 print(" Checking parameter pB.") 1840 self.assertAlmostEqual(spin.pB, 0.20) 1841 1842 # Check the kex-tex pair. 1843 if 'kex' in MODEL_PARAMS[model]: 1844 print(" Checking parameter tex.") 1845 self.assertAlmostEqual(spin.tex, 100.0) 1846 elif 'tex' in MODEL_PARAMS[model]: 1847 print(" Checking parameter kex.") 1848 self.assertAlmostEqual(spin.kex, 0.02) 1849 1850 # Check the rates. 1851 if 'kex' in MODEL_PARAMS[model] and 'pA' in MODEL_PARAMS[model]: 1852 print(" Checking parameter k_AB.") 1853 self.assertAlmostEqual(spin.k_AB, 0.002) 1854 print(" Checking parameter k_BA.") 1855 self.assertAlmostEqual(spin.k_BA, 0.008)
1856 1857
1859 """Test the specific_analyses.relax_disp.parameters.param_num() function for a cluster of 2 spins.""" 1860 1861 # The expected number of parameters for the single spin. 1862 expected = { 1863 MODEL_R2EFF: 2, 1864 MODEL_NOREX: 2, 1865 MODEL_LM63: 5, 1866 MODEL_LM63_3SITE: 8, 1867 MODEL_CR72: 6, 1868 MODEL_CR72_FULL: 8, 1869 MODEL_IT99: 6, 1870 MODEL_TSMFK01: 5, 1871 MODEL_B14: 6, 1872 MODEL_B14_FULL: 8, 1873 MODEL_M61: 5, 1874 MODEL_M61B: 6, 1875 MODEL_DPL94: 5, 1876 MODEL_TP02: 6, 1877 MODEL_TAP03: 6, 1878 MODEL_MP05: 6, 1879 MODEL_NS_CPMG_2SITE_3D: 6, 1880 MODEL_NS_CPMG_2SITE_3D_FULL: 8, 1881 MODEL_NS_CPMG_2SITE_STAR: 6, 1882 MODEL_NS_CPMG_2SITE_STAR_FULL: 8, 1883 MODEL_NS_CPMG_2SITE_EXPANDED: 6, 1884 MODEL_NS_R1RHO_2SITE: 6, 1885 MODEL_NS_R1RHO_3SITE: 11, 1886 MODEL_NS_R1RHO_3SITE_LINEAR: 10, 1887 MODEL_MMQ_CR72: 8, 1888 MODEL_NS_MMQ_2SITE: 8, 1889 MODEL_NS_MMQ_3SITE: 15, 1890 MODEL_NS_MMQ_3SITE_LINEAR: 14 1891 } 1892 1893 # Loop over all models. 1894 print("Checking the parameter number counts for a cluster of 2 spins.") 1895 for model in MODEL_LIST_FULL: 1896 # Sanity check. 1897 if model not in expected: 1898 raise RelaxError("The model '%s' is not being checked." % model) 1899 1900 # Printout. 1901 print(" Model '%s'." % model) 1902 1903 # Set up the data store. 1904 ds.add(pipe_name=model, pipe_type='relax_disp') 1905 if model == MODEL_R2EFF: 1906 cdp.model_type = 'R2eff' 1907 else: 1908 cdp.model_type = 'disp' 1909 cdp.exp_type_list = [self.exp_type[model]] 1910 spins = [SpinContainer(), SpinContainer()] 1911 for spin in spins: 1912 spin.model = model 1913 spin.params = deepcopy(MODEL_PARAMS[model]) 1914 1915 # Check the parameter number. 1916 self.assertEqual(param_num(spins), expected[model])
1917 1918
1919 - def test_param_num_single_spin(self):
1920 """Test the specific_analyses.relax_disp.parameters.param_num() function for a single spin.""" 1921 1922 # The expected number of parameters for the single spin. 1923 expected = { 1924 MODEL_R2EFF: 1, 1925 MODEL_NOREX: 1, 1926 MODEL_LM63: 3, 1927 MODEL_LM63_3SITE: 5, 1928 MODEL_CR72: 4, 1929 MODEL_CR72_FULL: 5, 1930 MODEL_IT99: 4, 1931 MODEL_TSMFK01: 3, 1932 MODEL_B14: 4, 1933 MODEL_B14_FULL: 5, 1934 MODEL_M61: 3, 1935 MODEL_M61B: 4, 1936 MODEL_DPL94: 3, 1937 MODEL_TP02: 4, 1938 MODEL_TAP03: 4, 1939 MODEL_MP05: 4, 1940 MODEL_NS_CPMG_2SITE_3D: 4, 1941 MODEL_NS_CPMG_2SITE_3D_FULL: 5, 1942 MODEL_NS_CPMG_2SITE_STAR: 4, 1943 MODEL_NS_CPMG_2SITE_STAR_FULL: 5, 1944 MODEL_NS_CPMG_2SITE_EXPANDED: 4, 1945 MODEL_NS_R1RHO_2SITE: 4, 1946 MODEL_NS_R1RHO_3SITE: 8, 1947 MODEL_NS_R1RHO_3SITE_LINEAR: 7, 1948 MODEL_MMQ_CR72: 5, 1949 MODEL_NS_MMQ_2SITE: 5, 1950 MODEL_NS_MMQ_3SITE: 10, 1951 MODEL_NS_MMQ_3SITE_LINEAR: 9 1952 } 1953 1954 # Loop over all models. 1955 print("Checking the parameter number counts for a single spin.") 1956 for model in MODEL_LIST_FULL: 1957 # Sanity check. 1958 if model not in expected: 1959 raise RelaxError("The model '%s' is not being checked." % model) 1960 1961 # Printout. 1962 print(" Model '%s'." % model) 1963 1964 # Set up the data store. 1965 ds.add(pipe_name=model, pipe_type='relax_disp') 1966 if model == MODEL_R2EFF: 1967 cdp.model_type = 'R2eff' 1968 else: 1969 cdp.model_type = 'disp' 1970 cdp.exp_type_list = [self.exp_type[model]] 1971 spin = SpinContainer() 1972 spin.model = model 1973 spin.params = deepcopy(MODEL_PARAMS[model]) 1974 1975 # Check the parameter number. 1976 self.assertEqual(param_num([spin]), expected[model])
1977