Skip to content

Surface mhcflurry pres_score / pres_perc / proc_score from LENS (complement to pepsickle) #265

Description

@iskandr

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions