拼接两条有重叠区域的核酸序列
目的
27F
和1492R
是细菌 16S 核糖体基因的一对通用引物。利用这对引物扩增DNA提取物,然后进行Sanger法测序,能获得两条长度约为 800+ 的 DNA 序列。根据正链(+)和负链(-)序列之间的重叠部分拼接,就能拼接出一条16S rRNA 基因序列
。- F = forward,R = Reverse,数字 = 结合的位置。
- 27F:
TACGGYTACCTTGTTACGACTT
。 - 1492R:
AGAGTTTGATCMTGGCTCAG
。
- 因为序列书写和合成都是认从
5-P端到3'-OH端
,所以(-)链反向之后,才能与(+)链互补。而要从(-)推出对应的(+)链部分,需要进行反补(Reverse complement)
。 拼接
的原理:利用局部联配(local alignment)
找到重叠的区域(overlap)
。
从测序到拼接过程示意图
引物与序列
DNA双链模板:
5' ATGCAGGGGAAACATGATTCAGGAC 3' (+) 3' TACGTCCCCTTTGTACTAAGTCCTG 5' (-)
- 正向引物 Forward primer:
ATG
; 反向引物 Reverse primer:
GTC
。
引物与序列结合
- F引物
ATG
,与(-)链结合,ATG
符合5'到3'的方向,延伸得到(+)链
。 - R引物
GTC
,与(+)链结合,G在5'端,从G往C合成 ,得到(-)链
。CTG(R) 5' ATGCAGGGGAAACATGATTCAGGAC 3' (+) 3' TACGTCCCCTTTGTACTAAGTCCTG 5' (-)ATG(F)
测序结果
- 按惯例,序列写作从5'端到3'端。
(+)链还是正的:
5' ATGCAGGGGAAACATGATTCAGGAC 3' (+)模板 5' ATGCAGGGGAAACATG————————— 3' (+)合成结果
- (-)链的结果反向书写:
3' TACGTCCCCTTTGTACTAAGTCCTG 5' (-)模板 5' GTCCTGAATCATGTTTCCCCTGCAT 3' (-)模板反向 5' GTCCTGAATCATGTTT————————— 3' (-)合成结果
(-)链反补推出(+)链部分:
5' GTCCTGAATCATGTTT————————— 3' (-)合成结果 3' —————————TTTGTACTAAGTCCTG 5' (-)反向 5' —————————AAACATGATTCAGGAC 3' (-)反向,碱基互补 = (+)
根据重叠区域拼接,也相当于局部联配,
Overlap = local alignment
。5' ATGCAGGGGAAACATG————————— 3' (+)合成结果 5' —————————AAACATGATTCAGGAC 3' (-)反向,碱基互补 = (+) 5' ATGCAGGGGAAACATGATTCAGGAC 3' (+)合并结果 consensus
工具
软件
- 使用
R
中的 DECIPHER 包完成:- 导入序列;
- 反补序列;
- 联配;
- 生成合并序列;
- 导出序列。
安装
- 安装
R > 3.5.0
; RScript
能在CMD
中运行 = R的环境变量设置正确。R
中已经安装 DECIPHER。- 详细安装步骤请参考 link
步骤
1 准备
- 新建文件夹,放入:
- 代码
merge2Seqs.v1.R
fasta
格式的正反向序列。- seq1.fas
seq2.fas
不是要求文件后缀为
fasta
,而是文件的内容符合每条序列第一行为>
开头。
- 代码
2 运行
- 打开
CMD
。 - 进入文件夹所在路径。
cd your_path
- 运行代码帮助
RScript merge2Seqs.v1.R -help
- 运行代码
RScript merge2Seqs.v1.R seq1.fas seq2.fas title
title如果不提供,默认为consensus sequence。
结果说明
- 文件夹中生成合并后的序列.
- 屏幕显示联配的详情,注意检查重叠区域的
长度
,错配的个数
,序列总长度
,结果中是不是有简并碱基
。通常错配的位置在个位数。 - 只有两条序列无法确认哪一条是正确的,
- 如果是通过向一条链插入空白来配对,则合并的序列中包括这个位点,
如果两条序列上的位点无法匹配,该序列里面会用简并碱基表示。
例如:Seq1: ATC-A ATCGA Seq2: ATCCA ATCCA Con: ATCCA ATCSA
- 简并碱基表示方法:
A : A C : C G : G T : T M : AC R : AG W : AT S : CG Y : CT K : GT V : ACG H : ACT D : AGT B : CGT N : ACGT
- 如果由于序列质量导致错配
mismatch
过多,需要自行调节原始序列的裁剪范围,重新拼接。- 通常Sanger测序法结果的前15-40bp的质量较差,全长约为700-900bp。
- 但是根据实际经验,即使完全不掐头去尾,也能拼出错配低至1的序列,且与基因组中的16SrRNA基因序列完全一致。
所以,一定检查配对情况!
更新
- 添加了代码输出鉴别碱基的数量。
- 修改了
gapopen = -5 gapextension = -2
在AlignSeqs()
函数部分- 发现如果不改会出现和
pairwiseAlignment
结果不一样。 - 合并
2W06
的正反向结果时发现,它有10个错配(pairwiseAlignment
),结果里有10个简并碱基(AlignSeqs()
),但一个是插入空白,一个是插入空白加错配。 - 但是这个例子还是很奇怪,最后虽然中间是对的但是两头比 27F 和 1492R 延伸得还要多
1608
,中间却又是正确的。 - 使用两个因为联配后发现的确是引物前后的序列也被测出来了。没有原始数据,所以不知道这是怎么来的,基因组里面的全长16S也只有
1525bp
。
- 发现如果不改会出现和
下一步
- 因为使用了两个联配,一个用来生成合并序列,一个用来输出联配结果,而我现在的知识无法保证两个联配函数的行为一致,我最好能自己把
AlignSeqs()
的结果输出出来。
代码
- 新建文本文件(.txt)改名为
merge2Seqs.v1.R
,复制粘贴下面的代码。注意系统是否显示后缀。
# @author Zheng Weishuang
# @purpose 合并两条正反向测序的序列
# @date 20181119options(encoding = "UTF-8")# 传递参数
args = commandArgs(trailingOnly=TRUE)if (as.numeric(R.Version()$major) < 3 | as.numeric(R.Version()$minor) <5) {cat("\n======================================\n(1)R version currently loaded is older than 3.5.0\nCheck the PATH, or upgrade R.======================================\n\n")
}# 无参数传递时提醒使用帮助
if(length(args) == 0){cat("\n======================================\nType Rscript merge2Seqs.R -help for help\n======================================\n\n")stop()
}# 运行帮助
if(args[1] == '-help'){cat("\n======================================\n(1)R version > 3.5.0\n(2)Open CMD (Windows) or Terminal (Mac),loacate the path for merge2Seqs\n(3)Script eample: Rscript --vanilla merge2Seqs.R file1 file1 title\n(4)sequences must be in fasta format\n======================================\n\n")stop()
}# 如果在当前文件夹找不到序列
if(!file.exists(args[1])|!file.exists(args[2])){cat("\n======================================\nCan not find the sequences. \nWrong path or wrong file names。\n======================================\n\n")stop()
}# 加载 DECIPHER
file <- try(suppressPackageStartupMessages(library(DECIPHER)))# file <- try(library(DECIPHER))
if(inherits(file, "try-error")) {cat("\n======================================\nFail to load DECIPHER\n======================================\n\n")stop()}# function
merge2Seqs <- function(forwardPath = NA, reversePath = NA, title = NA){# the out come is the positive strander1 <- try(seq1 <- readDNAStringSet(forwardPath))if(inherits(er1, "try-error")) {cat("\n======================================\nFile1 is not in fasta format.\nThe first line should starts with '>'.\n")stop()} else {cat("\n======================================\nFile1 loaded\n")}er2 <- try(seq2 <- readDNAStringSet(reversePath))if(inherits(er2, "try-error")) {cat("\nfile2 is not in fasta format\nThe first line should starts with '>'.======================================\n")stop()} else {cat("\nfile2 loaded\n======================================\n\n")}seqs <- c(seq1, reverseComplement(seq2))
# 联配 align <- AlignSeqs(seqs, verbose = FALSE, gapOpening = -5,gapExtension = -2)# 合并的序列res <- ConsensusSequence(align, ignoreNonBases = T)# 序列名字names(res) <- "consensus sequence"fileout <- "consensus sequence.fas"if(nchar(title) > 0){names(res) <- titlefileout <- paste0(title,".fas")} # 导出序列writeXStringSet(res, fileout)# 验证结果 writePairwiseAlignments(pairwiseAlignment(seqs[[1]],seqs[[2]], type='local',gapOpening = 5, gapExtension = 2), stdout())cat("======================================\nCheck the overlap!\n")mismatch <- substring(as.character(res),1:nchar(as.character(res)),1:nchar(as.character(res))) # 把res里的结果从1到1,2到2,3到3,每个提取出来为一个if(length(unique(mismatch))!=4){cat("Watch out the ambiguity bases.\n");for(i in 1:length(IUPAC_CODE_MAP)[1]){cat(names(IUPAC_CODE_MAP)[i],":",IUPAC_CODE_MAP[i],'\n\n')}}print((mismatch[!grepl('[A|T|C|G]', names(mismatch))]))cat("\ngapOpening = -5,gapExtension = -2\nThe consensus sequence has been saved.\n======================================\n")return(res)
}# 运行拼接函数
merge2Seqs(forwardPath = args[1], reversePath = args[2], title = paste(args[c(-1,-2)], collapse = " "))
转载于:https://www.cnblogs.com/Xeonilian/p/16S_rRNA_merge.html
拼接两条有重叠区域的核酸序列相关推荐
- python画两条曲线_查找在matplotlib中绘制的两条曲线之间的区域(在区域之间填充)...
我有两条曲线的x和y值列表,它们都有奇怪的形状,而且我没有任何函数.我需要做两件事:(1)绘制它并对曲线之间的区域进行着色,如下图所示:(2)找到曲线之间该着色区域的总面积. 在matplotlib中 ...
- matlab两幅图重叠,matlab两幅图叠在一起
MATLAB中内建有cpselect函数,该函数允 许用户在将要拼接的两幅图像的重叠区域 中手工选取一定数量的匹配特征点对然后 自动给出两幅图像之间的初始变换矩阵. 优化...... MATLAB 数 ...
- 求两个矩形重叠部分的面积
#include<stdio.h> #include<math.h>#define areaFile "area.txt" #define perporti ...
- python图形缝隙填充_Python,如何缝合图像哪些重叠区域?
我试着把有重叠区域的图像缝合在一起. 对图像进行排序,每个图像都有与前一个图像重叠的区域.例如: 问题是否来自右侧黑色的第5张图像?不知道为什么要加黑,以及如何避免.在 有人知道我如何修复代码,使其在 ...
- 传统IT和新IT并行推进 EMC两条腿走路助力企业数字化转型
6月22日,EMC在北京举行"中国业务发展暨数字化转型趋势交流会".新任EMC大中华区总裁谭仲良率领新团队正式亮相,就客户.合作伙伴关心的市场趋势.EMC 中国未来的发展以及措施, ...
- 实验:是否图片的重叠区域携带了决定分类的所有信息?
使用重叠法将参与分类训练的同一批次图片的所有不重叠部分变成0,只保留图片的重叠部分训练网络,如果分类准确率上升表明重叠部分已经包含决定分类的全部信息.如果这个假设成立,表明神经网络实现分类是通过在分类 ...
- 百度地图 使用两条平行线表示路线
根据他人的程序修改的,原文是如何利用百度地图JSAPI画带箭头的线? 在此,使用两条平行线表示路线. 1.坐标计算: 2.代码如下: <%@ page language="java&q ...
- Revit 2011 二次开发之“取得两条直线的交点”
Revit提供特殊的类和集合来完成这些操作,积累一下. /// <summary> /// Utility method for getting the intersect ...
- 两条纵坐标折线图绘制
python 两条纵坐标折线图绘制 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你 ...
最新文章
- COBOL 学习笔记 之 入門篇(续集)
- 基于webpack的react脚手架
- 也来分析为什么支付宝要做社交
- Java Calendar toString()方法与示例
- centos7手动更新、每天自动更新
- 在小程序端获取数据库所有符合条件的数据(使用分页突破20条限制)
- FastAPI + Vue 前后端分离 接口自动化测试工具 apiAutoTestWeb
- 【codevs1295】N皇后问题
- Chrome浏览器插件之---FeHelper
- 使用阿里云邮件推送服务发送验证码
- IMX6ULL 的 IEEE 1588 功能
- uva 10827	Maximum sum on a torus
- SystemUI之NavigationBar导航栏
- 顺序表 - 地址计算
- http://wwv.xiaonei.com/xn2.do?iid=0ae63bab-10a4-4d
- 小黑鱼怎么样?好的平台错不了!
- 一份特殊的申请书--------纪念我可能会失去的书生意气
- 兄弟机cnc系统面板图解_数控机床操作面板图文详解
- 玛利亚凯瑞的海豚音串烧
- 中国微光泽仪市场趋势报告、技术动态创新及市场预测