无论是芯片实验还是深度测序,高通量数据分析后都需要进行实验验证,其中PCR是必不可少的。PCR引物设计方法和软件很多,选用哪种完全取决于个人习惯和好恶,没有对错,唯一标准就是能否完成实验。这里我们用R语言整合Primer3和NCBI-BLAST进行批量引物设计。

1 Primer3 使用简介

Primer3 是PCR引物设计软件,Debian下可以直接使用新立得查找安装或者用apt-get安装。Windows下安装需要编译,如果不想或者不能自己编译就安装EMBOSS,它帮你搞好了,在安装目录下可以找到 primer3_core.exe 和 primer32_core.exe 。发表论文可以引用下面文献:

Untergrasser A, Cutcutache I, Koressaar T, Ye J, Faircloth BC, Remm M, Rozen SG (2012) Primer3 - new capabilities and interfaces. Nucleic Acids Research40(15):e115
Koressaar T, Remm M (2007) Enhancements and modifications of primer design program Primer3Bioinformatics 23(10):1289-91

1.1 Primer3 命令行参数

命令行相当简单:

primer3_core 参数们

参数都是可选的,包括:

参数 含义
-format_output 产生易于人读的输出结果,否则产生易于机读输出(用于编程)
-io_version=n n为3或4(默认),n=3表示兼容低版本
-p3_settings_file=<file_path> 指定p3的设置文件,用于全局参数设置
-echo_settings_file 回显p3设置文件的内容
-strict_tags 要求严格的标签
-output=<file_path> 指定结果输出文件
-error=<file_path> 指定错误信息保存的文件名
input_file 包含序列相关引物设计详细信息的文件

1.2 Primer3参数设置文件

Primer3引物设计的一些详细参数通过“标签”进行设置。与序列相关的标签名称以“SEQUENCE”开头,与引物相关的标签以“PRIMER”开头。PRIMER标签可以用于所有模板,所以又称为全局标签。标签使用 p3_settings_file 和 input_file 文件设置。

p3_settings_file 的格式为:

Primer3 File - http://primer3.sourceforge.net
P3_FILE_TYPE=settings
全局标签名=参数值
=

前两行和最后的等号是必需的。标签设置行可以有很多,无顺序,但每个标签的设置内容必需在一行内。 p3_settings_file 只能设置 PRIMER_XXX 等全局标签。

input_file 的格式为:

标签名=参数值
=

对于绝大多数的任务来说 SEQUENCE_TEMPLATE (模板序列)是必需的参数。最后的等号也必需,表示一个序列的参数设定结束。一个 input_file 可以设置很多序列的标签,按上面的格式重复即可。多序列任务还应该设置序列标识 SEQUENCE_ID 标签。 input_file 也可以设置 PRIMER_XXX 类标签。

标签的具体设置请参考Primer3的使用帮助。

NCBI BLAST 就不用多说了,安装也简单,在引物设计结束前进行BLAST以保证引物的基因特异性。

2 高通量引物设计

下面的R代码包含引物设计的几个步骤:

  • 读取FASTA格式的模板序列文件
  • 设置Primer3引物设计的参数并产生引物对(参数主要针对qPCR实验,产物长度70-120bp,其他参数请看 p3.para 变量内容)
  • 解析Primer3输出结果
  • 对引物进行本地BLAST比对
  • 解析BLAST输出结果
  • 筛选引物并以CSV文件输出
