Hi,

Some more information is needed, as it's not possible to tell where
this stopped.  A good idea would be to turn up the verbosity level to
see what minfx is doing.  Did you call the grid_search user function?
Or the minimise user function?  Did the grid search say something like
"Searching through 1 grid nodes"?

Regards,

Edward



On 6 June 2014 14:48, Troels Emtekær Linnet <[email protected]> wrote:
> Hi Edward.
>
> When I try to do a grid search, it does not initalize func_CR72_full in the
> target function?
>
> If I make
> import sys
> sys.exit()
>
> It does not stop?
> Only if I do a minimise, it stops?
>
> It is in
> specific_analyses/relax_disp/optimisation.py
> line 745
>
> Inserting
>             print model.func.im_func.__name__
> gives func_CR72_full
>
> How does it know how to unpack and calculate?
>
> Best
> Troels
>
>
> 2014-06-06 12:32 GMT+02:00 Edward d'Auvergne <[email protected]>:
>
>> Hi,
>>
>> That sounds good.  Maybe it's best to have the number of fields and
>> number of spins set to something different and not to 2?  That way the
>> unpacking is stressed as much as possible and there cannot be a
>> accidental swap of the field and spin dimensions being unnoticed by
>> the test.  This is not likely, but I've encountered enough weird and
>> supposedly impossible situations in the development of relax that it
>> would not surprise me.
>>
>> Cheers,
>>
>> Edward
>>
>> On 6 June 2014 12:27, Troels Emtekær Linnet <[email protected]> wrote:
>> > Check.
>> >
>> > I am generating R2eff data for 3 fields, and 3 spins, for full model.
>> > I will put the data in
>> > test_suite/shared_data/dispersion/bug_22146_unpacking_r2a_r2b_cluster
>> >
>> > Best
>> > Troels
>> >
>> >
>> > 2014-06-06 12:11 GMT+02:00 Edward d'Auvergne <[email protected]>:
>> >
>> >> Hi,
>> >>
>> >> Right, you have the 2 parameters in the self.num_spins*2 part.  And I
>> >> forgot about the parameters being different for each field.  It would
>> >> be good to then have a multi-field and multi-spin cluster system test
>> >> to really make sure that relax operates correctly, especially with the
>> >> data going into the target function and the subsequently unpacking the
>> >> results into the relax data store.  For example someone might modify
>> >> the loop_parameters() function - this concept could be migrated into
>> >> the specific API and converted into a common mechanism for all the
>> >> analysis types as it is quite powerful - and they may not know that
>> >> the change they just made broke code in the
>> >> target_functions.relax_disp module.
>> >>
>> >> Cheers,
>> >>
>> >> Edward
>> >>
>> >>
>> >> On 6 June 2014 12:05, Troels Emtekær Linnet <[email protected]>
>> >> wrote:
>> >> > Hi Ed.
>> >> >
>> >> > The implementations needs:
>> >> >         R20 = params[:self.end_index[1]].reshape(self.num_spins*2,
>> >> > self.num_frq)
>> >> >         R20A = R20[::2].flatten()
>> >> >         R20B = R20[1::2].flatten()
>> >> >
>> >> >
>> >> >
>> >> >
>> >> >
>> >> > 2014-06-06 11:55 GMT+02:00 Edward d'Auvergne <[email protected]>:
>> >> >
>> >> >> The different unpacking implementations can be tested with the
>> >> >> timeit
>> >> >> Python module to see which is fastest
>> >> >>
>> >> >>
>> >> >> (http://thread.gmane.org/gmane.science.nmr.relax.devel/5937/focus=6010).
>> >> >>
>> >> >> Cheers,
>> >> >>
>> >> >> Edward
>> >> >>
>> >> >>
>> >> >>
>> >> >> On 6 June 2014 11:53, Edward d'Auvergne <[email protected]>
>> >> >> wrote:
>> >> >> > Hi,
>> >> >> >
>> >> >> > In this case, I think 'num_frq' should be fixed to 2.  This
>> >> >> > dimension
>> >> >> > corresponds to the parameters R20A and R20B so it is always fixed
>> >> >> > to
>> >> >> > 2.
>> >> >> >
>> >> >> > Regards,
>> >> >> >
>> >> >> > Edward
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> > On 6 June 2014 11:51, Troels Emtekær Linnet
>> >> >> > <[email protected]>
>> >> >> > wrote:
>> >> >> >> Hi.
>> >> >> >>
>> >> >> >> Another way is:
>> >> >> >>
>> >> >> >> ml = params[:end_index[1]].reshape(num_spins*2, num_frq)
>> >> >> >> R20A = ml[::2].flatten()
>> >> >> >> R20B = ml[1::2].flatten()
>> >> >> >>
>> >> >> >>
>> >> >> >> Best
>> >> >> >> Troels
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> 2014-06-06 11:39 GMT+02:00 Troels Emtekær Linnet
>> >> >> >> <[email protected]>:
>> >> >> >>
>> >> >> >>> There is no doubt that it is the unpacking of the R20A and R20B
>> >> >> >>> in
>> >> >> >>> the
>> >> >> >>> target function.
>> >> >> >>>
>> >> >> >>> I was thinking of creating a function, which do the the
>> >> >> >>> unpacking.
>> >> >> >>>
>> >> >> >>> This unpacking function could then be tested with a unit test?
>> >> >> >>>
>> >> >> >>> What do you think?
>> >> >> >>> Where should I position such a function?
>> >> >> >>>
>> >> >> >>> Best
>> >> >> >>> Troels
>> >> >> >>>
>> >> >> >>>
>> >> >> >>>
>> >> >> >>> 2014-06-06 11:26 GMT+02:00 Edward d'Auvergne
>> >> >> >>> <[email protected]>:
>> >> >> >>>>
>> >> >> >>>> Hi Troels,
>> >> >> >>>>
>> >> >> >>>>
>> >> >> >>>> The best way to handle this is to first create a unit test of
>> >> >> >>>> the
>> >> >> >>>>
>> >> >> >>>> specific_analyses.relax_disp.parameters.disassemble_param_vector()
>> >> >> >>>> where the problem is likely to be most easily found.  I don't
>> >> >> >>>> understand how this could be a problem as the
>> >> >> >>>> assemble_param_vector()
>> >> >> >>>> and disassemble_param_vector() functions both call the same
>> >> >> >>>> loop_parameters() function for the ordering of the parameter
>> >> >> >>>> values!
>> >> >> >>>> Maybe the problem is in the unpacking of the parameter vector
>> >> >> >>>> in
>> >> >> >>>> the
>> >> >> >>>> target functions themselves, for example in the full B14 model:
>> >> >> >>>>
>> >> >> >>>>
>> >> >> >>>>     def func_B14_full(self, params):
>> >> >> >>>>         """Target function for the Baldwin (2014) 2-site exact
>> >> >> >>>> solution model for all time scales.
>> >> >> >>>>
>> >> >> >>>>         This assumes that pA > pB, and hence this must be
>> >> >> >>>> implemented
>> >> >> >>>> as a constraint.
>> >> >> >>>>
>> >> >> >>>>
>> >> >> >>>>         @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.
>> >> >> >>>>         R20A = params[:self.end_index[0]]
>> >> >> >>>>         R20B = params[self.end_index[0]:self.end_index[1]]
>> >> >> >>>>         dw = params[self.end_index[1]:self.end_index[2]]
>> >> >> >>>>         pA = params[self.end_index[2]]
>> >> >> >>>>         kex = params[self.end_index[2]+1]
>> >> >> >>>>
>> >> >> >>>>         # Calculate and return the chi-squared value.
>> >> >> >>>>         return self.calc_B14_chi2(R20A=R20A, R20B=R20B, dw=dw,
>> >> >> >>>> pA=pA,
>> >> >> >>>> kex=kex)
>> >> >> >>>>
>> >> >> >>>>
>> >> >> >>>> This R20A and R20B unpacking might be the failure point as this
>> >> >> >>>> may
>> >> >> >>>> not match the loop_parameters() function - which it must!  In
>> >> >> >>>> any
>> >> >> >>>> case, having a unit or system test catch the problem would be
>> >> >> >>>> very
>> >> >> >>>> useful for the stability of the dispersion analysis in relax.
>> >> >> >>>>
>> >> >> >>>> A code example might be useful:
>> >> >> >>>>
>> >> >> >>>> R20_params = array([1, 2, 3, 4])
>> >> >> >>>> R20A, R20B = transpose(R20_params.reshape(2, 2)
>> >> >> >>>> print(R20A)
>> >> >> >>>> print(R20B)
>> >> >> >>>>
>> >> >> >>>> You should see that R20A is [1, 3], and R20B is [2, 4].  This
>> >> >> >>>> is
>> >> >> >>>> how
>> >> >> >>>> the parameters are handled in the loop_parameters() function
>> >> >> >>>> which
>> >> >> >>>> defines the parameter vector in all parts of relax.  There
>> >> >> >>>> might
>> >> >> >>>> be a
>> >> >> >>>> quicker way to unpack the parameters, but such an idea could be
>> >> >> >>>> used
>> >> >> >>>> for the target functions.
>> >> >> >>>>
>> >> >> >>>> Cheers,
>> >> >> >>>>
>> >> >> >>>> Edward
>> >> >> >>>>
>> >> >> >>>> On 6 June 2014 11:08, Troels E. Linnet
>> >> >> >>>> <[email protected]>
>> >> >> >>>> wrote:
>> >> >> >>>> > URL:
>> >> >> >>>> >   <http://gna.org/bugs/?22146>
>> >> >> >>>> >
>> >> >> >>>> >                  Summary: Unpacking of R2A and R2B is
>> >> >> >>>> > performed
>> >> >> >>>> > wrong
>> >> >> >>>> > for
>> >> >> >>>> > clustered "full" dispersion models
>> >> >> >>>> >                  Project: relax
>> >> >> >>>> >             Submitted by: tlinnet
>> >> >> >>>> >             Submitted on: Fri 06 Jun 2014 09:08:58 AM UTC
>> >> >> >>>> >                 Category: relax's source code
>> >> >> >>>> > Specific analysis category: Relaxation dispersion
>> >> >> >>>> >                 Priority: 9 - Immediate
>> >> >> >>>> >                 Severity: 4 - Important
>> >> >> >>>> >                   Status: None
>> >> >> >>>> >              Assigned to: None
>> >> >> >>>> >          Originator Name:
>> >> >> >>>> >         Originator Email:
>> >> >> >>>> >              Open/Closed: Open
>> >> >> >>>> >                  Release: Repository: trunk
>> >> >> >>>> >          Discussion Lock: Any
>> >> >> >>>> >         Operating System: All systems
>> >> >> >>>> >
>> >> >> >>>> >     _______________________________________________________
>> >> >> >>>> >
>> >> >> >>>> > Details:
>> >> >> >>>> >
>> >> >> >>>> > The unpacking of the R2A and R2B parameters in the "full"
>> >> >> >>>> > model
>> >> >> >>>> > is
>> >> >> >>>> > performed
>> >> >> >>>> > wrong.
>> >> >> >>>> > This will happen performing a clustered analysis, using one
>> >> >> >>>> > of
>> >> >> >>>> > the
>> >> >> >>>> > "full"
>> >> >> >>>> > models.
>> >> >> >>>> >
>> >> >> >>>> > This bug affect all analysis performed running with a "full"
>> >> >> >>>> > model,
>> >> >> >>>> > with
>> >> >> >>>> > clustered residues.
>> >> >> >>>> >
>> >> >> >>>> > The bug is located in the target function:
>> >> >> >>>> > ./target_functions/relax_disp.py
>> >> >> >>>> >
>> >> >> >>>> > For all the "func_MODEL_full", the unpacking of:
>> >> >> >>>> > R20A = params[:self.end_index[0]]
>> >> >> >>>> > R20B = params[self.end_index[0]:self.end_index[1]]
>> >> >> >>>> >
>> >> >> >>>> > This is wrong, since the "params" list, is ordered:
>> >> >> >>>> > [spin, spin, spin, [dw], pA, kex], where spin = [nr_frq*r2a,
>> >> >> >>>> > nr_frq*r2b]
>> >> >> >>>> >
>> >> >> >>>> > This ordering happens in:
>> >> >> >>>> > ./specific_analysis/relax_disp/parameters.py
>> >> >> >>>> > in the loop_parameters.py
>> >> >> >>>> >
>> >> >> >>>> > A possible solutions i shown below.
>> >> >> >>>> > This alter the unpacking of the parameters.
>> >> >> >>>> >
>> >> >> >>>> > An example of profiling_cr72.py is attached.
>> >> >> >>>> > This can be downloaded, and run in base folder of relax:
>> >> >> >>>> > ./profiling_cr72.py .
>> >> >> >>>> >
>> >> >> >>>> > This is with 3 frq, and 3 spins.
>> >> >> >>>> >
>> >> >> >>>> > The current implementations would unpack:
>> >> >> >>>> > ('R20A', array([  2.,   2.,   2.,   4.,   4.,   4.,  12.,
>> >> >> >>>> > 12.,
>> >> >> >>>> > 12.]),
>> >> >> >>>> > 9)
>> >> >> >>>> > ('R20B', array([ 14.,  14.,  14.,  22.,  22.,  22.,  24.,
>> >> >> >>>> > 24.,
>> >> >> >>>> > 24.]),
>> >> >> >>>> > 9)
>> >> >> >>>> >
>> >> >> >>>> > R2A is 2, 12, 22 for the spins 0-3
>> >> >> >>>> > R2B is, 4, 14, 24 for the spins 0-3
>> >> >> >>>> >
>> >> >> >>>> > The suggested unpacking loop, unpacks to:
>> >> >> >>>> > ('R20A', array([  2.,   2.,   2.,  12.,  12.,  12.,  22.,
>> >> >> >>>> > 22.,
>> >> >> >>>> > 22.]),
>> >> >> >>>> > 9)
>> >> >> >>>> > ('R20B', array([  4.,   4.,   4.,  14.,  14.,  14.,  24.,
>> >> >> >>>> > 24.,
>> >> >> >>>> > 24.]),
>> >> >> >>>> > 9)
>> >> >> >>>> >
>> >> >> >>>> >
>> >> >> >>>> > -------
>> >> >> >>>> > from numpy import array, concatenate, delete, index_exp
>> >> >> >>>> > import numpy
>> >> >> >>>> >
>> >> >> >>>> > p = array([  1.000000000000000e+01, 1.000000000000000e+01,
>> >> >> >>>> > 1.100000000000000e+01
>> >> >> >>>> > , 1.100000000000000e+01, 1.000000000000000e+01,
>> >> >> >>>> > 1.000000000000000e+01
>> >> >> >>>> > , 1.100000000000000e+01, 1.100000000000000e+01,
>> >> >> >>>> > 1.000000000000000e+00
>> >> >> >>>> > , 1.000000000000000e+00, 9.000000000000000e-01,
>> >> >> >>>> > 1.000000000000000e+03])
>> >> >> >>>> >
>> >> >> >>>> > e = [4, 8, 10]
>> >> >> >>>> >
>> >> >> >>>> > # Now
>> >> >> >>>> > r2a = p[:e[0]]
>> >> >> >>>> > print r2a
>> >> >> >>>> > r2b = p[e[0]:e[1]]
>> >> >> >>>> > print r2b
>> >> >> >>>> > dw = p[e[1]:e[2]]
>> >> >> >>>> > print dw
>> >> >> >>>> > pA = p[e[2]]
>> >> >> >>>> > print pA
>> >> >> >>>> > kex = p[e[2]+1]
>> >> >> >>>> > print kex
>> >> >> >>>> >
>> >> >> >>>> > print "new"
>> >> >> >>>> > ns = 2
>> >> >> >>>> > nf = 2
>> >> >> >>>> >
>> >> >> >>>> > ml = p[:e[1]]
>> >> >> >>>> >
>> >> >> >>>> > R20A = array([])
>> >> >> >>>> > R20B = array([])
>> >> >> >>>> > for i in range(0, ns):
>> >> >> >>>> >     # Array sorted per [spin, spin, spin], where spin =
>> >> >> >>>> > [nr_frq*r2a,
>> >> >> >>>> > nr_frq*r2b]
>> >> >> >>>> >     spin_AB = ml[:nf*2]
>> >> >> >>>> >     ml = delete(ml, numpy.s_[:nf*2])
>> >> >> >>>> >     R20A = concatenate([R20A, spin_AB[:nf] ])
>> >> >> >>>> >     R20B = concatenate([R20B, spin_AB[nf:] ])
>> >> >> >>>> >
>> >> >> >>>> > print R20A
>> >> >> >>>> > print R20B
>> >> >> >>>> > print dw
>> >> >> >>>> > print pA
>> >> >> >>>> > print kex
>> >> >> >>>> >
>> >> >> >>>> >
>> >> >> >>>> >
>> >> >> >>>> >     _______________________________________________________
>> >> >> >>>> >
>> >> >> >>>> > File Attachments:
>> >> >> >>>> >
>> >> >> >>>> >
>> >> >> >>>> > -------------------------------------------------------
>> >> >> >>>> > Date: Fri 06 Jun 2014 09:08:58 AM UTC  Name:
>> >> >> >>>> > profiling_cr72.py
>> >> >> >>>> > Size:
>> >> >> >>>> > 17kB
>> >> >> >>>> > By: tlinnet
>> >> >> >>>> >
>> >> >> >>>> > <http://gna.org/bugs/download.php?file_id=20938>
>> >> >> >>>> >
>> >> >> >>>> >     _______________________________________________________
>> >> >> >>>> >
>> >> >> >>>> > Reply to this item at:
>> >> >> >>>> >
>> >> >> >>>> >   <http://gna.org/bugs/?22146>
>> >> >> >>>> >
>> >> >> >>>> > _______________________________________________
>> >> >> >>>> >   Message sent via/by Gna!
>> >> >> >>>> >   http://gna.org/
>> >> >> >>>> >
>> >> >> >>>> >
>> >> >> >>>> > _______________________________________________
>> >> >> >>>> > 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