mailRe: CST branch


Others Months | Index by Date | Thread Index
>>   [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Header


Content

Posted by Edward d'Auvergne on March 01, 2011 - 13:31:
Hi,

This patch was also ok, and is now applied.

Cheers,

Edward


On 1 March 2011 12:54, Pavel Kaderavek <pavel.kaderavek@xxxxxxxxx> wrote:
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/msg00001.html
https://gna.org/task/download.php?file_id=12603

This patch includes change in the functions calc_(d,d2)noe in a file
maths_fns/ri.py , where (d,d2)ri_prime was renamed to (d,d2)ri. This patch
covers also the related change of names in the function init_res_r1_data
(class Mf, maths_fns/mf.py), where the variables are initialized.

On 1 March 2011 10:36, Edward d'Auvergne <edward@xxxxxxxxxxxxx> wrote:

Hi,

The renaming should be fine.  I see no reason at the moment why we
cannot perform an in place replacement of sigma_NOE with the NOE value
inside the data[x][y].ri data structure.  If sigma_NOE is needed in
the future, then the person who needs it can recalculate it from the
NOE and R1.

Cheers,

Edward


On 1 March 2011 10:22, Pavel Kaderavek <pavel.kaderavek@xxxxxxxxx> wrote:
Hi,

Yes, you are right. It might be included in some of the following
patches.
First, we would like to discuss changes in the next patch, where we
would
like to replace variable name ri_prime in functions calc_(d,d2)noe in a
file
maths_fns/ri.py to follow the changes in the patch:
https://mail.gna.org/public/relax-devel/2011-02/msg00081.html
It was pre-discussed in:
https://mail.gna.org/public/relax-devel/2011-02/msg00084.html

The changes also imply renaming of variables r1_data.(d,d2)ri_prime to
r1_data.(d,d2)ri in the initialization function init_res_r1_data (class
Mf,
maths_fns/mf.py).

Best regards,
Pavel


On 1 March 2011 09:59, Edward d'Auvergne <edward@xxxxxxxxxxxxx> wrote:

Hi,

The patch looks good, I've now applied it.  In the future, you might
find that the self.diff_data structure does not need to be passed into
self.init_spin_data().

Cheers,

Edward



On 28 February 2011 16:51, Pavel Kaderavek <pavel.kaderavek@xxxxxxxxx>
wrote:
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-02/msg00088.html
https://gna.org/task/download.php?file_id=12598

This patch includes change in init_res_data function of class Mf in a
file
maths_fns/mf.py. The function is split into init_interaction_data and
init_spin_data. The initializations of data.ri_prime, data.dri_prime,
and
data.d2ri_prime are excluded. Calls for both newly introduced
functions
are
incorporated in the patch.

On 25 February 2011 20:38, Edward d'Auvergne <edward@xxxxxxxxxxxxx>
wrote:

Hi,

I agree, these are good designs.  The init_res_data name is a relic
of
old code from relax 1.2 when only single residues were handled and
not
individual and multiple spins per residue.  It should have been
renamed to init_spin_data.

Cheers,

Edward



On 25 February 2011 20:18, Pavel Kaderavek
<pavel.kaderavek@xxxxxxxxx>
wrote:
Hi,

We would like to discuss the initialization of the spin and
interaction
data
(Spin_object, Data) in class Mf (maths_fns/mf.py). Currently,
there
is a
function init_res_data which initializes variables in container
Data.
The
container Data is now redesigned to store only the interaction
specific
information and the spin specific data were moved to Spin_object.

We suggest to rename init_res_data to init_interaction_data and
move
spin
data initialization parts to a newly created function
init_spin_data.
The
function init_interaction_dat will be called at the same place as
the
original init_res_data, while init_spin_data will be called just
after
the
Spin_object is appended to self.data.

Best regards,
Pavel

On 25 February 2011 19:48, Edward d'Auvergne
<edward@xxxxxxxxxxxxx>
wrote:

I should have read the text of the commit message more carefully
:)

