Source code for prody.apps.prody_apps.prody_select

"""Extract a selection of atoms from a PDB file."""

from ..apptools import *

__all__ = ['prody_select']

[docs]def prody_select(selstr, *pdbs, **kwargs): """Write selected atoms from a PDB file in PDB format. :arg selstr: atom selection string, see :ref:`selections` :arg pdbs: PDB identifier(s) or filename(s) :arg output: output filename, default is :file:`pdb_selected.pdb` :arg prefix: prefix for output file, default is PDB filename :arg suffix: output filename suffix, default is :file:`_selected`""" from os.path import isfile from prody import LOGGER, parsePDB, writePDB #selstr = kwargs.get('selstr') if not pdbs: raise ValueError('pdb argument must be provided') if ((isfile(selstr) or len(selstr) == 4 and selstr[0].isdigit()) and len(pdbs) == 1 and not isfile(pdbs[0])): pdbs, selstr = selstr, pdbs[0] LOGGER.warn('The order of selstr and pdb arguments have switched ' 'to support multiple files, old order will be supported ' 'until v1.4.') pdbs = [pdbs] prefix = kwargs.get('prefix', None) suffix = kwargs.get('suffix', '_selected') output = kwargs.get('output', None) for pdb in pdbs: pdb = parsePDB(pdb) pdbselect = pdb.select(selstr) if pdbselect is None: LOGGER.warn('Selection {0} did not match any atoms.' .format(repr(selstr))) return LOGGER.info('Selection {0} matched {1} atoms.' .format(repr(selstr), len(pdbselect))) outname = output or ((prefix or pdb.getTitle()) + suffix) LOGGER.info('Selection is written into: ' + writePDB(outname, pdbselect))
def addCommand(commands): subparser = commands.add_parser('select', help='select atoms and write a PDB file') subparser.add_argument('--quiet', help="suppress info messages to stderr", action=Quiet, nargs=0) subparser.add_argument('--examples', action=UsageExample, nargs=0, help='show usage examples and exit') subparser.set_defaults(usage_example= """This command selects specified atoms and writes them in a PDB file. Fetch PDB files 1p38 and 1r39 and write backbone atoms in a file: $ prody select backbone 1p38 1r39""", test_examples=[0]) group = subparser.add_argument_group('output options') group.add_argument('-o', '--output', dest='output', metavar='STR', type=str, help='output PDB filename (default: pdb_selected.pdb)') group.add_argument('-p', '--prefix', dest='prefix', metavar='STR', type=str, help=('output filename prefix (default: PDB filename)')) group.add_argument('-x', '--suffix', dest='suffix', metavar='STR', type=str, default='_selected', help=('output filename suffix (default: %(default)s)')) subparser.add_argument('select', help='atom selection string') subparser.add_argument('pdb', nargs='+', help='PDB identifier(s) or filename(s)') subparser.set_defaults(func=lambda ns: prody_select(ns.select, *ns.pdb, **ns.__dict__)) subparser.set_defaults(subparser=subparser)