Skip to content

Vaccine construct processing report

Use mhctools vaccine-report to inspect where proposed cuts fall relative to an intended epitope in a synthetic long peptide (SLP) or an RNA-encoded protein. It produces a PDF sequence map and files you can audit. A cut beside a target may help release it; a cut inside the target may destroy it. The report keeps those observations separate by model and processing route.

This report does not estimate the fraction of an injected dose that reaches lymph-node APCs, the half-life of an intact core, or the fraction of APCs that present it. For a clearly labeled, uncalibrated dose sensitivity analysis, use candidate window exposure. For the report's per-target evidence summary, see vaccine target summary.

Run the example

PDF generation is included in a standard install. This example first runs a built-in cleavage rule, then gives its actual JSON output to the PDF report. Copy and run it from one directory:

pip install mhctools
mhctools cleavage \
  --sequence AAAKIILNFTTLAAA \
  --model mme-hydrophobic \
  --out cleavage.json
cat > vaccine-report.json <<'JSON'
{
  "schema_version": 1,
  "constructs": [{
    "id": "slp-demo",
    "sequence": "AAAKIILNFTTLAAA",
    "delivery": "synthetic_long_peptide",
    "intended_epitopes": [
      {"label": "KIILNFTTL", "start": 4, "end": 12}
    ],
    "cleavage_tracks": [{
      "context": "extracellular_interstitial",
      "cleavage_json": "cleavage.json"
    }]
  }]
}
JSON
mhctools vaccine-report \
  --input vaccine-report.json \
  --output-dir reports

The command prints a timestamped directory inside reports/. Open vaccine-processing-report.pdf there. The manifest is also available as a downloadable JSON file; run the cleavage command above beside it first. The report reads the CLI's schema-v3 output and copies its model identity, evidence type, motif matches, and provenance into normalized-input.json. You need only declare context: the biological route in which you want to inspect that evidence. A model's enzyme-location annotation alone does not establish exposure after vaccination. name is optional and defaults to the model name. If the cleavage JSON contains several results for the same sequence, add "model": "mme-hydrophobic" to select one.

For this input, the tool reports motif_rule evidence with matched bonds 4, 5, 6, 8, and 11. The rule flags a partial extracellular MME preference for a hydrophobic residue after a bond; it is not a measured cut, cleavage rate, or probability. No MHC predictions are supplied, so the report does not draw MHC-window bars.

Inspect cleavage.json

The mhctools cleavage command above writes this complete JSON. models holds the model identity, specificity rule, evidence type, source references, and limits; results holds the assessed sequence and each internal bond. For this motif rule, match: 1 means the selected P1′ residue preference matched and match: 0 means it did not. Both are pattern indicators, not probabilities of cleavage or resistance. The same rule is recorded once in the model, rather than as a repeated reason at every bond. Quantitative models use a separate native score field. source_bond equals bond because this input has source_start: 0.

There is no core field in this generic cleavage output. The vaccine-report manifest above identifies the intended core as residues 4–12; the report uses those coordinates to classify candidate cuts inside versus beside it.

{
  "schema_version": 4,
  "models": {
    "mme-hydrophobic": {
      "name": "mme-hydrophobic",
      "version": "1",
      "enzyme": "MME",
      "uniprot": "P08473",
      "species": "Homo sapiens",
      "compartments": [
        "extracellular"
      ],
      "evidence": "motif_rule",
      "references": [
        "https://pubmed.ncbi.nlm.nih.gov/6349683/",
        "https://pubmed.ncbi.nlm.nih.gov/2417254/",
        "https://www.uniprot.org/uniprotkb/P08473/entry"
      ],
      "assay": "Purified human kidney neprilysin cleavage of enkephalin, kinins and angiotensins",
      "limitations": "Incomplete preference flag; whole sequence affects site selection. Other residues can be cleaved. The 2-30-residue input scope is conservative, not an absolute enzyme size cutoff. Membrane exposure and circulating activity are unmodeled. Partial specificity rule; no kinetic or matrix calibration.",
      "motif_strictness": "preferred",
      "strictness_basis": "The source reports a preference for hydrophobic residues after the scissile bond, and other residues are also cleaved, so a non-match is weak evidence.",
      "rule": "Selected hydrophobic P1-prime preference: Phe/Ile/Leu/Tyr"
    }
  },
  "results": [
    {
      "peptide": {
        "sequence": "AAAKIILNFTTLAAA",
        "n_term": "free",
        "c_term": "free"
      },
      "model": "mme-hydrophobic",
      "sites": [
        {
          "bond": 1,
          "match": 0,
          "source_bond": 1
        },
        {
          "bond": 2,
          "match": 0,
          "source_bond": 2
        },
        {
          "bond": 3,
          "match": 0,
          "source_bond": 3
        },
        {
          "bond": 4,
          "match": 1,
          "source_bond": 4
        },
        {
          "bond": 5,
          "match": 1,
          "source_bond": 5
        },
        {
          "bond": 6,
          "match": 1,
          "source_bond": 6
        },
        {
          "bond": 7,
          "match": 0,
          "source_bond": 7
        },
        {
          "bond": 8,
          "match": 1,
          "source_bond": 8
        },
        {
          "bond": 9,
          "match": 0,
          "source_bond": 9
        },
        {
          "bond": 10,
          "match": 0,
          "source_bond": 10
        },
        {
          "bond": 11,
          "match": 1,
          "source_bond": 11
        },
        {
          "bond": 12,
          "match": 0,
          "source_bond": 12
        },
        {
          "bond": 13,
          "match": 0,
          "source_bond": 13
        },
        {
          "bond": 14,
          "match": 0,
          "source_bond": 14
        }
      ]
    }
  ]
}