library(tcltk)
library(Biostrings)
#* 读取FASTA格式序列
seqs.fasta.file <- tk_choose.files(default = "~//", multi = FALSE, caption = "Sequence file")
seqs <- readDNAStringSet(seqs.fasta.file)
seqs.path <- dirname(seqs.fasta.file)
#* 设置Primer3参数文件 p3_settings_file
p3.paras <- list(PRIMER_TASK="generic",PRIMER_NUM_RETURN=1000,PRIMER_DNA_CONC=500,PRIMER_DNTP_CONC=0.8,PRIMER_SALT_CORRECTIONS=1,PRIMER_SALT_MONOVALENT=50,PRIMER_SALT_DIVALENT=1.5,PRIMER_MAX_END_GC=2,PRIMER_MIN_GC=35,PRIMER_MAX_GC=65,PRIMER_MIN_TM=58,PRIMER_MAX_TM=64,PRIMER_OPT_TM=60,PRIMER_MIN_SIZE=18,PRIMER_MAX_SIZE=26,PRIMER_OPT_SIZE=20,PRIMER_PAIR_MAX_DIFF_TM=2,PRIMER_PRODUCT_SIZE_RANGE="70-120",PRIMER_PICK_ANYWAY=1)
p3.paras <- paste(names(p3.paras), '=', p3.paras, sep='')
p3.paras <- c("Primer3 File - http://primer3.sourceforge.net","P3_FILE_TYPE=settings",p3.paras,"=")
p3.settings.file <- file.path(seqs.path, "p3.settings.file")
writeLines(p3.paras, p3.settings.file)
tmpfiles <- p3.settings.file
#* 设置Primer3参数文件 input_file
seq.ids <- paste("SEQUENCE_ID=", names(seqs), sep='')
seq.templates <- paste("SEQUENCE_TEMPLATE=", as.character(seqs), sep='')
content.input.file <- paste(seq.ids, seq.templates, '=', sep="\n")
input.file <- file.path(seqs.path, "p3.input.file")
writeLines(content.input.file, input.file)
tmpfiles <- c(tmpfiles, input.file)
#* 运行 Primer3 获取引物
output.file <- file.path(seqs.path, "p3.temp1")
p3.settings <- paste("-p3_settings_file=", p3.settings.file, sep='')
p3.output <- paste("-output=", output.file, sep='')
cmd <- paste("primer3_core", p3.settings, p3.output, input.file)
system(cmd)
tmpfiles <- c(tmpfiles, output.file)
#* 解析 Primer3 输出文件
#  下面只保留了引物名称、序列和TM值,需要更多参数请自己设置
p3.results <- readLines(output.file)
group.start <- grep("SEQUENCE_ID", p3.results)
group.end <- c(group.start[-1]-1, length(p3.results))
seq.ids <- names(seqs)
for(i in 1:length(seq.ids)){sel <- group.start[i]:group.end[i]p3.results[sel] <- paste(seq.ids[i], p3.results[sel], sep="_")
}
writeLines(p3.results, output.file)
primers.seq <- p3.results[grep("(LEFT|RIGHT)_[0-9]+_SEQUENCE=", p3.results)]
primers.name <- gsub("(.+)_PRIMER(_[^=]+)_SEQUENCE.*", "\\1\\2", primers.seq)
primers.name <- gsub("LEFT", "L", primers.name)
primers.name <- gsub("RIGHT", "R", primers.name)
primers.seq <- gsub(".+=(.+)", "\\1", primers.seq)
primers.tm <- p3.results[grep("(LEFT|RIGHT)_[0-9]+_TM=", p3.results)]
primers.tm <- gsub(".+=(.+)", "\\1", primers.tm)
primers <- data.frame(name=primers.name, seq=primers.seq, TM=primers.tm)
#* BLAST 分析,输出便于程序解析的 m8 格式
blast.in <- file.path(seqs.path, "blast.in")
xxx <- paste(">", primers.name, sep='')
xxx <- paste(xxx, primers.seq, sep="\n")
writeLines(xxx, blast.in)
rm(xxx)
tmpfiles <- c(tmpfiles, blast.in)
blast.db <- tk_choose.files(default = "~//", multi = FALSE, caption = "BLAST database")
blast.db <- sub("(.+)\\.[^\\.]+", "\\1", blast.db)
blast.out <- file.path(seqs.path, "blast.out")
cmd <- paste("blastall -p blastn -e 10000 -F F -m 8 -a 4 -i",blast.in, "-o", blast.out, "-d", blast.db)
system(cmd)
tmpfiles <- c(tmpfiles, blast.out)
#* 解析 BALST 输出结果。 m8 结果共有12列,分别为:
# 1. Query id
# 2. Subject id
# 3. % identity
# 4. alignment length
# 5. mismatches
# 6. gap openings
# 7. q.start
# 8. q.end
# 9. s.start
# 10. s.end
# 11. e-value
# 12. bit score
# 这里我们仅要求 q.start=1, q.end=引物长度 的比对结果有且仅有一个,即目标序列的匹配
blast.result <- read.table(blast.out, stringsAsFactors = FALSE)[,c(1,7,8)]
sel <- blast.result[,2]==1
blast.result <- blast.result[sel,]
primers.n <- length(primers.name)
sel <- rep(FALSE, primers.n)
for(i in 1:primers.n){sel.sub <- blast.result[,1]==primers.name[i]blast.sub <- blast.result[sel.sub,3]max.qend <- max(blast.sub)blast.sub <- blast.sub[blast.sub==max.qend]if(length(blast.sub)==1 & max.qend==nchar(primers.seq[i]))sel[i] <- TRUE
}
primers <- primers[sel,]
#* 删除临时文件,输出结果
file.remove(tmpfiles)
result.file <- file.path(seqs.path, "primer3.results.csv")
write.csv(primers, result.file, quote=FALSE, row.names=FALSE)


Author: ZGUANG@LZU

Created: 2013-07-10 三 18:42

Emacs 24.3.1 (Org mode 8.0.5)

Validate XHTML 1.0

