This change is related to the task #6397 (https://gna.org/task/?6397)

kada _at_ chemi _dot_ muni _dot_ cz

https://mail.gna.org/public/relax-devel/2011-03/msg00027.html
https://gna.org/task/download.php?file_id=13916

This patch includes the changes in setup_equations function of class Mf in a
file maths_fns/mf.py. The selection of the equation was modified in order to
select based on both type of relaxation rate and type of interaction.

On 12 April 2011 17:06, Edward d'Auvergne <edw...@nmr-relax.com> wrote:

> Hi,
>
> I think we should avoid optimising the bond length and the CSA tensor,
> if the full tensor is used or if there are multiple bond lengths for
> one spin, at least for now.  This could be caught in the setup method
> and a RelaxError thrown saying that the optimisation of these things
> is not yet implemented.  That will allow for the current models and
> the new code to work together.  Optimisation of the CSA tensor or
> multiple dipole-dipole distances is too much effort for now, and there
> probably isn't enough information in the current data to extract this.
>  What do you think?
>
> Cheers,
>
> Edward
>
>
> On 12 April 2011 15:28, Pavel Kaderavek <pavel.kadera...@gmail.com> wrote:
> > Hi,
> >
> > it seems possible, but I think that it means that there will be for each
> > type of the interaction an unique (d,d2)ri_comps function. It will be
> > defined in the setup_equation (mf.py, class Mf). Currently, the
> > (d,d2)ri_comps function is selected just based on the fact whether the
> > values of physical quantities (internuclei distance, csa) are optimized
> or
> > not. Now it will be selected again according to the same criteria and
> > moreover according the type of interaction. This ensure that inside the
> > function (d,d2)ri_comps the function create_(d,d2)ri_comps will be called
> > with appropriate parameters.
> >
> > Generally, it is probably not very convenient to optimize all internuclei
> > distances, but only the most crucial one (to the bonded hydrogen) would
> be
> > sufficient. However, the selection should be upon user. The
> optimalization
> > of CST will be also quite difficult, because 5 parameters would be needed
> to
> > optimize (3 euler angles + 2 csa values - corresponding to two pseudo
> > chemical shielding tensors which stand for asymmetric chemical shielding
> > tensor - hence I always mention csa1 and csa2 as well as the cross-term,
> > because they are not independent). So far I would consider only the
> > optimalization of the eigenvalues of the tensors, the optimalization of
> the
> > orientation might be added later.
> >
> > Best regards,
> > Pavel
> >
> > On 22 March 2011 12:23, Edward d'Auvergne <edw...@nmr-relax.com> wrote:
> >>
> >> >> > At this point we would like to address a related question.
> Currently
> >> >> > the
> >> >> > calculation of physical constant is done in a several steps. First,
> >> >> > the
> >> >> > physical constant is calculated and the value is stored in the
> >> >> > data.dip_const_func or data.csa_const_func (grad, hess). Then, when
> >> >> > the
> >> >> > relaxation rates are calculated, the physical constant is
> >> >> > recalculated
> >> >> > by
> >> >> > the function create_dip_func or create_csa_func (grad, hess)
> (method
> >> >> > setup_equations in class Mf, maths_fns/mf.py).
> >> >> >
> >> >> >             comp_dip_const_func(data, data.bond_length)
> >> >> >             comp_csa_const_func(data, data.csa)
> >> >> >             for i in xrange(data.num_ri):
> >> >> >                 data.dip_comps_func[i] = data.dip_const_func
> >> >> >                 if data.create_dip_func[i]:
> >> >> >                     data.dip_comps_func[i] =
> >> >> > data.create_dip_func[i](data.dip_const_func)
> >> >> >                 if data.create_csa_func[i]:
> >> >> >                     data.csa_comps_func[i] =
> >> >> > data.create_csa_func[i](data.csa_const_func[data.remap_table[i]])
> >> >> >
> >> >> > There is one exception, the dipolar physical constant is not
> >> >> > recalculated in
> >> >> > the case of calculation R1 relaxation rate, because the function
> >> >> > create_dip_func does not exist in this case. We do not see a reason
> >> >> > for
> >> >> > such
> >> >> > a recalculation.
> >> >>
> >> >> The reason is because of the m10 to m39 models built into relax.  I
> >> >> have made it possible to optimise the bond length and CSA
> information.
> >> >>  However these models are not stable with the current relaxation
> data.
> >> >>  I do plan on working with these in the future though, so it would be
> >> >> useful to keep them.  Note that for models m0 to m9, the
> >> >> data.create_dip_func[i] and data.create_csa_func[i] function pointers
> >> >> are set to None.  Therefore for normal model-free analysis the
> >> >> constant is not recalculated.
> >> >>
> >> >>
> >> >> > It seems better to us to just change the coefficient in the
> >> >> > functions comp_r1_dip_jw, comp_r2_dip_jw, comp_r1_csa_jw,
> >> >> > comp_r2_csa_jw
> >> >> > (maths_fns/ri_comps.py). I guess, that this design was dedicated to
> >> >> > avoid
> >> >> > multiple calculation of the same interaction constant for each
> >> >> > measured
> >> >> > relaxation rate. We would suggest to reach the same effect by this
> >> >> > construction:
> >> >> >
> >> >> >             for i in xrange(data.num_ri):
> >> >> >                 if data.const_func[0]:
> >> >> >                     data.const_func[i] = data.const_func[0]
> >> >> >                 else
> >> >> >                     data.create_const_func(data)
> >> >>
> >> >> For models m10 to m39, this construct will not work.  The constants
> >> >> are already pre-calculated for models m0 to m9 so this is not needed.
> >> >>
> >> >>
> >> >> > Note, the comp_dip_const_func and comp_csa_const_func should be
> >> >> > change
> >> >> > so
> >> >> > that, it is possible to call them just with the argument data
> >> >> > (maths_fns/ri_comps.py). Instead of:
> >> >> >
> >> >> >
> >> >> > def comp_dip_const_func(data, bond_length):
> >> >> >     """Calculate the dipolar constant.
> >> >> >
> >> >> >    ...
> >> >> >
> >> >> >     if bond_length == 0.0:
> >> >> >         data.dip_const_func = 1e99
> >> >> >     else:
> >> >> >         data.dip_const_func = 0.25 * data.dip_const_fixed *
> >> >> > bond_length**-6
> >> >> >
> >> >> >
> >> >> > It should look like:
> >> >> >
> >> >> > def comp_dip_const_func(data):
> >> >> >     """Calculate the dipolar constant.
> >> >> >
> >> >> >    ...
> >> >> >
> >> >> >     if data.internuclei_distance == 0.0:
> >> >> >         data.const_func = 1e99
> >> >> >     else:
> >> >> >         data.const_func = 0.25 * data.dip_const_fixed *
> >> >> > data.internuclei_distance**-6
> >> >>
> >> >> The bond_length arg was designed so that the bond length could either
> >> >> come from a fixed value supplied by the user or from the parameter
> >> >> vector when bond lengths or CSA values are optimised.  This behaviour
> >> >> might have to be preserved.
> >> >>
> >> >>
> >> >> > data.dip_const_func were renamed to more general data.const_func
> and
> >> >> > instead
> >> >> > of bond_length the function directly takes  the internuclei
> distance
> >> >> > for
> >> >> > the
> >> >> > current dipole-dipole interaction. The change of
> data.dip_const_func
> >> >> > to
> >> >> > data.const_func later simplify the code design in the
> >> >> > maths_fns/ri_prime.py
> >> >> > . It will be reduced just to a multiplication of constant and the
> >> >> > linear
> >> >> > combination of spectral density functions.
> >> >>
> >> >> For models m10 to m39, I'm not sure if this design would work.  Could
> >> >> we redesign this in another way in which these complex models are
> >> >> still functional?
> >> >>
> >> >
> >> > Then, we would suggest to call the function  comp_dip_const_func,
> >> > comp_csa_const_func ... with full set of possible parameters, i.e.
> >> > comp_dip_const_func(data,internuclei_distance,csa1,csa2,rex)
> >> > comp_csa_const_func(data,internuclei_distance,csa1,csa2,rex)
> >> > ...
> >> > If we would call the function with just physically relevant arguments
> >> > then
> >> > we would have to use yet another condition to decide the type of the
> >> > interaction in the loop where individual interaction contributions are
> >> > calculated. The physical quantities irrelevent for the given
> interaction
> >> > (for example csa1,csa2,rex for the dipole-dipole interaction) are None
> >> > from
> >> > the initialization and will not be used by the function anyway.
> >>
> >> It would be easier to have a different function for each physical
> >> constant, as this is very specific code.  For example
> >> comp_dip_const_func is only called from functions which require the
> >> dipolar constant.  For the normal model-free models, this is only
> >> called during setup.  So there is no need to pass in the csa1 and csa2
> >> constants, or Rex for this specific function.  For the CSA constants,
> >> do you calculate 2 separate constants?  For example would you use:
> >>
> >> comp_dip_const_func(data[i],internuclei_distance)
> >> comp_csa_const_func(data[j],csa1)
> >> comp_csa_const_func(data[k],csa2)
> >>
> >> where data[x] in each case is a different interaction?
> >>
> >>
> >> >> > Moreover, there is an unanswered question about the NOE and the
> >> >> > additional
> >> >> > dipolar interaction. I am not sure if the suggested design is
> >> >> > physically
> >> >> > correct, rather not. During the NOE experiment, the protons are
> >> >> > saturated in
> >> >> > order to reach the steady state. Then a complete set cross
> relaxation
> >> >> > rates
> >> >> > between all interacting spin pairs should be taken into the
> account,
> >> >> > not
> >> >> > only between the spin of interest and all other interacting nuclei.
> >> >> > On
> >> >> > the
> >> >> > other hand this is probably beyond the aim of the program relax.
> What
> >> >> > do
> >> >> > you
> >> >> > think about that?
> >> >>
> >> >> This is getting quite complex as you would need to take the
> >> >> cross-correlated relaxation rates between the different relaxation
> >> >> interactions into account, as well as the motion of all spins if they
> >> >> are not directly bonded.  Is this needed for the current work?  Of
> >> >> course anything is accepted into relax, especially if you would like
> >> >> to probe this area (with a paper in mind), but it has to play nicely
> >> >> with the rest of relax and not be a burden on the relax developers to
> >> >> maintain in the future (as well as not make the current number
> >> >> crunching code slower than it already is).  The code would therefore
> >> >> need to be designed in public.  So if you would like to tackle such a
> >> >> task, I would first recommend finishing off the cst branch, and then
> >> >> make a new branch for this work.
> >> >
> >> > Then, I will design the code as I suggested. So, the sigma_noe will be
> >> > calculated separately for all dipole-dipole interactions with the
> >> > central
> >> > spin (assuming they are isolated spin pairs). The total sigma_noe will
> >> > be
> >> > calculated as a sum of all individual sigma_noe contributions.
> >>
> >> This sounds the most reasonable for a first approximation.  In reality
> >> the cross rates will be important as well.
> >>
> >> Cheers,
> >>
> >> Edward
> >
> >
>
_______________________________________________
relax (http://nmr-relax.com)

This is the relax-devel mailing list
relax-devel@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-devel

Reply via email to