Choose an extracellular context

The cleavage tool labels this MME model extracellular in its compartments metadata. That is an enzyme-location annotation. The PDF manifest uses a more specific vaccine exposure route:

Report context What it represents for an SLP
extracellular_interstitial Free peptide around the injection site and other interstitial spaces before uptake; the simple IM SLP example uses this route.
tumor_stroma Extracellular exposure in tumor tissue. For an SLP, declare "exposures": ["tumor_stroma"] only if that exposure is part of the scenario.
circulation Free peptide in blood/plasma. For an SLP, declare "exposures": ["circulation"] only if systemic exposure is part of the scenario; IM injection alone does not establish it.

The other report contexts—endolysosomal, cytosolic_proteasome, and er_trimming—are intracellular. There is currently no separate extracellular lymphatic-transit or draining-node context. Neither extracellular_interstitial nor circulation measures peptide arrival at lymph-node APCs; see the delivery evidence review. A model compatible with an extracellular location still does not establish that its enzyme is present or active along a particular vaccine route.

Read the result

In this SLP example, the target spans residues 4–12. All five MME motif matches are inside the target, so they flag possible damage during extracellular exposure. The rule did not match at boundary bonds 3 and 12; those non-matches do not prove the target is protected or cannot be released. The report cannot tell us how much intact target survives, whether it enters an APC, or whether it loads onto MHC. Coordinates refer to the complete sequence supplied for that construct.

Output file What to inspect
vaccine-processing-report.pdf Sequence map, intended target, MHC windows, and cleavage tracks grouped by route.
target-summary.json Per-target flags, assessed and unassessed bonds, and missing expression, uptake, loading, or serum evidence.
placement-assessments.json Compact boundary and internal cut flags for each target and track.
processing-routes.csv Which processing contexts are primary, conditional, or not applicable for the declared delivery. These labels are not probabilities.
selected-mhc-windows.csv Supplied MHC windows drawn in the PDF, if any. display_rank identifies each bar; a percentile rank is a predictor output, not a presentation probability.
normalized-input.json, SHA256SUMS.json Exact inputs, full model evidence and sources, and checksums for the run.

A numerical site flag means a score crossed that model's declared threshold; a categorical flag records a motif match or source-reported site. Neither establishes that a cut occurs in vivo. Native scores from different models cannot be multiplied or compared as calibrated probabilities. An unassessed bond or missing route is not evidence of survival.

Prepare a manifest

The larger SLP and RNA example shows both delivery types, intended epitopes, MHC windows, and per-bond tracks. In that example, the RNA construct has an initiator methionine, so its target is at residues 10–18 rather than the SLP's residues 9–17. Supply the full delivered peptide sequence for an SLP. For rna_encoded, supply the amino-acid sequence of the translated construct, including any relevant signal peptide, linkers, and junctions; this field does not accept nucleotide sequence. Declare routing as cytosolic, secreted, or lysosomal_targeted. The example's added initial methionine is a schematic translation product, not a validated vaccine ORF.

Target and MHC-window start/end coordinates are one-based, inclusive residue positions. A hand-written numerical track has one value per internal bond, so a sequence of length 23 needs 22 values. Bond 8 is between residues 8 and 9; null means that bond was not numerically assessed. Do not add a terminal-bond value. Imported motif results keep match: 0|1 indicators in canonical evidence; source observations retain reported status. Neither gets a native quantitative score. For a hand-written numerical track, supply its model name, route context, evidence_type, native score units, provenance, and an optional threshold. For a cleavage_json reference, the tool output supplies the model fields and per-bond evidence; only context must be declared in the manifest. The referenced JSON must come from mhctools cleavage --out for the complete construct sequence, in the same directory as the manifest or at an absolute path. Native scores retain their own scale and version rather than becoming presentation probabilities.

For an injected SLP, extracellular exposure and uptake are relevant; endolysosomal processing is a primary display context. Cytosolic cross-presentation is conditional. For a cytosolic RNA construct, endogenous proteasome/ER processing is primary; endolysosomal access is conditional. Secreted or lysosome-targeted constructs need their declared route. The report does not assume that IM injection puts free peptide in blood: declare "exposures": ["circulation"] only when appropriate. These are route assumptions for displaying evidence, not measured route weights. See the primary evidence on mRNA antigen presentation and SLP cross-presentation in human dendritic cells.

Python and Vaxrank integration

from mhctools import VaccineReportInput, generate_vaccine_report

request = VaccineReportInput.from_json("vaccine-report.json")
run_directory = generate_vaccine_report(request, "reports")

When assembling a manifest from Vaxrank, use each final translated construct, including linkers and junctions, so target and cut coordinates refer to the sequence actually delivered. placement_assessments exposes boundary and internal cuts separately. It does not produce an overall placement score or change Vaxrank ranking on its own. Vaxrank's own PDF reports use its separately installed PDF backends; this mhctools report needs no extra install group.