arda 2.30.1 — the amino-acid V/J boundary stops where germline evidence stops
cdr3fix placed the V/J boundary about two residues too far into the junction on amino-acid
input. _align picks the best-scoring cell and, on a tie, preferred consuming more query - but
a tie means those residues contributed nothing, so crediting them to the segment is attribution
without evidence. The scoring is nucleotide calibration (_MATCH, _MISMATCH = 1, -1), where one
substitution is a plausible read error; on amino acids one coincidental match pays for a mismatch
exactly and the alignment walks into the N region.
The fix separates two questions that shared one answer. _errors and _repair keep the full
aligned extent, so a substitution one residue short of the end is still reported and still
repaired. v_end and j_start come from _supported, the first position where the running
score reaches its maximum; past that point the alignment is only breaking even. A repair earns the
full extent, because a repaired residue is one the germline explains.
Measured against observed nucleotide markup of real repertoires (boundaries established with the
nucleotides present; arda seeing only amino acids and the V/J calls):
v.end exact |
within 1 | j.start exact |
within 1 | out by >= 2 | |
|---|---|---|---|---|---|
| 2.29.0, 25,000 human TRB | 72.6 % | 98.7 % | 95.9 % | 97.7 % | 566 on j.start |
| 2.30.1 | 73.3 % | 99.3 % | 97.7 % | 99.5 % | 10 on j.start |
On the 8,334 VDJdb human TRB records that also appear in that data, j.start exact goes
8,041 -> 8,164, overtaking the k-mer scanner VDJdb currently ships (7,987) while declining
nothing that scanner declines. Over-extension by two residues or more: 138 -> 1.
1,213 tests pass and no test was modified, including the deep-substitution case the two-extent
split exists to preserve.
Closes #132. What the fix does not do is recorded in #134 and ROADMAP.md item 12: a
substitution-matrix score for the 170 records still off by one residue, the TRBD2/TRBJ1 locus
constraint the D caller ignores, and the 658 sides where a sibling allele of the same gene explains
the junction with no edit at all.
⚠ 2.30.0 was tagged but never published: its tree fails its own version-pin tests. 2.30.1 is that
release with the version carried into all six places that hold it.