Sophia Tang
Initial commit with LFS
7efee70
Raw
History Blame Contribute Delete
1.96 kB
import openmm as mm
import openmm.unit as unit
from openmm import app
from openmmtools.integrators import VVVRIntegrator
from potentials.MoleculePotential import MoleculePotential
class PolyPotentialMD(MoleculePotential):
def __init__(self, start_file, index, reset_steps=100, save_file=None):
super().__init__(start_file, index, reset_steps, save_file)
def setup(self):
pdb = app.PDBFile(self.start_file)
forcefield = app.ForceField('amber/protein.ff14SBonlysc.xml',
'implicit/gbn2.xml')
system = forcefield.createSystem(
pdb.topology,
nonbondedMethod=app.NoCutoff,
nonbondedCutoff=1.0 * unit.nanometers,
constraints=app.HBonds,
rigidWater=True,
ewaldErrorTolerance=0.0005
)
external_force = mm.CustomExternalForce("k*(fx*x + fy*y + fz*z)")
# creating the parameters
external_force.addGlobalParameter("k", 1000)
external_force.addPerParticleParameter("fx")
external_force.addPerParticleParameter("fy")
external_force.addPerParticleParameter("fz")
system.addForce(external_force)
for i in range(len(pdb.positions)):
external_force.addParticle(i, [0, 0, 0])
integrator = VVVRIntegrator(
300 * unit.kelvin, # temp
1.0 / unit.picoseconds, # collision rate
2.0 * unit.femtoseconds) # timestep
integrator.setConstraintTolerance(0.00001)
platform = mm.Platform.getPlatformByName('CUDA')
properties = {'DeviceIndex': '0', 'Precision': 'mixed'}
simulation = app.Simulation(pdb.topology, system, integrator,
platform, properties)
simulation.context.setPositions(pdb.positions)
return pdb, simulation, external_force
def get_position_file(self):
return f"{self.save_file}/PolyPositions"