在R中使用Primer3和NCBI-BLAST进行高通量引物设计相关推荐

  1. MPB:南农韦中组-​​根际细菌产铁载体能力的高通量检测

    为进一步提高<微生物组实验手册>稿件质量,本项目新增大众评审环节.文章在通过同行评审后,采用公众号推送方式分享全文,任何人均可在线提交修改意见.公众号格式显示略有问题,建议电脑端点击文末阅 ...

  2. iMeta | 南京农业大学韦中组开发多病原生物污染高通量快检平台

    点击蓝字 关注我们 MBPD:践行一体化健康的多种病原细菌检测流程 iMeta主页:http://www.imeta.science 研究论文 ● 原文链接DOI: https://doi.org/1 ...

  3. #ncbi #blast

    何为序列比对? 为确定两个或多个序列之间的相似性以至于同源性,而将它们按照一定的规律排列.将两个或多个序列排列在一起,标明其相似之处.序列中可以插入间隔(通常用短横线"-"表示). ...

  4. NCBI引物设计、检验引物特异性、检索基因序列、BLAST

    B站upLily的储物间 NCBI 引物设计及检验引物特异性 primer-BLAST设计引物 进入primer-BLAST 1.进入ncbi中的BLAST 2.下拉选择primer-BLAST pr ...

  5. 简单介绍一下R中的几种统计分布及常用模型

    统计学上分布有很多,在R中基本都有描述.因能力有限,我们就挑选几个常用的.比较重要的简单介绍一下每种分布的定义,公式,以及在R中的展示. 统计分布每一种分布有四个函数:d――density(密度函数) ...

  6. 《机器学习与数据科学(基于R的统计学习方法)》——2.11 R中的SQL等价表述...

    本节书摘来异步社区<机器学习与数据科学(基于R的统计学习方法)>一书中的第2章,第2.11节,作者:[美]Daniel D. Gutierrez(古铁雷斯),更多章节内容可以访问云栖社区& ...

  7. csv文件示例_如何在R中使用数据框和CSV文件-带有示例的详细介绍

    csv文件示例 Welcome! If you want to start diving into data science and statistics, then data frames, CSV ...

  8. python随机森林筛选变量_变量重要性随机森林在R中是否有类似Python的rfpimp来分组共线变量...

    早上好 我在R(randomForest,caret)中的随机林实现中使用置换重要性对变量进行排序.所有变量都是连续的,结果是明确的.在 为了处理共线特性Terence Parr,Jeremy How ...

  9. 在R中子集化数据框的5种方法

    由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文中链接. 通常,我们在使用大型数据集时,只会对其中的一小部分感兴趣,用以进行特定分析. 那么,我们应该如 ...

  10. 使用 conda 和 Jupyter 在 R 中实现数据科学分析

    前两篇文章我们介绍了 Jupyter Notebook 的一些基础用法,今天我们来介绍一下如何使用 conda 和 Jupyter 在 R 中开始一个数据科学项目. 在开始之前我们先要明确一个概念:K ...

最新文章

  1. 商汤科技汤晓鸥:其实不存在AI行业,唯一存在的是“AI+“行业
  2. 安卓连接linux软件,利用 Telnet 无线控制安卓手机 无需 Root
  3. OpenSession与getCurrentSession的区别
  4. java collection join_java – @ElementCollection @CollectionTable在一对多映射中
  5. ActionBarDisplayOptions展示选项的菜单
  6. Ubuntu中的launcher
  7. oracle11gR2静默安装
  8. employee setup in Organization unit
  9. C++判断进程id是否存在
  10. [HTML5]使用Box2dWeb模拟飞行箭矢
  11. java NIO 复习
  12. 自动控制原理(第七版)胡寿松 课本
  13. 我的世界服务器发消息有符号,我的世界彩色字体符号
  14. 用Python自动清理系统垃圾,再也不用360安全卫士了
  15. 【转】脸识别技术发展及实用方案设计
  16. Java+Swing+MySQL机票预订和管理系统
  17. PLSQL Developer13.0.4安装破解教程
  18. Vue2.0的页面模板
  19. 为什么计算机不能进行十进制,计算机为什么用二进制而不是十进制?
  20. 流程设计器与表单设计器(Wxd.WF,BPM.Foundation,Wxwinter.WF 升级用)

热门文章

  1. 【深度学习】基于卷积神经网络(tensorflow)的人脸识别项目(四)
  2. 为什么不建议将Abaqus汉化使用?
  3. java读取摄像头视屏流,Java 摄像头视频获取
  4. rpm -ivh rpm包名
  5. 基于Go的挑战程序设计竞赛的进化之路①
  6. 一年披露落地应用27项 IBM区块链只为反哺云业务?
  7. 计算机思维导论第二讲答案,大学计算机计算思维导论第2讲习题及解析
  8. 高斯光束matlab 仿真,高斯光束的matlab仿真
  9. 国外卫星地图mapbox的基本操作
  10. Bypass功能及原理介绍