Binding ΔΔG closes the loop that variant generation leaves open: you have a parent antibody and a list of variants — from Sequence Mutator, from a design run, or from your own notes — and you want to know which ones are worth expressing. The job scores every variant against the fixed parent on one antibody-antigen complex and returns a ranked table of predicted changes in binding free energy, each with an uncertainty estimate.
How the score works
Each variant is scored with ProteinMPNN inverse-folding log-probabilities on the same backbone as the parent: per-position conditional probabilities of the variant residues given the complex structure, compared with the parent's residues at the mutated positions. No mutant structure is built and nothing is trained per target — the per-structure baseline largely cancels, and what remains is the parent-relative binding signal. Log-odds are converted to kcal/mol at room temperature, and several stochastic passes (fresh decoder noise each pass, shared between the parent and every variant within a pass) give a mean and a standard deviation per variant. The table ranks by the mean, lowest first: a negative ΔΔG predicts tighter binding than the parent.
Because the score is parent-relative, it rank-orders variants within one campaign. It is not an absolute affinity predictor, and it does not replace experimental validation.
Inputs
- Complex: one antibody-antigen structure as a PDB file — a crystal structure or a predicted complex both work. Upload it or bind it from an upstream structure step.
- Parent sequence: the chain you are mutating, as one-letter codes or one FASTA record. It must match a chain of the complex exactly, tags included; the scoring runs on that chain with everything else held fixed.
- Variants, either way you prefer:
- Mutation strings in the Sequence Mutator syntax — one per line,
T315I, joined with+for combined variants. Positions are the complex chain's own residue numbers (insertion codes included), and each stated wild-type residue is checked against that chain when the job runs, so a numbering offset fails with the residue actually found. - Variant sequences — one FASTA record per variant, each the parent length; positions that differ from the parent become the scored substitutions.
- Mutation strings in the Sequence Mutator syntax — one per line,
first_residue_number lines literature numbering up with the construct, as in Sequence Mutator. Up to 50 variants and 20 substitutions per variant; sequences are capped at 5 000 residues.
Outputs
predictions.csv: one row per variant — variant name, mean ΔΔG, standard deviation across passes, and rank.sequences.fasta: the scored parent (WT) and every variant, so the survivors can be folded or modeled downstream.summary.json: the matched chain, the scoring settings, and per-variant rows.
In a workflow, the predictions port carries the binding_ddg_kcal_mol metric, so a filter step can keep the stabilizing variants, and the sequences port binds straight into ESMFold2 or Boltz-2 for the survivors.
Honest limits
- The uncertainty is signal, not noise: a high standard deviation across passes often separates binders from non-binders better than the point prediction alone.
- Structure quality matters much less here than in de novo scoring, because the parent-relative baseline cancels — but a wildly wrong complex still gives meaningless ranks.
- Scores support prioritization. Express the top variants.