基因组De novo组装和 ALLPATHS-LG使用

理论部分

该部分参考及引用陈连福的生信讲义,zhaofei的https://vip.biotrainee.com/d/103--

由于仪器测序读长的限制等,在建库时会将DNA随机打断为小片段的序列,因此,基因组组装就是将小片段的序列连接起来,但是序列之间的联系十分复杂,常用构建Graph来进行表示,然后在对Graph进行简化、拼接,即reads→contigs→scaffolds。

下图即为简单的示意图,其中顶点A,B,C,D,E,F称为nodes,是6条小片段序列;连接2个nodes的有方向的箭头称为edges,这些边表示reads间的overlap;而数字代表着权重。通过对Graph进行分析,选择权重大的来简化Graph,得到ABCDEF这个序列,依此类推,将基因组产生ABCDEFGH...等若干的reads,再根据各reads间的重复区域,选出最优路径,形成contigs,再组成scaffolds,最终得到基因组序列。

组装示意图.png

寻找最优路径的常用算法:

早期使用的是贪婪法 :先选定初始read,找到和其重叠区域最高的read进行延伸,直至拼接后的read两端不能再进行延伸为止。每次延伸都是从最优匹配开始的,贪婪法得到的是局部最优解,而不是全局最优解,因此,在遇到重复序列时会出现比较大的问题。

Overlap-Layout-Consensus(OCL) 常用语处理reads读长较大的测序数据,比如PacBio数据的组装。OLC算法分为三步:1)对所有的reads进行两两比对,得到overlap。2)根据overlap简化graph,建立overlap图,将reads组合成contig。3)得到consensus:将所有read序列排列起来,找到一条从起始节点到终止节点的最佳近似路径使得最终路径将会遍历一次重叠区域的每个节点,从而得到目标基因序列。

de Bruijin Graph(DBG)是目前常用的二代测序拼接算法。相关软件:ALLPATHS-LG、SOAPdenovo等。该算法和OLC类似,不同之处在于:该算法中的nodes是kmer序列,kmer和kmer必须仅有一个碱基差异才能相连,即相邻的kmer序列是通过k-1个碱基连接到一起的(每次只移动一个位置)。这种算法降低了重复区域的复杂度,降低了内存消耗。其步骤:1)构建DBG图,将reads分割为一系列连续的kmer;2)合并DBG图;3)构建contig:寻找最优路径(经过每一个节点且仅经过一次),最优路径对应的碱基序列构成一个contig;4)构建scaffold:通过PE reads位置确定contig之间的相对位置和方向,组装contig,填充contig之间的gap,得到scaffold序列。

由于DBG构建不需要reads具有endanger的长度,因此只适用于reads长度较短的Illumina测序数据。也因此DBG对于重复区域比较狠分析,进行de novo组装时需要构建大片段文库,测MP数据,只要MP文库长度大于重复序列长度,则有利于重复序列的组装。

kmer和内存

k值越大可辨别更多的小重复序列,越容易把DBG转换为唯一的序列,但得到的拼接过程含有更多的gaps;小的k值对应的DBG能够得到较好的连通性,但是算法的复杂度会提高,repeats序列处理会更复杂,增加了错拼的可能性。

kmer越大需要的内存就越多,所以计算机的内存大小也会限制kmer的取值。这里需要说明的是,输入数据的多少不会影响memory用量,但是输入数据的错误越少,占用的内存也就越少,假设所有测序数据都没有任何错误,那么DBG的大小并不会因为测序深度的增加,因为不需要将因为几个碱基不一致的kmer存入到DBG中(下一部分会具体提到)。至于需要多大的RAM则取决于DBG的大小和组装基因组的大小。

另外,在拼接的过程中尽量避免使用偶数kmer,否则容易是kmer产生回文序列,特别是在链特意性的数据中。

在平时分析中,一般会设置一个kmer的梯度(21,23,25,27,2931),来解决DBG算法loss of read coherence的问题。然后从中选择最好的结果。另外,还有一种说法是在进行拼接过程时,kmer应该选择read长度的1/2到2/3大小,否则可能拼接出过多的Contig。

String Graph能较好的组装散在重复序列。

目前构建Graph的方法主要有3种:Overlap-Layout-Consensus(OCL),de Bruijin Graph(DBG)和String Graph。

实操部分

使用ALLPaths-LG组装进行基因组组装,适合于短reads数据,也是现在公认的进行基因组De novo 组装效果最好的软件。但是该软件十分消耗内存和计算。

1. fastqc软件使用查看数据原始质量

find ./ -name "*.gz" |xargs fastqc -t 3 -o ./result 

xargs命令的用法:

其中管道和xargs的区别:管道是实现“将前面的标准输出作为后面的标准输入”,xargs是实现“将标准输入作为命令的参数”。可以试试下面两代码的结果

echo "--help"|cat #此处结果是显示 “--help”
echo "--help"|xargs cat #此处结果是显示cat的帮助说明文档 相当于 cat --help,即xargs是将内容作为普通的参数传递给程序
cat gzip.sh|xargs -i echo "quick_qsub {}"
  • 结果说明

得到的结果是包括:
image

一般是查看网页版结果,结果解释说明fastqc中文结果说明

fastqc 软件主要是针对全基因组测序的,并且各建库方法不同,其评判标准也会有所差距;不能只是一味的寻求全部结果通过。

ls *zip|while read id;do unzip $id;done #批量解压压缩结果

从文件夹中批量抓取里面的%GC,Total sequences等信息

Q20:质量值大于20的碱基数目占总共碱基数目的比例。

  • 使用multiqc批量查看fastqc结果

multiqc *fastqc.zip --pdf #

image

2. nxtrim文库分选

nxtrim分开PE和MP文库。
该软件会用于去除Nextera Mate Pair 文库中接头并且根据接头位置的方向分类reads。
其中的每个read都会搜索接头信息(CTGTCTCTTATACACATCT)和他的反向序列(AGATGTGTATAAGAGACAG),因此这个完整的连接接头是CTGTCTCTTATACACATCT+AGATGTGTATAAGAGACAG

nxtrim -1 reads1 -2 read2 -O folderfile --joinreads --preserve-mp --separate 1 > read_nxtrim.log 2 >&1

注:该软件的默认参数--rf 会将MP文库的reads方向变换回去。

nxtrim.png

其中的MP和PE 的文件即为所得。

3. bwa比对得到插入片段文库

bwa mem -M ref.fa reads1.pe.fq.gz reads2.pe.fq.gz > read.pe.sam
bwa mem -M ref.fa reads1.mp.fq.gz reads2.mp.fq.gz > read.mp.sam
perl count_num_sam.pl read.pe.sam
perl count_num_sam.pl read.mp.sam 

SAM文件中第9列是建库时候的打断的片段长度,如若使用的是PE150的数据,那么打断成350bp,则这里的数据应该是350个字符左右。

#!/usr/bin/perl   #count_num_sam.pl;提取sam文件中第九列,统计每个插入片段长度的个数
open FH,'>',"$ARGV[0].count.out" or die;
my @num;
my $i = 0;
while(<>){
        next if /^\@/;
        if(/(?:.*?\s){8}(-?\d+)\s.*/){
                $num[$1]++ if($1>=0);
        }
}
$num[0] = $num[0]/2;
for($i=0; $i<20001; $i++){
        if($num[$i] == 0){
                print FH "$i\t0\n";
        }else{
                print FH "$i\t$num[$i]\n";      
        }        
}

用excel得到插入片段的图,平均值计算方法是:(A+B)/2;偏差值=平均值-A。

插入片段长度图.png

根据实验中选择文库的原理(如下图),对于同一个Well的数据,其index相同,则其MP文库插入片段分布一致,此类数据只需分析一个插入片段的图即可。对于同一个 Fragment,其PE文库插入片段分布一致,同理此类数据只需分析一个插入片段的图即可。

文库构建.jpg
4. ALLPaths-LG组装(参考陈连福生信讲义)

使用ALLPATHS-LG的条件比较严格,有以下的注意事项:

1.不能只使用一个library数据进行组装;

2.必须有一个“overlapping”的片段文库的PE数据;

3.必须有jumping library 数据(也就是Illumina Mate-pair测序数据)

4.基因组组装需要有100X或者以上基因组覆盖度的碱基,这里的覆盖度是指raw reads数据的覆盖度;

5.可以使用PacBio数据;

6.不能使用454数据和Torrent数据;

7.输入10G的碱基数据量,大约需要17G内存;

8.对于试探性的参数,比如K,原则上可以调整;但是一般不自行调整,也不推荐。本软件中Kmer大小的参数K和read之间没有直接的联系,其会在运行过程中运用一系列的K值。

4.1 准备in_groups.csv和in_libs.csv文件

in_groups.csv用于指出测序数据的存放路径,

