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')
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
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()