[prev in list] [next in list] [prev in thread] [next in thread]
List: relax-commits
Subject: r19817 - in /branches/relax_disp/specific_analyses/relax_disp: __init__.py parameters.py
From: edward () nmr-relax ! com
Date: 2013-05-31 9:15:58
Message-ID: E1UiLRG-0004p2-CU () subversion ! gna ! org
[Download RAW message or body]
Author: bugman
Date: Fri May 31 11:15:58 2013
New Revision: 19817
URL: http://svn.gna.org/viewcvs/relax?rev=19817&view=rev
Log:
Fixes to the specific_analyses.relax_disp modules to add support for the CR72 \
dispersion model.
The parameters for the CR72 model are now both correct and correctly handled.
Modified:
branches/relax_disp/specific_analyses/relax_disp/__init__.py
branches/relax_disp/specific_analyses/relax_disp/parameters.py
Modified: branches/relax_disp/specific_analyses/relax_disp/__init__.py
URL: http://svn.gna.org/viewcvs/relax/branches/relax_disp/specific_analyses/relax_disp/__init__.py?rev=19817&r1=19816&r2=19817&view=diff
==============================================================================
--- branches/relax_disp/specific_analyses/relax_disp/__init__.py (original)
+++ branches/relax_disp/specific_analyses/relax_disp/__init__.py Fri May 31 11:15:58 \
2013 @@ -93,11 +93,13 @@
self.PARAMS.add('r2eff', scope='spin', default=15.0, desc='The effective \
transversal relaxation rate', set='params', py_type=dict, \
grace_string='\\qR\\s2,eff\\N\\Q (rad.s\\S-1\\N)', err=True, sim=True) \
self.PARAMS.add('i0', scope='spin', default=10000.0, desc='The initial intensity', \
py_type=dict, set='params', grace_string='\\qI\\s0\\Q', err=True, sim=True) \
self.PARAMS.add('r2', scope='spin', default=15.0, desc='The transversal relaxation \
rate', set='params', py_type=list, grace_string='\\qR\\s2\\N\\Q (rad.s\\S-1\\N)', \
err=True, sim=True) + self.PARAMS.add('pA', scope='spin', default=0.5, \
desc='The population for state A', set='params', py_type=float, \
grace_string='\qp\sA\N\Q', err=True, sim=True) + self.PARAMS.add('pB', \
scope='spin', default=0.5, desc='The population for state B', set='params', \
py_type=float, grace_string='\qp\sB\N\Q', err=True, sim=True) \
self.PARAMS.add('phi_ex', scope='spin', default=5.0, desc='The pA.pB.dw**2 value \
scaled by wH (phi_ex = pA * pB * Delta_omega**2 / omega_H**2)', set='params', \
py_type=float, grace_string='\\xF\\B\\sex\\N\\q (p\\sA\\N.p\\sB\\N.\\xDw\\B\\S2\\N / \
\\xw\\B\\sH\\N\\S2\\N)', err=True, sim=True) + self.PARAMS.add('dw', \
scope='spin', default=0.0, desc='The chemical shift difference between states A and B \
(in ppm)', set='params', py_type=float, grace_string='\q\\xDw\f{}\Q (ppm)', err=True, \
sim=True) self.PARAMS.add('kex', scope='spin', default=10000.0, desc='The exchange \
rate', set='params', py_type=float, grace_string='\\qk\\sex\\N\\Q (rad.s\\S-1\\N)', \
err=True, sim=True) self.PARAMS.add('r2a', scope='spin', default=15.0, desc='The \
transversal relaxation rate for state A', set='params', py_type=float, \
grace_string='\\qR\\s2,A\\N\\Q (rad.s\\S-1\\N)', err=True, sim=True) \
self.PARAMS.add('ka', scope='spin', default=10000.0, desc='The exchange rate from \
state A to state B', set='params', py_type=float, grace_string='\\qk\\sA\\N\\Q \
(rad.s\\S-1\\N)', err=True, sim=True)
- self.PARAMS.add('dw', scope='spin', default=1000.0, desc='The chemical shift \
difference between states A and B', set='params', py_type=float, \
grace_string='\\q\\xDw\\f{}\\Q (Hz)', err=True, sim=True)
self.PARAMS.add('params', scope='spin', desc='The model parameters', \
py_type=list)
# Add the minimisation data.
@@ -367,35 +369,30 @@
# Only use the parameters of the first spin of the cluster.
spin = spins[0]
for i in range(len(spin.params)):
- # R2 relaxation rate (from 1 to 40 s^-1).
- if spin.params[i] == 'r2':
+ # R2 relaxation rates (from 1 to 40 s^-1).
+ if spin.params[i] in ['r2', 'r2a']:
lower.append(1.0)
upper.append(40.0)
+
+ # The population of state A.
+ elif spin.params[i] == 'pA':
+ lower.append(0.0)
+ upper.append(1.0)
# The pA.pB.dw**2/wH**2 parameter.
elif spin.params[i] == 'phi_ex':
lower.append(1e-20)
upper.append(1e-17)
- # Exchange rate.
- elif spin.params[i] == 'kex':
- lower.append(1.0)
- upper.append(100000.0)
-
- # Transversal relaxation rate for state A.
- elif spin.params[i] == 'r2a':
- lower.append(1.0)
- upper.append(20.0)
-
- # Exchange rate from state A to state B.
- elif spin.params[i] == 'ka':
- lower.append(1.0)
- upper.append(100000.0)
-
# Chemical shift difference between states A and B.
elif spin.params[i] == 'dw':
lower.append(1.0)
upper.append(10000.0)
+
+ # Exchange rates.
+ elif spin.params[i] in ['kex', 'ka']:
+ lower.append(1.0)
+ upper.append(100000.0)
# The full grid size.
grid_size = 1
@@ -828,7 +825,7 @@
params = []
for i in range(cdp.spectrometer_frq_count):
params.append('r2')
- params += ['r2a', 'ka', 'dw']
+ params += ['pa', 'dw', 'kex']
# Invalid model.
else:
@@ -1269,14 +1266,16 @@
return_data_name_doc = Desc_container("Relaxation dispersion curve fitting data \
type string matching patterns") _table = uf_tables.add_table(label="table: \
dispersion curve-fit data type patterns", caption="Relaxation dispersion curve \
fitting data type string matching patterns.") _table.add_headings(["Data type", \
"Object name"])
- _table.add_row(["Transversal relaxation rate", "'r2'"])
- _table.add_row(["The pA.pB.dw**2/wH**2 parameter", "'phi_ex'"])
- _table.add_row(["Exchange rate", "'kex'"])
- _table.add_row(["Transversal relaxation rate for state A", "'r2a'"])
- _table.add_row(["Exchange rate from state A to state B", "'ka'"])
- _table.add_row(["Chemical shift difference between states A and B", "'dw'"])
+ _table.add_row(["Transversal relaxation rate (rad/s)", "'r2'"])
+ _table.add_row(["Transversal relaxation rate for state A (rad/s)", "'r2a'"])
+ _table.add_row(["Population of state A", "'pA'"])
+ _table.add_row(["Population of state B", "'pB'"])
+ _table.add_row(["The pA.pB.dw**2 parameter (ppm^2)", "'phi_ex'"])
+ _table.add_row(["Chemical shift difference between states A and B (ppm)", \
"'dw'"]) + _table.add_row(["Exchange rate (rad/s)", "'kex'"])
+ _table.add_row(["Exchange rate from state A to state B (rad/s)", "'ka'"])
_table.add_row(["Peak intensities (series)", "'intensities'"])
- _table.add_row(["CPMG pulse train frequency (series)", "'cpmg_frqs'"])
+ _table.add_row(["CPMG pulse train frequency (series, Hz)", "'cpmg_frqs'"])
return_data_name_doc.add_table(_table.label)
Modified: branches/relax_disp/specific_analyses/relax_disp/parameters.py
URL: http://svn.gna.org/viewcvs/relax/branches/relax_disp/specific_analyses/relax_disp/parameters.py?rev=19817&r1=19816&r2=19817&view=diff
==============================================================================
--- branches/relax_disp/specific_analyses/relax_disp/parameters.py (original)
+++ branches/relax_disp/specific_analyses/relax_disp/parameters.py Fri May 31 \
11:15:58 2013 @@ -116,8 +116,26 @@
else:
param_vector.append(spin.r2[i])
+ # Transversal relaxation rate for state A.
+ elif spin.params[i] == 'r2a':
+ if sim_index != None:
+ param_vector.append(spin.r2a_sim[sim_index])
+ elif spin.r2a == None:
+ param_vector.append(0.0)
+ else:
+ param_vector.append(spin.r2a)
+
+ # The pA parameter.
+ elif spin.params[i] == 'pA':
+ if sim_index != None:
+ param_vector.append(spin.pA_sim[sim_index])
+ elif spin.pA == None:
+ param_vector.append(0.0)
+ else:
+ param_vector.append(spin.pA)
+
# The pA.pB.dw**2/wH**2 parameter.
- if spin.params[i] == 'phi_ex':
+ elif spin.params[i] == 'phi_ex':
if sim_index != None:
param_vector.append(spin.phi_ex_sim[sim_index])
elif spin.phi_ex == None:
@@ -125,6 +143,15 @@
else:
param_vector.append(spin.phi_ex)
+ # Chemical shift difference between states A and B.
+ elif spin.params[i] == 'dw':
+ if sim_index != None:
+ param_vector.append(spin.dw_sim[sim_index])
+ elif spin.dw == None:
+ param_vector.append(0.0)
+ else:
+ param_vector.append(spin.dw)
+
# Exchange rate.
elif spin.params[i] == 'kex':
if sim_index != None:
@@ -134,32 +161,14 @@
else:
param_vector.append(spin.kex)
- # Transversal relaxation rate for state A.
- if spin.params[i] == 'r2a':
- if sim_index != None:
- param_vector.append(spin.r2a_sim[sim_index])
- elif spin.r2a == None:
- param_vector.append(0.0)
- else:
- param_vector.append(spin.r2a)
-
# Exchange rate from state A to state B.
- if spin.params[i] == 'ka':
+ elif spin.params[i] == 'ka':
if sim_index != None:
param_vector.append(spin.ka_sim[sim_index])
elif spin.ka == None:
param_vector.append(0.0)
else:
param_vector.append(spin.ka)
-
- # Chemical shift difference between states A and B.
- if spin.params[i] == 'dw':
- if sim_index != None:
- param_vector.append(spin.dw_sim[sim_index])
- elif spin.dw == None:
- param_vector.append(0.0)
- else:
- param_vector.append(spin.dw)
# Return a numpy array.
return array(param_vector, float64)
@@ -220,28 +229,24 @@
spin = spins[0]
for i in range(len(spin.params)):
# Transversal relaxation rate scaling.
- if spin.params[i] == 'r2':
+ if spin.params[i] in ['r2', 'r2a']:
scaling_matrix[param_index, param_index] = 10
+
+ # The population of state A.
+ elif spin.params[i] == 'pA':
+ scaling_matrix[param_index, param_index] = 1
# The pA.pB.dw**2/wH**2 parameter.
elif spin.params[i] == 'phi_ex':
scaling_matrix[param_index, param_index] = 1e-18
- # Exchange rate scaling.
- elif spin.params[i] == 'kex':
- scaling_matrix[param_index, param_index] = 10000
-
- # Transversal relaxation rate for state A scaling
- elif spin.params[i] == 'r2a':
- scaling_matrix[param_index, param_index] = 10
-
- # Exchange rate from state A to state B scaling.
- elif spin.params[i] == 'ka':
- scaling_matrix[param_index, param_index] = 10000
-
# Chemical shift difference between states A and B scaling.
elif spin.params[i] == 'dw':
- scaling_matrix[param_index, param_index] = 1000
+ scaling_matrix[param_index, param_index] = 1
+
+ # Exchange rate scaling.
+ elif spin.params[i] in ['kex', 'ka']:
+ scaling_matrix[param_index, param_index] = 10000
# Increment the parameter index.
param_index += 1
@@ -346,6 +351,20 @@
else:
spin.r2[i] = param_vector[param_index]
+ # Transversal relaxation rate for state A.
+ if spin.params[i] == 'r2a':
+ if sim_index != None:
+ spin.r2a_sim[sim_index] = param_vector[param_index]
+ else:
+ spin.r2a = param_vector[param_index]
+
+ # The population of state A.
+ if spin.params[i] == 'pA':
+ if sim_index != None:
+ spin.pA_sim[sim_index] = param_vector[param_index]
+ else:
+ spin.pA = param_vector[param_index]
+
# The pA.pB.dw**2/wH**2 parameter.
if spin.params[i] == 'phi_ex':
if sim_index != None:
@@ -353,6 +372,13 @@
else:
spin.phi_ex = param_vector[param_index]
+ # Chemical shift difference between states A and B.
+ if spin.params[i] == 'dw':
+ if sim_index != None:
+ spin.dw_sim[sim_index] = param_vector[param_index]
+ else:
+ spin.dw = param_vector[param_index]
+
# Exchange rate.
elif spin.params[i] == 'kex':
if sim_index != None:
@@ -360,13 +386,6 @@
else:
spin.kex = param_vector[param_index]
- # Transversal relaxation rate for state A.
- if spin.params[i] == 'r2a':
- if sim_index != None:
- spin.r2a_sim[sim_index] = param_vector[param_index]
- else:
- spin.r2a = param_vector[param_index]
-
# Exchange rate from state A to state B.
if spin.params[i] == 'ka':
if sim_index != None:
@@ -374,13 +393,6 @@
else:
spin.ka = param_vector[param_index]
- # Chemical shift difference between states A and B.
- if spin.params[i] == 'dw':
- if sim_index != None:
- spin.dw_sim[sim_index] = param_vector[param_index]
- else:
- spin.dw = param_vector[param_index]
-
# Increment the parameter index.
param_index = param_index + 1
@@ -394,12 +406,14 @@
The different constraints are::
R2 >= 0
- Rex >= 0
+ R2 <= -200
+ R2A >= 0
+ pA >= 0
+ pA >= pB
+ phi_ex >= 0
+ dw >= 0
kex >= 0
-
- R2A >= 0
kA >= 0
- dw >= 0
Matrix notation
@@ -407,19 +421,23 @@
In the notation A.x >= b, where A is a matrix of coefficients, x is an array of \
parameter values, and b is a vector of scalars, these inequality constraints are::
- | 1 0 0 | | R2 | | 0 |
- | | | | | |
- |-1 0 0 | | R2 | | -200 |
- | | | | | |
- | 1 0 0 | | phi | | 0 |
- | | | | | |
- | 1 0 0 | . | kex | >= | 0 |
- | | | | | |
- | 1 0 0 | | R2A | | 0 |
- | | | | | |
- | 1 0 0 | | kA | | 0 |
- | | | | | |
- | 1 0 0 | | dw | | 0 |
+ | 1 0 0 | | R2 | | 0 |
+ | | | | | |
+ |-1 0 0 | | R2 | | -200 |
+ | | | | | |
+ | 1 0 0 | | R2A | | 0 |
+ | | | | | |
+ | 1 0 0 | | pA | | 0 |
+ | | | | | |
+ | 2 0 0 | . | pA | >= | 1 |
+ | | | | | |
+ | 1 0 0 | | phi_ex | | 0 |
+ | | | | | |
+ | 1 0 0 | | dw | | 0 |
+ | | | | | |
+ | 1 0 0 | | kex | | 0 |
+ | | | | | |
+ | 1 0 0 | | kA | | 0 |
@keyword spins: The list of spin data containers for the block.
@@ -463,8 +481,8 @@
# Only use the parameters of the first spin of the cluster.
spin = spins[0]
for k in range(len(spin.params)):
- # The transversal relaxation rate >= 0.
- if spin.params[k] == 'r2':
+ # The transversal relaxation rates (0 <= r2 <= 200).
+ if spin.params[k] in ['r2', 'r2a']:
A.append(zero_array * 0.0)
A.append(zero_array * 0.0)
A[j][i] = 1.0
@@ -473,25 +491,32 @@
b.append(-200.0 / scaling_matrix[i, i])
j += 2
- # Relaxation rates and phi_ex.
- elif spin.params[k] in ['r2a', 'phi_ex']:
- # phi_ex, R2A >= 0.
+ # The population of state A (pA >= 0 and pA >= pB).
+ elif spin.params[k] == 'pA':
+ A.append(zero_array * 0.0)
+ A.append(zero_array * 0.0)
+ A[j][i] = 1.0
+ A[j+1][i] = 2.0
+ b.append(0.0)
+ b.append(1.0 / scaling_matrix[i, i])
+ j += 2
+
+ # The pA.pB.dw**2/wH**2 parameter (phi_ex >= 0).
+ elif spin.params[k] == 'phi_ex':
A.append(zero_array * 0.0)
A[j][i] = 1.0
b.append(0.0)
j += 1
- # Exchange rates.
- elif search('^k', spin.params[k]):
- # kex, kA >= 0.
+ # Chemical exchange difference (dw >= 0).
+ elif spin.params[k] == 'dw':
A.append(zero_array * 0.0)
A[j][i] = 1.0
b.append(0.0)
j += 1
- # Chemical exchange difference.
- elif spin.params[k] == 'dw':
- # dw >= 0.
+ # Exchange rates (k >= 0).
+ elif spin.params[k] in ['kex', 'ka']:
A.append(zero_array * 0.0)
A[j][i] = 1.0
b.append(0.0)
_______________________________________________
relax (http://www.nmr-relax.com)
This is the relax-commits mailing list
relax-commits@gna.org
To unsubscribe from this list, get a password
reminder, or change your subscription options,
visit the list information page at
https://mail.gna.org/listinfo/relax-commits
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic