> ## Documentation Index
> Fetch the complete documentation index at: https://proto.evodesign.org/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# DBP Design Metrics

> Score protein-DNA designs with dbp_design metrics and configurable failure behavior

<div class="page-hero">
  <img class="page-hero-banner" src="https://proto-bio.github.io/proto-assets/images/constraint/dbp-design-metrics/hero.png" alt="DBP Design Metrics" />
</div>

<Note>
  **License:** This constraint can use multiple tools, each under its own license. See the **Tools Used** tab and each tool's page for license details.
</Note>

<p class="entity-disclaimer">This constraint is open source. Any third-party models, product names, or trademarks referenced are the property of their respective owners, and Proto is not affiliated with them.</p>

<hr class="entity-rule" />

<input type="radio" name="tab-constraint-dbp-design-metrics" id="none-constraint-dbp-design-metrics" class="tab-radio-input" />

<input type="radio" name="tab-constraint-dbp-design-metrics" id="tools-constraint-dbp-design-metrics" class="tab-radio-input" defaultChecked />

<input type="radio" name="tab-constraint-dbp-design-metrics" id="source-constraint-dbp-design-metrics" class="tab-radio-input" />

<div class="tool-tab-bar"><span class="tool-tab-wrap"><label for="tools-constraint-dbp-design-metrics" class="tool-tab tab-open badge-tools"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="7" height="7" x="3" y="3" rx="1" /><rect width="7" height="7" x="14" y="3" rx="1" /><rect width="7" height="7" x="14" y="14" rx="1" /><rect width="7" height="7" x="3" y="14" rx="1" /></svg> Tools Used</label><label for="none-constraint-dbp-design-metrics" class="tool-tab tab-close badge-tools"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="7" height="7" x="3" y="3" rx="1" /><rect width="7" height="7" x="14" y="3" rx="1" /><rect width="7" height="7" x="14" y="14" rx="1" /><rect width="7" height="7" x="3" y="14" rx="1" /></svg> Tools Used</label></span> <span class="tool-tab-wrap"><label for="source-constraint-dbp-design-metrics" class="tool-tab tab-open badge-source"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</label><label for="none-constraint-dbp-design-metrics" class="tool-tab tab-close badge-source"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</label></span></div>

<div class="tab-panel tools-panel" data-tab="tools-constraint-dbp-design-metrics">
  <div class="tools-used-grid">
    <a href="/docs/tools/structure-prediction/alphafold3" class="tools-used-tile">
      <img noZoom src="https://proto-bio.github.io/proto-assets/images/tool/alphafold3/social.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/tools/structure-prediction/boltz2" class="tools-used-tile">
      <img noZoom src="https://proto-bio.github.io/proto-assets/images/tool/boltz2/social.png" alt="" loading="lazy" />
    </a>

    <a href="/docs/tools/structure-prediction/protenix" class="tools-used-tile">
      <img noZoom src="https://proto-bio.github.io/proto-assets/images/tool/protenix/social.png" alt="" loading="lazy" />
    </a>
  </div>
</div>

<a href="https://github.com/evo-design/proto-language/blob/d3b7822f74ea64747cc751a3b2ab1aa6b799ac47/proto_language/constraint/protein_structure/dbp_design_metrics_constraint.py#L1202" target="_blank" class="tab-panel source-panel" data-tab="source-constraint-dbp-design-metrics">
  <div class="source-info">
    <img noZoom src="https://github.com/evo-design.png?size=40" class="source-avatar" width="36" height="36" />

    <span class="source-path">evo-design/proto-language<span class="source-subpath">/proto\_language/constraint/protein\_structure/dbp\_design\_metrics\_constraint.py</span></span>
  </div>

  <span class="panel-goto-btn source-goto-btn"><span><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z" /></svg> View source</span></span>
</a>

