! REST2: 4 states ! ! Generated by `md-openmm build-md`. Run it with: ! ! md-openmm md-run -i THIS_FILE -p ../build/built.pdb -s ../build/built.xml ! ! `resolved.config` beside this file is AUTHORITATIVE: md-run resolves this input ! and writes the result there, and that resolved document is what the run reads. ! This file resolves to exactly that document -- editing it changes the run. ! ! WHAT A RUN WRITES. Every stage's `.out` opens with what it actually ran, read off the ! SERIALISED System rather than off this file -- a configuration asking for a 1.0 nm cutoff and a ! System carrying 0.8 nm are different runs, and only one of them integrates: ! ! System atoms, residues by name, net charge, degrees of freedom, box and volume ! Method nonbonded treatment and cutoff, Ewald tolerance, dispersion correction, ! switching, 1-4 exception count, constraints, barostat present, force inventory ! Selections the solute atom count, and which omega bonds are left unscaled ! ! The same facts go into the `.log` as structured fields, because prose is not a database. A box ! is reported only when the System is actually periodic: an OpenMM System defaults to a 2 nm cube, ! so an implicit run would otherwise print an invented box in the same voice as a measurement. ! ! `energy_components_.csv` carries the potential energy term by term, beside `mdout*.csv`. ! Where the System has usable force groups -- the implicit route, via ParmEd -- they are read ! directly. Where it does not, which is every explicit-solvent System built through ! `ForceField.createSystem`, a group-separated COPY is probed instead: `built.xml`, the run's own ! Context and every digest taken from them are untouched. `EELEC` from `VDWAALS`, and the 1-4 ! terms from either, are NOT reachable that way -- the 1-4 pairs are exceptions inside the single ! NonbondedForce -- so that split lives in post-hoc `md_tools.openmm.decomposition`. ! ! An rms fluctuation over a single report reads `n/a (single sample)`, not 0: over one sample ! sqrt( - ^2) is exactly zero, which reads as "this did not move" when it means "there was ! nothing to compare it against". ! ! A LADDER'S `.out` NAMES THE HAMILTONIAN IT INTEGRATED. The grouped summary prints the tau ! ladder, the scaling laws in force, which terms were left unscaled, the solute region with its ! omega-bond exclusions, and the rung's `system_sha256` -- then a TIMINGS block with elapsed time, ! ns/day per replica and aggregate, and ms/step. A rung here IS a serialised System, so it can be ! named and digested; Amber prints an equivalent REAF block but cannot name the resulting ! Hamiltonian, because `gti_add_re` is an index into a table and the scaled potential exists only ! inside the running binary. ! ! Per-state output is `solute_state_prod.nc`, plus `whole_state_prod.nc` when a ! whole-system cadence is set, and `cv_state.csv` with a `cv_state.json` sidecar when ! collective variables are enabled. The index is the STATE's, never the walker's. ! ! `--resume` continues an interrupted ladder from its committed checkpoint. An interrupted run ! writes no completion manifest by design, and needs none to be resumed. &cntrl ! ! cMD is plain molecular dynamics. REST2 adds a replica-exchange ladder in which only the ! solute's Hamiltonian is scaled. AIS runs non-equilibrium switching paths from an EXISTING ! equilibrium source ensemble -- it has no minimisation or equilibration chain of its own, ! because its input is a trajectory you have already produced. ! one of: cMD, REST2, AIS, umbrella protocol = REST2, ! ! Must match the System `build-top` produced. Under implicit solvent there is no box and no ! barostat, so the pressure-coupled equilibration stages are replaced by honest NVT ! equivalents with different file names -- they are NOT NPT stages with the pressure quietly ! ignored. ! one of: explicit, implicit solvent = explicit, ! ! `auto` (the default) resolves the timestep from the masses serialised in built.xml when ! the run starts: 2.0 fs on ordinary hydrogens, 4.0 fs on repartitioned ones. `build-md` ! never opens built.xml, so it cannot know whether HMR was applied -- and a configuration ! CLAIMING it is not evidence. A number may be given instead: it is honoured up to 3.0 fs, ! and above that only if the System really was repartitioned. The resolved value and its ! basis are recorded in every log. ! unit: fs timestep_fs = auto, temperature_K = 300.0, ! ! Barostat pressure. Ignored -- and refused if a stage claims NPT -- under implicit solvent, ! which has no volume. ! unit: bar; minimum: 0.0 pressure_bar = 1.0, ! ! LangevinMiddleIntegrator collision rate. ! unit: 1/ps; minimum: 0.01 friction_per_ps = 1.0, ! ! MonteCarloBarostat volume-move attempt interval, in STEPS. It is the frequency, not the ! barostat's presence, that makes a stage NPT. ! unit: steps; minimum: 1 barostat_interval_steps = 25, restraint_kcal_per_mol_A2 = 1.0, ! ! Fixed REST2 scaling for a cMD run. 0.0 (the default) is the unmodified physical ! Hamiltonian. A non-zero value runs cMD at ONE rung of the REST2 ladder -- the same scaling ! the ladder applies, held fixed -- which is how a hot ensemble is produced without running ! an exchange. A scaled run is NVT by construction: it must sample the top rung's ! fixed-volume ensemble, so a barostat would sample the wrong distribution and is refused. ! minimum: 0.0 tau = 0.0, ! ! Write a phase-space stream (positions, VELOCITIES and box) every N steps. 0 disables it. A ! complete sample needs velocities, which a trajectory does not carry. ! unit: steps; minimum: 0 phase_space_printout = 0, ! ! Minimiser ITERATIONS, not a time interval: minimisation does not integrate and has no ! timestep. 0 skips minimisation. ! minimum: 0 minimization_iterations = 1000, ! ! Restrained NVT heating/settling. 5000 steps = 10 ps at 2 fs. ! unit: steps; minimum: 0 restrained_nvt_steps = 5000, ! ! Restrained NPT density equilibration. 5000 steps = 10 ps at 2 fs. Under implicit solvent ! this becomes a second restrained NVT stage instead. ! unit: steps; minimum: 0 restrained_npt_steps = 5000, ! ! Unrestrained NPT, the last stage before production. 5000 steps = 10 ps at 2 fs. Under ! implicit solvent this becomes unrestrained NVT. ! unit: steps; minimum: 0 unrestrained_npt_steps = 5000, ! ! Production length. 2,500,000 steps = 5 ns at 2 fs. This is the authoritative number; the ! log prints the derived ps and ns beside it. ! unit: steps; minimum: 0 production_steps = 2500000, ! ! How many SEGMENTS the production run is written as. 1 is a single `prod1` segment. ! It SPLITS the production total rather than multiplying it: each segment gets ! `production_steps / number_of_segments`, and a value that does not divide exactly is ! refused. On a REST2 ladder the split is of `number_of_exchanges`, so an exchange ! never straddles a boundary. Each segment writes its own files, so segments cannot ! overwrite one another. ! minimum: 1 number_of_segments = 1, ! ! Trajectory output interval. 1000 steps = 2 ps at 2 fs. ! unit: steps; minimum: 0 crd_printout_solute = 500, ! ! COORDINATE output interval for the WHOLE system, in steps, written to `whole_prod.nc` ! (or `whole_rep_prod.nc` per replica on a ladder). ! 0, the default, writes no whole-system trajectory. Say what you want kept: on a solvated ! system the whole stream is two orders of magnitude larger than the solute one -- 1796 ! atoms against 22 for alanine dipeptide in water -- so an unasked-for whole-system ! trajectory at a solute cadence is how a 26 MB run becomes 2.1 GB. ! Distinct from `crd_printout_solute`, which is the solute alone, and from `info_printout`, ! which is scalars and no coordinates at all. Those three were previously two, and the two ! were named for what a reader assumed rather than for what they wrote. ! unit: steps; minimum: 0 crd_printout_whole = 0, ! ! Scalar state (energy, temperature, volume, density) interval, written to a CSV beside the ! log. ! unit: steps; minimum: 0 info_printout = 5000, ! ! Checkpoint interval. A checkpoint is what an interrupted stage resumes from, and it is ! written with a fingerprint of the configuration that produced it so it cannot be resumed ! under different settings. ! unit: steps; minimum: 0 checkpoint_printout = 5000, ! ! Steps between collective-variable observations. Independent of the trajectory and state- ! data intervals, and may be more frequent than either. 0 disables collective-variable ! reporting. ! unit: steps; minimum: 0 cv_interval_steps = 0, / &remd ! ! States in the ladder. Every state runs at the same physical temperature. ! minimum: 2 number_of_replicas = 4, ! ! The hottest rung's tau. The ladder is linear from 0.0 to this value. tau = 0 is the ! unscaled physical Hamiltonian. ! minimum: 0.0 tau_max = 0.5, ! ! Steps of dynamics between exchange attempts. 5000 steps = 10 ps at 2 fs. ! unit: steps; minimum: 1 exchange_interval_steps = 5000, ! ! Exchange attempts. Total production per state is this times exchange_interval_steps. ! minimum: 1 number_of_exchanges = 100, ! ! Relaxation run at EACH STATE'S OWN Hamiltonian before the first exchange attempt, and not ! counted as production. 0 (the default) starts exchanging immediately. ! This exists because the alternative is wrong in a way that is hard to see. A ladder ! takes ONE starting state -- the group file refuses per-rung coordinates, deliberately, ! since rungs must be states of the same system -- so without this every rung begins from a ! configuration equilibrated under tau = 0. The hot rungs then spend their opening exchanges ! relaxing out of a distribution that is not theirs, and those samples are production by ! every record that describes them. ! The driver has always relaxed each rung under its own scaled Hamiltonian; only the ! number was unreachable from a configuration file. ! unit: steps; minimum: 0 equilibration_steps = 0, ! ! Run the equilibration stages on EVERY RUNG, under that rung's own tau, instead of once at ! tau = 0. REST2 only; off by default. When true the tau = 0 chain stops at ! minimisation (implicit) or after its NPT stages (explicit, which fix the shared box), and ! every rung then runs eq_nvt_posres, eq_nvt_posres_2 and eq_nvt_free at fixed volume, then ! equilibration_steps, then the first exchange. equilibration_per_tau = false, ! ! Write one trajectory per fixed thermodynamic STATE (solute_state_prod.nc, and ! whole_state_prod.nc when a whole-system cadence is set). A state ! trajectory follows a state, not a walker; the filename carries the state index and never ! the tau value. state_trajectory = true, ! ! Write an Amber-style rem.log projection of the exchange history. rem_log = true, ! ! Report acceptance for each neighbouring pair. A single averaged acceptance hides a ladder ! with one impassable gap. neighbour_acceptance_report = true, /