Example #1
0
 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)
Example #2
0
 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
Example #3
0
 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
Example #4
0
 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
Example #5
0
 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
Example #6
0
 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)
Example #8
0
 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)
Example #9
0
 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)