FlexAppeal
A complete run, start to finish
This is hen egg-white lysozyme — PDB 1AKI, the orthorhombic form at 1.5 Å — simulated for 10 nanoseconds in explicit water on an Apple M1 Max. It is the same three steps the two tabs either side of this one describe: configure a run, run the single file it hands you, upload what comes back.
Nothing here is illustrative. The tables are read out of the run's own
config.json, the terminal blocks are the bytes the run printed, and every
panel further down is built from the results file by the code that renders an upload.
If the Analysis tab breaks, this page breaks with it.
Prepared
1AKI loaded from the RCSB, hydrogens added at pH 7.4, solvated in a dodecahedral box with 1.2 nm padding and neutralised to 0.15 M NaCl. 2,194 solute atoms became 19,433 with water.
Ran
One .command file, run from Terminal. It benchmarked the machine's
platforms, minimised, heated to 310 K, equilibrated for 200 ps while
releasing restraints, then produced 10 ns at 4 fs with hydrogen-mass
repartitioning.
Analysed
The run packed a .fxa results file: metrics, a decimated trajectory and
the topology to view it against. That file is committed to the repository, and it is
what this page is rendering.
Reproduce it: the bundle is in the repository at
examples/lysozyme_10ns/flexappeal_lysozyme_10ns.command. Download it, chmod +x it, and run it.
The first run installs the environment; after that it goes straight to simulating.
What it looked like on the machine
Captured from the terminal while this ran, not re-created afterwards: these are the bytes
the scripts wrote, replayed through the same library that produced them. The bars are
caught mid-stage on purpose — a finished bar sits at 100% with its live readouts
gone, which is the one state not worth showing. The one edit is that home directories
are shortened to ~.
1 Running run.py
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ โ lysozyme_10ns โ โ 10.0 ns ยท amber14-all.xml ยท tip3p in a dodecahedron, 1.2 nm padding, 0.15 M Na+Cl- โ โ โ โ FlexAppeal 0.1.0 OpenMM 8.5.2.dev-36a30cb arm64 ยท 10 cores ยท 68.7 GB RAM โ โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ โ preparing the structure โน added hydrogens at pH 7.4 โ prepared: 2194 atoms, 207 residues โน wrote prepared.pdb โ solvated: 19433 atoms, 5811 waters 1s โน wrote solvated.pdb โ system: 19433 particles, 18392 constraints, 6 forces 0s โ ผ relaxing initial clashes -294,371 kJ/mol 589 iterations 166.2 MB rss ยท 34.3 GB free ยท 0 B swap 0:00:04 โ clashes relaxed 4s โน restrained 1001 atoms at 1000.0 kJ/mol/nmยฒ โน platforms available: Reference, CPU, OpenCL โ benchmarking 2 platforms (CPU, OpenCL) โน CPU 29.5 ns/day โ OpenCL does not support mixed precision here; using single โน OpenCL 206.5 ns/day โ using OpenCL at 206.5 ns/day
โน OpenCL 206.5 ns/day โ using OpenCL at 206.5 ns/day โ OpenCL does not support mixed precision here; using single โ ผ minimising -324,795 kJ/mol 2,891 iterations 254.6 MB rss ยท 34.1 GB free ยท 0 B swap 0:00:18
โ OpenCL does not support mixed precision here; using single โ minimised over 4,966 iterations: -294,354 โ -325,460 kJ/mol 31s โ heating 50.0 โ 310.0 K over 100.0 ps heating โโโโโโโโโโโโโบโโโโโโโ 60% 206 K 317.1 MB rss ยท 33.7 GB free ยท 0 B swap 0:00:19 00:14
heating โ K over ps heated to K equilibrating for ps restraint 100 kJ/mol/nmยฒ
โ equilibrating for 200.0 ps โ equilibrated 1m22s โ producing 10.0 ns (2,500,000 steps) producing โโโโโโโโโโธโโโโโโโโโโ 48% 200 ns/day 4.3 GB rss ยท 32.3 GB free ยท 0 B swap 0:34:37 --:--
producing โโโโโโโโโโโโโโโโโโโโ 100% 204 ns/day 8.3 GB rss ยท 32.3 GB free ยท 0 B swap 1:09:12 00:00 โ production complete in 1.17 h (204.3 ns/day) โ all runs complete wall time 1h13m output ~/Documents/Vibe_Coding/FlexAppeal/examples/lysozyme_10ns/run/flexappeal_output peak memory 8.3 GB resident swap 0 B added by this run โน next: run ./analyse.py to build the .fxa results file for the Analysis tab
The memory figures are the reason they are there. A run that spills out of RAM into swap does not slow down a little, it slows by an order of magnitude, and nothing else on screen would tell you. This one never swapped.
2 Then analyse.py
The second script reads the trajectory back, computes the metrics, and packs the results file. One bar carries all of them, relabelled with whichever metric is in flight — SASA and the contact map are the slow ones.
โ loading trajectory.xtc โ 1000 frames, 1960 atoms, 10.0 ns โน re-imaged molecules (undoing periodic wrapping) contact map โโโโโโโโโโโโโโโโโโโโโธโโโโโ 80% 693.9 MB rss ยท 36.1 GB free 0:01:18
conformational clustering โโโโโโโโโโโโโโโโโโโโโโโโโโ 100% 768.1 MB rss ยท 36.2 GB free 0:01:19 โน packing 500 frames of 1960 atoms (standard tier, stride 2) โ wrote lysozyme_10ns.fxa (5.2 MB) โ 1 results file(s) ready
That .fxa is the file every panel below is rendered from.
Every setting this run used
All 115 options, grouped as the Prepare tab groups them and read from the registry rather than written out here, so a new option appears the day it is added. Values changed from the default are marked •; the rest are defaults, which for a reference run is worth being able to see rather than having to assume.
Job 4 options, 2 changed
| Setting | Value | OpenMM | |
|---|---|---|---|
| • | Job name | lysozyme_10ns | |
| • | Description | Hen egg-white lysozyme (PDB 1AKI), 10 ns unrestrained NPT production in explicit TIP3P water. The reference example shipped with FlexAppeal. | |
| Author | โ | ||
| Output directory | ./flexappeal_output |
Input structure 16 options
| Setting | Value | OpenMM | |
|---|---|---|---|
| Structure source | upload | ||
| Structure file | None | ||
| PDB ID | โ | ||
| UniProt accession | โ | ||
| Assembly | asymmetric | ||
| Model | 1 | ||
| Chains to keep | * | ||
| Alternate locations | occupancy | ||
| Keep crystallographic waters | yes | ||
| Water shell radius | 5.0 ร | ||
| Heteroatoms to keep | โ | ||
| Discard input hydrogens | yes | ||
| Disulfide bonds | auto | ||
| Disulfide detection cutoff | 2.5 ร | ||
| Disulfide pairs | โ | ||
| Terminal caps | charged |
Structure repair 8 options
| Setting | Value | OpenMM | |
|---|---|---|---|
| Build missing residues | yes | findMissingResidues |
|
| Longest gap to build | 25 residues | ||
| Build missing terminal residues | no | ||
| Replace non-standard residues | yes | replaceNonstandardResidues |
|
| Add missing heavy atoms | yes | addMissingAtoms |
|
| pH | 7.4 | addMissingHydrogens |
|
| Protonation overrides | โ | ||
| Mutations | โ | applyMutations |
Force field 11 options
| Setting | Value | OpenMM | |
|---|---|---|---|
| Protein force field | amber14-all.xml | ForceField |
|
| Water model | tip3p | ||
| Solvent treatment | explicit | ||
| Implicit solvent model | implicit/gbn2.xml | ||
| Implicit salt concentration | 0.15 M | ||
| Solute dielectric | 1.0 | ||
| Solvent dielectric | 78.5 | ||
| Small-molecule force field | openff-2.2.1 | SystemGenerator |
|
| Ligand partial charges | am1bcc | ||
| System contains ligands or cofactors | no | ||
| Additional force-field XML | None |
Solvation and box 9 options
| Setting | Value | OpenMM | |
|---|---|---|---|
| Box shape | dodecahedron | addSolvent |
|
| Box sizing | padding | ||
| Solvent padding | 1.2 nm | ||
| Box vectors | โ nm | ||
| Number of waters | 10000 | ||
| Positive ion | Na+ | ||
| Negative ion | Cl- | ||
| Ionic strength | 0.15 M | ||
| Neutralise the system | yes |
Membrane 5 options
| Setting | Value | OpenMM | |
|---|---|---|---|
| Embed in a lipid bilayer | no | addMembrane |
|
| Lipid | POPC | ||
| Orientation | opm | ||
| Membrane centre (z) | 0.0 nm | ||
| Minimum padding | 1.0 nm |
System 11 options
| Setting | Value | OpenMM | |
|---|---|---|---|
| Non-bonded method | PME | PME |
|
| Non-bonded cutoff | 1.0 nm | createSystem |
|
| Use a switching function | no | ||
| Switching distance | 0.9 nm | ||
| Ewald error tolerance | 0.0005 | ||
| Bond constraints | HBonds | HBonds |
|
| Rigid water | yes | ||
| Hydrogen mass repartitioning | yes | createSystem |
|
| Hydrogen mass | 1.5 amu | ||
| Remove centre-of-mass motion | yes | CMMotionRemover |
|
| Long-range dispersion correction | yes | setUseDispersionCorrection |
Integrator 8 options
| Setting | Value | OpenMM | |
|---|---|---|---|
| Integrator | LangevinMiddle | LangevinMiddleIntegrator |
|
| Temperature | 310.0 K | ||
| Friction coefficient | 1.0 psโปยน | ||
| Timestep | 4.0 fs | ||
| Error tolerance | 0.0001 | ||
| Add an Andersen thermostat | no | AndersenThermostat |
|
| Collision frequency | 1.0 psโปยน | ||
| Random seed | 0 |
Pressure control 7 options
| Setting | Value | OpenMM | |
|---|---|---|---|
| Pressure control | MonteCarlo | MonteCarloBarostat |
|
| Pressure | 1.0 bar | ||
| Barostat interval | 25 steps | ||
| Surface tension | 0.0 barยทnm | ||
| XY coupling | XYIsotropic | ||
| Z coupling | ZFree | ||
| Per-axis pressure | 1.0, 1.0, 1.0 bar |
Restraints 5 options
| Setting | Value | OpenMM | |
|---|---|---|---|
| Restrain the solute during equilibration | yes | CustomExternalForce |
|
| Restrained atoms | protein_heavy | ||
| Restraint force constant | 1000.0 kJ/mol/nmยฒ | ||
| Release schedule | 1000, 500, 100, 10, 0 kJ/mol/nmยฒ | ||
| Distance restraints | โ |
Protocol 10 options, 2 changed
| Setting | Value | OpenMM | |
|---|---|---|---|
| Energy minimisation | yes | minimizeEnergy |
|
| Minimisation tolerance | 10.0 kJ/mol/nm | ||
| Maximum minimisation steps | 0 | ||
| Heating | 100.0 ps | ||
| Starting temperature | 50.0 K | ||
| Heating stages | 5 | ||
| • | Equilibration | 200.0 ps | |
| • | Production | 10.0 ns | |
| Replicates | 1 | ||
| Replicate seeds | sequential |
Output and reporting 10 options
| Setting | Value | OpenMM | |
|---|---|---|---|
| Trajectory format | xtc | XTCReporter |
|
| Trajectory write interval | 10.0 ps | ||
| Atoms to save | protein_ligand | ||
| Custom atom selection | โ | ||
| Wrap coordinates into the box | yes | ||
| Energy log interval | 10.0 ps | ||
| Energy log fields | step, time, potentialEnergy, kineticEnergy, totalEnergy, temperature, volume, density, speed, progress, remainingTime | StateDataReporter |
|
| Checkpoint interval | 100.0 ps | CheckpointReporter |
|
| Save serialised system | yes | ||
| Save the solvated structure | yes |
Platform and performance 6 options
| Setting | Value | OpenMM | |
|---|---|---|---|
| Compute platform | auto | getPlatformByName |
|
| Precision | mixed | ||
| CPU threads | 0 | ||
| Deterministic forces | no | ||
| Device index | โ | ||
| Refuse to start if memory is short | yes |
Analysis 5 options
| Setting | Value | OpenMM | |
|---|---|---|---|
| Metrics to compute | rmsd, rmsf, rgyr, sasa, dssp, hbonds, contacts, pca, clusters | ||
| Reference structure | first | ||
| Alignment selection | backbone | ||
| Custom measurements | โ | ||
| Results file size | standard |
The analysis, exactly as the Analysis tab renders it
lysozyme_10ns
Hen egg-white lysozyme (PDB 1AKI), 10 ns unrestrained NPT production in explicit TIP3P water. The reference example shipped with FlexAppeal.
500 packed for viewing
mean of the last 10% of frames
trajectory mean
occupancy > 10%
trajectory mean
OpenCL
Structure
The decimated trajectory, 500 frames of 1960 atoms. Press play, or scrub the frame slider โ the plots below highlight the frame you are on.
Loading the structureโฆ
RMSD
How far the structure has moved from its reference. A plateau means the trajectory has settled; a steady climb means it has not.
Radius of gyration
Global compactness. A rise suggests unfolding or expansion.
Per-residue fluctuation
Which parts of the molecule move. Peaks are usually loops and termini.
Solvent exposure
Total solvent-accessible surface area over time.
Secondary structure content
Helix and sheet content over the trajectory.
Secondary structure timeline
Per-residue assignment at every frame. Vertical stripes are transient melting; horizontal bands are stable elements.
Contact map
How often each residue pair is in contact across the whole trajectory.
Essential dynamics
The two dominant collective motions, with each frame coloured by time. Distinct clouds mean distinct conformational states.
Conformational clusters
Representative states found by RMSD clustering.
Convergence
Each measure on its own axis. Energies, temperature and density differ by orders of magnitude, so sharing a plot between any two of them would make their alignment arbitrary and any apparent correlation fictional.
Ask something else
Compute a metric the run did not, or restrict one to part of the molecule. This runs on the server against the trajectory packed in your results file, so it is bounded: one job at a time, and a size limit. This is a standard-tier file โ it carries a thinned trajectory, so answers here are coarser than the panels above. Rebuild with the full tier for the richest re-analysis.
MDTraj selection syntax. protein, name CA,
chainid 0 and backbone, resname BEN.
Use resSeq for the residue numbers you see in the
PDB โ resid is a zero-based index into the
topology, so resid 195 is rarely residue 195.
Measured between the centres of the two selections, after undoing periodic wrapping.
Run details
| Simulated time | 10.000 ns |
|---|---|
| Frames analysed | 1,000 |
| Frames packed | 500 (standard tier) |
| Force field | amber14-all.xml |
| Water model | tip3p |
| Temperature | 310.0 K |
| Timestep | 4.0 fs |
| Platform | OpenCL |
| Throughput | 204.33 ns/day |
| Wall time | 1.17 h |
| OpenMM | 8.5.2.dev-36a30cb |
| FlexAppeal | 0.1.0 |
| Machine | Darwin 25.5.0 (arm64) |
| Metrics computed | rmsd, rmsf, rgyr, sasa, dssp, hbonds, contacts, pca, clusters |
Everything above is generated from the results file this run produced, by the same code that renders an upload. Try it with your own: prepare a run, or upload a results file.