def __init__(self, residue, mon_lib_srv, rotamer_manager, sin_cos_table, target_map=None, unit_cell=None, backbone_sample=True, accept_only_if_max_shift_is_smaller_than=None): adopt_init_args(self, locals()) # if(target_map is None): assert not backbone_sample assert unit_cell is None # Initial state rotamer_start = rotamer_manager.rotamer(residue=self.residue) sites_cart_start=self.residue.atoms().extract_xyz() if(target_map is not None): target_start = self.get_target_value(sites_cart=sites_cart_start) # Actual calculations self.chi_angles = self.rotamer_manager.get_chi_angles( resname=self.residue.resname) co = mmtbx.refinement.real_space.aa_residue_axes_and_clusters( residue = self.residue, mon_lib_srv = self.mon_lib_srv, backbone_sample = True) if(backbone_sample): self.fit_c_beta(c_beta_rotation_cluster = co.clusters[0]) self.fit_side_chain(clusters = co.clusters[1:]) # Final state if(target_map is not None): rotamer_final = rotamer_manager.rotamer(residue=self.residue) target_final = self.get_target_value( sites_cart=self.residue.atoms().extract_xyz()) # Sanity and consistency check #XXX not always hold due to approx fast math assert rotamer_final != "OUTLIER" # Potentially this will keep an OUTLIER if no better fit found if(target_start > target_final): self.residue.atoms().set_xyz(sites_cart_start)
def __init__(self, residue, mon_lib_srv, rotamer_manager, sin_cos_table, vdw_radii=None, xyzrad_bumpers=None, target_map=None, target_map_for_cb=None, unit_cell=None, backbone_sample=True, accept_only_if_max_shift_is_smaller_than=None): adopt_init_args(self, locals()) # if(target_map is None): assert not backbone_sample # Initial state rotamer_start = rotamer_manager.rotamer(residue=self.residue) sites_cart_start = self.residue.atoms().extract_xyz() self.co = mmtbx.refinement.real_space.aa_residue_axes_and_clusters( residue = self.residue, mon_lib_srv = self.mon_lib_srv, backbone_sample = True) if(target_map is not None): target_start = self.get_target_value(sites_cart = sites_cart_start) # Actual calculations self.chi_angles = self.rotamer_manager.get_chi_angles( resname = self.residue.resname) if(len(self.co.clusters)>0): if(backbone_sample): self.fit_c_beta(c_beta_rotation_cluster = self.co.clusters[0]) self.fit_side_chain(clusters = self.co.clusters[1:]) # Final state if(target_map is not None): target_final = self.get_target_value( sites_cart=self.residue.atoms().extract_xyz()) if(target_start > target_final): self.residue.atoms().set_xyz(sites_cart_start)