コード例 #1
0
ファイル: qmmm_pol.py プロジェクト: CCBatIIT/modelingworkshop
def _openmm_init(fname_prmtop, platformName=None):

    prmtop = app.AmberPrmtopFile(fname_prmtop)
    system = prmtop.createSystem(nonbondedMethod=app.NoCutoff,
                                 constraints=app.HBonds,
                                 implicitSolvent=None)
    time_step = 1.0  # fs
    integrator = omm.LangevinIntegrator(300.0 * unit.kelvin,
                                        1.0 / unit.picoseconds,
                                        time_step * unit.femtoseconds)

    platform = omm.Platform.getPlatformByName('Reference')
    properties = {}
    if platformName == 'OpenCL':
        platform = omm.Platform.getPlatformByName('OpenCL')
        properties = {'OpenCLPrecision': 'mixed'}
    if platformName == 'CUDA':
        platform = omm.Platform.getPlatformByName('CUDA')
        properties = {'CudaPrecision': 'mixed'}

    simulation = app.Simulation(prmtop.topology, system, integrator, platform,
                                properties)

    charge_list = prmtop._prmtop.getCharges()
    natom = prmtop._prmtop.getNumAtoms()
    nonbond = np.array(prmtop._prmtop.getNonbondTerms())

    return simulation, natom, charge_list, nonbond
コード例 #2
0
def NPT1(system, coordinates, velocities, prmtop):
    # Select Integrator
    integrator = mm.LangevinIntegrator(TEMPERATURE, NPT_FRICTION,
                                       NPT1_TIME_STEP)
    # Set Barostat
    system.addForce(
        mm.MonteCarloBarostat(PRESSURE, TEMPERATURE, BAROSTAT_FREQUENCY))
    # Set Simulation
    simulation = app.Simulation(prmtop.topology, system, integrator)
    # Set Position and velocities
    simulation.context.setPositions(coordinates)
    simulation.context.setVelocities(velocities)
    print('First NPT equilibration...\n')
    simulation.step(NPT1_STEPS)
    # Get and return coordinates, velocities and box vectors
    state = simulation.context.getState(getPositions=True,
                                        getVelocities=True,
                                        getEnergy=True)
    coords = state.getPositions()
    velocities = state.getVelocities()
    box = state.getPeriodicBoxVectors()

    # Save a PDB to use as input for yank and future splitting
    #positions = state.getPositions()
    #PDBFile.writeFile( simulation.topology, positions, open( pdbfile, 'w' ) )

    return coords, velocities, box
コード例 #3
0
ファイル: optimize.py プロジェクト: oliviadunne/backmap
 def create_sim(self):
     self.system = self.top.createSystem(nonbondedMethod=app.NoCutoff,
                                         constraints=None)
     self.integrator = openmm.VerletIntegrator(0.001 * unit.picoseconds)
     self.simulation = app.Simulation(self.top.topology, self.system,
                                      self.integrator)
     self.simulation.context.setPositions(self.trj.openmm_positions(0))
コード例 #4
0
def _create_torsion_sim(
    periodicity: int = 2, phase=0 * omm_angle_unit, k=10.0 * omm_energy_unit
) -> app.Simulation:
    """Create a 4-particle OpenMM Simulation containing only a PeriodicTorsionForce"""
    system = mm.System()

    # add 4 particles of unit mass
    for _ in range(4):
        system.addParticle(1)

    # add torsion force to system
    force = mm.PeriodicTorsionForce()
    force.addTorsion(0, 1, 2, 3, periodicity, phase, k)
    system.addForce(force)

    # create openmm Simulation, which requires a Topology and Integrator
    topology = app.Topology()
    chain = topology.addChain()
    residue = topology.addResidue("torsion", chain)
    for name in ["a", "b", "c", "d"]:
        topology.addAtom(name, "C", residue)
    integrator = mm.VerletIntegrator(1.0)
    sim = app.Simulation(topology, system, integrator)

    return sim
