Ejemplo n.º 1
0
 def testAddAmberParm(self):
     """ Test adding AmberParm-derived instances to ParmList """
     parms = ParmList()
     amber = AmberParm(get_fn('tip4p.parm7'))
     chamber = ChamberParm(get_fn('ala_ala_ala.parm7'))
     amoeba = AmoebaParm(get_fn('nma.parm7'))
     parms.add_parm(amber)
     parms.add_parm(chamber)
     parms.add_parm(amoeba)
     self.assertEqual(len(parms), 3)
     # Test int indexing
     self.assertIs(parms[0], amber)
     self.assertIs(parms[1], chamber)
     self.assertIs(parms[2], amoeba)
     self.assertRaises(IndexError, lambda: parms[3])
     # Test name indexing
     self.assertIs(parms[get_fn('tip4p.parm7')], amber)
     self.assertIs(parms[get_fn('ala_ala_ala.parm7')], chamber)
     self.assertIs(parms[get_fn('nma.parm7')], amoeba)
     self.assertRaises(IndexError, lambda: parms['noparm'])
     # Check that the last added parm is active
     self.assertIs(parms.parm, amoeba)
     # Set a new active topology
     parms.set_new_active(0)
     self.assertIs(parms.parm, amber)
     parms.set_new_active(get_fn('ala_ala_ala.parm7'))
     self.assertIs(parms.parm, chamber)
     self.assertRaises(IndexError, lambda: parms.set_new_active(3))
     self.assertIs(parms.parm, chamber)
Ejemplo n.º 2
0
def get_rmsd(initparas):

    global idxs, mcresids2, atompairs

    #Modify the C4 terms in the prmtop file
    for i in range(0, len(idxs)):
        prmtop.parm_data['LENNARD_JONES_CCOEF'][idxs[i]] = initparas[i]

    #Overwrite the prmtop file
    prmtop.write_parm('OptC4.top')

    #Perform the OpenMM optimization
    #Use AmberParm function to transfer the topology and
    #coordinate file to the object OpenMM can use
    Ambermol = AmberParm('OptC4.top', options.cfile)

    # Create the OpenMM system
    print('Creating OpenMM System')
    if options.simupha == 'gas':
        system = Ambermol.createSystem(nonbondedMethod=app.NoCutoff)
    elif options.simupha == 'liquid':
        system = Ambermol.createSystem(nonbondedMethod=app.PME,
                                       nonbondedCutoff=8.0*u.angstroms,
                                       constraints=app.HBonds,)

    #Add restraints
    force = mm.CustomExternalForce("k*((x-x0)^2+(y-y0)^2+(z-z0)^2)")
    force.addGlobalParameter("k", 200.0)
    force.addPerParticleParameter("x0")
    force.addPerParticleParameter("y0")
    force.addPerParticleParameter("z0")
    #for i in range(0, len(Ambermol.atoms)):
    for i, atom_crd in enumerate(Ambermol.positions):
        #if (Ambermol.atoms[i].residue.number+1 not in mcresids2) and \
        if (i+1 not in mcresids2) and \
          (Ambermol.atoms[i].residue.name not in ['WAT', 'HOH']) and \
          (Ambermol.atoms[i].name in ['CA', 'C', 'N']):
            force.addParticle(i, atom_crd.value_in_unit(u.nanometers))
    system.addForce(force)

    # Create the integrator to do Langevin dynamics
    # Temperature of heat bath, Friction coefficient, Time step
    integrator = mm.LangevinIntegrator(300*u.kelvin, 1.0/u.picoseconds,
                                       1.0*u.femtoseconds,)

    # Define the platform to use; CUDA, OpenCL, CPU, or Reference. Or do not
    # specify the platform to use the default (fastest) platform
    # Create the Simulation object
    if options.platf == 'ref':
        platform = mm.Platform.getPlatformByName('Reference')
        sim = app.Simulation(Ambermol.topology, system, integrator, platform)
    elif options.platf == 'cpu':
        platform = mm.Platform.getPlatformByName('CPU')
        sim = app.Simulation(Ambermol.topology, system, integrator, platform)
    elif options.platf == 'cuda':
        platform = mm.Platform.getPlatformByName('CUDA')
        prop = dict(CudaPrecision='mixed')
        sim = app.Simulation(Ambermol.topology, system, integrator, platform,
                             prop)
    elif options.platf == 'opencl':
        platform = mm.Platform.getPlatformByName('OpenCL')
        prop = dict(CudaPrecision='mixed')
        sim = app.Simulation(Ambermol.topology, system, integrator, platform,
                             prop)

    # Set the particle positions
    sim.context.setPositions(Ambermol.positions)

    # Output the rst file
    restrt = RestartReporter(options.rfile, 100, write_velocities=False)
    sim.reporters.append(restrt)

    # Minimize the energy
    print('Minimizing energy ' + str(options.maxsteps) + ' steps.')
    sim.minimizeEnergy(maxIterations=options.maxsteps)

    # Overwrite the final file
    state = sim.context.getState(getPositions=True, enforcePeriodicBox=True)
    restrt.report(sim, state)

    val_aft_min = []
    crds_aft_min = read_rstf(options.rfile)
    for i in atompairs:
        if len(i) == 2:
            crd1 = crds_aft_min[i[0]-1]
            crd2 = crds_aft_min[i[1]-1]
            bond = calc_bond(crd1, crd2)
            val_aft_min.append(('bond', bond))
        elif len(i) == 3:
            crd1 = crds_aft_min[i[0]-1]
            crd2 = crds_aft_min[i[1]-1]
            crd3 = crds_aft_min[i[2]-1]
            angle = calc_angle(crd1, crd2, crd3)
            val_aft_min.append(('angle', angle))
        elif len(i) == 4:
            crd1 = crds_aft_min[i[0]-1]
            crd2 = crds_aft_min[i[1]-1]
            crd3 = crds_aft_min[i[2]-1]
            crd4 = crds_aft_min[i[3]-1]
            dih = calc_dih(crd1, crd2, crd3, crd4)
            val_aft_min.append(('dih', dih))

    valdiffs = []
    for i in range(0, len(atompairs)):
        if val_bf_min[i][0] == 'bond':
            valdiff = abs(val_aft_min[i][1] - val_bf_min[i][1]) * 1.0 / 100.0
        elif val_bf_min[i][0] == 'angle':
            valdiff = abs(val_aft_min[i][1] - val_bf_min[i][1]) * 1.0 / 2.0
        elif val_bf_min[i][0] == 'dih':
            valdiff = abs(val_aft_min[i][1] - val_bf_min[i][1])
            if (360.0 - valdiff < valdiff):
                valdiff = 360.0 - valdiff
        valdiffs.append(valdiff)

    fnldiff = numpy.sum(valdiffs)
    print(fnldiff)

    return fnldiff
