Skip to content

arda 2.30.1 — the amino-acid V/J boundary stops where germline evidence stops

Choose a tag to compare

@mikessh mikessh released this 27 Sep 16:43
· 25 commits to master since this release

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.