Bye,

Edward



On 25 February 2011 19:46, Edward d'Auvergne
<edward@xxxxxxxxxxxxx>
wrote:
Ah, this will also work.  I didn't release that one of the next
changes would be the in place replacement of sigma_noe by the
NOE
value inside maths_fns/ri.py.  Ok, I'll commit the patch.

Cheers,

Edward



On 25 February 2011 19:34, Pavel Kaderavek
<pavel.kaderavek@xxxxxxxxx>
wrote:
Hi,
maybe we misunderstood some parts of the code, but the
data.ri_prime
seems
to be used only in maths_fns/ri.py to calculate NOE value.
Therefore,
it
should be possible to replace data.ri_prime by data.ri
directly
and
later
change function defined in ri.py to use data.ri instead of
data.ri_prime.

original code of maths_fns/ri.py:

def calc_noe(data, i, frq_num, get_r1, params):
    """Calculate the NOE value.

    Half this code needs to be shifted into the function
initialisation
code.
    """

    # Get the r1 value either from data.ri_prime or by
calculation
if
the
value is not in data.ri_prime
    data.r1[i] = get_r1[i](data, i, frq_num, params)

    # Calculate the NOE.
    if data.r1[i] == 0.0 and data.ri_prime[i] == 0.0:
        data.ri[i] = 1.0
    elif data.r1[i] == 0.0:
        data.ri[i] = 1e99
    else:
        data.ri[i] = 1.0 + data.g_ratio*(data.ri_prime[i] /
data.r1[i])

modified version:

def calc_noe(data, i, frq_num, get_r1, params):
    """Calculate the NOE value.

    Half this code needs to be shifted into the function
initialisation
code.
    """

    # Get the r1 value either from data.ri_prime or by
calculation
if
the
value is not in data.ri_prime
    data.r1[i] = get_r1[i](data, i, frq_num, params)

    # Calculate the NOE.
    if data.r1[i] == 0.0 and data.ri[i] == 0.0:
        data.ri[i] = 1.0
    elif data.r1[i] == 0.0:
        data.ri[i] = 1e99
    else:
        data.ri[i] = 1.0 + data.g_ratio*(data.ri[i] /
data.r1[i])

the data structure data.ri is created during the
initialization
and
data.ri
is calculated by function calc_noe. Therefore we
do not see a reason to keep this line in the code:

data.ri = data.ri_prime * 1.0

since data.ri would be calculated by cumulative summation as
we
suggested.
Is our understanding correct?

Best regards,
Pavel


On 25 February 2011 18:16, Edward d'Auvergne
<edward@xxxxxxxxxxxxx>
wrote:

Hi,

The line:

data.ri = data.ri_prime * 1.0

is also quite important.  This creates a new data structure
data.ri
initialised to the values of data.ri_prime.  These lines are
probably
still necessary.

Cheers,

Edward



On 25 February 2011 18:14, Edward d'Auvergne
<edward@xxxxxxxxxxxxx>
wrote:
Hi,

I've just been looking at this patch, and it seems to have
a
problem.
The new lines are:

           data.ri = data.ri +
data[j].create_ri_prime(data[j])

But this is ri_prime.  data.ri is created later on with the
call
to
data.create_ri.  Should this be:

           data.ri_prime = data.ri_prime +
data[j].create_ri_prime(data[j])

Regards,

Edward


On 25 February 2011 18:09, Pavel Kaderavek
<pavel.kaderavek@xxxxxxxxx>
wrote:
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-02/msg00076.html
https://gna.org/support/download.php?file_id=12556

