示例#1
0
 def __init__ (self, pdb_hierarchy, params=None, outliers_only=True) :
   if (params is None) :
     params = rna_sugar_pucker_analysis.master_phil.extract()
   self.pucker_states = []
   self.pucker_perp_xyz = {}
   self.pucker_dist = {}
   rna_geometry.__init__(self)
   from iotbx.pdb.rna_dna_detection import residue_analysis
   for model in pdb_hierarchy.models():
     for chain in model.chains():
       for conformer in chain.conformers():
         altloc = conformer.altloc
         if altloc == "":
           altloc = " "
         residues = conformer.residues()
         for i_residue,residue in enumerate(residues):
           def _get_next_residue():
             j = i_residue + 1
             if (j == len(residues)): return None
             return residues[j]
           ra1 = residue_analysis(
             residue_atoms=residue.atoms(),
             distance_tolerance=params.bond_detection_distance_tolerance)
           if (ra1.problems is not None): continue
           if (not ra1.is_rna): continue
           residue_2_p_atom = None
           next_pdb_residue = _get_next_residue()
           if (next_pdb_residue is not None):
             residue_2_p_atom = next_pdb_residue.find_atom_by(name=" P  ")
           if (get_res_class(residue.resname) != "common_rna_dna") :
             continue
           ana = rna_sugar_pucker_analysis.evaluate(
             params=params,
             residue_1_deoxy_ribo_atom_dict=ra1.deoxy_ribo_atom_dict,
             residue_1_c1p_outbound_atom=ra1.c1p_outbound_atom,
             residue_2_p_atom=residue_2_p_atom)
           self.pucker_states.append(ana)
           self.n_total += 1
           is_outlier = ana.is_delta_outlier or ana.is_epsilon_outlier
           if (is_outlier) :
             self.n_outliers += 1
           if (is_outlier or not outliers_only) :
             pucker = rna_pucker(
               chain_id=chain.id,
               resseq=residue.resseq,
               icode=residue.icode,
               altloc=conformer.altloc,
               resname=residue.resname,
               delta_angle=ana.delta,
               is_delta_outlier=ana.is_delta_outlier,
               epsilon_angle=ana.epsilon,
               is_epsilon_outlier=ana.is_epsilon_outlier,
               outlier=is_outlier)
             self.results.append(pucker)
             key = pucker.id_str() #[8:-1]
             self.pucker_perp_xyz[key] = [ana.p_perp_xyz, ana.o3p_perp_xyz]
             self.pucker_dist[key] = [ana.p_distance_c1p_outbound_line,
                                      ana.o3p_distance_c1p_outbound_line]
 def __init__ (self, pdb_hierarchy, params=None, outliers_only=True) :
   if (params is None) :
     params = rna_sugar_pucker_analysis.master_phil.extract()
   self.pucker_states = []
   self.pucker_perp_xyz = {}
   self.pucker_dist = {}
   rna_geometry.__init__(self)
   from iotbx.pdb.rna_dna_detection import residue_analysis
   for model in pdb_hierarchy.models():
     for chain in model.chains():
       for conformer in chain.conformers():
         altloc = conformer.altloc
         if altloc == "":
           altloc = " "
         residues = conformer.residues()
         for i_residue,residue in enumerate(residues):
           def _get_next_residue():
             j = i_residue + 1
             if (j == len(residues)): return None
             return residues[j]
           ra1 = residue_analysis(
             residue_atoms=residue.atoms(),
             distance_tolerance=params.bond_detection_distance_tolerance)
           if (ra1.problems is not None): continue
           if (not ra1.is_rna): continue
           residue_2_p_atom = None
           next_pdb_residue = _get_next_residue()
           if (next_pdb_residue is not None):
             residue_2_p_atom = next_pdb_residue.find_atom_by(name=" P  ")
           if (get_res_class(residue.resname) != "common_rna_dna") :
             continue
           ana = rna_sugar_pucker_analysis.evaluate(
             params=params,
             residue_1_deoxy_ribo_atom_dict=ra1.deoxy_ribo_atom_dict,
             residue_1_c1p_outbound_atom=ra1.c1p_outbound_atom,
             residue_2_p_atom=residue_2_p_atom)
           self.pucker_states.append(ana)
           self.n_total += 1
           is_outlier = ana.is_delta_outlier or ana.is_epsilon_outlier
           if (is_outlier) :
             self.n_outliers += 1
           if (is_outlier or not outliers_only) :
             pucker = rna_pucker(
               chain_id=chain.id,
               resseq=residue.resseq,
               icode=residue.icode,
               altloc=conformer.altloc,
               resname=residue.resname,
               delta_angle=ana.delta,
               is_delta_outlier=ana.is_delta_outlier,
               epsilon_angle=ana.epsilon,
               is_epsilon_outlier=ana.is_epsilon_outlier,
               outlier=is_outlier)
             self.results.append(pucker)
             key = pucker.id_str() #[8:-1]
             self.pucker_perp_xyz[key] = [ana.p_perp_xyz, ana.o3p_perp_xyz]
             self.pucker_dist[key] = [ana.p_distance_c1p_outbound_line,
                                      ana.o3p_distance_c1p_outbound_line]
