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"