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

