纯二代测序从头组装基因组

基因组组装

基因组组装一般分为三个层次,contig, scaffold和chromosomes. contig表示从大规模测序得到的短读(reads)中找到的一致性序列。组装的第一步就是从短片段(pair-end)文库中组装出contig。进一步基于不同长度的大片段(mate-pair)文库,将原本孤立的contig按序前后连接,其中会调整contig方向以及contig可能会存在开口(gap,用N表示),这一步会得到scaffolds,就相当于supercontigs和meatacontigs。最后基于遗传图谱或光学图谱将scaffold合并调整,形成染色体级别的组装(chromosome).

目前基于二代测序的组装存在挑战:

  • 全基因组测序得到的短读远远小于原来的分子长度
  • 高通量测序得到海量数据会增加组装的计算复杂性,消耗更高的计算资源
  • 测序错误会导致组装错误,会明显影响contig的长度
  • 短读难以区分基因组的重复序列
  • 测序覆盖度不均一,会影响统计检验和结果结果诊断

上述的问题可以尝试从如下角度进行解决

  • 短读长度:可以通过提供更多样本,并且建库时保证位置足够随机
  • 数据集大小: 使用K-mers算法对数据进行组装。assembler不再搜寻overlap,而是搜索具有相同k-mers的reads。但是k-mer算法相比较overlap-based算法,灵敏度有所欠缺,容易丢失一些true overlaps。关键在于定义K。: K-mer表示一条序列中长度为k的连续子序列,如ABC的2-mer为AB,BC
  • 测序错误: 必须保证测序结果足够正确, 如提高质量控制的标准
  • 基因组重复区: 测序深度要高,结果要正确。如果repeat短于read长度,只要保证有足够多且特异的read。如果repeat长于read,就需要paired ends or “mate-pairs”
  • 覆盖度不均一: 提高深度,保证随机
  • 组装结果比较:contig N50, scaffold N50, BUSCO
什么叫做N50

二代数据组装的算法和工具

基因组组装的组装工具主要分为三类:基于贪婪算法的拼接方法,基于读序之间的重叠序列(overlapped sequence)进行拼接的OLC(Overlap-Layout-Consensus)拼接方法和基于德布鲁因图(de bruijn graph)的方法,这三种方法或多或少基于图论。第一种是最早期的方法,目前已被淘汰,第二种适用于一代测序产生长片段序列,可以称之为字符串图(string graph),第三种是目前二代测序组装基因组的工具的核心基础,也就是要继续介绍的de bruijn图。

示意图

de bruijn图由两部分组成,节点(Nodes)和边(Edges),节点由k-mers组成,节点之间要想形成边就需要是两个k-mers存在K-1个完全匹配。比如说,ACTG, CTGC, TGCC在K=3时的k-mers为ACT,CTG,TGC,GCC,可以表示为ACT -> CTG -> TGC -> GC.

对于de brujin图而言,冗余序列不会影响k-mers的数量,比如说ACTG,ACTG,CTGC,CTGC,CTGC,TGCC,TGCC在K=3时依旧表示为ACT -> CTG -> TGC -> GCC。

上面是理想情况,实际序列中的测序错误,序列之间的SNP以及基因组低复杂度(重复序列)就会出现如下de brujin图

测序错误引起分支
SNPs的气泡结构
重复区域引起的气泡

用图的方式表示就是下面情况

几种比较复杂的图

组装软件的任务就是从k-mers形成的图按照一定的算法组装出可能的序列,根据"GAGE: A critical evaluation of genome assemblies and assembly algorithms"以及自己的经验,目前二代数据比较常用的工具有Velvet, ABySS, AllPaths/AllPaths-LG, Discovar, SOAPdenovo, Minia, spades,Genomic Assemblers这篇文章有比较好的总结,

  • ALLPaths-LG是公认比较优秀的组装工具,但消耗内存大,并且要提供至少两个不同大小文库的数据
  • SPAdes是小基因组(<100Mb)组装时的首选
  • SOAPdenovo是目前使用率最高的工具(华大组装了大量的动植物基因组),效率也挺好,就是错误率也高
  • Minia是内存资源最省的工具,组装人类基因组contig居然只要5.7G的RAM,运行23小时,简直难以相信。

