CheckM

1,538 阅读13分钟
参考:https://github.com/Ecogenomics/CheckM

一、CheckM介绍

1 CheckM是什么

CheckM 提供了一套工具,用于评估从分离株、单细胞或宏基因组中恢复的基因组的质量。
CheckM 通过使用系统发育谱系中普遍存在的单拷贝基因组,提供对基因组完整性和污染的可靠估计。
CheckM 通过使用绘制关键基因组特征(例如GC含量、编码密度)的图表,可以评估基因组质量,并突出显示与典型基因组预期分布不符的序列。
CheckM 还提供了用于识别可能候选合并的基因组容器的工具,这些容器基于标记物集的兼容性、基因组特征的相似性以及在参考基因组树中的接近程度。

2 安装CheckM

# `创建conda虚拟环境`
conda create -n checkm python=3.9
# `激活conda环境`
conda activate checkm
# `安装依赖`
conda install -c bioconda numpy matplotlib pysam
conda install -c bioconda hmmer prodigal pplacer
# `安装checkm`
conda install -c bioconda checkm-genome

3 安装CheckM数据库

# 进入工作目录
cd ~/database
# 创建数据库存放目录
mkdir checkm && cd checkm
# 下载checkM数据库压缩包:
wget https://data.ace.uq.edu.au/public/CheckM_databases/checkm_data_2015_01_16.tar.gz
# 解压checkM数据压缩包
tar -zxvf checkm_data_2015_01_16.tar.gz
# 删除压缩包
rm checkm_data_2015_01_16.tar.gz
# 设置checkm数据库路径
checkm data setRoot ~/database/checkm

4 检查checkm安装

checkm

二、CheckM标准工作流

CheckM适用于以FASTA格式存储的基因组bins目录。
默认情况下,CheckM假设基因组由核苷酸空间中的contigs/scaffolds组成,并且要处理的文件以fna扩展名结尾。

# CheckM 的标准工作流程是:
checkm lineage_wf <bin folder> <output folder>
要获取完整的选项列表,请运行`checkm lineage_wf -h`

# 使用示例:
checkm lineage_wf -t 8 -x fa /home/donovan/bins /home/donovan/checkm
-t 指定线程数   -x fa 指定文件格式  输入文件bins   输出文件

三、命令行概述

# 谱系特异性标记物集
`tree`       :  将基因组bins放置在参考基因组树中 
`tree_qa`    :  评估每个基因组bins中发现的系统发育标记物 
`lineage_set`:  推断每个基因组bins的谱系特异性标记物集合

# 物种特异性标记物集合
`taxon_list` :  列出可用的物种特异性标记物集合
`taxon_set`  :  推断物种特异性标记物集合

# 将标记物集应用于基因组bins
`analyze`    :  在基因组bins中识别标记基因 
`qa`         :  评估基因组bins的污染和完整性

# 常见工作流程(结合上述命令)
`lineage_wf` :  运行 tree, lineage_set, analyze, qa 
`taxonomy_wf`:  运行 taxon_set, analyze, qa

# 基因组bins质量评估图
`bin_qa_plot`:  基因组bins完整性、污染度和菌株异质性的条形图

# 参考分布图
`gc_plot`    :  创建GC含量直方图和GC变化图 
`coding_plot`:  创建编码密度(CD)直方图和CD变化图 
`tetra_plot` :  创建四核苷酸距离(TD)直方图和TD变化图 
`dist_plot`  :  创建包含GCCDTD分布图的图像

# 常规图表
`nx_plot`    :  创建Nx图,用于描述基因组或序列集合的大小分布
`len_plot`   :  累积序列长度图 
`len_hist`   :  序列长度直方图 
`marker_plot`:  在序列上绘制标记基因的位置 
`par_plot`   :  GC和覆盖度的平行坐标图 
`gc_bias_plot`: 绘制基因组bins覆盖度与GC的关系图

# 序列子空间图
`cov_pca`    :  覆盖度轮廓的PCA`tetra_pca`  :  四核苷酸特征的PCA图

