Upgrading from 2.x¶
FiberHMM 3.0 is the third generation of the FiberHMM family, released
together with FiberBrowser 3.0 (which requires fiberhmm>=3.0,<4). This page
lists what 2.x users need to act on. The full list of changes is in the
Changelog.
Check which outputs need re-running¶
fiberhmm-check reads what each output records about how it was made and
lists the fixes below that apply to it, with the exact command to re-run:
It exits 0 when nothing needs re-running, 3 when something does, 4 when a
file holds calls without FiberHMM provenance, which cannot be checked
(re-run them if they came from FiberHMM < 3.0), and 2 when a path cannot be
checked; --json gives the same result for scripts. fiberhmm-check --list
prints every advisory it knows. BAMs record the digests of the
tables they were called with since 3.0, so later releases can tell exactly;
for 2.x BAMs the check uses the version and command line, and says so when
that cannot decide (development builds reported 2.16.8 on both sides of some
fixes). See Checking outputs for re-runs.
Re-run Nanopore Hia5 and DddB calls¶
Updated emission tables
The Nanopore Hia5 and DddB emission tables have been updated (re-calibrated). The Nanopore Hia5 table is rebuilt from matched naked-DNA and untreated controls, and 3.0 nucleosome recall also changed (see the changelog).
Re-run Nanopore Hia5 and DddB calls made with 2.x. Nucleosome, MSP
and footprint calls all change. The PacBio Hia5 table is unchanged.
fiberhmm-check lists the affected files.
The 2.x tables are kept as
fiberhmm/models/legacy/hia5_nanopore_gt_swapped_legacy.json and
legacy/dddb_nanopore_gt_swapped_legacy.json to reproduce old calls
(Bundled models). The model builder now
always numbers contexts in encoder order (A, C, T, G); rebuild custom m6A
tables made with the 2.x builder with fiberhmm-probs from 3.0.
Re-train models built with --base-model¶
fiberhmm-train --base-model keeps the base model's transitions and replaces
its emissions. With a base whose state 0 is the footprint, such as the
Nanopore Hia5 model bundled in 2.x, every 2.x release paired the inherited
transitions with inverted states, so the resulting model called accessible
DNA as footprint. 3.0 matches the new emission rows to the base model's
accessible state. Re-train models built this way with 2.x;
fiberhmm-check does not flag them.
Defaults that change numbers¶
| Change | 2.x | 3.0 | To get the 2.x behaviour |
|---|---|---|---|
ML threshold for Hia5 Nanopore (call, apply, recall-tfs/-nucs, extract, qc, posteriors) |
128 / 125 | 248 | --prob-threshold 128 (or 125) |
Alignments called by call/apply |
all (DAF: primary only) | primary + supplementary (supplementary: aligned bases only) | --no-primary (all), --primary (primary only) |
| DAF insertion / soft-clip / SNP-masked bases | counted as protected | no evidence; unaligned stretches >= 50 bp uncalled | --no-daf-mask-unaligned |
fiberhmm-pipeline DAF soft clips |
hard-clipped | kept on linear contigs (hard-clipped on circular ones); supplementary records kept | --hard-clip, --alignments primary |
Bases trimmed at read ends by posteriors |
100 | 10 (as call/apply) |
--edge-trim 100 |
DddA CpG-aware calling: first-pass HMM and recall in call (and pipeline), recall in recall-tfs/-nucs, HMM in apply/posteriors and the qc light call, joint HMM and recall in pair/merge |
off | on (ddda_ucg islands exempt) |
--no-use-m5c |
DAF tools reading MM/ML dU (dedup, pair, merge) |
ML 0 | ML 128 | --prob-threshold 0 |
| DAF duplicate grouping | by alignment orientation | by deamination flavour (more duplicates found; for example 5.8% → 9.9% on one DddA data set) | none |
| TF recall decoder (all chemistries) | one maximum per positive-score excursion | exact best set of intervals, --min-llr is the per-interval cost (tf_decoder=multi_interval_v1 in @PG) |
none |
TF --min-llr preset for DddB |
4.0 | 5.0 (as every preset) | --min-llr 4 |
| Nucleosome recall for Hia5 and DddB | periodicity prior (--phase-nrl auto); topology policy for Nanopore Hia5 |
accessible-cut split, no periodicity prior; nucleosome calls change | none (--phase-nrl and --nuc-recall-policy are retired) |
| DddA TF table and radial nucleosome recall | 2.x ddda_TF.json, radial template |
duplex-calibrated ddda_TF.json; phase-aware posterior edges (ddda_nuc_profile.json, ddda_nuc_refine.json) |
none |
DddA adjacent-target thinning (call, apply, recall-tfs/-nucs, pair/merge, consensus) |
off | runs of ≥ 2 CC/GG targets keep one | --daf-mask-runs 0 |
Looser consensus prevalence tiers (prevalence_edge, prevalence_loose) |
could double-count and exceed 1 | coherent union; drops by up to about 0.14 (typically 0.002–0.04); core unchanged | none (the old value was an error) |
R/Y- and MD-encoded deaminations are binary and unaffected by ML thresholds.
Behaviour that used to fail silently¶
These now either work or stop with a clear message:
- Unaligned (uBAM) and stdin input are called instead of being skipped as unmapped; a run that skips more than 90% of records as unmapped fails.
- A missing
--seqis detected from the input instead of assuming PacBio (so ONT Hia5 is no longer silently called as PacBio). - A custom
--modelinherits the input's declared chemistry; conflicts stop with a one-line fix (--replace-chemistryto re-declare). - Worker failures above 1% of reads fail the run; outputs are published atomically, so a failed run leaves no valid-looking partial BAM.
- Hard-clipped supplementary records whose
MM/MLcannot matchSEQare skipped instead of being called on the wrong bases. fiberhmm-tag-m5cwrites unmethylated islands (ddda_ucg), sorecall-tfs --use-m5cno longer masks every CpG.fiberhmm-apply -c 1no longer crashes on DAF strand-swap chimeras.fiberhmm-posteriorsdecodes reverse reads in the right frame and handles DAF.- Re-deduplicating a BAM that already carries duplicate marks (a 2.x output,
or
fiberhmm-callon one) recomputes them:fiberhmm-dedupclears the earlier0x400flags anddi/dstags before marking. fiberhmm-recall-tfs/-recall-nucsreadns/nl/as/alwritten by fibertools in molecular frame (reverse-read nucleosomes and MSPs were mirrored), and a merged header whose histories disagree stops the run. See Footprint-tag frame.fiberhmm-recall-tfson a BAM called with--no-legacy-tagsreads theMAfootprints instead of deleting every annotation.fiberhmm-extractkeeps intervals whose first or last base is soft-clipped or inserted (on minimap2 ONT/DAF alignments it dropped 11–16% of MSPs and about a quarter of TF calls); re-extract tracks made with 2.x.fiberhmm-apply --scoreswrites MSPaqas mean P(accessible) ×255, as documented (2.x wrote P(footprint), so confident MSPs scored near 0).- EcoGII and custom-enzyme BAMs are never scored with Hia5 emissions in consensus.
Removed and renamed¶
| 2.x | 3.0 |
|---|---|
fiberhmm-run |
fiberhmm-call, piped into ft fire if needed |
python apply_model.py, extract_tags.py, train_model.py, generate_probs.py, export_posteriors.py, fiberhmm_utils.py |
the fiberhmm-* commands |
fiberhmm-crossstrand, fiberhmm-duplex (development builds only) |
fiberhmm-pair |
fiberhmm-merge (development builds only) |
still installed but deprecated: fiberhmm-pair --from-paired |
fiberhmm-call --ddda-mcg (development builds only) |
fiberhmm-tag-m5c, then fiberhmm-call on the tagged BAM (DAF-seq) |
fiberhmm-apply --chroms, --skip-scaffolds, --region-size, --scores-db, -l |
rejected (they never had an effect); use fiberhmm-call --region-parallel |
--phase-nrl, --nuc-recall-policy (call, recall-tfs/-nucs) |
retired; nucleosome recall is the accessible-cut split, without a periodicity prior |
recaller.abutting (development builds only) |
removed; use the "+ edge" tier or recaller.linker=either |
--engine staged_native_families (consensus) |
deprecated but available |
fiberhmm[consensus], fiberhmm[numba] |
still accepted; their packages are core dependencies now |
fiberhmm-call gained --scores (the fiberhmm-apply spelling; the old
--with-scores still works) and -c 0 for all CPUs.
New in 3.0¶
- The lattice recaller is the default consensus engine, with prevalence tiers, per-channel support and resolution, and per-molecule labels; transfer works with it.
fiberhmm-consensusandfiberhmm-transferwork on a plainpip install fiberhmm.fiberhmm-recall-tfs/-recall-nucsaccept--prob-threshold;fiberhmm-call,-apply,-posteriors,-recall-tfs/-recall-nucs,-pair/-mergeand-pipelineaccept--use-m5c/--no-use-m5cand--cpg-mask-policy.fiberhmm-apply --harmonize-legacy-tags(opt-in) writesns/nlas the nucleosomes of theMAview, so they tile withas/al. Each such read carrieshl:i:1, andfiberhmm-recall-tfs/-recall-nucsrefuse it, because recall needs every HMM footprint inns/nl. Re-calling or re-applying without the option removes the tag.fiberhmm-calloutput carries@CO fiberhmm:coord=molecular, so its footprint frame survives a pipeline that strips@PG(Coordinate frames).- This documentation site, with a generated command-line reference.
FiberBrowser¶
FiberBrowser 3.0 requires FiberHMM 3.x. Reload BAMs called with 3.0 to get the updated Nanopore Hia5 and DddB calls and the lattice-recaller class layers.