基因组组装----SPAdes(一)

关于基因组组装的流程可以参考我的简书:https://www.jianshu.com/p/e02ecd537c83

前面介绍了SOAPdenovo2的使用,但是由于结果整体不理想,尝试使用另外一个软件SPAdes。

该软件目前的版本支持paired-end reads, mate-pairs及unpaired reads。SPAdes一般用于小基因组组装,不适合大型基因组组装(例:哺乳动物)。官方文档可知第一步和第二步耗内存(cpu),第三步耗磁盘空间(实际是缓存,属于高I/O操作)。


file

SPAdes包含几个单独的模块:

(1) BayesHammer:Illumina reads的read纠错。在单细胞和标准数据集上效果也很好。

(2) IonHammer:IonTorrent(半导体测序,通过半导体芯片直接把化学信号转为数字信号)数据的read纠错。

(3) SPAdes: 迭代short reads基因组组装模块。K的值是根据read长度和数据集类型自动选择的,也可以自己选择。

(4) MismatchCorrector:一种工具,可改善所产生的contig和scaffold的错配和较短的插入缺失。默认是关的,建议打开(对于小型基因组而言)。

运行SPAdes时建议运行BayesHammer或 IonHammer以获得高质量的组装(默认打开),如果你使用别的read纠错工具,该模块可以关闭。

1.组装前准备

(1)文件夹组织形式:

file
clean_data:存放测序得到的reads。
fastqc_results:存放两次fastqc结果。(看reads质量)
kmergenie_results:存放kmergenie结果。(基因组调查)
QC_results:质控后的结果。
quast_results:quast结果。(组装结果评价)
reference:物种参考基因组。(用于quast,如果没有参考基因组可以不用)
spades_results:spades组装结果。
tools:组装所需工具。

(2)所有软件写进环境变量。

vim ~/.bashrc
#注:把所需工具写入到环境变量中。(fastqc,trimmomatic,kmergenie,SPAdes,quast)
source ~/.bashrc
file

2.read质量控制

所用软件为fastqc和trimmomatic(软件安装略)。

