Source code for rna_tools.tools.mq.AnalyzeGeometry.AnalyzeGeometry

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""This module contains functions for computing AnalyzeGeomotery.
"""
import os
from rna_tools.tools.pdb_formatix.PDBFile import PDBFile  #resname_check_and_3to1, set_residues_bfactor
from rna_tools.rna_tools_config import PHENIX_BIN_PATH
from subprocess import Popen, PIPE

# directory where this script is
# files for some commands are also here
DIRECTORY = os.path.dirname(__file__)


[docs] class AnalyzeGeometry(object): """ Wrapper class for running clashscore .. note:: Sequence is required to get the length to calculate % of corrent residues. """ def __init__(self, verbose=False): pass
[docs] def run(self, name, verbose=False): """ Args: name (str): the path of the file to wrap verbose (boolen): be verbose Returns: float: score; % of Backbone torsion suites (# of them per seq) Output:: ----------Backbone torsion suites---------- Suite ID suite suiteness triaged angle A A 3 !! 0.000 delta G A 4 !! 0.000 epsilon-1 G A 11 !! 0.000 None C A 20 !! 0.000 gamma U A 25 !! 0.000 delta A A 26 !! 0.000 delta-1 A A 29 !! 0.000 None U A 30 !! 0.000 epsilon-1 G A 41 !! 0.000 delta U A 42 !! 0.000 delta-1 A A 45 !! 0.000 delta U A 46 !! 0.000 epsilon-1 U A 47 !! 0.000 delta-1 11 suites triaged and 0 incomplete leaving 35 suites 13/46 suite outliers present Average suiteness: 0.490 13 # count lines after 'traged angle' and minus 3 (# of last lines) test/1xjrA_M1.pdb 34.7826 Output for a perfect structure:: /Applications/phenix-1.18.2-3874/build/bin/phenix.rna_validate /Users/magnus/work/src/rna-tools/rna_tools/input/mq/5e3hBC.pdb CGACGCUAGCGUACGCUAGCGUCG AnalyzeGeomtery:: ----------Backbone bond lenths---------- All bonds within 4.0 sigma of ideal values. ----------Backbone bond angles---------- All angles within 4.0 sigma of ideal values. ----------Sugar pucker---------- All puckers have reasonable geometry. ----------Backbone torsion suites---------- 0 suites triaged and 0 incomplete leaving 24 suites All RNA torsion suites are reasonable. Average suiteness: 0.766 """ #cmd = 'phenix.rna_validate_1.8.1-1168 %s' % name cmd = PHENIX_BIN_PATH + os.sep + 'phenix.rna_validate %s' % name out = Popen([cmd], stderr=PIPE, stdout=PIPE, shell=True) out = out.stdout.read().decode().strip() c = 0 now_count = False pdb_file = PDBFile(pdb_path=name) seq = pdb_file.seq_from_pdb() if verbose: print(cmd) print(seq) print('AnalyzeGeomtery::', out) for l in out.split('\n'): if now_count: c += 1 if 'triaged angle' in l: # #suiteID:suite:suiteness:triaged_angle'): now_count = True # if c = 0 it means that triagged angle was not even detected if c: c = c - 3 return round(c/float(len(seq))*100,4)
#return ','.join([str(out), str(out2)])
[docs] def cleanup(self): pass
[docs] def main(): wrapper = AnalyzeGeometry() fns = [#'test' + os.sep + '1xjrA.pdb', # <- gtp causes error '../test' + os.sep + '1xjrA_M1.pdb', #'test' + os.sep + '1xjrA_M500.pdb' ] # native, and M1 from rasp decoys for f in fns: result = wrapper.run(f, True) print(f) print(result) wrapper.cleanup()
if __name__ == '__main__': main()