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

# Operator Site Occlusion

> Score presence of an inverted-repeat operator occluding the -35/-10 box or TSS

<div class="page-hero">
  <img class="page-hero-banner" src="https://proto-bio.github.io/proto-assets/images/constraint/operator-site/hero.png" alt="Operator Site Occlusion" />
</div>

<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" />

<div class="tool-tab-bar entity-source-bar"><span class="tool-tab-wrap"><span class="tool-tab badge-source entity-source-tab"><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</span></span></div>

<a href="https://github.com/evo-design/proto-language/blob/d3b7822f74ea64747cc751a3b2ab1aa6b799ac47/proto_language/constraint/sequence_annotation/operator_site_constraint.py#L250" target="_blank" class="tab-panel source-panel entity-source-panel">
  <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/sequence\_annotation/operator\_site\_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>
Score whether a promoter carries an occluding inverted-repeat operator.

Each sequence is anchored to its best consensus -35/-10 promoter, the -35 box,
-10 box, and a downstream TSS window are taken as occlusion targets, and the
sequence is scanned for inverted-repeat operators (two half-sites of length

> \= `min_half_site` separated by a gap \<= `max_gap` whose first half-site
> matches the reverse complement of the second within `max_mismatch`
> mismatches). The best operator that overlaps a target by >= `min_overlap` bp
> determines the score.

## 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">OperatorSiteConfig</span><a href="https://github.com/evo-design/proto-language/blob/d3b7822f74ea64747cc751a3b2ab1aa6b799ac47/proto_language/constraint/sequence_annotation/operator_site_constraint.py#L61" 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 repressor-operator presence constraint.

  Locates the -35 / -10 boxes by best consensus match, defines a TSS window
  just downstream of the -10 box, then scans for inverted-repeat operators
  (two half-sites separated by a short gap whose first half-site matches the
  reverse complement of the second) and checks whether any occludes a promoter
  element. Lower score = an occluding operator is present.

  <ParamField path="min_half_site" type="integer" default="7">
    Minimum half-site length (bp) for an inverted-repeat operator candidate.
  </ParamField>

  <ParamField path="max_gap" type="integer" default="1">
    Maximum gap (bp) between the two operator half-sites.
  </ParamField>

  <ParamField path="max_mismatch" type="integer" default="1">
    Max Hamming mismatches between half-site 1 and reverse complement of half-site 2.
  </ParamField>

  <ParamField path="min_overlap" type="integer" default="3">
    Minimum overlap (bp) between an operator and a -35/-10/TSS element to occlude it.
  </ParamField>

  <ParamField path="consensus_35" type="string" default="TTGACA">
    Consensus -35 box (6 bp) used to anchor the promoter.
  </ParamField>

  <ParamField path="consensus_10" type="string" default="TATAAT">
    Consensus -10 box (6 bp) used to anchor the promoter.
  </ParamField>

  <ParamField path="promoter_min_spacer" type="integer" default="14">
    Minimum -35/-10 spacer (bp) considered when anchoring the promoter.
  </ParamField>

  <ParamField path="promoter_max_spacer" type="integer" default="20">
    Maximum -35/-10 spacer (bp) considered when anchoring the promoter.
  </ParamField>

  <ParamField path="tss_window" type="integer" default="6">
    Width (bp) of the TSS window placed just downstream of the -10 box.
  </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>

  One result per sequence. `score` is 0.0 when an
  occluding operator (mismatch \<= `max_mismatch`) is present and rises
  toward 1.0 as the best occluding candidate drifts away from a valid
  operator (always >= 0.5 when no valid operator occludes a target, so
  `threshold=0.5` acts as a presence filter). `metadata` carries an
  `operator` dict with the located boxes and best-operator details
  (`None` when no candidate can occlude a target).
</div>

## Usage

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

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

scores = constraint.evaluate()
```

## Metadata

| Property        | Value                      |
| --------------- | -------------------------- |
| Key             | `operator-site`            |
| Function        | `operator_site_constraint` |
| Category        | `sequence_annotation`      |
| Mode            | `discrete`                 |
| Uses GPU        | `False`                    |
| Supported Types | `dna`                      |
