Skip to main content

QuantNado

Docs CI Release License PyPI Version

QuantNado logo

QuantNado builds per-sample Zarr stores from genomic assays and exposes a unified Python API for region selection, reduction, feature counting, normalisation, PCA, and peak calling.

Installation

pip install quantnado

Requires Python 3.12 or 3.13.

Quick Start

1. Create per-sample stores

quantnado dataset create \
  --sample ATAC_1 \
  --assay ATAC \
  --bamfile /data/ATAC_1.bam \
  --output-dir dataset \
  --chromsizes hg38.chrom.sizes

quantnado dataset create \
  --sample H3K27ac_1 \
  --assay ChIP \
  --bamfile /data/H3K27ac_1.bam \
  --ip H3K27ac \
  --output-dir dataset

quantnado dataset create \
  --sample METH_1 \
  --assay METH \
  --bamfile /data/METH_1.bam \
  --methylation_file /data/METH_1.bedGraph \
  --output-dir dataset

quantnado dataset create \
  --sample SNP_1 \
  --assay SNP \
  --vcf_file /data/SNP_1.vcf.gz \
  --output-dir dataset

This writes one .zarr store per sample into dataset/.

For quick test builds, you can either use the default test chromosomes:

quantnado dataset create \
  --sample ATAC_1 \
  --assay ATAC \
  --bamfile /data/ATAC_1.bam \
  --output-dir dataset \
  --test

or provide an explicit list:

quantnado dataset create \
  --sample ATAC_1 \
  --assay ATAC \
  --bamfile /data/ATAC_1.bam \
  --output-dir dataset \
  --test-chrom chr21 \
  --test-chrom chr9

2. Open the dataset in Python

from quantnado import QuantNado

qn = QuantNado.open("dataset/")

print(qn.sample_names)
print(qn.assays)
print(qn.array_keys)
print(qn.info)

3. Run common analyses

# Select a genomic region
region = qn.sel("chr1", 1_000_000, 1_010_000)

# Reduce signal over intervals
promoters = qn.reduce(
    intervals_path="promoters.bed",
    reduction="mean",
    modality="coverage",
)

# Quantify stored signal over genes
gene_signal, gene_meta = qn.quantify_signal(
    gtf_file="genes.gtf",
    feature_type="gene",
    assay="RNA",
    modality="coverage",
)

# Count features using the current signal backend
counts, features = qn.count_features(
    gtf_file="genes.gtf",
    feature_type="gene",
    engine="signal",
    assay="RNA",
)

# PCA on reduced signal
pca_obj, pca_result = qn.pca(promoters["mean"], n_components=10)

4. Optionally combine stores

quantnado dataset combine \
  --stores dataset/ATAC_1.zarr dataset/H3K27ac_1.zarr dataset/METH_1.zarr dataset/SNP_1.zarr \
  --output dataset/combined.zarr

You can open either dataset/ or dataset/combined.zarr with the same API.

CLI

QuantNado installs a quantnado command with two main workflows.

dataset create

Creates one per-sample Zarr store from direct assay inputs.

quantnado dataset create \
  --sample RNA_1 \
  --assay RNA \
  --bamfile /data/RNA_1.bam \
  --stranded R \
  --output-dir dataset

For single-end BAMs, add --single-end.

Supported assays: ATAC, ChIP, RNA, CUT&TAG, METH, SNP, MCC.

dataset combine

Combines per-sample stores into one multi-sample store.

quantnado dataset combine \
  --stores dataset/ATAC_1.zarr dataset/RNA_1.zarr dataset/METH_1.zarr \
  --output dataset/combined.zarr

call-peaks

Calls peaks directly from a QuantNado dataset.

quantnado call-peaks \
  --zarr dataset/combined.zarr \
  --method quantile \
  --assay atac \
  --output-dir peaks/

Available methods: quantile, seacr, and lanceotron.

Python API

The main entry points are:

Object / function Purpose
QuantNado.open(path) Open a directory of per-sample stores or a combined .zarr
QuantNado.combine(src, output) Combine per-sample stores into one multi-sample store
QuantNadoDataset(path) Lower-level analysis object used by the facade
create_dataset(...) Build a single per-sample store programmatically
metadata_from_seqnado(...) Generate a QuantNado metadata table from a SeqNado project

Common analysis methods on QuantNado / QuantNadoDataset:

Method Purpose
.sel(chrom, start, end, ...) Extract a genomic region as xr.Dataset
.reduce(...) Summarise signal over BED/GTF intervals
.quantify_signal(...) Quantify stored signal over features
.count_features(...) Count features via the selected engine (signal today, bam planned)
.extract(...) Bin signal around promoters, genes, transcripts, or exons
.normalise(...) Apply CPM/RPKM/TPM normalisation
.group_by(...), .subset(...), .info Notebook-friendly sample grouping, filtering, and dataset summaries
.pca(...) Run PCA on reduced or selected signal
.metaplot(...), .tornadoplot(...), .heatmap(...), .correlate(...) Visualisation helpers

Documentation

Full documentation is available at milne-group.github.io/QuantNado.

License

GNU GPL v3.0. See LICENSE.

Metadata

Release files for quantnado 0.4.9

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

Source distribution (sdist)

Source distribution for quantnado 0.4.9
File Size Uploaded Provenance
quantnado-0.4.9.tar.gz 27.8 MB With provenance Details

Built distribution (wheel)

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

Total release size: 55.2 MB

Release files / quantnado-0.4.9.tar.gz

Download URL quantnado-0.4.9.tar.gz
Size 27.8 MB
Tags Source
SHA-256 checksum
How to use checksums
ff0d6a3230a80d20b548d34aa1aa0f231a07abb5186c697c0d4b63924e3f691d
BLAKE2b-256 checksum
How to use checksums
cc585364cecda0cdcfbe9bce506d07e07de043727bcd1389b0418b9730499fd3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 Jun 22, 2026.

Transparency log

Release files / quantnado-0.4.9-py3-none-any.whl

Download URL quantnado-0.4.9-py3-none-any.whl
Size 27.4 MB
Tags Python 3
SHA-256 checksum
How to use checksums
517bc916ca5835e2680fabb41bfafa21a2df58eff20d5645efa4d361d82a4822
BLAKE2b-256 checksum
How to use checksums
9ed8c2b7914e68d7bc4d87a57b1597d7173998e1f4a9245a3d19590b0e2799c1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 Jun 22, 2026.

Transparency log

Security for quantnado 0.4.9

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 quantnado-0.4.9.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 Jun 22, 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.

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