Author: bugman Date: Wed Dec 4 15:58:46 2013 New Revision: 21778 URL: http://svn.gna.org/viewcvs/relax?rev=21778&view=rev Log: The pC parameter constraints are now implemented for the 3-site dispersion models. The new constraints are 0 <= pC <= pB. Modified: trunk/specific_analyses/relax_disp/parameters.py Modified: trunk/specific_analyses/relax_disp/parameters.py URL: http://svn.gna.org/viewcvs/relax/trunk/specific_analyses/relax_disp/parameters.py?rev=21778&r1=21777&r2=21778&view=diff ============================================================================== --- trunk/specific_analyses/relax_disp/parameters.py (original) +++ trunk/specific_analyses/relax_disp/parameters.py Wed Dec 4 15:58:46 2013 @@ -478,9 +478,10 @@ 0 <= R2 <= 200 0 <= R2A <= 200 0 <= R2B <= 200 - pB <= pA <= 1 + pC <= pB <= pA <= 1 pA >= 0.85 (the skewed condition, pA >> pB) - pB > 0 + pB >= 0 + pC >= 0 phi_ex >= 0 phi_ex_B >= 0 phi_ex_C >= 0 @@ -584,8 +585,8 @@ A.append(zero_array * 0.0) A[j][param_index] = 1.0 A[j+1][param_index] = -1.0 - b.append(0.0) - b.append(-200.0 / scaling_matrix[param_index, param_index]) + b.append(123.0) + b.append(-123.0 / scaling_matrix[param_index, param_index]) j += 2 # The pA.pB.dw**2, phi_ex_B, phi_ex_C and pA.dw**2 parameters (phi_ex* >= 0 and padw2 >= 0). @@ -603,9 +604,9 @@ b.append(0.0) j += 1 - # The population of state A. + # The population of state A and B. elif param_name == 'pA': - # First the pA <= 1 constraint + # First the pA <= 1 constraint (which also rearranged is pB >= 0). A.append(zero_array * 0.0) A[j][param_index] = -1.0 b.append(-1.0 / scaling_matrix[param_index, param_index]) @@ -625,12 +626,25 @@ b.append(0.5 / scaling_matrix[param_index, param_index]) j += 1 - # The population of state X (pB >= 0). - elif param_name in ['pB', 'pC']: - A.append(zero_array * 0.0) - A[j][param_index] = 1.0 - b.append(0.0) - j += 1 + # The population of state C (the pB parameter is only present when pC exists). + elif param_name == 'pB': + # Find pA. + for param_name2, param_index2, spin_index2, r20_key2 in loop_parameters(spins=spins): + if param_name2 == 'pA': + # First pC >= 0 (which rearranged is -pA - pB >= -1). + A.append(zero_array * 0.0) + A[j][param_index2] = -1.0 + A[j][param_index] = -1.0 + b.append(-1.0 / scaling_matrix[param_index, param_index]) + j += 1 + + # Then the pB >= pC constraint (rearranged as pA + 2pB
= 1).
+ A.append(zero_array * 0.0) + A[j][param_index2] = 1.0 + A[j][param_index] = 2.0 + b.append(1.0 / scaling_matrix[param_index, param_index]) + j += 1 + break # Exchange rates and times (0 <= k <= 2e6). elif param_name in ['kex', 'kex_AB', 'kex_AC', 'kex_BC', 'k_AB', 'kB', 'kC']: