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

# Prodigal

> [Prodigal](https://github.com/hyattpd/Prodigal) is a [gene-prediction](https://en.wikipedia.org/wiki/Gene_prediction) program for [bacterial](https://en.wikipedia.org/wiki/Bacteria) and [archaeal](https://en.wikipedia.org/wiki/Archaea) genomes developed by Hyatt and colleagues at Oak Ridge National Laboratory. It predicts protein-coding genes using a [dynamic-programming](https://en.wikipedia.org/wiki/Dynamic_programming) algorithm that scores candidates by their coding potential, ribosome binding site strength, and [start codon](https://en.wikipedia.org/wiki/Start_codon) usage. This toolkit invokes Prodigal through the [pyrodigal](https://github.com/althonos/pyrodigal) Python interface and exposes a single registered tool that returns the predicted genes per input sequence together with their nucleotide and amino-acid sequences and Prodigal-specific annotations.

<div class="page-hero">
  <img class="page-hero-banner" src="https://proto-bio.github.io/proto-assets/images/tool/prodigal/hero.png" alt="Prodigal" />
</div>

<Note>
  **License:** Prodigal has a GPL-3.0 license. Please refer to [the license](https://github.com/hyattpd/Prodigal/blob/GoogleImport/LICENSE) for full terms.
</Note>

<p class="entity-disclaimer">This toolkit 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-prodigal" id="none-prodigal" class="tab-radio-input" />

<input type="radio" name="tab-prodigal" id="github-prodigal" class="tab-radio-input" defaultChecked />

<input type="radio" name="tab-prodigal" id="paper-prodigal" class="tab-radio-input" />

<input type="radio" name="tab-prodigal" id="cite-prodigal" class="tab-radio-input" />

<input type="radio" name="tab-prodigal" id="source-prodigal" class="tab-radio-input" />

<input type="radio" name="tab-prodigal" id="notebook-prodigal" class="tab-radio-input" />

<input type="radio" name="tab-prodigal" id="proto-prodigal" class="tab-radio-input" />

<div class="tool-tab-bar">
  <span class="tool-tab-wrap"><label for="github-prodigal" class="tool-tab tab-open badge-github"><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> GitHub</label><label for="none-prodigal" class="tool-tab tab-close badge-github"><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> GitHub</label></span> <span class="tool-tab-wrap"><label for="paper-prodigal" class="tool-tab tab-open badge-paper"><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="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" /><polyline points="14 2 14 8 20 8" /><line x1="16" y1="13" x2="8" y2="13" /><line x1="16" y1="17" x2="8" y2="17" /><polyline points="10 9 9 9 8 9" /></svg> Publication</label><label for="none-prodigal" class="tool-tab tab-close badge-paper"><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="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" /><polyline points="14 2 14 8 20 8" /><line x1="16" y1="13" x2="8" y2="13" /><line x1="16" y1="17" x2="8" y2="17" /><polyline points="10 9 9 9 8 9" /></svg> Publication</label></span> <span class="tool-tab-wrap"><label for="cite-prodigal" 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-prodigal" 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> <span class="tool-tab-wrap"><label for="source-prodigal" 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> Tool Source</label><label for="none-prodigal" 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> Tool Source</label></span> <span class="tool-tab-wrap"><label for="notebook-prodigal" class="tool-tab tab-open badge-notebook"><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="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z" /><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z" /></svg> Open as Notebook</label><label for="none-prodigal" class="tool-tab tab-close badge-notebook"><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="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z" /><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z" /></svg> Open as Notebook</label></span> <span class="tool-tab-wrap"><label for="proto-prodigal" class="tool-tab tab-open badge-local"><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="4 17 10 11 4 5" /><line x1="12" y1="19" x2="20" y2="19" /></svg> Run Locally</label><label for="none-prodigal" class="tool-tab tab-close badge-local"><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="4 17 10 11 4 5" /><line x1="12" y1="19" x2="20" y2="19" /></svg> Run Locally</label></span>
</div>

<a href="https://github.com/hyattpd/Prodigal" target="_blank" class="tab-panel github-panel" data-tab="github-prodigal">
  <div class="gh-card-wrap">
    <img src="https://opengraph.githubassets.com/1/hyattpd/Prodigal" class="gh-card-img img-fallback" alt="hyattpd/Prodigal" />

    <div class="gh-card-fallback">
      <div class="gh-fallback-org"><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> hyattpd/Prodigal</div>
    </div>
  </div>

  <span class="panel-goto-btn gh-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 repo</span></span>
</a>

<a href="https://doi.org/10.1186/1471-2105-11-119" target="_blank" class="tab-panel paper-panel" data-tab="paper-prodigal">
  <div class="paper-info">
    <div class="paper-title">Prodigal: prokaryotic gene recognition and translation initiation site identification</div>
    <div class="paper-meta">Doug Hyatt, Gwo-Liang Chen, ... Loren J Hauser</div>
    <div class="paper-meta paper-venue">BMC Bioinformatics (2010)</div>
  </div>

  <span class="panel-goto-btn pub-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="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" /><polyline points="14 2 14 8 20 8" /><line x1="16" y1="13" x2="8" y2="13" /><line x1="16" y1="17" x2="8" y2="17" /><polyline points="10 9 9 9 8 9" /></svg> Read paper</span></span>
</a>

<div class="tab-panel cite-panel" data-tab="cite-prodigal">
  <div class="cite-code-wrap">
    ```bibtex theme={null}
    @article{hyatt2010prodigal,
      title={Prodigal: prokaryotic gene recognition and translation initiation site identification},
      author={Hyatt, Doug and Chen, Gwo-Liang and LoCascio, Philip F and Land, Miriam L and Larimer, Frank W and Hauser, Loren J},
      journal={BMC Bioinformatics},
      volume={11},
      number={1},
      pages={119},
      year={2010},
      publisher={BioMed Central},
      doi={10.1186/1471-2105-11-119}
    }
    ```
  </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>

<a href="https://github.com/evo-design/proto-tools/tree/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/orf_prediction/prodigal" target="_blank" class="tab-panel source-panel" data-tab="source-prodigal">
  <div class="source-info">
    <img src="https://github.com/evo-design.png?size=40" class="source-avatar" width="36" height="36" />

    <span class="source-path">evo-design/proto-tools<span class="source-subpath">/proto\_tools/tools/orf\_prediction/prodigal</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>

<a href="https://github.com/evo-design/proto-tools/blob/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/orf_prediction/prodigal/examples/example.ipynb" target="_blank" class="tab-panel notebook-panel" data-tab="notebook-prodigal">
  <div class="notebook-info">
    <span class="notebook-icon">
      <svg width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
        <path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z" />

        <path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z" />
      </svg>
    </span>

    <span class="notebook-label">Open Notebook</span>
  </div>

  <span class="panel-goto-btn notebook-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="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z" /><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z" /></svg> Open notebook</span></span>
</a>

<div class="tab-panel proto-panel run-local-panel" data-tab="proto-prodigal">
  <a href="https://github.com/evo-design/proto-tools" target="_blank" class="run-local-preview">
    <img noZoom src="https://opengraph.githubassets.com/1/evo-design/proto-tools" alt="proto-tools on GitHub" />
  </a>

  <div class="run-local-install">
    <span class="run-local-label">Run locally with proto-tools</span>

    <div class="run-local-code">
      ```bash theme={null}
      pip install git+https://github.com/evo-design/proto-tools.git
      ```
    </div>
  </div>
</div>

<div class="entity-contributors"><span class="entity-contributors-label">Toolkit contributors</span><span class="entity-contributors-people"><a class="entity-contributor" href="https://github.com/bviggiano" target="_blank" rel="noopener" title="bviggiano: 17 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/dguo8412" target="_blank" rel="noopener" title="dguo8412: 12 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/leba01" target="_blank" rel="noopener" title="leba01: 4 commits"><img noZoom class="entity-contributor-avatar" src="https://avatars.githubusercontent.com/u/124846286?v=4&s=64" alt="" loading="lazy" /><span class="entity-contributor-login">leba01</span></a></span></div>

| Function                    | Description                                        |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| --------------------------- | -------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `run_prodigal_prediction()` | Prokaryotic ORF and gene prediction using Prodigal | <a href="#api-run-prodigal-prediction" class="func-table-btn func-api-btn"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20" /></svg> Docs</a> <a href="https://github.com/evo-design/proto-tools/blob/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/orf_prediction/prodigal/prodigal.py#L340" target="_blank" class="func-table-btn func-source-btn"><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> |

## Background

Prodigal ([Hyatt, Chen, LoCascio, Land, Larimer, and Hauser, 2010](https://doi.org/10.1186/1471-2105-11-119)) was developed as a fast and accurate replacement for earlier prokaryotic gene-prediction programs. The published method targets three specific objectives, namely improved gene-structure prediction, improved translation initiation site recognition, and reduction in the false-positive rate. The authors report that Prodigal achieves favourable results against the gene finders that were the established standard at the time of publication, and the program has since become one of the most widely used tools for automated prokaryotic genome annotation.

Prokaryotic gene prediction is straightforward relative to eukaryotic gene prediction because prokaryotic genes are contiguous, are not interrupted by [introns](https://en.wikipedia.org/wiki/Intron), and often begin with a [Shine-Dalgarno ribosome binding site](https://en.wikipedia.org/wiki/Shine-Dalgarno_sequence) located a short distance upstream of the start codon, typically around 5 to 10 nucleotides. Prodigal exploits these regularities by combining a dynamic-programming search across candidate [open reading frames](https://en.wikipedia.org/wiki/Open_reading_frame) with scoring terms for coding-region hexamer frequencies, the presence and strength of a recognised ribosome binding site motif, and the identity of the start codon. The program supports two operating modes. In single-genome mode it first trains its scoring parameters on the input sequence itself and then predicts genes using those trained parameters, which requires at least approximately 100 kilobases of input sequence for reliable training. In meta mode it applies a set of pre-trained parameters from a curated panel of reference genomes, which is appropriate for short contigs, draft assemblies, and [metagenomic](https://en.wikipedia.org/wiki/Metagenomics) samples.

This toolkit uses [pyrodigal](https://github.com/althonos/pyrodigal) ([Larralde, 2022](https://doi.org/10.21105/joss.04296)), a Python interface to Prodigal that exposes the original C implementation through Python bindings with SIMD-accelerated coding-region scoring. The interface reproduces the predictions of the reference Prodigal program while removing the need to manage an external command-line invocation.

### Learning Resources

* [hyattpd/Prodigal](https://github.com/hyattpd/Prodigal) (Hyatt, Oak Ridge National Laboratory). Official Prodigal source code and command-line reference.
* [althonos/pyrodigal](https://github.com/althonos/pyrodigal) (Larralde, EMBL). Python interface to Prodigal used by this toolkit, with extended documentation and API reference at [pyrodigal.readthedocs.io](https://pyrodigal.readthedocs.io/).

## Tools

<a name="api-run-prodigal-prediction" />

<div class="tool-section-card tool-section-card--predict">
  ### Prodigal ORF Prediction (`prodigal-prediction`)

  Predicts protein-coding genes in one or more prokaryotic DNA sequences using Prodigal through the pyrodigal interface. Each returned gene carries its nucleotide and translated amino-acid sequence, 1-indexed start and end coordinates on the parent sequence, strand, reading frame, partial-gene status, [GC content](https://en.wikipedia.org/wiki/GC-content), start codon identity, and the detected ribosome binding site motif and spacer.

  #### API Reference

  <div class="api-model-section api-input-section">
    <a href="https://github.com/evo-design/proto-tools/blob/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/orf_prediction/prodigal/prodigal.py#L76" 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>

    <Accordion title="Input: ProdigalInput">
      <ParamField path="input_sequences" type="List[string]" required>
        DNA sequence(s) to analyze for genes and open reading frames. Can be provided as:
      </ParamField>
    </Accordion>
  </div>

  <div class="api-model-section api-config-section">
    <a href="https://github.com/evo-design/proto-tools/blob/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/orf_prediction/prodigal/prodigal.py#L127" 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>

    <Accordion title="Config: ProdigalConfig">
      <ParamField path="meta_mode" type="boolean" default="True">
        Use meta mode for gene prediction. Options:
      </ParamField>

      <ParamField path="translation_table" type="enum" default="bacterial">
        NCBI genetic code for translation. Only used in single-genome mode (`meta_mode=False`). In meta mode, pre-trained metagenomic models use their own built-in translation tables and this parameter is ignored. Common options:

        Available options: `standard`, `vertebrate_mitochondrial`, `yeast_mitochondrial`, `mycoplasma`, `invertebrate_mitochondrial`, `ciliate_nuclear`, `echinoderm_mitochondrial`, `euplotid_nuclear`, `bacterial`, `alternative_yeast_nuclear`, `ascidian_mitochondrial`, `alternative_flatworm_mitochondrial`, `blepharisma_nuclear`, `chlorophycean_mitochondrial`, `trematode_mitochondrial`, `scenedesmus_mitochondrial`, `thraustochytrium_mitochondrial`, `rhabdopleuridae_mitochondrial`, `candidate_division_sr1`
      </ParamField>

      <ParamField path="closed_ends" type="boolean" default="False">
        Prevent genes from running off sequence edges. Options:
      </ParamField>

      <ParamField path="mask" type="boolean" default="False">
        When `True`, treat runs of N bases as masked and do not call genes spanning them (equivalent to prodigal's `-m`). Default: `False`.
      </ParamField>

      <ParamField path="min_gene" type="integer" default="90">
        Minimum gene length in nucleotides. Default: 90. Drop for draft assemblies where short fragments are expected.
      </ParamField>

      <ParamField path="num_threads" type="integer">
        Number of CPU threads for parallel processing of multiple sequences. Higher values speed up batch processing. By default, automatically detects and uses all available CPU cores. Must be at least 1. Default: auto-detect all cores.
      </ParamField>

      <ParamField path="verbose" type="integer" default="0">
        Verbosity level (0=quiet, 1=info, 2=debug, 3=raw subprocess stderr). `True` is coerced to `1` and `False` to `0`.
      </ParamField>

      <ParamField path="device" type="string" default="cpu">
        Device to run the tool on.
      </ParamField>

      <ParamField path="timeout" type="integer" default="3600">
        Maximum execution time in seconds. `None` waits indefinitely.
      </ParamField>

      <ParamField path="seed" type="integer">
        Random seed. When set, tools run reproducibly up to small GPU float noise (see `BaseToolOutput.approx_equal`), and the seed participates in cache keys. When None, cacheable seed-sensitive tools skip cache until seeded.
      </ParamField>
    </Accordion>
  </div>

  <div class="api-model-section api-output-section">
    <a href="https://github.com/evo-design/proto-tools/blob/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/orf_prediction/prodigal/prodigal.py#L216" 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>

    <Accordion title="Output: ProdigalOutput">
      <ResponseField name="results" type="List[OrfPredictionResult]">
        One entry per input sequence, in input order, each holding the ORFs found in that sequence.

        <Expandable title="OrfPredictionResult">
          <ResponseField name="orfs" type="List[ORF]">
            ORFs found in this sequence, in the caller's order.
          </ResponseField>
        </Expandable>
      </ResponseField>
    </Accordion>
  </div>

  #### Applications

  This tool is appropriate for the gene-calling step of any analysis that begins with raw prokaryotic DNA sequences and needs a curated set of protein-coding genes rather than an exhaustive enumeration of all open reading frames. Representative applications include initial gene annotation of a newly assembled bacterial or archaeal genome, recovery of protein-coding genes from metagenomic contigs for downstream functional or taxonomic analysis, and generation of translated protein sequences for subsequent homology search or domain annotation.

  #### Usage Tips

  * **`meta_mode` selects the operating mode and is the most consequential setting.** The default of `meta_mode=True` applies a panel of pre-trained parameters that is appropriate for short contigs, draft assemblies, and metagenomic samples. A value of `meta_mode=False` instead trains scoring parameters on the input sequence itself and requires at least approximately 100 kilobases of input for reliable training. The single-genome mode is appropriate for complete or near-complete genomes when sufficient training sequence is available.
  * **`translation_table` selects the [genetic code](https://en.wikipedia.org/wiki/Genetic_code) and is only consulted in single-genome mode.** In meta mode the pre-trained metagenomic models carry their own internal translation tables, and this parameter has no effect on the output. The default value of `"bacterial"` corresponds to NCBI table 11 (bacterial, archaeal, and plant plastid code). A value of `"mycoplasma"` selects NCBI table 4 (Mycoplasma and Spiroplasma), and `"standard"` selects NCBI table 1 (the standard genetic code). Additional supported NCBI tables are appropriate for organisms that use the corresponding alternative codes.
  * **`closed_ends` controls whether partial genes at sequence boundaries are reported.** The default of `closed_ends=False` allows partial genes at the 5' and 3' ends of each input sequence, which is appropriate for linear contigs and draft assemblies in which real genes may extend across the assembly boundary. A value of `closed_ends=True` prevents partial-gene predictions and is appropriate for complete circular genomes such as bacterial chromosomes and plasmids, in which there are no true sequence ends.
  * **`min_gene` is the minimum gene length in nucleotides and defaults to 90.** This corresponds to approximately 30 amino acids. Lower values can be considered for draft assemblies in which short gene fragments are expected at contig boundaries, while higher values are appropriate when only larger, well-defined genes are of interest.
  * **`mask=True` excludes regions of unresolved nucleotides from gene calling.** When the input contains runs of `N` characters representing low-quality or gap regions, a value of `mask=True` prevents Prodigal from calling genes that span those regions, which is appropriate for draft assemblies with significant unresolved sequence content.
  * **Partial-gene status is reported as a two-digit code on each predicted gene.** A status of `00_00` indicates a complete gene with both a start and a stop codon present in the input. A status of `10_00` indicates a gene that is truncated at the 5' end of the input, `00_01` indicates truncation at the 3' end, and `10_01` indicates truncation at both ends. Partial genes commonly represent real coding sequences that extend beyond the boundary of the input and should not be excluded from downstream analyses without consideration.
</div>

## Toolkit Notes

These apply to every Prodigal tool in this toolkit (`prodigal-prediction`).

* **Prodigal is appropriate for prokaryotic genomes only.** The scoring model is calibrated for bacterial and archaeal gene structure, and the program does not handle introns. Eukaryotic gene prediction requires a dedicated eukaryotic gene finder.
* **Input sequences are accepted as a single string or a list of strings and are normalised to uppercase before gene calling.** IUPAC ambiguity codes are permitted in the input. The validator raises an error when the input contains characters that are not recognised DNA nucleotides or IUPAC codes.
* **`num_threads` controls the parallelism used to process multiple input sequences.** Each input sequence is processed by an independent worker, so increasing the thread count benefits batches of many sequences but has no effect on a single input. The default automatically detects the number of available CPU cores.
* **Position fields are 1-indexed to match standard biological residue numbering conventions.** Gene start and end positions on the parent sequence follow the conventions used in GenBank annotations and the published literature, so positions can be compared directly against external references without conversion.

<Tip>
  **Example notebook:** See the [full working example](https://github.com/evo-design/proto-tools/blob/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/orf_prediction/prodigal/examples/example.ipynb) for a copy-paste-ready walkthrough.
</Tip>

## Infrastructure Guides

The following guides cover how to run tools efficiently and at scale.

<CardGroup cols={2}>
  <Card title="Tool Persistence" icon="repeat" href="/docs/tools/guides/tool-persistence">Keep a tool's model warm across calls instead of reloading it every invocation.</Card>
  <Card title="Device Management" icon="cpu" href="/docs/tools/guides/device-management">How GPUs are allocated to tools and how to target specific devices.</Card>
  <Card title="Parallel Execution" icon="layers" href="/docs/tools/guides/parallel-execution">Fan a batch of inputs out across multiple GPUs.</Card>
</CardGroup>
