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

# Promoter Strength

> Evaluate promoter strength using Salis Lab Promoter Calculator

<div class="page-hero">
  <img class="page-hero-banner" src="https://proto-bio.github.io/proto-assets/images/constraint/promoter-strength/hero.png" alt="Promoter Strength" />
</div>

<Note>
  **License:** Salis Lab Promoter Calculator has a GPL-3.0 license. Please refer to [the license](https://github.com/barricklab/promoter-calculator/blob/master/LICENSE) 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-promoter-strength" id="none-constraint-promoter-strength" class="tab-radio-input" />

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

<input type="radio" name="tab-constraint-promoter-strength" id="source-constraint-promoter-strength" class="tab-radio-input" />

<input type="radio" name="tab-constraint-promoter-strength" id="cite-constraint-promoter-strength" class="tab-radio-input" />

<div class="tool-tab-bar"><span class="tool-tab-wrap"><label for="tools-constraint-promoter-strength" 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-promoter-strength" 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-promoter-strength" 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-promoter-strength" 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-promoter-strength" 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-promoter-strength" 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/gene-annotation/promoter-calculator" class="tab-panel tools-panel tools-panel-single" data-tab="tools-constraint-promoter-strength">
  <div class="tools-single-card">
    <img noZoom src="https://proto-bio.github.io/proto-assets/images/tool/promoter_calculator/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/sequence_annotation/promoter_strength_constraint.py#L126" target="_blank" class="tab-panel source-panel" data-tab="source-constraint-promoter-strength">
  <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/promoter\_strength\_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-promoter-strength">
  <div class="cite-code-wrap">
    ```bibtex theme={null}
    @article{lafleur2022promoter,
      title={Automated Model-Predictive Design of Synthetic Promoters to Control Transcriptional Profiles in Bacteria},
      author={LaFleur, Travis L. and Hossain, Ayaan and Salis, Howard M.},
      journal={Nature Communications},
      volume={13},
      number={1},
      pages={5159},
      year={2022},
      doi={10.1038/s41467-022-32829-5}
    }
    ```
  </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/dguo8412" target="_blank" rel="noopener" title="dguo8412: 3 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></span></div>
Evaluate bacterial promoter strength using Salis Lab Promoter Calculator.

This constraint function uses the Salis Lab Promoter Calculator to predict
E. coli sigma-70 promoter strength. The calculator scans sequences for canonical
promoter elements (-10 and -35 boxes) and computes either binding free energy (dG)
or predicted transcription initiation rate (tx\_rate).

The constraint returns penalty scores where lower values indicate stronger
promoters. The penalty mapping differs based on scoring type:

* **dG scoring**: Promoters with dG \< -3.0 kcal/mol are strong (penalty 0.0-0.5)
* **tx\_rate scoring**: Promoters with tx\_rate > 10000 are strong (penalty 0.0-0.5)

The calculator can identify multiple promoters in a single sequence; only the
strongest forward-strand candidate contributes to the penalty.

## 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">PromoterStrengthConfig</span><a href="https://github.com/evo-design/proto-language/blob/d3b7822f74ea64747cc751a3b2ab1aa6b799ac47/proto_language/constraint/sequence_annotation/promoter_strength_constraint.py#L16" 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 promoter strength constraint using Salis Lab Promoter Calculator.

  This class defines configuration parameters for evaluating bacterial promoter
  strength using the Salis Lab Promoter Calculator, a biophysical model that
  predicts RNA polymerase binding affinity and transcription initiation
  rates for sigma-70 promoters in E. coli. The calculator identifies promoter elements
  (-10 and -35 boxes, spacer regions) and computes binding free energy (dG) and
  predicted transcription rates.

  <Note>
    The Salis Lab Promoter Calculator specifically models E. coli sigma-70 promoters.

    Penalty scores are mapped from raw predictions:

    * **For dG scoring**: Strong promoters (dG \< -3.0) get low penalties (0.0-0.5),
      moderate promoters (-3.0 to -1.5) get medium penalties (0.5-1.0), weak or unlikely
      promoters (> -1.5) get maximum penalty (1.0).
    * **For tx\_rate scoring**: Strong promoters (>10000) get low penalties (0.0-0.5),
      moderate promoters (3000-10000) get medium penalties (0.5-1.0), weak
      promoters (\<3000) get maximum penalty (1.0).
  </Note>

  <ParamField path="add_context" type="boolean" default="False">
    If True, adds flanking nucleotides to short sequences to meet calculator length minimums
  </ParamField>

  <ParamField path="context_length" type="integer" default="10">
    Number of 'A' nucleotides to add on each end when add\_context=True
  </ParamField>

  <ParamField path="threads" type="integer" default="8">
    Number of threads for parallel processing of promoter calculations
  </ParamField>

  <ParamField path="circular" type="boolean" default="False">
    If True, treat sequences as circular for promoter detection across ends
  </ParamField>

  <ParamField path="scoring_type" type="enum" default="dG">
    Score type to use: 'dG' (binding free energy) or 'tx\_rate' (transcription rate). Defaults to 'dG'.

    Options: `dG`, `tx_rate`
  </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 ranges from 0.0 (strong
  promoter) to 1.0 (weak/no promoter). `metadata` carries a single
  `promoter_strength` dict:

  **When promoter is found:**

  * `penalty`: Float penalty score (0.0-1.0)
  * `tx_rate` OR `dG_rate`: Float best promoter strength value
    (depending on scoring\_type)
  * `raw_output`: List of dictionaries with detailed promoter predictions
    including -10/-35 box positions, sequences, spacer length, and
    individual energy terms

  **When no promoter is found:**

  * `penalty`: Float 1.0 (maximum penalty)
  * `reason`: String "no\_promoter\_found"
  * `raw_output`: Empty list \[]
</div>

## Usage

Evaluating promoter strength using dG scoring:

```python python icon="python" theme={null}
>>> from proto_language.core import Sequence
>>> # lacUV5 promoter padded with 20 nt of A on each side (calculator
>>> # needs ~20 nt of flanking sequence to score the promoter elements)
>>> seq = Sequence("A" * 20 + "AAAATTGTGAGCGGATAACAATTTCACACAGGAAACAGCTATGACC" + "A" * 20, "dna")
>>> config = PromoterStrengthConfig(scoring_type="dG")
>>> results = promoter_strength_constraint([(seq,)], config)
>>> print(results[0].score)
```

## Metadata

| Property        | Value                          |
| --------------- | ------------------------------ |
| Key             | `promoter-strength`            |
| Function        | `promoter_strength_constraint` |
| Category        | `sequence_annotation`          |
| Mode            | `discrete`                     |
| Uses GPU        | `False`                        |
| Supported Types | `dna`                          |
