Hi Edward.

I don't think such things should be modified in the back-end code, but
rather it the front-end code,
helping selecting the right model.

Using scripting, it should be possible to do access all parts of the code.
Even if it does not give any sense.

A better functionality, would be to implement a function, which go
through the self.models, and suggest the correct models
to use instead.

Best
Troels


2014-08-18 11:02 GMT+02:00 Edward d'Auvergne <[email protected]>:
> Hi,
>
> If all the 'No Rex' models are merged into a single model, then the
> methods here would remain identical.  However the logic of the "if
> model == MODEL_NOREX:" block would be modified to select the correct
> target function based on the data that the user input.  Or even
> simpler, the logic could be placed higher up in a function in the
> specific_analyses.relax_disp.data module, and then a new argument
> added to the target function class for choosing between the target
> functions.  Note that a 4th target function will probably be added in
> the future when off-resonance CPMG data is handled, to allow R1 to be
> optimised with this data.
>
> Cheers,
>
> Edward
>
>
>
> On 4 August 2014 19:22,  <[email protected]> wrote:
>> Author: tlinnet
>> Date: Mon Aug  4 19:22:10 2014
>> New Revision: 24945
>>
>> URL: http://svn.gna.org/viewcvs/relax?rev=24945&view=rev
>> Log:
>> Implemented target and calculation function for MODEL_NOREX_R1RHO, 
>> MODEL_NOREX_R1RHO_FIT_R1.
>>
>> bug #22440(https://gna.org/bugs/?22440): The "NOREX" model is not covering 
>> R1rho models.
>> sr #3135(https://gna.org/support/?3135): Optimisation of the R1 relaxation 
>> rate for the off-resonance R1rho relaxation dispersion models.
>>
>> Modified:
>>     branches/R1_fitting/target_functions/relax_disp.py
>>
>> Modified: branches/R1_fitting/target_functions/relax_disp.py
>> URL: 
>> http://svn.gna.org/viewcvs/relax/branches/R1_fitting/target_functions/relax_disp.py?rev=24945&r1=24944&r2=24945&view=diff
>> ==============================================================================
>> --- branches/R1_fitting/target_functions/relax_disp.py  (original)
>> +++ branches/R1_fitting/target_functions/relax_disp.py  Mon Aug  4 19:22:10 
>> 2014
>> @@ -55,7 +55,7 @@
>>  from lib.errors import RelaxError
>>  from lib.float import isNaN
>>  from target_functions.chi2 import chi2_rankN
>> -from specific_analyses.relax_disp.variables import EXP_TYPE_CPMG_DQ, 
>> EXP_TYPE_CPMG_MQ, EXP_TYPE_CPMG_PROTON_MQ, EXP_TYPE_CPMG_PROTON_SQ, 
>> EXP_TYPE_CPMG_SQ, EXP_TYPE_CPMG_ZQ, EXP_TYPE_LIST_CPMG, EXP_TYPE_R1RHO, 
>> MODEL_B14, MODEL_B14_FULL, MODEL_CR72, MODEL_CR72_FULL, MODEL_DPL94, 
>> MODEL_DPL94_FIT_R1, MODEL_IT99, MODEL_LIST_CPMG, MODEL_LIST_FULL, 
>> MODEL_LIST_MMQ, MODEL_LIST_MQ_CPMG, MODEL_LIST_NUMERIC, MODEL_LIST_R1RHO, 
>> MODEL_LIST_R1RHO_FULL, MODEL_LIST_R1RHO_FIT_R1, MODEL_LM63, 
>> MODEL_LM63_3SITE, MODEL_M61, MODEL_M61B, MODEL_MP05, MODEL_MMQ_CR72, 
>> MODEL_NOREX, MODEL_NS_CPMG_2SITE_3D, MODEL_NS_CPMG_2SITE_3D_FULL, 
>> MODEL_NS_CPMG_2SITE_EXPANDED, MODEL_NS_CPMG_2SITE_STAR, 
>> MODEL_NS_CPMG_2SITE_STAR_FULL, MODEL_NS_MMQ_2SITE, MODEL_NS_MMQ_3SITE, 
>> MODEL_NS_MMQ_3SITE_LINEAR, MODEL_NS_R1RHO_2SITE, MODEL_NS_R1RHO_3SITE, 
>> MODEL_NS_R1RHO_3SITE_LINEAR, MODEL_PARAM_DW_MIX_DOUBLE, 
>> MODEL_PARAM_DW_MIX_QUADRUPLE, MODEL_PARAM_INV_RELAX_TIMES, MODEL_PARAM_R20B, 
>> MODEL_TAP03, MODEL_TP02, MODEL_TSMFK01
>> +from specific_analyses.relax_disp.variables import EXP_TYPE_CPMG_DQ, 
>> EXP_TYPE_CPMG_MQ, EXP_TYPE_CPMG_PROTON_MQ, EXP_TYPE_CPMG_PROTON_SQ, 
>> EXP_TYPE_CPMG_SQ, EXP_TYPE_CPMG_ZQ, EXP_TYPE_LIST_CPMG, EXP_TYPE_R1RHO, 
>> MODEL_B14, MODEL_B14_FULL, MODEL_CR72, MODEL_CR72_FULL, MODEL_DPL94, 
>> MODEL_DPL94_FIT_R1, MODEL_IT99, MODEL_LIST_CPMG, MODEL_LIST_FULL, 
>> MODEL_LIST_MMQ, MODEL_LIST_MQ_CPMG, MODEL_LIST_NUMERIC, MODEL_LIST_R1RHO, 
>> MODEL_LIST_R1RHO_FULL, MODEL_LIST_R1RHO_FIT_R1, MODEL_LM63, 
>> MODEL_LM63_3SITE, MODEL_M61, MODEL_M61B, MODEL_MP05, MODEL_MMQ_CR72, 
>> MODEL_NOREX, MODEL_NOREX_R1RHO, MODEL_NOREX_R1RHO_FIT_R1, 
>> MODEL_NS_CPMG_2SITE_3D, MODEL_NS_CPMG_2SITE_3D_FULL, 
>> MODEL_NS_CPMG_2SITE_EXPANDED, MODEL_NS_CPMG_2SITE_STAR, 
>> MODEL_NS_CPMG_2SITE_STAR_FULL, MODEL_NS_MMQ_2SITE, MODEL_NS_MMQ_3SITE, 
>> MODEL_NS_MMQ_3SITE_LINEAR, MODEL_NS_R1RHO_2SITE, MODEL_NS_R1RHO_3SITE, 
>> MODEL_NS_R1RHO_3SITE_LINEAR, MODEL_PARAM_DW_MIX_DOUBLE, 
>> MODEL_PARAM_DW_MIX_QUADRUPLE, MODEL_PARAM_INV_RELAX_TIMES, MODEL_PARAM_R20B, 
>> MODEL
 _TAP03, MODEL_TP02, MODEL_TSMFK01
