Example #1
0
 def populate_bin_to_individual_k_mask_linear_interpolation(self, k_mask_bin):
   assert len(k_mask_bin) == len(self.cores_and_selections)
   def linear_interpolation(x1,x2,y1,y2):
     k=0
     if(x1!=x2): k=(y2-y1)/(x2-x1)
     b = y1-k*x1
     return k,b
   result1 = flex.double(self.f_obs.size(), -1)
   result2 = flex.double(self.f_obs.size(), -1)
   result  = flex.double(self.f_obs.size(), -1)
   for i, cas in enumerate(self.cores_and_selections):
     selection, zzz, zzz, zzz = cas
     x1,x2 = self.ss_bin_values[i][0], self.ss_bin_values[i][1]
     y1 = k_mask_bin[i]
     if(i==len(k_mask_bin)-1):
       y2 = k_mask_bin[i-1]
     else:
       y2 = k_mask_bin[i+1]
     k,b = linear_interpolation(x1=x1,x2=x2,y1=y1,y2=y2)
     bulk_solvent.set_to_linear_interpolated(self.ss,k,b,selection,result1)
     result2.set_selected(selection, y1)
     r1 = self.try_scale(k_mask = result1, selection=selection) # XXX inefficient
     r2 = self.try_scale(k_mask = result2, selection=selection) # XXX inefficient
     if(r1<r2):
       bulk_solvent.set_to_linear_interpolated(self.ss,k,b,selection,result)
     else:
       result.set_selected(selection, y1)
   #print list(result)
   assert (result < 0).count(True) == 0
   return result
Example #2
0
    def populate_bin_to_individual_k_mask_linear_interpolation(
            self, k_mask_bin):
        assert len(k_mask_bin) == len(self.cores_and_selections)

        def linear_interpolation(x1, x2, y1, y2):
            k = 0
            if (x1 != x2): k = (y2 - y1) / (x2 - x1)
            b = y1 - k * x1
            return k, b

        result1 = flex.double(self.f_obs.size(), -1)
        result2 = flex.double(self.f_obs.size(), -1)
        result = flex.double(self.f_obs.size(), -1)
        for i, cas in enumerate(self.cores_and_selections):
            selection, zzz, zzz, zzz = cas
            x1, x2 = self.ss_bin_values[i][0], self.ss_bin_values[i][1]
            y1 = k_mask_bin[i]
            if (i == len(k_mask_bin) - 1):
                y2 = k_mask_bin[i - 1]
            else:
                y2 = k_mask_bin[i + 1]
            k, b = linear_interpolation(x1=x1, x2=x2, y1=y1, y2=y2)
            bulk_solvent.set_to_linear_interpolated(self.ss, k, b, selection,
                                                    result1)
            result2.set_selected(selection, y1)
            r1 = self.try_scale(k_mask=result1,
                                selection=selection)  # XXX inefficient
            r2 = self.try_scale(k_mask=result2,
                                selection=selection)  # XXX inefficient
            if (r1 < r2):
                bulk_solvent.set_to_linear_interpolated(
                    self.ss, k, b, selection, result)
            else:
                result.set_selected(selection, y1)
        #print list(result)
        assert (result < 0).count(True) == 0
        return result