cd .../genome_assembly/spades                                   #注:...是省略了前面的路径,后面也一样。
touch fq_trim.sh
vim fq_trim.sh
#以下均在fq_trim.sh这个shell脚本中。
trimmomatic=.../genome_assembly/tools/Trimmomatic-0.38/trimmomatic-0.38.jar     #所安装的trimmomatic所在路径
#1.first fastqc
for fq_file in clean_data/*                                            
do
fastqc -o ./fastqc_results/first $fq_file                            
done
echo "** first fastqc down! **"
cd ./clean_data
for id in $(seq 501 503)                                        #注:这里根据你自己data的文件名进行设置。       
do
    file1="PB-${id}_1.clean.fq.gz"                              #测序得到的两个reads文件的文件名。                   
    file2="PB-${id}_2.clean.fq.gz"
    sample_id="PB-${id}"                                   
    if [ -f "$file1" ]                                          #判断file1是否存在。
    then
    cd ..
    fq1=./clean_data/$file1
    fq2=./clean_data/$file2
    outdir=.../genome_assembly/spades/QC_results                #trim后存放结果的文件夹。
    sample=$sample_id
    #2.trimmomatic(QC)
    time java -jar ${trimmomatic} PE -threads 80 -phred33\
           $fq1 $fq2 \
           $outdir/${sample}.paired.1.fq.gz $outdir/${sample}.unpaired.1.fq.gz \
           $outdir/${sample}.paired.2.fq.gz $outdir/${sample}.unpaired.2.fq.gz \
           ILLUMINACLIP:.../genome_assembly/tools/Trimmomatic-0.38/adapters/TruSeq3-PE-2.fa:2:30:10 \
           SLIDINGWINDOW:5:20 LEADING:5 TRAILING:5 MINLEN:50 && echo "** fq QC done **"
    cd ./clean_data
    fi
done
#3.second fastqc
cd ..
for fq_pair_file in $outdir/*
do
    fastqc -o ./fastqc_results/second $fq_pair_file
done
echo "** second fastqc down! **"
end=`date +%s`
dif=$[ end - start ]
echo 'the shell script run time is below:'
echo $dif
#运行
nohup ./fq_trim.sh >fq_trim.log &                                #放服务器后台运行

关于fastqc结果解读请参考简书:https://www.jianshu.com/p/dacedb7f6e2f

3基因组调查

对于较为复杂的基因组,通常会在正式组装前进行kmer分析,以了解以下信息。

(1)基因组杂合度。

(2)重复序列比例。

(3)预估基因组大小。

(4)测序深度。

3.1kmergenie评估基因组

KmerGenie可以进行k-mer分析及基因组大小评估。KmerGenie的最大优点在于可以实现在多个预设k-mer下的自动分析,除了进行常规的k-mer频数统计之外,还能够基于不同k-mer自动计算基因组大小,并为基因组组装评估一个最佳组装k-mer数值作为备选。

touch fq_501.txt                                 #存储fastq文件的路径。
vim fq_501.txt                                   #编辑fq.txt,输入PB_501经过trim后fastq文件路径(上一篇SOAPdenovo2的使用过程中我未进行trim,这里的话我前面第一步增加了trim)。
touch fq_503.txt                                 
vim fq_503.txt   
#写kmergenie的脚本
touch kmergenie.sh
vim kmergenie.sh
cd /sevzone/home/ytzheng/genome_assembly/spades
kmergenie fq_501.list -o kmergenie_result/PB_501 -k 140 -l 71 -s 6 -t 12
kmergenie fq_503.list -o kmergenie_result/PB_503 -k 150 -l 100 -s 6 -t 12
#-o:输出文件存放的目录。
#-k:最大的k值
#-l:最小的k值
#-s:从最小的k----最大的k,每次增加的k。
#-t:线程数。
#注:刚开始s可以设大点,可以根据判断出的最佳k值,缩小s再进行判断。(如果你设置的k范围内没有最佳值,请调整 k范围)

在结果文件中会生成report。报告会以折线图的形式给出每种长度的kmer下,估计的基因组大小,同时给出了最佳的kmer(评估基因组总大小最高)。


file
file

kmer频数分布图:


file

3.2jellyfish && GenomeScope评估基因组

这里请移步到:https://mp.weixin.qq.com/s/3tC4w9Z1LCpPueS6llcK4w

4基因组组装

4.1SPAdes软件下载

github:http://cab.spbu.ru/files/release3.14.0/SPAdes-3.14.0-Linux.tar.gz

#解压
tar -xzf SPAdes-3.14.0-Linux.tar.gz
cd SPAdes-3.14.0-Linux/bin/
ls
#添加到环境变量(前面部分已经添加)
#测试
spades.py --test

(1)可执行文件


file

(2)test结果(说明每个文件的代表什么)


file

4.2组装

注:为了运行read纠错,reads必须是FASTQ或BAM格式。

4.2.1参数介绍

spades.py        #查看参数(怎么用具体可以看官网说明,我仅介绍其中一些参数。)
#Basic options
-o:指定输出文件目录(必需)。
其他的参数:根据你是什么数据进行设置(如果你的数据是宏基因组、质粒、单细胞、RNA-seq、 IonTorrent等数据,可以指定相应参数)。
#Pipeline options
--only-error-correction:仅进行read纠错。
--only-assembler:仅进行组装。
--careful:减少错配和短插入失。 让程序运行MismatchCorrector----不建议用于中型和大型基因组。官方文档中可以看到MismatchCorrector占用的disk space非常多。
注:默认情况下执行read纠错、组装。
--continue:简单理解就是你如果跑其中一个k时程序停止,SPAdes会继续运行该k。
#Input data(仅介绍paired-end)
--pe<#>-1 <file_name>:left reads, <#>代表第几个文库。
--pe<#>-2 <file_name>:right reads, <#>代表第几个文库。
note:只有一个文库,指定#等于1即可。
#Advanced options
-t:线程数,根据服务器有多少线程设置。
-m:memory限制(Gb),达到该值程序终止,默认是250Gb,当然不指定它在运行时候也会给出一个值,如果因为该值太低跑不下去,你也可以自己指定。
-k:使用的k-mer用逗号分隔(所有值必须是奇数,小于128并且按升序列出)。--sc:设置默认值为21,33,55。
--cov-cutoff:read coverge的截止值,可以是float值、auto、off。默认是off。
--phred-offset:碱基质量体系,33或64,可以自己指定,程序也会自动检测。

4.2.2正式组装

#1.root用户下设置打开文件的最大数量(对于高I/O,占用的是缓存,不占用CPU,为了提高速度,可通过线程数增加来提高,但这样会增加文件打开数,所以需要设高一点)。
vi /etc/security/limits.conf
xx soft nofile 6000         #这里xx代表的是你用的linux用户名。
xx hard nofile 6000
#2.非root用户组装脚本
touch spades.sh
vim spades.sh
spades.py --pe1-1 QC_results/PB-501.paired.1.fq.gz --pe1-2 QC_results/PB-501.paired.2.fq.gz -t 200 -k 97,107,117,127 -m 600 --careful --phred-offset 33 -o spades_results/PB_501_trim
#--pe1-1、--pe1-2:pair-end测序得到的两个文件名,这里我用的是经过trim后的数据。
#-t:线程数(对于CPU密集型的程序,应该使用少一点的线程,对于IO密集型任务,应该使用多一点的线程)。
#-k:kmer选择的值,一般不需要设置,默认的话21,33,55,77,但是对于我的data(水稻)组装结果明显不好,所以我决定以前面kmergenie预测出来的结果为参考设置k值。
#-m:内存。---跑不下去加到跑的下去,不能超。单位为Gb,注:free -m可以查看最大的内存。
#--careful:运行BayesHammer(read纠错)、SPAdes、MismatchCorrector。
#--phred-offset:碱基质量体系,33或64。
#-o:输出文件目录。
#note:spades还有一个优势,如果你有其他组装工具产生的contigs的话可以,可以使用--trusted-contigs或 --untrusted-contigs选项。前者是当获得高质量组装中使用的,这些contigs将用于graph的构建、间隙填补、处理重复序列。第二个选项用于相对不太可靠的contigs,这些contigs用于间隙填补、处理重复序列。
#3.一些问题。注:由于我用的SPAdes跑的基因组与官方文档的相比相对较大,在运行过程中出现过以下问题。
(1).前两步运行时间相对还好,占用内存峰值约200G(相对而言是CPU密集型),第三步占用的缓存过多,导致服务器的缓存几乎达到缓存峰值,这里如果缓存占用太多的话可以用以下脚本释放缓存(root用户下),但是这样释放缓存会导致程序跑的慢,因此如果服务器内存较大的话还是建议自己手动释放。
touch release_memory.sh
vim release_memory.sh
#以下内容在shell脚本中
sleeptime=1800                      #这里可以设置多少秒清除一次缓存。
for i in {1..1000}
do
   sync
   echo "sync done"
   echo 3 > /proc/sys/vm/drop_caches
   echo "release done"
   sleep ${sleeptime}
done
#运行
nohup ./release_memory.sh >release_memory.log &
(2).第三步为I/O密集型,我的数据跑了很久,为了提高速度,我把线程数调高,但是调高的同时导致我前两步报错超过了文件打开的数量(默认是1024,但还好没蹦,只是在最后结果给出warning),这里为了防止程序crash掉,我是通过root用户来增加打开文件的数量(见前面1)。
file
(3).内存不足的问题(out of memory)。
free -m  #查看服务器的内存情况,如果还要很多空闲的内存,把组装脚本中的-m参数调高。

file

4.3结果文件

<output_dir>/corrected/:包含用BayesHammer纠错reads产生*.fastq.gz文件。
<output_dir>/scaffolds.fasta:包含产生的scaffolds。
<output_dir>/contigs.fasta:包含产生的contigs。
<output_dir>/assembly_graph.gfa:包含SPAdes组装图和scaffolds的路径。
<output_dir>/assembly_graph.fastg:包含SPAdes组装图。(FASTG格式)
<output_dir>/contigs.paths:组装图中包含与contigs.fasta对应的路径。
<output_dir>/scaffolds.paths:组装图中包含与scaffolds.fasta对应的路径。
#note:一般只要scaffolds和contigs就可以了。

5.评价组装结果

QUAST软件下载略。

5.1参考基因组下载

如果你组装的物种有参考基因组,可以去下载相应的参考基因组。

5.2QUAST使用

touch quast.sh
vim quast.sh
#以下均在shell脚本中。
cd .../genome_assembly/spades
quast.py -o ./quast_results/PB_501_trim_quast -R ./reference/xxxx.fasta.gz -t 70 ./spades_results/PB_501_trim/scaffolds.fasta ./spades_results/PB_503_trim/scaffolds.fasta
#-o输出目录
#-R参考基因组序列
#-t线程数
#后面为要比较的contig/scaffold所在目录。

5.3QUAST结果

具体结果解读可以参考:http://blog.sciencenet.cn/blog-3406804-1163959.html

本文由博客一文多发平台 OpenWrite 发布!

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

推荐阅读更多精彩内容