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']: