Skip to main content

Prothon

How different are two protein ensembles — and is the difference real?

DOI PyPI conda-forge PyPI Downloads Python License: MIT

Tests codecov Docs conda downloads

Documentation · Quick start · Cite


prothon compare --ensembles wild_type.dcd mutant.dcd --topology topology.pdb
CBCN (reference: ensemble 0)
  ensemble 1: d = 0.2841 (floor 0.0472) — 34/76 residues differ

Two numbers, and the second is the one that decides whether the first means anything. Split one ensemble in half at random and compare the halves: the answer is not zero, because a finite sample never reproduces a continuous distribution exactly. That self-distance is the noise floor — the smallest difference this much sampling can resolve.

Here 0.2841 clears a floor of 0.0472 by six times. At 0.05 it would not have, and Prothon would say so rather than report a small difference.

Install

conda create -n prothon -c conda-forge prothon
conda activate prothon

prothon info lists what is installed and what version:

prothon info

For source work, clone the repository. GitHub's Download ZIP is an unversioned audit snapshot; installable, versioned artifacts are the PyPI wheel/source distribution and the conda-forge package.

What you can compare

Two conditions, one protein Bound against free, folded against unfolded, one force field against another. Per residue, with a p-value, and a floor beside every value.
Two different molecules Mutant against wild type, or a construct against a longer one. Superposition needs a common coordinate frame and two different molecules have none; a residue map from a sequence alignment is enough.
A simulation against a deposited ensemble PED accessions by name (PED00024), multi-model PDB, directories of structures, and every common trajectory format — on equal terms in one command.
Several models against one reference --report table ranks them by the margin above each model's own floor rather than by raw distance, because a thinly sampled ensemble scores a smaller distance for being thinly sampled.
A trajectory against itself How much of it is independent, how long it must run before a difference of a given size can be resolved, and whether its correlation time has settled.
An ensemble against experiment Rg, end-to-end distance, PRE, FRET and ³J — each beside a floor, because a perfect ensemble of twenty conformations scores χ²_red = 0.77 and fitting that to 1.0 is fitting to noise.
What no per-residue statistic can see Two ensembles can match residue by residue and differ in how residues move together. MMD and a classifier two-sample test find that; the classifier names the residues carrying it.
Missed states against invented ones Precision and recall per residue. A symmetric distance says two ensembles differ; these say which one is short of a state and which has one too many.

It withholds rather than overstates. Trajectory frames are not independent draws, and a test that assumes they are calls almost every residue different when nothing differs. Prothon estimates the correlation time from your data, keeps the sample in trajectory order, and permutes contiguous blocks of it. Where a trajectory holds too few independent blocks to build a null from, it reports the floor and prints no p-value at all.

The false-positive rate is measured rather than asserted. A test that assumes independent frames calls 99% of residues different when nothing differs; this one calls between 8% and 16% at a nominal 5%, across sample sizes from 500 to 4000 and correlation times from 1 to 50, at 2000 null studies per configuration. That is the honest number and it is on the calibration page with the grid that produced it.

One import, and everything is reachable from it

from prothon import Prothon

prothon = Prothon(["wild_type.dcd", "mutant.dcd"], "topology.pdb", "cbcn",
                  random_state=0)

prothon.compare()                       # where do they differ
prothon.distinguishability()            # differences *between* residues
prothon.coverage_and_fidelity()         # missed states, or invented ones
prothon.rank()                          # several against a reference
prothon.validate("rg", [2.71], [0.08])  # against experiment
prothon.save_config()                   # writes prothon.yml

The order parameter is a property of the study, so it is named once. Any method takes one to override it for a single call.

Three ways to run the same study, and none is a subset of another — flags, file and API are generated from one schema:

The CLI prothon compare --ensembles wt.dcd mut.dcd --topology top.pdb --order-parameters cbcn, or a flag for any setting. Every long flag has a short form.
A config file prothon compare --config prothon.yml. A study written down can be committed beside a manuscript, diffed when it changes, and re-run by someone who has the data but not the terminal session.
The Python API Prothon(...), or Prothon(config="prothon.yml").

Any command line can be written out as a file with --save-config, and any file can be run from the command line.

Documentation

Start here — Install · Your first comparison · Order parameters · Worked examples

Going further — The statistics · Different molecules · Distances · Scoring against experiment · Ranking several ensembles

Measurements — Calibration · Circular parameters · Convergence · Ubiquitin · Performance

Reference — CLI · Configuration · Python API

Citation

Aina, A.; Hsueh, S. C. C.; Plotkin, S. S. PROTHON: A Local Order Parameter-Based Method for Efficient Comparison of Protein Ensembles. J. Chem. Inf. Model. 2023, 63, 3453–3461. DOI: 10.1021/acs.jcim.3c00145

@article{aina2023prothon,
  author  = {Aina, Adekunle and Hsueh, Shawn C. C. and Plotkin, Steven S.},
  title   = {PROTHON: A Local Order Parameter-Based Method for Efficient
             Comparison of Protein Ensembles},
  journal = {Journal of Chemical Information and Modeling},
  volume  = {63},
  number  = {11},
  pages   = {3453--3461},
  year    = {2023},
  doi     = {10.1021/acs.jcim.3c00145},
}

Contributing

Contributions welcome — see CONTRIBUTING.md.

License

MIT. See LICENSE.


Built in the AAI Research Lab at California State University Dominguez Hills, on MDTraj, NumPy, SciPy, scikit-learn and Matplotlib.

Metadata

Release files for prothon-ensembles 2.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for prothon-ensembles 2.4.0
File Size Uploaded Provenance
prothon_ensembles-2.4.0.tar.gz 395.5 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for prothon-ensembles 2.4.0
File Interpreter ABI Platform
prothon_ensembles-2.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 567.0 kB

Release files / prothon_ensembles-2.4.0.tar.gz

Download URL prothon_ensembles-2.4.0.tar.gz
Size 395.5 kB
Tags Source
SHA-256 checksum
How to use checksums
4570111268f28cb33c900b1bcf843776ab56705f2184eb3273e7e72ff5e3a068
BLAKE2b-256 checksum
How to use checksums
b24d76076a0b2bcc92abaacc85dd62f613118573ac42341aa1181ac721a1aea3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / prothon_ensembles-2.4.0-py3-none-any.whl

Download URL prothon_ensembles-2.4.0-py3-none-any.whl
Size 171.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
97e3d4338af2ae5a870384bc4d93de3e8a242ca579141d1f861f842f69320120
BLAKE2b-256 checksum
How to use checksums
b85fe64b79caa609c1a97e0cad6173be487243859e5a9472f47cd6c0989c0ccd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Security for prothon-ensembles 2.4.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for prothon_ensembles-2.4.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page