def test_rmsfit_with_autoimage_compared_to_cpptraj(self): # assert to cpptraj: need to set mass traj = self.traj.copy() txt = ''' parm {0} trajin {1} autoimage rms first {2} mass trajout tmp.nc '''.format(traj.top.filename, traj.filename, self.mask) with tempfolder(): state = pt.datafiles.load_cpptraj_output(txt, dtype='state') state.run() # need to load to memory (not iterload) saved_traj = pt.load('tmp.nc', traj.top) fa1 = traj[:] fa1.autoimage() pt.superpose(fa1, ref=0, mask=self.mask, mass=True) aa_eq(fa1.xyz, saved_traj.xyz) fa_saved_nowat = saved_traj['!:WAT'] fa1_nowat = fa1['!:WAT'] aa_eq(fa_saved_nowat.xyz, fa1_nowat.xyz)
def to_ParmEd(pytraj_top): # TODO: exten to gromacs, charmm too # need to change extension """convert to ParmEd object""" from pytraj.utils.context import tempfolder from pytraj.Topology import ParmFile import parmed as chem # I am not a fan of saving/loading again but this might be best choice with tempfolder(): fname = "tmp_pytrajtop.prmtop" ParmFile().writeparm(pytraj_top, fname, format="") return chem.load_file(fname)
def prmtop_from_tleap(filename, leapin=None, verbose=False): '''make prmtop file from pdb Parameters ---------- filename : str, pdb filename leapin : str, optional, default None leap input if None, use:: source leaprc.ff14SB set default PBradii mbondi3 x = loadpdb {pdbfile} saveamberparm x {pdbfile}.prmtop {pdbfile}.rst7 quit verbose : bool, default False if False, suppress tleap output ''' import os import subprocess import pytraj as pt if leapin is None: leapin = leap_template amberhome = os.environ.get('AMBERHOME') if amberhome is None: raise RuntimeError('must set AMBERHOME') tleap = amberhome + '/bin/tleap' filename = os.path.abspath(filename) with tempfolder(): leapin = leapin.format(pdbfile=filename) with open("tmp_leap.in", 'w') as f: f.write(leapin) with open(os.devnull, 'wb') as devnull: if not verbose: subprocess.check_call( [tleap, ' -f tmp_leap.in'], stdout=devnull, stderr=subprocess.STDOUT) else: x = subprocess.check_call([tleap, ' -f tmp_leap.in']) if verbose: print(x) return pt.load_topology("tmp.top")
def read_gaussian_output(filename=None, top=None): """return a `pytraj.trajectory.Trajectory` object Parameters ---------- fname : str, filename top : {str, Topology}, optional, default None pytraj.Topology or a filename or None if None, use `antechamber` to generate mol2 file, need set $AMBERHOME env Requires -------- cclib (``pip install cclib``) >>> import pytraj as pt >>> pt.tools.read_gaussian_output("gau.out", "mytest.pdb") # doctest: +SKIP """ import cclib from pytraj.trajectory.trajectory import Trajectory from pytraj.utils.context import tempfolder from pytraj.utils.get_common_objects import get_topology _top = get_topology(None, top) gau = cclib.parser.Gaussian(filename) go = gau.parse() if _top is None: # pragma: no cover try: amberhome = os.environ['AMBERHOME'] except KeyError: raise KeyError("must set AMBERHOME") fpath = os.path.abspath(filename) with tempfolder(): at = amberhome + "/bin/antechamber" out = "-i %s -fi gout -o tmp.mol2 -fo mol2 -at amber" % fpath cm = " ".join((at, out)) os.system(cm) return Trajectory(xyz=go.atomcoords, top="tmp.mol2") else: return Trajectory(xyz=go.atomcoords, top=_top)
def read_gaussian_output(filename=None, top=None): """return a `pytraj.trajectory.Trajectory` object Parameters ---------- fname : str, filename top : {str, Topology}, optional, default None pytraj.Topology or a filename or None if None, use `antechamber` to generate mol2 file, need set $AMBERHOME env Requires -------- cclib (``pip install cclib``) >>> import pytraj as pt >>> pt.tools.read_gaussian_output("gau.out", "mytest.pdb") # doctest: +SKIP """ import cclib from pytraj.trajectory import Trajectory from pytraj.utils.context import tempfolder from pytraj.get_common_objects import get_topology _top = get_topology(None, top) gau = cclib.parser.Gaussian(filename) go = gau.parse() if _top is None: # pragma: no cover try: amberhome = os.environ['AMBERHOME'] except KeyError: raise KeyError("must set AMBERHOME") fpath = os.path.abspath(filename) with tempfolder(): at = amberhome + "/bin/antechamber" out = "-i %s -fi gout -o tmp.mol2 -fo mol2 -at amber" % fpath cm = " ".join((at, out)) os.system(cm) return Trajectory(xyz=go.atomcoords, top="tmp.mol2") else: return Trajectory(xyz=go.atomcoords, top=_top)
def minimize(traj, engine='sander', input=None, top=None): """ >>> from pytraj.amber_wrap import minimize >>> minimize(traj) >>> minimize(traj, engine='pmemd') """ from pytraj import Trajectory if not isinstance(traj, Trajectory): raise ValueError("support only mutable Trajectory") _top = get_topology(traj, top) if input is not None: min_in = input else: min_in = MIN_IN if engine in ['sander', 'pmemd']: _engine = "$AMBERHOME/bin/" + engine else: _engine = engine with tempfolder(): with open("min.in", 'w') as fh: fh.write(min_in) pt.write_parm("tmp.prmtop", _top) for frame in traj: pt.write_traj("tmp_frame.rst7", frame, top=_top, overwrite=True) os.system( "%s -O -p tmp.prmtop -c tmp_frame.rst7.1 -r min.r -i min.in" % (_engine)) f0 = pt.load("min.r", traj.top)[0] # update coords frame.xyz[:] = f0.xyz
def load_ParmEd(parmed_obj, as_traj=False, **kwd): """return pytraj's Topology or Trajectory objects Parameters --------- parmed_obj : ParmEd's Structure object as_traj: bool, default False if True, return pytraj.trajectory.Trajectory if False, return Topology >>> import parmed as pmd >>> import pytraj as pt >>> p = pmd.download_PDB("1l2y") >>> top = pt.load_ParmEd(p) """ import parmed as pmd from parmed.amber import AmberParm if isinstance(parmed_obj, string_types): # reserve **kwd for `structure=True` parmed_obj = pmd.load_file(parmed_obj, **kwd) # faster with tempfolder(): if isinstance(parmed_obj, AmberParm): fname = 'tmp.parm7' else: fname = 'tmppdb.psf' parmed_obj.save(fname) top = _load_Topology(fname) if as_traj: from pytraj import Trajectory coords = parmed_obj.coordinates coords = coords.reshape(1, *coords.shape) return Trajectory(xyz=coords, top=top) else: return top