Skip to main content

PCR primer design & optimization pipeline

Project description

PRISM - Primer Design through Submodular Function Estimation

User Guide

PRISM (PRImer Selection through Submodular Maximization) is an open-source software tool for automated design of multiplex PCR primers, developed to support viral genome sequencing, pathogen surveillance, and other high-throughput molecular biology applications. Released under the GNU General Public License (GPL), PRISM is freely available and encourages community use, extension, and collaboration.

PRISM introduces a principled optimization framework that formulates the primer design task as a constrained submodular maximization problem, balancing two competing objectives: maximizing genome coverage and minimizing undesired primer-primer interactions, quantified using the Badness value. This formulation allows PRISM to leverage a fast local search algorithm with a provable constant-factor approximation guarantee, making it the first primer design method to combine rigorous theoretical guarantees with practical scalability.

In extensive evaluations on viral genome datasets such as foot-and-mouth disease virus (FMDV) and Zika virus, PRISM consistently outperforms leading tools—including PrimalScheme, Olivar, and primerJinn—achieving significantly lower Badness values, tighter distributions of primer quality, and robust genome coverage with low memory usage and runtime.

PyPI License


Installation

Requirements

– Python ≥ 3.9.
– Linux, macOS or Windows

Runtime dependencies (primer3‑py, numpy, pandas, tqdm, numba, joblib) will be installed automatically.

Installation from PyPI using pip

Recommend create and activate a virtual environment:

python3 -m venv /path/to/prism
source /path/to/prism/bin/activate

Or using conda:

conda create -n prism python=3.9 -y
conda activate prism

Please use the following command to install:

pip install prism-bio

Once the installation is complete, use the following commands to check PRISM's version:

prism --version

General usage

Input files

PRISM requires a reference genome in FASTA format as input. This file should contain one or more nucleotide sequences in standard FASTA format. For optimal results in multiplex primer design, the input should represent a high-quality reference or consensus sequence derived from your target population or viral strain.


Command-line interface

PRISM accepts three main sub-commands, input (required), block (optional, with a default size of 250 bp), extend (optional, with a default size of 100 bp) and output (optional, specifies file name and output path):

CLI options

Flag Default Description
-i--input required Input FASTA/FA file
-b--block-size 250 bp Block size for region slicing
-e--extend-block-size 100 bp Block extension size during optimisation
-o--output-csv optimized_primers.csv Output file (CSV)

Full help:

prism --help
or
prism -h

Example usage

# Run PRISM on a Zika reference, 300 bp blocks, 100 bp block extend size, export CSV
prism \
  -i data/NC_012532.1.fna \
  -b 250 \
  -e 100 \
  -o output/optimized_primers.csv

You can find this example file NC_012532.1.fna in example input. This is the Zika virus sequence from the NCBI dataset.


Generate files

The process ends with a .csv file in the form of the following table:

Primer ID Left Primer Right Primer
Primer 1 GTGTGA… CGTAGC…
Primer 2 GCGTAC… TAGCCA…
Primer…  ……………… ………………

This file will provide the designed primer serial numbers as well as the sequence


Developer Setup

git clone https://github.com/William-A-Wang/PRISM.git
python -m venv .venv && . .venv/Scripts/activate
pip install -e .[dev]

Using this approach, you can deploy code locally while performing development-related activities


External resources

We used Olivar's badness calculation function in our code, but modified some of the parameters.

We also used primer3 as the initial primer generation.


License

PRISM is released under the GNU GPL v3.0.

See the LICENSE file for details.


Citing PRISM

If you use PRISM in an academic setting, please cite:

@misc{WangPRISM25,
author      = { Ao Wang and 
                Yixin Chen and
                Aaron Hong and
                Adam Rivers and
                Alan Kuhnle and
                Christina Boucher},
title       = {Primer Design through Submodular Function Estimation},
note        = {In submission}
year        = {2025},
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

prism_bio-1.0.6.tar.gz (24.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

prism_bio-1.0.6-py3-none-any.whl (25.4 kB view details)

Uploaded Python 3

File details

Details for the file prism_bio-1.0.6.tar.gz.

File metadata

  • Download URL: prism_bio-1.0.6.tar.gz
  • Upload date:
  • Size: 24.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.13

File hashes

Hashes for prism_bio-1.0.6.tar.gz
Algorithm Hash digest
SHA256 b9d274aa8e635f752766ccb8c1eac95077cff4cdc6b11544830e9275d2c180ad
MD5 3a27a83df31c9ba8ff85a81cfeaa8655
BLAKE2b-256 7cbd5de080feaac8fe70ff67f5c65073802a2947c8700c162b0bcbf571e68ed0

See more details on using hashes here.

File details

Details for the file prism_bio-1.0.6-py3-none-any.whl.

File metadata

  • Download URL: prism_bio-1.0.6-py3-none-any.whl
  • Upload date:
  • Size: 25.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.13

File hashes

Hashes for prism_bio-1.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 5dc954814138eea827e3aa7b341bfbe30cba3a578932b94131f91aa3a56cf9b7
MD5 cd15cc91781f9da7b7bc08da4373f1ee
BLAKE2b-256 d26e263665971715ca33bb50be5aa4074d58a18b9dd95c9252a8be925f6dae3d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page