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