当然工具之间的差别并没有想象的那么大,也没有想象中那么小,可能在物种A表现一般的工具可能在物种B里就非常好用,因此要多用几个工具,选择其中最好的结果。

数据准备

这里使用来自于GAGE的金黄色葡萄球菌 Staphylococcus aureusa 数据进行练习。一方面数据量小,服务器能承受并且跑得快,另一方面本身基因组就组装的不错,等于是考完试能够自己对答案。

mkdir Staphylococcus_aureu && cd Staphylococcus_aureus
mkdir genome
curl ftp://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/000/013/425/GCF_000013425.1_ASM1342v1/GCF_000013425.1_ASM1342v1_genomic.fna.gz > genome/Saureus.fna.gz
mkdir -p raw-data/{lib1,lib2}
curl http://gage.cbcb.umd.edu/data/Staphylococcus_aureus/Data.original/frag_1.fastq.gz > raw-data/lib1/frag_1.fastq.gz
curl http://gage.cbcb.umd.edu/data/Staphylococcus_aureus/Data.original/frag_2.fastq.gz > raw-data/lib2/frag_2.fastq.gz
curl http://gage.cbcb.umd.edu/data/Staphylococcus_aureus/Data.original/shortjump_1.fastq.gz > raw-data/lib2/shortjump_1.fastq.gz
curl http://gage.cbcb.umd.edu/data/Staphylococcus_aureus/Data.original/shortjump_2.fastq.gz > raw-data/lib2/shortjump_2.fastq.gz

基因组survey

在正式组装之前,需要先根据50X左右的illumina测序结果对基因组进行评估,了解基因组的大小,重复序列含量和复杂度。基于这些信息,确定后续策略以及是否真的需要对该物种进行测序。

基因组survery的核心就是使用k-mers对整体进行评估,k-mers时基因组里长度为k的子序列,当k=17时,ATCG的组合数就有170亿种,也就说理想条件下基因组大小只有超过17Gb才会出现2条一摸一样的k-mers。比如说有一个长度为14的序列,给定k-mers的k为8,于是能产生7条长度为8的子序列,于是推测基因组大小为7bp,但是这似乎和实际的14bp偏离有点远.

GATCCTACTGATGC (L=14), k-mers for k=8
n = (L-k) + 1 = 14 - 8 + = 7
GATCCTAC,     ATCCTACT,     TCCTACTG,     CCTACTGA,     CTACTGAT,     TACTGATG,     ACTGATGC

如果基因组大小为1MB, 那么当k-mers的k=18时,会得到(1000000-18)+1=999983个不同的k-mers,与实际大小偏差仅仅只有0.0017%,也就说基因组越大,预测就越接近。这是对单条基因组的估计结果,实际上高通量测序会得到基因组30X到50X深度的测序结果,比如说10个拷贝(C)的“GATCCTACTGATGC”在k-mers=8时会有70条子序列,

n = [(L-K) + 1] * C = [(14-8)+1]*10 = 70

为了得到实际的基因组大小,既需要将70除以拷贝数10,那么就得到了和之前一样的预测值7。当然上述都是理想条件,实际上测序不均一低复杂区域重复序列等都会影响预测结果。举个例子,"Genome sequencing reveals insights into physiology and longevity of the naked mole rat"的k=17, k_num=52,143,337,243,测序程度可以通过k-mers深度分布曲线来估计

17-k-mer预测基因组大小

图中,深度为1的k-mers所占比例最高,表示绝大多数的k-mers仅仅出现了几次,这可能是测序错误造成。后续在depth=20逐渐形成一个峰,说明测序测度大概是20x附近,实际上是19x有极大值。于是基因组的大小就是"52,143,337,243/19=2744386170", 差不多就是2.74Gb

k-mers一般选择17即可,对于高度重复基因组或者基因组过大,可以选择19甚至31也行。但不是越大越好,因为如果一条reads里有一个错误位点,越大的k-mers就会导致包含这个错误位点的k-mers个数增多。

根据上述的介绍,便可以使用jellyfish统计k-mer,然后用R作图对基因组进行评估。当然这类工具其实已经有人开发,比如说ALLPATHS-LG/FindErrors,它不但能够修正低质量的短读,还能初步评估基因组,还有GCE(genome characteristics Estimation),由华大基因开发出来的一款基因组评估工具等。为了避免重复造轮子,简单就用这些工具即可。

