conformatlas 1.0.0__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.
Files changed (62) hide show
  1. conformatlas-1.0.0/CHANGELOG.md +142 -0
  2. conformatlas-1.0.0/CITATION.cff +21 -0
  3. conformatlas-1.0.0/LICENSE +21 -0
  4. conformatlas-1.0.0/MANIFEST.in +3 -0
  5. conformatlas-1.0.0/PKG-INFO +224 -0
  6. conformatlas-1.0.0/README.md +164 -0
  7. conformatlas-1.0.0/pyproject.toml +112 -0
  8. conformatlas-1.0.0/requirements.txt +14 -0
  9. conformatlas-1.0.0/setup.cfg +4 -0
  10. conformatlas-1.0.0/src/conformatlas/__init__.py +32 -0
  11. conformatlas-1.0.0/src/conformatlas/__main__.py +8 -0
  12. conformatlas-1.0.0/src/conformatlas/api.py +647 -0
  13. conformatlas-1.0.0/src/conformatlas/basins.py +396 -0
  14. conformatlas-1.0.0/src/conformatlas/bootstrap.py +439 -0
  15. conformatlas-1.0.0/src/conformatlas/cli.py +1388 -0
  16. conformatlas-1.0.0/src/conformatlas/comparison.py +450 -0
  17. conformatlas-1.0.0/src/conformatlas/comparison_stats.py +319 -0
  18. conformatlas-1.0.0/src/conformatlas/config.py +572 -0
  19. conformatlas-1.0.0/src/conformatlas/convergence.py +390 -0
  20. conformatlas-1.0.0/src/conformatlas/descriptors.py +143 -0
  21. conformatlas-1.0.0/src/conformatlas/errors.py +146 -0
  22. conformatlas-1.0.0/src/conformatlas/examples_gen.py +212 -0
  23. conformatlas-1.0.0/src/conformatlas/features.py +399 -0
  24. conformatlas-1.0.0/src/conformatlas/fel.py +200 -0
  25. conformatlas-1.0.0/src/conformatlas/gromacs.py +126 -0
  26. conformatlas-1.0.0/src/conformatlas/kinetics.py +210 -0
  27. conformatlas-1.0.0/src/conformatlas/mda_analysis.py +178 -0
  28. conformatlas-1.0.0/src/conformatlas/models.py +317 -0
  29. conformatlas-1.0.0/src/conformatlas/modes.py +192 -0
  30. conformatlas-1.0.0/src/conformatlas/msm.py +1087 -0
  31. conformatlas-1.0.0/src/conformatlas/ndx.py +53 -0
  32. conformatlas-1.0.0/src/conformatlas/pca.py +406 -0
  33. conformatlas-1.0.0/src/conformatlas/pipeline.py +2116 -0
  34. conformatlas-1.0.0/src/conformatlas/plotting.py +1554 -0
  35. conformatlas-1.0.0/src/conformatlas/plotting_extra.py +365 -0
  36. conformatlas-1.0.0/src/conformatlas/plotting_interactive.py +523 -0
  37. conformatlas-1.0.0/src/conformatlas/plotting_msm.py +336 -0
  38. conformatlas-1.0.0/src/conformatlas/plotting_residue.py +151 -0
  39. conformatlas-1.0.0/src/conformatlas/progress.py +198 -0
  40. conformatlas-1.0.0/src/conformatlas/provenance.py +172 -0
  41. conformatlas-1.0.0/src/conformatlas/py.typed +1 -0
  42. conformatlas-1.0.0/src/conformatlas/report.py +858 -0
  43. conformatlas-1.0.0/src/conformatlas/representatives.py +358 -0
  44. conformatlas-1.0.0/src/conformatlas/residue_analysis.py +716 -0
  45. conformatlas-1.0.0/src/conformatlas/results_io.py +736 -0
  46. conformatlas-1.0.0/src/conformatlas/reweighting.py +919 -0
  47. conformatlas-1.0.0/src/conformatlas/streaming.py +733 -0
  48. conformatlas-1.0.0/src/conformatlas/superpose.py +109 -0
  49. conformatlas-1.0.0/src/conformatlas/templates/assets/NGL_LICENSE.txt +21 -0
  50. conformatlas-1.0.0/src/conformatlas/templates/assets/ngl.js +88 -0
  51. conformatlas-1.0.0/src/conformatlas/templates/report.html.j2 +605 -0
  52. conformatlas-1.0.0/src/conformatlas/timeseries.py +168 -0
  53. conformatlas-1.0.0/src/conformatlas/trajectory.py +622 -0
  54. conformatlas-1.0.0/src/conformatlas/uncertainty.py +181 -0
  55. conformatlas-1.0.0/src/conformatlas/utils.py +185 -0
  56. conformatlas-1.0.0/src/conformatlas/xpm.py +214 -0
  57. conformatlas-1.0.0/src/conformatlas.egg-info/PKG-INFO +224 -0
  58. conformatlas-1.0.0/src/conformatlas.egg-info/SOURCES.txt +60 -0
  59. conformatlas-1.0.0/src/conformatlas.egg-info/dependency_links.txt +1 -0
  60. conformatlas-1.0.0/src/conformatlas.egg-info/entry_points.txt +2 -0
  61. conformatlas-1.0.0/src/conformatlas.egg-info/requires.txt +44 -0
  62. conformatlas-1.0.0/src/conformatlas.egg-info/top_level.txt +1 -0
@@ -0,0 +1,142 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [1.0.0] - 2026-10-11
9
+
10
+ First release after 0.1.1; all changes are described relative to 0.1.1.
11
+
12
+ ### Changed
13
+ - **Frames are superposed before PCA.** The Python (MDAnalysis) backend least-squares fits every frame (Kabsch, proper rotations only) on the `--lsq-group` atoms to the reference structure and applies the transform to the `--cov-group` atoms before the covariance matrix is built, matching `gmx covar -fit`. In 0.1.1 `--lsq-group` was honoured only by the GROMACS backend and the Python backend ran Cartesian PCA on unfitted coordinates, so PC1/PC2 contained rigid-body translation and rotation. In `compare` all systems are superposed on one shared reference (the reference system's structure restricted to the common fit atoms). New options `--fit/--no-fit`, `--mass-weighted-fit`; YAML keys `pca.fit`, `pca.mass_weighted_fit`. With a `.tpr` topology (no reference coordinates) the first trajectory frame is the reference.
14
+ - **'Backbone' follows the GROMACS definition (N, CA, C)** in both backends; the Python backend used the MDAnalysis `backbone` keyword (N, CA, C, O), so the two backends analysed different atoms and their eigenvalues differed by ~50 %. New group name `MainChain` = N, CA, C, O. Results obtained with the default group differ slightly from 0.1.1.
15
+ - **Basin segmentation.** Density maxima on the grid border are valid watershed markers; every connected region of sampled space receives at least one marker; watershed runs on the full finite-energy support and isolated occupied bins inherit the nearest basin, so every frame is assigned (in 0.1.1, 43.5 % of the demo frames were "Unassigned"). Sub-basins separated by a barrier below `--min-barrier` (default 1 kT) are merged. Frames lying exactly on the right-most histogram edge are binned instead of dropped. Frames in sub-threshold minor basins are reported as "Unassigned / Minor".
16
+ - **Convergence diagnostics.** Half-vs-half RMSIP pools the first halves of all replicates against the second halves (0.1.1 used the first replicate only) and reports each replicate in `rmsip.csv`; progressive overlap is computed for every fraction (0.1.1 hard-coded 1.0 at 100 %); population stability is computed on the first f % of every replicate (0.1.1 sliced the concatenated table, so the 25 % point contained replicate 1 only); cosine content is evaluated on the mean-centred series as in Hess's definition; interpretative notes use wording that matches the value. Fewer than 50 effective samples force the sampling verdict to "Insufficient evidence".
17
+ - **Demonstration dataset.** `conformatlas example` and the bundled `examples/demo_dataset` encode genuine internal motion (hinge bending vs. twisting of the C-terminal half, switched by a two-state Markov chain) plus random rigid-body motion per frame; the 0.1.1 generator translated the whole peptide, i.e. its "states" disappeared under superposition.
18
+ - `--bins` accepts `auto` (Freedman–Diaconis rule, clipped to 16–128 bins; now the default) or an integer; a warning is printed when the grid holds fewer than two frames per occupied bin.
19
+ - `--lig` is functional: the ligand's atoms join the analysis group and the ligand RMSD after protein superposition is reported.
20
+ - Figure axis labels follow the collective variables in use (PC, dPC, IC, RMSD/Rg, user labels; nm for the GROMACS backend, Å for the Python backend); CSV columns keep `PC1..PCn` for every decomposition.
21
+ - Figures are written once as `<name>.png` and `<name>_unannotated.png` (the duplicate `<name>_non_annotated.png` copies are gone); the convergence figure wraps its notes so the panels keep their size; population error bars are clipped to [0, 100] %.
22
+ - `cli.analyze` is a thin wrapper over `conformatlas.pipeline.run_analysis`, the full single-system workflow as a library function.
23
+ - CLI: the banner is printed only on a terminal and never for `--help`/`--version`; `--quiet`; friendly messages instead of tracebacks for malformed YAML (with line/column), missing files, unknown group names (available groups are listed) and missing optional dependencies (with the `pip install` command); exit codes 0 (success), 1 (analysis error), 2 (usage error).
24
+ - Common-atom mapping for comparisons is chain-aware (`chain/residue/atom` keys with automatic fallback when chain labels differ), so repeated residue numbers in multi-chain systems are no longer collapsed.
25
+ - Project logo and brand assets (`docs/assets/`, generated by `docs/assets/make_logo.py`); README header uses the logo; Sphinx documentation carries the logo and favicon.
26
+
27
+ ### Added
28
+
29
+ #### Inputs, time window and configuration
30
+ - Time window `-b/--begin`, `-e/--end` (ps); GROMACS index files `-n/--index` for every group option and for comparisons (same atom numbering required across systems); group names may also be MDAnalysis selection strings.
31
+ - Input validation before the run: structure/trajectory atom-count mismatch, broken Cα chains (periodic-boundary artefacts), memory estimate with a warning above 8 GB.
32
+ - YAML configuration for `analyze` (`conformatlas init-config --type analyze`, `conformatlas analyze --config run.yaml`; command-line flags override the file). Comparison YAML accepts `begin_ps`, `end_ps`, `index_file`, `bins: auto`, `n_bootstrap`, `seed`, `bootstrap_mode` and the figure options.
33
+ - `run_metadata.json` records every option, the superposition settings, the time window, equilibration, decomposition, CVs, weights, bootstrap and representative settings, all warnings, and the software environment (Python, NumPy, SciPy, pandas, matplotlib, scikit-image, click, Jinja2, PyYAML, MDAnalysis, WeasyPrint, GROMACS, platform; module `conformatlas.provenance`). `summary.json` carries uncertainties and N_eff.
34
+
35
+ #### Decompositions and collective variables
36
+ - `--pca-type dihedral`: dihedral PCA on sin/cos of backbone φ/ψ, optionally with side-chain χ₁/χ₂ or nucleic-acid backbone/glycosidic torsions (`--dihedral-set backbone|backbone+chi|chi|nucleic`).
37
+ - `--pca-type tica --tica-lag N`: time-lagged independent component analysis with implied timescales (lags computed within replicates; PCA pre-reduction when frames do not greatly outnumber coordinates).
38
+ - `--fel-pcs i,j` (any two retained components), `--n-components`, `--cv rmsd-rg`, and external CVs `--cv file --cv-file … --cv-cols … --cv-labels …` (PLUMED COLVAR, `.xvg`, CSV; one file per trajectory).
39
+ - Per-frame statistical weights `--weights-file` for histogram, populations and bootstrap (kinetics are skipped for weighted frames).
40
+ - SVD (dual) route for the covariance eigenproblem when 3N exceeds the number of frames.
41
+
42
+ #### Uncertainty and sampling quality
43
+ - **Block bootstrap** (`--bootstrap N`, default 200; `--seed`): circular blocks within each replicate, block length from the statistical inefficiency; standard deviation and 95 % interval of ΔG per bin (`fel/free_energy_bootstrap_*.npy`, `figures/fel_uncertainty.png`), of state populations (merged into `statistics/state_populations.csv`), state free energies (`states/state_free_energies.csv`) and barriers; 1-D projections of the landscape with bootstrap bands (`figures/fel_1d.png`).
44
+ - `--bootstrap-mode resegment`: the watershed segmentation is re-run on every resample; reports the distribution of the number of states and per-state population intervals that include segmentation uncertainty.
45
+ - Statistical inefficiency g and effective sample size N_eff per replicate (exact FFT autocorrelation estimator; `convergence/effective_samples.csv`).
46
+ - Equilibration detection by the maximum-N_eff criterion (Chodera 2016) on the fit RMSD or on the landscape CVs (`--equilibration-on rmsd|cv`), reported in `convergence/equilibration.csv` and applied with `--equilibration auto`.
47
+ - Per-replicate landscapes on the shared grid as a convergence view.
48
+
49
+ #### States, barriers, kinetics and Markov state models
50
+ - Saddle-point barriers between adjacent basins (`states/barriers.csv`).
51
+ - Lag-1 kinetics within replicates: transition counts and probabilities, dwell times per visit with censoring flags, Markov mean first-passage times (`kinetics/`, `figures/state_timeseries.png`).
52
+ - **Markov state models** (`--msm`; `--msm-lag`, `--msm-lags`, `--msm-clusters`, `--msm-clustering kmeans|regular-space`, `--msm-dmin`, `--msm-components`, …): microstates by k-means or regular-space clustering in the retained components, sliding-window counts within replicates, reversible maximum-likelihood transition matrix, implied-timescale scan with a reported (never auto-applied) plateau lag, Chapman–Kolmogorov test, PCCA+ metastable sets, mean first-passage times between sets, and an overlap table between metastable sets and watershed basins (`msm/`, with figures).
53
+
54
+ #### Enhanced sampling
55
+ - `conformatlas reweight metad`: metadynamics reweighting from PLUMED HILLS + COLVAR (final bias, or the time-dependent c(t) correction of Tiwary & Parrinello), writing weight files for `--weights-file`.
56
+ - `conformatlas reweight umbrella`: umbrella-sampling weights and PMF by MBAR or WHAM (`pmf.csv`). Module `conformatlas.reweighting` with PLUMED COLVAR/HILLS readers.
57
+
58
+ #### Structures, residues and descriptors
59
+ - Representative structures: `--n-representatives N`, `--representative minimum|medoid`; per-state `average.pdb`, `rmsf_atoms.csv`, `rmsf_residues.csv`; `states/state_ensemble_summary.csv`.
60
+ - Mode interpretation: per-atom and per-residue mode contributions (`pca/mode_contributions_*.csv`, `figures/mode_contributions.png`), `pca/modes.nmd` (VMD NMWiz / ProDy), `pca/average.pdb`, `pca/PC*_extremes.pdb`, `pca/eigenvectors.npy`.
61
+ - Descriptors: backbone RMSD, radius of gyration, RMSF per atom and residue, and ligand RMSD with `--lig` (`descriptors/`, `figures/descriptors.png`).
62
+ - `--residue-analysis`: dynamic cross-correlation maps (overall and per state), per-residue differences between states (ΔRMSF, displacement of state means), ligand–residue contact persistence per state and binding-site RMSF (`residues/`, with figures).
63
+
64
+ #### Comparisons
65
+ - `compare` with any number of systems: ΔΔG maps with bootstrap standard deviation against the reference system (`comparison/fel_diff_<SYS>_vs_<REF>.csv/.npy`, `figures/ddg_map_*.png`, hatched where |ΔΔG| < 2 SD); population differences with block-bootstrap interval and p-value and Welch's t-test across replicates (when each system has at least two); state ΔΔG with intervals; landscape overlap (Bhattacharyya coefficient, Hellinger distance, Jensen–Shannon divergence, sampled-bin Jaccard; `fel_overlap.csv`); RMSIP between each system's own essential subspace (`subspace_overlap.csv`); `comparison_summary.json`; bootstrap error bars on the population figures; side-by-side interactive comparison landscape.
66
+
67
+ #### Performance and programmatic use
68
+ - Streaming PCA engine (`--engine auto|memory|streaming`): chunked two-pass covariance accumulation with per-frame superposition that never holds the whole trajectory in memory, numerically identical to the in-memory path; `--n-workers` (one process per replicate), `--precision float32`, memory-mapped projection storage; `auto` switches to streaming above a memory threshold.
69
+ - `--from <results_dir>`: re-bin, re-segment, re-bootstrap or build an MSM from an existing results directory without re-reading trajectories or recomputing PCA.
70
+ - `--save-hdf5`: single-file results container `results.h5` (`conformatlas.results_io`: `save_results`, `load_results`, `load_results_dir`, `rebin`).
71
+ - TTY-aware progress bars (`rich` when installed; silent in pipes and logs).
72
+ - Python API `conformatlas.api` (`load_trajectories`, `pca`, `landscape`, `states`, `kinetics`, `convergence`, `analyze`, `plot_landscape`) returning in-memory objects; `conformatlas.mda_analysis.ConformAtlasPCA`, an MDAnalysis `AnalysisBase` implementation; notebook `examples/notebooks/neuraminidase_walkthrough.ipynb`; streaming benchmark in `benchmarks/`.
73
+
74
+ #### Report and figures
75
+ - Interactive HTML report: Plotly landscape with hover ΔG/probability/state, basin outlines, time-coloured per-replicate paths and a time slider, 1-D profile panel; embedded NGL viewer of the state representatives and the average structure coloured by per-residue RMSF; all JavaScript and structures are inlined (no external resources; `--plotly-js cdn` for a smaller file; `--interactive/--no-interactive`).
76
+ - Interpretive sentences next to every table (N_eff and its consequence, RMSIP wording, interval widths, barriers in kT), a "Limits of this analysis" section and a warnings box; `report_interpretation.json`. Optional `report.pdf` (`--pdf`; static figures, stated in the PDF).
77
+ - Figure control: `--fig-format png|svg|pdf|all` (SVG/PDF are vector), `--colormap`, `--font-scale`, `--fig-dpi`, `--path-overlay` (trajectory path on the static landscape).
78
+
79
+ #### Validation, tests and documentation
80
+ - Scientific validation suite `validation/validate.py` (report `validation/VALIDATION.md`): checks against analytical results and independent implementations — GROMACS `covar`, `anaeig`, `sham` and `gyrate`; MDAnalysis PCA, QCP superposition, RMSD/Rg/RMSF, Ramachandran and Janin dihedrals; pymbar (statistical inefficiency, equilibration, MBAR); deeptime (TICA, reversible MSM estimator, PCCA+); `plumed sum_hills`; SciPy; ProDy; analytical double wells, Gaussians and Markov chains; coverage of the bootstrap intervals and type-I error of the comparison test.
81
+ - Unit and integration tests, including a real-protein fixture (influenza neuraminidase Cα + zanamivir heavy atoms, 81 frames, `tests/data/h1n1_ca/`).
82
+ - Documentation: real-data tutorial (`docs/tutorial_neuraminidase.md`), FAQ of common pitfalls, validation/benchmark page generated from the validation results, Python API guide, methods sections for every new component with a "validated vs heuristic" summary; Sphinx builds with `-W`.
83
+ - Project: `CONTRIBUTING.md` (including how to add a validation check), Contributor Covenant 2.1, issue forms and pull-request template, Codecov upload and a documentation job in CI, conda-forge recipe draft (`conda-recipe/`), JOSS paper draft (`paper/`), `.zenodo.json`, `requirements-lock.txt`.
84
+ - Optional dependency groups: `pdf` (WeasyPrint), `interactive` (Plotly), `hdf5` (h5py), `progress` (rich), `all`.
85
+
86
+ ### Fixed
87
+ - **GROMACS PCA backend**: `gmx anaeig -proj` writes one `&`-separated data set per eigenvector; the parser read them as a single column, so every component after the first was lost. Projections are now parsed per set.
88
+ - **GROMACS PCA backend** built the covariance from the first trajectory only and projected the other replicates onto it; all trajectories are now concatenated (`gmx trjcat -cat`) before `gmx covar`, and the GROMACS and Python backends give identical explained variance.
89
+ - XPM parser: `gmx sham` writes bin *edges* (width + 1 values) on the axis lines, which were rejected with a size error; edges are converted to centres, so `--fel-backend gromacs` works with current GROMACS.
90
+ - Representative-structure extraction indexed the raw trajectory with the streamed frame index, which is wrong under `--stride`; frames are now located by time.
91
+
92
+ ### Removed
93
+ - Second author entry in `pyproject.toml`; machine-specific paths in `TESTING_REPORT.md`.
94
+
95
+ ---
96
+
97
+ ## [0.1.1] - 2026-09-19
98
+
99
+ ### Added
100
+ - Integrated comprehensive **ReadTheDocs** (`readthedocs.io`) documentation infrastructure:
101
+ - Added `.readthedocs.yaml` (v2 build configuration).
102
+ - Configured Sphinx documentation suite in `docs/conf.py` with MyST Markdown parser, MathJax, autodoc, and `sphinx_rtd_theme`.
103
+ - Created master documentation hub `docs/index.rst` and Python API reference `docs/api.rst`.
104
+ - Added `docs` optional dependencies (`sphinx`, `sphinx-rtd-theme`, `myst-parser`) in `pyproject.toml` and `docs/requirements.txt`.
105
+ - Added ReadTheDocs documentation status badge in `README.md`.
106
+ - Hardened GitHub Actions CI/CD workflows:
107
+ - Structured pipeline into dedicated stages: `lint`, multi-OS matrix `test` (Python 3.10–3.12 on Ubuntu and macOS), and `build`.
108
+ - Added defensive integration testing safeguards (`@pytest.mark.skipif`) for headless CI environments lacking binary trajectory drivers.
109
+ - Added `MDAnalysis` and `twine` to developer test dependencies.
110
+
111
+ ### Changed
112
+ - Standardized and formatted entire codebase using Ruff.
113
+ - Incremented package version to `0.1.1`.
114
+
115
+ ---
116
+
117
+ ## [0.1.0] - 2026-09-19
118
+
119
+ ### Added
120
+ - Initial public release of **ConformAtlas** (`conformatlas`).
121
+ - Standard PEP 517/621 Python packaging layout (`pyproject.toml`, `src/conformatlas/`).
122
+ - Subcommand-based command-line interface (`conformatlas`):
123
+ - `conformatlas analyze`: Single and multi-replicate trajectory PCA and FEL evaluation.
124
+ - `conformatlas compare`: WT vs mutant comparison in shared PCA coordinate space.
125
+ - `conformatlas doctor`: Environment, dependency, and GROMACS diagnostics.
126
+ - `conformatlas init-config`: Interactive and starter YAML template generation.
127
+ - `conformatlas example`: Miniature demonstration dataset generation.
128
+ - Python-native 2D Free Energy Landscape (FEL) evaluation with Boltzmann inversion, explicit temperature validation ($T > 0$ K), and zero-occupancy masking.
129
+ - Topological watershed segmentation on free energy grids for discrete conformational basin identification.
130
+ - Automated extraction of full-atom representative PDB structures closest to basin energy minima with provenance metadata.
131
+ - Multi-replicate analysis preserving replicate identity with balanced weighting (`equal-replicate` vs `frames`).
132
+ - Shared-PCA space WT vs Mutant comparison with atom selection validation.
133
+ - Rigorous sampling and convergence diagnostics:
134
+ - First-half vs second-half subspace overlap (RMSIP).
135
+ - Progressive subspace overlap (25%, 50%, 75%, 100%).
136
+ - Principal component cosine content (diffusion check).
137
+ - State population stability trajectories.
138
+ - Statistical uncertainty reporting (replicate Mean, SD, SEM, and 95% Confidence Intervals).
139
+ - Standalone 300-DPI publication figures with boundary-aware labels, dynamic headroom, and unannotated variants.
140
+ - Self-contained interactive HTML report with embedded figures and parameter manifests.
141
+ - Machine-readable execution logs and metadata (`run_metadata.json`, `summary.json`).
142
+ - Automated test suite covering unit and end-to-end integration workflows.
@@ -0,0 +1,21 @@
1
+ cff-version: 1.2.0
2
+ message: "If you use ConformAtlas in your research, please cite it as below."
3
+ title: "ConformAtlas: mapping conformational landscapes from molecular simulations"
4
+ version: 1.0.0
5
+ date-released: 2026-10-11
6
+ url: "https://github.com/AtharvaTilewale/ConformAtlas"
7
+ repository-code: "https://github.com/AtharvaTilewale/ConformAtlas"
8
+ authors:
9
+ - family-names: "Tilewale"
10
+ given-names: "Atharva"
11
+ - family-names: "Patel"
12
+ given-names: "Dhaval"
13
+ keywords:
14
+ - "molecular dynamics"
15
+ - "GROMACS"
16
+ - "principal component analysis"
17
+ - "free energy landscape"
18
+ - "conformational states"
19
+ - "biophysics"
20
+ - "conformatlas"
21
+ license: "MIT"
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024-2026 Atharva Tilewale and ConformAtlas Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,3 @@
1
+ include CHANGELOG.md
2
+ include CITATION.cff
3
+ include requirements.txt
@@ -0,0 +1,224 @@
1
+ Metadata-Version: 2.4
2
+ Name: conformatlas
3
+ Version: 1.0.0
4
+ Summary: ConformAtlas: mapping conformational landscapes from molecular simulations
5
+ Author: Atharva Tilewale, Dhaval Patel
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/AtharvaTilewale/ConformAtlas
8
+ Project-URL: Documentation, https://conformatlas.readthedocs.io
9
+ Project-URL: Repository, https://github.com/AtharvaTilewale/ConformAtlas
10
+ Keywords: molecular-dynamics,gromacs,pca,free-energy-landscape,biophysics,structural-biology,conformatlas
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Intended Audience :: Science/Research
13
+ Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
14
+ Classifier: Topic :: Scientific/Engineering :: Chemistry
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Requires-Python: >=3.10
20
+ Description-Content-Type: text/markdown
21
+ License-File: LICENSE
22
+ Requires-Dist: numpy>=1.22.0
23
+ Requires-Dist: scipy>=1.8.0
24
+ Requires-Dist: pandas>=1.4.0
25
+ Requires-Dist: matplotlib>=3.5.0
26
+ Requires-Dist: click>=8.0.0
27
+ Requires-Dist: jinja2>=3.0.0
28
+ Requires-Dist: pyyaml>=6.0
29
+ Requires-Dist: scikit-image>=0.19.0
30
+ Requires-Dist: MDAnalysis>=2.2.0
31
+ Provides-Extra: dev
32
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
33
+ Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
34
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
35
+ Requires-Dist: build>=0.10.0; extra == "dev"
36
+ Requires-Dist: twine>=4.0.0; extra == "dev"
37
+ Requires-Dist: plotly>=5.18; extra == "dev"
38
+ Requires-Dist: h5py>=3.6; extra == "dev"
39
+ Requires-Dist: rich>=12; extra == "dev"
40
+ Requires-Dist: deeptime>=0.4; extra == "dev"
41
+ Requires-Dist: pymbar>=4.0; extra == "dev"
42
+ Provides-Extra: docs
43
+ Requires-Dist: sphinx>=6.0.0; extra == "docs"
44
+ Requires-Dist: sphinx-rtd-theme>=1.3.0; extra == "docs"
45
+ Requires-Dist: myst-parser>=1.0.0; extra == "docs"
46
+ Provides-Extra: pdf
47
+ Requires-Dist: weasyprint>=59.0; extra == "pdf"
48
+ Provides-Extra: interactive
49
+ Requires-Dist: plotly>=5.18; extra == "interactive"
50
+ Provides-Extra: hdf5
51
+ Requires-Dist: h5py>=3.6; extra == "hdf5"
52
+ Provides-Extra: progress
53
+ Requires-Dist: rich>=12; extra == "progress"
54
+ Provides-Extra: all
55
+ Requires-Dist: weasyprint>=59.0; extra == "all"
56
+ Requires-Dist: plotly>=5.18; extra == "all"
57
+ Requires-Dist: h5py>=3.6; extra == "all"
58
+ Requires-Dist: rich>=12; extra == "all"
59
+ Dynamic: license-file
60
+
61
+ <p align="center">
62
+ <img src="https://raw.githubusercontent.com/AtharvaTilewale/ConformAtlas/main/docs/assets/conformatlas-logo-on-white.png" alt="ConformAtlas" width="560" />
63
+ </p>
64
+
65
+ <h3 align="center">Mapping conformational landscapes from molecular simulations</h3>
66
+
67
+ <p align="center">
68
+ <a href="https://www.python.org/downloads/"><img src="https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12-blue.svg" alt="Python 3.10 | 3.11 | 3.12"></a>
69
+ <a href="https://github.com/AtharvaTilewale/ConformAtlas/actions/workflows/ci.yml"><img src="https://github.com/AtharvaTilewale/ConformAtlas/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
70
+ <a href="https://conformatlas.readthedocs.io/en/latest/"><img src="https://readthedocs.org/projects/conformatlas/badge/?version=latest" alt="Documentation"></a>
71
+ <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT"></a>
72
+ </p>
73
+
74
+ <p align="center">
75
+ <a href="#installation">Installation</a> ·
76
+ <a href="#quick-start">Quick start</a> ·
77
+ <a href="#what-you-get">Outputs</a> ·
78
+ <a href="#documentation">Documentation</a> ·
79
+ <a href="#citation">Citation</a>
80
+ </p>
81
+
82
+ ---
83
+
84
+ **ConformAtlas** turns molecular dynamics trajectories into a quantitative map of conformational space: principal components, a free-energy landscape with error bars, the metastable states on it, the barriers and rates between them, and a verdict on whether the sampling supports those numbers. It runs as a single command (`conformatlas analyze`) and as a Python library, reads anything [MDAnalysis](https://www.mdanalysis.org/) can open, and ships with a [validation suite](docs/benchmarks.md) that checks every numerical component against analytical results or an independent implementation.
85
+
86
+ <p align="center">
87
+ <img src="https://raw.githubusercontent.com/AtharvaTilewale/ConformAtlas/main/docs/assets/readme-landscape.png" alt="Free-energy landscape of influenza neuraminidase bound to zanamivir" width="860" />
88
+ <br>
89
+ <sub>Influenza A/H1N1 neuraminidase bound to zanamivir, 2001 frames at 300 K: free-energy landscape on the first two Cα principal components with three watershed states (48 / 41 / 11 %). Unmodified <code>figures/fel_2d_3d.png</code> from a single <code>conformatlas analyze</code> run; see the <a href="docs/tutorial_neuraminidase.md">tutorial</a>.</sub>
90
+ </p>
91
+
92
+ ## Features
93
+
94
+ | | |
95
+ |---|---|
96
+ | **Decompositions** | Cartesian PCA after Kabsch superposition, backbone / side-chain / nucleic dihedral PCA, TICA with implied timescales; landscapes on any component pair, on RMSD vs R<sub>g</sub>, or on user-supplied collective variables |
97
+ | **Free-energy landscape** | Boltzmann inversion at the simulation temperature (kJ/mol), automatic grid resolution, unsampled bins left empty; agrees with `gmx sham` on the same input |
98
+ | **Uncertainty** | Circular block bootstrap within replicates: standard deviation and 95 % CI of every bin, state population, state free energy and barrier |
99
+ | **States and kinetics** | Watershed segmentation with barrier-based merging, saddle-point barriers, transition matrix, dwell times, mean first-passage times; optional Markov state model (microstates, reversible estimator, implied-timescale scan, Chapman–Kolmogorov test, PCCA+) |
100
+ | **Convergence** | Statistical inefficiency and effective sample size, equilibration detection, first/second-half subspace overlap, cosine content, population stability per replicate |
101
+ | **Structures** | Representative and average structures per state, RMSF profiles, per-residue mode contributions, NMWiz mode files, dynamic cross-correlation maps, ligand–residue contacts |
102
+ | **Comparisons** | Any number of systems projected into a shared PCA space: ΔΔG maps with uncertainty, population differences with bootstrap confidence intervals and p-values, landscape overlap metrics |
103
+ | **Enhanced sampling** | `conformatlas reweight` turns PLUMED metadynamics or umbrella-sampling output into per-frame weights (final bias, Tiwary–Parrinello, WHAM, MBAR) for a reweighted landscape |
104
+ | **Scale** | Streaming two-pass PCA engine with memory independent of trajectory length, multi-replicate aware, HDF5 results container, re-analysis of saved results without re-reading trajectories |
105
+ | **Reporting** | Self-contained HTML report with interactive landscape and 3-D structure viewer, publication-ready PNG/SVG/PDF figures, optional PDF report |
106
+
107
+ ## Installation
108
+
109
+ ```bash
110
+ pip install conformatlas # core (includes MDAnalysis)
111
+ pip install "conformatlas[all]" # + interactive figures, HDF5, progress bars, PDF report
112
+ ```
113
+
114
+ From source:
115
+
116
+ ```bash
117
+ git clone https://github.com/AtharvaTilewale/ConformAtlas.git
118
+ cd ConformAtlas
119
+ pip install -e ".[dev]"
120
+ conformatlas doctor # checks Python dependencies and GROMACS (optional)
121
+ ```
122
+
123
+ Requires Python ≥ 3.10. GROMACS is optional and only needed for `--pca-backend gromacs`.
124
+
125
+ ## Quick start
126
+
127
+ **Analyse one system** (any number of replicates):
128
+
129
+ ```bash
130
+ conformatlas analyze -s topology.gro -f rep1.xtc -f rep2.xtc -f rep3.xtc -T 300 -o results/WT
131
+ ```
132
+
133
+ **Protein–ligand complex**, discarding the equilibration phase and adding a Markov state model:
134
+
135
+ ```bash
136
+ conformatlas analyze -s md.gro -f md_noPBC.xtc -n index.ndx \
137
+ --cov-group C-alpha --lig ZMR -T 300 \
138
+ --equilibration auto --bootstrap 200 --msm \
139
+ -o results/complex
140
+ ```
141
+
142
+ **Compare conditions** (wild type vs mutant, apo vs holo, …) in a shared PCA space:
143
+
144
+ ```bash
145
+ conformatlas compare --config comparison.yaml -o results/comparison
146
+ ```
147
+
148
+ **Try it** on the bundled synthetic two-state peptide:
149
+
150
+ ```bash
151
+ conformatlas example -o demo
152
+ conformatlas analyze -s demo/WT/topology.pdb -f demo/WT/rep1.xtc -f demo/WT/rep2.xtc -T 300 --bins 32 --smooth-sigma 1.0 -o demo/results
153
+ ```
154
+
155
+ Every option can live in a YAML file (`conformatlas init-config --type analyze -o run.yaml`). Trajectories must be made whole across periodic boundaries first (`gmx trjconv -pbc mol`). The full option reference is in [docs/cli.md](docs/cli.md).
156
+
157
+ From Python:
158
+
159
+ ```python
160
+ from conformatlas import api
161
+
162
+ ens = api.load_trajectories("topology.gro", ["rep1.xtc", "rep2.xtc"], group="C-alpha")
163
+ pcs = api.pca(ens)
164
+ land = api.landscape(pcs, temperature=300)
165
+ st = api.states(land)
166
+ fig, ax, _ = api.plot_landscape(land, states=st.states)
167
+ ```
168
+
169
+ ## What you get
170
+
171
+ ```text
172
+ results/
173
+ ├── report.html # interactive landscape, structure viewer, interpretation
174
+ ├── summary.json # state populations and minima, convergence assessment
175
+ ├── pca/ # eigenvalues, projections, eigenvectors, modes.nmd, mode contributions
176
+ ├── fel/ # free-energy grid, probability, bootstrap SD and CI
177
+ ├── states/ # basins, frame assignments, barriers, state ΔG, representative structures
178
+ ├── statistics/ # populations with block SD/SEM and bootstrap 95 % CI
179
+ ├── kinetics/ msm/ # transition matrices, dwell times, MFPT; MSM diagnostics (--msm)
180
+ ├── convergence/ # RMSIP, N_eff, equilibration, cosine content, population stability
181
+ ├── residues/ # DCCM, state differences, ligand contacts (--residue-analysis)
182
+ └── figures/ # 2-D/3-D landscapes, uncertainty maps, kinetics, MSM, DCCM panels
183
+ ```
184
+
185
+ Units: Å, ps, kJ/mol. The complete file manifest is in [docs/outputs.md](docs/outputs.md).
186
+
187
+ ## Validation
188
+
189
+ `validation/validate.py` compares every numerical component with an analytical result or an independent implementation — MDAnalysis, GROMACS (`covar`, `anaeig`, `sham`), pymbar, deeptime, SciPy and ProDy — and writes the report that is published as [docs/benchmarks.md](docs/benchmarks.md) (147/147 checks). Components that are conventions rather than derivations (convergence thresholds, grid heuristics, MSM lag selection) are labelled as such in [docs/methods.md](docs/methods.md).
190
+
191
+ Boltzmann inversion assumes an unbiased equilibrium ensemble; for biased simulations use `conformatlas reweight` and `--weights-file`. See the [FAQ](docs/faq.md) for this and other pitfalls.
192
+
193
+ ## Documentation
194
+
195
+ Full documentation: **[conformatlas.readthedocs.io](https://conformatlas.readthedocs.io)**
196
+
197
+ | Getting started | Reference | Background |
198
+ |---|---|---|
199
+ | [Installation](docs/installation.md) | [Command line](docs/cli.md) | [Methods](docs/methods.md) |
200
+ | [Quickstart](docs/quickstart.md) | [Python API](docs/python_api.md) | [Interpreting results](docs/interpretation.md) |
201
+ | [Tutorial: neuraminidase–zanamivir](docs/tutorial_neuraminidase.md) | [Output files](docs/outputs.md) | [Convergence diagnostics](docs/convergence.md) |
202
+ | [FAQ](docs/faq.md) | [Comparing systems](docs/comparison.md) | [Validation and benchmarks](docs/benchmarks.md) |
203
+
204
+ ## Citation
205
+
206
+ ```bibtex
207
+ @software{conformatlas2026,
208
+ author = {Tilewale, Atharva and Patel, Dhaval},
209
+ title = {ConformAtlas: mapping conformational landscapes from molecular simulations},
210
+ year = {2026},
211
+ version = {1.0.0},
212
+ url = {https://github.com/AtharvaTilewale/ConformAtlas}
213
+ }
214
+ ```
215
+
216
+ A machine-readable citation is in [CITATION.cff](CITATION.cff).
217
+
218
+ ## Contributing
219
+
220
+ Bug reports, feature requests and pull requests are welcome — see [CONTRIBUTING.md](CONTRIBUTING.md). Please run `ruff check`, the test suite and `validation/validate.py` before opening a pull request.
221
+
222
+ ## Authors and license
223
+
224
+ Developed by **Atharva Tilewale** and **Dhaval Patel**. Released under the [MIT License](LICENSE).
@@ -0,0 +1,164 @@
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/AtharvaTilewale/ConformAtlas/main/docs/assets/conformatlas-logo-on-white.png" alt="ConformAtlas" width="560" />
3
+ </p>
4
+
5
+ <h3 align="center">Mapping conformational landscapes from molecular simulations</h3>
6
+
7
+ <p align="center">
8
+ <a href="https://www.python.org/downloads/"><img src="https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12-blue.svg" alt="Python 3.10 | 3.11 | 3.12"></a>
9
+ <a href="https://github.com/AtharvaTilewale/ConformAtlas/actions/workflows/ci.yml"><img src="https://github.com/AtharvaTilewale/ConformAtlas/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
10
+ <a href="https://conformatlas.readthedocs.io/en/latest/"><img src="https://readthedocs.org/projects/conformatlas/badge/?version=latest" alt="Documentation"></a>
11
+ <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT"></a>
12
+ </p>
13
+
14
+ <p align="center">
15
+ <a href="#installation">Installation</a> ·
16
+ <a href="#quick-start">Quick start</a> ·
17
+ <a href="#what-you-get">Outputs</a> ·
18
+ <a href="#documentation">Documentation</a> ·
19
+ <a href="#citation">Citation</a>
20
+ </p>
21
+
22
+ ---
23
+
24
+ **ConformAtlas** turns molecular dynamics trajectories into a quantitative map of conformational space: principal components, a free-energy landscape with error bars, the metastable states on it, the barriers and rates between them, and a verdict on whether the sampling supports those numbers. It runs as a single command (`conformatlas analyze`) and as a Python library, reads anything [MDAnalysis](https://www.mdanalysis.org/) can open, and ships with a [validation suite](docs/benchmarks.md) that checks every numerical component against analytical results or an independent implementation.
25
+
26
+ <p align="center">
27
+ <img src="https://raw.githubusercontent.com/AtharvaTilewale/ConformAtlas/main/docs/assets/readme-landscape.png" alt="Free-energy landscape of influenza neuraminidase bound to zanamivir" width="860" />
28
+ <br>
29
+ <sub>Influenza A/H1N1 neuraminidase bound to zanamivir, 2001 frames at 300 K: free-energy landscape on the first two Cα principal components with three watershed states (48 / 41 / 11 %). Unmodified <code>figures/fel_2d_3d.png</code> from a single <code>conformatlas analyze</code> run; see the <a href="docs/tutorial_neuraminidase.md">tutorial</a>.</sub>
30
+ </p>
31
+
32
+ ## Features
33
+
34
+ | | |
35
+ |---|---|
36
+ | **Decompositions** | Cartesian PCA after Kabsch superposition, backbone / side-chain / nucleic dihedral PCA, TICA with implied timescales; landscapes on any component pair, on RMSD vs R<sub>g</sub>, or on user-supplied collective variables |
37
+ | **Free-energy landscape** | Boltzmann inversion at the simulation temperature (kJ/mol), automatic grid resolution, unsampled bins left empty; agrees with `gmx sham` on the same input |
38
+ | **Uncertainty** | Circular block bootstrap within replicates: standard deviation and 95 % CI of every bin, state population, state free energy and barrier |
39
+ | **States and kinetics** | Watershed segmentation with barrier-based merging, saddle-point barriers, transition matrix, dwell times, mean first-passage times; optional Markov state model (microstates, reversible estimator, implied-timescale scan, Chapman–Kolmogorov test, PCCA+) |
40
+ | **Convergence** | Statistical inefficiency and effective sample size, equilibration detection, first/second-half subspace overlap, cosine content, population stability per replicate |
41
+ | **Structures** | Representative and average structures per state, RMSF profiles, per-residue mode contributions, NMWiz mode files, dynamic cross-correlation maps, ligand–residue contacts |
42
+ | **Comparisons** | Any number of systems projected into a shared PCA space: ΔΔG maps with uncertainty, population differences with bootstrap confidence intervals and p-values, landscape overlap metrics |
43
+ | **Enhanced sampling** | `conformatlas reweight` turns PLUMED metadynamics or umbrella-sampling output into per-frame weights (final bias, Tiwary–Parrinello, WHAM, MBAR) for a reweighted landscape |
44
+ | **Scale** | Streaming two-pass PCA engine with memory independent of trajectory length, multi-replicate aware, HDF5 results container, re-analysis of saved results without re-reading trajectories |
45
+ | **Reporting** | Self-contained HTML report with interactive landscape and 3-D structure viewer, publication-ready PNG/SVG/PDF figures, optional PDF report |
46
+
47
+ ## Installation
48
+
49
+ ```bash
50
+ pip install conformatlas # core (includes MDAnalysis)
51
+ pip install "conformatlas[all]" # + interactive figures, HDF5, progress bars, PDF report
52
+ ```
53
+
54
+ From source:
55
+
56
+ ```bash
57
+ git clone https://github.com/AtharvaTilewale/ConformAtlas.git
58
+ cd ConformAtlas
59
+ pip install -e ".[dev]"
60
+ conformatlas doctor # checks Python dependencies and GROMACS (optional)
61
+ ```
62
+
63
+ Requires Python ≥ 3.10. GROMACS is optional and only needed for `--pca-backend gromacs`.
64
+
65
+ ## Quick start
66
+
67
+ **Analyse one system** (any number of replicates):
68
+
69
+ ```bash
70
+ conformatlas analyze -s topology.gro -f rep1.xtc -f rep2.xtc -f rep3.xtc -T 300 -o results/WT
71
+ ```
72
+
73
+ **Protein–ligand complex**, discarding the equilibration phase and adding a Markov state model:
74
+
75
+ ```bash
76
+ conformatlas analyze -s md.gro -f md_noPBC.xtc -n index.ndx \
77
+ --cov-group C-alpha --lig ZMR -T 300 \
78
+ --equilibration auto --bootstrap 200 --msm \
79
+ -o results/complex
80
+ ```
81
+
82
+ **Compare conditions** (wild type vs mutant, apo vs holo, …) in a shared PCA space:
83
+
84
+ ```bash
85
+ conformatlas compare --config comparison.yaml -o results/comparison
86
+ ```
87
+
88
+ **Try it** on the bundled synthetic two-state peptide:
89
+
90
+ ```bash
91
+ conformatlas example -o demo
92
+ conformatlas analyze -s demo/WT/topology.pdb -f demo/WT/rep1.xtc -f demo/WT/rep2.xtc -T 300 --bins 32 --smooth-sigma 1.0 -o demo/results
93
+ ```
94
+
95
+ Every option can live in a YAML file (`conformatlas init-config --type analyze -o run.yaml`). Trajectories must be made whole across periodic boundaries first (`gmx trjconv -pbc mol`). The full option reference is in [docs/cli.md](docs/cli.md).
96
+
97
+ From Python:
98
+
99
+ ```python
100
+ from conformatlas import api
101
+
102
+ ens = api.load_trajectories("topology.gro", ["rep1.xtc", "rep2.xtc"], group="C-alpha")
103
+ pcs = api.pca(ens)
104
+ land = api.landscape(pcs, temperature=300)
105
+ st = api.states(land)
106
+ fig, ax, _ = api.plot_landscape(land, states=st.states)
107
+ ```
108
+
109
+ ## What you get
110
+
111
+ ```text
112
+ results/
113
+ ├── report.html # interactive landscape, structure viewer, interpretation
114
+ ├── summary.json # state populations and minima, convergence assessment
115
+ ├── pca/ # eigenvalues, projections, eigenvectors, modes.nmd, mode contributions
116
+ ├── fel/ # free-energy grid, probability, bootstrap SD and CI
117
+ ├── states/ # basins, frame assignments, barriers, state ΔG, representative structures
118
+ ├── statistics/ # populations with block SD/SEM and bootstrap 95 % CI
119
+ ├── kinetics/ msm/ # transition matrices, dwell times, MFPT; MSM diagnostics (--msm)
120
+ ├── convergence/ # RMSIP, N_eff, equilibration, cosine content, population stability
121
+ ├── residues/ # DCCM, state differences, ligand contacts (--residue-analysis)
122
+ └── figures/ # 2-D/3-D landscapes, uncertainty maps, kinetics, MSM, DCCM panels
123
+ ```
124
+
125
+ Units: Å, ps, kJ/mol. The complete file manifest is in [docs/outputs.md](docs/outputs.md).
126
+
127
+ ## Validation
128
+
129
+ `validation/validate.py` compares every numerical component with an analytical result or an independent implementation — MDAnalysis, GROMACS (`covar`, `anaeig`, `sham`), pymbar, deeptime, SciPy and ProDy — and writes the report that is published as [docs/benchmarks.md](docs/benchmarks.md) (147/147 checks). Components that are conventions rather than derivations (convergence thresholds, grid heuristics, MSM lag selection) are labelled as such in [docs/methods.md](docs/methods.md).
130
+
131
+ Boltzmann inversion assumes an unbiased equilibrium ensemble; for biased simulations use `conformatlas reweight` and `--weights-file`. See the [FAQ](docs/faq.md) for this and other pitfalls.
132
+
133
+ ## Documentation
134
+
135
+ Full documentation: **[conformatlas.readthedocs.io](https://conformatlas.readthedocs.io)**
136
+
137
+ | Getting started | Reference | Background |
138
+ |---|---|---|
139
+ | [Installation](docs/installation.md) | [Command line](docs/cli.md) | [Methods](docs/methods.md) |
140
+ | [Quickstart](docs/quickstart.md) | [Python API](docs/python_api.md) | [Interpreting results](docs/interpretation.md) |
141
+ | [Tutorial: neuraminidase–zanamivir](docs/tutorial_neuraminidase.md) | [Output files](docs/outputs.md) | [Convergence diagnostics](docs/convergence.md) |
142
+ | [FAQ](docs/faq.md) | [Comparing systems](docs/comparison.md) | [Validation and benchmarks](docs/benchmarks.md) |
143
+
144
+ ## Citation
145
+
146
+ ```bibtex
147
+ @software{conformatlas2026,
148
+ author = {Tilewale, Atharva and Patel, Dhaval},
149
+ title = {ConformAtlas: mapping conformational landscapes from molecular simulations},
150
+ year = {2026},
151
+ version = {1.0.0},
152
+ url = {https://github.com/AtharvaTilewale/ConformAtlas}
153
+ }
154
+ ```
155
+
156
+ A machine-readable citation is in [CITATION.cff](CITATION.cff).
157
+
158
+ ## Contributing
159
+
160
+ Bug reports, feature requests and pull requests are welcome — see [CONTRIBUTING.md](CONTRIBUTING.md). Please run `ruff check`, the test suite and `validation/validate.py` before opening a pull request.
161
+
162
+ ## Authors and license
163
+
164
+ Developed by **Atharva Tilewale** and **Dhaval Patel**. Released under the [MIT License](LICENSE).