Exemplo n.º 1
0
def exercise_2():
    """
  Same as 1 but automatic NCS search procedure does not match short chains,
  in this case chains B,C, so they left out of NCS.
  Not clear if we should utilize MTRIX instead of searching for NCS
  because currently we don't output them and in consecutive runs NCS
  search would be utilized anyway, potentially yelding different groups.
  """
    inp = iotbx.pdb.input(source_info=None, lines=pdb_str_2)
    pdb_int_params = mmtbx.model.manager.get_default_pdb_interpretation_params(
    )
    pdb_int_params.pdb_interpretation.ncs_search.enabled = True
    model = mmtbx.model.manager(model_input=inp,
                                pdb_interpretation_params=pdb_int_params,
                                process_input=True,
                                log=null_out())
    # model.get_xray_structure()
    ss = model.get_ss_annotation()
    assert ss.get_n_helices() == 3
    assert ss.get_n_sheets() == 3

    assert not model.ncs_constraints_present()
    assert model.get_ncs_obj() is not None
    model.setup_ncs_constraints_groups()
    # print model.get_ncs_obj()
    assert model.ncs_constraints_present()
    assert model.get_master_hierarchy().atoms_size() == 15
    # print model.get_master_hierarchy().as_pdb_string()
    assert list(model.get_master_selection()).count(True) == 15
def test_2():
  inp = iotbx.pdb.input(source_info=None, lines=pdb_str_0)
  model = mmtbx.model.manager(model_input=inp)
  model.expand_with_BIOMT_records()
  model = shift_and_box_model(model)
  model.search_for_ncs()
  model.setup_ncs_constraints_groups(filter_groups=True)
  assert model.ncs_constraints_present()
  assert not model.can_be_unique_with_biomt()
  assert "" == model.model_as_mmcif(try_unique_with_biomt=True)
Exemplo n.º 3
0
def exercise_1():
  inp = iotbx.pdb.input(source_info=None, lines=pdb_str_1)
  model = mmtbx.model.manager(
      model_input = inp,
      log = null_out())
  assert model.get_number_of_atoms() == 21
  assert model.get_hierarchy().atoms_size() == 21
  assert model.get_xray_structure().scatterers().size() == 21
  ss = model.get_ss_annotation()
  # print ss.as_pdb_str()
  # STOP()
  assert ss.get_n_helices() == 3
  # because the second strand contains chain B which is not in ATOM records
  # whole sheet got discarded.
  assert ss.get_n_sheets() == 0
  rm = model.get_restraints_manager()
  assert rm.geometry.pair_proxies().bond_proxies.simple.size() == 6
  # since No NCS was set, these functions return the whole thing and no
  # master selection
  assert model.get_master_hierarchy().atoms_size() == 21
  assert model.get_master_selection().size() == 0
  # print model.model_as_pdb()
  # print "="*40

  # Here we set NCS constraints
  inp = iotbx.pdb.input(source_info=None, lines=pdb_str_1)
  pdb_int_params = mmtbx.model.manager.get_default_pdb_interpretation_params()
  pdb_int_params.pdb_interpretation.ncs_search.enabled=True
  model = mmtbx.model.manager(
      model_input = inp,
      pdb_interpretation_params = pdb_int_params,
      process_input=True,
      log = null_out())
  # model.get_xray_structure()
  assert not model.ncs_constraints_present()
  assert model.get_ncs_obj() is not None
  model.setup_ncs_constraints_groups()
  # print model.get_ncs_obj()
  assert model.ncs_constraints_present()
  assert model.get_master_hierarchy().atoms_size() == 7
  # print model.get_master_hierarchy().as_pdb_string()
  # print list(model.get_master_selection())
  assert list(model.get_master_selection()).count(True) == 7