コード例 #5
0
def minimization():
    # Load OpenMM System
    file = open(xml_filename, 'r')
    serialized_system = file.read()
    system = XmlSerializer.deserialize(serialized_system)

    # Select Integrator
    integrator = mm.LangevinIntegrator(TEMPERATURE, MIN_FRICTION,
                                       MIN_TIME_STEP)

    # Set Simulation
    simulation = app.Simulation(pdb.topology, system, integrator, MIN_PLATFORM)

    # Set Position
    simulation.context.setPositions(pdb.positions)

    state = simulation.context.getState(getEnergy=True)

    if np.isnan(state.getPotentialEnergy() / kilojoule_per_mole):
        raise ValueError("The Potential Energy before minimization is NaN")

    # Minimization
    print('Minimizing...\n')
    simulation.minimizeEnergy(tolerance=MIN_TOLERANCE, maxIterations=MIN_STEPS)

    state = simulation.context.getState(getPositions=True, getEnergy=True)

    if np.isnan(state.getPotentialEnergy() / kilojoule_per_mole):
        raise ValueError("The Potential Energy after minimization is NaN")

    coords = state.getPositions()

    return coords
コード例 #6
0
    def equilibrate(self):
        
        if os.path.exists(self.equil_pdb_filename):
            return

        prmtop = app.AmberPrmtopFile(self.prmtop_filename)
        inpcrd = app.AmberInpcrdFile(self.inpcrd_filename)

        system = prmtop.createSystem(nonbondedMethod=app.PME, nonbondedCutoff=CUTOFF, constraints=app.HBonds)
        integrator = mm.LangevinIntegrator(self.temperature, EQUIL_FRICTION, EQUIL_TIMESTEP)
        system.addForce(mm.MonteCarloBarostat(PRESSURE, self.temperature, BAROSTAT_FREQUENCY))

        simulation = app.Simulation(prmtop.topology, system, integrator)
        simulation.context.setPositions(inpcrd.positions)

        state = simulation.context.getState(getEnergy=True)
        print(state.getPotentialEnergy())
        
        print('Minimizing.')
        simulation.minimizeEnergy()
        
        state = simulation.context.getState(getEnergy=True)
        print(state.getPotentialEnergy())

        simulation.context.setVelocitiesToTemperature(self.temperature)
        print('Equilibrating.')

        simulation.reporters.append(app.DCDReporter(self.equil_dcd_filename, OUTPUT_FREQUENCY_EQUIL))
        simulation.step(N_EQUIL_STEPS)

        # Re-write a better PDB with correct box sizes.
        traj = md.load(self.equil_dcd_filename, top=self.prmtop_filename)[-1]
        traj.save(self.equil_pdb_filename)
コード例 #7
0
def MinimizedEnergy(filepath):
    prmtop = app.AmberPrmtopFile(f'{filepath}.prmtop')
    inpcrd = app.AmberInpcrdFile(f'{filepath}.inpcrd')
    system = prmtop.createSystem(implicitSolvent=app.GBn2,
                                 nonbondedMethod=app.CutoffNonPeriodic,
                                 nonbondedCutoff=1.0*unit.nanometers,
                                 constraints=app.HBonds,
                                 rigidWater=True,
                                 ewaldErrorTolerance=0.0005)

    integrator = mm.LangevinIntegrator(300*unit.kelvin,
                                       1.0/unit.picoseconds,
                                       2.0*unit.femtoseconds)
    integrator.setConstraintTolerance(0.00001)
    # TODO: This should just recognize whatever the computer is capable of, not force CUDA.
    platform = mm.Platform.getPlatformByName('CUDA')
    # TODO: I am not sure if mixed precision is necessary. It dramatically changes the results.
    properties = {'CudaPrecision': 'mixed'}
    
    simulation = app.Simulation(prmtop.topology, system, integrator, platform)
    simulation.context.setPositions(inpcrd.positions)
    
    simulation.minimizeEnergy()
    energy = simulation.context.getState(getEnergy=True).getPotentialEnergy().value_in_unit(unit.kilojoule/unit.mole)
    return energy
