Hi Edward.

In the last final version, all looping is discarded.

So code is already ready to handle offsets.

Best
Troels


2014-06-10 11:38 GMT+02:00 Edward d'Auvergne <[email protected]>:

> Hi Troels,
>
> You should note that the offset loop is important to have in the
> future.  When the handling of offsets in CPMG data is added to relax
> (the first point in the TODO list of the dispersion chapter of the
> manual
> http://www.nmr-relax.com/manual/do_dispersion_features_yet_be_implemented.html
> ,
> and as mentioned by Andy Baldwin as being very important), the offset
> loop will be used.  Although rare, there will be users who centre
> their heteronuclear hard pulses at different ppm values and hence have
> CPMG data sets with different offsets.
>
> Regards,
>
> Edward
>
>
>
> On 8 June 2014 13:14,  <[email protected]> wrote:
> > Author: tlinnet
> > Date: Sun Jun  8 13:14:36 2014
> > New Revision: 23729
> >
> > URL: http://svn.gna.org/viewcvs/relax?rev=23729&view=rev
> > Log:
> > Removing looping over exp and offset indicies in calc_chi2. They are
> always 0 anyway.
> >
> > This brings a little speed.
> >
> > Task #7807 (https://gna.org/task/index.php?7807): Speed-up of
> dispersion models for Clustered analysis.
> >
> > ----
> > Profiling.
> >
> > 1000 iterations
> > 100 spins
> > 3 sfrq
> > ('sfrq: ', 600000000.0, 'number of cpmg frq', 15, array([  2.,   6.,
>  10.,  14.,  18.,  22.,  26.,  30.,  34.,  38.,  42.,
> >         46.,  50.,  54.,  58.]))
> > ('sfrq: ', 800000000.0, 'number of cpmg frq', 20, array([  2.,   6.,
>  10.,  14.,  18.,  22.,  26.,  30.,  34.,  38.,  42.,
> >         46.,  50.,  54.,  58.,  62.,  66.,  70.,  74.,  78.]))
> > ('sfrq: ', 900000000.0, 'number of cpmg frq', 22, array([  2.,   6.,
>  10.,  14.,  18.,  22.,  26.,  30.,  34.,  38.,  42.,
> >         46.,  50.,  54.,  58.,  62.,  66.,  70.,  74.,  78.,  82.,
>  86.]))
> > ('chi2 cluster:', 0.0)
> >
> > TRUNK
> >    ncalls  tottime  percall  cumtime  percall filename:lineno(function)
> >      1000    5.221    0.005   53.578    0.054
> relax_disp.py:456(calc_CR72_chi2)
> >
> > BEFORE
> >    ncalls  tottime  percall  cumtime  percall filename:lineno(function)
> >      1000   14.871    0.015   43.084    0.043
> relax_disp.py:494(calc_CR72_chi2)
> >
> > AFTER removing looping over exp and offset indicies. They are always 0.
> >    ncalls  tottime  percall  cumtime  percall filename:lineno(function)
> >      1000   12.831    0.013   38.248    0.038
> relax_disp.py:494(calc_CR72_chi2)
> >
> > Modified:
> >     branches/disp_spin_speed/target_functions/relax_disp.py
> >
> > Modified: branches/disp_spin_speed/target_functions/relax_disp.py
> > URL:
> http://svn.gna.org/viewcvs/relax/branches/disp_spin_speed/target_functions/relax_disp.py?rev=23729&r1=23728&r2=23729&view=diff
> >
> ==============================================================================
> > --- branches/disp_spin_speed/target_functions/relax_disp.py
> (original)
> > +++ branches/disp_spin_speed/target_functions/relax_disp.py     Sun Jun
>  8 13:14:36 2014
> > @@ -508,33 +508,29 @@
> >          @rtype:         float
> >          """
> >
> > -        # Loop over the experiment types.
> > -        for ei in range(self.num_exp):
> > -            # Loop over the spins.
> > -            for si in range(self.num_spins):
> > -                # Loop over the spectrometer frequencies.
> > -                for mi in range(self.num_frq):
> > -                    # Loop over the offsets.
> > -                    for oi in range(self.num_offsets[ei][si][mi]):
> > -                        # Extract number of dispersion points.
> > -                        num_disp_points =
> self.num_disp_points[ei][si][mi][oi]
> > -
> > -                         # The R20 index.
> > -                        r20_index = mi + si*self.num_frq
> > -
> > -                        # Store r20a and r20b values per disp point.
> > -                        self.R20A_a[ei][si][mi][oi] = np.array(
> [R20A[r20_index]] * self.max_num_disp_points, float64)
> > -                        self.R20B_a[ei][si][mi][oi]  = np.array(
> [R20B[r20_index]] * self.max_num_disp_points, float64)
> > -
> > -                        # Convert dw from ppm to rad/s.
> > -                        dw_frq = dw[si] * self.frqs[ei][si][mi]
> > -
> > -                        # Store dw_frq per disp point.
> > -                        self.dw_frq_a[ei][si][mi][oi] = np.array(
> [dw_frq] * self.max_num_disp_points, float64)
> > -
> > -                        # Store pA and kex per disp point.
> > -                        self.pA_a[ei][si][mi][oi] = np.array( [pA] *
> self.max_num_disp_points, float64)
> > -                        self.kex_a[ei][si][mi][oi] = np.array( [kex] *
> self.max_num_disp_points, float64)
> > +        # Loop over the spins.
> > +        for si in range(self.num_spins):
> > +            # Loop over the spectrometer frequencies.
> > +            for mi in range(self.num_frq):
> > +                # Extract number of dispersion points.
> > +                num_disp_points = self.num_disp_points[0][si][mi][0]
> > +
> > +                 # The R20 index.
> > +                r20_index = mi + si*self.num_frq
> > +
> > +                # Store r20a and r20b values per disp point.
> > +                self.R20A_a[0][si][mi][0] = np.array( [R20A[r20_index]]
> * self.max_num_disp_points, float64)
> > +                self.R20B_a[0][si][mi][0]  = np.array(
> [R20B[r20_index]] * self.max_num_disp_points, float64)
> > +
> > +                # Convert dw from ppm to rad/s.
> > +                dw_frq = dw[si] * self.frqs[0][si][mi]
> > +
> > +                # Store dw_frq per disp point.
> > +                self.dw_frq_a[0][si][mi][0] = np.array( [dw_frq] *
> self.max_num_disp_points, float64)
> > +
> > +                # Store pA and kex per disp point.
> > +                self.pA_a[0][si][mi][0] = np.array( [pA] *
> self.max_num_disp_points, float64)
> > +                self.kex_a[0][si][mi][0] = np.array( [kex] *
> self.max_num_disp_points, float64)
> >
> >          ## Back calculate the R2eff values.
> >          r2eff_CR72(r20a=self.R20A_a, r20b=self.R20B_a, pA=self.pA_a,
> dw=self.dw_frq_a, kex=self.kex_a, cpmg_frqs=self.cpmg_frqs_a,
> back_calc=self.back_calc_a, num_points=self.num_disp_points_a)
> > @@ -544,26 +540,22 @@
> >
> >          # Now return the values back to the structure of self.back_calc
> object.
> >          ## 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.
> > -        # Loop over the experiment types.
> > -        for ei in range(self.num_exp):
> > -            # Loop over the spins.
> > -            for si in range(self.num_spins):
> > -                # Loop over the spectrometer frequencies.
> > -                for mi in range(self.num_frq):
> > -                    # Loop over the offsets.
> > -                    for oi in range(self.num_offsets[ei][si][mi]):
> > -                        # Extract number of dispersion points.
> > -                        num_disp_points =
> self.num_disp_points[ei][si][mi][oi]
> > -
> > -                        self.back_calc[ei][si][mi][oi] =
> self.back_calc_a[ei][si][mi][oi][:num_disp_points]
> > -
> > -
> > -                        for di in
> range(self.num_disp_points[ei][si][mi][oi]):
> > -                            if self.missing[ei][si][mi][oi][di]:
> > -                                self.back_calc[ei][si][mi][oi][di] =
> self.values[ei][si][mi][oi][di]
> > -
> > -                        ## Calculate and return the chi-squared value.
> > -                        chi2_sum += chi2(self.values[ei][si][mi][oi],
> self.back_calc[ei][si][mi][oi], self.errors[ei][si][mi][oi])
> > +        # Loop over the spins.
> > +        for si in range(self.num_spins):
> > +            # Loop over the spectrometer frequencies.
> > +            for mi in range(self.num_frq):
> > +                # Extract number of dispersion points.
> > +                num_disp_points = self.num_disp_points[0][si][mi][0]
> > +
> > +                self.back_calc[0][si][mi][0] =
> self.back_calc_a[0][si][mi][0][:num_disp_points]
> > +
> > +
> > +                for di in range(self.num_disp_points[0][si][mi][0]):
> > +                    if self.missing[0][si][mi][0][di]:
> > +                        self.back_calc[0][si][mi][0][di] =
> self.values[0][si][mi][0][di]
> > +
> > +                ## Calculate and return the chi-squared value.
> > +                chi2_sum += chi2(self.values[0][si][mi][0],
> self.back_calc[0][si][mi][0], self.errors[0][si][mi][0])
> >
> >          # Return the total chi-squared value.
> >          return chi2_sum
> >
> >
> > _______________________________________________
> > 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