Esempio n. 1
0
def exercise():
  pdb_inp = iotbx.pdb.input(source_info=None, lines=pdb_str)
  ann = pdb_inp.extract_secondary_structure()
  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 = pdb_inp,
    pdb_interpretation_params=pdb_int_params,
    build_grm = True)
  model.setup_ncs_constraints_groups()
  log = StringIO()
  rm = ssb.substitute_ss(
      model,
      log=log)
  rm.run()
  # with open("res.pdb", 'w') as f:
    # f.write(model.model_as_pdb())

  # check that strict NCS was implemented throughout
  dif = get_difference_chainsAB(strings=model.model_as_pdb())
  for d in dif:
    assert approx_equal(d, (0,0,0), eps=0.005)
  log_cont = log.getvalue()
  # print("===========================")
  # print (log_cont)
  # print("===========================")
  assert log_cont.find("1 element(s) were skipped because they are in NCS copies") > 0
  print("OK")
Esempio n. 2
0
def exercise_some_atoms_are_absent():
  """ CD1, CD2 from 101 residue are absent"""
  tst_pdb_2 = """\
HELIX    2   2 GLY A  100  TRP A  101  1                                   2
ATOM    866  N   GLY A 100    -128.903-139.939-104.460  1.00 27.58           N
ATOM    867  CA  GLY A 100    -128.223-140.890-103.603  1.00 27.58           C
ATOM    868  C   GLY A 100    -128.381-142.356-103.959  1.00 27.58           C
ATOM    869  O   GLY A 100    -129.283-142.755-104.686  1.00 27.58           O
ATOM    871  N   TRP A 101    -127.491-143.163-103.397  1.00 25.83           N
ATOM    872  CA  TRP A 101    -127.455-144.601-103.619  1.00 25.83           C
ATOM    873  C   TRP A 101    -128.824-145.274-103.752  1.00 25.83           C
ATOM    874  O   TRP A 101    -129.091-145.962-104.734  1.00 25.83           O
ATOM    875  CB  TRP A 101    -126.659-145.240-102.480  1.00 42.04           C
ATOM    876  CG  TRP A 101    -126.207-146.635-102.729  1.00 42.04           C
ATOM    879  NE1 TRP A 101    -125.663-148.557-103.751  1.00 42.04           N
ATOM    880  CE2 TRP A 101    -125.347-148.723-102.429  1.00 42.04           C
ATOM    881  CE3 TRP A 101    -125.446-147.437-100.384  1.00 42.04           C
"""
  pdb_inp = iotbx.pdb.input(source_info=None, lines=tst_pdb_2)
  ann = pdb_inp.extract_secondary_structure()
  model = mmtbx.model.manager(
    model_input = pdb_inp,
    build_grm = True)
  model.set_ss_annotation(ann)
  rm = ssb.substitute_ss(
      model)
  rm.run()
Esempio n. 3
0
def exercise_presence_of_h():
  tst_pdb_1 = """\
HELIX    2   2 GLY A  100  TRP A  101  1                                   2
ATOM    866  N   GLY A 100    -128.903-139.939-104.460  1.00 27.58           N
ATOM    867  CA  GLY A 100    -128.223-140.890-103.603  1.00 27.58           C
ATOM    868  C   GLY A 100    -128.381-142.356-103.959  1.00 27.58           C
ATOM    869  O   GLY A 100    -129.283-142.755-104.686  1.00 27.58           O
ATOM    870  H   GLY A 100    -129.862-139.777-104.337  1.00 36.09           H
ATOM    871  N   TRP A 101    -127.491-143.163-103.397  1.00 25.83           N
ATOM    872  CA  TRP A 101    -127.455-144.601-103.619  1.00 25.83           C
ATOM    873  C   TRP A 101    -128.824-145.274-103.752  1.00 25.83           C
ATOM    874  O   TRP A 101    -129.091-145.962-104.734  1.00 25.83           O
ATOM    875  CB  TRP A 101    -126.659-145.240-102.480  1.00 42.04           C
ATOM    876  CG  TRP A 101    -126.207-146.635-102.729  1.00 42.04           C
ATOM    877  CD1 TRP A 101    -126.180-147.300-103.922  1.00 42.04           C
ATOM    878  CD2 TRP A 101    -125.677-147.528-101.760  1.00 42.04           C
ATOM    879  NE1 TRP A 101    -125.663-148.557-103.751  1.00 42.04           N
ATOM    880  CE2 TRP A 101    -125.347-148.723-102.429  1.00 42.04           C
ATOM    881  CE3 TRP A 101    -125.446-147.437-100.384  1.00 42.04           C
ATOM    882  CZ2 TRP A 101    -124.799-149.820-101.767  1.00 42.04           C
ATOM    883  CZ3 TRP A 101    -124.899-148.528 -99.725  1.00 42.04           C
ATOM    884  CH2 TRP A 101    -124.581-149.703-100.415  1.00 42.04           C
ATOM    885  H   TRP A 101    -126.863-142.797-102.745  1.00 42.04           H
"""
  pdb_inp = iotbx.pdb.input(source_info=None, lines=tst_pdb_1)
  ann = pdb_inp.extract_secondary_structure()
  model = mmtbx.model.manager(
    model_input = pdb_inp,
    build_grm = True)
  model.set_ss_annotation(ann)
  rm = ssb.substitute_ss(
      model,
      )