コード例 #8
0
ファイル: test_cubes.py プロジェクト: zeromtmu/openmm_orion
    def calculate_eng(self, oe_mol):
        # Extract starting MD data from OEMol
        mdData = utils.MDData(oe_mol)
        topology = mdData.topology
        positions = mdData.positions
        structure = mdData.structure
        box = mdData.box

        # OpenMM system
        system = structure.createSystem(nonbondedMethod=eval("app.%s" % self.cube.args.nonbondedMethod),
                                        nonbondedCutoff=self.cube.args.nonbondedCutoff * unit.angstroms,
                                        constraints=eval("app.%s" % self.cube.args.constraints))
        # OpenMM Integrator
        integrator = openmm.LangevinIntegrator(self.cube.args.temperature * unit.kelvin,
                                               1.0 / unit.picoseconds, 0.002 * unit.picoseconds)
        # Set Simulation
        simulation = app.Simulation(topology, system, integrator)

        # Set Positions
        simulation.context.setPositions(positions)

        # Set Box dimensions
        simulation.context.setPeriodicBoxVectors(box[0], box[1], box[2])

        # Collect the OpenMM state energy info
        state = simulation.context.getState(getEnergy=True)

        # Potential Energy
        peng = state.getPotentialEnergy()

        return peng
コード例 #9
0
    def _initialize_simulation(self):
        """
        """

        self._system = self._forcefield.createSystem(
            self.topology.to_openmm(),
            nonbondedMethod=app.CutoffNonPeriodic,
            nonbondedCutoff=1.0 * unit.nanometers,
            constraints=app.HBonds,
            rigidWater=True,
            ewaldErrorTolerance=0.0005)

        self._integrator = mm.LangevinIntegrator(300 * unit.kelvin,
                                                 1.0 / unit.picoseconds,
                                                 2.0 * unit.femtoseconds)
        self._integrator.setConstraintTolerance(0.00001)

        mm.Platform.getPlatformByName(self._platform)
        self._simulation = app.Simulation(self.topology.to_openmm(),
                                          self._system, self._integrator)
        #self._platform)
        # self._properties)
        self._simulation.context.setPositions(self.positions)

        self._simulation.minimizeEnergy()
        self._simulation.context.setVelocitiesToTemperature(300 * unit.kelvin)

        return
コード例 #10
0
def test_membraneModeller():
    # pdb file containing a solvated single lipid molecule
    pdb = PDBFile('solvated-lipid.pdb')
    modeller = Modeller(pdb.topology,pdb.positions)
    modeller.modifyTopology()
    forcefield = ForceField('amber14-all.xml', 'amber14/tip3pfb.xml')
    modeller.addHydrogens(forcefield=forcefield)

    system = forcefield.createSystem(modeller.topology,
                                     nonbondedMethod=app.PME,
                                     rigidWater=True,
                                     nonbondedCutoff=1*unit.nanometer)
    integrator = mm.VerletIntegrator(0.5*unit.femtoseconds)
    platform = mm.Platform.getPlatformByName('Reference')
    simulation = app.Simulation(modeller.topology, system, integrator, platform)
    simulation.context.setPositions(modeller.positions)
    simulation.context.setVelocitiesToTemperature(300*unit.kelvin)
    # Minimize the system after adding hydrogens
    tolerance = 0.1*unit.kilojoules_per_mole/unit.angstroms
    simulation.minimizeEnergy(tolerance=tolerance,maxIterations=200)
    simulation.reporters.append(app.StateDataReporter('relax-hydrogens.log',
                                                       1000,
                                                       step=True,
                                                       potentialEnergy=True))
    simulation.step(1000)
コード例 #11
0
ファイル: md.py プロジェクト: pk-organics/ommprotocol
    def simulation(self):
        if self._simulation is None:
            platform = self.platform
            try:
                sim = self._simulation = app.Simulation(self.handler.topology, self.system,
                                                        self.integrator, *platform)
            except Exception as e:
                template = '{}. Try with: {}.'
                if 'Illegal property name' in str(e):
                    msg = template.format(e, ', '.join(platform[0].getPropertyNames()))
                    raise ValueError(msg)
                elif 'There is no registered Platform' in str(e):
                    msg = template.format(e, ', '.join(available_platforms()))
                    raise ValueError(msg)
                raise e
            # Box vectors
            box = self.box if self.box is not None else self.handler.box
            if box is not None:
                sim.context.setPeriodicBoxVectors(*box)

            # Positions
            pos = self.positions if self.positions is not None else self.handler.positions
            if pos is None:
                raise ValueError('Positions must be set to start a simulation.')
            sim.context.setPositions(pos)

            # Velocities
            vel = self.velocities if self.velocities is not None else self.handler.velocities
            if vel is not None:
                sim.context.setVelocities(vel)
            else:
                sim.context.setVelocitiesToTemperature(self.temperature*u.kelvin)
        return self._simulation