使用GCE评估基因组: 先用kmer_freq_hash统计k-mer频数

# Staphylococcus_aureus项目根目录下
mkdir genome_survey && cd genome_survey
## 提供用于read的位置信息
ls raw-data/lib1/frag_*.fastq.gz > genome_survey/reads.list
## k-mer_freq_hash统计
~/opt/biosoft/gce-1.0.0/kmerfreq/kmer_freq_hash/kmer_freq_hash -k 15 -l genome_survey/reads.list -t 10 -o 0 -p genome_survey/sa &> genome_survey/kmer_freq.log

k-mer_freq_hash运行结束后会有粗略估计基因组大小,粗略估计为4.22Mb。注意,Kmer_individual_num 数据用于gce的输入参数。

随后用gce程序基于前面的输出结果进行估计

~/opt/biosoft/gce-1.0.0/gce -f genome_survey/sa.freq.stat -c 16 -g 108366227 -m 1 -D 8 -b 0 > genome_survey/sa.table 2> genome_survey/sa.log
# -c为主峰对应depth
# -g使用的就是Kmer_individual_num对应值
# -m 选择估算模型,真实数据选择1,表示连续型

在这次的日志文件中有预测后的结果4.34Mb,但是根据NCBI的数据,这个物种的基因组大小是2.8M左右。因此使用k-mers通过数学方法预测存在一定的局限性,需要结合流式细胞仪和粗组装的结果。

虽然也可以使用FindErrors对基因组进行评估,但是我实际使用时出现了各种问题,这里不做介绍。其他的工具也是大同小异,不做额外推荐。

基因组正式组装

当你拿到测序数据后,就可以按照如下几步处理数据。第一步是数据质控控制,这一步对于组装而言非常重要,处理前和处理后的组装结果可能会天差地别;第二步,根据经验确定起始参数,如K-mer和覆盖率;第三步,使用不同软件进行组装;第四步,评估组装结果,如contig N50, scaffold N50, 判断是否需要修改参数重新组装。

原始数据质量控制

尽管目前的测序技术已经非常成熟,公司提供的数据一般都可以直接用于普通的项目(特殊项目如miRNA-seq除外)。但由于 de novo 组装对数据质量比较敏感,因此需要通过质控来降低偏差。原始数据质量控制分为四个部分:

  • 了解数据质量: 了解质量这一步可以暂时忽略,基本上基因组测序的结果都能通过FastQC的标准。
  • 去接头和低质量reads过滤: 去接头和低质量reads过滤可供选择的软件非常之多,如NGSQCToolkit, Trimmomatic, cutadapter, 似乎都是国外开发的软件,但其实国内也有一款很优秀的工具叫做fastp
  • 去除PCR重复: 去重一般都是在比对后根据位置信息进行,没有基因组的话只能根据PE的reads是否完全一样进行过滤。从理论上说,测序相当于是从基因组上随机抽样,不太可能存在完全一摸一样的两条序列。不过貌似只有FastUniq能做这件事情,后来有一个人写了sequniq。
  • reads修正: 除了过滤或修剪低质量的reads外,一般而言,还需要对reads中的错误碱基进行修正。尤其当测序的覆盖度比较高时,错误的reads也就越来越多,会对 de novo 组装造成不良的影响。工具有BLESS2, BFC, Musket等,其中BLESS2的效率最高,效果也不错。

去接头和低质量reads过滤这一步推荐fastp,主要是因为它基于C/C++,运行速度块。

# 使用, 项目文件夹下
mkdir -p clean-data{lib1,lib2}
~/opt/biosoft/fastp/fastp -i raw-data/lib1/frag_1.fastq.gz -I raw-data/lib1/frag_2.fastq.gz -o clean-data/lib1/frag_1.fastq.gz -O clean-data/lib1/frag_2.fastq.gz

效果非常的惊人,直接干掉了90%的reads,从原来的1,294,104条变成77,375,一度让我怀疑软件是否出现了问题,直到我用同样的代码处理现在Illumina的测序结果以及看了FastQC的结果才打消了我的疑虑,没错,以前的数据质量就是那么差。,除非是去接头,否则不建议通过删除序列的方式提高质量。

