예제 #1
0
 def calculate_gradients(Ih_table):
     """Return a gradient vector on length len(self.apm.x)."""
     gsq = flex.pow2(Ih_table.inverse_scale_factors) * Ih_table.weights
     sumgsq = gsq * Ih_table.h_index_matrix
     prefactor = (
         -2.0
         * Ih_table.weights
         * (
             Ih_table.intensities
             - (Ih_table.Ih_values * Ih_table.inverse_scale_factors)
         )
     )
     dIh = (
         Ih_table.intensities
         - (Ih_table.Ih_values * 2.0 * Ih_table.inverse_scale_factors)
     ) * Ih_table.weights
     dIh_by_dpi = calc_dIh_by_dpi(
         dIh, sumgsq, Ih_table.h_index_matrix, Ih_table.derivatives.transpose()
     )
     term_1 = (prefactor * Ih_table.Ih_values) * Ih_table.derivatives
     term_2 = (
         prefactor * Ih_table.inverse_scale_factors * Ih_table.h_index_matrix
     ) * dIh_by_dpi
     gradient = term_1 + term_2
     return gradient
예제 #2
0
 def calculate_gradients(Ih_table):
     """Return a gradient vector on length len(self.apm.x)."""
     gsq = np.square(Ih_table.inverse_scale_factors) * Ih_table.weights
     sumgsq = flumpy.from_numpy(Ih_table.sum_in_groups(gsq))
     prefactor = (-2.0 * Ih_table.weights *
                  (Ih_table.intensities -
                   (Ih_table.Ih_values * Ih_table.inverse_scale_factors)))
     dIh = flumpy.from_numpy(
         (Ih_table.intensities -
          (Ih_table.Ih_values * 2.0 * Ih_table.inverse_scale_factors)) *
         Ih_table.weights)
     dIh_by_dpi = calc_dIh_by_dpi(dIh, sumgsq, Ih_table.h_index_matrix,
                                  Ih_table.derivatives.transpose())
     term_1 = (flumpy.from_numpy(prefactor * Ih_table.Ih_values) *
               Ih_table.derivatives)
     term_2 = (flumpy.from_numpy(
         Ih_table.sum_in_groups(prefactor * Ih_table.inverse_scale_factors))
               * dIh_by_dpi)
     gradient = term_1 + term_2
     return gradient