Source code for schrodinger.protein.reliability

import os
import sys

from schrodinger import structure
from schrodinger.protein import _reliability
from schrodinger.structutils import analyze
from schrodinger.utils import cmdline


[docs]def run_quick_check(ct, binding_site_atoms=None): """ Runs a quick analysis of protein health. :param ct: protein CT :type ct: schrodinger.structure :param binding_site_asl: list of atom indices to define binding site. Limits checks to area around the binding site. :type binding_site_asl: atom indices :rtype str Returns a Results object of problems spotted in the protein. """ params = ProteinCheckParameters() # Avoid side chain packing analysis to speed up quick check params.disableSidechainPacking() if binding_site_atoms: site_asl = analyze.generate_asl(ct, binding_site_atoms) params.setBindingSiteASL(site_asl) return run_check(ct, params)
[docs]def run_check(ct, params): """ Returns a Results object of problems spotted in the protein. """ mc = _reliability.ModelCheck(ct, settings=params._reliability_settings, save_ct=False) return Results(mc)
[docs]def find_isolated_water_molecules(ct): """ Finds water molecules that are isolated (greater than 4.6 A) from other water clusters. Returns a list of tuples (water_molecule, distance). The water molecule is represented as a set() of atom indexes, and the distance is the minimum distance from another water molecule. """ # This method is in private module to avoid circular import problem return _reliability.find_isolated_water_molecules(ct)
[docs]class ProteinCheckParameters(object):
[docs] def __init__(self): self._reliability_settings = { 'SITE_ASL': '', 'JOBNAME': '', 'LIGAND': 'none', 'SITE_RADIUS': 6.0, 'PERMISSIVE': False, }
[docs] def enableSidechainPacking(self): self._reliability_settings["RUN_SIDECHAIN_PACKING"] = True
[docs] def disableSidechainPacking(self): self._reliability_settings["RUN_SIDECHAIN_PACKING"] = False
[docs] def setBindingSiteASL(self, site_asl): self._reliability_settings["SITE_ASL"] = site_asl
[docs]class Results(object): """ The Results object stores the results from a protein health check. """
[docs] def __init__(self, model): self.model = model
[docs] def getTextSummary(self): """ Returns a summary of problems found in the protein. If no problems, returns an empty list. :rtype list of str """ return self.model.get_quick_results()
[docs]def main(): doc = 'Run a quick protein reliability check on the specified structure.' parser = cmdline.create_argument_parser(description=doc) parser.add_argument('inputfile', type=str, help='Structure file containing protein to check') parser.add_argument('reportfile', type=str, help='Filename to write results. If there are no ' 'problems, file will be blank') parser.add_argument('outputfile', type=str, help='Structure file containing protein and ' 'properties that describe health issues.') args = parser.parse_args(sys.argv[1:]) if not os.path.isfile(args.inputfile): parser.error('File nat found: %s' % args.inputfile) sys.exit(1) protein = structure.Structure.read(args.inputfile) mc = run_quick_check(protein) mc.model.save_data_to_CT() with structure.StructureWriter(args.outputfile) as writer: writer.append(mc.model.ct) prot_probs = mc.getTextSummary() with open(args.reportfile, 'w') as f: f.write('\n'.join(prot_probs))
if __name__ == '__main__': main()