Esempio n. 4
0
def exercise_ca_absent():
  # should raise Sorry
  """ CA from 101 residue are absent. We don't handle it at the moment."""
  tst_pdb_1 = """\
HELIX    2   2 GLY A  100  TRP A  101  1                                   2
ATOM    866  N   GLY A 100    -128.903-139.939-104.460  1.00 27.58           N
ATOM    867  CA  GLY A 100    -128.223-140.890-103.603  1.00 27.58           C
ATOM    868  C   GLY A 100    -128.381-142.356-103.959  1.00 27.58           C
ATOM    869  O   GLY A 100    -129.283-142.755-104.686  1.00 27.58           O
ATOM    870  H   GLY A 100    -129.862-139.777-104.337  1.00 36.09           H
ATOM    871  N   TRP A 101    -127.491-143.163-103.397  1.00 25.83           N
ATOM    873  C   TRP A 101    -128.824-145.274-103.752  1.00 25.83           C
ATOM    874  O   TRP A 101    -129.091-145.962-104.734  1.00 25.83           O
ATOM    875  CB  TRP A 101    -126.659-145.240-102.480  1.00 42.04           C
ATOM    876  CG  TRP A 101    -126.207-146.635-102.729  1.00 42.04           C
ATOM    877  CD1 TRP A 101    -126.180-147.300-103.922  1.00 42.04           C
ATOM    878  CD2 TRP A 101    -125.677-147.528-101.760  1.00 42.04           C
ATOM    879  NE1 TRP A 101    -125.663-148.557-103.751  1.00 42.04           N
ATOM    880  CE2 TRP A 101    -125.347-148.723-102.429  1.00 42.04           C
ATOM    881  CE3 TRP A 101    -125.446-147.437-100.384  1.00 42.04           C
ATOM    882  CZ2 TRP A 101    -124.799-149.820-101.767  1.00 42.04           C
ATOM    883  CZ3 TRP A 101    -124.899-148.528 -99.725  1.00 42.04           C
ATOM    884  CH2 TRP A 101    -124.581-149.703-100.415  1.00 42.04           C
ATOM    885  H   TRP A 101    -126.863-142.797-102.745  1.00 42.04           H
"""
  pdb_inp = iotbx.pdb.input(source_info=None, lines=tst_pdb_1)
  ann = pdb_inp.extract_secondary_structure()
  model = mmtbx.model.manager(
    model_input = pdb_inp,
    build_grm = True)
  model.set_ss_annotation(ann)
  try:
    rm = ssb.substitute_ss(
        model)
    rm.run()
  except Sorry as e:
    assert e.args[0].startswith("C, CA or N")
  except Exception:
    assert 0, "Error: This test failed"
  else:
    assert 0, "Error: This test failed"
Esempio n. 5
0
  def run(self):
    # I'm guessing self.data_manager, self.params and self.logger
    # are already defined here...
    print('Using model: %s' % self.data_manager.get_default_model_name(), file=self.logger)

    # this must be mmtbx.model.manager?
    self.model = self.data_manager.get_model()

    # Done in place!
    self.params.ss_idealization.enabled=True
    sss = ss_idealization.substitute_ss(
        model = self.model,
        params = self.params.ss_idealization,
        log=self.logger)
    sss.run()
    inp_fn = os.path.basename(self.data_manager.get_default_model_name())[:-4]
    fn = "%s" % self.get_default_output_filename(
                prefix='%s_' % inp_fn,
                suffix='ss_idealized',
                serial=Auto)
    self.data_manager.write_model_file(self.model, filename=fn)
