DECIPHER logo

  • Alignment▸
  • Classification▸
  • Homology▸
  • Oligo Design▾
  • Design Signatures
  • Design Primers
  • Design Probes
  • ProbeMelt
  • Phylogenetics▸
  • Tutorials▸
  • Home
  • News
  • Downloads
  • Contact
  • Citations

Design PCR Primers

Use DECIPHER's DesignPrimers function to design the optimal set of PCR primers for targeting one group of DNA sequences in the presence of many non-target groups, as described in:

ES Wright et al. (2014) "Exploiting Extension Bias in PCR to Improve Primer Specificity in Ensembles of Nearly Identical DNA Templates." Environmental Microbiology, doi:10.1111/1462-2920.12259.

For an in-depth tutorial, see the "Design Group-Specific Primers" vignette on the Documentation page.

How do I design PCR primers?

First it is necessary to install DECIPHER and load the library in R. Next, set the "fas" variable to the path to the FASTA file of aligned sequences (e.g., "~/mySeqs.fas").

Hide output
library(DECIPHER)
> library(RSQLite)
> 
> # load sequences into a database
> fas <- "~/mySeqs.fas"
> dbConn <- dbConnect(SQLite(),
+ ":memory:")
> Seqs2DB(fas,
+ type="FASTA",
+ dbFile=dbConn,
+ identifier="")
Reading FASTA file chunk 1

118 total sequences in table Seqs. Time difference of 0.04 secs
> > # identify the sequences based on their description > x <- dbGetQuery(dbConn, + "select description from Seqs")$description > ns <- unlist(lapply(strsplit(x, + split=" "), + FUN=`[`, + 1L)) > Add2DB(myData=data.frame(identifier=ns), + dbFile=dbConn) Expression: update `Seqs` set `identifier` = (select `temp`.`identifier` from `temp` where `temp`.`row_names` = `Seqs`.`row_names`) where exists (select `temp`.`identifier` from `temp` where `temp`.`row_names` = `Seqs`.`row_names`)
Added to table Seqs: "identifier".
Time difference of 0.01 secs
> > tiles <- TileSeqs(dbConn) |========================================| 100%
Time difference of 13.63 secs
> head(tiles) row_names start end start_aligned end_aligned 1 1 1 27 1 27 2 2 2 28 2 28 3 3 3 29 3 29 4 4 4 30 4 30 5 5 5 31 5 31 6 6 6 32 6 32 misprime width id coverage 1 FALSE 1594 Acinetobacter 1 2 FALSE 1594 Acinetobacter 1 3 FALSE 1594 Acinetobacter 1 4 FALSE 1594 Acinetobacter 1 5 FALSE 1594 Acinetobacter 1 6 FALSE 1594 Acinetobacter 1 groupCoverage target_site 1 1 AGAGTTTGATCATGGCTCAGATTGAAC 2 1 GAGTTTGATCATGGCTCAGATTGAACG 3 1 AGTTTGATCATGGCTCAGATTGAACGC 4 1 GTTTGATCATGGCTCAGATTGAACGCT 5 1 TTTGATCATGGCTCAGATTGAACGCTG 6 1 TTGATCATGGCTCAGATTGAACGCTGG > > primers <- DesignPrimers(tiles, + identifier="Streptococcus", # target group + minProductSize=50, # base pairs + numPrimerSets=1) # candidates to design Streptococcus (1325 candidate primers): |========================================| 100%
Determining Best Primer Pair: |========================================| 100%
Time difference of 14 secs
> head(primers) identifier start_forward start_reverse 1 Streptococcus 533 1289 product_size start_aligned_forward 1 757 553 start_aligned_reverse permutations_forward 1 1336 1 permutations_reverse score_forward 1 1 -2.87986.... score_reverse score_set forward_primer.1 1 -0.00023.... 0 CCGCGGTAATACGTAGGTCC forward_primer.2 forward_primer.3 1 forward_primer.4 reverse_primer.1 1 GATTAGCTTGCCGTCACCGG reverse_primer.2 reverse_primer.3 1 reverse_primer.4 forward_efficiency.1 1 0.8161955 forward_efficiency.2 forward_efficiency.3 1 NA NA forward_efficiency.4 reverse_efficiency.1 1 NA 0.8857364 reverse_efficiency.2 reverse_efficiency.3 1 NA NA reverse_efficiency.4 forward_coverage.1 1 NA 1 forward_coverage.2 forward_coverage.3 1 NA NA forward_coverage.4 reverse_coverage.1 1 NA 1 reverse_coverage.2 reverse_coverage.3 1 NA NA reverse_coverage.4 mismatches_forward 1 NA mismatches_reverse 1 Porphyromonas (0.0232%,GATTAGCTTGCCGTCACCGG/CCGGTGACTGGGGCTAAGTC) mismatches_set > > dbDisconnect(dbConn)