Skip to content

Commit ddc52cb

Browse files
committed
Add equil/pathsampling commands (no tests)
1 parent 93a8c36 commit ddc52cb

File tree

2 files changed

+104
-0
lines changed

2 files changed

+104
-0
lines changed

paths_cli/commands/equilibrate.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import click
2+
# import openpathsampling as paths
3+
4+
from paths_cli.parameters import (
5+
INPUT_FILE, OUTPUT_FILE, INIT_CONDS, SCHEME
6+
)
7+
8+
@click.command(
9+
"equilibrate",
10+
short_help="Run equilibration for path sampling",
11+
)
12+
@INPUT_FILE.clicked(required=True)
13+
@OUTPUT_FILE.clicked(required=True)
14+
@SCHEME.clicked(required=False)
15+
@INIT_CONDS.clicked(required=False)
16+
@click.option('--multiplier', type=int, default=1,
17+
help=("run number of steps equal to MULTIPLIER times the "
18+
+ "number of stepss to decorrelate"))
19+
@click.option("--extra-steps", type=int, default=0,
20+
help="run EXTRA-STEPS additional steps")
21+
def equilibrate(input_file, output_file, scheme, init_conds, multiplier,
22+
extra_steps):
23+
"""Run path sampling equilibration, based on INPUT_FILE.
24+
25+
This just runs the normal path sampling simulation, but the number of
26+
steps depends on how long it takes to create a fully decorrelated
27+
sample set (no frames from the initial trajectories are still active).
28+
29+
If N_DECORR is the number of steps to fully decorrelate, the total
30+
number of steps run is: N_DECORR * MULTIPLIER + EXTRA_STEPS
31+
"""
32+
storage = INPUT_FILE.get(input_file)
33+
equilibrate_main(
34+
output_storage=OUTPUT_FILE.get(output_file),
35+
scheme=SCHEME.get(storage, scheme),
36+
init_conds=INIT_CONDS.get(storage, init_conds),
37+
multiplier=multiplier,
38+
extra_steps=extra_steps
39+
)
40+
41+
42+
def equilibrate_main(output_storage, scheme, init_conds, multiplier,
43+
extra_steps):
44+
import openpathsampling as paths
45+
init_conds = scheme.initial_conditions_from_trajectories(init_conds)
46+
simulation = paths.PathSampling(
47+
storage=output_storage,
48+
move_scheme=scheme,
49+
sample_set=init_conds
50+
)
51+
simulation.run_until_decorrelated()
52+
n_decorr = simulation.step
53+
simulation.run(n_decorr * (multiplier - 1) + extra_steps)
54+
if output_storage:
55+
output_storage.tags['final_conditions'] = simulation.sample_set
56+
output_storage.tags['equilibrated'] = simulation.sample_set
57+
return simulation.sample_set, simulation
58+
59+
60+
CLI = equilibrate
61+
SECTION = "Simulation"
62+
REQUIRES_OPS = (1, 2)

paths_cli/commands/pathsampling.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import click
2+
# import openpathsampling as paths
3+
4+
from paths_cli.parameters import (
5+
INPUT_FILE, OUTPUT_FILE, INIT_CONDS, SCHEME, N_STEPS_MC
6+
)
7+
8+
9+
@click.command(
10+
"pathsampling",
11+
short_help="Run any path sampling simulation, including TIS variants",
12+
)
13+
@INPUT_FILE.clicked(required=True)
14+
@OUTPUT_FILE.clicked(required=True)
15+
@SCHEME.clicked(required=False)
16+
@INIT_CONDS.clicked(required=False)
17+
@N_STEPS_MC
18+
def path_sampling(input_file, output_file, scheme, init_conds, nsteps):
19+
"""General path sampling, using setup in INPUT_FILE"""
20+
storage = INPUT_FILE.get(input_file)
21+
path_sampling_main(output_storage=OUTPUT_FILE.get(output_file),
22+
scheme=SCHEME.get(storage, scheme),
23+
init_conds=INIT_CONDS.get(storage, init_conds),
24+
n_steps=nsteps)
25+
26+
def path_sampling_main(output_storage, scheme, init_conds, n_steps):
27+
import openpathsampling as paths
28+
init_conds = scheme.initial_conditions_from_trajectories(init_conds)
29+
simulation = paths.PathSampling(
30+
storage=output_storage,
31+
move_scheme=scheme,
32+
sample_set=init_conds
33+
)
34+
simulation.run(n_steps)
35+
if output_storage:
36+
output_storage.tags['final_conditions'] = simulation.sample_set
37+
return simulation.sample_set, simulation
38+
39+
40+
CLI = path_sampling
41+
SECTION = "Simulation"
42+
REQUIRES_OPS = (1, 0)

0 commit comments

Comments
 (0)