FlexAppeal molecular dynamics, prepared and analysed

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.

1

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.

2

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.

3

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

Startup, and the platform benchmark that picks OpenCL
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚  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
Energy minimisation: a spinner, not a bar -- OpenMM's iteration count is not monotonic
โ„น   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
Heating, 50 K to 310 K
โš  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
Equilibration, with the positional restraints released in stages
โ†’ heating 50.0 โ†’ 310.0 K over 100.0 ps
โœ“ heated to 310.0 K  33s
โ†’ equilibrating for 200.0 ps
  equilibrating โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•บโ”โ”โ”โ”โ”โ”โ”โ”  54%   restraint 100 kJ/mol/nmยฒ 433.4 MB rss ยท 34.2 GB free ยท 0 B swap 0:00:41 00:37
Production: ns/day, resident memory, free memory and swap, all live
โ†’ 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 --:--
The closing summary
  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.

Analysing: one bar across every metric, relabelled as it goes
โ†’ 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
Packing the results file the Analysis tab reads
  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
SettingValueOpenMM
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
SettingValueOpenMM
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
SettingValueOpenMM
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
SettingValueOpenMM
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
SettingValueOpenMM
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
SettingValueOpenMM
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
SettingValueOpenMM
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
SettingValueOpenMM
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
SettingValueOpenMM
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
SettingValueOpenMM
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
SettingValueOpenMM
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
SettingValueOpenMM
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
SettingValueOpenMM
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
SettingValueOpenMM
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.

amber14-all.xml / tip3p ยท 310.0 K ยท 4.0 fs ยท OpenCL ยท OpenMM 8.5.2.dev-36a30cb ยท 1aki.pdb

Simulated
10.0ns
Frames
1,000

500 packed for viewing

Final RMSD
0.94ร…

mean of the last 10% of frames

Radius of gyration
14.29ร…

trajectory mean

Hydrogen bonds
194

occupancy > 10%

Helix content
40%

trajectory mean

Throughput
204ns/day

OpenCL

Wall time
1.2h

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.

Run details

Every value is read from the results file's manifest.
Simulated time10.000 ns
Frames analysed1,000
Frames packed500 (standard tier)
Force fieldamber14-all.xml
Water modeltip3p
Temperature310.0 K
Timestep4.0 fs
PlatformOpenCL
Throughput204.33 ns/day
Wall time1.17 h
OpenMM8.5.2.dev-36a30cb
FlexAppeal0.1.0
MachineDarwin 25.5.0 (arm64)
Metrics computedrmsd, 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.