>>
>>
>>  class Dispersion:
>> @@ -482,6 +482,10 @@
>>          # Set up the model.
>>          if model == MODEL_NOREX:
>>              self.func = self.func_NOREX
>> +        if model == MODEL_NOREX_R1RHO:
>> +            self.func = self.func_NOREX_R1RHO
>> +        if model == MODEL_NOREX_R1RHO_FIT_R1:
>> +            self.func = self.func_NOREX_R1RHO_FIT_R1
>>          if model == MODEL_LM63:
>>              self.func = self.func_LM63
>>          if model == MODEL_LM63_3SITE:
>> @@ -653,6 +657,35 @@
>>          return chi2_rankN(self.values, self.back_calc, self.errors)
>>
>>
>> +    def calc_NOREX_R1RHO(self, R1=None, r1rho_prime=None):
>> +        """Calculation function for no exchange, for R1rho off resonance 
>> models.
>> +
>> +        @keyword R1:            The R1 value.
>> +        @type R1:               list of float
>> +        @keyword r1rho_prime:   The R1rho value for all states in the 
>> absence of exchange.
>> +        @type r1rho_prime:      list of float
>> +        @return:                The chi-squared value.
>> +        @rtype:                 float
>> +        """
>> +
>> +        # Reshape r1rho_prime to per experiment, spin and frequency.
>> +        self.r1rho_prime_struct[:] = multiply.outer( 
>> r1rho_prime.reshape(self.NE, self.NS, self.NM), self.no_nd_ones )
>> +
>> +        # Make back calculation.
>> +        self.back_calc[:] = R1 * cos(self.tilt_angles)**2 + 
>> self.r1rho_prime_struct * sin(self.tilt_angles)**2
>> +
>> +        # Clean the data for all values, which is left over at the end of 
>> arrays.
>> +        self.back_calc = self.back_calc*self.disp_struct
>> +
>> +        # For all missing data points, set the back-calculated value to the 
>> measured values so that it has no effect on the chi-squared value.
>> +        if self.has_missing:
>> +            # Replace with values.
>> +            self.back_calc[self.mask_replace_blank.mask] = 
>> self.values[self.mask_replace_blank.mask]
>> +
>> +        # Return the total chi-squared value.
>> +        return chi2_rankN(self.values, self.back_calc, self.errors)
>> +
>> +
>>      def calc_ns_cpmg_2site_3D_chi2(self, R20A=None, R20B=None, dw=None, 
>> pA=None, kex=None):
>>          """Calculate the chi-squared value of the 'NS CPMG 2-site' models.
>>
>> @@ -1395,6 +1428,50 @@
>>          return chi2_rankN(self.values, self.back_calc, self.errors)
>>
>>
>> +    def func_NOREX_R1RHO(self, params):
>> +        """Target function for no exchange, for R1rho off resonance models.
>> +
>> +        @param params:  The vector of parameter values.
>> +        @type params:   numpy rank-1 float array
>> +        @return:        The chi-squared value.
>> +        @rtype:         float
>> +        """
>> +
>> +        # Scaling.
>> +        if self.scaling_flag:
>> +            params = dot(params, self.scaling_matrix)
>> +
>> +        # Unpack the parameter values.
>> +        r1rho_prime = params
>> +
>> +        # Calculate and return the chi-squared value.
>> +        return self.calc_NOREX_R1RHO(R1=self.r1, r1rho_prime=r1rho_prime)
>> +
>> +
>> +    def func_NOREX_R1RHO_FIT_R1(self, params):
>> +        """Target function for no exchange, for R1rho off resonance models, 
>> where R1 is fitted.
>> +
>> +        @param params:  The vector of parameter values.
>> +        @type params:   numpy rank-1 float array
>> +        @return:        The chi-squared value.
>> +        @rtype:         float
>> +        """
>> +
>> +        # Scaling.
>> +        if self.scaling_flag:
>> +            params = dot(params, self.scaling_matrix)
>> +
>> +        # Unpack the parameter values.
>> +        r1 = params[:self.end_index[0]]
>> +        r1rho_prime = params[self.end_index[0]:self.end_index[1]]
>> +
>> +        # Reshape R1 to per experiment, spin and frequency.
>> +        self.r1_struct[:] = multiply.outer( r1.reshape(self.NE, self.NS, 
>> self.NM), self.no_nd_ones )
>> +
>> +        # Calculate and return the chi-squared value.
>> +        return self.calc_NOREX_R1RHO(R1=self.r1_struct, 
>> r1rho_prime=r1rho_prime)
>> +
>> +
>>      def func_ns_cpmg_2site_3D(self, params):
>>          """Target function for the reduced numerical solution for the 
>> 2-site Bloch-McConnell equations.
>>
>>
>>
>> _______________________________________________
>> relax (http://www.nmr-relax.com)
>>
>> This is the relax-commits mailing list
>> [email protected]
>>
>> 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
>
> _______________________________________________
> relax (http://www.nmr-relax.com)
>
> This is the relax-devel mailing list
> [email protected]
>
> 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-devel

_______________________________________________
relax (http://www.nmr-relax.com)

This is the relax-devel mailing list
[email protected]

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-devel

Reply via email to