The Config

A FastMDXplora Config is the whole description of a study: the system, how it is prepared, how it is simulated, what is measured, and how it is written up. Capture that and the four phases run themselves.

It is written as YAML, which is the format rather than the thing. The same Config drives the GUI, the command line and the Python API, and each of them can produce one.

fastmdx init-config study.yml     # a commented template
fastmdx explore --config study.yml

The shape of it

output: runs/study                # where everything goes

systems:                          # one or more
  - system: 1UBQ
    id: wild_type                 # optional; s1, s2... if omitted

include: [setup, simulation, analysis, report]   # which phases

setup:
  ph: 7.4
  forcefield: amber-openff

simulation:
  duration_ns: 100
  temperature_K: 310

analysis:
  include: [rmsd, rmsf, rg, ss]

report:
  author: A. Researcher

Every block is optional. What you leave out takes its default, and the run records what that default was.


Where the settings come from

There is no list of options to keep in step with the software, because the options are the software’s declaration. The same file that gives the command line its flags gives the config file its keys and the GUI its form fields.

Three ways to see the current set, all of them generated:

fastmdx init-config study.yml     # a template with every setting, commented
fastmdx explore --help            # the same settings as flags
fastmdx gui                       # the same settings as a form, with explanations

The template is the most useful of the three when writing a config: it carries every key at its default with a sentence about what it does.


Checking a config without running it

fastmdx explore --config study.yml --dry-run

Validates the syntax and every setting, and stops. The GUI does the same thing from the A config I already have option, which will also open the file for editing without rewriting it.


Per-analysis settings

An analysis’s own settings go in a block under its name:

analysis:
  include: [hbonds, cluster, sasa]
  options:
    hbonds:
      distance_cutoff: 0.30
      sidechain_only: true
    cluster:
      methods: [kmeans, hierarchical]
      n_clusters: 8
      random_state: 7
    sasa:
      mode: average_residue

What each accepts is in The four phases, and the GUI shows it beside each analysis.


Several systems

output: runs/campaign

systems:
  - system: 1UBQ
    id: wild_type
  - system: mutant.pdb
    id: L50A
    simulation:                   # this system only
      temperature_K: 320

simulation:
  duration_ns: 100

execution:
  mode: parallel          # or sequential, the default
  workers: 2
  devices: [0, 1]         # one run pinned per GPU
  continue_on_error: true

Each entry needs a system. id is optional and names the run — it becomes the run’s directory and its label in the comparison report; without one the systems are s1, s2 and so on, which is harder to read six months later. Two systems cannot share an id.

A phase block inside an entry overrides the top-level one for that system only, which is how you vary a single setting across a campaign.


Reproducing a run

Every run writes the config it used to resolved_config.yml in its output directory, with every setting filled in — including the defaults it took:

fastmdx explore --config runs/original/resolved_config.yml --output runs/repeat

For a trajectory that repeats exactly, fix the seed — without one, velocities differ between runs:

simulation:
  random_seed: 42

The report’s methods section states whether a seed was fixed, because its absence is what makes a run irreproducible.