Metadata-Version: 2.4
Name: multiqc-stromboli
Version: 0.1.0
Summary: MultiQC plugin for the STROMBOLI barcode-variant mapping pipeline
Project-URL: Homepage, https://github.com/odcambc/stromboli-multiqc
Project-URL: Repository, https://github.com/odcambc/stromboli-multiqc
Project-URL: Issues, https://github.com/odcambc/stromboli-multiqc/issues
Project-URL: STROMBOLI pipeline, https://github.com/odcambc/STROMBOLI
Author-email: Chris Macdonald <cbmacdo@gmail.com>
License-Expression: MIT
License-File: LICENSE
Keywords: DMS,bioinformatics,multiqc,nanopore,stromboli
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Science/Research
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
Requires-Python: >=3.9
Requires-Dist: multiqc>=1.20
Description-Content-Type: text/markdown

# multiqc-stromboli

A [MultiQC](https://multiqc.info/) plugin for the
[STROMBOLI](https://github.com/odcambc/STROMBOLI) barcode → variant mapping pipeline.

It reads STROMBOLI's per-sample QC summary files (`results/qc/{sample}.stromboli_qc.json`)
and adds a STROMBOLI section to the MultiQC report: a general-statistics table, a
variant-consequence breakdown, a barcode-clash plot, and distribution plots. (cutadapt
stats come from MultiQC's built-in cutadapt module.)

> **Status: working.** Wired up against STROMBOLI's summary JSON
> (`workflow/rules/scripts/write_qc_summary.py`, schema_version 5): the general-stats
> table, variant-consequence and variant-type stacked bars (the DMS headline), the ORF
> coverage profile, the barcode-clash plot, and distribution plots for cluster size, call
> depth, allele fraction, variants per barcode, barcodes per variant, cluster purity, and
> barcode length/GC. Counts that span orders of magnitude (cluster size, call depth,
> variants per barcode, barcodes per variant) are emitted as exact `{value: count}` and
> binned by the plugin into data-driven, log-spaced bins shared across the loaded samples,
> then overlaid one line per sample. Bounded fractions (allele fraction, cluster purity,
> barcode GC) are pre-binned per-sample histograms (grouped bars, with a Counts /
> Percentages toggle). See `examples/sample.stromboli_qc.json` for the shape.

## Install

```bash
uv tool install multiqc-stromboli      # alongside a MultiQC install, or
uv pip install -e .                     # from a clone, for development
```

Once installed, MultiQC discovers it automatically via entry points — just run
`multiqc` over a directory containing `*stromboli_qc.json` files.

## Develop

```bash
uv sync            # create the venv and install deps (incl. dev)
uv run pytest      # parser unit tests + an end-to-end MultiQC smoke test
                   # (the smoke test self-skips if `multiqc` isn't on PATH)
uv build           # build the wheel/sdist
```

## The QC summary contract

The plugin consumes one JSON file per sample. The expected shape (schema_version 5) is
documented by `examples/sample.stromboli_qc.json` and `multiqc_stromboli/parse.py`. The
producer (STROMBOLI) owns this contract; when the format changes, bump `SCHEMA_VERSION`
in both places. Files with an unexpected `schema_version` are parsed best-effort with a
warning.

## License

MIT — see [LICENSE](LICENSE).

## Getting help

For any issues, please open an issue on the GitHub repository. For
questions or feedback, [email Chris](https://www.waymentsteelelab.org).