Author: tlinnet Date: Mon Jun 16 19:01:32 2014 New Revision: 23987 URL: http://svn.gna.org/viewcvs/relax?rev=23987&view=rev Log: Replaced the temporary structure self.cpmg_frqs_a to self.cpmg_frqs, which works for all target functions Task #7807 (https://gna.org/task/index.php?7807): Speed-up of dispersion models for Clustered analysis. 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=23987&r1=23986&r2=23987&view=diff ============================================================================== --- branches/disp_spin_speed/target_functions/relax_disp.py (original) +++ branches/disp_spin_speed/target_functions/relax_disp.py Mon Jun 16 19:01:32 2014 @@ -177,8 +177,12 @@ self.NO = self.numpy_array_shape[3] self.ND = self.numpy_array_shape[4] + # Create zero and one numpy structure. + numpy_array_zeros = zeros(self.numpy_array_shape, float64) + numpy_array_ones = ones(self.numpy_array_shape, float64) + # Create special numpy structures. - self.no_nd_struct = ones([self.NO, self.ND], float64) + self.no_nd_ones = ones([self.NO, self.ND], float64) # Store the arguments. self.model = model @@ -189,9 +193,9 @@ self.values = values self.errors = errors self.missing = missing - self.frqs = multiply.outer( asarray(frqs).reshape(self.NE, self.NS, self.NM), self.no_nd_struct ) + self.frqs = multiply.outer( asarray(frqs).reshape(self.NE, self.NS, self.NM), self.no_nd_ones ) self.frqs_H = frqs_H - self.cpmg_frqs = cpmg_frqs + self.cpmg_frqs = deepcopy(numpy_array_ones) self.spin_lock_nu1 = spin_lock_nu1 self.chemical_shifts = chemical_shifts self.offset = offset @@ -229,7 +233,9 @@ for oi in range(self.num_offsets[ei][si][mi]): self.num_disp_points[ei][si][mi].append([]) if cpmg_frqs != None and len(cpmg_frqs[ei][mi][oi]): - self.num_disp_points[ei][si][mi][oi] = len(self.cpmg_frqs[ei][mi][oi]) + num_disp_points = len(cpmg_frqs[ei][mi][oi]) + self.num_disp_points[ei][si][mi][oi] = num_disp_points + self.cpmg_frqs[ei][si][mi][oi][:num_disp_points] = cpmg_frqs[ei][mi][oi] elif spin_lock_nu1 != None and len(spin_lock_nu1[ei][mi][oi]): self.num_disp_points[ei][si][mi][oi] = len(self.spin_lock_nu1[ei][mi][oi]) else: @@ -306,7 +312,7 @@ # Normal value. else: - self.power[ei][mi][di] = int(round(self.cpmg_frqs[ei][mi][0][di] * self.relax_times[ei][mi])) + self.power[ei][mi][di] = int(round(self.cpmg_frqs[ei][0][mi][0][di] * self.relax_times[ei][mi])) # The tau_cpmg times. self.tau_cpmg = [] @@ -319,7 +325,7 @@ if recalc_tau: self.tau_cpmg[ei][mi][di] = 0.25 * self.relax_times[ei][mi] / self.power[ei][mi][di] else: - self.tau_cpmg[ei][mi][di] = 0.25 / self.cpmg_frqs[ei][mi][0][di] + self.tau_cpmg[ei][mi][di] = 0.25 / self.cpmg_frqs[ei][0][mi][0][di] # Convert the spin-lock data to rad.s^-1. if spin_lock_nu1 != None: @@ -464,7 +470,6 @@ # Setup special numpy array structures, for higher dimensional computation. if model in test_models + [MODEL_NOREX]: if model in MODEL_LIST_CPMG_FULL: - self.cpmg_frqs_a = deepcopy(ones_a) self.phi_ex_struct = deepcopy(zeros_a) if model in [MODEL_B14, MODEL_B14_FULL, MODEL_MMQ_CR72, MODEL_NS_CPMG_2SITE_3D, MODEL_NS_CPMG_2SITE_3D_FULL, MODEL_NS_CPMG_2SITE_EXPANDED, MODEL_NS_CPMG_2SITE_STAR, MODEL_NS_CPMG_2SITE_STAR_FULL, MODEL_NS_MMQ_2SITE, MODEL_NS_MMQ_3SITE, MODEL_NS_MMQ_3SITE_LINEAR, MODEL_TSMFK01, MODEL_NS_R1RHO_2SITE, MODEL_NS_R1RHO_3SITE, MODEL_NS_R1RHO_3SITE_LINEAR]: @@ -496,7 +501,6 @@ if model in MODEL_LIST_CPMG_FULL and model != MODEL_NOREX: # Extract cpmg_frqs and num_disp_points from lists. - self.cpmg_frqs_a[ei][si][mi][oi][:num_disp_points] = self.cpmg_frqs[ei][mi][oi] self.num_disp_points_a[ei][si][mi][oi][:num_disp_points] = self.num_disp_points[ei][si][mi][oi] # Make a spin 1/0 file. @@ -607,7 +611,7 @@ self.r20b_struct[:] = multiply.outer( R20B.reshape(self.NE, self.NS, self.NM), self.no_nd_struct ) ## Back calculate the R2eff values. - r2eff_CR72(r20a=self.r20a_struct, r20a_orig=R20A, r20b=self.r20b_struct, r20b_orig=R20B, pA=pA, dw=self.dw_struct, dw_orig=dw, kex=kex, cpmg_frqs=self.cpmg_frqs_a, back_calc=self.back_calc_a) + r2eff_CR72(r20a=self.r20a_struct, r20a_orig=R20A, r20b=self.r20b_struct, r20b_orig=R20B, pA=pA, dw=self.dw_struct, dw_orig=dw, kex=kex, cpmg_frqs=self.cpmg_frqs, back_calc=self.back_calc_a) # Clean the data for all values, which is left over at the end of arrays. self.back_calc_a = self.back_calc_a*self.disp_struct @@ -1085,7 +1089,7 @@ self.r20_struct[:] = multiply.outer( R20.reshape(self.NE, self.NS, self.NM), self.no_nd_struct ) # Back calculate the R2eff values. - r2eff_IT99(r20=self.r20_struct, pA=pA, dw=self.dw_struct, dw_orig=dw, tex=tex, cpmg_frqs=self.cpmg_frqs_a, back_calc=self.back_calc_a) + r2eff_IT99(r20=self.r20_struct, pA=pA, dw=self.dw_struct, dw_orig=dw, tex=tex, cpmg_frqs=self.cpmg_frqs, back_calc=self.back_calc_a) # Clean the data for all values, which is left over at the end of arrays. self.back_calc_a = self.back_calc_a*self.disp_struct @@ -1180,7 +1184,7 @@ self.r20_struct[:] = multiply.outer( R20.reshape(self.NE, self.NS, self.NM), self.no_nd_struct ) # Back calculate the R2eff values. - r2eff_LM63(r20=self.r20_struct, phi_ex=self.phi_ex_struct, kex=kex, cpmg_frqs=self.cpmg_frqs_a, back_calc=self.back_calc_a) + r2eff_LM63(r20=self.r20_struct, phi_ex=self.phi_ex_struct, kex=kex, cpmg_frqs=self.cpmg_frqs, back_calc=self.back_calc_a) # Clean the data for all values, which is left over at the end of arrays. self.back_calc_a = self.back_calc_a*self.disp_struct