Ok, forget about my last message at
http://article.gmane.org/gmane.science.nmr.relax.devel/6102 :)

Edward

On 7 June 2014 23:18,  <[email protected]> wrote:
> Author: tlinnet
> Date: Sat Jun  7 23:18:18 2014
> New Revision: 23727
>
> URL: http://svn.gna.org/viewcvs/relax?rev=23727&view=rev
> Log:
> Moved the creation of special numpy structures outside target function.
>
> 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=23727&r1=23726&r2=23727&view=diff
> ==============================================================================
> --- branches/disp_spin_speed/target_functions/relax_disp.py     (original)
> +++ branches/disp_spin_speed/target_functions/relax_disp.py     Sat Jun  7 
> 23:18:18 2014
> @@ -394,6 +394,43 @@
>          if model == MODEL_NS_MMQ_3SITE_LINEAR:
>              self.func = self.func_ns_mmq_3site_linear
>
> +        # Setup special numpy array structures, for higher dimensional 
> computation.
> +        if model == MODEL_CR72_FULL:
> +            # Get the shape of back_calc structure.
> +            back_calc_shape = list( np.asarray(self.back_calc).shape )
> +
> +            # Find which frequency has the maximum number of disp points.
> +            # To let the numpy array operate well together, the broadcast 
> size has to be equal for all shapes.
> +            self.max_num_disp_points = np.max(self.num_disp_points)
> +
> +            # Create numpy arrays to pass to the lib function.
> +            # All numpy arrays have to have same shape to allow to multiply 
> together.
> +            # The dimensions should be [ei][si][mi][oi][di]. 
> [Experiment][spins][spec. frq][offset][disp points].
> +            # The number of disp point can change per spectrometer, so we 
> make the maximum size.
> +            self.R20A_a = np.ones(back_calc_shape + 
> [self.max_num_disp_points])
> +            self.R20B_a = np.ones(back_calc_shape + 
> [self.max_num_disp_points])
> +            self.pA_a = np.ones(back_calc_shape + [self.max_num_disp_points])
> +            self.dw_frq_a = np.ones(back_calc_shape + 
> [self.max_num_disp_points])
> +            self.kex_a = np.ones(back_calc_shape + 
> [self.max_num_disp_points])
> +            self.cpmg_frqs_a = np.ones(back_calc_shape + 
> [self.max_num_disp_points])
> +            self.num_disp_points_a = np.ones(back_calc_shape + 
> [self.max_num_disp_points])
> +            self.back_calc_a = np.ones(back_calc_shape + 
> [self.max_num_disp_points])
> +
> +            # 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]
> +
> +                            # 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]
> +
>
>      def calc_B14_chi2(self, R20A=None, R20B=None, dw=None, pA=None, 
> kex=None):
>          """Calculate the chi-squared value of the Baldwin (2014) 2-site 
> exact solution model for all time scales.
> @@ -471,26 +508,6 @@
>          @rtype:         float
>          """
>
> -        # Get the shape of back_calc structure.
> -        back_calc_shape = list( np.asarray(self.back_calc).shape )
> -
> -        # Find which frequency has the maximum number of disp points.
> -        # To let the numpy array operate well together, the broadcast size 
> has to be equal for all shapes.
> -        max_num_disp_points = np.max(self.num_disp_points)
> -
> -        # Create numpy arrays to pass to the lib function.
> -        # All numpy arrays have to have same shape to allow to multiply 
> together.
> -        # The dimensions should be [ei][si][mi][oi][di]. 
> [Experiment][spins][spec. frq][offset][disp points].
> -        # The number of disp point can change per spectrometer, so we make 
> the maximum size.
> -        R20A_a = np.ones(back_calc_shape + [max_num_disp_points])
> -        R20B_a = np.ones(back_calc_shape + [max_num_disp_points])
> -        pA_a = np.ones(back_calc_shape + [max_num_disp_points])
> -        dw_frq_a = np.ones(back_calc_shape + [max_num_disp_points])
> -        kex_a = np.ones(back_calc_shape + [max_num_disp_points])
> -        cpmg_frqs_a = np.ones(back_calc_shape + [max_num_disp_points])
> -        num_disp_points_a = np.ones(back_calc_shape + [max_num_disp_points])
> -        back_calc_a = np.ones(back_calc_shape + [max_num_disp_points])
> -
>          # Loop over the experiment types.
>          for ei in range(self.num_exp):
>              # Loop over the spins.
> @@ -506,25 +523,21 @@
>                          r20_index = mi + si*self.num_frq
>
>                          # Store r20a and r20b values per disp point.
> -                        R20A_a[ei][si][mi][oi] = np.array( [R20A[r20_index]] 
> * max_num_disp_points, float64)
> -                        R20B_a[ei][si][mi][oi]  = np.array( 
> [R20B[r20_index]] * max_num_disp_points, float64)
> +                        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.
> -                        dw_frq_a[ei][si][mi][oi] = np.array( [dw_frq] * 
> max_num_disp_points, float64)
> +                        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.
> -                        pA_a[ei][si][mi][oi] = np.array( [pA] * 
> max_num_disp_points, float64)
> -                        kex_a[ei][si][mi][oi] = np.array( [kex] * 
> max_num_disp_points, float64)
> -
> -                        # Extract cpmg_frqs and num_disp_points from lists.
> -                        cpmg_frqs_a[ei][si][mi][oi][:num_disp_points] = 
> self.cpmg_frqs[ei][mi][oi]
> -                        num_disp_points_a[ei][si][mi][oi][:num_disp_points] 
> = self.num_disp_points[ei][si][mi][oi]
> +                        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)
>
>          ## Back calculate the R2eff values.
> -        r2eff_CR72(r20a=R20A_a, r20b=R20B_a, pA=pA_a, dw=dw_frq_a, 
> kex=kex_a, cpmg_frqs=cpmg_frqs_a, back_calc = back_calc_a, 
> num_points=num_disp_points_a)
> +        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)
>
>          # Initialise.
>          chi2_sum = 0.0
> @@ -542,7 +555,7 @@
>                          # Extract number of dispersion points.
>                          num_disp_points = 
> self.num_disp_points[ei][si][mi][oi]
>
> -                        self.back_calc[ei][si][mi][oi] = 
> back_calc_a[ei][si][mi][oi][:num_disp_points]
> +                        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]):
>
>
> _______________________________________________
> 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

Reply via email to