コード例 #12
0
ファイル: ffcompare.py プロジェクト: dkyu/off-ffcompare
def minimizeOpenMM(Topology, System, Positions):
    """
    Minimize molecule with specified topology, system, and positions
       using OpenMM. Return the positions of the optimized moelcule.

    Parameters
    ----------
    Topology
    System
    Positions

    Returns
    -------
    boolean True if the function successfully completed, False otherwise
    
    """

    # need to create integrator but don't think it's used
    integrator = mm.LangevinIntegrator(
            300.0 * u.kelvin,
            1.0 / u.picosecond,
            2.0 * u.femtosecond)
    
    simulation = app.Simulation(Topology, System, integrator)
    simulation.context.setPositions(Positions)
    #simulation.minimizeEnergy()
    simulation.minimizeEnergy(tolerance=5.0E-9, maxIterations=1500)
    
    Topology.positions = simulation.context.getState(getPositions=True).getPositions()
    
    return Topology.positions
コード例 #13
0
def configure_amber_explicit(
    pdb_file: str,
    top_file: str,
    dt_ps: float,
    temperature_kelvin: float,
    heat_bath_friction_coef: float,
    platform: simtk.openmm.Platform,
    platform_properties: dict,
) -> Tuple[simtk.openmm.app.Simulation, parmed.Structure]:

    # Configure system
    top = parmed.load_file(top_file, xyz=pdb_file)
    system = top.createSystem(
        nonbondedMethod=app.PME,
        nonbondedCutoff=1.0 * u.nanometer,
        constraints=app.HBonds,
    )

    # Congfigure integrator
    integrator = omm.LangevinIntegrator(
        temperature_kelvin * u.kelvin,
        heat_bath_friction_coef / u.picosecond,
        dt_ps * u.picosecond,
    )
    system.addForce(omm.MonteCarloBarostat(1 * u.bar, temperature_kelvin * u.kelvin))

    sim = app.Simulation(
        top.topology, system, integrator, platform, platform_properties
    )

    # Return simulation and handle to coordinates
    return sim, top
コード例 #14
0
def minimizeOpenMM(Topology, System, Positions):
    """

    Minimize molecule with specified topology, system, and positions
       using OpenMM. Return the positions of the optimized moelcule.

    Parameters
    ----------
    Topology:  OpenMM topology
    System:    OpenMM system
    Positions: OpenMM positions

    Returns
    -------
    concat_coords: list of positions ready to add to an OEMol

    """

    # need to create integrator but don't think it's used
    integrator = mm.LangevinIntegrator(
            300.0 * u.kelvin,
            1.0 / u.picosecond,
            2.0 * u.femtosecond)

    simulation = app.Simulation(Topology, System, integrator)
    simulation.context.setPositions(Positions)
    simulation.minimizeEnergy(tolerance=5.0E-9, maxIterations=1500)

    positions =  simulation.context.getState(getPositions=True).getPositions(asNumpy=True)
    positions = positions/u.angstroms
    coordlist = list()
    for atom_coords in positions:
        coordlist += [i for i in atom_coords]
    return coordlist
コード例 #15
0
    def run_raw_protocol(self):

        integrator = mm.LangevinIntegrator(50 * u.kelvin,
                                           self._FRICTION_COEFFICIENT,
                                           self._TIMESTEP)

        simulation = app.Simulation(self.topology, self.system, integrator)
コード例 #16
0
    def _calc_energy(self, coords):
        """
        Given some coords, it calculates periodic torsion contribution
        to the energy, according to OpenMM.

        Parameters
        ----------
        coords : a simtk.unit.Quantity object
            The coordinates of a certain conformation of the molecule

        Returns
        -------
        omm_energy : a simtk.unit.Quantity
            The dihedral energy from OpenMM
        """
        from simtk.openmm import app, LangevinIntegrator, unit

        omm_idx_to_force = {}
        for idx, force in enumerate(self.omm_system.getForces()):
            force.setForceGroup(idx)
            omm_idx_to_force[str(type(force).__name__)] = idx

        omm_integrator = LangevinIntegrator(300 * unit.kelvin,
                                            1 / unit.picosecond,
                                            0.002 * unit.picoseconds)
        omm_simulation = app.Simulation(self.omm_top, self.omm_system,
                                        omm_integrator)
        omm_simulation.context.setPositions(coords)

        omm_energy = omm_simulation.context.getState(
            getEnergy=True, groups={omm_idx_to_force['PeriodicTorsionForce']
                                    }).getPotentialEnergy()

        return omm_energy