其中file_name:数据文件所存放位置,文件名可以包含‘*‘和’?’,从而代表paired数据。支持的文件类型有“.bam,.fasta,.fa,.fastq,.fq.,fastq.gz,.fq.gz”。

file_name, library_name, group_name
HoS150_peQ20-1_R?.cut.fq.trimmed.paired.fastq,     PE1,       PE01
HoS_mp1_R?.fastq, MP6-1,      HoS250_6-1
HoS_mp2_R?.fastq, MP6-2,      HoS250_6-2
HoS_mp3_R?.fastq, MP6-3,      HoS250_6-3

in_libs.csv用于给出文库的特性。

其中:library_name指文库的名字,和In_groups.csv相匹配。type文库类型:fragment→PE测序;jumping→MP测序;long→Pacbio测序。read_orientation reads的方向,小片段文库为inward,大片段文库为outward。但是需要注意的是nxtrim软件中默认是将大片段文库的方向改变为inward。

library_name, project_name,     organism_name,        type,     paired,   frag_size, frag_stddev, insert_size, insert_stddev,    read_orientation, genomic_start, genomic_end
PE1, HoS, RFgenome, fragment, 1, 287, 50,, , inward,   0, 0
MP6-1,  HoS, RFgenome,  jumping, 1,  , ,  2290,220,inward,  0, 0
MP6-2,  HoS, RFgenome,  jumping, 1,  , ,  2808,  318,  inward,  0, 0
MP6-3,  HoS, RFgenome,  jumping, 1, , , 3954, 750,  inward,  0, 0
4.2 将Fastq转换为ALLPATH-LG支持的输入格式
#!/bin/sh
#这个为prepare.sh文件
# ALLPATHS-LG needs 100 MB of stack space.  In 'csh' run 'limit stacksize 100000'.
ulimit -s 100000 #程序中需要较大的堆栈空间,使用ulimit将计算资源放宽松些。

mkdir -p /02allpaths/data #用于将转换后的数据文件放入到此目录下。

# NOTE: The option GENOME_SIZE is OPTIONAL. 
#       It is useful when combined with FRAG_COVERAGE and JUMP_COVERAGE 
#       to downsample data sets.
#       By itself it enables the computation of coverage in the data sets 
#       reported in the last table at the end of the preparation step. 

# NOTE: If your data is in BAM format you must specify the path to your 
#       picard tools bin directory with the option: 
#
#       PICARD_TOOLS_DIR=/your/picard/tools/bin

PrepareAllPathsInputs.pl\

 DATA_DIR=$PWD/genome/data \
 PLOIDY=2\ #生成ploidy文件,1表示基因组为单倍体型;2为双倍体型。
 IN_GROUPS_CSV=in_groups.csv\
 IN_LIBS_CSV=in_libs.csv\
 OVERWRITE=True\
 | tee prepare.out 

运行以上命令,将fastq文件转成运行ALLPATH-LG所需要的文件,并存放到/02allpaths/data文件夹下。

4.3 ALLPATHS-LG主程序的使用

使用RunAllPathsLG这个命令来进行基因组组装,该命令有很多参数,但是在一般情况下不要随意使用,使用默认设置即可。

#!/bin/sh
# assemble.sh
# ALLPATHS-LG needs 100 MB of stack space.  In 'csh' run 'limit stacksize 100000'.
ulimit -s 100000

RunAllPathsLG\
 PRE=$PWD\ #程序运行的根目录,所有的其他目录全在该目录下
 REFERENCE_NAME=.genome \ #参考基因组目录名称,位于PRE目录下,若有参考基因组,可放于此目录下。
 DATA_SUBDIR=data\ #DATA子目录,位于REFERENCE_NAME目录下,程序从该目录下读取数据。
 RUN=run\  #位于DATA_SUBDIR目录下,将生成的中间文件和结果文件存储与该目录中。
 SUBDIR=test\
 TARGETS=standard\
 OVERWRITE=True\
 | tee -a /02allpaths/assemble.out

注意:assemble.sh文件中几个目录的路径的设置。

接着就是漫长的结果等待啦~~~

由于组装需要的内存很大,一定要保证内存,否则会运行到一半会被删除。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 193,812评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,626评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,144评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,052评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,925评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,035评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,461评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,150评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,413评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,501评论 2 307
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,277评论 1 325
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,159评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,528评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,868评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,143评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,407评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,615评论 2 335

推荐阅读更多精彩内容