Checks whether a PCR primer PAIR amplifies only the intended target genome-wide, using pair-aware in-silico PCR (MFEprimer-3.0, UCSC isPcr, NCBI Primer-BLAST) plus a primer3-py 3'-end-stability prefilter, against the correct database. Covers why plain BLAST is the wrong tool (it scores per-primer similarity, blind to 3'-terminal anchoring and to whether the two primers form a convergent amplicon in range), why a single 3'-terminal mismatch suppresses amplification while internal mismatches are tolerated, why intron-spanning RT-qPCR is defeated by processed pseudogenes that force a GENOME search not transcriptome-only, how to read a Primer-BLAST report (empty unintended-products means none passed its filter, not none exist), and that in-silico checking reduces but never replaces empirical validation. Use when confirming specificity, screening off-target amplicons, avoiding paralog/pseudogene hits, or checking SNPs under the 3' end. Design is primer-basics; dimers primer-validation; alignment read-alignment.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
A direct command skips the review prompt. Inspect the source before running it.
Checks whether a PCR primer PAIR amplifies only the intended target genome-wide, using pair-aware in-silico PCR (MFEprimer-3.0, UCSC isPcr, NCBI Primer-BLAST) plus a primer3-py 3'-end-stability prefilter, against the correct database. Covers why plain BLAST is the wrong tool (it scores per-primer similarity, blind to 3'-terminal anchoring and to whether the two primers form a convergent amplicon in range), why a single 3'-terminal mismatch suppresses amplification while internal mismatches are tolerated, why intron-spanning RT-qPCR is defeated by processed pseudogenes that force a GENOME search not transcriptome-only, how to read a Primer-BLAST report (empty unintended-products means none passed its filter, not none exist), and that in-silico checking reduces but never replaces empirical validation. Use when confirming specificity, screening off-target amplicons, avoiding paralog/pseudogene hits, or checking SNPs under the 3' end. Design is primer-basics; dimers primer-validation; alignment read-alignment.
Before using code patterns, verify installed versions match. If versions differ:
Python: pip show primer3-py then help(primer3.calc_end_stability) to check signatures
CLI: mfeprimer --help, isPcr, to confirm subcommands and flags
blastn -help
If code throws ImportError, AttributeError, or TypeError, introspect the installed
package and adapt the example to match the actual API rather than retrying.
Primer Specificity -- Does the PAIR Amplify Only the Target Genome-Wide
"Are these primers specific?" -> Predict every amplicon the primer PAIR would generate against the correct database and confirm only the intended one survives -- because specificity is a property of a convergent, 3'-anchored, in-range PAIR, not of one primer's similarity to the genome.
CLI: mfeprimer -i primers.fa -d genome.fa (or UCSC isPcr, or NCBI Primer-BLAST) predicts amplicons from the pair.
Scope: genome/transcriptome-wide off-target and mispriming assessment of a chosen primer PAIR via in-silico PCR. Designing primers -> primer-basics. Intramolecular dimers/hairpins of the oligos -> primer-validation. General read alignment / building a BLAST DB -> read-alignment/bwa-alignment, database-access/blast-searches.
The Single Most Important Modern Insight -- Plain BLAST Is the Wrong Tool, Because Specificity Is a Property of a Predicted Amplicon, Not One Primer's Similarity
The unit of analysis is the amplicon, not the primer. Amplification needs four things at once: the forward primer anchored, the reverse primer anchored, the two convergent, and the gap within the polymerase's range. BLAST evaluates none of these as a set -- it scores per-query local similarity and stops. So a clean BLAST is false confidence in BOTH directions: a primer with a perfect 5' region but mismatched 3' bases scores a high BLAST hit yet will NOT prime (false off-target), while a primer with internal mismatches but a perfect 3' anchor WILL prime yet may fall below BLAST's word size and be missed (false negative).
The 3' terminus is the governing variable, and BLAST is blind to it. A single 3'-terminal mismatch suppresses extension by roughly 20-100x depending on identity (A:G/G:A/C:C worst, A:A intermediate, G:T/T:G wobble weakest and NOT automatically safe), while internal mismatches are tolerated (Kwok 1990 Nucleic Acids Res 18:999). BLAST maximizes total alignment score and cannot tell a 5' match from a 3' match. Pair-aware tools (Primer-BLAST, MFEprimer, isPcr) use BLAST or a k-mer index only as a candidate FINDER, then apply a pair + 3'-anchor + product-size FILTER.
Search the correct database or the answer is meaningless. For RT-qPCR, intron-spanning primers do NOT escape genomic DNA: processed pseudogenes are intronless retro-copies that typically carry the exon-exon junction (3'-truncated retrocopies may not), so when present they amplify like cDNA -- the search must cover the GENOME (with pseudogenes and alt/unplaced contigs), not the transcriptome only. This is the most common RT-qPCR specificity trap.
Why Plain BLAST Fails, Concretely
BLASTn defaults are wrong for a ~20 nt primer: megablast (the default blastn) seeds at word 28 and so cannot seed a 20-mer at all; plain blastn (word 11) does seed a perfect 20-mer, but its scoring and E-value defaults are tuned for long queries, so short or partial off-target hits fall below threshold; only blastn-short (word 7, short-query scoring) is the appropriate task -- and even then it scores similarity, not amplification. And BLAST evaluates each primer independently against the database; it never asks whether the forward and reverse hits face each other within an amplifiable span. So blastn-short is acceptable only as a quick EXPLORATORY check for gross multi-copy/repeat problems of a single primer, read with the 3' alignment inspected by hand -- never as the final specificity decision.
Tool Taxonomy
Tool / method
Citation
Mechanism / role
When
MFEprimer-3.0
Wang 2019 Nucleic Acids Res 47:W610
k-mer index forbids a mismatch at the first 3' base, then nearest-neighbor scores stable binding; outputs amplicons + Ta/dG + dimer/hairpin modules; CLI/JSON
scriptable local in-silico PCR with thermodynamics; the default programmatic checker
NCBI Primer-BLAST
Ye 2012 BMC Bioinformatics 13:134
BLAST candidate-find + convergent-pair + 3'-mismatch filter; "intended vs unintended products" report; any NCBI organism
tunable-mismatch, report-driven web check
UCSC In-Silico PCR (isPcr)
Kent (UCSC Genome Browser)
exact predicted product(s) of a pair on a chosen assembly, with coordinates
confirm the intended amplicon exists and is unique on a specific UCSC assembly; local batch
blastn -task blastn-short
Altschul 1990 J Mol Biol 215:403
similarity seed at word_size 7
EXPLORATORY single-primer repeat/multi-copy scan only
primer3.calc_end_stability
SantaLucia & Hicks 2004 Annu Rev Biophys 33:415
dG of a primer's 3' end annealing to a site
rank candidate off-target sites by 3'-anchor strength (the BLAST-blind variable)
Decision Tree by Scenario
Scenario
Recommended
Why
Any qPCR / quantitative assay
MFEprimer or Primer-BLAST against genome + transcriptome
off-targets and gDNA corrupt the quantitative number
Intron-spanning RT-qPCR
search the GENOME (pseudogenes), not transcriptome-only
processed pseudogenes usually carry the junction and amplify from gDNA
Genotyping / allele-specific
weight the 3' end; check SNPs under the anchor (dbSNP/gnomAD)
the 3'-terminal base is the whole assay (Kwok 1990)
Confirm intended amplicon on a UCSC assembly
UCSC isPcr
exact product + genomic coordinates on that assembly
Tunable mismatch sensitivity + report
Primer-BLAST (loosen/tighten the 3'-mismatch filter)
stress-test how robust specificity is
Quick single-primer repeat scan
blastn-short word_size 7, dust off
gross multi-copy triage only; never final
Multiplex (N primers)
run in-silico PCR over the POOLED primer set + all-pairs cross-dimer
the pooled set enumerates cross-pair amplicons (Fwd_A + Rev_B, convergent and in-range), which per-pair checks miss; Primer-BLAST does NOT check inter-pair dimers either (O(N^2))
Eukaryotic target with gene families / segmental duplications
pair-level genome + transcriptome search
paralogs in conserved exons amplify multiple members; segmental duplications / recent CNV families (e.g. SMN1/SMN2) give two near-identical loci a pair cannot distinguish
Default when uncertain: run pair-aware in-silico PCR (MFEprimer or Primer-BLAST) against the genome AND, for RT work, the transcriptome; require exactly one intended amplicon, no qualifying off-target, and 3' ends clear of common SNPs -- then still validate empirically.
Run In-Silico PCR on the Pair
Goal: Enumerate every amplicon the pair would make against the correct database and confirm only the intended one survives.
Approach: Build the database index once, run the pair-aware tool, and read the predicted products; require a single on-target amplicon of expected size and no qualifying off-target. The commands below need the tool binaries and a genome/transcriptome FASTA, so they are NOT offline-spot-runnable here -- verify flags with --help against the installed version.
# MFEprimer-3.0 (local, thermodynamic; build the k-mer index once, then run)
mfeprimer index -i genome.fa
mfeprimer -i primers.fa -d genome.fa -o specificity.txt # add --json for pipeline parsing; verify flags with: mfeprimer --help# UCSC isPcr (exact products on one assembly; primers.txt = "name<TAB>FWD<TAB>REV" per line)
isPcr genome.2bit primers.txt stdout -out=fa
# blastn-short: EXPLORATORY single-primer repeat scan ONLY (not a specificity verdict)
blastn -task blastn-short -word_size 7 -dust no -query primers.fa -db genome -outfmt 6
NCBI Primer-BLAST (web, any organism): paste the pair, pick the organism and a database that includes the genome (not "RefSeq mRNA only" for RT-qPCR), set the max product size, and read the report.
Rank Off-Target Sites by 3'-End Anchoring (offline)
Goal: Show why a candidate off-target site that BLAST would surface may or may not actually prime, using the 3'-anchor thermodynamics BLAST ignores.
Approach: For each candidate site (the complementary strand the primer would anneal to), contrast the overall duplex dG (calc_heterodimer, what a similarity search tracks) with the 3'-anchor dG (calc_end_stability); a 3'-terminal mismatch keeps the overall dG strong but collapses the anchor, so the site will not prime despite the similarity.
import primer3
COMP = str.maketrans('ACGT', 'TGCA')
primer = 'GTCTCCTCTGACTTCAACAGCG'
site = primer.translate(COMP)[::-1] # the strand the primer anneals to; primer 3' base pairs site[0]defmut(s, i):
return s[:i] + ('A'if s[i] != 'A'else'C') + s[i + 1:]
sites = {'on-target': site, 'internal mismatch': mut(site, len(site) // 2), '3-prime mismatch': mut(site, 0)}
for label, s in sites.items():
overall = primer3.calc_heterodimer(primer, s).dg / 1000# what overall similarity tracks
anchor = primer3.calc_end_stability(primer, s).dg / 1000# the 3'-anchor BLAST ignoresprint(f'{label}: overall dG={overall:.2f} 3-prime anchor dG={anchor:.2f} kcal/mol') # 3' mismatch: overall stays strong, anchor collapses
Per-Method Failure Modes
"BLAST was clean, so it is specific"
Trigger: Treating a per-primer BLAST result as a specificity verdict. Mechanism: BLAST scores similarity per primer, ignores 3'-anchoring and pairing. Symptom: primers pass BLAST but amplify off-target on the bench. Fix: use pair-aware in-silico PCR (MFEprimer / Primer-BLAST / isPcr).
Intron-spanning RT-qPCR checked against the transcriptome only
Trigger: Searching "RefSeq mRNA" and concluding gDNA-safe. Mechanism: processed pseudogenes are intronless and carry the junction, amplifying like cDNA. Symptom: a genomic amplicon at the cDNA size; no-RT control is positive. Fix: search the genome (with pseudogenes); keep DNase + no-RT control.
Misreading an empty Primer-BLAST "unintended" section
Trigger: Treating an empty section as proof of uniqueness. Mechanism: Primer-BLAST ignores any off-target with >=6 total mismatches OR >=2 mismatches in the last 5 bp at the 3' end -- equivalently it LISTS only hits with <6 total and <2 near the 3', so an empty section means "none my model predicts will amplify," not "none similar exist." Symptom: false confidence. Fix: loosen the mismatch settings to stress-test, and combine with isPcr.
Wrong / too-narrow database
Trigger: Searching primary assembly only, or one chromosome, or a single transcript set. Mechanism: off-targets on alt/unplaced contigs, repeats, or paralog transcripts are excluded. Symptom: "unique" in-silico, multiple bands in vitro. Fix: match the database to the assay (genome + transcriptome for RT-qPCR; include alt/unplaced contigs).
SNP/indel under the 3' end
Trigger: Validating against the reference only. Mechanism: an individual carrying a variant under the 3' anchor fails to amplify that allele (Kwok 1990 Nucleic Acids Res 18:999). Symptom: allele dropout in some samples. Fix: check primer 3' ends against dbSNP/gnomAD common variants and redesign (primer-basics).
Checking a multiplex pair-by-pair instead of pooled
Trigger: Per-pair Primer-BLAST/in-silico PCR on a multiplex set. Mechanism: two off-target classes only appear in the POOLED set -- inter-pair cross-dimers (O(N^2), unexamined) and cross-pair amplicons where one pair's forward meets another pair's reverse convergently and in-range. Symptom: one channel silently fails or an unexpected band appears. Fix: run in-silico PCR over the pooled primer set AND all-pairs cross-dimer screening (primer-validation), not pair-by-pair.
Quantitative Thresholds
Threshold
Source
Rationale
Primer-BLAST ignores off-target if >=6 total mismatches OR >=2 in last 5 bp at 3'
Ye 2012 BMC Bioinformatics 13:134
encodes the 3'-anchor biology BLAST lacks (its actual default filter)
In-Silico Reduces, It Does Not Replace, Empirical Validation
A passing in-silico check removes most bad designs but does not license an assay. Confirm empirically: a gradient PCR to find the annealing temperature giving a single product; a single band on a gel (or single fragment on a TapeStation); for SYBR qPCR a single sharp melt peak with no low-Tm dimer shoulder; and Sanger sequencing of the product to prove identity (a same-size off-target is invisible on a gel). State this honestly -- "Primer-BLAST said it is specific" is not validation of a quantitative assay.
Common Errors
Error / symptom
Cause
Solution
Primers pass BLAST, fail in vitro
per-primer similarity, not pair amplicon
run pair-aware in-silico PCR
RT-qPCR amplifies gDNA despite intron-spanning
processed pseudogene usually carries the junction
search the genome; DNase + no-RT control
Empty Primer-BLAST off-targets but multiple bands
filter hid a 3'-anchored off-target / wrong DB
loosen mismatch settings; search the genome incl. alts
isPcr returns nothing for the intended pair
wrong assembly / over-strict default match
confirm the assembly and target presence
mfeprimer errors on the database
index not built
run mfeprimer index -i db.fa first
Allele dropout in some individuals
SNP under the 3' end
check 3' ends vs gnomAD; redesign (primer-basics)
References
Ye J, Coulouris G, Zaretskaya I, et al. 2012. Primer-BLAST: a tool to design target-specific primers for polymerase chain reaction. BMC Bioinformatics 13:134.
Wang K, Li H, Xu Y, et al. 2019. MFEprimer-3.0: quality control for PCR primers. Nucleic Acids Res 47:W610-W613.
Kwok S, Kellogg DE, McKinney N, et al. 1990. Effects of primer-template mismatches on the polymerase chain reaction: human immunodeficiency virus type 1 model studies. Nucleic Acids Res 18:999-1005.
SantaLucia J Jr, Hicks D. 2004. The thermodynamics of DNA structural motifs. Annu Rev Biophys Biomol Struct 33:415-440.
Altschul SF, Gish W, Miller W, et al. 1990. Basic local alignment search tool. J Mol Biol 215:403-410.
Related Skills
primer-basics - Design (or redesign) primers when specificity fails
primer-validation - Intramolecular dimers/hairpins of the chosen oligos
qpcr-primers - qPCR assays where specificity and gDNA exclusion are mandatory
read-alignment/bwa-alignment - Align candidate amplicons / reads to a genome
database-access/blast-searches - Build/query BLAST databases for candidate finding