mailRe: r23729 - /branches/disp_spin_speed/target_functions/relax_disp.py


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

Header


Content

Posted by Troels Emtekær Linnet on June 10, 2014 - 11:54:
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 <edward@xxxxxxxxxxxxx>:

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,  <tlinnet@xxxxxxxxxxxxx> 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
relax-commits@xxxxxxx

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
relax-devel@xxxxxxx

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



Related Messages


Powered by MHonArc, Updated Tue Jun 10 12:00:13 2014