Repository navigation
Releases
Releases · duceppemo/HashBrown
HashBrown v1.1.1
Documentation and packaging release; no pipeline changes.
- HashBrown is on bioconda:
conda create -n hashbrown -c conda-forge -c bioconda hashbrowninstalls the tool with its whole core
toolchain and is now the recommended install (README and wiki updated, bioconda badge added). - The Python package is on PyPI as
hashbrown-assembly, published automatically on each
release via PyPI trusted publishing (.github/workflows/publish.yml). - The polisher-benchmark result tables (all seven tracks, re-measured with 1.1.0) are committed under
validation/benchmarks/results/and linked from the wiki's Validation page. - README images and the license link use absolute URLs so the PyPI project page renders them.
HashBrown v1.1.0
Fixed (pre-release review)
- Long-read-only runs no longer show a phantom "Polished - short reads" stage in the report when
dnaapler reoriented the assembly; the reoriented label follows the actual final stage. - Concurrent polishing of samples whose names prefix each other (S1/S12) no longer deletes each
other's SAM files (exact-name cleanup instead of a prefix glob). - SKESA now gets
--memory / parallellike SPAdes, instead of each concurrent job claiming the full
budget; bwa and filtlong outputs are streamed to disk instead of buffered whole in memory. - BUSCO downloads its lineages under
~/.hashbrown/db/buscoinstead of littering the working
directory; blank lines in a mosdepth summary no longer abort the report. _R1/_R2detection no longer misreads names like_R10, and a sample with an ambiguous set of
short-read files (e.g. un-merged lanes) stops the run with a clear message instead of silently
continuing with one file.- The benchmark harness resumes no longer inherit the base run's QC-module results (reports are
skipped in harness runs; stale8_reportstate is removed on arm copies), and the non-model
benchmark fails loudly if no reference can be extracted instead of hanging onxargs cat.
Changed
- Filtlong filtering and fastp trimming are now on by default (skip with
--no-filter-long/
--no-trim-short; the old opt-in spellings remain accepted no-ops). Porechop (--trim-long) stays
opt-in: it is unmaintained, slow, and redundant on recent basecalls. Short-read-only runs ignore the
long-read prep flags instead of erroring, and the benchmark scripts pin the prep flags to keep the
published validation numbers reproducible. - Unusable inputs fail loudly: an empty input file or broken symlink stops the run immediately with a
clear message; a prep stage that produces nothing warns and falls back to the previous reads; and a run
where no sample assembled exits non-zero instead of printing Done. Read QC figures use 1,000-style
thousands separators on their axes. - Mapping QC covers every read-processing stage: flagstat and mosdepth now run per stage (raw,
trimmed, filtered) instead of only on the most processed reads, so the effect of each step on mapping
rate and depth is measurable;long/short_read_cov.tsvgained aStagecolumn. - Single-end short reads can polish long-read assemblies: Polypolish (one all-alignments SAM) and
pyPOLCA (no--reads2) both run single-end, so Ion Torrent or unpaired Illumina data works in hybrid
mode; a sample with a pair plus stray extra files keeps the pair with a warning. New--skip-report
flag for harness runs where only the assemblies matter. --ion-torrentnow shapes the whole run, not just SPAdes: fastp skips adapter trimming for Ion
Torrent reads (the Torrent Suite already removed the adapters; the sliding-window quality trim stays),
the flag is accepted in hybrid mode, and polishing a Nanopore assembly with Ion Torrent reads prints a
warning — both platforms share homopolymer/indel errors, so such a polish can confirm errors rather
than fix them (--short-polisher noneis suggested).
Added
- Ion Torrent polishing benchmark (seventh validation track, two 3-platform isolates): Ion polishing
of a Nanopore assembly fixes ~92% of indels but 96–97% of its residual errors are homopolymer indels,
where depth-matched Illumina leaves none — the--ion-torrentwarning now cites the measurement. - QA-grade report design: branded masthead (logo + version), summary verdict cards, a QC criteria
table with pass/warn/fail chips anchored on the MIMAG standard (Bowers et al. 2017) and an overall
draft-quality tier, a traceability appendix (software versions from log.txt, exact command line, run
date), PDF page footers with numbering, per-stage mapped coverage in the read funnel, restyled
tables and figures in HashBrown's palette, light/dark and print safe. Example report:
docs/example_report/. - Contamination screening and read-based profiling (reporting phase 4): ConFindr verdict from the
short reads (hashbrown db confindr), a GenomeScope2 genome profile (size estimate, heterozygosity,
read error rate from the short-read 21-mers, reusing Merqury's meryl counts), and a built-in blob
plot — every contig by %GC and coverage, dot area ~ length, colored by its closest RefSeq genome
(per-contigmash dist -i+ NCBI datasets; no BlobToolKit-scale databases needed). The plot plus a
tables/<sample>_blob.tsvmake stray contigs obvious. - Typing, AMR and annotation in the report (reporting phase 3), optional modules like the rest:
MLST (scheme/ST also on the run index), MOB-suite plasmid reconstruction and typing, one merged
gene table from AMRFinderPlus (resistance), abricate+VFDB (virulence) and abricate+PlasmidFinder
(replicons), and genome annotation — Bakta by default when installed, NCBI PGAP via Docker with
--annotate pgap(new flag:--annotate {auto,bakta,pgap,none}).hashbrown dbgains the
bakta,amrfinderandmobmodules. - Optional QC modules (reporting phase 2), auto-detected at runtime and reported as skipped-with-a-hint
when not installed: dnaapler reorients every final assembly in place (chromosome to dnaA, plasmids
to rep; the input order is kept next to it as<sample>_unoriented.fasta, and dot plots keep comparing
pre-reorientation sequences); Merqury consensus QV per assembly stage from the short-read k-mers (new
QV column in the report's assembly table); species confirmation — mash against a local RefSeq sketch,
then ANI (fastANI or skani) against the top hit fetched with NCBIdatasets; CheckM2
completeness/contamination; BUSCO (prokaryote auto-lineage); barrnap rRNA counts and
tRNAscan-SE tRNA counts as annotation sanity checks. Results land in the HTML/PDF report, the
tables/TSVs and8_report/qc/<sample>/. hashbrown db {mash,checkm2}downloads the databases those modules need (default
~/.hashbrown/db, override with--diror$HASHBROWN_DB).- Per-sample HTML report (
8_report/, or4_report/for short-read-only runs) with a run-level
index.html: read funnel tables showing the effect of every read-processing stage (raw → trimmed →
filtered: reads, bases, N50, mean Q, %GC, coverage, % kept), assembly stage-by-stage table
(assembled → Medaka → short-read polished), per-contig mosdepth coverage (long and short reads side by
side), length/quality distribution and coverage figures, and links to the QUAST/pycoQC/dot plot details.
Every table is also written as TSV under8_report/tables/. A PDF twin is written when WeasyPrint is
installed, and per-stage pycoQC-ng reports when
pip install pycoqc-ngwas run — both are optional and skipped with a note otherwise.
New core dependencies: seqkit, jinja2, matplotlib. The full reporting/QC roadmap is in
docs/reporting_plan.md.