Skip to content

Commit 9d8e888

Browse files
fix: recompute overlap after trimming for merge mode (#675)
The overlap caching optimization introduced in v1.3 computed the overlap result once before adapter/polyX/maxLen trimming and reused it for the merge step. This caused the merge to use stale overlap data from untrimmed reads, leading to pairs that should merge post-trim being incorrectly routed to the unpaired output path instead. Always recompute the overlap on the post-trim reads before merging, restoring v1.2 behavior where the merge step analyzed trimmed reads. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 794c0c5 commit 9d8e888

File tree

1 file changed

+3
-4
lines changed

1 file changed

+3
-4
lines changed

src/peprocessor.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -513,10 +513,9 @@ bool PairEndProcessor::processPairEnd(ReadPack* leftPack, ReadPack* rightPack, T
513513
// merging mode
514514
bool mergeProcessed = false;
515515
if(mOptions->merge.enabled && r1 && r2) {
516-
if(!ovComputed) {
517-
ov = OverlapAnalysis::analyze(r1, r2, mOptions->overlapDiffLimit, mOptions->overlapRequire, mOptions->overlapDiffPercentLimit/100.0);
518-
ovComputed = true;
519-
}
516+
// Always recompute overlap on post-trim reads for merge (fixes #675)
517+
ov = OverlapAnalysis::analyze(r1, r2, mOptions->overlapDiffLimit, mOptions->overlapRequire, mOptions->overlapDiffPercentLimit/100.0);
518+
ovComputed = true;
520519
if(ov.overlapped) {
521520
merged = OverlapAnalysis::merge(r1, r2, ov);
522521
int result = mFilter->passFilter(merged);

0 commit comments

Comments
 (0)