<div class="entity-contributors"><span class="entity-contributors-label">Constraint contributors</span><span class="entity-contributors-people"><a class="entity-contributor" href="https://github.com/adititm" target="_blank" rel="noopener" title="adititm: 1 commit"><img noZoom class="entity-contributor-avatar" src="https://avatars.githubusercontent.com/u/61667248?v=4&s=64" alt="" loading="lazy" /><span class="entity-contributor-login">adititm</span></a><a class="entity-contributor" href="https://github.com/dguo8412" target="_blank" rel="noopener" title="dguo8412: 1 commit"><img noZoom class="entity-contributor-avatar" src="https://avatars.githubusercontent.com/u/46211285?v=4&s=64" alt="" loading="lazy" /><span class="entity-contributor-login">dguo8412</span></a></span></div>
Evaluate dbp\_design metrics and return normalized penalties in `[0, 1]`.

Resolves (reuses or predicts) one protein-operator complex PDB per candidate
tuple, scores it with the heavy `dbp_design` PyRosetta metric suite, and
converts the extracted metrics into a weighted-composite penalty where `0`
is best and `1` is worst. When evaluation fails and `fail_hard` is
disabled, returns `failure_score` and records the error in metadata.

## API Reference

<div class="api-model-section api-model-static api-config-section">
  <div class="api-model-header"><span class="api-model-badge api-config-badge">Config</span><span class="api-model-name">DBPDesignMetricsConfig</span><a href="https://github.com/evo-design/proto-language/blob/d3b7822f74ea64747cc751a3b2ab1aa6b799ac47/proto_language/constraint/protein_structure/dbp_design_metrics_constraint.py#L127" target="_blank" class="func-table-btn func-source-btn api-model-source"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</a></div>

  Config for the dbp-design-metrics constraint.

  Predicts (or reuses) a protein-DNA complex and scores it with the heavy
  `dbp_design` metric suite (PyRosetta H-bond typing, compactness, interface
  ddG / CMS / shape complementarity / packstat / buried unsats /
  RotamerBoltzmann, and notebook-aligned charge ratios). The score is the
  weight-normalized sum of per-metric penalties clamped to `[0, 1]`, where
  `0` means every threshold is satisfied and `1` means none are.

  <ParamField path="dbp_design_repo_path" type="string" default="">
    Path to local dbp\_design repository root; required (no default).
  </ParamField>

  <ParamField path="count_hbond_script" type="string" default="2b_design_mpnn/count_hbond_types.py">
    Relative path to count\_hbond\_types.py script.
  </ParamField>

  <ParamField path="compactness_script" type="string" default="2b_design_mpnn/compactness_filter.py">
    Relative path to compactness\_filter.py script.
  </ParamField>

  <ParamField path="pyrosetta_site_packages" type="string" default="">
    Optional site-packages path containing pyrosetta when not in the active env.
  </ParamField>

  <ParamField path="fail_hard" type="boolean" default="False">
    If true, raise on dbp metric tool failures instead of returning failure\_score.
  </ParamField>

  <ParamField path="failure_score" type="number" default="1.0">
    Penalty score returned when dbp metric evaluation fails in fail-soft mode.
  </ParamField>

  <ParamField path="prefilter_eq_path" type="string" default="/home/runner/work/proto-docs/proto-docs/_proto-language/examples/data/dbp_prefilter_eq.txt">
    Path to calibrated ddG/CMS sigmoid prefilter equation file; None skips the prefilter.
  </ParamField>

  <ParamField path="prefilter_cut_path" type="string" default="/home/runner/work/proto-docs/proto-docs/_proto-language/examples/data/dbp_prefilter_cut.txt">
    Path to prefilter log-prob cutoff file; used when prefilter\_cut is None.
  </ParamField>

  <ParamField path="prefilter_cut" type="number">
    Explicit prefilter log-prob cutoff; when None it is loaded from prefilter\_cut\_path.
  </ParamField>

  <ParamField path="hbond_energy_cutoff" type="number" default="-0.5">
    HBond energy cutoff passed to count\_hbond\_types.
  </ParamField>

  <ParamField path="min_base_score" type="number" default="10.0">
    Minimum weighted base score required.
  </ParamField>

  <ParamField path="min_phosphate_score" type="number" default="0.0">
    Minimum weighted phosphate score required.
  </ParamField>

  <ParamField path="min_bidentate_score" type="number" default="1.0">
    Minimum weighted bidentate score required.
  </ParamField>

  <ParamField path="min_backbone_phosphate_contacts" type="integer" default="0">
    Minimum backbone-phosphate H-bond contacts.
  </ParamField>

  <ParamField path="min_compactness_contacts" type="integer" default="0">
    Minimum per-SSE contacts from compactness filter (default makes this penalty component inactive).
  </ParamField>

  <ParamField path="max_loop_length" type="integer" default="1000000">
    Maximum allowed loop length from compactness filter (default makes this penalty component inactive).
  </ParamField>

  <ParamField path="require_motif_in_rec_helix" type="boolean" default="False">
    Require motif\_in\_rec\_helix metric to be true.
  </ParamField>

  <ParamField path="require_rifres_in_rec_helix" type="boolean" default="False">
    Require rifres\_in\_rec\_helix metric to be true.
  </ParamField>

  <ParamField path="max_buried_unsats" type="number" default="2.0">
    Maximum allowed buried unsatisfied polar atoms at the interface.
  </ParamField>

  <ParamField path="min_shape_complementarity" type="number" default="0.65">
    Minimum interface shape complementarity score (Sc).
  </ParamField>

  <ParamField path="min_packstat" type="number" default="0.55">
    Minimum packstat score for foldability/packing quality.
  </ParamField>

  <ParamField path="min_max_rboltz_rkqe" type="number" default="0.15">
    Minimum max RotamerBoltzmann-style score over interface RKQE residues.
  </ParamField>

  <ParamField path="min_avg_top_two_rboltz" type="number" default="0.1">
    Minimum avg\_top\_two\_rboltz score.
  </ParamField>

  <ParamField path="max_ddg" type="number" default="-15.0">
    Maximum allowed interface ddG (more negative is better).
  </ParamField>

  <ParamField path="min_contact_molecular_surface" type="number" default="225.0">
    Minimum required contact molecular surface (CMS).
  </ParamField>

  <ParamField path="min_net_charge_over_sasa" type="number" default="-10.0">
    Lower bound of the allowed net\_charge\_over\_sasa window.
  </ParamField>

  <ParamField path="max_net_charge_over_sasa" type="number" default="10.0">
    Upper bound of the allowed net\_charge\_over\_sasa window.
  </ParamField>

  <ParamField path="max_ddg_over_cms" type="number" default="-0.06">
    Maximum allowed ddg/contact\_molecular\_surface ratio.
  </ParamField>

  <ParamField path="substantial_divergence_ratio" type="number" default="0.5">
    Normalized distance from threshold at which heavy penalties reach full penalty.
  </ParamField>

  <ParamField path="base_weight" type="number" default="1.0">
    Weight for base score penalty component.
  </ParamField>

  <ParamField path="phosphate_weight" type="number" default="1.0">
    Weight for phosphate score penalty component.
  </ParamField>

  <ParamField path="bidentate_weight" type="number" default="1.0">
    Weight for bidentate score penalty component.
  </ParamField>

  <ParamField path="backbone_weight" type="number" default="1.0">
    Weight for backbone phosphate contact penalty.
  </ParamField>

  <ParamField path="compactness_weight" type="number" default="1.0">
    Weight for compactness contact penalty.
  </ParamField>

  <ParamField path="loop_weight" type="number" default="1.0">
    Weight for loop-length penalty component.
  </ParamField>

  <ParamField path="motif_weight" type="number" default="1.0">
    Weight for motif-in-recognition-helix check.
  </ParamField>

  <ParamField path="rifres_weight" type="number" default="1.0">
    Weight for rifres-in-recognition-helix check.
  </ParamField>

  <ParamField path="buried_unsat_weight" type="number" default="1.0">
    Weight for buried-unsatisfied-polars penalty.
  </ParamField>

  <ParamField path="shape_complementarity_weight" type="number" default="1.0">
    Weight for shape-complementarity penalty.
  </ParamField>

  <ParamField path="packstat_weight" type="number" default="1.0">
    Weight for packstat penalty.
  </ParamField>

  <ParamField path="rboltz_weight" type="number" default="1.0">
    Weight for max-RKQE RotamerBoltzmann preorganization penalty.
  </ParamField>

  <ParamField path="avg_top_two_rboltz_weight" type="number" default="1.0">
    Weight for avg-top-two RotamerBoltzmann preorganization penalty.
  </ParamField>

  <ParamField path="ddg_weight" type="number" default="2.0">
    Weight for ddG notebook-alignment penalty.
  </ParamField>

  <ParamField path="contact_molecular_surface_weight" type="number" default="2.0">
    Weight for CMS notebook-alignment penalty.
  </ParamField>

  <ParamField path="net_charge_over_sasa_weight" type="number" default="2.0">
    Weight for net\_charge\_over\_sasa notebook-alignment penalty.
  </ParamField>

  <ParamField path="ddg_over_cms_weight" type="number" default="2.0">
    Weight for ddg\_over\_cms notebook-alignment penalty.
  </ParamField>

  <ParamField path="max_mpnn_score" type="number" default="2.0">
    Maximum allowed MPNN score when available in candidate metadata.
  </ParamField>

  <ParamField path="missing_mpnn_score_penalty" type="number" default="0.0">
    Penalty used when MPNN score is unavailable in candidate metadata.
  </ParamField>

  <ParamField path="mpnn_score_weight" type="number" default="1.0">
    Weight for MPNN score threshold penalty.
  </ParamField>

  <ParamField path="structure_tool" type="enum" default="alphafold3">
    Predictor for the protein-DNA complex; must be DNA-capable (alphafold3/boltz2/protenix).

    Options: `esmfold`, `esmfold2`, `alphafold3`, `boltz2`, `chai1`, `protenix`, `alphafold2`, `alphafold2_binder`
  </ParamField>

  <ParamField path="esmfold_config" type="ESMFoldConfig">
    Configuration for ESMFold structure prediction.
  </ParamField>

  <ParamField path="esmfold2_config" type="ESMFold2Config">
    Configuration for ESMFold2 structure prediction.
  </ParamField>

  <ParamField path="alphafold3_config" type="AlphaFold3Config">
    Configuration for AlphaFold3 structure prediction.
  </ParamField>

  <ParamField path="boltz2_config" type="Boltz2Config">
    Configuration for Boltz2 structure prediction.
  </ParamField>

  <ParamField path="chai1_config" type="Chai1Config">
    Configuration for Chai1 structure prediction.
  </ParamField>

  <ParamField path="protenix_config" type="ProtenixConfig">
    Configuration for Protenix structure prediction.
  </ParamField>

  <ParamField path="alphafold2_config" type="AlphaFold2Config">
    Configuration for the general AlphaFold2 multimer structure predictor.
  </ParamField>

  <ParamField path="alphafold2_binder_config" type="AlphaFold2BinderStructureConfig">
    Configuration for the AF2 binder-design backend.
  </ParamField>
</div>

<div class="api-model-section api-model-static api-output-section">
  <div class="api-model-header"><span class="api-model-badge api-output-badge">Returns</span><span class="api-model-name">ConstraintOutput</span></div>

  Per-candidate score in `[0, 1]` (lower is
  better) with `dbp_metrics`, `dbp_penalties`, `pdb_path` (and
  `dbp_metrics_error` on soft failure) metadata.
</div>

## Usage

```python python icon="python" theme={null}
from proto_language.core import Constraint
from proto_language.constraint import dbp_design_metrics_constraint, DBPDesignMetricsConfig

constraint = Constraint(
    inputs=[segment],
    function=dbp_design_metrics_constraint,
    function_config=DBPDesignMetricsConfig(
        # Configure parameters here
    ),
)

scores = constraint.evaluate()
```

## Metadata

| Property        | Value                           |
| --------------- | ------------------------------- |
| Key             | `dbp-design-metrics`            |
| Function        | `dbp_design_metrics_constraint` |
| Category        | `protein_structure`             |
| Mode            | `discrete`                      |
| Uses GPU        | `True`                          |
| Supported Types | `protein`, `dna`                |