def test_1():
  inp = iotbx.pdb.input(source_info=None, lines=pdb_str_0)
  model = mmtbx.model.manager(model_input=inp)
  model.expand_with_BIOMT_records()
  model = shift_and_box_model(model)

  sel = model.selection("chain '0' or chain 'C' or chain 'F' or chain 'I' or chain 'L' or chain 'O' or chain 'R' or chain 'U' or chain 'X'")
  model = model.select(sel)

  model.search_for_ncs()
  model.setup_ncs_constraints_groups(filter_groups=True)
  n1 = model.get_number_of_atoms()
  assert n1 == 648, n1
  assert model.ncs_constraints_present()
  nrgl = model.get_ncs_groups()
  assert len(nrgl[0].master_iselection) == 72
  assert len(nrgl[0].copies) == 8
  # nrgl._show()
  # print (model.can_be_unique_with_biomt())
  cif_txt = model.model_as_mmcif(try_unique_with_biomt=True)
  # print (cif_txt)
  assert_lines_in_text(cif_txt, """
loop_
  _pdbx_struct_assembly_gen.assembly_id
  _pdbx_struct_assembly_gen.oper_expression
  _pdbx_struct_assembly_gen.asym_id_list
   1 (1-9) A""")
  assert_lines_in_text(cif_txt, """
loop_
  _pdbx_struct_assembly.id
  _pdbx_struct_assembly.details
  _pdbx_struct_assembly.method_details
  _pdbx_struct_assembly.oligomeric_details
  _pdbx_struct_assembly.oligomeric_count
   1 'Symmetry assembly' ? ? ? """)
  assert_lines_in_text(cif_txt, """
  _pdbx_struct_oper_list.vector[1]
  _pdbx_struct_oper_list.vector[2]
  _pdbx_struct_oper_list.vector[3]
   1 'point symmetry operation' ? ? 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0""")


  inp = iotbx.pdb.input(source_info=None, lines=cif_txt)
  m2 = mmtbx.model.manager(model_input=inp)
  n2_1 = m2.get_number_of_atoms()
  assert n2_1 == 72
  m2.expand_with_BIOMT_records()
  n2_2 = m2.get_number_of_atoms()
  # print (n1, n2)
  assert n1 == n2_2, "%d, %d" % (n1, n2)
