Metrics reference#
This page lists very metric, oracle, pass criterion, and pre-oracle filter that ships with RFD4-Proteina, what each one measures, and the tag you pass throught the CLI to have it run.
See the metrics guide for where these pieces fit into the RFD4-proteina workflow and guidance on how to use them, and the refolding guide specifically for the refolding family: oracle setup, task tags, and running a design through more than one refold.
Contents
Every metric, criteria, and filter that ships#
Each row’s Tag gate says which metrics_tags turn that metric on. You specify metric tags via the CLI when you run RFD4-proteina.
There are three categories of tags:
An
anyentry runs the metric/filter/criteria if you pass at least one of the listed tags.An
allentry runs the metric/filter/criteria only if you pass every one of the tags listed after “all”.A
notentry skips the metric/filter/criteria if you pass that tag, even when itsanyoralltags match. A row with no gate listed always runs.
Note
Design metrics, structure prediction metrics, pass criteria, and pre-oracle filters are gated purely
on the tags you pass via metrics_tags. Refolding metrics are
the one exception: their gates are checked against your metrics_tags plus is_refold:,
exists_refold:, and oracle: tags that the framework injects automatically per scoring pass, you
never type those on the CLI yourself.
For example, the bond_length_metrics will run for any RFD4-proteina run whose metrics_tags includes design but will not run for a run that specifies small_molecule_only or structure_prediction. And metrics like insertion_rmsd_filter will only run if metrics_tags has at least both unindexed and insertion_rmsd_filter.
See the custom metrics guide for how to write these gates yourself.
Design tags and refolding tags live in separate namespaces, so pass both when you want both
families: metrics_tags='[design, unconditional_refolding]'.
Design metrics, inline and before refolding#
These run directly on the generated structure, before any oracle refolds it.
Config key |
Tag gate |
What it measures |
Output columns (prefixed |
|---|---|---|---|
|
any: |
Fraction of bonds with an unreasonable length, on element dependent thresholds |
|
|
any: |
Fraction of atoms in a steric clash at a configurable threshold, 1.5 Å by default, split by clash type |
|
|
any: |
Fraction of hotspot atoms with a binder atom within 4.5 Å |
|
|
any: |
How well the generated burial matches your RASA bin conditioning |
|
|
any: |
Mean distance between each conditioned chain centroid and the requested position |
|
|
any: |
Adherence plus atom and pair counts for H-bond, π-stacking, π-cation, salt bridge, hydrophobic and metal coordination conditioning, interchain only |
|
|
any: |
Fraction of sequence conditioned residues whose generated identity matches what you asked for. NaN when nothing was sequence conditioned, and in the offline re-scoring path, which has no input structure to read the conditioning off |
|
|
any: |
Adherence to explicitly specified probability-zero exclusions and probability-one identities. Soft probability errors are pooled across designs during aggregation. No default pre-oracle filter is applied |
|
|
any: |
Helix, sheet and loop fraction, plus the number of contiguous SSE elements, from P-SEA |
|
|
any: |
Accuracy of generated secondary structure against your secondary structure conditioning |
|
|
any: |
Ligand geometry and validity checks from PoseBusters |
one pass or fail column per PoseBusters check |
|
any: |
Fraction of reference stereoisomers recovered, split by center geometry and E/Z double bonds |
|
|
any: |
All atom RMSD of the coordinate conditioned motif region, measuring self consistency within the design itself |
|
|
all: |
All atom RMSD restricted to unindexed insertion atoms only |
|
|
all: |
Whether the insertion head applied its unindexed to generated token mapping in full, meaning every unindexed token got inserted, onto a residue of the conditioned identity wherever the unindexed region was sequence conditioned |
|
|
any: |
Distance weighted interfacial contact surface area between binder and target, following Lawrence and Colman 1993 |
see |
|
any: |
Sequence identity against the seed structure, for partial diffusion |
|
|
any: |
CATH superfamily classification of the chain of interest, through Foldseek |
|
|
any: |
GRAVY and the Guruprasad instability index on the designed chain. Half-life is deliberately omitted |
|
|
any: |
Fraction of contacting variable-domain residues in Chothia CDRs |
|
|
any: |
Chothia CDR phi/psi naturalness against native samples. Opt in with |
|
|
any: |
Rosetta SAP and ExposedHydrophobics through a nested PyRosetta apptainer. Set |
|
design_motif_allatom_rmsd and design_unindexed_motif_allatom_rmsd read their ground truth off
standard annotations written
directly into the input and output CIFs, rather than a side file.
Extra information for antibodies#
Antibody metrics use ANARCII and basic Chothia CDRs across all protein chains,
independently of conditioning masks. annotate_antibody_numbering() caches
annotations; use overwrite=True after sequence edits. Contacts compare numbered
variable domains against chains without antibody domains.
Torsions use VH/VL references when a light domain is present, otherwise VHH. For an
isolated VH, set cdr_torsion_naturalness.reference_set=vhvl. Incomplete or unsupported
CDRs return NaN; score multiple domains of the same antibody chain type separately.
Structure prediction metrics#
These score the generated structure against a known ground truth, for validation runs that test the model as a structure predictor rather than as a generative designer.
Config key |
Tag gate |
What it measures |
Output columns |
|---|---|---|---|
|
any: |
All atom lDDT against ground truth, for structure prediction style validation runs rather than design |
|
Refolding metrics, after the oracle#
These compare the design, treated as ground truth, against the oracle refolded structure,
treated as the prediction. The is_refold: and exists_refold: gates below only matter once an
oracle carries a pre-oracle transform, which pre-oracle transforms
explains.
Config key |
Tag gate |
What it measures |
Output columns |
|---|---|---|---|
|
any: |
Backbone self-consistency RMSD (scRMSD) between design and refold |
|
|
any: |
Binder all-atom RMSD after aligning on the fixed target |
|
|
any: |
RMSD of atoms without coordinate conditioning after aligning on coordinate-conditioned protein backbone atoms; used for PPI passing |
|
|
any: |
All atom motif RMSD between design and refold, unindexed regions included |
|
|
any: |
CA only motif RMSD between design and refold, unindexed regions included |
|
|
any: |
Ligand RMSD after backbone alignment |
|
|
any: |
Largest ligand centroid displacement after backbone alignment |
|
|
all: |
Backbone RMSD of the designed chain between its apo refold and its refold in the whole design. Does the binder hold its fold once the target is gone? Needs a paired untransformed oracle, as explained in the output format reference |
|
Every refolding metric gets the design as ground_truth_atom_array and the refold being scored as
predicted_atom_array, plus every refold of that design, each individually addressable and
tagged. See the output format reference for how a refold gets
addressed, how the is_refold:/exists_refold:/oracle: tags above are derived from that address,
and the custom metrics guide for comparing two
refolds in your own metric, as refolded_apo_holo_rmsd does.
Refolding oracles#
An oracle runs the actual structure prediction that the refolding metrics above compare against. It
is heavy and AF3 based. Running metrics inline covers the
apptainer and AF3 setup you need. If the tag gates below are included in the metrics_tags CLI option then a refolding oracle runs. See Refolding for more information.
Config key |
Tag gate |
Notes |
Key outputs (prefix |
|---|---|---|---|
|
any: |
Untemplated AF3 refold |
|
|
any: |
Templates protein atoms with ordinary or internal coordinate conditioning |
same key set, prefixed |
|
any: |
DNA templated and fixed, for DNA binder design |
same key set, prefixed |
Pass criteria#
A pass criterion thresholds one or more already computed metric values into a binary flag at
{config_key}.pass, evaluated after the design, oracle and refolding metrics. All of them are built
from the generic PassCriterionMetric. See Adding your own pass
criterion.
Important
Separate entries are ANDed together: a design only passes the criterion if every entry’s threshold is satisfied.
minandmaxare inclusive.To threshold the best, worst or mean of several keys instead, say when either of two interfaces being good enough will do, use a
min_of,max_oformean_oflist. See Thresholding a reduction over several keys.
Config key |
Tag gate |
Thresholds |
|---|---|---|
|
any: |
|
|
any: |
|
|
any: |
|
|
any: |
|
|
any: |
|
|
any: |
Same thresholds as |
|
any: |
|
|
any: |
|
|
any: |
|
|
any: |
|
|
any: |
|
Pre-oracle filters#
These are cheap checks that decide whether a design even reaches the expensive oracle. They are
tag gated like every other metric in the codebase, and a subset of the built in filters run by
default. See
all_pre_oracle_filters.yaml.
A filter that reads an absent metric key counts as a failure, which happens when the metric’s own tag gate kept it from running. So keep a filter’s tag gate at least as strict as its metric’s.
Rejected designs skip the oracle but remain in per-example summaries as zero-pass attempts,
including ordinary and clustered pass-rate denominators. pre_oracle_pass records the filter
decision. Disable filters with ~metrics/pre_oracle_filters only when you want to refold all designs.
Config key |
Tag gate |
Threshold |
|---|---|---|
|
All |
|
|
any: |
|
|
all: |
|
|
all: |
Zero inter residue polymer and ligand clashes, read off |
|
all: |
|
|
all: |
|
Pre-oracle transforms#
A pre-oracle filter decides whether a design reaches the oracle. A pre-oracle transform
changes what gets folded. You attach one to an oracle through its pre_oracle_transform key,
and it can fan a single design out into several named outputs. Each output gets refolded separately
and saved into the design’s own output directory under a filename carrying its save_id, as
{example_id}_{save_id}_{oracle_name}_refolded.cif, with .zst appended when compression is enabled (see
output compression). Its metrics carry that save_id between the
metric name and the output key. See the output format reference
for how a fan-out’s outputs get addressed and tagged, and which gates the
default refolding metrics use to skip them.
Class |
What it folds |
Outputs |
|---|---|---|
|
The chain of interest alone, everything else dropped |
|
|
The chain of interest, with its binding partner swapped for each off-target loaded from disk |
one per entry in |
Both live in
pre_oracle_transform.py, and
af3.yaml has wired examples. See the
pre-oracle transforms guide
for using OffTargetSubstitutionTransform safely and writing your own transform class.
Ready-made but opt-in#
These classes exist and are tested, but no default config includes them. Add a YAML entry to turn one on, with no Python required. The worked example shows how.
Class |
Lives in |
What it’s for |
|---|---|---|
|
|
Configurable upper bound distance constraints on atom pairs, for catalytic geometry and motif contact checks |
|
|
General interface ddG metric between two atom selection regions. Presets for ligand ddG, H-bonds and electrostatics, plus PPI ddG and Coulomb, live in |
|
|
QM ligand and protein interaction energy through IPA. See |
|
|
Salt bridge charge complementarity score across a binder and target interface |
|
|
Per residue bond lengths against CCD ideal geometry |
|
|
Nucleic acid secondary structure conditioning adherence, meaning base pairing |
|
|
Trivial differentiable guidance metric that contracts CA toward the origin, mainly for exercising the search and guidance path |