def exercise(args):
    assert len(args) == 0
    params = rna_sugar_pucker_analysis.master_phil.fetch().extract()
    for i_pass, some_x in enumerate([31.101, 21.101]):
        analysis = rna_sugar_pucker_analysis.evaluate(
            params=params,
            residue_1_deoxy_ribo_atom_dict=atom_dict([(some_x, 30.048, 33.325),
                                                      (22.184, 28.704, 36.539),
                                                      (21.527, 28.782, 35.281),
                                                      (22.379, 28.287, 34.119),
                                                      (22.676, 26.795, 34.032)
                                                      ]),
            residue_1_c1p_outbound_atom=atom((19.628, 30.157, 32.953)),
            residue_2_p_atom=atom((33.058, 33.903, 32.613)))
        assert analysis.epsilon is None
        if (i_pass == 0):
            assert analysis.delta is None
        else:
            assert approx_equal(analysis.delta, 69.6819176834)
        assert analysis.p_distance_c1p_outbound_line is None
        assert analysis.is_epsilon_outlier is None
        if (i_pass == 0):
            assert analysis.is_2p_delta is None
            assert analysis.is_2p_p_distance_c1p_outbound_line is None
            assert analysis.is_2p_o3p_distance_c1p_outbound_line is None
            assert analysis.is_2p is None
        else:
            assert not analysis.is_2p_delta
            assert analysis.is_2p_p_distance_c1p_outbound_line is None
            assert not analysis.is_2p_o3p_distance_c1p_outbound_line
            assert not analysis.is_2p
    analysis = rna_sugar_pucker_analysis.evaluate(
        params=params,
        residue_1_deoxy_ribo_atom_dict=atom_dict([(50.473, 9.942, 36.204),
                                                  (48.952, 10.236, 33.644),
                                                  (49.474, 11.213, 34.497),
                                                  (50.978, 11.174, 34.278),
                                                  (51.710, 12.501, 34.095)]),
        residue_1_c1p_outbound_atom=atom((50.926, 10.084, 37.569)),
        residue_2_p_atom=atom((48.114, 10.641, 32.347)))
    assert approx_equal(analysis.epsilon, 250.715932662)
    assert approx_equal(analysis.delta, 133.811229901)
    assert approx_equal(analysis.p_distance_c1p_outbound_line, 1.52374220064)
    assert approx_equal(analysis.o3p_distance_c1p_outbound_line,
                        0.860583842822)
    assert not analysis.is_epsilon_outlier
    assert analysis.is_2p_delta
    assert analysis.is_2p_p_distance_c1p_outbound_line
    assert analysis.is_2p_o3p_distance_c1p_outbound_line
    assert analysis.is_2p
    for residue_2_p_atom in [atom((41.856, 17.581, 31.191)), None]:
        analysis = rna_sugar_pucker_analysis.evaluate(
            params=params,
            residue_1_deoxy_ribo_atom_dict=atom_dict([(42.736, 12.998, 31.661),
                                                      (42.922, 16.529, 31.706),
                                                      (42.428, 15.271, 31.984),
                                                      (43.132, 14.710, 33.185),
                                                      (42.545, 15.146, 34.511)
                                                      ]),
            residue_1_c1p_outbound_atom=atom((41.433, 12.332, 31.466)),
            residue_2_p_atom=residue_2_p_atom)
        assert not analysis.is_epsilon_outlier
        assert not analysis.is_2p_delta
        if (residue_2_p_atom is not None):
            assert not analysis.is_2p_p_distance_c1p_outbound_line
        else:
            assert analysis.is_2p_p_distance_c1p_outbound_line is None
        assert not analysis.is_2p_o3p_distance_c1p_outbound_line
        assert not analysis.is_2p
    #
    params.epsilon_range_min = None
    params.epsilon_range_max = None
    params.delta_range_2p_min = None
    params.delta_range_2p_max = None
    params.delta_range_3p_min = None
    params.delta_range_3p_max = None
    params.p_distance_c1p_outbound_line_2p_max = None
    params.o3p_distance_c1p_outbound_line_2p_max = None
    analysis = rna_sugar_pucker_analysis.evaluate(
        params=params,
        residue_1_deoxy_ribo_atom_dict=atom_dict([(50.473, 9.942, 36.204),
                                                  (48.952, 10.236, 33.644),
                                                  (49.474, 11.213, 34.497),
                                                  (50.978, 11.174, 34.278),
                                                  (51.710, 12.501, 34.095)]),
        residue_1_c1p_outbound_atom=atom((50.926, 10.084, 37.569)),
        residue_2_p_atom=atom((48.114, 10.641, 32.347)))
    assert approx_equal(analysis.epsilon, 250.715932662)
    assert approx_equal(analysis.delta, 133.811229901)
    assert approx_equal(analysis.p_distance_c1p_outbound_line, 1.52374220064)
    assert analysis.is_epsilon_outlier is None
    assert analysis.is_2p_delta is None
    assert analysis.is_2p_p_distance_c1p_outbound_line is None
    assert analysis.is_2p_o3p_distance_c1p_outbound_line is None
    assert analysis.is_2p is None
    #
    print "OK"
