Пример #1
0
def test_sim_factory():
    # check sim_factory returns a function when passed a testsystem
    construct_sim = utils.sim_factory(AlanineDipeptideVacuum())
    assert (callable(construct_sim))

    # check that the resulting function returns an app.Simulation when passed an integrator
    sim = construct_sim(LangevinIntegrator())
    assert (isinstance(sim, app.Simulation))
Пример #2
0
def test_measure_shadow_work():
    # test that it's consistent with openmmtools
    construct_sim = utils.sim_factory(AlanineDipeptideVacuum(constraints=None))
    sim = construct_sim(
        LangevinIntegrator(splitting='O V R V O',
                           measure_heat=True,
                           measure_shadow_work=True,
                           timestep=2.0 * unit.femtoseconds))
    sim.runForClockTime(1 * unit.seconds)

    w_shads_here = []
    w_shads_openmmtools = []
    for _ in range(10):
        w_shad_prev = sim.integrator.get_shadow_work(dimensionless=True)
        w_shads_here.append(utils.measure_shadow_work(sim, 10))
        w_shad_new = sim.integrator.get_shadow_work(dimensionless=True)
        w_shads_openmmtools.append(w_shad_new - w_shad_prev)
    assert (np.isclose(w_shads_here, w_shads_openmmtools).all())
Пример #3
0
def test_clone_state():
    # construct source system
    construct_sim = utils.sim_factory(AlanineDipeptideVacuum())
    sim_a = construct_sim(LangevinIntegrator())
    sim_b = construct_sim(LangevinIntegrator())
    sim_a.step(50)
    sim_b.step(50)

    utils.clone_state(sim_a, sim_b)
    state_a = sim_a.context.getState(getPositions=True, getVelocities=True)
    state_b = sim_b.context.getState(getPositions=True, getVelocities=True)

    # check that the positions were cloned
    assert (np.isclose(state_a.getPositions(asNumpy=True),
                       state_b.getPositions(asNumpy=True)).all())

    # check that the velocities were cloned
    assert (np.isclose(state_a.getVelocities(asNumpy=True),
                       state_b.getVelocities(asNumpy=True)).all())
Пример #4
0
def test_get_a_paired_kldiv_sample():
    # just make sure it returns floats?

    testsystem = AlanineDipeptideVacuum(constraints=None)
    construct_sim = utils.sim_factory(testsystem)

    equilibrium_sim = construct_sim(GHMCIntegrator(timestep=0.25 * unit.femtosecond))
    equilibrium_sim.minimizeEnergy()
    equilibrium_sim.step(1000)

    reference_sim = construct_sim(
        LangevinIntegrator(splitting='O V R V O', measure_shadow_work=True, measure_heat=True,
                           timestep=0.01 * unit.femtosecond))
    test_sim = construct_sim(
        LangevinIntegrator(splitting='O V R V O', measure_shadow_work=True, measure_heat=True,
                           timestep=3 * unit.femtosecond))

    kldiv_reference, kldiv_test = error.get_a_paired_kldiv_sample(equilibrium_sim, reference_sim, test_sim,
                                                                  protocol_length=100)

    assert (isinstance(kldiv_reference, float))
    assert (isinstance(kldiv_test, float))

    # more stringent test: check that median of reference here is lower than median of test_sim
    reference_samples, test_samples = [], []
    for _ in range(100):
        equilibrium_sim.step(100)
        kldiv_reference, kldiv_test = error.get_a_paired_kldiv_sample(equilibrium_sim, reference_sim, test_sim,
                                                                      protocol_length=100)
        reference_samples.append(kldiv_reference)
        test_samples.append(kldiv_test)
    assert (np.median(reference_samples) <= np.median(test_samples))

    # check that recycle_v works
    _ = error.get_a_paired_kldiv_sample(equilibrium_sim, reference_sim, test_sim,
                                                                  protocol_length=100, recycle_v=True)

    # check that it doesn't fail silently when reference_sim and test_sim are at different temperatures
    with pytest.raises(ValueError):
        test_sim.integrator.setTemperature(200 * unit.kelvin)
        error.get_a_paired_kldiv_sample(equilibrium_sim, reference_sim, test_sim)
Пример #5
0
from openmmtools.integrators import LangevinIntegrator, GHMCIntegrator
from openmmtools.testsystems import AlanineDipeptideVacuum
from simtk import unit

from thresholds import utils, bisect, stability

if __name__ == '__main__':
    testsystem = AlanineDipeptideVacuum()

    def make_integrator(splitting):
        return LangevinIntegrator(splitting=splitting,
                                  timestep=2 * unit.femtoseconds,
                                  measure_shadow_work=False,
                                  measure_heat=False)

    construct_sim = utils.sim_factory(testsystem)
    equilibrium_sim = construct_sim(
        GHMCIntegrator(timestep=0.5 * unit.femtoseconds))
    equilibrium_sim.context.setVelocitiesToTemperature(
        equilibrium_sim.integrator.getTemperature())
    equilibrium_sim.step(1000)

    def set_initial_conditions(sim):
        equilibrium_sim.step(100)
        utils.clone_state(equilibrium_sim, sim)

    final_beliefs = {}

    hmr_range = np.linspace(1, 4)

    for hydrogen_mass in hmr_range:
Пример #6
0
import pytest
from openmmtools.integrators import LangevinIntegrator
from openmmtools.testsystems import AlanineDipeptideVacuum
from simtk import unit

from thresholds import utils, stability

testsystem = AlanineDipeptideVacuum()
construct_sim = utils.sim_factory(testsystem)

tiny_dt = 0.1 * unit.femtoseconds
stable_sim = construct_sim(LangevinIntegrator(timestep=tiny_dt))

huge_dt = 100 * unit.femtoseconds
unstable_sim = construct_sim(LangevinIntegrator(timestep=huge_dt))


def test_check_stability():
    # check that stable simulation is labeled stable
    assert (stability.check_stability(stable_sim, n_steps=100))

    # check that unstable simulation is labeled unstable
    assert (not stability.check_stability(unstable_sim, n_steps=100))


def test_stability_oracle_factory():
    def set_initial_conditions(sim):
        sim.context.setPositions(testsystem.positions)
        sim.context.setVelocitiesToTemperature(298 * unit.kelvin)

    iterated_stability_oracle = stability.stability_oracle_factory(