质控另一个策略是对短读中一些可能的错误碱基进行纠正,测序错误会引入大量无意义的K-mers,从而增加运算复杂度。此处使用BFC对测序质量:

~/opt/biosoft/bfc/bfc -s 3m -t 16 raw-data/lib1/frag_1.fastq.gz | gzip -1 > clean-data/lib1/corrected_1.fq.gz
~/opt/biosoft/bfc/bfc -s 3m -t 16 raw-data/lib1/frag_2.fastq.gz | gzip -1 > clean-data/lib1/corrected_2.fq.gz
处理前后

总之,质控的目标是在不引入的错误的情况下尽量提高整体质量,这一步对后续的组装影响很大,所以尽量做这一步,除非组装软件要求你别做,那你就不要手贱了。

使用不同工具和参数进行组装

二代组装可供选择的工具很多, 但是主流其实就那么几个, 所以组装的时候选择3~5个工具运行比较结果即可,比如说MaSuRCA
, IDBA-UD, SOAPdenovo2, Abyss, velvet和Spades。当然一旦你选择一个软件准备运行的时候,你就会遇到参数选择问题,比如怎么确定k-mers,组装软件最基础也是最核心的参数。这里有几条原则值得借鉴:

  • k要大于log4(基因组大小),如果数学不好,无脑选择20以上
  • 尽量减少测序错误形成的k-mers, 因为这是无意义的噪音, 也就是要求k不能过大
  • 当然k也不能太小,否则会导致重复压缩,比如说ATATATA,在2kmers的情况下,就只有AT了
  • 测序深度越高,K值也就可以选择的越大

但是说了那么多,你依旧不知道应该选择什么样的K,如果你的计算资源无限,那么穷举法最简单粗暴。如果穷举法不行,那么建议先用k=21, 55,77 组装一下contig, 对不同参数的contig N50有一个大致的了解,然后继续调整。此外还有一个工具叫做KmerGenie可以预测一个初始值。总之,让我们先运行第一个工具--SPAdes,可通过bioconda安装。

SPAdes全称是圣彼得堡基因组组装工具,包含了一系列组装工具处理不同的项目,如高杂合度的dipSPAdes,宏基因组的metaSPAdes。官方文档中以大肠杆菌为例运行整个流程,花了将近1个小时。我们的数据集比较小,速度会更快

# 项目根文件夹下
mkdir assembly/spades
spades.py --pe1-1 raw-data/lib1/frag_1.fastq.gz --pe1-2 raw-data/lib1/frag_2.fastq.gz --mp1-1 raw-data/lib2/shortjump_1.fastq.gz --mp1-2 raw-data/lib2/shortjump_2.fastq.gz -o assembly/spades/

你会发现之前说的k-mers在这里根本没出现,而且用的也是原始数据,这是因为spades.py有一个组件BayesHammer处理测序错误,并且它是多K类组装工具(multi-k assembly), 也就是说它会自动选择不同的K运行,从而挑选比较合适的k值,当然你还可以自己设置,比如说-k 21,55,77。最后结果为纠正后的短读数据,组装后的contig, 组装后的scaffold, 不同格式的组装graph。

同样运行多k-mers运行后比较的工具还有IDBA,它也有一系列的工具。IDBA是基础版,IDBA-UD适用于宏基因组和单细胞测序的数据组装,IDBA-Hybrid则是基于相似的基因组提高组装结果,IDBA-Tran是专门处理转录组数据。对于无参考基因组组装,作者推荐使用IDBA-UD。

IDBA-UD工具要求将两个配对的短读文件合并成一个,我们的原始数据需要先用它提供的fq2fa先转换格式

# 项目文件夹下
mkdir -p assembly/idba_ud
~/opt/biosoft/idba/bin/fq2fa --merge <(zcat clean-data/lib1/corrected_1.fq.gz) <(zcat clean-data/lib1/corrected_2.fq.gz) assembly/idba_ud/lib1.fa
~/opt/biosoft/idba/bin/fq2fa --merge <(zcat clean-data/lib2/corrected_1.fq.gz) <(zcat clean-data/lib2/corrected_2.fq.gz) assembly/idba_ud/lib2.fa

