> ## 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.

# DNA Motif Contact Count

> Require motif-local protein-DNA contacts in predicted complexes

<div class="page-hero">
  <img class="page-hero-banner" src="https://proto-bio.github.io/proto-assets/images/constraint/dna-motif-contact-count/hero.png" alt="DNA Motif Contact Count" />
</div>

<Note>
  **License:** AlphaFold3 uses Apache-2.0 for code and Custom (AlphaFold 3 Model Parameters Terms of Use) for model weights and has restrictions around commercial use and may require explicit attribution when utilized. Model weights are not publicly distributed and must be requested from the provider. Please refer to the [code license](https://github.com/google-deepmind/alphafold3/blob/main/LICENSE) and [model weights license](https://github.com/google-deepmind/alphafold3/blob/main/WEIGHTS_TERMS_OF_USE.md) for full terms.
</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-dna-motif-contact-count" id="none-constraint-dna-motif-contact-count" class="tab-radio-input" />

<input type="radio" name="tab-constraint-dna-motif-contact-count" id="tools-constraint-dna-motif-contact-count" class="tab-radio-input" defaultChecked />

<input type="radio" name="tab-constraint-dna-motif-contact-count" id="source-constraint-dna-motif-contact-count" class="tab-radio-input" />

<input type="radio" name="tab-constraint-dna-motif-contact-count" id="cite-constraint-dna-motif-contact-count" class="tab-radio-input" />

<div class="tool-tab-bar"><span class="tool-tab-wrap"><label for="tools-constraint-dna-motif-contact-count" 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-dna-motif-contact-count" 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-dna-motif-contact-count" 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-dna-motif-contact-count" 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> <span class="tool-tab-wrap"><label for="cite-constraint-dna-motif-contact-count" class="tool-tab tab-open badge-cite"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z" /><path d="M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z" /></svg> Cite</label><label for="none-constraint-dna-motif-contact-count" class="tool-tab tab-close badge-cite"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z" /><path d="M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z" /></svg> Cite</label></span></div>

<a href="/docs/tools/structure-prediction/alphafold3" class="tab-panel tools-panel tools-panel-single" data-tab="tools-constraint-dna-motif-contact-count">
  <div class="tools-single-card">
    <img noZoom src="https://proto-bio.github.io/proto-assets/images/tool/alphafold3/social.png" alt="" loading="lazy" />
  </div>

  <span class="panel-goto-btn tools-goto-btn"><span><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14" /><path d="m12 5 7 7-7 7" /></svg> Go to Tool Page</span></span>
</a>

<a href="https://github.com/evo-design/proto-language/blob/d3b7822f74ea64747cc751a3b2ab1aa6b799ac47/proto_language/constraint/protein_structure/dna_motif_contact_constraint.py#L423" target="_blank" class="tab-panel source-panel" data-tab="source-constraint-dna-motif-contact-count">
  <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/dna\_motif\_contact\_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="tab-panel cite-panel" data-tab="cite-constraint-dna-motif-contact-count">
  <div class="cite-code-wrap">
    ```bibtex theme={null}
    @article{abramson2024alphafold3,
      title={Accurate structure prediction of biomolecular interactions with AlphaFold 3},
      author={Abramson, Josh and Adler, Jonas and Dunger, Jack and Evans, Richard and Green, Tim and Pritzel, Alexander and Ronneberger, Olaf and Willmore, Lindsay and Ballard, Andrew J and Bambrick, Joshua and others},
      journal={Nature},
      volume={630},
      number={8016},
      pages={493--500},
      year={2024},
      publisher={Nature Publishing Group},
      doi={10.1038/s41586-024-07487-w}
    }
    ```
  </div>

  <span class="panel-goto-btn cite-copy-btn"><span><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z" /><path d="M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z" /></svg> Copy citation</span></span>
</div>

<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>
Score motif-local protein-DNA contact deficits in predicted complexes.

Predicts (or reuses) one protein-DNA complex per proposal, parses the PDB
geometry, and counts heavy-atom contacts between protein residues and the
selected DNA motif. The score is the largest of three normalized deficits
(contact pairs, unique protein residues, unique DNA positions), so `0` is
best (all minimum requirements met) and `1` is worst.

## 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">DNAMotifContactCountConfig</span><a href="https://github.com/evo-design/proto-language/blob/d3b7822f74ea64747cc751a3b2ab1aa6b799ac47/proto_language/constraint/protein_structure/dna_motif_contact_constraint.py#L119" 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>

  Configuration for the dna-motif-contact-count constraint.

  Predicts (or reuses) a protein-DNA complex and counts heavy-atom contacts
  between protein residues and a selected DNA motif. The score is the largest
  of three normalized deficits (contact pairs, unique protein residues, unique
  DNA positions) clamped to `[0, 1]`, where `0` means every minimum
  requirement is met and `1` means none are.

  <ParamField path="dna_indices" type="List[integer]" required>
    0-based motif indices on the selected DNA chain.
  </ParamField>

  <ParamField path="dna_chain_label" type="integer" default="0">
    Index of DNA chain in order-of-appearance in the PDB (0-based).
  </ParamField>

  <ParamField path="min_contacts" type="integer" default="1">
    Minimum motif-local protein-DNA residue-pair contacts required.
  </ParamField>

  <ParamField path="min_unique_protein_residues" type="integer" default="1">
    Minimum number of unique contacting protein residues.
  </ParamField>

  <ParamField path="min_unique_dna_positions" type="integer" default="1">
    Minimum number of motif DNA positions with at least one contact.
  </ParamField>

  <ParamField path="contact_distance_angstrom" type="number" default="4.0">
    Heavy-atom distance cutoff for contact detection.
  </ParamField>

  <ParamField path="dna_atom_scope" type="enum" default="base">
    Which DNA atoms are considered for motif contacts.

    Options: `base`, `any`, `backbone`
  </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-proposal score in `[0, 1]` (lower is
  better) and metadata describing the motif contacts (counts, the
  selected DNA chain, motif indices, cutoff, and resolved PDB path).
  A proposal whose structure shape prevents scoring (no DNA chains, no
  DNA residues, out-of-range `dna_chain_label` or `dna_indices`)
  soft-fails to `MAX_ENERGY` with `motif_contact_error` metadata.
</div>

## Usage

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

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

scores = constraint.evaluate()
```

## Metadata

| Property        | Value                                |
| --------------- | ------------------------------------ |
| Key             | `dna-motif-contact-count`            |
| Function        | `dna_motif_contact_count_constraint` |
| Category        | `protein_structure`                  |
| Mode            | `discrete`                           |
| Uses GPU        | `True`                               |
| Supported Types | `protein`, `dna`                     |
