Understand matching evidence#
A query junction can match several reference observations and several peptide–MHC labels. The software keeps the sequence search, reference observations, candidate ranking and background calibration as distinct layers.
Identity and observation counts#
Search uses a unique junction index for each locus and expands its matches back to reference observations. Identical junctions with different V/J calls remain separate clonotypes. Independent observations retain their record, study and pairing metadata; duplicate metadata does not create an additional sequence key.
A candidate is identified by peptide, MHC allele fields and MHC class. The same
peptide with two restrictions produces two candidates. annotate preserves every
input row and input order, including invalid and unmatched rows. candidates
returns a long table of candidate evidence indexed by query identity.
Field |
Quantity |
|---|---|
|
Matched reference observations for the candidate. |
|
Distinct matched reference junction/V/J keys for the candidate. |
|
Distinct nonempty reference identifiers supporting the candidate. |
|
Distinct matched clonotypes supporting other candidate labels, including shared clonotypes when they also support another label. |
|
Distinct junctions in the candidate’s reference set under the stated predicate. |
|
Distinct control junction matches in the search scope. |
|
Matched reference observations across the query’s single-chain candidates; paired output identifies its paired-reference support separately. |
Query |
Supplied abundance in the producer’s unit; retain whether it means reads, cells, molecules or another count. It is not a reference evidence count. |
Candidate ranking#
NED-v1 ranks candidates by the sum of control-adjusted neighbour weights. Each reference clonotype contributes an exponentially decaying weight based on its search score, divided by one plus the number of control neighbours at or within that hit’s edit distance. The existing default score temperature is 400; the existing soft-V weighting gives same-family matches weight 1 and known cross-family matches 0.25 times their germline CDR1/CDR2 similarity. Missing or unknown V calls provide neutral evidence in the production interface.
Without a background, the control count is zero and ranking is explicitly
uncalibrated. ned_score is a ranking statistic. It is distinct from edit
distance, the search penalty score, the database evidence score vdjdb_score,
and background expectation E.
rank starts at 1 within a query. competing_score is the strongest alternative
candidate’s score, and score_margin is the candidate score minus that alternative.
The highest-scoring candidate is called only when its ranking is unique; an exact
tie produces ambiguous. All alternatives remain available in the candidate table.
Fixed-ball calibration#
For one query and one candidate reference set, let N be the number of distinct
reference junctions, M the number of distinct background junctions and n_control
the background matches under the same search predicate. The expected background
match count is:
E = N * n_control / M
The observed target count is the number of distinct reference junction matches in
that candidate set. The Poisson-tail p_enrichment asks how often the background
expectation would produce at least that observed count. p_any is the probability
of at least one match under that expectation.
A finite background with zero matches does not establish zero background probability.
The existing rule-of-three path uses E = 3 * N / M and reports
rule_of_three=True. NED’s +1 denominator is a separate ranking convention;
it does not replace this finite-control calculation.
Target counts, reference size and background size must have the same counting unit. The target and background search predicates must also agree. The current sequence-only background cannot represent V/J restrictions, so hard-V/J calibrated requests fail explicitly. Requested calibration failures propagate rather than silently switching to an uncalibrated call.
Neither NED, E nor p_enrichment is a posterior probability that the winning
peptide is the receptor’s specificity. Competing labels, cross-reactivity and incomplete
reference coverage remain visible in the candidate evidence.
Paired evidence#
A paired candidate requires alpha and beta matches in the same reference complex and under the same peptide–MHC label. Alpha/beta agreement without a shared complex is chain evidence fusion, a different claim. Repeated observations of a paired receptor remain available as support metadata; ranking uses distinct paired receptor keys rather than treating repeated metadata as new sequence evidence.
Paired ranking uses the sum of
exp(-(score_alpha + score_beta) / score_scale) over
distinct paired junction keys. n_hits counts those keys, n_records counts
distinct supporting reference complexes, and n_reference counts distinct
junction pairs for the candidate peptide–MHC set. Repeated observations add complex
support without increasing the paired similarity score. The estimator is named
paired-reference-v1 separately from single-chain NED-v1. The API default
score_scale is 400 and must be finite and positive; unit-cost CLI scoring uses
scale 1. Detailed paired hits retain the source observations separately, with
alpha_/beta_ metadata and optional alignment fields. Request them together
with candidates using return_hits=True without repeating reference searches.
Paired calibration requires both chain backgrounds. It reports
n_control_alpha, n_control_beta, E, p_enrichment and
rule_of_three with calibration='paired_independent_fixed_ball'.
The product of the chain background probabilities uses a stated conditional
independence assumption. It describes the chance of the joint search event under
those backgrounds; it is not a posterior probability of specificity and does not
establish independence in a biological repertoire. Dependence and sample-level
co-occurrence models are outside this calibration. Paired CLI matching rejects
--match-v and --match-j until predicates can be applied separately to each
chain; these flags are not silently ignored.
The separate historical evalue.paired.paired_scan evaluates a nearest paired
radius, defined as the maximum alpha/beta cost. Default two-tuple hits count
observation associations. Its optional include_identity=True emits three-tuples
carrying the two junctions; pvalue counts distinct pairs in that mode and its
reference size N must count distinct pairs as well. This adaptive-radius helper
is a separate contract from the Annotator’s fixed-ball calibration.
Statuses and sample summaries#
matched means the ranking has a unique top candidate. ambiguous means an
exact tie. no_hit means a retained query has no reference neighbour in scope;
no_joint_hit means no same-complex paired candidate. no_reference means the
required locus is absent from the loaded reference. invalid_query means the
query cannot supply a valid matching sequence/locus.
CLI summary tables report distinct junction/V/J/locus clonotypes (unique),
matched input rows (n_query_rows), and their summed abundances (reads).
Paired summaries count matched query pairs (n_query_pairs).
They do not implement repertoire-level statistical enrichment, donor comparisons
or a Pgen-matched naive repertoire analysis. Those require a separately defined
sample-level estimand and background. The optional precursor APIs remain separate
from query annotation and background-match calibration.
For paired finite controls, each zero-neighbour chain uses the existing rule-of-three
upper bound min(1, 3/M). Capping at one matters for tiny controls and prevents
pseudo-counts larger than the control size. Both paired implementations share this bound.
Global fixed-K statistics#
For a fixed external query, score rule and predeclared K, let T be the Kth-smallest
distinct-reference score, N the original reference exposure, M the original control
size, and C the number of controls scoring at or below T, including every tie.
Single-chain finite-sample-rank-v1 reports
HypergeomSF(K-1, N+M, N, K+C). Under pooled target/control label exchangeability,
the N target labels occupy a uniform subset of the pooled score ranks. With no
ties, at most C controls precede the Kth target exactly when at least K target
labels occupy the first K+C ranks. The tail is therefore an exact finite-sample
stopping-rank test; counting all control ties makes it conservative.
Identical junctions are assigned infinite scores in both samples when exact
exclusion is requested. N and M retain those rows; fewer than K finite targets
yield P=1. Query-conditioned IID draws from the same background suffice for the
null, but biological deduplication and query selection do not establish it.
The empirical expected count E_raw=N*C/M is descriptive. This test has no
Clopper–Pearson confidence bound or failure budget; E, p_upper and
finite_control_delta are null.
For paired score max(score_A, score_B), the existing confidence-bound construction
uses marginal control bounds for the Cartesian intersection and reports
min(1, delta + BinomialSF(K-1, N, U)), with delta=10⁻⁶ and U the marginal-bound
product (or punctured joint bound). Exact/exact exclusion reuses the
four-category bound described above; without exclusion two marginal CP bounds
share δ equally. An additive paired score threshold cannot use this rectangle.
Cartesian control pairs share chains and cannot be counted as independent
observations in the single-chain rank test. Paired assumptions and calibration
remain separate and unchanged.
Global enrichment is separate from per-pMHC ranking; it is not the probability
that the winning epitope assignment is correct.
External clustering evaluation#
ClusterEval evaluates the homogeneity–parsimony trade-off using information-theoretic, set-matching and pair-counting scores. These assess agreement between cluster assignments and known classes, separately from receptor annotation accuracy and null-call rates. Benchmark comparisons must retain the same input nodes and treatment of unclustered nodes; the recorded evaluation gives each unclustered node its own singleton cluster. Calculate these downstream metrics from fresh CLI outputs.
Reference: Andreas Tiffeau-Mayer (2026), External Clustering Validation by the Homogeneity-Parsimony Trade-off, arXiv:2607.20799, doi:10.48550/arXiv.2607.20799.
Historical scoring evidence#
The following recorded scoring studies describe their stated historical reference and evaluation design. They do not identify every production score as the same estimator or make a query-level statistic a specificity posterior.
What scoring actually buys. An empirical study on VDJdb (the scoring appendix; 2026-06-11-ZENODO
release, composition-controlled) finds that Hamming distance 1 is the signal:noise optimum (macro
purity 0.49 → 0.07 over edit distance 1–5; the original VDJdb observation), that central substitutions
carry the specificity signal (P(same) ≈ 0.31 in the core vs ≈ 0.75 near the anchors), and that no
amino-acid matrix clearly beats BLOSUM62 — a genetic-code null (VDJAMr) even ties it, so CDR3
substitution structure is generative, not chemical. Reweighting BLOSUM62 by the central-position
significance (a native seqtree PositionalMatrix, end-anchored) is the one change that does beat
it, in 7/8 held-out epitopes. The substitution alphabet is second-order, position is the first-order
matrix lever, and the overall first-order statistic is the control-calibrated E-value. Finally, the
V gene is a strong near-binary prior (same-V neighbours share an epitope up to ~7× more than
cross-V); loose CDR1/CDR2 similarity does not recover it, and near-exact germline-loop identity recovers
only about half of it (the rest is gene-identity-specific).