Exemplo n.º 5
0
    def __init__(self,
                 model,
                 target_map,
                 refine_ncs_operators=False,
                 number_of_cycles=1,
                 cycles_to_converge=2,
                 log=None):

        # completely new way of doing this. using RSR macro-cycle
        # for test compatibility:
        print("Minimizing using reference map...", file=log)
        if model.ncs_constraints_present():
            print("  Minimizing... (NCS)", file=log)
        else:
            print("  Minimizing...", file=log)
        from phenix.refinement.macro_cycle_real_space import run as rsr_mc_run
        import scitbx.math
        from phenix.command_line.real_space_refine import extract_rigid_body_selections
        from phenix.command_line.real_space_refine import master_params as rsr_master_params
        from mmtbx.refinement.real_space.utils import target_map as rsr_target_map
        import mmtbx.idealized_aa_residues.rotamer_manager
        sin_cos_table = scitbx.math.sin_cos_table(n=10000)
        params = rsr_master_params().extract()
        params.pdb_interpretation = model._pdb_interpretation_params.pdb_interpretation
        params.refinement.run = "minimization_global+local_grid_search"
        params.refine_ncs_operators = False
        params.output.write_all_states = True
        rotamer_manager = mmtbx.idealized_aa_residues.rotamer_manager.load(
            rotamers="favored")

        rigid_body_selections = extract_rigid_body_selections(
            params=params,
            ncs_groups=model.get_ncs_groups(),
            pdb_hierarchy=model.get_hierarchy())
        rsr_tm = rsr_target_map(map_data=target_map,
                                xray_structure=model.get_xray_structure(),
                                d_min=3.8,
                                atom_radius=params.refinement.atom_radius)
        res = rsr_mc_run(params=params,
                         model=model,
                         target_map=rsr_tm,
                         log=log,
                         ncs_groups=model.get_ncs_groups(),
                         rotamer_manager=rotamer_manager,
                         sin_cos_table=sin_cos_table,
                         rigid_body_selections=rigid_body_selections)
        model.set_sites_cart_from_hierarchy(res.model.get_hierarchy())
        res.structure_monitor.states_collector.write(
            file_name="rsr_all_states.pdb")
        return
        # end ===================================================

        from mmtbx.refinement.geometry_minimization import add_rotamer_restraints
        from mmtbx.refinement.minimization_monitor import minimization_monitor
        self.model = model
        self.log = log
        print("Minimizing using reference map...", file=self.log)
        self.log.flush()

        # copy-paste from cctbx_project/mmtbx/refinement/geometry_minimization.py:
        # minimize_wrapper_for_ramachandran
        self.model.get_restraints_manager().geometry.pair_proxies(
            sites_cart=self.model.get_sites_cart())

        ncs_restraints_group_list = self.model.get_ncs_groups()
        if ncs_restraints_group_list is None:
            ncs_restraints_group_list = []
        ncs_groups = None
        if len(ncs_restraints_group_list) > 0:
            ncs_groups = ncs_restraints_group_list

        min_monitor = minimization_monitor(
            number_of_cycles=number_of_cycles,
            max_number_of_cycles=20,
            cycles_to_converge=cycles_to_converge,
            mode="no_outliers")
        selection_real_space = None
        import mmtbx.refinement.real_space.weight
        self.w = 1
        print("number_of_cycles", number_of_cycles, file=log)
        print("Stats before minimization:", file=log)
        ms = self.model.geometry_statistics()
        ms.show(log=log)

        while min_monitor.need_more_cycles():
            print("Cycle number",
                  min_monitor.get_current_cycle_n(),
                  file=self.log)
            self.model.get_restraints_manager().geometry.\
                update_ramachandran_restraints_phi_psi_targets(
                    hierarchy=self.model.get_hierarchy())
            print("  Updating rotamer restraints...", file=self.log)
            add_rotamer_restraints(
                pdb_hierarchy=self.model.get_hierarchy(),
                restraints_manager=self.model.get_restraints_manager(),
                selection=None,
                sigma=5,
                mode="fix_outliers",
                accept_allowed=False,
                mon_lib_srv=self.model.get_mon_lib_srv(),
                rotamer_manager=self.model.get_rotamer_manager())
            self.model.set_sites_cart_from_hierarchy()

            if min_monitor.need_weight_optimization():
                # if self.w is None:
                print("  Determining weight...", file=self.log)
                self.log.flush()
                self.weight = mmtbx.refinement.real_space.weight.run(
                    map_data=target_map,
                    xray_structure=self.model.get_xray_structure(),
                    pdb_hierarchy=self.model.get_hierarchy(),
                    geometry_restraints_manager=self.model.
                    get_restraints_manager(),
                    rms_bonds_limit=0.015,
                    rms_angles_limit=1.0,
                    ncs_groups=ncs_groups)

                # division is to put more weight onto restraints. Checked. Works.
                self.w = self.weight.weight / 3.0
                # self.w = self.weight.weight/15.0
                # self.w = 0
                # self.w = self.weight.weight
                for s in self.weight.msg_strings:
                    print(s, file=self.log)

            if ncs_restraints_group_list is None or len(
                    ncs_restraints_group_list) == 0:
                #No NCS
                print("  Minimizing...", file=self.log)
                print("     with weight %f" % self.w, file=self.log)
                self.log.flush()
                refine_object = simple(
                    target_map=target_map,
                    selection=None,
                    max_iterations=150,
                    geometry_restraints_manager=self.model.
                    get_restraints_manager().geometry,
                    selection_real_space=selection_real_space,
                    states_accumulator=None,
                    ncs_groups=ncs_groups)
                refine_object.refine(
                    weight=self.w,
                    xray_structure=self.model.get_xray_structure())
                self.rmsd_bonds_final, self.rmsd_angles_final = refine_object.rmsds(
                )
                print("RMSDS:",
                      self.rmsd_bonds_final,
                      self.rmsd_angles_final,
                      file=log)
                # print >> log, "sizes:", len(refine_object.sites_cart()), len(self.xrs.scatterers())
                self.model.set_sites_cart(refine_object.sites_cart(),
                                          update_grm=True)
                # print >> log, "sizes", self.xrs.scatterers()
            else:
                # Yes NCS
                # copy-paste from macro_cycle_real_space.py
                # !!! Don't rearrange NCS groups here because master was just fixed!
                # import mmtbx.ncs.ncs_utils as nu
                # nu.get_list_of_best_ncs_copy_map_correlation(
                #     ncs_groups     = ncs_restraints_group_list,
                #     xray_structure = self.model.get_xray_structure(),
                #     map_data       = target_map,
                #     d_min          = 3)
                print("  Minimizing... (NCS)", file=self.log)
                tfg_obj = mmtbx.refinement.minimization_ncs_constraints.\
                  target_function_and_grads_real_space(
                    map_data                   = target_map,
                    xray_structure             = self.model.get_xray_structure(),
                    ncs_restraints_group_list  = ncs_restraints_group_list,
                    refine_selection           = None,
                    real_space_gradients_delta = 1,
                    restraints_manager         = self.model.get_restraints_manager(),
                    data_weight                = self.w,
                    refine_sites               = True)
                minimized = mmtbx.refinement.minimization_ncs_constraints.lbfgs(
                    target_and_grads_object=tfg_obj,
                    xray_structure=self.model.get_xray_structure(),
                    ncs_restraints_group_list=ncs_restraints_group_list,
                    refine_selection=None,
                    finite_grad_differences_test=False,
                    max_iterations=100,
                    refine_sites=True)
                self.model.set_sites_cart(tfg_obj.xray_structure.sites_cart())
            ncs_restraints_group_list.recalculate_ncs_transforms(
                self.model.get_sites_cart())
            ms = self.model.geometry_statistics()
            min_monitor.save_cycle_results(geometry=ms)
            ms.show(log=log)