Skip to main content

DOI

Riana — Relative Isotope Abundance Analyzer

Riana takes standard mass-spectrometry spectra (mzML) and peptide identifications (quantms mzTab for DDA, DIA-NN report.parquet for DIA, or Percolator output) and returns mass isotopomer distributions for protein-turnover analysis. It then fits kinetic models (one-exponential, Guan, Fornasiero) to the time-series, rolls peptides up to proteins, and can test cross-condition turnover differences (Δk) with a linearized model. A PySide6 desktop GUI (riana gui) drives the same steps interactively.

Full documentation: https://ed-lau.github.io/riana/

Install

Riana requires Python 3.10 or newer. We recommend a virtual environment.

pip install riana

For a development install from a clone:

git clone https://github.com/ed-lau/riana
cd riana
pip install -e ".[dev]"

Quickstart

Riana's primary path keys every run off an SDRF sample sheet and a quantms mzTab (DDA) or DIA-NN report.parquet (DIA, with the [dia] extra). It writes one identity-stamped <run>_riana.txt per run plus a riana_manifest.tsv that chains the stages, so fit and rollup re-group runs from the manifest rather than from filenames:

# 1. Integrate every run in the experiment (one mzML in memory per worker)
riana integrate <mzml_dir> report.mzTab --sdrf samplesheet.sdrf.tsv \
    --workers 4 --out ./out

# 2. Fit the kinetic curve per peptidoform (grouped by the manifest)
riana fit --manifest ./out/riana_manifest.tsv \
    --coefficients commerford --ria 0.06 --depth 3 --out ./out

# 3. Roll peptides up to proteins
riana rollup --manifest ./out/riana_manifest.tsv \
    --parsimony unique --method weighted --out ./out

Add --mbr to integrate to recover time points lost to stochastic MS2 sampling (gated match-between-runs, DDA only). For a two-condition experiment, rollup --model "linear simple" --reference-condition <name> fits turnover in φ-space and reports a per-protein Δk with Benjamini–Hochberg-adjusted p-values.

Single-fraction (Percolator) path

Without --sdrf, the ID file is read as a Percolator target.psms.txt for a single mzML (a simpler, demoted tier):

riana integrate <mzml_dir> <percolator_psms.txt> \
    --sample time1 --iso "0 1 2 3 4 5" --q_value 0.01 --mass_tol 25 --out ./out

riana fit ./out/time0_riana.txt ./out/time1_riana.txt ./out/time3_riana.txt \
    --model simple --label hw --coefficients commerford --ria 0.06 --out ./out

Fitting is heavy-water (D₂O) only and needs a per-amino-acid labeling-site table via --coefficients — a bundled preset (commerford literature, or the ac16 / ipsc / cm calibration tables) or a path to your own (amino_acid, coefficient) CSV.

By default integration uses an apex-centred narrow window (--integration-half-width 0.15, dial it to your chromatographic peak width); power-user dials live under the Advanced integration group of riana integrate --help. To reproduce the 0.9.0 fixed-window behaviour, add --peak-rt ms2 --integration-half-width 1.0.

GUI

riana gui (install the [gui] extra) opens a PySide6 desktop app with Integrate, Model (fit), and Protein (rollup) tabs over the same engine, with interactive chromatogram, fitted-curve, and φ-space plots.

See riana <command> --help for the full argument set, or the online docs for tutorials. (List flags like --iso take a single comma/space-separated token.)

File formats

Inputs:

  • mzML (gzipped or plain) — MS1 spectra, streamed one fraction at a time
  • SDRF .sdrf.tsv — the sample sheet that carries run identity (condition, biological replicate, labeling time, acquisition, precursor enrichment); the primary intake key
  • mzTab (quantms / OpenMS) — the DDA peptide identifications
  • DIA-NN report.parquet — the DIA identifications (apex RT resolved to the nearest MS1 scan); needs the [dia] extra
  • Percolator target.psms.txt — single-mzML demoted tier (header-autodetected)

Outputs (each with a provenance header):

  • <run>_riana.txt — one row per PSM, one column per integrated isotopomer
  • riana_manifest.tsv — the stage-aware project index (integrate / fit / rollup rows) that chains the steps
  • riana_fit_peptides.txt / riana_fit_fractions.txt — per-peptidoform kinetics and the per-timepoint fraction-new with prediction intervals
  • riana_rollup_proteins.txt / riana_rollup_fractions.txt — protein-level k (and Δk under the linear simple model)

Pipeline

Riana is orchestration-agnostic: search + identification are owned upstream (e.g. quantms for DDA, DIA-NN for DIA), and Riana is a linear integrate → fit → rollup chain glued by the manifest, which you compose into whatever workflow already runs them. The bundled Snakemake example was retired in 1.0.0 — drive the subcommands directly, or from your own workflow manager.

Citation

If you use Riana in published work, please consider citing the following papers:

Alamillo, L. et al. Protocol to Measure Protein Half-Life in Cell Culture Using Heavy Water. STAR Protoc. 2026 https://doi.org/10.1016/j.xpro.2026.104426

Currie, J. et al. Improved Method to Determine Protein Turnover Rates with Heavy Water Labeling by Mass Isotopomer Ratio Selection. J Proteom Res. 2025 https://doi.org/10.1021/acs.jproteome.4c01012

Alamillo, L. et al. Deuterium Labeling Enables Proteome Wide Turnover Kinetics in Cell Culture. Cell Rep Methods. 2025 https://doi.org/10.1016/j.crmeth.2025.101104

Hammond, D. et al. Harmonizing Labeling and Analytical Strategies to Obtain Protein Turnover Rates in Intact Adult Animals. Mol Cell Proteomics. 2022 https://doi.org/10.1016/j.mcpro.2022.100252

Contributing

Bug reports and pull requests welcome at https://github.com/ed-lau/riana/issues. See PROJECT_REVIEW.md for the current development roadmap.

License

MIT — see LICENSE.md.

Metadata

Release files for riana 1.1.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 riana 1.1.0
File Size Uploaded
riana-1.1.0.tar.gz 518.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for riana 1.1.0
File Interpreter ABI Platform
riana-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 939.5 kB

Release files / riana-1.1.0.tar.gz

Download URL riana-1.1.0.tar.gz
Size 518.2 kB
Tags Source
SHA-256 checksum
How to use checksums
e74e0a6086ac7414c7695e1d0212e00610d4cc8a4f2e61147f52d7c46803b243
BLAKE2b-256 checksum
How to use checksums
c785167796e4509e52d030e522343a338cd4769d35e9b868fc5215fbf6c95778
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.13

Release files / riana-1.1.0-py3-none-any.whl

Download URL riana-1.1.0-py3-none-any.whl
Size 421.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4d899ac24fe92aecacaab3121d7c3dcec96baa8bd508afb28ad28c8bd7881f65
BLAKE2b-256 checksum
How to use checksums
f0c4e3625751e115cd7b492f5c203429175434360b034a1b893124e758617c56
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.13

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 release files

0.7.2

1 release file

0.7.1

1 release file

0.7.0

1 release file

0.6.1

1 release file

0.6.0

1 release file

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