Installation
pip install primerlab-genomic
Quick Start
from primerlab import design_pcr_primers, design_qpcr_assay
# Design PCR primers
result = design_pcr_primers(
sequence="ATGCGATCGATCG...",
tm_opt=60.0,
product_size_range=(100, 300)
)
# Access results
for primer_pair in result.primer_pairs:
print(f"Forward: {primer_pair.forward.sequence}")
print(f"Reverse: {primer_pair.reverse.sequence}")
print(f"Product: {primer_pair.product_size} bp")
Core Functions
design_pcr_primers()
Design standard PCR primers.
from primerlab import design_pcr_primers
result = design_pcr_primers(
sequence: str, # DNA sequence or path to FASTA
tm_opt: float = 60.0, # Optimal Tm (°C)
tm_range: tuple = (57.0, 63.0), # (min, max) Tm
primer_size: tuple = (18, 20, 25), # (min, opt, max)
product_size_range: tuple = (100, 300),
gc_range: tuple = (40.0, 60.0), # GC content %
num_primers: int = 5, # Number of pairs to return
mask_regions: list = None, # Regions to exclude
output_dir: str = None # Output directory
)
PCRResult object
design_qpcr_assay()
Design qPCR primers with TaqMan probe.
from primerlab import design_qpcr_assay
result = design_qpcr_assay(
sequence: str,
probe_tm_opt: float = 68.0, # Probe Tm (5-10°C > primers)
probe_size_range: tuple = (20, 30),
assay_type: str = "taqman", # or "sybr"
**kwargs # Same as design_pcr_primers
)
QPCRResult object
run_insilico_pcr()
Validate primers against template.
from primerlab import run_insilico_pcr
result = run_insilico_pcr(
forward: str, # Forward primer sequence
reverse: str, # Reverse primer sequence
template: str, # Template sequence or FASTA path
circular: bool = False # Circular template (plasmid)
)
# Check results
if result.success:
for product in result.products:
print(f"Amplicon: {product.size} bp at position {product.start}-{product.end}")
check_offtargets()
Check primer specificity with BLAST.
from primerlab import check_offtargets
result = check_offtargets(
forward: str,
reverse: str,
database: str, # Path to FASTA or BLAST DB
target_id: str = None # Expected target sequence ID
)
print(f"Specificity score: {result.score} ({result.grade})")
print(f"Off-targets found: {result.offtarget_count}")
check_compatibility()
Check primer pair for dimers and hairpins.
from primerlab import check_compatibility
result = check_compatibility(
forward: str,
reverse: str,
probe: str = None # Optional TaqMan probe
)
print(f"Self-dimer ΔG: {result.forward_self_dimer_dg} kcal/mol")
print(f"Hetero-dimer ΔG: {result.hetero_dimer_dg} kcal/mol")
print(f"Compatible: {result.is_compatible}")
Result Objects
PCRResult
result.primer_pairs # List of PrimerPair objects
result.metrics # Design metrics
result.warnings # Any warnings generated
result.output_dir # Path to output files
PrimerPair
pair.forward # Primer object
pair.reverse # Primer object
pair.product_size # Amplicon size (bp)
pair.product_gc # Amplicon GC%
pair.score # Quality score (0-100)
Primer
primer.sequence # 5' to 3' sequence
primer.tm # Melting temperature (°C)
primer.gc # GC content (%)
primer.length # Length (bp)
primer.position # Position on template
primer.self_dimer_dg # Self-dimer ΔG (kcal/mol)
primer.hairpin_dg # Hairpin ΔG (kcal/mol)
QPCRResult
Extends PCRResult with:
result.probe # Probe object (for TaqMan)
result.efficiency_estimate # Predicted efficiency
Configuration from File
Load configuration from YAML:from primerlab import run_workflow_from_config
result = run_workflow_from_config(
config_path="my_config.yaml",
workflow="pcr" # or "qpcr"
)
Error Handling
from primerlab import design_pcr_primers
from primerlab.exceptions import (
ConfigurationError,
SequenceError,
DesignError,
DependencyError
)
try:
result = design_pcr_primers(sequence="ATGC...", tm_opt=60.0)
except ConfigurationError as e:
print(f"Config error: {e.message} (code: {e.error_code})")
except SequenceError as e:
print(f"Sequence error: {e.message}")
except DesignError as e:
print(f"Design failed: {e.message}")
except DependencyError as e:
print(f"Missing dependency: {e.message}")
Batch Processing
from primerlab import batch_design
results = batch_design(
fasta_path="genes.fasta",
config_path="shared_config.yaml",
parallel=4,
continue_on_error=True
)
for seq_id, result in results.items():
if result.success:
print(f"{seq_id}: {len(result.primer_pairs)} pairs found")
else:
print(f"{seq_id}: FAILED - {result.error}")
Full Example
from primerlab import (
design_pcr_primers,
run_insilico_pcr,
check_offtargets,
check_compatibility
)
# 1. Design primers
design = design_pcr_primers(
sequence="path/to/gene.fasta",
tm_opt=60.0,
product_size_range=(150, 250)
)
# 2. Get best pair
best = design.primer_pairs[0]
fwd = best.forward.sequence
rev = best.reverse.sequence
# 3. Validate with in-silico PCR
insilico = run_insilico_pcr(
forward=fwd,
reverse=rev,
template="path/to/gene.fasta"
)
print(f"In-silico: {len(insilico.products)} product(s)")
# 4. Check specificity
offtarget = check_offtargets(
forward=fwd,
reverse=rev,
database="path/to/genome.fasta"
)
print(f"Specificity: {offtarget.grade}")
# 5. Check compatibility
compat = check_compatibility(forward=fwd, reverse=rev)
print(f"Compatible: {compat.is_compatible}")