pyadmd 3.2.2__tar.gz → 3.2.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pyadmd-3.2.2/src/pyadmd.egg-info → pyadmd-3.2.3}/PKG-INFO +79 -75
- {pyadmd-3.2.2 → pyadmd-3.2.3}/README.md +78 -74
- {pyadmd-3.2.2 → pyadmd-3.2.3}/pyproject.toml +1 -1
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/__init__.py +1 -1
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/analysis/analyzer.py +1 -1
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/charmm/wrt-nm.mdu +3 -3
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/cli/commands.py +11 -24
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/cli/main.py +1 -1
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/cli/parser.py +97 -75
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/console.py +1 -1
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/fel/calculator.py +244 -258
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/simulation/engine.py +17 -3
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/utils.py +5 -3
- {pyadmd-3.2.2 → pyadmd-3.2.3/src/pyadmd.egg-info}/PKG-INFO +79 -75
- {pyadmd-3.2.2 → pyadmd-3.2.3}/LICENSE +0 -0
- {pyadmd-3.2.2 → pyadmd-3.2.3}/setup.cfg +0 -0
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/__main__.py +0 -0
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/analysis/__init__.py +0 -0
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/analysis/completion.py +0 -0
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/charmm/charmm_toppar.zip +0 -0
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/cli/__init__.py +0 -0
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/constants.py +0 -0
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/enm/__init__.py +0 -0
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/enm/analysis.py +0 -0
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/enm/calculator.py +0 -0
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/fel/__init__.py +0 -0
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/fel/completion.py +0 -0
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/geometry.py +0 -0
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/io/__init__.py +0 -0
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/io/dcd.py +0 -0
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/io/namd.py +0 -0
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/io/openmm_restart.py +0 -0
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/io/params.py +0 -0
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/io/state.py +0 -0
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/modes/__init__.py +0 -0
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/modes/exciter.py +0 -0
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/simulation/__init__.py +0 -0
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/simulation/runner.py +0 -0
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd/simulation/system_builder.py +0 -0
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd.egg-info/SOURCES.txt +0 -0
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd.egg-info/dependency_links.txt +0 -0
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd.egg-info/entry_points.txt +0 -0
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd.egg-info/requires.txt +0 -0
- {pyadmd-3.2.2 → pyadmd-3.2.3}/src/pyadmd.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyadmd
|
|
3
|
-
Version: 3.2.
|
|
3
|
+
Version: 3.2.3
|
|
4
4
|
Summary: Adaptive Molecular Dynamics with Excited Normal Modes (aMDeNM) on OpenMM.
|
|
5
5
|
Author-email: Pedro Túlio Resende-Lara <laraptr@unicamp.br>
|
|
6
6
|
License-Expression: GPL-3.0-or-later
|
|
@@ -384,7 +384,7 @@ $$
|
|
|
384
384
|
|
|
385
385
|
where $`\mathbf{M}_{\mathrm{nm}}^+`$ denotes the Moore–Penrose pseudoinverse of $`\mathbf{M}_{\mathrm{nm}}`$. These approximate coefficients are written to the `factors.csv` output file for reference but do not influence the simulation; the physical vectors $`\mathbf{q}_i`$ are used directly as excitation directions.
|
|
386
386
|
|
|
387
|
-
**Reproducibility:** the only stochastic step in this procedure is the initial placement of the $`P`$ points on $`S^{N-1}`$ before the repulsion loop runs (skipped entirely when $`P=2N`$, see above). This is
|
|
387
|
+
**Reproducibility:** the only stochastic step in this procedure is the initial placement of the $`P`$ points on $`S^{N-1}`$ before the repulsion loop runs (skipped entirely when $`P=2N`$, see above). This is controlled by a seeded RNG (`-seed`/`--seed`, default `42`), so `pyadmd run` calls with identical arguments produce identical excitation vectors and `factors.csv` — see [Run Parameters](#parameters).
|
|
388
388
|
|
|
389
389
|
**Note:** ENM recomputation under `--recalc` (see [Excitation Direction Update](#excitation-direction-update)) draws a *new* random combination each time it fires and is intentionally **not** covered by `--seed`, since its purpose is to re-diversify the excitation direction mid-simulation.
|
|
390
390
|
|
|
@@ -502,7 +502,7 @@ below into it.
|
|
|
502
502
|
- **`-rst`/`--rstfile`**: OpenMM XML restart file (`.rst`), written via `XmlSerializer.serialize(state)` from a state built with `getPositions=True, getVelocities=True`
|
|
503
503
|
|
|
504
504
|
### Feature Flags
|
|
505
|
-
- **`-n`/`--
|
|
505
|
+
- **`-n`/`--no-correc`**: Disable excitation vector direction correction and compute standard MDeNM
|
|
506
506
|
|
|
507
507
|
- **`-f`/`--fixed`**: Disable excitation vector correction and keep constant excitation energy injections
|
|
508
508
|
|
|
@@ -517,15 +517,15 @@ below into it.
|
|
|
517
517
|
## Free Energy
|
|
518
518
|
All parameters are optional; the `fel` subcommand reads its input trajectories and reference state from files already produced by `run`/`restart`/`append`, so no additional files need to be supplied.
|
|
519
519
|
|
|
520
|
-
- **`-c`/`--cutoff`**: GROMOS RMSD clustering cutoff, in Å (**optional**. Default: **`0
|
|
520
|
+
- **`-c`/`--cutoff`**: GROMOS RMSD clustering cutoff, in Å (**optional**. Default: **`1.0`**)
|
|
521
521
|
- **`-d`/`--deexcite`**: Total restrained de-excitation MD length per centroid, in ps, split evenly over 4 restraint phases (**optional**. Default: **`200`**)
|
|
522
522
|
- **`-p`/`--production`**: Unrestrained production MD length per centroid, in ps (**optional**. Default: **`800`**)
|
|
523
523
|
- **`-nm`/`--modes`**: Comma-separated mode indices to project for the FEL (**optional**. Default: same modes used in `run`, *e.g.* `7,8,9`)
|
|
524
|
-
- **`--
|
|
525
|
-
- **`-b`/`--bins`**: Number of histogram bins used for the FEL (**optional**. Default: **`
|
|
524
|
+
- **`--modes-2d`**: Mode pairs for 2D FEL plots, as space-separated `"m1,m2"` tokens (**optional**. Default: all pairwise combinations of --modes, *e.g.* "7,8 7,9 8,9")
|
|
525
|
+
- **`-b`/`--bins`**: Number of histogram bins used for the FEL (**optional**. Default: **`100`**)
|
|
526
526
|
- **`-T`/`--temp`**: Temperature for k<sub>B</sub>T scaling and the production ensemble, in K (**optional**. Default: **`303.15`**)
|
|
527
527
|
- **`-s`/`--sel`**: MDAnalysis selection string used for GROMOS RMSD clustering (**optional**. Default: **`"protein and name CA"`**)
|
|
528
|
-
- **`--
|
|
528
|
+
- **`--max-centroids`**: Maximum number of centroids submitted to MD. When the cluster count exceeds this value, exactly this many centroids are selected by greedy farthest-point (MaxMin) sampling to maximize conformational diversity (**optional**. Default: **`50`**)
|
|
529
529
|
|
|
530
530
|
**Note:** `-s`/`--sel` and `-T`/`--temp` must stay the same across repeated `fel` calls on the same simulation — see [Extending a Previous Free Energy Calculation](#extending-a-previous-free-energy-calculation). This `-s`/`--sel` selection is independent of `run`'s `-sel`/`--selection`: it controls GROMOS clustering only, while `run`'s selection controls both energy injection and (by default) the scope of most `pyadmd analyze` metrics — see [Analysis Selection Scope](#analysis-selection-scope).
|
|
531
531
|
|
|
@@ -539,19 +539,19 @@ All parameters are optional; the `fel` subcommand reads its input trajectories a
|
|
|
539
539
|
### Skip Flags
|
|
540
540
|
Each analysis step can be independently disabled. When skipped, that metric will not appear in any CSV, plot, or HTML summary output.
|
|
541
541
|
|
|
542
|
-
- **`--
|
|
543
|
-
- **`--
|
|
544
|
-
- **`--
|
|
545
|
-
- **`--
|
|
546
|
-
- **`--
|
|
547
|
-
- **`--
|
|
548
|
-
- **`--
|
|
542
|
+
- **`--no-rmsd`**: Skip RMSD calculation
|
|
543
|
+
- **`--no-rg`**: Skip radius of gyration calculation
|
|
544
|
+
- **`--no-sasa`**: Skip SASA and hydrophobic exposure calculation
|
|
545
|
+
- **`--no-rmsf`**: Skip RMSF calculation
|
|
546
|
+
- **`--no-dssp`**: Skip secondary structure analysis via DSSP
|
|
547
|
+
- **`--no-dccm`**: Skip DCCM (dynamic cross-correlation matrix) calculation
|
|
548
|
+
- **`--no-lmi`**: Skip LMI (Linear Mutual Information) calculation
|
|
549
549
|
|
|
550
550
|
**Note:** Before analysis, the program checks if `pyadmd` or `fel` calls are properly completed. If any unit (pyAdMD replica or free energy centroid) hasn't finished running, `analyze` prints a warning listing the incomplete units and their cycles completed/target, but proceeds anyway — see [Handling Incomplete Units](#handling-incomplete-units) below.
|
|
551
551
|
|
|
552
552
|
## ENM
|
|
553
553
|
### Parameters
|
|
554
|
-
- **`-i`/`--input`**: Input PDB file (**required**, unless **`-w`/`--
|
|
554
|
+
- **`-i`/`--input`**: Input PDB file (**required**, unless **`-w`/`--write-modes`** is used)
|
|
555
555
|
|
|
556
556
|
- **`-o`/`--output`**: Output folder name (**optional**. Default: **`output`**)
|
|
557
557
|
|
|
@@ -561,25 +561,25 @@ Each analysis step can be independently disabled. When skipped, that metric will
|
|
|
561
561
|
|
|
562
562
|
- **`-c`/`--cutoff`**: Interaction cutoff distance, in Å (**optional**. Default: **`15.0`** for CA, **`12.0`** for HEAVY)
|
|
563
563
|
|
|
564
|
-
- **`-k`/`--
|
|
564
|
+
- **`-k`/`--spring-constant`**: ENM harmonic spring constant, in kcal/mol/Ų (**optional**. Default: **`1.0`**)
|
|
565
565
|
|
|
566
|
-
- **`--
|
|
566
|
+
- **`--max-modes`**: Number of non-rigid-body vibrational modes to compute (**optional**. Default: **`50`**)
|
|
567
567
|
|
|
568
|
-
- **`--
|
|
568
|
+
- **`--output-modes`**: Number of modes (file-labeled 1 through N, where label 1 is the first non-rigid mode) to write vectors/trajectories for (**optional**. Default: **`10`**)
|
|
569
569
|
|
|
570
570
|
### Skip Flags
|
|
571
571
|
Collectivity, contributions, RMSF, DCCM, and mode vector/trajectory writing can each be independently disabled:
|
|
572
572
|
|
|
573
|
-
- **`--
|
|
574
|
-
- **`--
|
|
575
|
-
- **`--
|
|
576
|
-
- **`--
|
|
577
|
-
- **`--
|
|
578
|
-
- **`--
|
|
579
|
-
- **`--
|
|
573
|
+
- **`--no-vec`**: Skip writing mode vectors (`.xyz`)
|
|
574
|
+
- **`--no-trj`**: Skip writing mode trajectories (`_traj.pdb`)
|
|
575
|
+
- **`--no-collectivity`**: Skip mode collectivity calculation
|
|
576
|
+
- **`--no-contributions`**: Skip the variance-contributions plot
|
|
577
|
+
- **`--no-rmsf`**: Skip the NMA-predicted RMSF plot (analytical, from the harmonic approximation — not derived from an MD trajectory; see [Analysis](#analysis-1) for the trajectory-based RMSF computed elsewhere in the package)
|
|
578
|
+
- **`--no-dccm`**: Skip the NMA-predicted DCCM plot (same analytical distinction as RMSF above)
|
|
579
|
+
- **`--no-gpu`**: Disable GPU acceleration
|
|
580
580
|
|
|
581
581
|
### Post-hoc Mode Re-writer
|
|
582
|
-
- **`-w`/`--
|
|
582
|
+
- **`-w`/`--write-modes`**: Write mode vectors/trajectories from a previously completed `enm` run's saved `*_modes.npy`/`*_frequencies.npy`/structure PDB, without recomputing the ENM. Accepts comma-separated integers and inclusive ranges (`start:end`), *e.g.* `"26,41"`, `"7:10"`, `"42,44:50"`. Requires **`-o`/`--output`** pointing to an existing `enm` output directory.
|
|
583
583
|
|
|
584
584
|
**Note on mode-file resolution:** `pyadmd enm`'s mode vector/trajectory files (`_mode_{N}.xyz`/`_mode_{N}_traj.pdb`) are written at the ENM's **native reduced resolution** (Cα-only or heavy-atom only, matching whatever the modes were computed on).
|
|
585
585
|
|
|
@@ -590,21 +590,21 @@ enm_output/
|
|
|
590
590
|
├── {base_name}_{model}_structure.pdb # reduced‑resolution structure (Cα or heavy atoms)
|
|
591
591
|
├── {base_name}_{model}_frequencies.npy # vibrational frequencies (filtered, non‑rigid modes)
|
|
592
592
|
├── {base_name}_{model}_modes.npy # eigenvector matrix (filtered, non‑rigid modes)
|
|
593
|
-
├── collectivity.csv # per‑mode collectivity (κ) and frequency (cm⁻¹) (omitted with --
|
|
594
|
-
├── mode_contributions.png # per‑mode and cumulative variance contributions (omitted with --
|
|
595
|
-
├── rmsf_plot.png # NMA‑predicted residue RMSF (harmonic approximation) (omitted with --
|
|
596
|
-
├── dccm_plot.png # NMA‑predicted residue cross‑correlation matrix (omitted with --
|
|
597
|
-
├── dccm_matrix.npy # raw NMA‑DCCM matrix (omitted with --
|
|
598
|
-
├── {base_name}_{model}_mode_{N}.xyz # displacement vector of mode N (XYZ format) (omitted with --
|
|
599
|
-
└── {base_name}_{model}_mode_{N}_traj.pdb # oscillatory PDB trajectory along mode N (multi‑model) (omitted with --
|
|
593
|
+
├── collectivity.csv # per‑mode collectivity (κ) and frequency (cm⁻¹) (omitted with --no-collectivity)
|
|
594
|
+
├── mode_contributions.png # per‑mode and cumulative variance contributions (omitted with --no-contributions)
|
|
595
|
+
├── rmsf_plot.png # NMA‑predicted residue RMSF (harmonic approximation) (omitted with --no-rmsf)
|
|
596
|
+
├── dccm_plot.png # NMA‑predicted residue cross‑correlation matrix (omitted with --no-dccm)
|
|
597
|
+
├── dccm_matrix.npy # raw NMA‑DCCM matrix (omitted with --no-dccm)
|
|
598
|
+
├── {base_name}_{model}_mode_{N}.xyz # displacement vector of mode N (XYZ format) (omitted with --no-vec)
|
|
599
|
+
└── {base_name}_{model}_mode_{N}_traj.pdb # oscillatory PDB trajectory along mode N (multi‑model) (omitted with --no-trj)
|
|
600
600
|
```
|
|
601
601
|
|
|
602
602
|
|
|
603
603
|
**Notes:**
|
|
604
604
|
- `{base_name}` is the stem of the input PDB file (e.g., `system`).
|
|
605
605
|
- `{model}` is either `ca` (Cα‑only) or `heavy` (heavy atoms).
|
|
606
|
-
- The mode vector and trajectory files are written only for the modes specified by `‑‑
|
|
607
|
-
- The `-w` / `‑‑
|
|
606
|
+
- The mode vector and trajectory files are written only for the modes specified by `‑‑output-modes` (default: first 10 non‑rigid modes).
|
|
607
|
+
- The `-w` / `‑‑write-modes` option re‑uses an existing output directory to write **additional** mode files (vectors/trajectories) without recomputing the ENM.
|
|
608
608
|
|
|
609
609
|
### Output Files Description
|
|
610
610
|
|
|
@@ -614,17 +614,17 @@ enm_output/
|
|
|
614
614
|
- **`{base_name}_{model}_modes.npy`**: 2D array of shape `(3N, M)`, where column `i` is the mass‑weighted eigenvector for mode `i` (matching the order of `frequencies`). These two NumPy files enable fast post‑hoc re‑writing of vectors/trajectories via `-w`.
|
|
615
615
|
|
|
616
616
|
2. **Collectivity and Variance Contributions**
|
|
617
|
-
- **`collectivity.csv`**: CSV with columns `Mode`, `Frequency (cm⁻¹)`, and `Collectivity`. Omitted with `‑‑
|
|
618
|
-
- **`mode_contributions.png`**: Two‑panel figure showing (left) the proportion of total mean‑square fluctuation contributed by each of the first `‑‑
|
|
617
|
+
- **`collectivity.csv`**: CSV with columns `Mode`, `Frequency (cm⁻¹)`, and `Collectivity`. Omitted with `‑‑no-collectivity`.
|
|
618
|
+
- **`mode_contributions.png`**: Two‑panel figure showing (left) the proportion of total mean‑square fluctuation contributed by each of the first `‑‑max-modes` non‑rigid modes (proportional to `1/λ_k` under equipartition), and (right) the cumulative fraction. Omitted with `‑‑no-contributions`.
|
|
619
619
|
|
|
620
620
|
3. **NMA‑Predicted RMSF and DCCM**
|
|
621
|
-
- **`rmsf_plot.png`**: Residue‑averaged root‑mean‑square fluctuation (Å) derived from the harmonic approximation. The plot is based on the sum over modes of `(kBT/λ_k) * |u_i^(k)|² / m_i`. Omitted with `‑‑
|
|
621
|
+
- **`rmsf_plot.png`**: Residue‑averaged root‑mean‑square fluctuation (Å) derived from the harmonic approximation. The plot is based on the sum over modes of `(kBT/λ_k) * |u_i^(k)|² / m_i`. Omitted with `‑‑no-rmsf`.
|
|
622
622
|
- **`dccm_plot.png`**: DCCM heatmap, diverging colormap (red = fully correlated, white = uncorrelated, blue = fully anti-correlated).
|
|
623
|
-
- **`dccm_matrix.npy`**: Raw correlation matrix, saved alongside the plot. Both are omitted with `‑‑
|
|
623
|
+
- **`dccm_matrix.npy`**: Raw correlation matrix, saved alongside the plot. Both are omitted with `‑‑no-dccm`.
|
|
624
624
|
|
|
625
625
|
4. **Mode‑Specific Vector and Trajectory Files**
|
|
626
|
-
- **`{base_name}_{model}_mode_{N}.xyz`**: XYZ‑formatted file listing the displacement vector for mode `N`. The header includes the mode frequency in cm⁻¹. Omitted with `‑‑
|
|
627
|
-
- **`{base_name}_{model}_mode_{N}_traj.pdb`**: Multi‑model PDB showing a smooth oscillation along mode `N`. The trajectory is mass‑weighted and scaled to a peak amplitude (default 4 Å). Omitted with `‑‑
|
|
626
|
+
- **`{base_name}_{model}_mode_{N}.xyz`**: XYZ‑formatted file listing the displacement vector for mode `N`. The header includes the mode frequency in cm⁻¹. Omitted with `‑‑no-vec`.
|
|
627
|
+
- **`{base_name}_{model}_mode_{N}_traj.pdb`**: Multi‑model PDB showing a smooth oscillation along mode `N`. The trajectory is mass‑weighted and scaled to a peak amplitude (default 4 Å). Omitted with `‑‑no-trj`.
|
|
628
628
|
|
|
629
629
|
**Note:** When using the post‑hoc mode re‑writer (`pyadmd enm -w "..." -o enm_output`), only the mode‑specific vector and trajectory files are newly written for the requested modes; all other files (core data, collectivity, plots) are left untouched and must already exist from a previous full ENM run.
|
|
630
630
|
|
|
@@ -636,17 +636,21 @@ The **`fel`** subcommand computes a free energy landscape (FEL) from a completed
|
|
|
636
636
|
|
|
637
637
|
## Method Overview
|
|
638
638
|
1. **Merge trajectories**: all `rep*.dcd` replica trajectories are concatenated into a single pseudo-trajectory.
|
|
639
|
-
2. **GROMOS clustering**: frames are clustered by Cα RMSD (`-s`/`-c`); when the number of clusters exceeds `--
|
|
640
|
-
3. **Centroid MD**: each centroid undergoes a 4-phase restrained
|
|
639
|
+
2. **GROMOS clustering**: frames are clustered by Cα RMSD (`-s`/`-c`); when the number of clusters exceeds `--max-centroids`, a maximally diverse subset is selected via greedy farthest-point (MaxMin) sampling on the cluster centroids.
|
|
640
|
+
3. **Centroid MD**: each centroid undergoes a 4-phase NVT restrained
|
|
641
|
+
de-excitation (`-d`, progressively decreasing positional restraints on
|
|
642
|
+
backbone and sidechain heavy atoms) followed by unrestrained NPT production
|
|
643
|
+
MD (`-p`). Each de-excitation phase is further split into a
|
|
644
|
+
30%/20%/30%/20% pattern of nominal restraint / brief relief dip, where the dip targets a gentler restraint level rather than the nominal one, periodically releasing local strain due to the force constraints. If a centroid's de-excitation fails, it is automatically retried using an alternative member frame from the same cluster (up to 4 substitutes), and if all of those also fail, retried once more with a reinforced integrator ($`1 fs`$ timestep, $`5 ps^{-1}`$ friction, applied to de-excitation only) before the centroid is finally marked failed and excluded from the FEL.
|
|
641
645
|
4. **Mode projection**: every production frame is projected onto each individual normal mode vector as a signed mass-weighted RMS displacement.
|
|
642
|
-
5. **FEL computation**: a population histogram (`-b` bins) is converted to $`\Delta G`$ via $`\Delta G = -k_{BT} \cdot ln[P(q)/P_{max}]`$, computed independently per mode (1D) and for user-specified mode pairs (2D, `--
|
|
646
|
+
5. **FEL computation**: a population histogram (`-b` bins) is converted to $`\Delta G`$ via $`\Delta G = -k_{BT} \cdot ln[P(q)/P_{max}]`$, computed independently per mode (1D) and for user-specified mode pairs (2D, `--modes-2d`).
|
|
643
647
|
|
|
644
648
|
## Extending a Previous Free Energy Calculation
|
|
645
|
-
`fel` can be re-invoked on the same simulation with a larger `--
|
|
649
|
+
`fel` can be re-invoked on the same simulation with a larger `--max-centroids` and/or longer `-p`/`--production` to extend an earlier calculation, rather than starting over:
|
|
646
650
|
|
|
647
651
|
- **Free to change**: `-c`/`--cutoff` and `-d`/`--deexcite`. Changing the cutoff only affects the re-thresholding of the cached pairwise-RMSD matrix. Changing the de-excitation length only affects newly-created centroids going forward; existing centroids keep whatever de-excitation they originally had and are simply extended in production.
|
|
648
652
|
- **Must stay the same**: `-s`/`--sel`, `-T`/`--temp`. Mixing clustering selections or temperatures inside one pooled FEL is not physically valid.
|
|
649
|
-
- **Never shrinks existing work**: if `--
|
|
653
|
+
- **Never shrinks existing work**: if `--max-centroids` or `-p`/`--production` is *smaller* than the previous call, the program warns and uses the larger of the two values instead. We suggest start with smaller values and append more data, if necessary.
|
|
650
654
|
|
|
651
655
|
## Output Structure
|
|
652
656
|
### Directory Organization
|
|
@@ -671,9 +675,9 @@ fel/
|
|
|
671
675
|
|
|
672
676
|
## Output Files Description
|
|
673
677
|
1. **Cache Files**
|
|
674
|
-
- **`run_metadata.json`**: the clustering selection, temperature, cutoff, de-excitation length, `
|
|
678
|
+
- **`run_metadata.json`**: the clustering selection, temperature, cutoff, de-excitation length, `max-centroids`, and production length used.
|
|
675
679
|
- **`clustering_rmsd_cache.npz`/`.json`**: the pairwise-RMSD matrix over subsampled frames.
|
|
676
|
-
- **`clustering_summary.csv`**: summary containing cluster ID, frame index, cluster size, status this run (fresh
|
|
680
|
+
- **`clustering_summary.csv`**: summary containing cluster ID, frame index, cluster size, status this run (`fresh`/`extended`/`skipped`/`failed`, annotated with `substitute frame {N}` and/or `reinforced` when a centroid needed those fallbacks), `source_frame_used` (the frame whose coordinates actually produced a successful run — equal to `centroid_frame` unless a substitute member was used), `md_attempts` (total attempts across the standard and reinforced passes), and cycles/ps completed. A `status` of `failed` means every attempt (original frame + substitutes, standard + reinforced settings) failed; that centroid is excluded from the FEL rather than blocking the run.
|
|
677
681
|
2. **Plot Files**
|
|
678
682
|
- **`fel_mode[N].csv`/`fel_mode[N]_plot.png`**: 1D free energy landscape per mode, in Å and kcal/mol.
|
|
679
683
|
- **`fel_2d_mode[N]_mode[M].png`**: 2D free energy landscape for a mode pair.
|
|
@@ -751,31 +755,31 @@ When `-src fel` is used, the shared production time axis (applied uniformly acro
|
|
|
751
755
|
```
|
|
752
756
|
analysis/{fel/}
|
|
753
757
|
├── analysis_results.csv # Combined analysis data from all units
|
|
754
|
-
├── rmsf.csv # Combined RMSF data (omitted with --
|
|
758
|
+
├── rmsf.csv # Combined RMSF data (omitted with --no-rmsf)
|
|
755
759
|
├── analysis_summary.html # HTML summary report
|
|
756
|
-
├── rmsd_plot.png # RMSD plot (omitted with --
|
|
757
|
-
├── radius_gyration_plot.png # Radius of gyration plot (omitted with --
|
|
758
|
-
├── sasa_plot.png # SASA plot (omitted with --
|
|
759
|
-
├── hydrophobic_exposure_plot.png # Hydrophobic exposure plot (omitted with --
|
|
760
|
-
├── rmsf_average.png # Average RMSF plot (omitted with --
|
|
761
|
-
├── secondary_structure_average.png # Average secondary structure plot (omitted with --
|
|
762
|
-
├── dccm_average.png # Average DCCM heatmap (omitted with --
|
|
763
|
-
├── dccm_average.npy # Average DCCM matrix, raw (omitted with --
|
|
764
|
-
├── lmi_average.png # Average LMI heatmap (omitted with --
|
|
765
|
-
├── lmi_average.npy # Average LMI matrix, raw (omitted with --
|
|
760
|
+
├── rmsd_plot.png # RMSD plot (omitted with --no-rmsd)
|
|
761
|
+
├── radius_gyration_plot.png # Radius of gyration plot (omitted with --no-rg)
|
|
762
|
+
├── sasa_plot.png # SASA plot (omitted with --no-sasa)
|
|
763
|
+
├── hydrophobic_exposure_plot.png # Hydrophobic exposure plot (omitted with --no-sasa)
|
|
764
|
+
├── rmsf_average.png # Average RMSF plot (omitted with --no-rmsf)
|
|
765
|
+
├── secondary_structure_average.png # Average secondary structure plot (omitted with --no-dssp)
|
|
766
|
+
├── dccm_average.png # Average DCCM heatmap (omitted with --no-dccm)
|
|
767
|
+
├── dccm_average.npy # Average DCCM matrix, raw (omitted with --no-dccm)
|
|
768
|
+
├── lmi_average.png # Average LMI heatmap (omitted with --no-lmi)
|
|
769
|
+
├── lmi_average.npy # Average LMI matrix, raw (omitted with --no-lmi)
|
|
766
770
|
└── {rep[1-N]}/ or {centroid_frame[F]}/ # Unit-specific directories
|
|
767
771
|
├── analysis_results.csv # Unit-specific analysis data
|
|
768
|
-
├── rmsf.csv # Unit-specific RMSF data (omitted with --
|
|
769
|
-
├── rmsd_plot.png # Unit-specific RMSD plot (omitted with --
|
|
770
|
-
├── radius_gyration_plot.png # Unit-specific RoG plot (omitted with --
|
|
771
|
-
├── sasa_plot.png # Unit-specific SASA plot (omitted with --
|
|
772
|
-
├── hydrophobic_exposure_plot.png # Unit-specific hydrophobic exposure plot (omitted with --
|
|
773
|
-
├── rmsf_plot.png # Unit-specific RMSF plot (omitted with --
|
|
774
|
-
├── secondary_structure.png # Unit-specific secondary structure plot (omitted with --
|
|
775
|
-
├── dccm_matrix.npy # Unit-specific DCCM matrix, raw (omitted with --
|
|
776
|
-
├── dccm_plot.png # Unit-specific DCCM heatmap (omitted with --
|
|
777
|
-
├── lmi_matrix.npy # Unit-specific LMI matrix, raw (omitted with --
|
|
778
|
-
└── lmi_plot.png # Unit-specific LMI heatmap (omitted with --
|
|
772
|
+
├── rmsf.csv # Unit-specific RMSF data (omitted with --no-rmsf)
|
|
773
|
+
├── rmsd_plot.png # Unit-specific RMSD plot (omitted with --no-rmsd)
|
|
774
|
+
├── radius_gyration_plot.png # Unit-specific RoG plot (omitted with --no-rg)
|
|
775
|
+
├── sasa_plot.png # Unit-specific SASA plot (omitted with --no-sasa)
|
|
776
|
+
├── hydrophobic_exposure_plot.png # Unit-specific hydrophobic exposure plot (omitted with --no-sasa)
|
|
777
|
+
├── rmsf_plot.png # Unit-specific RMSF plot (omitted with --no-rmsf)
|
|
778
|
+
├── secondary_structure.png # Unit-specific secondary structure plot (omitted with --no-dssp)
|
|
779
|
+
├── dccm_matrix.npy # Unit-specific DCCM matrix, raw (omitted with --no-dccm)
|
|
780
|
+
├── dccm_plot.png # Unit-specific DCCM heatmap (omitted with --no-dccm)
|
|
781
|
+
├── lmi_matrix.npy # Unit-specific LMI matrix, raw (omitted with --no-lmi)
|
|
782
|
+
└── lmi_plot.png # Unit-specific LMI heatmap (omitted with --no-lmi)
|
|
779
783
|
```
|
|
780
784
|
**Note:** With `-src fel`, the same set of files is written under `analysis/fel/` instead, with one subdirectory per centroid (named by frame index, mirroring `fel/centroids/centroid_frame[F]/`) in place of `rep[1-N]/`.
|
|
781
785
|
|
|
@@ -790,9 +794,9 @@ analysis/{fel/}
|
|
|
790
794
|
- Average plots across all units
|
|
791
795
|
|
|
792
796
|
3. **Correlation Matrix Files**
|
|
793
|
-
- **`dccm_matrix.npy`** (per-unit) / **`dccm_average.npy`** (cross-unit): raw (n_Cα × n_Cα) DCCM matrix, values in [-1, 1]. Omitted with `--
|
|
797
|
+
- **`dccm_matrix.npy`** (per-unit) / **`dccm_average.npy`** (cross-unit): raw (n_Cα × n_Cα) DCCM matrix, values in [-1, 1]. Omitted with `--no-dccm`.
|
|
794
798
|
- **`dccm_plot.png`** / **`dccm_average.png`**: DCCM heatmap, diverging colormap (red = fully correlated, white = uncorrelated, blue = fully anti-correlated).
|
|
795
|
-
- **`lmi_matrix.npy`** / **`lmi_average.npy`**: raw (n_Cα × n_Cα) LMI matrix, values in [0, 1]. Omitted with `--
|
|
799
|
+
- **`lmi_matrix.npy`** / **`lmi_average.npy`**: raw (n_Cα × n_Cα) LMI matrix, values in [0, 1]. Omitted with `--no-lmi`.
|
|
796
800
|
- **`lmi_plot.png`** / **`lmi_average.png`**: LMI heatmap, sequential colormap (LMI has no sign).
|
|
797
801
|
|
|
798
802
|
4. **HTML Summary**
|
|
@@ -850,7 +854,7 @@ pyadmd run -src NAMD \
|
|
|
850
854
|
-vel tutorial/system.vel \
|
|
851
855
|
-xsc tutorial/system.xsc \
|
|
852
856
|
-str tutorial/system.str \
|
|
853
|
-
--
|
|
857
|
+
--no-correc
|
|
854
858
|
```
|
|
855
859
|
## Restart unfinished pyAdMD simulations
|
|
856
860
|
```
|
|
@@ -866,7 +870,7 @@ pyadmd analyze
|
|
|
866
870
|
```
|
|
867
871
|
## Analyze every 5 ps skipping DSSP and LMI
|
|
868
872
|
```
|
|
869
|
-
pyadmd analyze -r --
|
|
873
|
+
pyadmd analyze -r --no-dssp --no-lmi
|
|
870
874
|
```
|
|
871
875
|
## Compute a free energy landscape
|
|
872
876
|
```
|
|
@@ -874,7 +878,7 @@ pyadmd fel -c 2 -p 100
|
|
|
874
878
|
```
|
|
875
879
|
## Extend a previous free energy calculation with more centroids and production time
|
|
876
880
|
```
|
|
877
|
-
pyadmd fel -c 2 -p 500 --
|
|
881
|
+
pyadmd fel -c 2 -p 500 --max-centroids 100
|
|
878
882
|
```
|
|
879
883
|
## Compute a standalone ENM (Cα model, writing modes 7-16)
|
|
880
884
|
```
|
|
@@ -356,7 +356,7 @@ $$
|
|
|
356
356
|
|
|
357
357
|
where $`\mathbf{M}_{\mathrm{nm}}^+`$ denotes the Moore–Penrose pseudoinverse of $`\mathbf{M}_{\mathrm{nm}}`$. These approximate coefficients are written to the `factors.csv` output file for reference but do not influence the simulation; the physical vectors $`\mathbf{q}_i`$ are used directly as excitation directions.
|
|
358
358
|
|
|
359
|
-
**Reproducibility:** the only stochastic step in this procedure is the initial placement of the $`P`$ points on $`S^{N-1}`$ before the repulsion loop runs (skipped entirely when $`P=2N`$, see above). This is
|
|
359
|
+
**Reproducibility:** the only stochastic step in this procedure is the initial placement of the $`P`$ points on $`S^{N-1}`$ before the repulsion loop runs (skipped entirely when $`P=2N`$, see above). This is controlled by a seeded RNG (`-seed`/`--seed`, default `42`), so `pyadmd run` calls with identical arguments produce identical excitation vectors and `factors.csv` — see [Run Parameters](#parameters).
|
|
360
360
|
|
|
361
361
|
**Note:** ENM recomputation under `--recalc` (see [Excitation Direction Update](#excitation-direction-update)) draws a *new* random combination each time it fires and is intentionally **not** covered by `--seed`, since its purpose is to re-diversify the excitation direction mid-simulation.
|
|
362
362
|
|
|
@@ -474,7 +474,7 @@ below into it.
|
|
|
474
474
|
- **`-rst`/`--rstfile`**: OpenMM XML restart file (`.rst`), written via `XmlSerializer.serialize(state)` from a state built with `getPositions=True, getVelocities=True`
|
|
475
475
|
|
|
476
476
|
### Feature Flags
|
|
477
|
-
- **`-n`/`--
|
|
477
|
+
- **`-n`/`--no-correc`**: Disable excitation vector direction correction and compute standard MDeNM
|
|
478
478
|
|
|
479
479
|
- **`-f`/`--fixed`**: Disable excitation vector correction and keep constant excitation energy injections
|
|
480
480
|
|
|
@@ -489,15 +489,15 @@ below into it.
|
|
|
489
489
|
## Free Energy
|
|
490
490
|
All parameters are optional; the `fel` subcommand reads its input trajectories and reference state from files already produced by `run`/`restart`/`append`, so no additional files need to be supplied.
|
|
491
491
|
|
|
492
|
-
- **`-c`/`--cutoff`**: GROMOS RMSD clustering cutoff, in Å (**optional**. Default: **`0
|
|
492
|
+
- **`-c`/`--cutoff`**: GROMOS RMSD clustering cutoff, in Å (**optional**. Default: **`1.0`**)
|
|
493
493
|
- **`-d`/`--deexcite`**: Total restrained de-excitation MD length per centroid, in ps, split evenly over 4 restraint phases (**optional**. Default: **`200`**)
|
|
494
494
|
- **`-p`/`--production`**: Unrestrained production MD length per centroid, in ps (**optional**. Default: **`800`**)
|
|
495
495
|
- **`-nm`/`--modes`**: Comma-separated mode indices to project for the FEL (**optional**. Default: same modes used in `run`, *e.g.* `7,8,9`)
|
|
496
|
-
- **`--
|
|
497
|
-
- **`-b`/`--bins`**: Number of histogram bins used for the FEL (**optional**. Default: **`
|
|
496
|
+
- **`--modes-2d`**: Mode pairs for 2D FEL plots, as space-separated `"m1,m2"` tokens (**optional**. Default: all pairwise combinations of --modes, *e.g.* "7,8 7,9 8,9")
|
|
497
|
+
- **`-b`/`--bins`**: Number of histogram bins used for the FEL (**optional**. Default: **`100`**)
|
|
498
498
|
- **`-T`/`--temp`**: Temperature for k<sub>B</sub>T scaling and the production ensemble, in K (**optional**. Default: **`303.15`**)
|
|
499
499
|
- **`-s`/`--sel`**: MDAnalysis selection string used for GROMOS RMSD clustering (**optional**. Default: **`"protein and name CA"`**)
|
|
500
|
-
- **`--
|
|
500
|
+
- **`--max-centroids`**: Maximum number of centroids submitted to MD. When the cluster count exceeds this value, exactly this many centroids are selected by greedy farthest-point (MaxMin) sampling to maximize conformational diversity (**optional**. Default: **`50`**)
|
|
501
501
|
|
|
502
502
|
**Note:** `-s`/`--sel` and `-T`/`--temp` must stay the same across repeated `fel` calls on the same simulation — see [Extending a Previous Free Energy Calculation](#extending-a-previous-free-energy-calculation). This `-s`/`--sel` selection is independent of `run`'s `-sel`/`--selection`: it controls GROMOS clustering only, while `run`'s selection controls both energy injection and (by default) the scope of most `pyadmd analyze` metrics — see [Analysis Selection Scope](#analysis-selection-scope).
|
|
503
503
|
|
|
@@ -511,19 +511,19 @@ All parameters are optional; the `fel` subcommand reads its input trajectories a
|
|
|
511
511
|
### Skip Flags
|
|
512
512
|
Each analysis step can be independently disabled. When skipped, that metric will not appear in any CSV, plot, or HTML summary output.
|
|
513
513
|
|
|
514
|
-
- **`--
|
|
515
|
-
- **`--
|
|
516
|
-
- **`--
|
|
517
|
-
- **`--
|
|
518
|
-
- **`--
|
|
519
|
-
- **`--
|
|
520
|
-
- **`--
|
|
514
|
+
- **`--no-rmsd`**: Skip RMSD calculation
|
|
515
|
+
- **`--no-rg`**: Skip radius of gyration calculation
|
|
516
|
+
- **`--no-sasa`**: Skip SASA and hydrophobic exposure calculation
|
|
517
|
+
- **`--no-rmsf`**: Skip RMSF calculation
|
|
518
|
+
- **`--no-dssp`**: Skip secondary structure analysis via DSSP
|
|
519
|
+
- **`--no-dccm`**: Skip DCCM (dynamic cross-correlation matrix) calculation
|
|
520
|
+
- **`--no-lmi`**: Skip LMI (Linear Mutual Information) calculation
|
|
521
521
|
|
|
522
522
|
**Note:** Before analysis, the program checks if `pyadmd` or `fel` calls are properly completed. If any unit (pyAdMD replica or free energy centroid) hasn't finished running, `analyze` prints a warning listing the incomplete units and their cycles completed/target, but proceeds anyway — see [Handling Incomplete Units](#handling-incomplete-units) below.
|
|
523
523
|
|
|
524
524
|
## ENM
|
|
525
525
|
### Parameters
|
|
526
|
-
- **`-i`/`--input`**: Input PDB file (**required**, unless **`-w`/`--
|
|
526
|
+
- **`-i`/`--input`**: Input PDB file (**required**, unless **`-w`/`--write-modes`** is used)
|
|
527
527
|
|
|
528
528
|
- **`-o`/`--output`**: Output folder name (**optional**. Default: **`output`**)
|
|
529
529
|
|
|
@@ -533,25 +533,25 @@ Each analysis step can be independently disabled. When skipped, that metric will
|
|
|
533
533
|
|
|
534
534
|
- **`-c`/`--cutoff`**: Interaction cutoff distance, in Å (**optional**. Default: **`15.0`** for CA, **`12.0`** for HEAVY)
|
|
535
535
|
|
|
536
|
-
- **`-k`/`--
|
|
536
|
+
- **`-k`/`--spring-constant`**: ENM harmonic spring constant, in kcal/mol/Ų (**optional**. Default: **`1.0`**)
|
|
537
537
|
|
|
538
|
-
- **`--
|
|
538
|
+
- **`--max-modes`**: Number of non-rigid-body vibrational modes to compute (**optional**. Default: **`50`**)
|
|
539
539
|
|
|
540
|
-
- **`--
|
|
540
|
+
- **`--output-modes`**: Number of modes (file-labeled 1 through N, where label 1 is the first non-rigid mode) to write vectors/trajectories for (**optional**. Default: **`10`**)
|
|
541
541
|
|
|
542
542
|
### Skip Flags
|
|
543
543
|
Collectivity, contributions, RMSF, DCCM, and mode vector/trajectory writing can each be independently disabled:
|
|
544
544
|
|
|
545
|
-
- **`--
|
|
546
|
-
- **`--
|
|
547
|
-
- **`--
|
|
548
|
-
- **`--
|
|
549
|
-
- **`--
|
|
550
|
-
- **`--
|
|
551
|
-
- **`--
|
|
545
|
+
- **`--no-vec`**: Skip writing mode vectors (`.xyz`)
|
|
546
|
+
- **`--no-trj`**: Skip writing mode trajectories (`_traj.pdb`)
|
|
547
|
+
- **`--no-collectivity`**: Skip mode collectivity calculation
|
|
548
|
+
- **`--no-contributions`**: Skip the variance-contributions plot
|
|
549
|
+
- **`--no-rmsf`**: Skip the NMA-predicted RMSF plot (analytical, from the harmonic approximation — not derived from an MD trajectory; see [Analysis](#analysis-1) for the trajectory-based RMSF computed elsewhere in the package)
|
|
550
|
+
- **`--no-dccm`**: Skip the NMA-predicted DCCM plot (same analytical distinction as RMSF above)
|
|
551
|
+
- **`--no-gpu`**: Disable GPU acceleration
|
|
552
552
|
|
|
553
553
|
### Post-hoc Mode Re-writer
|
|
554
|
-
- **`-w`/`--
|
|
554
|
+
- **`-w`/`--write-modes`**: Write mode vectors/trajectories from a previously completed `enm` run's saved `*_modes.npy`/`*_frequencies.npy`/structure PDB, without recomputing the ENM. Accepts comma-separated integers and inclusive ranges (`start:end`), *e.g.* `"26,41"`, `"7:10"`, `"42,44:50"`. Requires **`-o`/`--output`** pointing to an existing `enm` output directory.
|
|
555
555
|
|
|
556
556
|
**Note on mode-file resolution:** `pyadmd enm`'s mode vector/trajectory files (`_mode_{N}.xyz`/`_mode_{N}_traj.pdb`) are written at the ENM's **native reduced resolution** (Cα-only or heavy-atom only, matching whatever the modes were computed on).
|
|
557
557
|
|
|
@@ -562,21 +562,21 @@ enm_output/
|
|
|
562
562
|
├── {base_name}_{model}_structure.pdb # reduced‑resolution structure (Cα or heavy atoms)
|
|
563
563
|
├── {base_name}_{model}_frequencies.npy # vibrational frequencies (filtered, non‑rigid modes)
|
|
564
564
|
├── {base_name}_{model}_modes.npy # eigenvector matrix (filtered, non‑rigid modes)
|
|
565
|
-
├── collectivity.csv # per‑mode collectivity (κ) and frequency (cm⁻¹) (omitted with --
|
|
566
|
-
├── mode_contributions.png # per‑mode and cumulative variance contributions (omitted with --
|
|
567
|
-
├── rmsf_plot.png # NMA‑predicted residue RMSF (harmonic approximation) (omitted with --
|
|
568
|
-
├── dccm_plot.png # NMA‑predicted residue cross‑correlation matrix (omitted with --
|
|
569
|
-
├── dccm_matrix.npy # raw NMA‑DCCM matrix (omitted with --
|
|
570
|
-
├── {base_name}_{model}_mode_{N}.xyz # displacement vector of mode N (XYZ format) (omitted with --
|
|
571
|
-
└── {base_name}_{model}_mode_{N}_traj.pdb # oscillatory PDB trajectory along mode N (multi‑model) (omitted with --
|
|
565
|
+
├── collectivity.csv # per‑mode collectivity (κ) and frequency (cm⁻¹) (omitted with --no-collectivity)
|
|
566
|
+
├── mode_contributions.png # per‑mode and cumulative variance contributions (omitted with --no-contributions)
|
|
567
|
+
├── rmsf_plot.png # NMA‑predicted residue RMSF (harmonic approximation) (omitted with --no-rmsf)
|
|
568
|
+
├── dccm_plot.png # NMA‑predicted residue cross‑correlation matrix (omitted with --no-dccm)
|
|
569
|
+
├── dccm_matrix.npy # raw NMA‑DCCM matrix (omitted with --no-dccm)
|
|
570
|
+
├── {base_name}_{model}_mode_{N}.xyz # displacement vector of mode N (XYZ format) (omitted with --no-vec)
|
|
571
|
+
└── {base_name}_{model}_mode_{N}_traj.pdb # oscillatory PDB trajectory along mode N (multi‑model) (omitted with --no-trj)
|
|
572
572
|
```
|
|
573
573
|
|
|
574
574
|
|
|
575
575
|
**Notes:**
|
|
576
576
|
- `{base_name}` is the stem of the input PDB file (e.g., `system`).
|
|
577
577
|
- `{model}` is either `ca` (Cα‑only) or `heavy` (heavy atoms).
|
|
578
|
-
- The mode vector and trajectory files are written only for the modes specified by `‑‑
|
|
579
|
-
- The `-w` / `‑‑
|
|
578
|
+
- The mode vector and trajectory files are written only for the modes specified by `‑‑output-modes` (default: first 10 non‑rigid modes).
|
|
579
|
+
- The `-w` / `‑‑write-modes` option re‑uses an existing output directory to write **additional** mode files (vectors/trajectories) without recomputing the ENM.
|
|
580
580
|
|
|
581
581
|
### Output Files Description
|
|
582
582
|
|
|
@@ -586,17 +586,17 @@ enm_output/
|
|
|
586
586
|
- **`{base_name}_{model}_modes.npy`**: 2D array of shape `(3N, M)`, where column `i` is the mass‑weighted eigenvector for mode `i` (matching the order of `frequencies`). These two NumPy files enable fast post‑hoc re‑writing of vectors/trajectories via `-w`.
|
|
587
587
|
|
|
588
588
|
2. **Collectivity and Variance Contributions**
|
|
589
|
-
- **`collectivity.csv`**: CSV with columns `Mode`, `Frequency (cm⁻¹)`, and `Collectivity`. Omitted with `‑‑
|
|
590
|
-
- **`mode_contributions.png`**: Two‑panel figure showing (left) the proportion of total mean‑square fluctuation contributed by each of the first `‑‑
|
|
589
|
+
- **`collectivity.csv`**: CSV with columns `Mode`, `Frequency (cm⁻¹)`, and `Collectivity`. Omitted with `‑‑no-collectivity`.
|
|
590
|
+
- **`mode_contributions.png`**: Two‑panel figure showing (left) the proportion of total mean‑square fluctuation contributed by each of the first `‑‑max-modes` non‑rigid modes (proportional to `1/λ_k` under equipartition), and (right) the cumulative fraction. Omitted with `‑‑no-contributions`.
|
|
591
591
|
|
|
592
592
|
3. **NMA‑Predicted RMSF and DCCM**
|
|
593
|
-
- **`rmsf_plot.png`**: Residue‑averaged root‑mean‑square fluctuation (Å) derived from the harmonic approximation. The plot is based on the sum over modes of `(kBT/λ_k) * |u_i^(k)|² / m_i`. Omitted with `‑‑
|
|
593
|
+
- **`rmsf_plot.png`**: Residue‑averaged root‑mean‑square fluctuation (Å) derived from the harmonic approximation. The plot is based on the sum over modes of `(kBT/λ_k) * |u_i^(k)|² / m_i`. Omitted with `‑‑no-rmsf`.
|
|
594
594
|
- **`dccm_plot.png`**: DCCM heatmap, diverging colormap (red = fully correlated, white = uncorrelated, blue = fully anti-correlated).
|
|
595
|
-
- **`dccm_matrix.npy`**: Raw correlation matrix, saved alongside the plot. Both are omitted with `‑‑
|
|
595
|
+
- **`dccm_matrix.npy`**: Raw correlation matrix, saved alongside the plot. Both are omitted with `‑‑no-dccm`.
|
|
596
596
|
|
|
597
597
|
4. **Mode‑Specific Vector and Trajectory Files**
|
|
598
|
-
- **`{base_name}_{model}_mode_{N}.xyz`**: XYZ‑formatted file listing the displacement vector for mode `N`. The header includes the mode frequency in cm⁻¹. Omitted with `‑‑
|
|
599
|
-
- **`{base_name}_{model}_mode_{N}_traj.pdb`**: Multi‑model PDB showing a smooth oscillation along mode `N`. The trajectory is mass‑weighted and scaled to a peak amplitude (default 4 Å). Omitted with `‑‑
|
|
598
|
+
- **`{base_name}_{model}_mode_{N}.xyz`**: XYZ‑formatted file listing the displacement vector for mode `N`. The header includes the mode frequency in cm⁻¹. Omitted with `‑‑no-vec`.
|
|
599
|
+
- **`{base_name}_{model}_mode_{N}_traj.pdb`**: Multi‑model PDB showing a smooth oscillation along mode `N`. The trajectory is mass‑weighted and scaled to a peak amplitude (default 4 Å). Omitted with `‑‑no-trj`.
|
|
600
600
|
|
|
601
601
|
**Note:** When using the post‑hoc mode re‑writer (`pyadmd enm -w "..." -o enm_output`), only the mode‑specific vector and trajectory files are newly written for the requested modes; all other files (core data, collectivity, plots) are left untouched and must already exist from a previous full ENM run.
|
|
602
602
|
|
|
@@ -608,17 +608,21 @@ The **`fel`** subcommand computes a free energy landscape (FEL) from a completed
|
|
|
608
608
|
|
|
609
609
|
## Method Overview
|
|
610
610
|
1. **Merge trajectories**: all `rep*.dcd` replica trajectories are concatenated into a single pseudo-trajectory.
|
|
611
|
-
2. **GROMOS clustering**: frames are clustered by Cα RMSD (`-s`/`-c`); when the number of clusters exceeds `--
|
|
612
|
-
3. **Centroid MD**: each centroid undergoes a 4-phase restrained
|
|
611
|
+
2. **GROMOS clustering**: frames are clustered by Cα RMSD (`-s`/`-c`); when the number of clusters exceeds `--max-centroids`, a maximally diverse subset is selected via greedy farthest-point (MaxMin) sampling on the cluster centroids.
|
|
612
|
+
3. **Centroid MD**: each centroid undergoes a 4-phase NVT restrained
|
|
613
|
+
de-excitation (`-d`, progressively decreasing positional restraints on
|
|
614
|
+
backbone and sidechain heavy atoms) followed by unrestrained NPT production
|
|
615
|
+
MD (`-p`). Each de-excitation phase is further split into a
|
|
616
|
+
30%/20%/30%/20% pattern of nominal restraint / brief relief dip, where the dip targets a gentler restraint level rather than the nominal one, periodically releasing local strain due to the force constraints. If a centroid's de-excitation fails, it is automatically retried using an alternative member frame from the same cluster (up to 4 substitutes), and if all of those also fail, retried once more with a reinforced integrator ($`1 fs`$ timestep, $`5 ps^{-1}`$ friction, applied to de-excitation only) before the centroid is finally marked failed and excluded from the FEL.
|
|
613
617
|
4. **Mode projection**: every production frame is projected onto each individual normal mode vector as a signed mass-weighted RMS displacement.
|
|
614
|
-
5. **FEL computation**: a population histogram (`-b` bins) is converted to $`\Delta G`$ via $`\Delta G = -k_{BT} \cdot ln[P(q)/P_{max}]`$, computed independently per mode (1D) and for user-specified mode pairs (2D, `--
|
|
618
|
+
5. **FEL computation**: a population histogram (`-b` bins) is converted to $`\Delta G`$ via $`\Delta G = -k_{BT} \cdot ln[P(q)/P_{max}]`$, computed independently per mode (1D) and for user-specified mode pairs (2D, `--modes-2d`).
|
|
615
619
|
|
|
616
620
|
## Extending a Previous Free Energy Calculation
|
|
617
|
-
`fel` can be re-invoked on the same simulation with a larger `--
|
|
621
|
+
`fel` can be re-invoked on the same simulation with a larger `--max-centroids` and/or longer `-p`/`--production` to extend an earlier calculation, rather than starting over:
|
|
618
622
|
|
|
619
623
|
- **Free to change**: `-c`/`--cutoff` and `-d`/`--deexcite`. Changing the cutoff only affects the re-thresholding of the cached pairwise-RMSD matrix. Changing the de-excitation length only affects newly-created centroids going forward; existing centroids keep whatever de-excitation they originally had and are simply extended in production.
|
|
620
624
|
- **Must stay the same**: `-s`/`--sel`, `-T`/`--temp`. Mixing clustering selections or temperatures inside one pooled FEL is not physically valid.
|
|
621
|
-
- **Never shrinks existing work**: if `--
|
|
625
|
+
- **Never shrinks existing work**: if `--max-centroids` or `-p`/`--production` is *smaller* than the previous call, the program warns and uses the larger of the two values instead. We suggest start with smaller values and append more data, if necessary.
|
|
622
626
|
|
|
623
627
|
## Output Structure
|
|
624
628
|
### Directory Organization
|
|
@@ -643,9 +647,9 @@ fel/
|
|
|
643
647
|
|
|
644
648
|
## Output Files Description
|
|
645
649
|
1. **Cache Files**
|
|
646
|
-
- **`run_metadata.json`**: the clustering selection, temperature, cutoff, de-excitation length, `
|
|
650
|
+
- **`run_metadata.json`**: the clustering selection, temperature, cutoff, de-excitation length, `max-centroids`, and production length used.
|
|
647
651
|
- **`clustering_rmsd_cache.npz`/`.json`**: the pairwise-RMSD matrix over subsampled frames.
|
|
648
|
-
- **`clustering_summary.csv`**: summary containing cluster ID, frame index, cluster size, status this run (fresh
|
|
652
|
+
- **`clustering_summary.csv`**: summary containing cluster ID, frame index, cluster size, status this run (`fresh`/`extended`/`skipped`/`failed`, annotated with `substitute frame {N}` and/or `reinforced` when a centroid needed those fallbacks), `source_frame_used` (the frame whose coordinates actually produced a successful run — equal to `centroid_frame` unless a substitute member was used), `md_attempts` (total attempts across the standard and reinforced passes), and cycles/ps completed. A `status` of `failed` means every attempt (original frame + substitutes, standard + reinforced settings) failed; that centroid is excluded from the FEL rather than blocking the run.
|
|
649
653
|
2. **Plot Files**
|
|
650
654
|
- **`fel_mode[N].csv`/`fel_mode[N]_plot.png`**: 1D free energy landscape per mode, in Å and kcal/mol.
|
|
651
655
|
- **`fel_2d_mode[N]_mode[M].png`**: 2D free energy landscape for a mode pair.
|
|
@@ -723,31 +727,31 @@ When `-src fel` is used, the shared production time axis (applied uniformly acro
|
|
|
723
727
|
```
|
|
724
728
|
analysis/{fel/}
|
|
725
729
|
├── analysis_results.csv # Combined analysis data from all units
|
|
726
|
-
├── rmsf.csv # Combined RMSF data (omitted with --
|
|
730
|
+
├── rmsf.csv # Combined RMSF data (omitted with --no-rmsf)
|
|
727
731
|
├── analysis_summary.html # HTML summary report
|
|
728
|
-
├── rmsd_plot.png # RMSD plot (omitted with --
|
|
729
|
-
├── radius_gyration_plot.png # Radius of gyration plot (omitted with --
|
|
730
|
-
├── sasa_plot.png # SASA plot (omitted with --
|
|
731
|
-
├── hydrophobic_exposure_plot.png # Hydrophobic exposure plot (omitted with --
|
|
732
|
-
├── rmsf_average.png # Average RMSF plot (omitted with --
|
|
733
|
-
├── secondary_structure_average.png # Average secondary structure plot (omitted with --
|
|
734
|
-
├── dccm_average.png # Average DCCM heatmap (omitted with --
|
|
735
|
-
├── dccm_average.npy # Average DCCM matrix, raw (omitted with --
|
|
736
|
-
├── lmi_average.png # Average LMI heatmap (omitted with --
|
|
737
|
-
├── lmi_average.npy # Average LMI matrix, raw (omitted with --
|
|
732
|
+
├── rmsd_plot.png # RMSD plot (omitted with --no-rmsd)
|
|
733
|
+
├── radius_gyration_plot.png # Radius of gyration plot (omitted with --no-rg)
|
|
734
|
+
├── sasa_plot.png # SASA plot (omitted with --no-sasa)
|
|
735
|
+
├── hydrophobic_exposure_plot.png # Hydrophobic exposure plot (omitted with --no-sasa)
|
|
736
|
+
├── rmsf_average.png # Average RMSF plot (omitted with --no-rmsf)
|
|
737
|
+
├── secondary_structure_average.png # Average secondary structure plot (omitted with --no-dssp)
|
|
738
|
+
├── dccm_average.png # Average DCCM heatmap (omitted with --no-dccm)
|
|
739
|
+
├── dccm_average.npy # Average DCCM matrix, raw (omitted with --no-dccm)
|
|
740
|
+
├── lmi_average.png # Average LMI heatmap (omitted with --no-lmi)
|
|
741
|
+
├── lmi_average.npy # Average LMI matrix, raw (omitted with --no-lmi)
|
|
738
742
|
└── {rep[1-N]}/ or {centroid_frame[F]}/ # Unit-specific directories
|
|
739
743
|
├── analysis_results.csv # Unit-specific analysis data
|
|
740
|
-
├── rmsf.csv # Unit-specific RMSF data (omitted with --
|
|
741
|
-
├── rmsd_plot.png # Unit-specific RMSD plot (omitted with --
|
|
742
|
-
├── radius_gyration_plot.png # Unit-specific RoG plot (omitted with --
|
|
743
|
-
├── sasa_plot.png # Unit-specific SASA plot (omitted with --
|
|
744
|
-
├── hydrophobic_exposure_plot.png # Unit-specific hydrophobic exposure plot (omitted with --
|
|
745
|
-
├── rmsf_plot.png # Unit-specific RMSF plot (omitted with --
|
|
746
|
-
├── secondary_structure.png # Unit-specific secondary structure plot (omitted with --
|
|
747
|
-
├── dccm_matrix.npy # Unit-specific DCCM matrix, raw (omitted with --
|
|
748
|
-
├── dccm_plot.png # Unit-specific DCCM heatmap (omitted with --
|
|
749
|
-
├── lmi_matrix.npy # Unit-specific LMI matrix, raw (omitted with --
|
|
750
|
-
└── lmi_plot.png # Unit-specific LMI heatmap (omitted with --
|
|
744
|
+
├── rmsf.csv # Unit-specific RMSF data (omitted with --no-rmsf)
|
|
745
|
+
├── rmsd_plot.png # Unit-specific RMSD plot (omitted with --no-rmsd)
|
|
746
|
+
├── radius_gyration_plot.png # Unit-specific RoG plot (omitted with --no-rg)
|
|
747
|
+
├── sasa_plot.png # Unit-specific SASA plot (omitted with --no-sasa)
|
|
748
|
+
├── hydrophobic_exposure_plot.png # Unit-specific hydrophobic exposure plot (omitted with --no-sasa)
|
|
749
|
+
├── rmsf_plot.png # Unit-specific RMSF plot (omitted with --no-rmsf)
|
|
750
|
+
├── secondary_structure.png # Unit-specific secondary structure plot (omitted with --no-dssp)
|
|
751
|
+
├── dccm_matrix.npy # Unit-specific DCCM matrix, raw (omitted with --no-dccm)
|
|
752
|
+
├── dccm_plot.png # Unit-specific DCCM heatmap (omitted with --no-dccm)
|
|
753
|
+
├── lmi_matrix.npy # Unit-specific LMI matrix, raw (omitted with --no-lmi)
|
|
754
|
+
└── lmi_plot.png # Unit-specific LMI heatmap (omitted with --no-lmi)
|
|
751
755
|
```
|
|
752
756
|
**Note:** With `-src fel`, the same set of files is written under `analysis/fel/` instead, with one subdirectory per centroid (named by frame index, mirroring `fel/centroids/centroid_frame[F]/`) in place of `rep[1-N]/`.
|
|
753
757
|
|
|
@@ -762,9 +766,9 @@ analysis/{fel/}
|
|
|
762
766
|
- Average plots across all units
|
|
763
767
|
|
|
764
768
|
3. **Correlation Matrix Files**
|
|
765
|
-
- **`dccm_matrix.npy`** (per-unit) / **`dccm_average.npy`** (cross-unit): raw (n_Cα × n_Cα) DCCM matrix, values in [-1, 1]. Omitted with `--
|
|
769
|
+
- **`dccm_matrix.npy`** (per-unit) / **`dccm_average.npy`** (cross-unit): raw (n_Cα × n_Cα) DCCM matrix, values in [-1, 1]. Omitted with `--no-dccm`.
|
|
766
770
|
- **`dccm_plot.png`** / **`dccm_average.png`**: DCCM heatmap, diverging colormap (red = fully correlated, white = uncorrelated, blue = fully anti-correlated).
|
|
767
|
-
- **`lmi_matrix.npy`** / **`lmi_average.npy`**: raw (n_Cα × n_Cα) LMI matrix, values in [0, 1]. Omitted with `--
|
|
771
|
+
- **`lmi_matrix.npy`** / **`lmi_average.npy`**: raw (n_Cα × n_Cα) LMI matrix, values in [0, 1]. Omitted with `--no-lmi`.
|
|
768
772
|
- **`lmi_plot.png`** / **`lmi_average.png`**: LMI heatmap, sequential colormap (LMI has no sign).
|
|
769
773
|
|
|
770
774
|
4. **HTML Summary**
|
|
@@ -822,7 +826,7 @@ pyadmd run -src NAMD \
|
|
|
822
826
|
-vel tutorial/system.vel \
|
|
823
827
|
-xsc tutorial/system.xsc \
|
|
824
828
|
-str tutorial/system.str \
|
|
825
|
-
--
|
|
829
|
+
--no-correc
|
|
826
830
|
```
|
|
827
831
|
## Restart unfinished pyAdMD simulations
|
|
828
832
|
```
|
|
@@ -838,7 +842,7 @@ pyadmd analyze
|
|
|
838
842
|
```
|
|
839
843
|
## Analyze every 5 ps skipping DSSP and LMI
|
|
840
844
|
```
|
|
841
|
-
pyadmd analyze -r --
|
|
845
|
+
pyadmd analyze -r --no-dssp --no-lmi
|
|
842
846
|
```
|
|
843
847
|
## Compute a free energy landscape
|
|
844
848
|
```
|
|
@@ -846,7 +850,7 @@ pyadmd fel -c 2 -p 100
|
|
|
846
850
|
```
|
|
847
851
|
## Extend a previous free energy calculation with more centroids and production time
|
|
848
852
|
```
|
|
849
|
-
pyadmd fel -c 2 -p 500 --
|
|
853
|
+
pyadmd fel -c 2 -p 500 --max-centroids 100
|
|
850
854
|
```
|
|
851
855
|
## Compute a standalone ENM (Cα model, writing modes 7-16)
|
|
852
856
|
```
|