busco软件使用详解

作者: 笺牒九州的怪咖 | 来源:发表于2022-12-12 15:41 被阅读0次

    BUSCO - 组装质量评估软件

    BUSCO - Benchmarking Universal Single-Copy Orthologs 直译的话就是普遍通用的单拷贝直系同源测试
    BUSCO通过同源基因数据库从基因完整度来评价基因组组装结果。BUSCO首先构建了不同物种的最小基因集,然后使用HMMER,BLAST,Augustus等工具分析组装结果中的同源基因,从而定量评估组装是否完整。

    文献

    《BUSCO: assessing genome assembly and annotation completeness with single-copy orthologs》

    说明

    BUSCO是一款使用python语言编写的对转录组和基因组组装质量进行评估的软件。在相近的物种之间总有一些保守的序列,而BUSCO就是使用这些保守序列与组装的结果进行比对,鉴定组装的结果是否包含这些序列,包含单条、多条还是部分或者不包含等等情况来给出结果。

    BUSCO 软件根据OrthoDB 数据库,构建了几个大的进化分支的单拷贝基因集。将转录本拼接结果与该基因集进行比较,根据比对上的比例、完整性,来评价拼接结果的准确性和完整性。

    BUSCO使用其他的工具搭建了流程,它的流程是

    genoem assemble : tBLASTn --> Augustus --> HMMER3
    Transcriptome   :             Find ORF --> HMMER3
    Gene set        :                          HMMER3
    
    

    1. 下载与安装【方便】

    这里使用conda来自动安装BUSCO以及它的依赖工具。如果没有conda,那么可以查看这篇文章安装conda。

    安装conda之后进行busco的安装。安装完毕之后,下载好数据库文件就可以直接跳到运行那一步了。下面的配置啊,安装之类的是针对【麻烦】的安装方式。

    conda install busco
    
    

    有时候在默认搜索库中没有找到相关信息,那么就尝试下面的方法

    # 构建conda的python3环境
    conda create --name python36 python=3.6
    #  然后激活
    conda activate python36
    # 执行安装
    conda install -c https://conda.anaconda.org/bioconda busco
    # 在使用完busco之后可以退出python36环境
    conda deactivate
    
    

    如果使用conda安装成功,那么就执行2\. 下载数据库文件 -> 5\. 运行 -> 6\. 结果解读 -> 7\. 画图

    使用conda自动完整安装过程,但是有时候没有管理员权限或者其他一些原因无法这样安装,那么就可以根据下面的方法进行安装。

    1. 下载与安装【麻烦】

    不使用conda安装的话,那么每一个工具需要单独下载,然后导入到环境变量当中去,让busco想用到它们的时候能够找得到它们。在对这种关联软件安装折磨之后对程序的安装的理解有帮助的,加油!

    依赖的工具

    • Augustus
    • HMMER
    • Blast+

    下载

    • 下载软件包
    #  ============ 下载BUSCO  ============ 
    cd ~/Applications/download
    wget -c https://gitlab.com/ezlab/busco/-/archive/master/busco-master.zip -O busco.zip
    
    # ============ 下载依赖的工具 ============
    # 下载Augustus
    wget -c http://bioinf.uni-greifswald.de/augustus/binaries/augustus.current.tar.gz
    # 下载HMMER
    wget -c http://eddylab.org/software/hmmer/hmmer.tar.gz -O hmmer.tar.gz
    # 下载Blast+
    wget -c ftp://ftp.ncbi.nlm.nih.gov/blast/executables/LATEST/ncbi-blast-2.7.1+-x64-linux.tar.gz
    
    

    安装

    cd ~/Applications/download
    
    # === 安装busco ===
    unzip busco.zip
    # 改名
    mv busco-master busco 
    # 移动到外部
    mv busco ../
    cd ../busco
    # 安装
    python setup.py install
    
    cd ~/Applications/download
    # === 安装Augustus ===
    tar -xzvf augustus.current.tar.gz
    cd augustus-3.3.1
    cd ../
    mv augustus-3.3.1 ../
    cd ../augustus-3.3.1
    # 打开common.mk文件,将ZIPINPUT = true注释掉(即在最前面加一#号)
    vim common.mk
    # 安装
    make
    
    cd ~/Applications/download
    # === 安装HMMER ===
    tar -xzvf hmmer.tar.gz
    cd hmmer-3.2.1
    ./configure
    make
    
    # === 安装blast+ ===
    tar -xzvf ncbi-blast-2.7.1+-x64-linux.tar.gz
    # 改名
    mv ncbi-blast-2.7.1+ ../blast+-2.7.1-linux
    
    # 删除安装包
    cd ~/Applications/download
    rm busco.zip
    rm augustus.current.tar.gz
    rm hmmer.tar.gz
    rm ncbi-blast-2.7.1+-x64-linux.tar.gz
    
    

    2. 下载数据库文件

    上面软件安装完毕之后,就开始下载数据库文件了,根据组装的物种来选择对应的数据库文件。

    # 浏览器打开下列网址
    https://busco.ezlab.org/
    
    

    查找下载需要评估的组装的物种对应的类群(最近:最近发现了busco的库更新了,里面的数据库的分类更加详细了,但是大类还是下面5个,具体的详细类别这里就不列举了)

    - Bacteria 细菌
    - Protists 原生生物
    - Metazoa 后生动物
    - Fungi 真菌
    - Plant 植物
    
    

    例如下载植物的BUSCO的数据库(对着需要下载的类群的图片右键->复制链接地址,之后就得到了下载链接,然后在命令行使用wget之类的下载命令下载),比如下面我下载的是植物相关的,我就下载的植物类群。

    mkdir -p ~/database/BUSCO/
    cd ~/database/BUSCO/
    # 下载
    wget -c https://busco.ezlab.org/datasets/embryophyta_odb9.tar.gz
    # 解压文件
    tar -xzvf embryophyta_odb9.tar.gz
    
    

    下面在执行那一步对应的数据库的文件路径就是

    ~/database/BUSCO/embryophyta_odb9
    
    

    3. 配置

    这里配置是必须的,这一步需要仔细一些,路径出错的话是无法通过busco的检测的,在安装好软件之后 ~/Applications/busco/config/之中并没有config.ini文件,只有一个config.ini_default文件,可以把里面的内容复制下来,

    • 方法1

    新建一个config.ini文件或者直接复制一份

    cp config.ini_default config.ini
    
    
    • 方法2

    也可以按照下面的说明进行

    # 增加配置文件
    vim ~/Applications/busco/config/config.ini
    
    

    加入如下内容

    # BUSCO specific configuration
    # It overrides default values in code and dataset cfg, and is overridden by arguments in command line
    # Uncomment lines when appropriate
    [busco]
    # Input file
    ;in = ./sample_data/target.fa
    # Run name, used in output files and folder
    ;out = SAMPLE
    # Where to store the output directory
    # out_path = /workdir
    # Path to the BUSCO dataset
    ;lineage_path = ./sample_data/example
    # Which mode to run (genome / protein / transcriptome)
    ;mode = genome
    # How many threads to use for multithreaded steps
    ;cpu = 1
    # Domain for augustus retraining, eukaryota or prokaryota
    # Do not change this unless you know exactly why !!!
    ;domain = eukaryota
    # Force rewrite if files already exist (True/False)
    ;force = False
    # Restart mode (True/False)
    ;restart = False
    # Blast e-value
    ;evalue = 1e-3
    # Species to use with augustus, for old datasets only
    ;species = fly
    # Augustus extra parameters
    # Use single quotes, like this: '--param1=1 --param2=2'
    ;augustus_parameters = ''
    # Tmp folder
    ;tmp_path = ./tmp/
    # How many candidate regions (contigs, scaffolds) to consider for each BUSCO
    ;limit = 3
    # Augustus long mode for retraining (True/False)
    ;long = False
    # Quiet mode (True/False)
    ;quiet = False
    # Debug logs (True/False), it needs Quiet to be False
    debug = True
    # tar gzip output files (True/False)
    ;gzip = False
    # Force single core for the tblastn step
    ;blast_single_core = True
    
    [tblastn]
    # path to tblastn
    path = ~/Applications/blast+-2.7.1-linux/bin
    
    [makeblastdb]
    # path to makeblastdb
    path = ~/Applications/blast+-2.7.1-linux/bin
    
    [augustus]
    # path to augustus
    path = ~/Applications/augustus-3.3.1/bin
    
    [etraining]
    # path to augustus etraining
    path = ~/Applications/augustus-3.3.1/bin
    
    # path to augustus perl scripts, redeclare it for each new script        
    [gff2gbSmallDNA.pl]                                                      
    path = ~/Applications/augustus-3.3.1/scripts                         
    [new_species.pl]                                                         
    path = ~/Applications/augustus-3.3.1/scripts                         
    [optimize_augustus.pl]                                                   
    path = ~/Applications/augustus-3.3.1/scripts                         
    
    [hmmsearch]                                                              
    # path to HMMsearch executable                                           
    path = ~/Applications/hmmer-3.2.1/src                                
    
    [Rscript]                                                                
    # path to Rscript, if you wish to use the plot tool                      
    path = /usr/bin/
    
    

    在新建好config.ini文件之后,

    1. config.ini文件中的out_path = /workdir前面加上#
      因为这个工具的输出路径有时候会出错,所以干脆将它注释掉,之后假如运行busco之后,输出的路径就是你之前cd到的路径

    2. 之后一般需要改这几项对应的路径(里面的路径需要更改为你自己的工具的路径

    选项 相关
    [tblastn] blast+
    [makeblastdb] blast+
    [augustus] Augustus
    [hmmsearch] HMMER
    [gff2gbSmallDNA.pl] Augustus
    [new_species.pl] Augustus
    [optimize_augustus.pl] Augustus
    [hmmsearch] HMMER

    🚩这些就是刚才我们安装的blast+HMMERAugustus的执行文件的路径,只需要把前面的路径改为你安装的程序的位置的路径就可以啦!

    比如我的blast+是安装在~/Applications之下, 执行文件在~/Applications/blast+-2.7.1-linux/bin 之中,比如你是安装在~/NAME/biosofts下面,那么对应的执行文件的路径就是~/NAME/biosofts/blast+-2.7.1-linux/bin

    其实可以看到上面的都是一些路径或者默认选项设置,读取配置文件然后设置这些项目进入程序是很多工具的方式。

    4. 导入环境变量

    这里没有对软件进行完整的安装,所以需要导入临时环境变量(防止在配置文件中busco没有找到相关程序)
    下面的路径都是刚才安装的程序的对应的路径

    # augustus工具的执行文件所在文件夹
    export PATH="/home/ssd/Applications/augustus-3.3.1/bin:$PATH"
    # augustus工具附加脚本所在文件夹
    export PATH="/home/ssd/Applications/augustus-3.3.1/scripts:$PATH"
    # augustus工具配置文件的所在位置 。AUGUSTUS_CONFIG_PATH 需要使用绝对路径
    export AUGUSTUS_CONFIG_PATH="/home/ssd/Applications/augustus-3.3.1/config"
    # hmmer工具的执行文件所在文件夹
    export PATH="/home/ssd/Applications/hmmer-3.2.1/src:$PATH"
    # blast+工具的执行文件所在文件夹
    export PATH="/home/ssd/Applications/blast+-2.7.1-linux/bin:$PATH"
    
    

    [可选]如果经常使用,建议加入永久的环境变量

    # 打开.bash_profile文件
    vim ~/.bash_profile
    
    # 在末尾添加上面的导入环境变量的内容
    
    

    5. 运行

    开始评估

    基本的使用方法为

    run_BUSCO.py -i [组装的文件.fasta]  -l  [数据库文件夹] -o [输出文件名] -m [评估模式] [其他一些选项]
    
    

    📍实际使用例子,如果是使用conda安装的BUSCO的话。执行的时候不需要写完整的路径,只需要写run_BUSCO.py

    # 首先cd到对应的组装文件的文件夹
    # 
    
    # -i 输入文件
    # -l BUSCO的数据库文件
    # -o 输出的文件名的后缀以及文件夹的名称
    # -m 分析类型(genome、transcriptome、proteins)
    # --cpu 线程数
    ~/Applications/busco/scripts/run_BUSCO.py \
        -i contigs.fasta \
        -l ~/database/BUSCO/embryophyta_odb9 \
        -o suffix\
        -m genome \
        --cpu 8
    
    

    ⚠️注意:在fasta文件中,一些组装工具生成的contig的名字是这种形式的>contig/1/12345之类的,这种fasta文件在运行的时候BUSCO会报错,解决办法就是将这种改名,老办法,perl单行程序。

    cat contig.fasta | perl -p -e 's{/}{}g' > contig.new.fasta
    
    

    6. 结果解读

    在运行文件夹下会有

    • run_suffix 文件夹:因为上面-o选项设置了suffix,所以文件夹名称加上了后缀。在这个文件夹里面,有一个文件最为重要。就是short_summary_suffix.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)
        148 Total BUSCO groups searched
    
    
    缩写 全称 说明 关系
    C Complete 多少个BUSCO测试基因被覆盖。 C = S + D
    S single-copy 多少个基因经过比对发现是单拷贝。 -
    D duplicated 多少个基因经过比对发现包含多拷贝。 -
    F Fragment 多少个基因经过比对覆盖不完全,只是部分比对上。 -
    M Miss 没有得到比对结果的基因数 -
    Total Total 总共测试的基因条目数 Total = C + F + M

    C值表示和BUSCO集相比的完整度,M值表示可能缺少的基因数,D则是重复数。

    一般来看,S似乎越大越好,M越小越好,说明组装的越完整,因为检测的单拷贝同源基因出现得多。但是DF这两个数值越大不见得就是好的,因为组装的错误可能会带来这两个值的增大。

    BUSCO评估结果:
    一般情况下对于完整度较好的基因组组装结果来讲,Complete and single-copy越多越好,而Complete and duplicated和Missing越少越好,对于Fragmented也尽可能地少一些。

    真实项目中,Complete BUSCOs (C) 的比例通常都能达到 80% 以上。

    下面列举了三种比对的情况。

    • 情况1 - 完全覆盖
    说明: +表示组装得到基因序列 -表示用于测试的基因序列
    
    组装 : ================+++++++==============
    测试                   -------
                           或者
    组装 : ==============+++++++++++============
    测试                   -------               
    
    
    • 情况2 - 部分覆盖
    组装 : ================+++++++==============
    测试                   -----
                         /      \
                           或者
    组装 : ================+++++++==============
    测试                   -------
                         /        \
    
    
    • 情况3 - 没有比对
    组装 : ================+++++++==============
    测试 
    
    

    一般来看S + D的数值也就是C的值越大越好,但是在文献中作者说如果D的数值太多的话可能意味着组装错误的可能性较大。因为一个基因(BUSCO数据库中该基因一般为单拷贝)被覆盖多次,那么可能就是说该基因所在的片段组装可能出现问题。
    因为理论上

    理论上:--------------------------------------------
    实际上:--------   ----------    ----------    -----
    错误的:--------                 -------------
               \\\\                    ///
              -----------     --------------
    
    

    理论上组装之后各个片段之间应该前后有序,之间除了重复区域或者其他特殊片段之外不应该有可以重叠的地方。
    例如

    sequence1 : ..TAGTCGTGA                         GTGCATGCTGTAGC..
                           \                       /
                            AAAATTGG......CGATGAAAA
                           /                       \
    sequence2 : ..GGGTAGCGG                         TTGACTAGCTAGCT..
    
    

    也就是说中间一段序列是两个序列的共同部分,除非这个序列存在多个拷贝,否则就很可能是拼接错误。通常一般这种拼接错误的序列的两端会出现重复序列。另外如果是多倍体组装的话,D值也可能大。

    基因组组装结果不能仅仅只是通过这一个软件来判定。比如还可以借助QUAST和常规指标N50总的核酸量点阵图等等多个辅助标准来进行综合的评估。

    7. 画图

    在执行完毕之后,可以使用generate_plot.py画图,这个图形说白了就是一种条形图。

    • 首先把所有的经过BUSCO检测的结果聚集到一个文件夹之内
    mkdir my_summaries
    cp run_SPEC1/short_summary_SPEC1.txt my_summaries/.
    cp run_SPEC2/short_summary_SPEC2.txt my_summaries/.
    cp run_SPEC3/short_summary_SPEC3.txt my_summaries/.
    cp run_SPEC4/short_summary_SPEC4.txt my_summaries/.
    cp run_SPEC5/short_summary_SPEC5.txt my_summaries/.
    
    
    • 然后运行
    python scripts/generate_plot.py –wd my_summaries
    
    
    image

    这个图就是将刚才第6步中的那五个数值变成这种条形图显示,让这种多少的对比更加明显,当然了,你自己也可以使用正则表达式将数值抓取出来,之后输出到文件中,然后使用python或者R来画图也是可以的。

    参考

    Augustus安装错误

    这种问题在Mac上安装出现的可能性比较大
    y

    cd auxprogs && make
    make[1]: Entering directory '/home/jxyue/Tools/augustus-3.2.3/auxprogs'
    cd bam2hints; make;
    make[2]: Entering directory '/home/jxyue/Tools/augustus-3.2.3/auxprogs/bam2hints'
    g++ -Wall -O2    -c bam2hints.cc -o bam2hints.o -I/usr/include/bamtools 
    bam2hints.cc:16:27: fatal error: api/BamReader.h: No such file or directory
     #include <api/BamReader.h>
                               ^
    compilation terminated.
    Makefile:29: recipe for target 'bam2hints.o' failed
    make[2]: *** [bam2hints.o] Error 1
    make[2]: Leaving directory '/home/jxyue/Tools/augustus-3.2.3/auxprogs/bam2hints'
    Makefile:7: recipe for target 'all' failed
    make[1]: *** [all] Error 2
    make[1]: Leaving directory '/home/jxyue/Tools/augustus-3.2.3/auxprogs'
    Makefile:7: recipe for target 'all' failed
    make: *** [all] Error 2
    
    

    解决方法

    第一步:安装好bamtools

    • 简单的安装方法
    brew install bamtools libbamtools-dev
    
    
    • 其他安装方法
    git clone git://github.com/pezmaster31/bamtools.git
    mkdir build
    cd build
    cmake -DCMAKE_INSTALL_PREFIX=/your/path/to/bamtools ..
    make
    make install
    
    

    第二步:修改路径

    • bam2hints Makefile
    # 先进入到augustus的解压目录
    cd ~/Application/augustus-3.2.3/auxprogs/bam2hints
    vim Makefile
    
    # ====== 修改下列值 =====
    
    # 原始
    INCLUDES = /usr/include/bamtools
    # 修改
    INCLUDES = $(BAMTOOLS)/include/bamtools
    
    # 原始
    LIBS = -lbamtools -lz
    # 修改
    LIBS = $(BAMTOOLS)/lib64/libbamtools.a -lz
    
    
    • filterBam Makefile
    cd ~/Application/augustus-3.2.3/auxprogs/filterBam/src/
    vim Makefile
    
    # ====== 修改下列值 =====
    
    # 原始
    BAMTOOLS = /usr/include/bamtools
    # 修改
    # BAMTOOLS = /usr/include/bamtools
    
    # 原始
    INCLUDES = -I$(BAMTOOLS) -Iheaders -I./bamtools
    # 修改
    INCLUDES = -I$(BAMTOOLS)/include/bamtools -Iheaders -I./bamtools
    
    # 原始
    LIBS = -lbamtools -lz
    # 修改
    LIBS = $(BAMTOOLS)/lib64/libbamtools.a -lz
    
    

    安装

    make BAMTOOLS=$(which bamtools)
    
    

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------I`m a line ! Thanks !---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    参考链接:https://www.jianshu.com/p/5041460f7a5d

    相关文章

      网友评论

        本文标题:busco软件使用详解

        本文链接:https://www.haomeiwen.com/subject/nnerortx.html