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").

Show output
12-345678910




-111213141516171819










-20



21




















-22232425







26




































-27
library(DECIPHER)library(RSQLite) # load sequences into a databasefas <- "~/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 descriptionx <- dbGetQuery(dbConn,"select description from Seqs")$descriptionns <- 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`) whereexists (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_aligned1 1 1 27 1 272 2 2 28 2 283 3 3 29 3 294 4 4 30 4 305 5 5 31 5 316 6 6 32 6 32 misprime width id coverage1 FALSE 1594 Acinetobacter 12 FALSE 1594 Acinetobacter 13 FALSE 1594 Acinetobacter 14 FALSE 1594 Acinetobacter 15 FALSE 1594 Acinetobacter 16 FALSE 1594 Acinetobacter 1 groupCoverage target_site1 1 AGAGTTTGATCATGGCTCAGATTGAAC2 1 GAGTTTGATCATGGCTCAGATTGAACG3 1 AGTTTGATCATGGCTCAGATTGAACGC4 1 GTTTGATCATGGCTCAGATTGAACGCT5 1 TTTGATCATGGCTCAGATTGAACGCTG6 1 TTGATCATGGCTCAGATTGAACGCTGG primers <- DesignPrimers(tiles,identifier="Streptococcus", # target groupminProductSize=50, # base pairsnumPrimerSets=1) # candidates to designStreptococcus (1325 candidate primers): |========================================| 100%
Determining Best Primer Pair: |========================================| 100%
Time difference of 14 secs
head(primers) identifier start_forward start_reverse1 Streptococcus 533 1289 product_size start_aligned_forward1 757 553 start_aligned_reverse permutations_forward1 1336 1 permutations_reverse score_forward1 1 -2.87986.... score_reverse score_set forward_primer.11 -0.00023.... 0 CCGCGGTAATACGTAGGTCC forward_primer.2 forward_primer.31 forward_primer.4 reverse_primer.11 GATTAGCTTGCCGTCACCGG reverse_primer.2 reverse_primer.31 reverse_primer.4 forward_efficiency.11 0.8161955 forward_efficiency.2 forward_efficiency.31 NA NA forward_efficiency.4 reverse_efficiency.11 NA 0.8857364 reverse_efficiency.2 reverse_efficiency.31 NA NA reverse_efficiency.4 forward_coverage.11 NA 1 forward_coverage.2 forward_coverage.31 NA NA forward_coverage.4 reverse_coverage.11 NA 1 reverse_coverage.2 reverse_coverage.31 NA NA reverse_coverage.4 mismatches_forward1 NA mismatches_reverse1 Porphyromonas (0.0232%,GATTAGCTTGCCGTCACCGG/CCGGTGACTGGGGCTAAGTC) mismatches_set dbDisconnect(dbConn)