コード例 #17
0
    def simulation(self):
        """
        Build a new OpenMM simulation if not yet defined and return it

        Notes
        -----
        self.topology must be defined previously!
        Use self.chimera_molecule_to_openmm_topology to set it.

        """
        if self._simulation is None:
            system = self.forcefield.createSystem(
                self.topology,
                nonbondedMethod=openmm_app.CutoffNonPeriodic,
                nonbondedCutoff=1.0 * unit.nanometers,
                rigidWater=True,
                constraints=None)
            integrator = openmm.VerletIntegrator(0.001)
            if self.platform is not None:
                platform = openmm.Platform.getPlatformByName(self.platform),
            else:
                platform = ()
            self._simulation = openmm_app.Simulation(self.topology, system,
                                                     integrator, *platform)
        return self._simulation
コード例 #18
0
ファイル: dipole.py プロジェクト: schwancr/water
    def __init__(self, n_waters=None, topology=None, n_procs=1):

        if hasattr(topology, 'to_openmm'):
            self._top = topology.to_openmm()
        else:
            self._top = topology

        if n_waters is None:
            self.n_waters = n_waters
        else:
            self.n_waters = int(n_waters)

        self.n_procs = np.int(n_procs)

        forcefield = app.ForceField('iamoeba.xml')

        self._top.setUnitCellDimensions([10, 10, 10])
        system = forcefield.createSystem(self._top,
                                         nonbondedMethod=app.PME,
                                         polarization='direct')
        self._amoeba_force = [
            f for f in system.getForces()
            if isinstance(f, mm.openmm.AmoebaMultipoleForce)
        ][0]
        integrator = mm.LangevinIntegrator(300 * unit.kelvin,
                                           1.0 / unit.picoseconds,
                                           2.0 * unit.femtoseconds)
        platform = mm.Platform.getPlatformByName('CPU')

        self._sim = app.Simulation(self._top, system, integrator, platform)
        self._context = self._sim.context
コード例 #19
0
    def production(self):  

        if os.path.exists(self.production_dcd_filename) and os.path.exists(self.production_data_filename):
            return

        prmtop = app.AmberPrmtopFile(self.prmtop_filename)
        pdb = app.PDBFile(self.equil_pdb_filename)

        system = prmtop.createSystem(nonbondedMethod=app.PME, nonbondedCutoff=CUTOFF, constraints=app.HBonds)

        integrator = mm.LangevinIntegrator(self.temperature, FRICTION, TIMESTEP)
        system.addForce(mm.MonteCarloBarostat(PRESSURE, self.temperature, BAROSTAT_FREQUENCY))

        simulation = app.Simulation(prmtop.topology, system, integrator)
        
        simulation.context.setPositions(pdb.positions)
        simulation.context.setPeriodicBoxVectors(*pdb.topology.getPeriodicBoxVectors())
        simulation.context.setVelocitiesToTemperature(self.temperature)
        
        print('Production.')
        
        simulation.reporters.append(app.DCDReporter(self.production_dcd_filename, OUTPUT_FREQUENCY))
        simulation.reporters.append(app.StateDataReporter(self.production_data_filename, OUTPUT_DATA_FREQUENCY, step=True, potentialEnergy=True, temperature=True, density=True))

        converged = False
        while not converged:
            simulation.step(N_STEPS)
            d = pd.read_csv(self.production_data_filename, names=["step", "U", "Temperature", "Density"], skiprows=1)
            density_ts = np.array(d.Density)
            [t0, g, Neff] = ts.detectEquilibration(density_ts, nskip=1000)
            density_ts = density_ts[t0:]
            density_mean_stderr = density_ts.std() / np.sqrt(Neff)
            if density_mean_stderr < STD_ERROR_TOLERANCE:
                converged = True
