Skip to content

Commit f5c5f0f

Browse files
rob-pclaude
andcommitted
docs(2.1.0): finalize notes — orphan/single-end FLD section, drop draft marker
Add the orphan / single-end bounded-CMF fragment-length section (--noSingleFragProb) and remove the "draft — in progress" title marker ahead of the 2.1.0 release. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01B7JMur5DmDpECddErpi2JS
1 parent 1d8b564 commit f5c5f0f

1 file changed

Lines changed: 22 additions & 1 deletion

File tree

docs/release-notes-2.1.0.md

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# salmon 2.1.0 (draft — in progress)
1+
# salmon 2.1.0
22

33
A correctness-focused release that closes the remaining selective-alignment
44
mapping/quantification gaps against C++ salmon (1.12.1), adds N-aware decoy
@@ -326,6 +326,27 @@ but stays well-defined under total underflow. On SRR1039508 (full) the
326326
mapped-mass loss (sum of `quant.sf` `NumReads` vs `num_mapped`) drops from **190
327327
fragments to 0.1** — matching C++.
328328

329+
## Orphan / single-end fragment-length probability (`--noSingleFragProb`)
330+
331+
Orphan and single-end mappings now receive C++ salmon's **bounded-CMF
332+
"ambiguous" fragment-length weight** (`getAmbigFragLengthProb`) rather than a flat
333+
penalty. The mapped mate bounds the maximum fragment length — downstream space
334+
(`txpLen − pos`) for a forward read, `pos + readLen` for a reverse read — and the
335+
weight is the fragment-length-distribution mass up to that bound, conditioned on
336+
the transcript length (`cmf(maxFragLen) − cmf(txpLen)`). This discriminates orphan
337+
placements by geometry (a placement with ample room for the unseen mate is more
338+
probable than one crammed against a transcript end) instead of weighting them all
339+
equally. Previously Rust used a flat `LOG_EPSILON` (paired-library orphan) or
340+
weight 1 (single-end) — i.e. it behaved as if `--noSingleFragProb` were always on.
341+
342+
The per-fragment fragment-length term is now computed **once** and shared by both
343+
the abundance-aware online posterior and the persistent equivalence-class weight
344+
(C++ computes it once as `aln.logProb`); the two had previously drifted apart.
345+
Proper pairs are likewise length-conditioned (`pmf(flen) − cmf(txpLen)`), which is
346+
≈0 for transcripts longer than the fragment-length support and only adjusts short
347+
transcripts. The new `--noSingleFragProb` flag (default off) restores the old flat
348+
behavior, matching salmon's option of the same name.
349+
329350
## `num_dovetail_fragments` is now reported
330351

331352
Rust always dropped dovetailed concordant pairs under the default no-dovetail

0 commit comments

Comments
 (0)