Esempio n. 6
0
def exercise_process_params():
    pdb_inp = iotbx.pdb.input(lines=model_1yjp, source_info='model_1yjp')
    model = mmtbx.model.manager(model_input=pdb_inp)
    ssb_obj = ssb.substitute_ss(model)
    ppars = ssb_obj._process_params(params=None)
    assert ppars.enabled
    assert not ppars.restrain_torsion_angles
    #
    params = ssb.master_phil.fetch().extract()
    ppars = ssb_obj._process_params(params=params)
    assert not ppars.enabled
    assert not ppars.restrain_torsion_angles
    params.ss_idealization.enabled = True
    ppars = ssb_obj._process_params(params=params)
    assert ppars.enabled
    ppars = ssb_obj._process_params(params=params.ss_idealization)
    assert ppars.enabled
    params.ss_idealization.sigma_on_reference_non_ss = -1
    try:
        ppars = ssb_obj._process_params(params=params.ss_idealization)
    except AssertionError as e:
        assert e.args[0] == 'Bad sigma_on_reference_non_ss parameter'
Esempio n. 7
0
    def run(self):
        t_0 = time()
        self.ann = self.model.get_ss_annotation()
        self._setup_model_h()
        self.model.set_restraint_objects(self.model_h.get_restraint_objects())

        self.model.process_input_model(make_restraints=True)
        # set SS restratins
        self.set_ss_restraints(self.ann)

        self.model.setup_ncs_constraints_groups()

        self.init_model_statistics = self.get_statistics(self.model)

        #
        # Cablam idealization
        #
        if self.params.debug:
            self.shift_and_write_result(model=self.model, fname_suffix="start")
            self.shift_and_write_result(model=self.model_h,
                                        fname_suffix="start_h")
        self.params.cablam_idealization.find_ss_after_fixes = False
        ci_results = cablam_idealization(
            model=self.model,
            params=self.params.cablam_idealization,
            log=self.log).get_results()
        self.model = ci_results.model
        self.after_cablam_statistics = self.get_statistics(self.model)
        if self.params.debug:
            self.shift_and_write_result(model=self.model,
                                        fname_suffix="cablam_id")

        # Here we are preparing maps if needed.
        if self.user_supplied_map is not None:
            self.prepare_user_map()

        if self.reference_map is None and self.params.use_map_for_reference:
            self.prepare_reference_map_3()

        if self.params.run_minimization_first:
            # running simple minimization and updating all
            # self.master, self.working, etc...
            # self.whole_pdb_h.reset_atom_i_seqs()
            if self.init_ref_map is None:
                self.prepare_init_reference_map()
            print("Minimization first", file=self.log)
            self.minimize(
                model=self.model,
                original_pdb_h=self.original_hierarchy,
                excl_string_selection=None,  # don't need if we have map
                reference_map=self.init_ref_map,
            )
            self.init_gm_model_statistics = self.get_statistics(self.model)
            if self.params.debug:
                self.shift_and_write_result(model=self.model,
                                            fname_suffix="init_gm")

        if (self.init_gm_model_statistics is not None
                and self.init_gm_model_statistics.ramachandran.outliers == 0
                and self.init_gm_model_statistics.omega.twisted_general <= 0.01
                and self.init_gm_model_statistics.omega.twisted_proline <= 0.01
                and self.init_gm_model_statistics.omega.cis_general <= 0.01
                and self.init_gm_model_statistics.omega.cis_proline <= 0.01
                and self.init_gm_model_statistics.rotamer.outliers <= 0.01):
            print("Simple minimization was enough", file=self.log)
            # Early exit!!!
            self.shift_and_write_result(model=self.model,
                                        fname_suffix="all_idealized")
            if self.params.output_model_h:
                self.shift_and_write_result(model=self.model_h,
                                            fname_suffix="all_idealized_h")

            self.final_model_statistics = self.get_statistics(self.model)
            # self.original_boxed_hierarchy.write_pdb_file(file_name="original_boxed_end.pdb")
            self.time_for_run = time() - t_0
            if self.params.output_pkl:
                easy_pickle.dump(file_name="%s.pkl" %
                                 self.params.output_prefix,
                                 obj=self.get_stats_obj())
            return

        self.filtered_whole_ann = None
        if self.ann is not None:
            self.filtered_whole_ann = self.ann.deep_copy()
            print("Original SS annotation", file=self.log)
            print(self.ann.as_pdb_str(), file=self.log)
            if self.params.filter_input_ss:
                self.filtered_whole_ann = self.ann.filter_annotation(
                    hierarchy=self.model.get_hierarchy(),
                    asc=self.model.get_atom_selection_cache())
            print("Filtered SS annotation", file=self.log)
            print(self.filtered_whole_ann.as_pdb_str(), file=self.log)
            self.model.set_ss_annotation(self.filtered_whole_ann)

        # getting grm with SS restraints
        self.update_ss_in_grm(self.filtered_whole_ann)

        if (self.ann is None
                or self.ann.get_n_helices() + self.ann.get_n_sheets() == 0
                or not self.params.ss_idealization.enabled):
            print(
                "No secondary structure annotations found or SS idealization is disabled.",
                file=self.log)
            print("Secondary structure substitution step will be skipped",
                  file=self.log)
            self.log.flush()
            # here we want to do geometry minimization anyway!
            negate_selection = None
            if self.reference_map is None:
                outlier_selection_txt = mmtbx.building.loop_closure.utils. \
                  rama_score_selection(self.model.get_hierarchy(), self.model.get_ramachandran_manager(), "outlier",1)
                print("outlier_selection_txt",
                      outlier_selection_txt,
                      file=self.log)
                negate_selection = "all"
                if outlier_selection_txt != "" and outlier_selection_txt is not None:
                    negate_selection = "not (%s)" % outlier_selection_txt
            # if self.params.run_minimization_first:
            # self.minimize(
            #     model=self.model,
            #     original_pdb_h=self.whole_pdb_h,
            #     ncs_restraints_group_list=self.filtered_ncs_restr_group_list,
            #     excl_string_selection=negate_selection,
            #     reference_map=self.reference_map)
            # self.original_boxed_hierarchy.write_pdb_file(file_name="original_boxed_h_1.pdb")
        else:
            if self.params.debug:
                self.params.ss_idealization.file_name_before_regularization = \
                    "%s_ss_before_reg.pdb" % self.params.output_prefix
            self.params.ss_idealization.skip_good_ss_elements = True
            ssb.substitute_ss(model=self.model,
                              params=self.params.ss_idealization,
                              reference_map=self.master_map,
                              log=self.log)
            self.log.flush()

        self.after_ss_idealization = self.get_statistics(self.model)
        self.shift_and_write_result(model=self.model,
                                    fname_suffix="ss_ideal_stat")

        # Write resulting pdb file.
        if self.params.debug:
            self.shift_and_write_result(
                model=self.model,
                fname_suffix="ss_ideal",
            )
        # self.params.loop_idealization.minimize_whole = not self.model.ncs_constraints_present() and self.params.loop_idealization.minimize_whole
        self.params.loop_idealization.debug = self.params.debug or self.params.loop_idealization.debug
        # self.params.loop_idealization.enabled = False
        # self.params.loop_idealization.variant_search_level = 0
        print("Starting loop idealization", file=self.log)
        loop_ideal = loop_idealization(self.model,
                                       params=self.params.loop_idealization,
                                       reference_map=self.master_map,
                                       log=self.log,
                                       verbose=True)
        self.log.flush()
        if self.params.debug:
            self.shift_and_write_result(model=self.model,
                                        fname_suffix="rama_ideal")
        self.after_loop_idealization = self.get_statistics(self.model)

        # fixing remaining rotamer outliers
        if (self.params.additionally_fix_rotamer_outliers
                and self.after_loop_idealization.rotamer.outliers > 0.004):
            self.idealize_rotamers()

        self.after_rotamer_fixing = self.get_statistics(self.model)
        ref_hierarchy_for_final_gm = self.original_boxed_hierarchy
        if not self.params.use_starting_model_for_final_gm:
            ref_hierarchy_for_final_gm = self.model.get_hierarchy().deep_copy()
        ref_hierarchy_for_final_gm.reset_atom_i_seqs()

        if self.model.ncs_constraints_present():
            print("Using ncs", file=self.log)
            # assert 0
        else:
            print("Not using ncs", file=self.log)
            # assert 0

        # need to update SS manager for the whole model here.
        if self.params.use_ss_restraints:
            ss_params = sec_str_master_phil.fetch().extract()
            ss_params.secondary_structure.protein.remove_outliers = not self.params.ss_idealization.enabled
            self.set_ss_restraints(ss_annotation=self.filtered_whole_ann,
                                   params=ss_params.secondary_structure)
        if self.params.run_minimization_last:
            print("loop_ideal.ref_exclusion_selection",
                  loop_ideal.ref_exclusion_selection,
                  file=self.log)
            print("Minimizing whole model", file=self.log)
            self.minimize(
                model=self.model,
                original_pdb_h=ref_hierarchy_for_final_gm,
                excl_string_selection=loop_ideal.ref_exclusion_selection,
                reference_map=self.reference_map)
        self.shift_and_write_result(model=self.model,
                                    fname_suffix="all_idealized")
        if self.params.output_model_h:
            self.shift_and_write_result(model=self.model_h,
                                        fname_suffix="all_idealized_h")

        self.final_model_statistics = self.get_statistics(self.model)
        self.time_for_run = time() - t_0
        if self.params.output_pkl or self.params.debug:
            easy_pickle.dump(file_name="%s.pkl" % self.params.output_prefix,
                             obj=self.get_stats_obj())