Skip to main content

Anchor-based amplicon demultiplexer for tetra/octa-nucleotide barcodes

Project description

ampliscan — sort sequencing reads into per-sample bins by their barcodes

ampliscan

Anchor-based amplicon demultiplexer — sort sequencing reads into per-sample bins by their barcodes.

PyPI Python License: MIT Interfaces DOI


ampliscan splits pooled sequencing reads into per-sample files by matching short barcodes that sit immediately next to user-defined constant anchor sequences (e.g. gctt and acag). Using the anchor + barcode together — an octanucleotide in the common 4+4 case — gives much better discrimination than the barcode alone, because the constant anchor pins the alignment even when the barcode region has a sequencing error.

[adapter]  ANCHOR5  [F-barcode]  TARGET  [R-barcode]  ANCHOR3  [adapter]
           └──── octanucleotide ────┘              └──── octanucleotide ────┘

It's built for the second, inner level of demultiplexing that your sequencing facility's i5/i7 index demux does not do — separating samples tagged by barcodes carried on your custom PCR primers.

Features

  • Two interfaces, one engine — a scriptable CLI for pipelines and a modern desktop GUI for bench scientists (zero extra dependencies).
  • Fully configurable panel — anchor sequences, barcode length, barcode lists, and mismatch policy are all user-defined; nothing is hard-coded.
  • Robust matching — Hamming (default) or Levenshtein matching, configurable mismatch budget, and paired-end reconciliation that refuses to guess.
  • Transparent failures — unassigned reads are counted by reason (no_anchor, barcode_unmatched, barcode_ambiguous, paired_end_disagreement).
  • Flexible I/O — FASTQ and/or FASTA output, gzip-aware, optional per-strand (_fwd/_rev) splitting, streaming writes for bounded memory.
  • Fast — optional isal acceleration; validated on real 6.6 M-read libraries.

Install

pip install ampliscan[fast,excel]     # 'fast' = isal (2–5× faster gzip)

Or from source:

git clone https://github.com/Ayushmania2002/ampliscan
cd ampliscan
pip install -e .[fast,excel]

Workflow

ampliscan workflow: R1/R2 FASTQ and a panel YAML go into the ampliscan engine (locate anchors, match barcodes, reconcile R1+R2 pairs), which is driven by either the CLI or the GUI, and produces per-sample FASTQ/FASTA bins plus a QC summary

  1. Input — paired-end (or single-end) FASTQ/FASTA, gzip or plain.
  2. Panel — a YAML file (or the GUI form) declaring the anchor sequences, barcode length, and forward/reverse barcode lists.
  3. Engine — for each read: locate the anchors, match the adjacent barcodes (Hamming or Levenshtein), then reconcile the R1/R2 assignment.
  4. Decision — assigned reads go to their sample bin; unassigned reads are kept with an explicit reason (no_anchor, barcode_unmatched, barcode_ambiguous, or paired_end_disagreement).
  5. Output — one FASTQ/FASTA file per sample, plus a QC summary (heatmap of reads per bin + the unassigned-reason breakdown).

Drive the same engine from either the CLI (scripting/pipelines) or the GUI (point-and-click) — see below.

Usage

Desktop GUI (no terminal needed)

ampliscan gui          # or just: ampliscan

Configure the panel (or load it from YAML/Excel), pick your R1/R2 files and an output folder, set options, and run — with a live progress bar, a reads-per-bin heatmap, and an "open output folder" button.

On Windows, ampliscan-gui (and double-clicking it) opens with no console window. On Debian/Ubuntu, tkinter may need sudo apt install python3-tk.

Command line

ampliscan panel  Data.xlsx --out panel.yaml          # Excel -> panel YAML
ampliscan validate panel.yaml                        # lint it
ampliscan sniff  --r1 R1.fq.gz --r2 R2.fq.gz --config panel.yaml   # quick preview
ampliscan demux  --r1 R1.fq.gz --r2 R2.fq.gz --config panel.yaml --out bins/ --format both

Useful demux flags: --format {fastq,fasta,both}, --split-by-strand (separate _fwd/_rev files), --workers N (CPU cores; see the speed note).

Python API

from ampliscan import Panel, MatchPolicy, demux_to_bins

panel = Panel.from_yaml("panel.yaml")
stats = demux_to_bins("R1.fq.gz", panel, out_dir="bins/",
                      r2_path="R2.fq.gz",
                      policy=MatchPolicy(barcode_mismatch=1),
                      output_format="both")
print(f"{stats.assigned_fraction:.1%} assigned")

See examples/ampliscan_demo.ipynb for an interactive walkthrough.

A note on speed

For gzipped Illumina input the job is I/O-bound, not CPU-bound: gzip (de)compression dominates and the barcode matching is cheap.

  • Installing isal (pip install ampliscan[fast]) is the real speedup (~1.7× on a full pool) — used automatically when present.
  • --workers > 1 does not help gzipped input; raise it only for uncompressed input, --indels matching, or very large panels.

How it works

See the accompanying paper, PAPER.md, for the method, the octanucleotide rationale, validation, and benchmarks.

Citing ampliscan

If you use ampliscan in your research, please cite it (see CITATION.cff):

Ayushman Mallick (2026). ampliscan: an anchor-based amplicon demultiplexer with a desktop GUI for barcode-tagged sequencing reads (Version 1.0.0) [Software]. Zenodo. https://doi.org/10.5281/zenodo.21505581

License

MIT © 2026 Ayushman Mallick.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ampliscan-1.0.0.tar.gz (139.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ampliscan-1.0.0-py3-none-any.whl (80.4 kB view details)

Uploaded Python 3

File details

Details for the file ampliscan-1.0.0.tar.gz.

File metadata

  • Download URL: ampliscan-1.0.0.tar.gz
  • Upload date:
  • Size: 139.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for ampliscan-1.0.0.tar.gz
Algorithm Hash digest
SHA256 8484f31943978383ecd1f35d590cfbc7cdd63f2f4cf980f54fc6ad4bcb23c1db
MD5 d4ee5a5e946229c26953c19423e68c9c
BLAKE2b-256 2ccecdf3e9390974571fb50fc3fde19387043d5e8e3f04e152d26b128effc36d

See more details on using hashes here.

File details

Details for the file ampliscan-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: ampliscan-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 80.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for ampliscan-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6b83f11b4996435d564616bd98614d7a0c5204e9210349439979c22f28384827
MD5 c942fca1ba878d8aa9adf33720fe2f28
BLAKE2b-256 c17c4f6298c3746788cef5b4391b0d9f1aca6f1713fa3596c9e90c426dd3143f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page