Source code for parmed.amber.readparm

"""
This module is simply a namespace for all Amber topology-like classes. There are
different variants; for instance the standard Amber topology, the chamber-made
topology, and the tinker_to_amber-made topology. These classes are all defined
in their own private modules, but imported here to simplify the API.

Copyright (C) 2010 - 2014  Jason Swails

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
   
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
"""

from parmed.amber.amberformat import AmberFormat
from parmed.amber._amberparm import AmberParm, Rst7
from parmed.amber._chamberparm import ChamberParm, ConvertFromPSF
from parmed.amber._tinkerparm import AmoebaParm, BeemanRestart
from parmed.utils.six import string_types

# Define importables via *
__all__ = ['AmberFormat', 'AmberParm', 'ChamberParm', 'LoadParm', 'Rst7']

# Supply a function to load a topology file in the 'correct' format
[docs]def LoadParm(parmname, xyz=None, box=None): """ Loads a topology file using the correct class. Parameters ---------- parmname : ``str`` The name of the topology file to load xyz : str or array, optional If provided, the coordinates and unit cell dimensions from the provided Amber inpcrd/restart file will be loaded into the molecule, or the coordinates will be loaded from the coordinate array box : array, optional If provided, the unit cell information will be set from the provided unit cell dimensions (a, b, c, alpha, beta, and gamma, respectively) Returns ------- parm : :class:`AmberParm` (or subclass) This function parses the topology file, determines if it is an Amber-style (i.e., *traditional* Amber force field), Chamber-style (i.e., CHARMM force field), or Amoeba-style (i.e., Amoeba force field), and then returns an instance of the appropriate type. """ from parmed import load_file from parmed.constants import IFBOX parm = AmberFormat(parmname) if 'CTITLE' in parm.flag_list: parm = parm.view_as(ChamberParm) elif 'AMOEBA_FORCEFIELD' in parm.flag_list: parm = parm.view_as(AmoebaParm) else: parm = parm.view_as(AmberParm) if isinstance(xyz, string_types): f = load_file(xyz) if not hasattr(f, 'coordinates') or f.coordinates is None: raise TypeError('%s does not have coordinates' % xyz) parm.coordinates = f.coordinates if hasattr(f, 'box') and f.box is not None and box is None: parm.box = f.box else: parm.coordinates = xyz if box is not None: parm.box = box # If all else fails, set the box from the prmtop file if parm.parm_data['POINTERS'][IFBOX] > 0 and parm.box is None: box = parm.parm_data['BOX_DIMENSIONS'] parm.box = list(box[1:]) + [box[0], box[0], box[0]] parm.hasbox = parm.box is not None return parm