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

# Structural TM-score Similarity

> Compare structure TM-score against a target. Returns 1 - TMscore.

<div class="page-hero">
  <img class="page-hero-banner" src="https://proto-bio.github.io/proto-assets/images/constraint/structure-tmscore/hero.png" alt="Structural TM-score Similarity" />
</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-structure-tmscore" id="none-constraint-structure-tmscore" class="tab-radio-input" />

<input type="radio" name="tab-constraint-structure-tmscore" id="tools-constraint-structure-tmscore" class="tab-radio-input" defaultChecked />

<input type="radio" name="tab-constraint-structure-tmscore" id="source-constraint-structure-tmscore" class="tab-radio-input" />

<div class="tool-tab-bar"><span class="tool-tab-wrap"><label for="tools-constraint-structure-tmscore" 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-structure-tmscore" 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-structure-tmscore" 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-structure-tmscore" 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-structure-tmscore">
  <div class="tools-used-grid"><a href="/docs/tools/structure-prediction/overview" class="tools-used-tile tools-used-cat-collage"><div class="tool-catalog-tile-collage"><div class="tool-catalog-tile-cell">  <img noZoom src="https://proto-bio.github.io/proto-assets/images/tool/esmfold/carousel.png" alt="" loading="lazy" /></div><div class="tool-catalog-tile-cell">  <img noZoom src="https://proto-bio.github.io/proto-assets/images/tool/esmfold2/carousel.png" alt="" loading="lazy" /></div><div class="tool-catalog-tile-cell">  <img noZoom src="https://proto-bio.github.io/proto-assets/images/tool/alphafold3/carousel.png" alt="" loading="lazy" /></div><div class="tool-catalog-tile-cell">  <img noZoom src="https://proto-bio.github.io/proto-assets/images/tool/boltz2/carousel.png" alt="" loading="lazy" /></div></div><div class="tool-catalog-tile-label"><span>Structure Prediction · 7 tools</span></div></a><a href="/docs/tools/structure-alignment/tmalign" class="tools-used-tile">  <img noZoom src="https://proto-bio.github.io/proto-assets/images/tool/tmalign/social.png" alt="" loading="lazy" /></a><a href="/docs/tools/structure-alignment/usalign" class="tools-used-tile">  <img noZoom src="https://proto-bio.github.io/proto-assets/images/tool/usalign/social.png" alt="" loading="lazy" /></a></div>
</div>

<a href="https://github.com/evo-design/proto-language/blob/d3b7822f74ea64747cc751a3b2ab1aa6b799ac47/proto_language/constraint/protein_structure/structure_similarity_constraint.py#L396" target="_blank" class="tab-panel source-panel" data-tab="source-constraint-structure-tmscore">
  <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/structure\_similarity\_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/dguo8412" target="_blank" rel="noopener" title="dguo8412: 8 commits"><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><a class="entity-contributor" href="https://github.com/bviggiano" target="_blank" rel="noopener" title="bviggiano: 3 commits"><img noZoom class="entity-contributor-avatar" src="https://avatars.githubusercontent.com/u/21143637?v=4&s=64" alt="" loading="lazy" /><span class="entity-contributor-login">bviggiano</span></a><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></span></div>
Predicts structure and compares TM-score. Returns (1.0 - TMscore).

This constraint automatically selects the appropriate alignment tool based on
the oligomer state of the inputs:

* Monomer vs monomer comparisons use standard `TMalign`.
* Comparisons involving multiple chains use `USalign` with `-mm 1` and default
  values for all other parameters.

<Note>
  The two raw TM-scores are combined per `config.tm_score_normalization`
  (default: arithmetic mean of the proposal- and target-normalized scores);
  the target is the reference structure. Metadata describes the predicted
  full input tuple/complex, not an individual chain.
</Note>

## 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">StructureTMScoreConfig</span><a href="https://github.com/evo-design/proto-language/blob/d3b7822f74ea64747cc751a3b2ab1aa6b799ac47/proto_language/constraint/protein_structure/structure_similarity_constraint.py#L198" 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 TM-score based structure similarity.

  This configuration extends `StructureSimilarityConfig` for calculating the
  Template Modeling score (TM-score) between the target and proposal structures.
  TM-score is a metric for assessing the topological similarity of protein structures
  and is less sensitive to local variations than RMSD.

  The constraint returns a score calculated as (1.0 - TM\_score), where 0.0 indicates
  a perfect match (TM-score = 1.0) and values closer to 1.0 indicate poor structural
  similarity.

  Inherits target specification (`target_chains`, `target_structure`,
  `min_target_plddt`) from `StructureSimilarityConfig` and tool selection
  (`structure_tool`, `esmfold_config`, `esmfold2_config`, `alphafold3_config`,
  `boltz2_config`, `chai1_config`, `protenix_config`, `alphafold2_config`,
  `alphafold2_binder_config`) from `StructureBasedConstraintConfig`.

  <ParamField path="plddt_threshold" type="number">
    Drop residues with pLDDT (0-100 scale, in B-factor) below this before alignment; None keeps all.
  </ParamField>

  <ParamField path="tm_score_normalization" type="enum" default="mean">
    How to combine the two TM-scores from TM-align/US-align: structure1, structure2, max, min, or mean.

    Options: `structure1`, `structure2`, `max`, `min`, `mean`
  </ParamField>

  <ParamField path="structure_tool" type="enum" default="esmfold">
    Predictor: esmfold/esmfold2/alphafold3/boltz2/chai1/protenix/alphafold2/alphafold2\_binder.

    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>

  <ParamField path="target_chains" type="array | Complex">
    Target chains: a tuple of sequence strings (entity types auto-detected).
  </ParamField>

  <ParamField path="target_structure" type="Structure | string">
    Target structure: a Structure object, file path (.pdb/.cif), or raw PDB/CIF content string.
  </ParamField>

  <ParamField path="min_target_plddt" type="number" default="0.6">
    Min mean pLDDT (0-1 scale) for a target folded from sequence; ignored when target\_structure is set.
  </ParamField>
</div>

## Usage

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

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

scores = constraint.evaluate()
```

## Metadata

| Property        | Value                             |
| --------------- | --------------------------------- |
| Key             | `structure-tmscore`               |
| Function        | `structure_tmscore_constraint`    |
| Category        | `protein_structure`               |
| Mode            | `discrete`                        |
| Uses GPU        | `True`                            |
| Supported Types | `protein`, `rna`, `dna`, `ligand` |
