Exemple #1
0
    def test_generateSimFromStruct(self):
        print('Generating Simulation from parmed.Structure')
        integrator = openmm.LangevinIntegrator(100 * unit.kelvin, 1,
                                               0.002 * unit.picoseconds)
        simulation = SimulationFactory.generateSimFromStruct(
            self.structure, self.system, integrator)

        #Check that we've made a Simulation object
        self.assertIsInstance(simulation, app.Simulation)
        state = simulation.context.getState(getPositions=True)
        positions = state.getPositions(asNumpy=True) / unit.nanometers
        box_vectors = state.getPeriodicBoxVectors(
            asNumpy=True) / unit.nanometers
        struct_box = np.array(
            self.structure.box_vectors.value_in_unit(unit.nanometers))
        struct_pos = np.array(
            self.structure.positions.value_in_unit(unit.nanometers))

        #Check that the box_vectors/positions in the Simulation
        # have been set from the parmed.Structure
        np.testing.assert_array_almost_equal(positions, struct_pos)
        np.testing.assert_array_equal(box_vectors, struct_box)

        print('Attaching Reporter')
        reporters = [app.StateDataReporter('test.log', 5)]
        self.assertEqual(len(simulation.reporters), 0)
        simulation = SimulationFactory.attachReporters(simulation, reporters)
        self.assertEqual(len(simulation.reporters), 1)
        os.remove('test.log')
Exemple #2
0
    def test_generateSimFromStruct(self, structure, system, tmpdir):
        print('Generating Simulation from parmed.Structure')
        integrator = openmm.LangevinIntegrator(100 * unit.kelvin, 1, 0.002 * unit.picoseconds)
        simulation = SimulationFactory.generateSimFromStruct(structure, system, integrator)

        #Check that we've made a Simulation object
        assert isinstance(simulation, app.Simulation)
        state = simulation.context.getState(getPositions=True)
        positions = state.getPositions(asNumpy=True) / unit.nanometers
        box_vectors = state.getPeriodicBoxVectors(asNumpy=True) / unit.nanometers
        struct_box = np.array(structure.box_vectors.value_in_unit(unit.nanometers))
        struct_pos = np.array(structure.positions.value_in_unit(unit.nanometers))

        #Check that the box_vectors/positions in the Simulation
        # have been set from the parmed.Structure
        np.testing.assert_array_almost_equal(positions, struct_pos)
        np.testing.assert_array_equal(box_vectors, struct_box)

        print('Attaching Reporter')
        reporters = [app.StateDataReporter(tmpdir.join('test.log'), 5)]
        assert len(simulation.reporters) == 0
        simulation = SimulationFactory.attachReporters(simulation, reporters)
        assert len(simulation.reporters) == 1
Exemple #3
0
def runEthyleneTest(N):
    filename = 'ethylene-test_%s' % N
    print('Running %s...' % filename)
    seed = np.random.randint(low=1, high=5000)
    #print('Seed', seed)
    # filename = 'ethylene-test_%s' % N
    # print(filename)

    # Set Simulation parameters
    sim_cfg = {
        'platform': 'CPU',
        'nprop': 1,
        'propLambda': 0.3,
        'dt': 1 * unit.femtoseconds,
        'friction': 1 / unit.picoseconds,
        'temperature': 200 * unit.kelvin,
        'nIter': 100,
        'nstepsMD': 20,
        'nstepsNC': 20,
        'propSteps': 20,
        'moveStep': 10
    }

    totalSteps = int(sim_cfg['nIter'] * sim_cfg['nstepsMD'])
    reportInterval = 5
    alchemical_atoms = [2, 3, 4, 5, 6, 7]
    alchemical_functions = {
        'lambda_sterics':
        'min(1, (1/0.3)*abs(lambda-0.5))',
        'lambda_electrostatics':
        'step(0.2-lambda) - 1/0.2*lambda*step(0.2-lambda) + 1/0.2*(lambda-0.8)*step(lambda-0.8)'
    }

    md_reporters = {'traj_netcdf': {'reportInterval': reportInterval}}

    # Load a Parmed Structure for the Topology and create our openmm.Simulation
    structure_pdb = utils.get_data_filename(
        'blues', 'tests/data/ethylene_structure.pdb')
    structure = parmed.load_file(structure_pdb)

    # Initialize our move proposal class
    rot_move = RandomLigandRotationMove(structure, 'LIG')
    mover = MoveEngine(rot_move)

    # Load our OpenMM System and create Integrator
    system_xml = utils.get_data_filename('blues',
                                         'tests/data/ethylene_system.xml')
    with open(system_xml, 'r') as infile:
        xml = infile.read()
        system = openmm.XmlSerializer.deserialize(xml)
    integrator = openmm.LangevinIntegrator(sim_cfg['temperature'],
                                           sim_cfg['friction'], sim_cfg['dt'])
    integrator.setRandomNumberSeed(seed)

    alch_integrator = openmm.LangevinIntegrator(sim_cfg['temperature'],
                                                sim_cfg['friction'],
                                                sim_cfg['dt'])
    alch_integrator.setRandomNumberSeed(seed)

    alch_system = SystemFactory.generateAlchSystem(system, alchemical_atoms)
    ncmc_integrator = AlchemicalExternalLangevinIntegrator(
        nsteps_neq=sim_cfg['nstepsNC'],
        alchemical_functions=alchemical_functions,
        splitting="H V R O R V H",
        temperature=sim_cfg['temperature'],
        timestep=sim_cfg['dt'])
    # ncmc_integrator.setRandomNumberSeed(seed)

    # Pack our systems into a single object
    systems = SystemFactory(structure, alchemical_atoms)
    systems.md = system
    systems.alch = alch_system

    # Make our reporters
    md_reporter_cfg = ReporterConfig(filename, md_reporters)
    md_reporters_list = md_reporter_cfg.makeReporters()

    # Pack our simulations into a single object
    simulations = SimulationFactory(systems, mover)

    simulations.md = SimulationFactory.generateSimFromStruct(
        structure, system, integrator, 'CPU')
    simulations.md = SimulationFactory.attachReporters(simulations.md,
                                                       md_reporters_list)

    simulations.alch = SimulationFactory.generateSimFromStruct(
        structure, system, alch_integrator, 'CPU')

    simulations.ncmc = SimulationFactory.generateSimFromStruct(
        structure, alch_system, ncmc_integrator, 'CPU')

    ethylene_sim = BLUESSimulation(simulations, sim_cfg)
    ethylene_sim.run()