コード例 #20
0
 def __setstate__(self, state):
     from simtk.openmm import app
     if 'sim_args' in state:
         assert 'sim' not in state
         args = state.pop('sim_args')
         state['sim'] = app.Simulation(*args)
     self.__dict__.update(state)
    def test_water256_periodic(self):
        nonbondedMethod = app.PME
        expected_energy = -2270.88890
        pdb = app.PDBFile("pdb_files/water256_integration_test.pdb")
        forcefield = app.ForceField("../mbpol.xml")

        nonbondedCutoff = 0.9 * unit.nanometer

        if (nonbondedMethod == app.PME):
            boxDimension = 19.3996888399961804 / 10.
            boxsize = [boxDimension, boxDimension, boxDimension]
            pdb.topology.setUnitCellDimensions(boxsize)

        system = forcefield.createSystem(pdb.topology,
                                         nonbondedMethod=nonbondedMethod,
                                         nonbondedCutoff=nonbondedCutoff)

        integrator = mm.LangevinIntegrator(0.0, 0.1, 0.01)
        platform = mm.Platform.getPlatformByName('Reference')
        simulation = app.Simulation(pdb.topology, system, integrator, platform)
        simulation.context.setPositions(pdb.positions)
        simulation.context.computeVirtualSites()
        state = simulation.context.getState(getForces=True,
                                            getEnergy=True,
                                            getPositions=True)
        potential_energy = state.getPotentialEnergy()
        potential_energy.in_units_of(unit.kilocalorie_per_mole)

        self.assertTrue(
            abs(
                potential_energy.in_units_of(unit.kilocalorie_per_mole)._value
                - expected_energy) < 20)
コード例 #22
0
 def testProgressReporter(self):
     """ Test ProgressReporter with various options """
     system = amber_gas.createSystem()
     integrator = mm.LangevinIntegrator(300 * u.kelvin, 5.0 / u.picoseconds,
                                        1.0 * u.femtoseconds)
     sim = app.Simulation(amber_gas.topology, system, integrator)
     sim.context.setPositions(amber_gas.positions)
     sim.reporters.append(
         ProgressReporter(get_fn('progress_reporter.dat', written=True),
                          10,
                          500,
                          step=True,
                          time=True,
                          potentialEnergy=True,
                          kineticEnergy=True,
                          totalEnergy=True,
                          temperature=True,
                          volume=True,
                          density=True,
                          systemMass=None))
     sim.step(500)
     self.assertEqual(len(os.listdir(get_fn('writes'))), 1)
     text = open(get_fn('progress_reporter.dat', written=True), 'r').read()
     self.assertTrue('Estimated time to completion' in text)
     self.assertTrue('Total Energy' in text)
     self.assertTrue('Potential Energy' in text)
     self.assertTrue('Kinetic Energy' in text)
     self.assertTrue('Temperature' in text)
コード例 #23
0
 def OMMsimulation(self):
     from simtk.openmm import app
     if not hasattr(self, '_simulation'):
         self._simulation = app.Simulation(self.modeller.topology,
                                           self.OMMsystem, self.integrator)
         self._simulation.context.setPositions(self.modeller.positions)
     return self._simulation
コード例 #24
0
def test_porin_membrane_system():
    """Test the addition of a ligand to a solvated porin"""
    # pdb file corresponding to a solvated porin
    pdb = PDBFile(
        os.path.join(os.path.dirname(__file__),
                     '../data/porin/solvated-porin.pdb'))
    modeller = app.Modeller(pdb.topology, pdb.positions)
    forcefield = ForceField('amber14-all.xml', 'amber14/tip3pfb.xml')
    platform = mm.Platform.getPlatformByName('CPU')
    modeller.addHydrogens(forcefield=forcefield)
    # rigidWater False is required for ParMed to access water paramters
    system_md = forcefield.createSystem(modeller.topology,
                                        nonbondedMethod=app.PME,
                                        rigidWater=False,
                                        nonbondedCutoff=1 * unit.nanometer)
    ligand_system = PorinMembraneSystem('comp7',
                                        system_md,
                                        modeller.topology,
                                        modeller.positions,
                                        platform,
                                        tolerance=1 * unit.kilojoule /
                                        unit.mole,
                                        max_iterations=200)
    integrator = mm.LangevinIntegrator(300 * unit.kelvin,
                                       1.0 / unit.picoseconds,
                                       2 * unit.femtosecond)
    simulation = app.Simulation(ligand_system.structure.topology,
                                ligand_system.system, integrator, platform)
    simulation.context.setPositions(ligand_system.structure.positions)
    state = simulation.context.getState(getEnergy=True)
    pe = state.getPotentialEnergy()._value
    assert pe < 0.0