Ejemplo n.º 3
0
from __future__ import division, print_function

import sys

# OpenMM Imports
import simtk.openmm as mm
import simtk.openmm.app as app

# ParmEd Imports
from chemistry.amber import AmberParm
from chemistry.openmm.reporters import StateDataReporter, NetCDFReporter
from chemistry import unit as u

# Load the Amber files
print('Loading Amber files...')
ala5_gas = AmberParm('ala5_gas.parm7', 'ala5_gas.rst7')

# Create the OpenMM system
print('Creating OpenMM System')
system = ala5_gas.createSystem(
    nonbondedMethod=app.NoCutoff,
    constraints=app.HBonds,
    implicitSolvent=app.GBn2,
    implicitSolventSaltConc=0.1 * u.moles / u.liter,
)

# Create the integrator to do Langevin dynamics
integrator = mm.LangevinIntegrator(
    300 * u.kelvin,  # Temperature of heat bath
    1.0 / u.picoseconds,  # Friction coefficient
    2.0 * u.femtoseconds,  # Time step
Ejemplo n.º 4
0
from __future__ import division, print_function

import sys

# OpenMM Imports
import simtk.openmm as mm
import simtk.openmm.app as app

# ParmEd Imports
from chemistry.amber import AmberParm
from chemistry.openmm.reporters import StateDataReporter, NetCDFReporter
from chemistry import unit as u

# Load the Amber files
print('Loading Amber files...')
ala5_gas = AmberParm('ala5_gas.parm7', 'ala5_gas.rst7')

# Create the OpenMM system
print('Creating OpenMM System')
system = ala5_gas.createSystem(nonbondedMethod=app.NoCutoff,
                               constraints=app.HBonds, implicitSolvent=app.GBn2,
                               implicitSolventSaltConc=0.1*u.moles/u.liter,
)

# Create the integrator to do Langevin dynamics
integrator = mm.LangevinIntegrator(
                        300*u.kelvin,       # Temperature of heat bath
                        1.0/u.picoseconds,  # Friction coefficient
                        2.0*u.femtoseconds, # Time step
)
Ejemplo n.º 5
0
from __future__ import division, print_function

import sys

# OpenMM Imports
import simtk.openmm as mm
import simtk.openmm.app as app

# ParmEd Imports
from chemistry.amber import AmberParm
from chemistry.openmm.reporters import StateDataReporter, NetCDFReporter
from chemistry import unit as u

# Load the Amber files
print('Loading AMBER files...')
ala2_solv = AmberParm('ala2_solv.parm7', 'ala2_solv.rst7')

# Create the OpenMM system
print('Creating OpenMM System')
system = ala2_solv.createSystem(nonbondedMethod=app.PME,
                                nonbondedCutoff=8.0*u.angstroms,
                                constraints=app.HBonds,
)

# Create the integrator to do Langevin dynamics
integrator = mm.LangevinIntegrator(
                        300*u.kelvin,       # Temperature of heat bath
                        1.0/u.picoseconds,  # Friction coefficient
                        2.0*u.femtoseconds, # Time step
)
Ejemplo n.º 6
0
def get_rmsd(initparas):

    global idxs

    print(initparas)

    #Modify the C4 terms in the prmtop file
    for i in range(0, len(idxs)):
      prmtop.parm_data['LENNARD_JONES_CCOEF'][idxs[i]] = initparas[i]

    #Overwrite the prmtop file
    prmtop.write_parm('OptC4.top')

    #Perform the OpenMM optimization
    #Use AmberParm function to transfer the topology and
    #coordinate file to the object OpenMM can use
    Ambermol = AmberParm('OptC4.top', options.cfile)

    # Create the OpenMM system
    print('Creating OpenMM System')
    if options.simupha == 'gas':
      system = Ambermol.createSystem(nonbondedMethod=app.NoCutoff)
    elif options.simupha == 'liquid':
      system = Ambermol.createSystem(nonbondedMethod=app.PME,
                                     nonbondedCutoff=8.0*u.angstroms,
                                     constraints=app.HBonds,)

    # Create the integrator to do Langevin dynamics
    # Temperature of heat bath, Friction coefficient, Time step
    integrator = mm.LangevinIntegrator(300*u.kelvin, 1.0/u.picoseconds,
                                       1.0*u.femtoseconds,)

    # Define the platform to use; CUDA, OpenCL, CPU, or Reference. Or do not
    # specify the platform to use the default (fastest) platform
    # Create the Simulation object
    if options.platf == 'ref':
       platform = mm.Platform.getPlatformByName('Reference')
       sim = app.Simulation(Ambermol.topology, system, integrator, platform)
    elif options.platf == 'cpu':
       platform = mm.Platform.getPlatformByName('CPU')
       sim = app.Simulation(Ambermol.topology, system, integrator, platform)
    elif options.platf == 'cuda':
       platform = mm.Platform.getPlatformByName('CUDA')
       prop = dict(CudaPrecision='mixed')
       sim = app.Simulation(Ambermol.topology, system, integrator, platform,
                            prop)
    elif options.platf == 'opencl':
       platform = mm.Platform.getPlatformByName('OpenCL')
       prop = dict(CudaPrecision='mixed')
       sim = app.Simulation(Ambermol.topology, system, integrator, platform,
                            prop)

    # Set the particle positions
    sim.context.setPositions(Ambermol.positions)

    # Output the rst file
    restrt = RestartReporter(options.rfile, 100, write_velocities=False)
    sim.reporters.append(restrt)

    # Minimize the energy
    print('Minimizing energy ' + str(options.maxsteps) + ' steps.')
    sim.minimizeEnergy(maxIterations=options.maxsteps)

    # Overwrite the final file
    state = sim.context.getState(getPositions=True, enforcePeriodicBox=True)
    restrt.report(sim, state)

    print('Calculate the RMSD')
    # Perform the RMSD calcualtion, using ptraj in AmberTools
    os.system("cpptraj -p OptC4.top -i OptC4_ptraj.in > OptC4_ptraj.out")

    ptrajof = open('OptC4_rmsd.txt', 'r')
    ln = 1
    for line in ptrajof:
      if ln == 3:
        rmsd = float(line[12:21])
      ln += 1
    ptrajof.close()

    print('RMSD is: ', rmsd)
    return rmsd
Ejemplo n.º 7
0
    has_openmm = False
from chemistry import unit as u
from chemistry.amber import (HAS_NETCDF, AmberParm, AmberMdcrd,
                             AmberAsciiRestart, NetCDFTraj, NetCDFRestart)
from chemistry.openmm.reporters import (NetCDFReporter, MdcrdReporter,
                                        ProgressReporter, RestartReporter,
                                        StateDataReporter,
                                        EnergyMinimizerReporter)
import os
import utils
import unittest

get_fn = utils.get_fn
skipIf = utils.skipIf

amber_gas = AmberParm(get_fn('ash.parm7'), get_fn('ash.rst7'))
amber_solv = AmberParm(get_fn('solv.prmtop'), get_fn('solv.rst7'))


@skipIf(not has_openmm, "Cannot test without OpenMM")
class TestStateDataReporter(unittest.TestCase):
    def setUp(self):
        if not os.path.isdir(get_fn('writes')):
            os.makedirs(get_fn('writes'))
        else:
            for f in os.listdir(get_fn('writes')):
                os.unlink(get_fn(f, written=True))

    def tearDown(self):
        for f in os.listdir(get_fn('writes')):
            os.unlink(get_fn(f, written=True))
Ejemplo n.º 8
0
#!/usr/bin/env python
from __future__ import division

from simtk.unit import *
from simtk.openmm import *
from simtk.openmm.app import *

from chemistry.amber import AmberParm

parm = AmberParm('4LYT.solv10.parm7', '4LYT.solv10.equil.rst7')

system = parm.createSystem(nonbondedCutoff=8.0*angstroms, nonbondedMethod=PME,
                           rigidWater=True)
integrator = VerletIntegrator(1.0e-10*picoseconds)

context = Context(system, integrator)
context.setPositions(parm.positions)

state = context.getState(getEnergy=True)