Skip to content

Releases

HashBrown v1.1.1

Choose a tag to compare

@github-actions github-actions released this 03 Nov 13:51

Documentation and packaging release; no pipeline changes.

  • HashBrown is on bioconda:
    conda create -n hashbrown -c conda-forge -c bioconda hashbrown installs 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

Choose a tag to compare

@github-actions github-actions released this 26 Oct 23:04

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 / parallel like 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/busco instead of littering the working
    directory; blank lines in a mosdepth summary no longer abort the report.
  • _R1/_R2 detection 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; stale 8_report state is removed on arm copies), and the non-model
    benchmark fails loudly if no reference can be extracted instead of hanging on xargs 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.tsv gained a Stage column.
  • 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-torrent now 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 none is 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-torrent warning 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-contig mash dist -i + NCBI datasets; no BlobToolKit-scale databases needed). The plot plus a
    tables/<sample>_blob.tsv make 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 db gains the
    bakta, amrfinder and mob modules.
  • 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 NCBI datasets; 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 and 8_report/qc/<sample>/.
  • hashbrown db {mash,checkm2} downloads the databases those modules need (default
    ~/.hashbrown/db, override with --dir or $HASHBROWN_DB).
  • Per-sample HTML report (8_report/, or 4_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 under 8_report/tables/. A PDF twin is written when WeasyPrint is
    installed, and per-stage pycoQC-ng reports when
    pip install pycoqc-ng was 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.