def exercise(args):
  assert len(args) == 0
  params = rna_sugar_pucker_analysis.master_phil.fetch().extract()
  for i_pass,some_x in enumerate([31.101, 21.101]):
    analysis = rna_sugar_pucker_analysis.evaluate(
      params=params,
      residue_1_deoxy_ribo_atom_dict=atom_dict([
        (some_x,30.048,33.325), (22.184,28.704,36.539), (21.527,28.782,35.281),
        (22.379,28.287,34.119), (22.676,26.795,34.032)]),
      residue_1_c1p_outbound_atom=atom((19.628,30.157,32.953)),
      residue_2_p_atom=atom((33.058,33.903,32.613)))
    assert analysis.epsilon is None
    if (i_pass == 0):
      assert analysis.delta is None
    else:
      assert approx_equal(analysis.delta, 69.6819176834)
    assert analysis.p_distance_c1p_outbound_line is None
    assert analysis.is_epsilon_outlier is None
    if (i_pass == 0):
      assert analysis.is_2p_delta is None
      assert analysis.is_2p_p_distance_c1p_outbound_line is None
      assert analysis.is_2p_o3p_distance_c1p_outbound_line is None
      assert analysis.is_2p is None
    else:
      assert not analysis.is_2p_delta
      assert analysis.is_2p_p_distance_c1p_outbound_line is None
      assert not analysis.is_2p_o3p_distance_c1p_outbound_line
      assert not analysis.is_2p
  analysis = rna_sugar_pucker_analysis.evaluate(
    params=params,
    residue_1_deoxy_ribo_atom_dict=atom_dict([
      (50.473,9.942,36.204), (48.952,10.236,33.644), (49.474,11.213,34.497),
      (50.978,11.174,34.278), (51.710,12.501,34.095)]),
    residue_1_c1p_outbound_atom=atom((50.926,10.084,37.569)),
    residue_2_p_atom=atom((48.114,10.641,32.347)))
  assert approx_equal(analysis.epsilon, 250.715932662)
  assert approx_equal(analysis.delta, 133.811229901)
  assert approx_equal(analysis.p_distance_c1p_outbound_line, 1.52374220064)
  assert approx_equal(analysis.o3p_distance_c1p_outbound_line, 0.860583842822)
  assert not analysis.is_epsilon_outlier
  assert analysis.is_2p_delta
  assert analysis.is_2p_p_distance_c1p_outbound_line
  assert analysis.is_2p_o3p_distance_c1p_outbound_line
  assert analysis.is_2p
  for residue_2_p_atom in [atom((41.856,17.581,31.191)), None]:
    analysis = rna_sugar_pucker_analysis.evaluate(
      params=params,
      residue_1_deoxy_ribo_atom_dict=atom_dict([
        (42.736,12.998,31.661), (42.922,16.529,31.706), (42.428,15.271,31.984),
        (43.132,14.710,33.185), (42.545,15.146,34.511)]),
      residue_1_c1p_outbound_atom=atom((41.433,12.332,31.466)),
      residue_2_p_atom=residue_2_p_atom)
    assert not analysis.is_epsilon_outlier
    assert not analysis.is_2p_delta
    if (residue_2_p_atom is not None):
      assert not analysis.is_2p_p_distance_c1p_outbound_line
    else:
      assert analysis.is_2p_p_distance_c1p_outbound_line is None
    assert not analysis.is_2p_o3p_distance_c1p_outbound_line
    assert not analysis.is_2p
  #
  params.epsilon_range_min = None
  params.epsilon_range_max = None
  params.delta_range_2p_min = None
  params.delta_range_2p_max = None
  params.delta_range_3p_min = None
  params.delta_range_3p_max = None
  params.p_distance_c1p_outbound_line_2p_max = None
  params.o3p_distance_c1p_outbound_line_2p_max = None
  analysis = rna_sugar_pucker_analysis.evaluate(
    params=params,
    residue_1_deoxy_ribo_atom_dict=atom_dict([
      (50.473,9.942,36.204), (48.952,10.236,33.644), (49.474,11.213,34.497),
      (50.978,11.174,34.278), (51.710,12.501,34.095)]),
    residue_1_c1p_outbound_atom=atom((50.926,10.084,37.569)),
    residue_2_p_atom=atom((48.114,10.641,32.347)))
  assert approx_equal(analysis.epsilon, 250.715932662)
  assert approx_equal(analysis.delta, 133.811229901)
  assert approx_equal(analysis.p_distance_c1p_outbound_line, 1.52374220064)
  assert analysis.is_epsilon_outlier is None
  assert analysis.is_2p_delta is None
  assert analysis.is_2p_p_distance_c1p_outbound_line is None
  assert analysis.is_2p_o3p_distance_c1p_outbound_line is None
  assert analysis.is_2p is None
  #
  print "OK"