コード例 #25
0
def npt2(system, coordinates, velocities, box, prmtop, pdbfile):
    # Select Integrator
    integrator = mm.LangevinIntegrator(TEMPERATURE, NPT_FRICTION,
                                       NPT2_TIME_STEP)
    # Set Barostat
    system.addForce(
        mm.MonteCarloBarostat(PRESSURE, TEMPERATURE, BAROSTAT_FREQUENCY))
    # Set Simulation
    simulation = app.Simulation(prmtop.topology, system, integrator)
    # Set Position and velocities
    simulation.context.setPositions(coordinates)
    if velocities is not None:
        simulation.context.setVelocities(velocities)
    else:  #reset
        simulation.context.setVelocitiesToTemperature(TEMPERATURE)
    # Set Box
    simulation.context.setPeriodicBoxVectors(box[0], box[1], box[2])

    print('Second NPT equilibration...\n')

    simulation.step(NPT2_STEPS)
    state = simulation.context.getState(getPositions=True,
                                        getVelocities=True,
                                        getForces=True,
                                        getEnergy=True,
                                        enforcePeriodicBox=True)

    # Save a PDB to use as input for yank and future splitting
    positions = state.getPositions()
    PDBFile.writeFile(simulation.topology, positions, open(pdbfile, 'w'))

    return state
コード例 #26
0
ファイル: openmm.py プロジェクト: boyuezhong/QUBEKit
    def openmm_system(self):
        """Initialise the OpenMM system we will use to evaluate the energies."""

        # Load the initial coords into the system and initialise
        pdb = app.PDBFile(self.pdb)
        forcefield = app.ForceField(self.xml)
        modeller = app.Modeller(pdb.topology, pdb.positions)  # set the initial positions from the pdb
        self.system = forcefield.createSystem(modeller.topology, nonbondedMethod=app.NoCutoff, constraints=None)

        # Check what combination rule we should be using from the xml
        xmlstr = open(self.xml).read()
        # check if we have opls combination rules if the xml is present
        try:
            self.combination = ET.fromstring(xmlstr).find('NonbondedForce').attrib['combination']
        except AttributeError:
            pass
        except KeyError:
            pass

        if self.combination == 'opls':
            print('OPLS combination rules found in xml file')
            self.opls_lj()

        temperature = constants.STP * unit.kelvin
        integrator = mm.LangevinIntegrator(temperature, 5 / unit.picoseconds, 0.001 * unit.picoseconds)

        self.simulation = app.Simulation(modeller.topology, self.system, integrator)
        self.simulation.context.setPositions(modeller.positions)
コード例 #27
0
ファイル: standard.py プロジェクト: dallonasnes/RLMM
    def __init__(self, config_: Config, old_sampler_state=None):
        """

        :param systemLoader:
        :param config:
        """
        self._times = None
        self.config = config_
        self.logger = make_message_writer(self.config.verbose, self.__class__.__name__)
        if self.config.systemloader.system is None:
            self.system = self.config.systemloader.get_system(self.config.parameters.createSystem)
            self.topology = self.config.systemloader.topology
            positions, velocities = self.config.systemloader.get_positions(), None

        else:
            self.system = self.config.systemloader.system
            self.topology = self.config.systemloader.topology
            positions, velocities = self.config.systemloader.get_positions(), None

        self.topology = self.config.systemloader.topology
        self.explicit = self.config.systemloader.explicit

        integrator = integrators.GeodesicBAOABIntegrator(temperature=self.config.parameters.integrator_params['temperature'],
                                                    timestep=self.config.parameters.integrator_params['timestep'],
                                                    collision_rate=self.config.parameters.integrator_params[
                                                        'collision_rate'],
                                                    constraint_tolerance=self.config.parameters.integrator_setConstraintTolerance)
        self.simulation = app.Simulation(self.topology, self.system, integrator,
                                         self.config.parameters.platform, self.config.parameters.platform_config)
        self.simulation.context.setPositions(self.config.systemloader.positions)
        self.simulation.minimizeEnergy(self.config.parameters.minMaxIters)
        self.simulation.context.setVelocitiesToTemperature(self.config.parameters.integrator_params['temperature'])
