def update(self, x): if (self.refine_k): self.kbu.update(k_sols=x) if (self.refine_b): self.kbu.update(b_sols=x) if (self.refine_kb): self.kbu.update(k_sols=x[:len(x) // 2], b_sols=x[len(x) // 2:]) if (self.refine_u): #u_star = x u_star = self.adp_constraints.all_params(list(x)) self.kbu.update(u_star=list(u_star)) if (self.use_scale): sc = bulk_solvent.scale(self.f_obs.data(), self.kbu.data.f_model) else: sc = 1.0 self.t_g_c = bulk_solvent.ls_kbp_sol_u_star(f_model=self.kbu.data, f_obs=self.f_obs.data(), scale=sc, kb_sol_grad=self.refine_k or self.refine_b or self.refine_kb, p_sol_grad=False, u_star_grad=self.refine_u, kb_sol_curv=self.refine_k or self.refine_b or self.refine_kb, p_sol_curv=False)
def get_k_total(self, selection=None): if (selection is None): selection = flex.bool(self.core.k_isotropic.size(), True) scale = self.core.k_anisotropic.select(selection) * \ self.core.k_isotropic.select(selection) * \ self.core.k_isotropic_exp.select(selection) scale_k1 = bulk_solvent.scale(self.f_obs.data(), self.core.f_model.data(), selection) return scale * scale_k1
def estimate_scale_k1(self, cutoff=4, width=1, min_reflections=500): cutoff = min(cutoff, self.f_obs.d_min() + width) sel_high = self.d_spacings.data() < cutoff sel_high = sel_high & self.selection_work.data() scale_k1 = 1 if (sel_high.count(True) > min_reflections): core = self.core.select(selection=sel_high) f_obs = self.f_obs.select(sel_high) fm = core.k_isotropic_exp * core.k_anisotropic * ( core.f_calc.data() + core.k_mask() * core.f_mask().data()) scale_k1 = bulk_solvent.scale(f_obs.data(), fm) return scale_k1
def estimate_scale_k1(self, cutoff=4, width=1, min_reflections=500): cutoff = min(cutoff, self.f_obs.d_min()+width) sel_high = self.d_spacings.data()<cutoff sel_high = sel_high & self.selection_work.data() scale_k1 = 1 if(sel_high.count(True)>min_reflections): core = self.core.select(selection = sel_high) f_obs = self.f_obs.select(sel_high) fm = core.k_isotropic_exp * core.k_anisotropic * (core.f_calc.data() + core.k_mask() * core.f_mask().data()) scale_k1 = bulk_solvent.scale(f_obs.data(), fm) return scale_k1
def _k_isotropic_as_scale_k1(self, r_start, k_mask=None): k_isotropic = flex.double(self.ss.size(), -1) if (k_mask is None): k_mask = self.core.k_mask() core_data = mmtbx.arrays.init( f_calc=self.core.f_calc, f_masks=self.core.f_mask(), k_isotropic_exp=self.core.k_isotropic_exp, k_anisotropic=self.core.k_anisotropic, k_masks=k_mask).data for i_cas, cas in enumerate(self.cores_and_selections): selection, core, selection_use, sel_work = cas scale_k1 = bulk_solvent.scale(self.f_obs.data(), core_data.f_model, sel_work) k_isotropic = k_isotropic.set_selected(selection, scale_k1) assert k_isotropic.count(-1.) == 0 return k_isotropic
def _k_isotropic_as_scale_k1(self, r_start, k_mask=None): k_isotropic = flex.double(self.ss.size(), -1) if(k_mask is None): k_mask = self.core.k_mask() core_data = mmtbx.arrays.init( f_calc = self.core.f_calc, f_masks = self.core.f_mask(), k_isotropic_exp = self.core.k_isotropic_exp, k_anisotropic = self.core.k_anisotropic, k_masks = k_mask).data for i_cas, cas in enumerate(self.cores_and_selections): selection, core, selection_use, sel_work = cas scale_k1 = bulk_solvent.scale(self.f_obs.data(), core_data.f_model, sel_work) k_isotropic = k_isotropic.set_selected(selection, scale_k1) assert k_isotropic.count(-1.) == 0 # r = self.try_scale(k_isotropic = k_isotropic, k_mask=k_mask) if(r<=r_start): self.core = self.core.update(k_isotropic = k_isotropic, k_masks=k_mask) r_start = r return k_isotropic
def update(self, x): if(self.refine_k): self.kbu.update(k_sols=x) if(self.refine_b): self.kbu.update(b_sols=x) if(self.refine_kb): self.kbu.update( k_sols=x[:len(x)//2], b_sols=x[len(x)//2:]) if(self.refine_u): #u_star = x u_star = self.adp_constraints.all_params(list(x)) self.kbu.update(u_star = list(u_star)) if(self.use_scale): sc = bulk_solvent.scale(self.f_obs.data(), self.kbu.data.f_model) else: sc = 1.0 self.t_g_c = bulk_solvent.ls_kb_sol_u_star( f_model = self.kbu.data, f_obs = self.f_obs.data(), scale = sc, kb_sol_grad = self.refine_k or self.refine_b or self.refine_kb, u_star_grad = self.refine_u, kb_sol_curv = self.refine_k or self.refine_b or self.refine_kb)
def apply_overall_scale(self): scale_k1 = bulk_solvent.scale(self.f_obs.data(), self.core.f_model.data(), self.selection_work.data()) self.core = self.core.update(k_isotropic=self.core.k_isotropic * scale_k1)
def apply_overall_scale(self): scale_k1 = bulk_solvent.scale(self.f_obs.data(), self.core.f_model.data(), self.selection_work.data()) self.core = self.core.update(k_isotropic = self.core.k_isotropic*scale_k1)