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