コード例 #28
0
    def simulate_system(self,
                        equilibrate=100,
                        production=100,
                        dcd_frequency=10):

        context, integrator = self.get_context()

        # integrator.step(num_steps)

        dummy_integrator = mm.VerletIntegrator(1 * u.femtosecond)
        simulation = app.Simulation(self.topology, context.getSystem(),
                                    dummy_integrator)
        simulation.context = context
        simulation.integrator = integrator

        simulation.reporters.append(
            app.DCDReporter('equilibration.dcd', dcd_frequency))
        simulation.step(equilibrate)

        simulation.reporters.clear()
        simulation.reporters.append(
            app.DCDReporter('production.dcd', dcd_frequency))
        simulation.step(production)

        self.sampler_state.update_from_context(context)

        del context
コード例 #29
0
ファイル: test_pymc3.py プロジェクト: kyleabeauchamp/DBayes
def setup(traj,
          mmtop,
          temperature,
          pressure,
          sigma,
          epsilon,
          nonbondedCutoff=1.4 * u.nanometer):

    system = ff.createSystem(mmtop,
                             nonbondedMethod=app.CutoffPeriodic,
                             nonbondedCutoff=nonbondedCutoff)
    f = system.getForce(0)
    set_parms(f, sigma, epsilon)

    friction = 1.0 / u.picoseconds
    timestep = 3.0 * u.femtoseconds
    barostat_frequency = 25

    integrator = mm.LangevinIntegrator(temperature, friction, timestep)
    system.addForce(
        mm.MonteCarloBarostat(pressure, temperature, barostat_frequency))

    simulation = app.Simulation(mmtop, system, integrator)

    simulation.reporters.append(
        app.StateDataReporter(sys.stdout, 100, step=True, density=True))
    simulation.context.setPositions(traj.openmm_positions(0))

    simulation.minimizeEnergy()
    simulation.context.setVelocitiesToTemperature(temperature)

    simulation.step(10000)
    return simulation
コード例 #30
0
 def build(self, target_path="", file_name="out"):
     build_string = self.build_string 
     if self.chains:
         for chain in self.chains:
             self.build_string += chain.structure.init_string
         for index, chain in enumerate(self.chains):
             if chain.sequence:
                 self.build_string +="""
                                     CHAIN%s = sequence {%s}
                                     """%(index, chain.sequence)
             else:
                 raise ValueError("Empty Chain Index: %s"%index)
         chain_string = " ".join(["CHAIN%s"%index for index in range(len(self.chains))])
         self.build_string +="""
                             UNION = combine {%s}
                             saveamberparm UNION %s.prmtop %s.inpcrd
                             quit
                             """%(chain_string, target_path+file_name, target_path+file_name)
         infile = open("%s%s.in"%(target_path, file_name),"w")
         infile.write(self.build_string)
         infile.close()
         self.build_string = build_string
         #os.remove("%s%s.in"%(target_path, file_name))
         result = subprocess.call("tleap -f %s%s.in"%(target_path,file_name),shell=True)
         self.prmtop = app.AmberPrmtopFile(target_path+file_name+".prmtop")
         self.inpcrd = app.AmberInpcrdFile(target_path+file_name+".inpcrd")
         self.topology = self.prmtop.topology
         self.positions = self.inpcrd.positions
         self.system = self.prmtop.createSystem(nonbondedMethod=app.NoCutoff, constraints=None, implicitSolvent=app.OBC1)
         self.integrator = mm.LangevinIntegrator(300.*unit.kelvin, 1./unit.picosecond, 0.002*unit.picoseconds)
         self.simulation = app.Simulation(self.topology, self.system, self.integrator)
     else:
         raise ValueError('Empty Complex! CANNOT build!')