#基因组bins的探索和修改:
`unique`     :  确保没有序列被分配到多个基因组bins中 
`merge`      :  识别具有互补标记基因集的基因组bins
`outliers`   :  [实验性] 相对于参考分布识别基因组bins中的异常值 
`modify`     :  [实验性] 修改基因组bins中的序列

# 实用功能
`unbinned`   :  识别未分配到基因组bins中的序列 
`coverage`   :  计算序列的覆盖度 
`tetra`      :  计算序列的四核苷酸特征 
`profile`    :  计算每个基因组bins映射到的读取比例 
`join_tables`:  合并包含基因组bins信息的制表符分隔值表格 
`ssu_finder` :  识别序列中的SSU(16S/18S)rRNA
`bin_compare`:  比较两组基因组bins(例如,来自不同的基因组bins分配方法)

四、工作流

1 lineage_wf

`lineage_wf`用于评估基因组箱的`完整性和污染`。

此工作流程由 4 个必要步骤和 1个推荐步骤组成:

# 将基因组箱放入参考基因组树中
checkm tree <bin folder> <output folder>
# 将指示在每个基因组箱中发现的系统发育信息标记基因的数量以及指示其在树中的大致位置的分类字符串
* checkm tree_qa <output folder>
# 创建一个标记文件,指示适合评估每个基因组的谱系特异性标记集
checkm lineage_set <output folder> <marker file>
# 识别标记基因并估计每个基因组箱的完整性和污染度
checkm analyze <marker file> <bin folder> <output folder>
# 生成不同的表格,总结每个基因组箱的质量
checkm qa <marker file> <output folder>

使用工作流lineage_wf直接包含上面的所有步骤:checkm lineage_wf <bin folder> <output folder>

2 taxonomy_wf

使用相同的标记集分析所有基因组箱是很方便的。
使用分类特异性标记集的工作流程由 3个必要步骤和 1个推荐步骤组成:

# `taxon_list`命令生成一个表,指示可以为其生成标记集的所有分类单元
* checkm taxon_list 

# `taxon_set`命令用于为特定分类单元生成标记集
checkm taxon_set <rank> <taxon> <marker file>

# 生成的标记文件`taxon_set`将传递给`analyze`命令,以便识别每个基因组箱内的标记基因并估计完整性和污染
checkm analyze <marker file> <bin folder> <output folder>

# `qa`命令可用于生成不同的表格,总结每个基因组箱的质量
checkm qa <marker file> <output folder>

# 上述工作流程可以一步执行:
checkm taxonomy_wf <rank> <taxon> <bin folder> <output folder>

五、基因组质量命令

1 tree

# 将bins放到参考基因组树中
` checkm tree <bin folder> <output folder> `

# 参数说明

# 必要参数:
bin folder  :包含bin的文件夹(FASTA文件)
out folder  :输出文件目录

# 可选参数:
-r / --reduced_tree  : 使用简化树来确定每个bin的谱系
--ali :为每个bin生成HMMER对齐文件
--nt  :为每个bin生成核苷酸基因序列
-g / --genes : bin包含氨基酸形式的基因,而不是核苷酸重叠群
-x / --extension  : bins的扩展名
-t / --threads  : 线程数
--pplacer_threads  :pplacer使用的线程数
-q / --quiet  : 抑制控制台输出

2 tree_qa

