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

# Overall Protein Quality

> Evaluate overall protein quality using multiple sub-constraints

<div class="page-hero">
  <img class="page-hero-banner" src="https://proto-bio.github.io/proto-assets/images/constraint/overall-protein-quality/hero.png" alt="Overall Protein Quality" />
</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-overall-protein-quality" id="none-constraint-overall-protein-quality" class="tab-radio-input" />

<input type="radio" name="tab-constraint-overall-protein-quality" id="tools-constraint-overall-protein-quality" class="tab-radio-input" defaultChecked />

<input type="radio" name="tab-constraint-overall-protein-quality" id="source-constraint-overall-protein-quality" class="tab-radio-input" />

<div class="tool-tab-bar"><span class="tool-tab-wrap"><label for="tools-constraint-overall-protein-quality" 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-overall-protein-quality" 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-overall-protein-quality" 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-overall-protein-quality" 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-overall-protein-quality">
  <div class="tools-used-grid">
    <a href="/docs/tools/orf-prediction/prodigal" class="tools-used-tile">
      <img noZoom src="https://proto-bio.github.io/proto-assets/images/tool/prodigal/social.png" alt="" loading="lazy" />
    </a>

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

<a href="https://github.com/evo-design/proto-language/blob/d3b7822f74ea64747cc751a3b2ab1aa6b799ac47/proto_language/constraint/protein_quality/overall_protein_quality_constraint.py#L340" target="_blank" class="tab-panel source-panel" data-tab="source-constraint-overall-protein-quality">
  <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\_quality/overall\_protein\_quality\_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: 5 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 overall protein quality using multiple configurable sub-constraints.

This constraint function provides a comprehensive assessment of protein quality
by evaluating multiple aspects including sequence length, structural complexity,
repetitiveness, amino acid diversity, and balanced amino acid representation.
For DNA sequences, it first predicts protein-coding regions using Prodigal,
then evaluates all predicted proteins. For protein sequences, it evaluates
them directly.

The function aggregates scores from enabled sub-constraints by averaging them
and clipping to \[0.0, 1.0]. Use the native `Constraint(threshold=...)`
parameter for pass/fail filtering.

## 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">OverallProteinQualityConfig</span><a href="https://github.com/evo-design/proto-language/blob/d3b7822f74ea64747cc751a3b2ab1aa6b799ac47/proto_language/constraint/protein_quality/overall_protein_quality_constraint.py#L250" 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 overall protein quality constraint.

  This configuration class orchestrates multiple protein quality sub-constraints
  that can be enabled or disabled individually. It provides a flexible framework
  for comprehensive protein quality assessment by combining various metrics
  including sequence length, structural complexity, repetitiveness, amino acid
  diversity, and balanced amino acid representation.

  The configuration uses a nested structure where all sub-constraint parameters
  are exposed through a single `protein_quality_config` attribute of type
  `ProteinQualitySubConfig`. This design allows for easy serialization in
  UI/API schemas while maintaining clear organization of constraint-specific
  parameters.

  At least one sub-constraint must be enabled for the configuration to be valid.
  This is enforced through a model validator that runs after initialization.

  <Note>
    The nested `protein_quality_config` provides access to:

    * **Length constraint**: Validates protein length against min/max range
      or target value
    * **Complexity constraint**: Detects low-complexity regions using segmasker
    * **Repetitiveness constraint**: Identifies repeated k-mer patterns
    * **Diversity constraint**: Ensures adequate amino acid type diversity
    * **Balanced amino acids constraint**: Checks for underrepresented amino
      acid types

    Each sub-constraint can be independently enabled/disabled and configured
    with specific parameters. See `ProteinQualitySubConfig` documentation
    for complete parameter details.

    For more details, see:

    * `ProteinQualitySubConfig`: Detailed documentation of all
      sub-constraint parameters and configuration options
    * `overall_protein_quality_constraint`: The constraint function
      that uses this configuration
    * `SequenceLengthConfig`: Configuration for length constraint
    * `ProteinComplexityConfig`: Configuration for complexity constraint
    * `ProteinRepetitivenessConfig`: Configuration for repetitiveness
      constraint
    * `ProteinDiversityConfig`: Configuration for diversity constraint
    * `BalancedAaConfig`: Configuration for balanced amino acids
      constraint
  </Note>

  <ParamField path="protein_quality_config" type="ProteinQualitySubConfig" required>
    Nested configuration for protein quality checks
  </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. Scores range from 0.0 (best)
  to 1.0 (worst) and represent the average of all enabled sub-constraint
  scores, clipped to \[0.0, 1.0]. For DNA sequences, the score reflects
  the average quality across all predicted proteins. `metadata` carries:

  **For DNA sequences:**

  * `prodigal_proteins`: List of dicts of predicted proteins from
    Prodigal, each with protein ID, sequence, length, etc. (or `None`
    if no ORFs were predicted)
  * `prodigal_protein_count`: Integer count of predicted ORFs
  * `predicted_protein_count`: Integer count of proteins (same as
    prodigal\_protein\_count)
  * `avg_constraint_score`: Float average quality score across all
    predicted proteins
  * `protein_quality_details`: List of dictionaries, one per predicted
    protein, each containing:

    * `protein_id`: String identifier from Prodigal
    * `length`: Integer protein length in amino acids
    * `avg_constraint_score`: Float average across enabled constraints
    * `quality_scores`: Dictionary mapping constraint names to scores
    * `metadata`: Dictionary of additional constraint-specific metadata

  **For protein sequences:**

  * `protein_quality_scores`: Dictionary mapping constraint names (e.g.,
    "length", "complexity", "repetitiveness", "diversity", "balanced\_aas")
    to their individual scores
  * `avg_constraint_score`: Float average across all enabled constraints
</div>

## Usage

Using all available constraints with custom thresholds:

```python python icon="python" theme={null}
>>> quality_config = ProteinQualitySubConfig(
...     enable_length=True,
...     length_target_length=300,
...     enable_complexity=True,
...     complexity_max_low_complexity=0.25,
...     enable_repetitiveness=True,
...     repetitiveness_max_repetitiveness=0.08,
...     repetitiveness_min_repeat_length=3,
...     enable_diversity=True,
...     diversity_min_diversity=0.75,
...     enable_balanced_aas=True,
...     balanced_min_aa_frequency=0.03,
...     balanced_max_underrepresented_count=2,
... )
>>> overall_cfg = OverallProteinQualityConfig(protein_quality_config=quality_config)
>>> protein_seq = Sequence("MKYIVAVAG...", "protein")
>>> results = overall_protein_quality_constraint([(protein_seq,)], overall_cfg)
```

## Metadata

| Property        | Value                                |
| --------------- | ------------------------------------ |
| Key             | `overall-protein-quality`            |
| Function        | `overall_protein_quality_constraint` |
| Category        | `protein_quality`                    |
| Mode            | `discrete`                           |
| Uses GPU        | `False`                              |
| Supported Types | `dna`, `protein`                     |
