def test_update_x(self): """ Verify that transforms are getting updated """ # print sys._getframe().f_code.co_name x1 = nu.concatenate_rot_tran(self.tr_obj1) x2 = nu.shake_transformations(x=x1, shake_angles_sigma=0.035, shake_translation_sigma=0.5) # update with shaken parameters self.tr_obj1 = nu.update_rot_tran(x=x2, transforms_obj=self.tr_obj1) self.ncs_restraints_group_list = nu.update_rot_tran( x=x2, ncs_restraints_group_list=self.ncs_restraints_group_list) x3 = nu.concatenate_rot_tran( ncs_restraints_group_list=self.ncs_restraints_group_list) x4 = nu.concatenate_rot_tran(transforms_obj=self.tr_obj1) assert abs(sum(list(x3 - x4))) < 1.0e-3 the, psi, phi = x2[6:9] rot = scitbx.rigid_body.rb_mat_xyz(the=the, psi=psi, phi=phi, deg=False) a3 = rot.rot_mat() the, psi, phi = x4[6:9] rot = scitbx.rigid_body.rb_mat_xyz(the=the, psi=psi, phi=phi, deg=False) a4 = rot.rot_mat() assert abs(sum(list(a3 - a4))) < 1.0e-3 # test that update_rot_tran dose not unintentionally change x round_val = 3 r_elems = [] for rec in self.ncs_restraints_group_list: for c in rec.copies: r = c.r.round(round_val) r_elems.append(r.elems)
def test_update_x(self): """ Verify that transforms are getting updated """ # print sys._getframe().f_code.co_name x1 = nu.concatenate_rot_tran(self.tr_obj1) x2 = nu.shake_transformations( x = x1, shake_angles_sigma=0.035, shake_translation_sigma=0.5) # update with shaken parameters self.tr_obj1 = nu.update_rot_tran( x=x2, transforms_obj=self.tr_obj1) self.ncs_restraints_group_list = nu.update_rot_tran( x=x2, ncs_restraints_group_list=self.ncs_restraints_group_list) x3 = nu.concatenate_rot_tran( ncs_restraints_group_list=self.ncs_restraints_group_list) x4 = nu.concatenate_rot_tran( transforms_obj=self.tr_obj1) assert abs(sum(list(x3-x4))) < 1.0e-3 the,psi,phi =x2[6:9] rot = scitbx.rigid_body.rb_mat_xyz( the=the, psi=psi, phi=phi, deg=False) a3 = rot.rot_mat() the,psi,phi =x4[6:9] rot = scitbx.rigid_body.rb_mat_xyz( the=the, psi=psi, phi=phi, deg=False) a4 = rot.rot_mat() assert abs(sum(list(a3-a4))) < 1.0e-3 # test that update_rot_tran dose not unintentionally change x round_val = 3 r_elems = [] for rec in self.ncs_restraints_group_list: for c in rec.copies: r = c.r.round(round_val) r_elems.append(r.elems)
def run(prefix="tst", d_min=1.0): """ NCS constraints: xyz, adp, and operators. """ pdb_file_name_answer = "%s_answer.pdb" % prefix of = open(pdb_file_name_answer, "w") print >> of, pdb_str_answer of.close() # pdb_file_name_poor = "%s_poor.pdb" % prefix of = open(pdb_file_name_poor, "w") print >> of, pdb_str_poor of.close() # pdb_inp_answer = iotbx.pdb.input(file_name=pdb_file_name_answer) ph_answer = pdb_inp_answer.construct_hierarchy() ph_answer.atoms().reset_i_seq() xrs_answer = pdb_inp_answer.xray_structure_simple() # pdb_inp_poor = iotbx.pdb.input(file_name=pdb_file_name_poor) ph_poor = pdb_inp_poor.construct_hierarchy() ph_poor_obj = iotbx.pdb.input(source_info=None, lines=pdb_str_poor2) ph_poor.atoms().reset_i_seq() xrs_poor = pdb_inp_poor.xray_structure_simple() # ppf = mmtbx.utils.process_pdb_file_srv(log=False).process_pdb_files( raw_records=pdb_str_poor.splitlines())[0] mmtbx.utils.assert_xray_structures_equal( x1=ppf.xray_structure(show_summary=False), x2=xrs_poor) restraints_manager = mmtbx.restraints.manager( geometry=ppf.geometry_restraints_manager(show_energies=False), normalization=True) # fc = xrs_answer.structure_factors(d_min=d_min).f_calc() fft_map = fc.fft_map(resolution_factor=0.25) fft_map.apply_sigma_scaling() map_data = fft_map.real_map_unpadded() # ncs_obj_poor = mmtbx.ncs.asu_ncs_converter(pdb_hierarchy=ph_answer, add_identity=True) ncs_obj_poor.write_pdb_file(file_name="asu.pdb", crystal_symmetry=xrs_poor.crystal_symmetry(), mode="asu") # create transformation object transforms_obj = ncs.input(hierarchy=ph_answer) x = transforms_obj.get_ncs_restraints_group_list().concatenate_rot_tran() x = nu.shake_transformations(x=x, shake_angles_sigma=1 * math.pi / 180, shake_translation_sigma=0.1) nrgl = transforms_obj.get_ncs_restraints_group_list() nrgl.update_rot_tran(x=x) rm, tv = nrgl.get_rotation_translation_as_list() # just to see how result of shaking looks like rm_ = [rm[0]] + rm tv_ = [tv[0]] + tv ncs_obj_poor.back_rotation_matrices = rm_ ncs_obj_poor.back_translation_vectors = tv_ ncs_obj_poor.update_sites_cart(sites_cart_master_ncs_copy=ncs_obj_poor. ph_first_chain.atoms().extract_xyz()) ncs_obj_poor.write_pdb_file(file_name="asu2.pdb", crystal_symmetry=xrs_poor.crystal_symmetry(), mode="asu") ncs_restraints_group_list = transforms_obj.get_ncs_restraints_group_list() refine_selection = flex.size_t( xrange(transforms_obj.truncated_hierarchy.atoms_size())) for i in xrange(5): data_weight = 1 tfg_obj = mmtbx.refinement.minimization_ncs_constraints.\ target_function_and_grads_real_space( map_data = map_data, xray_structure = xrs_poor, ncs_restraints_group_list = ncs_restraints_group_list, refine_selection = refine_selection, real_space_gradients_delta = d_min/4, restraints_manager = restraints_manager, data_weight = data_weight, refine_sites = True) minimized = mmtbx.refinement.minimization_ncs_constraints.lbfgs( target_and_grads_object=tfg_obj, xray_structure=xrs_poor, ncs_restraints_group_list=ncs_restraints_group_list, refine_selection=refine_selection, finite_grad_differences_test=False, max_iterations=60, refine_sites=True) xrs_poor = tfg_obj.xray_structure ph_poor.adopt_xray_structure(tfg_obj.xray_structure) # ncs_obj_poor = mmtbx.ncs.asu_ncs_converter(pdb_hierarchy=ph_poor, add_identity=False) rm, tv = ncs_restraints_group_list.get_rotation_translation_as_list() # ph_poor.write_pdb_file(file_name="refined.pdb")
def run(prefix="tst", d_min=1.0): """ NCS constraints: xyz, adp, and operators. """ pdb_file_name_answer = "%s_answer.pdb" % prefix of = open(pdb_file_name_answer, "w") print(pdb_str_answer, file=of) of.close() # pdb_file_name_poor = "%s_poor.pdb" % prefix of = open(pdb_file_name_poor, "w") print(pdb_str_poor, file=of) of.close() # pdb_inp_answer = iotbx.pdb.input(file_name=pdb_file_name_answer) ph_answer = pdb_inp_answer.construct_hierarchy() ph_answer.atoms().reset_i_seq() xrs_answer = pdb_inp_answer.xray_structure_simple() # pdb_inp_poor = iotbx.pdb.input(file_name=pdb_file_name_poor) ph_poor = pdb_inp_poor.construct_hierarchy() ph_poor_obj = iotbx.pdb.input(source_info=None, lines=pdb_str_poor2) ph_poor.atoms().reset_i_seq() xrs_poor = pdb_inp_poor.xray_structure_simple() # ppf = mmtbx.utils.process_pdb_file_srv(log=False).process_pdb_files( raw_records=pdb_str_poor.splitlines())[0] mmtbx.utils.assert_xray_structures_equal( x1=ppf.xray_structure(show_summary=False), x2=xrs_poor) restraints_manager = mmtbx.restraints.manager( geometry=ppf.geometry_restraints_manager(show_energies=False), normalization=True) # fc = xrs_answer.structure_factors(d_min=d_min).f_calc() fft_map = fc.fft_map(resolution_factor=0.25) fft_map.apply_sigma_scaling() map_data = fft_map.real_map_unpadded() # transforms_obj = ncs.input(hierarchy=ph_answer) x = transforms_obj.get_ncs_restraints_group_list().concatenate_rot_tran() x = nu.shake_transformations(x=x, shake_angles_sigma=1 * math.pi / 180, shake_translation_sigma=0.1) nrgl = transforms_obj.get_ncs_restraints_group_list() nrgl.update_rot_tran(x=x) ncs_restraints_group_list = transforms_obj.get_ncs_restraints_group_list() refine_selection = flex.size_t( range(transforms_obj.truncated_hierarchy.atoms_size())) for i in range(5): data_weight = 1 tfg_obj = mmtbx.refinement.minimization_ncs_constraints.\ target_function_and_grads_real_space( map_data = map_data, xray_structure = xrs_poor, ncs_restraints_group_list = ncs_restraints_group_list, refine_selection = refine_selection, real_space_gradients_delta = d_min/4, restraints_manager = restraints_manager, data_weight = data_weight, refine_sites = True) minimized = mmtbx.refinement.minimization_ncs_constraints.lbfgs( target_and_grads_object=tfg_obj, xray_structure=xrs_poor, ncs_restraints_group_list=ncs_restraints_group_list, refine_selection=refine_selection, finite_grad_differences_test=False, max_iterations=60, refine_sites=True) xrs_poor = tfg_obj.xray_structure ph_poor.adopt_xray_structure(tfg_obj.xray_structure) ph_poor.write_pdb_file(file_name="refined.pdb")
def __init__(self, n_macro_cycle, sites, u_iso, transformations, finite_grad_differences_test, use_geometry_restraints, shake_site_mean_distance = 1.5, d_min = 2, shake_angles_sigma = 0.035, shake_translation_sigma = 0.5): """ create temp test files and data for tests """ adopt_init_args(self, locals()) self.test_files_names = [] # collect names of files for cleanup # 1 NCS copy: starting template to generate whole asu; place into P1 box pdb_inp = iotbx.pdb.input(source_info=None, lines=ncs_1_copy) pdb_obj = iotbx.pdb.hierarchy.input(pdb_string=ncs_1_copy) mtrix_object = pdb_inp.process_mtrix_records() ph = pdb_inp.construct_hierarchy() xrs = pdb_inp.xray_structure_simple() xrs_one_ncs = xrs.orthorhombic_unit_cell_around_centered_scatterers( buffer_size=8) ph.adopt_xray_structure(xrs_one_ncs) of = open("one_ncs_in_asu.pdb", "w") print >> of, mtrix_object.as_pdb_string() print >> of, ph.as_pdb_string(crystal_symmetry=xrs_one_ncs.crystal_symmetry()) of.close() # 1 NCS copy -> full asu (expand NCS). This is the answer-structure m = multimer(file_name="one_ncs_in_asu.pdb", round_coordinates=False, reconstruction_type='cau',error_handle=True,eps=1e-2) assert m.number_of_transforms == 2, m.number_of_transforms xrs_asu = m.assembled_multimer.extract_xray_structure( crystal_symmetry = xrs_one_ncs.crystal_symmetry()) m.write("full_asu.pdb") # force ASU none-rounded coordinates into xray structure xrs_asu.set_sites_cart(m.sites_cart()) assert xrs_asu.crystal_symmetry().is_similar_symmetry( xrs_one_ncs.crystal_symmetry()) # Generate Fobs from answer structure f_obs = abs(xrs_asu.structure_factors(d_min=d_min, algorithm="direct").f_calc()) r_free_flags = f_obs.generate_r_free_flags() mtz_dataset = f_obs.as_mtz_dataset(column_root_label="F-obs") mtz_dataset.add_miller_array( miller_array=r_free_flags, column_root_label="R-free-flags") mtz_object = mtz_dataset.mtz_object() mtz_object.write(file_name = "data.mtz") # Shake structure - subject to refinement input xrs_shaken = xrs_one_ncs.deep_copy_scatterers() if sites: xrs_shaken.shake_sites_in_place( mean_distance=shake_site_mean_distance) if self.u_iso: u_random = flex.random_double(xrs_shaken.scatterers().size()) xrs_shaken = xrs_shaken.set_u_iso(values=u_random) if self.transformations: transforms_obj = ncs.input( transform_info = mtrix_object, pdb_hierarchy_inp = pdb_obj) x = nu.concatenate_rot_tran(transforms_obj=transforms_obj) x = nu.shake_transformations( x = x, shake_angles_sigma=self.shake_angles_sigma, shake_translation_sigma=self.shake_translation_sigma) transforms_obj = nu.update_rot_tran(x=x,transforms_obj=transforms_obj) mtrix_object = transforms_obj.build_MTRIX_object() ph.adopt_xray_structure(xrs_shaken) of = open("one_ncs_in_asu_shaken.pdb", "w") print >> of, mtrix_object.as_pdb_string() print >> of, ph.as_pdb_string(crystal_symmetry=xrs.crystal_symmetry()) of.close() self.f_obs = f_obs self.r_free_flags = r_free_flags self.xrs_one_ncs = xrs_one_ncs # Get restraints manager self.grm = None pdb_str = m.assembled_multimer.as_pdb_string( crystal_symmetry=xrs_one_ncs.crystal_symmetry()) self.iso_restraints = None if(self.use_geometry_restraints): self.grm = nu.get_restraints_manager(pdb_string=pdb_str) if(self.u_iso): temp = mmtbx.refinement.adp_refinement.adp_restraints_master_params self.iso_restraints = temp.extract().iso
def run(prefix="tst", d_min=1.0): """ NCS constraints: xyz, adp, and operators. """ pdb_file_name_answer = "%s_answer.pdb"%prefix of=open(pdb_file_name_answer, "w") print >> of, pdb_str_answer of.close() # pdb_file_name_poor = "%s_poor.pdb"%prefix of=open(pdb_file_name_poor, "w") print >> of, pdb_str_poor of.close() # pdb_inp_answer = iotbx.pdb.input(file_name=pdb_file_name_answer) ph_answer = pdb_inp_answer.construct_hierarchy() ph_answer.atoms().reset_i_seq() xrs_answer = pdb_inp_answer.xray_structure_simple() # pdb_inp_poor = iotbx.pdb.input(file_name=pdb_file_name_poor) ph_poor = pdb_inp_poor.construct_hierarchy() ph_poor_obj = iotbx.pdb.hierarchy.input(pdb_string=pdb_str_poor2) ph_poor.atoms().reset_i_seq() xrs_poor = pdb_inp_poor.xray_structure_simple() # ppf = mmtbx.utils.process_pdb_file_srv(log=False).process_pdb_files( raw_records=pdb_str_poor.splitlines())[0] mmtbx.utils.assert_xray_structures_equal( x1=ppf.xray_structure(show_summary = False), x2=xrs_poor) restraints_manager = mmtbx.restraints.manager( geometry = ppf.geometry_restraints_manager(show_energies = False), normalization = True) # fc = xrs_answer.structure_factors(d_min=d_min).f_calc() fft_map = fc.fft_map(resolution_factor = 0.25) fft_map.apply_sigma_scaling() map_data = fft_map.real_map_unpadded() # ncs_obj_poor = mmtbx.ncs.asu_ncs_converter(pdb_hierarchy = ph_answer, add_identity=True) ncs_obj_poor.write_pdb_file(file_name="asu.pdb", crystal_symmetry=xrs_poor.crystal_symmetry(), mode="asu") rm = ncs_obj_poor.back_rotation_matrices tv = ncs_obj_poor.back_translation_vectors ir = [rm[0]] it = [tv[0]] # create transformation object transforms_obj = ncs.input( pdb_hierarchy_inp = ph_poor_obj, rotations=rm, translations=tv) x = nu.concatenate_rot_tran(transforms_obj=transforms_obj) x = nu.shake_transformations( x = x, shake_angles_sigma=1*math.pi/180, shake_translation_sigma=0.1) transforms_obj = nu.update_rot_tran(x=x, transforms_obj=transforms_obj) rm,tv = nu.get_rotation_translation_as_list(transforms_obj=transforms_obj) # just to see how result of shaking looks like rm_ = ir+rm tv_ = it+tv ncs_obj_poor.back_rotation_matrices=rm_ ncs_obj_poor.back_translation_vectors=tv_ ncs_obj_poor.update_sites_cart( sites_cart_master_ncs_copy=ncs_obj_poor.ph_first_chain.atoms().extract_xyz()) ncs_obj_poor.write_pdb_file(file_name="asu2.pdb", crystal_symmetry=xrs_poor.crystal_symmetry(), mode="asu") transforms_obj = nu.update_transforms(transforms_obj,rm,tv) ncs_restraints_group_list = transforms_obj.get_ncs_restraints_group_list() refine_selection = flex.size_t(xrange(transforms_obj.total_asu_length)) for i in xrange(5): data_weight = 1 for action in [[False, True], [True, False]]: refine_sites, refine_transformations = action tfg_obj = mmtbx.refinement.minimization_ncs_constraints.\ target_function_and_grads_real_space( map_data = map_data, xray_structure = xrs_poor, ncs_restraints_group_list = ncs_restraints_group_list, refine_selection = refine_selection, real_space_gradients_delta = d_min/4, restraints_manager = restraints_manager, data_weight = data_weight, refine_sites = refine_sites, refine_transformations = refine_transformations) minimized = mmtbx.refinement.minimization_ncs_constraints.lbfgs( target_and_grads_object = tfg_obj, xray_structure = xrs_poor, ncs_restraints_group_list = ncs_restraints_group_list, refine_selection = refine_selection, finite_grad_differences_test = False, max_iterations = 60, refine_sites = refine_sites, refine_transformations = refine_transformations) xrs_poor = tfg_obj.xray_structure ph_poor.adopt_xray_structure(tfg_obj.xray_structure) # ncs_obj_poor = mmtbx.ncs.asu_ncs_converter(pdb_hierarchy = ph_poor, add_identity=False) rm,tv = nu.get_rotation_translation_as_list( ncs_restraints_group_list= ncs_restraints_group_list) # ph_poor.write_pdb_file(file_name="refined.pdb")