def performDSSP(pdb, parseall=False, stderr=True): """Perform DSSP calculations and parse results. DSSP data is returned in an :class:`~.AtomGroup` instance. See also :func:`execDSSP` and :func:`parseDSSP`.""" pdb = fetchPDB(pdb, compressed=False) return parseDSSP(execDSSP(pdb, stderr=stderr), parsePDB(pdb), parseall)
def parsePDB(pdb, **kwargs): """Return an :class:`.AtomGroup` and/or dictionary containing header data parsed from a PDB file. This function extends :func:`.parsePDBStream`. |example| See :ref:`parsepdb` for a detailed example. :arg pdb: a PDB identifier or a filename If needed, PDB files are downloaded using :func:`.fetchPDB()` function. """ title = kwargs.get('title', None) if not os.path.isfile(pdb): if len(pdb) == 4 and pdb.isalnum(): if title is None: title = pdb kwargs['title'] = title filename = fetchPDB(pdb) if filename is None: raise IOError('PDB file for {0:s} could not be downloaded.' .format(pdb)) pdb = filename else: raise IOError('{0:s} is not a valid filename or a valid PDB ' 'identifier.'.format(pdb)) if title is None: title, ext = os.path.splitext(os.path.split(pdb)[1]) if ext == '.gz': title, ext = os.path.splitext(title) kwargs['title'] = title pdb = openFile(pdb) result = parsePDBStream(pdb, **kwargs) pdb.close() return result
def performSTRIDE(pdb): """Perform STRIDE calculations and parse results. STRIDE data is returned in an :class:`~.AtomGroup` instance. See also :func:`execSTRIDE` and :func:`parseSTRIDE`.""" pdb = fetchPDB(pdb, compressed=False) return parseSTRIDE(execSTRIDE(pdb), parsePDB(pdb))
def execDSSP(pdb, outputname=None, outputdir=None, stderr=True): """Execute DSSP for given *pdb*. *pdb* can be a PDB identifier or a PDB file path. If *pdb* is a compressed file, it will be decompressed using Python :mod:`gzip` library. When no *outputname* is given, output name will be :file:`pdb.dssp`. :file:`.dssp` extension will be appended automatically to *outputname*. If :file:`outputdir` is given, DSSP output and uncompressed PDB file will be written into this folder. Upon successful execution of :command:`dssp pdb > out` command, output filename is returned. On Linux platforms, when *stderr* is false, standard error messages are suppressed, i.e. ``dssp pdb > outputname 2> /dev/null``. For more information on DSSP see http://swift.cmbi.ru.nl/gv/dssp/. If you benefited from DSSP, please consider citing [WK83]_.""" dssp = which('dssp') if dssp is None: raise EnvironmentError('command not found: dssp executable is not ' 'found in one of system paths') assert outputname is None or isinstance(outputname, str),\ 'outputname must be a string' assert outputdir is None or isinstance(outputdir, str),\ 'outputdir must be a string' if not os.path.isfile(pdb): pdb = fetchPDB(pdb, compressed=False) if pdb is None: raise ValueError('pdb is not a valid PDB identifier or filename') if os.path.splitext(pdb)[1] == '.gz': if outputdir is None: pdb = gunzip(pdb, os.path.splitext(pdb)[0]) else: pdb = gunzip(pdb, os.path.join(outputdir, os.path.split(os.path.splitext(pdb)[0])[1])) if outputdir is None: outputdir = '.' if outputname is None: out = os.path.join(outputdir, os.path.splitext(os.path.split(pdb)[1])[0] + '.dssp') else: out = os.path.join(outputdir, outputname + '.dssp') if not stderr and PLATFORM != 'Windows': status = os.system('{0:s} {1:s} > {2:s} 2> /dev/null'.format( dssp, pdb, out)) else: status = os.system('{0:s} {1:s} > {2:s}'.format(dssp, pdb, out)) if status == 0: return out
def execSTRIDE(pdb, outputname=None, outputdir=None): """Execute STRIDE program for given *pdb*. *pdb* can be an identifier or a PDB file path. If *pdb* is a compressed file, it will be decompressed using Python :mod:`gzip` library. When no *outputname* is given, output name will be :file:`pdb.stride`. :file:`.stride` extension will be appended automatically to *outputname*. If :file:`outputdir` is given, STRIDE output and uncompressed PDB file will be written into this folder. Upon successful execution of :command:`stride pdb > out` command, output filename is returned. For more information on STRIDE see http://webclu.bio.wzw.tum.de/stride/. If you benefited from STRIDE, please consider citing [DF95]_.""" stride = which('stride') if stride is None: raise EnvironmentError('command not found: stride executable is not ' 'found in one of system paths') assert outputname is None or isinstance(outputname, str),\ 'outputname must be a string' assert outputdir is None or isinstance(outputdir, str),\ 'outputdir must be a string' if not os.path.isfile(pdb): pdb = fetchPDB(pdb, compressed=False) if pdb is None: raise ValueError('pdb is not a valid PDB identifier or filename') if os.path.splitext(pdb)[1] == '.gz': if outputdir is None: pdb = gunzip(pdb, os.path.splitext(pdb)[0]) else: pdb = gunzip(pdb, os.path.join(outputdir, os.path.split(os.path.splitext(pdb)[0])[1])) if outputdir is None: outputdir = '.' if outputname is None: out = os.path.join(outputdir, os.path.splitext(os.path.split(pdb)[1])[0] + '.stride') else: out = os.path.join(outputdir, outputname + '.stride') status = os.system('{0:s} {1:s} > {2:s}'.format(stride, pdb, out)) if status == 0: return out
def parsePDBHeader(pdb, *keys): """Return header data dictionary for *pdb*. This function is equivalent to ``parsePDB(pdb, header=True, model=0, meta=False)``, likewise *pdb* may be an identifier or a filename. List of header records that are parsed. ============ ================= ============================================ Record type Dictionary key(s) Description ============ ================= ============================================ HEADER | classification | molecule classification | deposition_date | deposition date | identifier | PDB identifier TITLE title title for the experiment or analysis SPLIT split list of PDB entries that make up the whole structure when combined with this one COMPND polymers see :class:`Polymer` EXPDTA experiment information about the experiment NUMMDL n_models number of models MDLTYP model_type additional structural annotation AUTHOR authors list of contributors JRNL reference reference information dictionary: * *authors*: list of authors * *title*: title of the article * *editors*: list of editors * *issn*: * *reference*: journal, vol, issue, etc. * *publisher*: publisher information * *pmid*: pubmed identifier * *doi*: digital object identifier DBREF[1|2] polymers see :class:`Polymer` and :class:`DBRef` SEQADV polymers see :class:`Polymer` SEQRES polymers see :class:`Polymer` MODRES polymers see :class:`Polymer` HELIX polymers see :class:`Polymer` SHEET polymers see :class:`Polymer` HET chemicals see :class:`Chemical` HETNAM chemicals see :class:`Chemical` HETSYN chemicals see :class:`Chemical` FORMUL chemicals see :class:`Chemical` REMARK 2 resolution resolution of structures, when applicable REMARK 4 version PDB file version REMARK 350 biomoltrans biomolecular transformation lines (unprocessed) ============ ================= ============================================ Header records that are not parsed are: OBSLTE, CAVEAT, SOURCE, KEYWDS, REVDAT, SPRSDE, SSBOND, LINK, CISPEP, CRYST1, ORIGX1, ORIGX2, ORIGX3, MTRIX1, MTRIX2, MTRIX3, and REMARK X not mentioned above. """ if not os.path.isfile(pdb): if len(pdb) == 4 and pdb.isalnum(): filename = fetchPDB(pdb) if filename is None: raise IOError('PDB file for {0:s} could not be downloaded.' .format(pdb)) pdb = filename else: raise IOError('{0:s} is not a valid filename or a valid PDB ' 'identifier.'.format(pdb)) pdb = openFile(pdb) header, _ = getHeaderDict(pdb, *keys) pdb.close() return header