# 评估每个bin中发现的系统发育标记
` checkm tree_qa <tree folder>

# 参数说明
# 必要参数
tree_folder  : `tree`命令指定的输出文件夹

# 可选参数
-o / --out_format:指定所需的输出(1-5)
1. 基因组树位置的`简要摘要`,指示发现的独特系统发育信息标记的数量、多次发现的标记数量,以及指示`每个bin在基因组树内的位置`的分类单元字符串
2. 基因组树放置的`详细摘要`,更详细地指示`每个 bin 在基因组树中的位置`、每个 bin 的一般特征(例如 GC、基因组大小、编码密度)以及来自亲代节点的所有参考基因组后代的一般特征每个箱的(例如,GC 的平均值和标准差)
3. `Newick格式的基因组树`,用 IMG 基因组 ID 装饰,可用于检查每个 bin 的系统发育邻居
4. `Newick 格式的基因组树`,用分类字符串装饰,可用于检查每个 bin 的系统发育邻居
5. `参考基因组和bin的多重序列比对`,可用于推断`从头基因组树`

-f / --file: 将结果打印到文件而不是控制台
--tab_table:对于表格输出,打印制表符分隔值表,而不是为控制台输出格式化的表
-q / --quiet: 抑制控制台输出

3 lineage_set

# 推断每个bin的谱系特定标记集
` checkm lineage_set <tree folder> <marker file> `

# 参数说明
# 必要参数
tree_folder : `tree`命令期间指定的文件夹
marker_file :  描述每个 bin 的标记集的输出文件

# 可选参数
-u / --unique:使用谱系特异性标记集所需的唯一系统发育标记的最小数量,否则使用域级标记集
-m / --multi: 默认为域级标记集之前多拷贝系统发育标记的最大数量
--force_domain:对所有 bin 使用域级标记集
--no_refinement:不执行谱系特定的标记集细化
-q / --quiet: 抑制控制台输出

4 taxon_list

# 列出可用的分类学特定标记集
checkm taxon_list

# 参数
--rank  : 将列表限制为指定的分类等级

5 taxon_set

# 生成分类特异性标记集
checkm taxon_set <rank> <taxon> <marker file>

# 参数说明
# 必要参数
rank  : 所需分类特异性标记集的分类等级
taxon  : 感兴趣的分类单元
marker file  : 描述分类特定标记集的输出文件
# 可选参数

6 analyze

# 识别bin中的标记基因
checkm analyze <marker file> <bin folder> <output folder>

# 必要参数
marker_file  :用于评估 bin 的标记(标记集或 HMM 文件)
bin_folder   :包含 bin 的文件夹(FASTA 格式)
out_folder   :输出文件的文件夹

# 可选参数
--ali        : 为每个 bin 生成 HMMER 对齐文件
--nt         :为每个 bin 生成核苷酸基因序列
-g / --genes : bin 包含氨基酸形式的基因,而不是核苷酸重叠群
-x / --extension : bins 的扩展名(文件夹中的其他文件将被忽略)
-t / --threads   : 线程数
-q / --quiet     : 抑制控制台输出

7 qa

# 评估垃圾箱的污染情况和完整性
` checkm qa <marker file> <analyze folder> `

# 必要参数
marker_file     : `analyze`命令期间指定的标记文件
analyze_folder  : `analyze`命令期间指定的文件夹

# 可先参数
-o / --out_format:指定所需的输出 (1-9)
    1 bin完整性、污染和菌株异质性总结
    2 bin 质量的扩展摘要(包括 GC、基因组大小、编码密度等)
    3 日益基础的谱系特异性标记集的箱质量总结
    4 每个 bin 的标记基因列表以及每个标记被识别的次数
    5 每个已识别标记基因的 bin id、标记基因 id 和调用基因 id 列表
    6 标记基因列表在一个bin中多次出现
    7 同一支架上多次出现的标记基因列表
    8 指示bin内每个标记基因位置的列表
    9 每个 bin 中识别的标记基因的 FASTA 文件
    
--exclude_markers       :指定要从标记集中排除的标记的文件
--individual_markers    :将标记视为独立的(即忽略共置集合结构)
--skip_orf_ Correction  :跳过影响标记基因的 ORF 调用错误的识别
--aai_strain            :用于识别菌株异质性的氨基酸同一性(AAI)阈值
-a/--alignment_file     : 生成显示多拷贝基因比对及其 AAI 身份的文件,可用于进一步评估菌株异质性
--ignore_thresholds     :忽略特定于模型的分数阈值
-e / --e_value          :e 值截止(如果指定了特定于模型的阈值,则不使用)
-l / --length           :目标和查询之间的重叠百分比
-c / --coverage_file    : 包含每个序列的覆盖范围的文件
-f / --file             : 将结果打印到文件而不是控制台
--tab_table             :对于表格输出,打印制表符分隔值表,而不是为控制台输出格式化的表
-t / --threads          : 线程数
-q / --quiet            : 抑制控制台输出

六、Plots

CheckM可以生成许多用于评估基因组箱质量的图。

1 bin_qa_plot

提供每个基因组箱bin完整性、污染度和菌株异质性的可视化表示

2 gc_plot

提供一个适用于评估基因组区段内序列的GC含量分布的三窗格图。
第一个窗格是一个直方图,显示了拥有特定GC含量的非重叠的5千碱基对窗口的数量。
第二个窗格以每个序列在基因组区段中的GC含量偏离平均值(x轴)和序列长度(y轴)为函数进行绘图。

3 coding_plot

提供类似于 gc_plot 的图,适合评估基因组箱内序列的编码密度

4 tetra_plot

评估基因组箱内序列的四核苷酸特征

5 dist_plot

结合gc_plot、coding_plot、tetra_plot生成一个指示基因组箱内所有序列的四核苷酸特征的文件

6 nx_plot

相对于N50提供了更全面的装配质量视图

7 len_plot

绘制基因组箱的累计序列长度图,最长到最小的顺序排列

8 len_hist

生成基因组箱内不同序列长度间隔的序列数量的直方图

9 marker_plot

绘制基因组箱内序列上标记基因的位置

10 par_plot

生成平行坐标图,说明基因组箱内每个序列的GC和覆盖范围

11 cov_pca

生成假定基因组序列之间的覆盖分布距离的主成分图(PCA

12 tetra_pca

生成主成分图(PCA),指示假定基因组内序列之间的四核苷酸距离

七、bin探索和修改

1 unique

检查每个假定的基因组并确定没有序列被分配给多个基因组
对于大多数分享方法来说,将序列分配给多个假定的基因组将表明存在严重的分箱错误。
checkm unique ./bins

2 merge

识别具有互补标记基因集的基因组箱。
合并这些bins可以显著增加完整性,但是污染度影响不大。
checkm merge bacteria.ms ./bins ./output

3 bin_compare

生成一个表格,指示两种不同的基因组分箱方法产生的基因组bins之间的相似性。
checkm bin_compare seqs.fna ./bins1 ./bins2 bin_comparison.tsv

4 outliers

生成一张表格,显示基因组bins的序列,它们在GC含量、四核苷酸(TD)或编码密度(CD)空间中与这些基因组统计学参数的预期分布存在显著偏离。
checkm outliers ./output ./bins tetra.tsv outliers.tsv

5 modify

允许向基因组bin中添加或移除序列
checkm modify -r seq_id1 -r seq_id2 seqs.fna bin.fna new_bin.fna

八、实用命令

1 unbinned

给定一组基因组bin以及FASTA序列文件,确定其中哪些序列当前不包括含在基因组bins中。
checkm unbinned ./bins seqs.fna unbinned.fna unbinned_stats.tsv

2 coverage

生成一组基因组bin内所有序列的覆盖概况。
需要使用BWA等工具生成的索引和排序的BAM文件。
checkm coverage ./bins coverage.tsv example_1.bam example_2.bam

3 tetra

FASTA文件中所有序列生成四核苷酸签名。
checkm tetra seqs.fna tetra.tsv

4 profile

生成一个表,指示映射到一个组装序列的 reads 中,分别分配给每个基因组bin或分配给未分组的 contigs 的百分比
checkm profile coverage.tsv

5 join_tables

连接两个制表符分割值表,每个表的第一列用作连接表的唯一标识符。
将命令profile生成的表与qa生成的表连接起来
checkm  join_tables table1.tsv table2.tsv

6 ssu_finder

如果序列包含在基因组bin内,则识别序列上的SSU(16S和18S)rRNA基因
checkm ssu_finder seq.fna ./bins ./ssu_finder