This patch includes change in  func_mf, func_local_tm,
func_diff,
func_all,
dfunc_mf, dfunc_local_tm, dfunc_diff, dfunc_all,
d2func_mf,
d2func_local_tm,
d2func_diff, d2func_all functions of class Mf in a file
maths_fns/mf.py. The
functions were modified in order to handle data for more
interactions.
Due to the equality of (d,d2)ri and (d,d2)ri_prime
variables,
the
(d,d2)ri_prime were replaced by (d,d2)ri and the equality
was
removed.
Moreover, (d,d2)ri was redefined as a cumulative sum of
individual
interaction contributions to the total relaxation rate or
corresponding
derivatives.


On 24 February 2011 12:26, Edward d'Auvergne
<edward@xxxxxxxxxxxxx>
wrote:

Hi,

Please see below:


On 24 February 2011 10:02, Pavel Kaderavek
<pavel.kaderavek@xxxxxxxxx>
wrote:
Hi,

We realized a problem during the preparation of the
following
patch.
Currently, it is impossible to initialize variables in
the
originally
suggested way:

data = self.data[0]
data.ri_prime = 0.0

in the function func_mf (maths_fns/mf.py) and other
similar
functions
(func_local_tm, func_diff, func_all, and their
equivalents
for a
first
and
second derivatives).

Ah, yes.  'data' here is a list rather than a container,
so
you
can't
do this.  If you like, what I can do is create a special
list-like
object for this.  The you can access list elements, but
also
place
variables inside it.

The other problem is that ri_prime returned by
maths_fns.ri_prime.func_ri_prime() is not a number but a
numpy
array.
Its dimensions are Nx1, where N is the number of
relaxation
data
points.  So the initialisation will have to be at the
very
start
rather than in the func_mf() methods, and it needs to be
initialised
to the correct numpy object using something like
'zeros(num_ri[i],
float64)'.  The dri_prime, d2ri_prime, ri, dri, and d2ri
prime
will
have similar problems.

I would suggest that 'ri_prime' does not need to be
summed,
but
only
'ri'.  Or am I missing something?  The difference between
ri
and
ri_prime is that ri contains the steady-state NOE whereas
ri_prime
contains sigma_NOE.  Do we need to store and sum ri_prime
at
all?


It is not possible because of the approved changes of
__init__
function
in
the class Mf (file maths_fns/mf.py). The array used to
store
data is
created
in the following way:

        self.data = []
        for i in xrange(self.num_spins):
            ...
            self.data.append([])
            ...
            # Loop over the relaxation interactions.
            for j in xrange(self.num_interactions[i]):
                self.data[i].append(Data()) # This is a
list
dedicated
for
the storage of interaction specific parameters (i.e.
type
of
interaction,
internuclei distance, ...)

self.data[i][j].interactions=interactions[i][j]




self.data[i][j].internuclei_distance=internuclei_distance[i][j]
                ...


Thus, the list for a storage of spin specific data does
not
exist
and
the
suggested variable location does not exist:
self.data[0].ri_prime

This can be created, if I make this special Python
list-like
object.
There is already one special object, the Data class at
the
very
end of
the file.  I can create a list-like object here as well,
and
initialise each spin object to this.  Ok, I've just added
this
code in
r12618.  This should fix the problem and not cause too
many
problems
with your current code.


We found some possible ways to solve the problem.
However
we
do
not
think,
they are ideal.
First, we can add for each spin a new list except those
which
store
the
interaction specific data. Data_spin list would be at
the
beginning
of
the
array and therefore every loop over interactions in the
code
has
to
keep
it
in mind and start from index 1 not 0 to avoid Data_spin
list.

The second possibility is based on the idea to declare
for
each
spin
a
class
Spin_data. The Spin_data would contain all spin
specific
variables
(ri_prime, chi2, ...) and also a class Data which would
contain
interaction
specific data.

What do you think about these suggestions? We will be
glad
for
any
better
suggestion, than ours.

I have taken your second idea, but it is inbuilt into the
self.data[i]
structure itself rather than a separate object inside
self.data.
 I
hope this solution will be ok.

Cheers,

Edward

















Related Messages


Powered by MHonArc, Updated Thu Mar 10 18:20:23 2011