Status
LENS files carry mhcflurry's full prediction stack. Vaxrank reads only two of the five fields:
| LENS column |
What it is |
Vaxrank status |
| `mhcflurry_2.1.1.aff` |
Mutant peptide IC50 (nM) |
✓ → `ic50` |
| `mhcflurry_2.1.1.aff_perc` |
IC50 percentile rank |
✓ → `percentile_rank` |
| `mhcflurry_2.1.1.proc_score` |
Antigen-processing prior (per-peptide; flank-aware) |
ignored |
| `mhcflurry_2.1.1.pres_score` |
Presentation score (proc × binding combined) |
ignored |
| `mhcflurry_2.1.1.pres_perc` |
Presentation percentile rank |
ignored |
Correction: mhcflurry's processing score is NOT the same as pepsickle's
These signals are complementary, not substitutes:
| Predictor |
Granularity |
What it tells you |
mhcflurry proc_score |
one number per 9-mer |
"Does this k-mer survive processing, conditioned on its N-terminal + C-terminal flanks?" Trained on mass-spec eluted ligands. |
| pepsickle |
per-position probabilities across the whole source |
"Would the proteasome cut C-terminally to residue i?" for every position. Lets us compute fine-grained C-term cleavage prob and max internal cut prob inside each peptide. |
You can't get pepsickle's two metrics out of mhcflurry's single number, and you can't get mhcflurry's flank-aware prior out of pepsickle's per-position scan. Vaxrank should surface both — the LENS-emitted mhcflurry processing score (per-peptide prior) AND the pepsickle credibility tag (per-position-derived c_term + max_internal).
What this issue is asking for (corrected scope)
`EpitopePrediction` gains three optional fields, populated from LENS when present:
- `presentation_score: Optional[float]` — mhcflurry pres_score
- `presentation_percentile_rank: Optional[float]` — pres_perc
- `mhcflurry_processing_score: Optional[float]` — proc_score (per-peptide prior, distinct semantically + numerically from pepsickle's composite)
Reports surface presentation_score / pres_perc alongside ic50 when available.
The pepsickle credibility tagging in PR #262 stays — it provides finer per-position signal that mhcflurry's per-peptide score doesn't capture. The new fields are additive: a fully-annotated EpitopePrediction would carry mhcflurry presentation + mhcflurry processing + pepsickle c_term/max_internal + pepsickle composite, all visible to clinical reviewers.
Acceptance
- LENS path populates the three new fields when columns are present.
- Reports surface presentation_score / pres_perc.
- Pepsickle credibility tagging is retained (different signal, complementary).
- Tests pin the LENS fixture's pres_perc value flowing through to the report and pin that pepsickle's pepsickle-derived fields and mhcflurry's processing fields are independent (one can be set without the other).
Related
Status
LENS files carry mhcflurry's full prediction stack. Vaxrank reads only two of the five fields:
Correction: mhcflurry's processing score is NOT the same as pepsickle's
These signals are complementary, not substitutes:
proc_scoreYou can't get pepsickle's two metrics out of mhcflurry's single number, and you can't get mhcflurry's flank-aware prior out of pepsickle's per-position scan. Vaxrank should surface both — the LENS-emitted mhcflurry processing score (per-peptide prior) AND the pepsickle credibility tag (per-position-derived c_term + max_internal).
What this issue is asking for (corrected scope)
`EpitopePrediction` gains three optional fields, populated from LENS when present:
Reports surface presentation_score / pres_perc alongside ic50 when available.
The pepsickle credibility tagging in PR #262 stays — it provides finer per-position signal that mhcflurry's per-peptide score doesn't capture. The new fields are additive: a fully-annotated EpitopePrediction would carry mhcflurry presentation + mhcflurry processing + pepsickle c_term/max_internal + pepsickle composite, all visible to clinical reviewers.
Acceptance
Related