idba_ud和k-mers相关参数为--mink,--maxk,--step, 通过--read_level_x 传入不同大小的文库,也提供了短读纠正的相关参数--no_correct,--pre_correction

~/opt/biosoft/idba/bin/idba_ud -r assembly/idba_ud/lib1.fa --read_level_2 assembly/idba_ud/lib2.fa -o assembly/idba_ud/ --mink 19 --step 10

运行结束后在assembly/idba_ud下会生成一系列的文件,其中结果文件为contig.fascaffold.fa

最后介绍一个要手动运行不同k-mers的工具,如ABySS, 它有一个亮点,就是能够可以使用多个计算节点。我们使用k=31进行组装

mkdir -p assembly/abyss
# 增加 /1,/2
sed 's/^@SRR.*/&\/1/' <(zcat raw-data/lib2/shortjump_1.fastq.gz) | gzip > raw-data/lib2/s1.fq.gz
sed 's/^@SRR.*/&\/2/' <(zcat raw-data/lib2/shortjump_2.fastq.gz) | gzip > raw-data/lib2/s2.fq.gz
~/opt/biosoft/abyss-2.0.2/bin/abyss-pe -C assembly/abyss k=31 n=5 name=asm lib='frag short' frag='../../raw-data/lib1/frag_1.fastq.gz ../../raw-data/lib1/frag_2.fastq.gz' short='../../raw-data/lib2/s1.fq.gz ../../raw-data/lib2/s2.fq.gz' aligner=bowtie

注意,首先ABYSS要求双端测序的reads命名要以/1和/2结尾,其次第二个文库才37bp, 所以比对软件要选择bowtie,否则你运行一定会遇到histogram xxx.hist is empty的报错。当然到最后,这个问题我都没有解决掉,所以我放弃了。

虽然看起来abyss用起来很简单,但其实背后的工作流程还是比较复杂,如下是它的流程示意图

flowchart

小结一下,这里用到了spades, idba,abyss三种工具对同一种物种进行组装,得到对应的contig结果,重点在于k-mers的选择。contig是组装的第一步,也是非常重要的一步,为了保证后续搭scaffold和基因组补洞等工作的顺利,我们先得挑选一个比较高质量的contig。

组装可视化和评估

理想条件下,我们希望一个物种有多少染色体,结果最好就只有多少个contig。当然对于二代测序而言,这绝对属于妄想,可以通过一款graph可视化工具bandage来感受一下最初得到的contig graph是多么复杂。

Bandage

一般看这图直观感受就是怎么那么多节,这些节就是造成contig不连续的元凶。不同组装工具在构建de bruijn graph的差异不会那么大,contig的数量和大小和不同工具如何处理复杂节点有关。我们希望得到的contig文件中,每个contig都能足够的长,能够有一个完整的基因结构,归纳一下就是3C原则:

  • 连续性(Contiguity): 得到的contig要足够的长
  • 正确性(Correctness): 组装的contig错误率要低
  • 完整性(Completeness):尽可能包含整个原始序列

但是这三条原则其实是相互矛盾的,连续性越高,就意味着要处理更多的模糊节点,会导致整体错误率上升,为了保证完全的正确,那么就会导致contig非常的零碎。此外,这三条原则也比较定性,我们需要更加定量的数值衡量,比如说contig数, 组装的总长度等, N50等。问题来了,什么叫做N50呢,

N50定义比较绕口,有一种只可意会不可言传的感觉,所以索性看图

N50和NG50

假设一个基因组的大小为10,但是这个值只有神知道,你得到的信息就是组装后有3个contig,长度分别为"3,4,1,1",所以组装总长度为9。为了计算N50,我们需要先把contig从大到小排列,也就是"4,3,1"。然后先看最大的contig,长度是4,他的长度是不是超过组装总大小的一半了吗?如果是,那么N50=4, 4 < 4.5, 不是。 那么在此基础上加上第二长的contig,也就是4+3=7, 是不是超过一半了?7>4.5, 那么N50=3. 因此,N50的定义可以表述为"使得累加后长度超过组装总长度一半的contig的长度就是N50"。为了方便管理和使用软件,建议建立如下几个文件夹

