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
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