「三代组装」使用Canu对三代测序进行基因组组装

Canu简介

目前Canu已经更新到2.0版本,本文用的是Cau1.6版本,一些参数可能存在变动,请注意分辨。

Canu是Celera的继任者,能用于组装PacBio和Nanopore两家公司得到的测序结果。

Canu分为三个步骤,纠错,修整和组装,每一步都差不多是如下几个步骤:

  • 加载read到read数据库,gkpStore
  • 对k-mer进行技术,用于计算序列间的overlap
  • 计算overlap
  • 加载overlap到overlap数据库,OvlStore
  • 根据read和overlap完成特定分析目标
    • read纠错时会从overlap中挑选一致性序列替换原始的噪声read
    • read修整时会使用overlap确定read哪些区域是高质量区域,哪些区域质量较低需要修整。最后保留单个最高质量的序列块
    • 序列组装时根据一致的overlap对序列进行编排(layout), 最后得到contig。

这三步可以分开运行,既可以用Canu纠错后结果作为其他组装软件的输入,也可以将其他软件的纠错结果作为Canu的输入,因此下面分别运行这三步,并介绍重要的参数。

几个全局参数:genomeSize设置预估的基因组大小,这用于让Canu估计测序深度; maxThreads设置运行的最大线程数;rawErrorRate用来设置两个未纠错read之间最大期望差异碱基数;correctedErrorRate则是设置纠错后read之间最大期望差异碱基数,这个参数需要在 组装 时多次调整;minReadLength表示只使用大于阈值的序列,minOverlapLength表示Overlap的最小长度。提高minReadLength可以提高运行速度,增加minOverlapLength可以降低假阳性的overlap。

组装实战

数据下载

数据来自于发表在 Nature Communication 的一篇文章 "High contiguity Arabidopsis thaliana genome assembly with a single nanopore flow cell"。 这篇文章提供了 Arabidopsis thaliana KBS-Mac-74 的30X短片段文库二代测序、PacBio和Nanopore的三代测序以及Bionano测序数据, 由于拟南芥的基因组被认为是植物中的金标准,因此文章提供的数据适合非常适合用于练习。根据文章提供的项目编号"PRJEB21270", 在European Nucleotide Archive上找到下载地址。

ENA搜索
## PacBio Sequal
wget -c -q ftp://ftp.sra.ebi.ac.uk/vol1/ERA111/ERA1116568/bam/pb.bam
## MinION
wget -c -q ftp://ftp.sra.ebi.ac.uk/vol1/ERA111/ERA1116595/fastq/ont.fq.gz
# Illuminia MiSeq
wget -c -q ftp://ftp.sra.ebi.ac.uk/vol1/ERA111/ERA1116569/fastq/il_1.fq.gz
wget -c -q ftp://ftp.sra.ebi.ac.uk/vol1/ERA111/ERA1116569/fastq/il_2.fq.gz

下载的PacBio数据以BAM格式存储,可以通过安装PacBio的smrtlink工具套装,使用其中的bam2fasta工具进行转换

# build index for convert
~/opt/biosoft/smrtlink/smrtcmds/bin/pbindex pb.bam &
# convert bam to fasta
~/opt/biosoft/smrtlink/smrtcmds/bin/bam2fasta -o pb pb.bam &

PacBio的smrtlink工具套装大小为1.4G,不但下载速度慢,安装也要手动确认各种我不清楚的选项, 唯一好处就是工具很全。

运行Canu

第一步:纠错。三代测序本身错误率高,使得原始数据充满了噪音。这一步就是通过序列之间的相互比较纠错得到高可信度的碱基。主要调整两个参数

  • corOutCoverage: 用于控制多少数据用于纠错。比如说拟南芥是120M基因组,100X测序后得到了12G数据,如果只打算使用最长的6G数据进行纠错,那么参数就要设置为50(120m x 50)。设置一个大于测序深度的数值,例如120,表示使用所有数据。
canu -correct \
    -p ath -d pb_ath \
    Threads=10 gnuplotTested=true\
    genomeSize=120m minReadLength=2000 minOverlapLength=500\
    corOutCoverage=120 corMinCoverage=2 \
    -pacbio-raw pb.fasta.gz

可以将上述命令保存到shell脚本中进行运行, nohup bash run_canu.sh 2> correct.log &.

注: 有些服务器没有安装gnuplot, gnuplotTested=true 可以跳过检查。

第二步:修整。这一步的目的是为了获取更高质量的序列,移除可疑区域(如残留的SMRTbell接头).

canu -trim \
        -p ath -d pb_ath
        maxThreads=20 gnuplotTested=true\
        genomeSize=120m minReadLength=2000 minOverlapLength=500\
        -pacbio-corrected ath/pb_ath.correctedReads.fasta.gz

第三步: 组装。在前两步获得高质量的序列后,就可以正式进行组装. 这一步主要调整的就是纠错后的序列的错误率, correctedErrorRate,它会影响utgOvlErrorRate。这一步可以尝试多个参数,因为速度比较块。

# error rate 0.035
canu -assemble \
    -p ath -d ath-erate-0.035 \
    maxThreads=20 gnuplotTested=true \
    genomeSize=120m\
    correctedErrorRate=0.035 \
    -pacbio-corrected atg/pb_ath.trimmedReads.fasta.gz
# error rate 0.050
canu -assemble \
    -p ath -d ath-erate-0.050 \
    maxThreads=20 gnuplotTested=true \
    genomeSize=120m\
    correctedErrorRate=0.050 \
    -pacbio-corrected atg/pb_ath.trimmedReads.fasta.gz

最后输出文件下的ath.contigs.fasta就是结果文件。

一些宝贵的建议

后续分析要去冗余

Canu2.0之前的contig尽管运行日志说没有bubble,其实只是它没有检测到而已。Canu2.0才真正的加上该信息。但作者强烈推荐你先用purge_dups去冗余,避免软件难以检测到的冗余序列存在影响后续分析。

高杂合物种组装

对于高杂合物种的组装,Canu建议是用 batOptions=-dg 3 -db 3 -dr 1 -ca 500 -cp 50参数尽量分出两套单倍型,然后对基因组去冗余。

batOptions表示传递后续的参数给组装软件bogart, -dg 3 -db3降低自动确定阈值时的错误率离差(deviation),从而更好的分开单倍型。-dr 1 -ca 500 -cp 50会影响错误组装的拆分,对于一个模棱两可的contig,如果至少另一条可选路径的overlap长度至少时500bp,或者说另一条可选路径时在长度上和当前最佳路径存在50%的差异,那么就将contig进行拆分。

关于杂合物种组装的讨论,参考https://github.com/marbl/canu/issues/201#issuecomment-233750764

购买SSD避免服务器IO瓶颈

如果你的服务器线程数很多,你在普通的机械硬盘上运行组装,而且你的系统还是CentOS,那么你需要调整一个参数,避免其中一步的IO严重影响服务器性能。

Canu通过两个策略进行并行,bucketizing (‘ovb’ 任务) 和 sorting (‘ovs’ 任务)。 bucketizing会从1-overlap读取输出的overlap,将他们复制一份作为中间文件。sorting一步将这些文件加载到内存中进行排序然后写出到硬盘上。 如果你的overlap输出特别多,那么该步骤将会瞬间挤爆的你的IO.

为了避免悲剧发生,请增加如下参数: ovsMemory=16G ovbConcurrency=15 ovsConcurrency=15, 也就是降低这两步同时投递的任务数,缓解IO压力。

参考资料


版权声明:本博客所有文章除特别声明外,均采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 (CC BY-NC-ND 4.0) 进行许可。

扫码即刻交流
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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