N50是基于一个未知的基因组得到得结果,如果基因组测序比较完整,那么就可以计算NG50,也就是"使得累加后长度超过基因组总长度一半的contig的长度就是NG50"。NA50比较稍微复杂,需要将组装结果进一步比对到参考基因组上,以contig实际和基因组匹配的长度进行排序计算。

说完N50,我们介绍两款工具,QUAST和BUSCO。

QUAST使用质量标准(quality metrics)来评估不同组装工具和不同参数的组装效果,无论是否有基因组都可以使用。我们分别以有参和无参两种模式比较Minia,IDBASPAdes三个组装的运行结果

# without reference
quast.py -o compare idba_ud/contig.fa minia/minia.contigs.fa spades/contigs.fasta
# with reference
quast.py -R ../genome/Saureus.fna -o compare idba_ud/contig.fa minia/minia.contigs.fa spades/contigs.fasta
quast运行结果

这个结果非常直观的告诉我们一个事实就是spades组装的contigs`各方面表现都很优秀,minia由于内存使用率最低,所以组装效果一般也是可以理解。

BUSCO通过同源基因数据库从基因完整度来评价基因组组装结果。BUSCO首先构建了不同物种的最小基因集,然后使用HMMER,BLAST,Augustus等工具分析组装结果中的同源基因,从而定量评估组装是否完整。

busco -i assembly/spades/contigs.fasta -o result -l /home/wangjw/db/busco/bacteria_odb9 -m genome -f

运行结果会在当前目录下的run_result生成一些列文件,其中的short_summary_result.txt内容如下

# Summarized benchmarking in BUSCO notation for file assembly/spades/contigs.fasta
# BUSCO was run in mode: genome

    C:98.6%[S:98.6%,D:0.0%],F:0.0%,M:1.4%,n:148

    146 Complete BUSCOs (C)
    146 Complete and single-copy BUSCOs (S)
    0   Complete and duplicated BUSCOs (D)
    0   Fragmented BUSCOs (F)
    2   Missing BUSCOs (M)

C值表示和BUSCO集相比的完整度,M值表示可能缺少的基因数,D则是重复数。正所谓没有比较,就没有伤害,我们拿之前QUAST对比中表现比较差的minia结果作为对比。

    C:85.1%[S:85.1%,D:0.0%],F:2.7%,M:12.2%,n:148

    126 Complete BUSCOs (C)
    126 Complete and single-copy BUSCOs (S)
    0   Complete and duplicated BUSCOs (D)
    4   Fragmented BUSCOs (F)
    18  Missing BUSCOs (M)

98% vs 85%, 一下子对比就出来了。综上,从两个维度上证明的SPAdes不但组装效果好,而且基因完整度也高,当然它的内存消耗也是很严重。这都是取舍的过程。

附录

参考资料

软件安装

由于不同软件对不同的基因组的适合度不同,一般都需要参数多个工具的不同参数,根据N50和BUSCO等衡量标准选择比较好的结果。为了避免后续花篇幅在工具安装上,因此先准备后续的分析环境。对于组装而言,我们需要安装如下工具:

  • 质量控制:
    • FastQC
    • fastp
    • BFC
  • 主流组装工具:
    • ABySS
    • IDBA
    • SOAPdenovo2
    • Velvet
    • Sapdes
    • Minia
    • Ray
    • MasuRCA
  • 基因组组装评价工具
    • BUSCO
    • Quast
  • 基因结构预测和功能注释暂时不在考虑范围内

更多相关工具见https://biosphere.france-bioinformatique.fr/wikia2/index.php/Tools_directory_in_Assembly_and_Annotation_(Lexicographic_ordering)

以下操作所用服务器的基本信息为:Linux的内核为3.10.0-693.el7.x86_64, GCC版本为4.8.5。为了方便管理和使用软件,建议建立如下几个文件夹, 分门别类的存放不同工具及其源码。

# 普通用户
mkdir -p ~/opt/{sysoft,biosoft}
mkdir -p ~/src
# 管理员
sudo mkdir -p /opt/{sysoft,biosoft}
sudo mkdir -p /src
sudo chmod 1777 /opt/biosoft /opt/sysoft /src

系统自带的GCC版本是4.8,而BLESS2要求4.9+, ABySS要求6.0+,直接编译这些工具可能会出错,但直接升级系统的GCC版本可能会影响整体稳定性,因此推荐将在opt/sysoft下安装高版本的GCC。当然GCC的版本也不是越高越好,最好和作者开发的版本一致,也就是他们要求的最低版本。

# gcc,mpfr,gmp,mpc,isl
cd ~/src
wget -4 https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-6.4.0/gcc-6.4.0.tar.xz
tar xf gcc-6.4.0.tar.xz
cd gcc-6.4.0
./contrib/download_prerequisites
mkdir build && cd build
../configure --prefix=$HOME/opt/sysoft/gcc-6.4.0 --enable-threads=posix --disable-multilib --with-system-zlib
make -j 8 && make install

根据我之前关于GCC编译的文章,程序编译不成功大多是因为找不到头文件(存放在include目录下)链接库文件(存放在lib目录下),默认编译头文件只会搜索/usr/include,/usr/local/include, 而链接库文件只会搜索/lib,/usr/lib[64],/usr/local/lib[64]. 为了让编译完成的GCC的头文件和链接库文件能被搜索到,需要在~/.bashrc文件中添加几个环境变量:

  • PKG_CONFIG_PATH: 同时添加搜索头文件和链接头文件的路径
  • C_INCLUDE_PATH: 编译时搜索头文件的路径
  • LIBRARY_PATH: 编译时搜索链接文件的路径
  • LD_LIBRARY_PATH: 运行时搜索链接文件的路径

即添加如下几行内容到~/.bashrc文件中,并执行source ~/.bashrc更新环境变量。

export PKG_CONFIG_PATH=~/opt/sysoft/gcc-6.4.0/lib64/pkgconfig:$PKG_CONFIG_PATH
export C_INCLUDE_PATH=~/opt/sysoft/gcc-6.4.0/include:$C_INCLUDE_PATH
export LIBRARY_PATH=~/opt/sysoft/gcc-6.4.0/lib64:$LIBRARY_PATH
export LD_LIBRARY_PATH=~/opt/sysoft/gcc-6.4.0/lib64:$LD_LIBRARY_PATH
export PATH=~/opt/sysoft/gcc-6.4.0/bin:$PATH

genome survey工具: 功能都类似,GCE安装最方便胜出

cd ~/src
wget ftp://ftp.genomics.org.cn/pub/gce/gce-1.0.0.tar.gz
tar xf gce-1.0.0.tar.gz  -C ~/opt/biosoft

组装软件种类很多,对于小基因组(<100Mb)而言SPAdes是很好的选择, 但是对于大基因组就得多试试几个,比如说MaSuRCA, Discover de novo, Abyss,SOAPdenovo2, IDBA。内存不太够的话可以尝试Minia。

组装软件一:ABySS的安装依赖boost1.62, OpenMPI, Google/sparsehash, SQLite,且GCC支持OpenMP,因此也就是一个个下载,一个个安装的过程。

# boost1.62
cd ~/src
wget -4 https://sourceforge.net/projects/boost/files/boost/1.62.0/boost_1_62_0.tar.bz2
tar xf boost_1_62_0.tar.bz2
cd boost_1_62_0
./bootstrap.sh --prefix=$HOME/opt/sysoft/boost-1.62
./b2
# 引入头文件的路径为~/src/boost_1_62_0, 引入链接库的路径为~/src/boost_1_62_0/stage/lib
# openmpi
wget https://www.open-mpi.org/software/ompi/v3.0/downloads/openmpi-3.0.0.tar.gz
tar xf openmpi-3.0.0.tar.gz
cd openmpi-3.0.0
./configure --prefix=$HOME/opt/sysoft/openmpi-3.0.0
make -j 8 && make install
# 在.bashrc中添加环境变量或手动修改也行
echo 'export PKG_CONFIG_PATH=~/opt/sysoft/openmpi-3.0.0/lib/pkgconfig:$PKG_CONFIG_PATH' >> ~/.bashrc
echo 'export PATH=~/opt/sysoft/openmpi-3.0.0/bin:$PATH' >> ~/.bashrc
# sparsehash
cd ~/src
git clone https://github.com/sparsehash/sparsehash.git
cd sparsehash
./configure --prefix=$HOME/opt/sysoft/sparsehash
make && make install
# sqlite
cd ~/src
wget -4 http://www.sqlite.org/2018/sqlite-tools-linux-x86-3220000.zip
unzip sqlite-tools-linux-x86-3220000.zip
mv sqlite-tools-linux-x86-3220000 ~/opt/sysoft/sqlite3

最后在安装ABySS时要以--with-PACKAGE[=ARG]形式指定依赖软件的路径

cd ~/src
wget -4 http://www.bcgsc.ca/platform/bioinfo/software/abyss/releases/2.0.2/abyss-2.0.2.tar.gz
tar xf abyss-2.0.2.tar.gz
cd abyss-2.0.2
./configure --prefix=$HOME/opt/biosoft/abyss-2.0.2--with-boost=$HOME/src/boost_1_62_0 --with-sparsehash=$HOME/opt/sysoft/sparsehash --with-sqlite=$HOME/opt/sysoft/sqlite3
make && make install

组装软件二:SOAPdenovo2,华大出品,目前使用率最高的工具

cd ~/src
git clone https://github.com/aquaskyline/SOAPdenovo2.git
cd SOAPdenovo2
mkdir -p ~/opt/biosoft/SOAPdenovo2
mv SOAPdenovo-* ~/opt/biosoft/SOAPdenovo2/

组装软件三: IDBA. de Brujin图依赖于K-mers的k的选择,IDBA能够自动化递归使用不同的k进行组装,从而确定最优的K。

cd ~/src
git clone https://github.com/loneknightpy/idba.git
idba/build.sh
mv idba ~/opt/biosoft/

组装软件四:MaSuRCA,能够纯用二代,也能二代三代测序混合使用,先用 de bruijn 图构建长reads,然后再用OLC算法进行组装

cd src
wget ftp://ftp.genome.umd.edu/pub/MaSuRCA/latest/MaSuRCA-3.2.4.tar.gz
tar xf MaSuRCA-3.2.4.tar.gz
cd MaSuRCA-3.2.4
export DEST=$HOME/opt/biosoft/MasuRCA
./install.sh

质控软件一: 原本是要推荐BLESS2,但是这个软件在编译完成后出现各种核心转移的毛病,和我的系统相性太差,于是改用Li Heng的BFC

cd ~/src
git clone https://github.com/lh3/bfc.git
cd bfc
make
mkdir -p ~/opt/biosoft/bfc
mv bcf hash2cnt ~/opt/biosoft/bfc

质控软件二: fastp是一款基于C/C++编写的工具,速度会比较块,而且运行之后会有比较好看的图哦

mkdir -p ~/opt/biosoft/fastp
cd ~/opt/biosoft/fastp
wget http://opengene.org/fastp/fastp
chmod a+x ./fastp

评估工具一:Quast, 它通过比较N50,N G50等参数来评价基因组组装质量.Quast由Python编写,推荐使用bioconda安装

conda create --name assembly python=2.7
source activate assembly
conda install quast

评估工具二: BUSCO,这是一个利用进化信息从基因完整性角度评估组装准确性的工具,推荐使用biconda安装。

source activate assembly
conda install busco

尽管conda安装了busco,但是离实际运行还需要添加几个环境变量和不同物种的基因数据集,请使用printenv确保如下如下几个路径都已经添加到环境变量中。

export PATH="/path/to/AUGUSTUS/augustus-3.2.3/bin:$PATH"
export PATH="/path/to/AUGUSTUS/augustus-3.2.3/scripts:$PATH"
export AUGUSTUS_CONFIG_PATH="/path/to/AUGUSTUS/augustus-3.2.3/config/"

之后,根照自己研究的物种在http://busco.ezlab.org/选择进化上接近的评估数据集,比如说你如果研究鱼,那么"actinopterygii(辐鳍鱼类)"就比"metazoa(多细胞动物)"更加合适.

实际运行时可能还存在链接库无法找寻以至于程序出错,解决方法就是将相对应或着接近的库拷贝或软链接到~/miniconda3/env/assembly/lib下。

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

推荐阅读更多精彩内容