云生信学生物信息学

同样的 100 份粪便宏基因组,为什么多出 1,197 个 bin?复现 TOFU-MAaPO 图 2

作者:发布于 2026-11-14约 11 分钟阅读
四套流程在同一百份样本中的正分 bin 数,以及 ATLAS 改用 50 分门槛后的结果

同一批肠道测序数据,TOFU-MAaPO 的曲线上有 2,745 个 bin,ATLAS 有 1,548 个。多出的 1,197 个究竟代表什么?打开作者的 CheckM 表,把质量门槛换一次,单是 ATLAS 的数字就会从 1,548 变成 1,458。做菌群基因组目录时,先把“一个 bin 怎样获得入场资格”说清楚,后面的比较才有意义。Wacker 等,Nature Communications,2026,图 2

四套流程在同一百份样本中的正分 bin 数,以及 ATLAS 改用 50 分门槛后的结果

论文解决了什么问题

宏基因组里,不同微生物的 DNA 混在一起。要研究一株菌可能携带哪些基因,单有物种丰度表还不够。组装先把短读段拼成长一些的 contig,分箱再按序列特征和覆盖度等线索,把可能来自同一基因组的 contig 放进一个 bin。经质量评估的组装基因组常称为 MAG。低丰度菌容易拼不全,近缘菌又容易被分到一起。

作者把公共测序数据下载、质控、去宿主、MEGAHIT 组装、多工具分箱、MAGScoT 整合以及质量评估串成 Nextflow 流程,用 50 份 ME/CFS 患者和 50 份对照的粪便宏基因组同时比较四套工具。方法上的亮点是让多个分箱器先给出候选,再凭标记基因等证据筛选和整合。每个算法交出多少 bin、整合后留下多少、统一评分后还能保留多少,是三个不同的问题。论文方法 · 1.6.0 流程源码

第一步 取回作者用于图 2 的文件

下面的轻量复现只需要 Git 和 Python 3,不下载 FASTQ。解压本文脚本包,在含 recount.py 的目录执行下列命令。仓库固定到具体提交,保证读取的是本文核对过的那一版表格和矢量图。下载复现脚本和预期输出 · 作者的基准文件目录

Shell
git clone https://github.com/ikmb/TOFUpaper.git
git -C TOFUpaper checkout 826dc7eec3eac1855bc14f60565d8206f35a1ab0
python3 recount.py TOFUpaper/assembly_benchmarks

目录里最值得打开的三个文件是 atlas_checkm_table.tsv、以 00_100sample 开头的 R 脚本和 arranged_benchmark_100samples_v2.svg。第一份给出 ATLAS 的逐个 bin 评分,第二份说明排序和过滤方式,第三份保存了四条曲线。R 脚本开头使用作者的集群挂载目录,直接运行会在寻找另外几套流程的评分表时遇到路径问题。ATLAS 源表 · 作者 R 脚本第 10–55 行

第二步 从 ATLAS 的源表重算两个数

Completeness 表示估计完整度,Contamination 表示估计污染度。作者对两个百分数使用 完整度 − 0.5 × 污染度。例如完整度 70、污染度 10 得 65 分。把原表的两列保留,后来才能试不同阈值。只保存最终“通过”标记,就无法追查候选为什么入选。作者的评分与过滤代码

Python
scores = [float(row["Completeness"]) - 0.5 * float(row["Contamination"])
          for row in bins]
assert len({row["Bin Id"] for row in bins}) == len(bins)
print(len(bins), sum(s > 0 for s in scores), sum(s >= 50 for s in scores))
# 1548 1548 1458

bins 是脚本读入的 TSV 全部行。断言先检查每个标识是否只出现一次。随后两个求和分别对应作图用的正分门槛和归一化 0.5 的门槛。表中的 90 个 bin 分数大于 0、低于 50。如果把英文正文的 0.5 直接套在百分数列上,会把大批低分 bin 计入。

第三步 核对图 2a 的四条曲线

作者先给每个 bin 一个按分数降序的名次,再过滤 score > 0,用 geom_line 把点连起来。在这个固定版本的 SVG 中,每条评分折线保留了每个 bin 的一个坐标。本文脚本按作者指定的四种颜色定位长折线,数出坐标,再用 ATLAS 源表交叉检查。下面是实际执行脚本的结果。颜色、过滤和绘图代码 · 原始 SVG

流程 图中正分 bin 数 本文怎样核对
TOFU-MAaPO 2,745 作者 SVG 曲线坐标数
metaFun 2,461 作者 SVG 曲线坐标数
nf-core/mag 1,929 作者 SVG 曲线坐标数
ATLAS 1,548 SVG 与逐 bin 的 CheckM 表一致

怎样读这张表? 跨样本的多个 bin 可能属于同一物种。要报物种数,还要定去冗余标准,并实际聚类。论文另报告在归一化评分 ≥0.5 时,TOFU-MAaPO 比另外三套流程分别多出约 12%、42%、77%。那是论文的阈值比较。本文独立重算了 ATLAS 的 1,458 个过线 bin,其余三套在本节核对到作图数量。项目如需按完整度、污染度分别设限,也应回到各自的逐 bin 表重新筛选。论文结果与基准设置

还有一个值得自己动手查的例子。ATLAS 表里,SRR6784403_maxbin_06 的完整度是 92.06%,污染度高达 44.71%,综合分仍有 69.705。我们在源表中数出 101 个综合分至少 50、同时污染度至少 10% 的 bin。若任务是把一条耐药基因归到某株菌名下,混入其他物种的 contig 可能让归属判断出错。筛目录时可以把完整度和污染度各列一栏,逐项过滤,再检查目标基因所在 contig 的覆盖度和分类证据。这样一来,读者知道哪些候选是因为证据不足被剔除,也能按自己的研究问题重做筛选。用于核对的逐 bin 源表

第四步 从一个真实样本开始跑组装

如果你的目标是把方法用到自己的测序数据,下一步才需要 Linux、Nextflow、Java、Apptainer 或 Singularity,以及可写的工作盘。下面选取原队列中的 SRR6784413 演示启动方式。本文实际运行到上面的源表和图文件核对,这一节给出读者在自己的节点上运行的命令。样本清单 · 作者运行 100 个样本的脚本

  1. 从基准仓库复制 tofu.config。将 params.genomes.human.bowtie_index 指向人宿主 Bowtie2 索引的共同前缀,将 gtdbtk_reference 指向已安装的 R207_v2 数据。作者配置启用 Singularity,而 custom 配置默认启用 Apptainer。若沿用作者的 Singularity 段,在自己的配置中写入 apptainer.enabled = false。若用 Apptainer,把容器段改为 apptainer 并只启用这一种。修改 cacheDir 和挂载目录,确保容器内可读数据库、可写工作目录。按节点实际配额设置 max_memory、max_cpus 和本地执行器总资源,替换原配置中的 /dpool 路径。固定版本默认配置 · 安装与数据库说明 · 宿主索引说明
  2. 在 shell 环境配置自己的 NCBI_API_KEY。下面使用论文版本 1.6.0 的六种分箱器,显式列出它们有助于复查参数。--assemblymode single 指每份样本分别组装。启用 VAMB 后,它仍可对多个样本联合分箱,因此单样本试跑只能验证流程和资源条件。1.6.0 实际默认参数 · 参数文档
Shell
cp TOFUpaper/assembly_benchmarks/TOFU-MAaPO/tofu.config ./tofu.config
# 先按上文修改 tofu.config,再运行以下命令
nextflow run ikmb/TOFU-MAaPO -r 1.6.0 \
  -profile custom -c "$PWD/tofu.config" \
  --sra SRR6784413 --apikey "$NCBI_API_KEY" --genome human \
  --assembly --assemblymode single \
  --binner comebin,concoct,maxbin,semibin,metabat,vamb \
  --publish_rawbins --publish_megahit \
  --outdir "$PWD/results-pilot" -work-dir "$PWD/work-pilot" \
  -with-trace "$PWD/pilot-trace.tsv" -with-report "$PWD/pilot-report.html"

试跑完成后如何验收。 打开 pilot-trace.tsv,按 name 找组装、分箱、整合和 CheckM 任务,核对 status、realtime 和 peak_rss。回到结果目录检查 contig、原始 bin 和最终 CheckM 表是否都生成。若某步失败,从 trace 的任务哈希找到工作目录,读 .command.err。原启动目录中的 .nextflow/cache 和工作目录都保留时,可以用同一命令加 -resume 复用有效任务。

怎样扩到 100 份。 把 --sra 改成 SRP102150,为整批另设输出、工作、trace 和报告路径。先核对项目的 100 个 run,再比较各分箱器和整合后的数量。真实队列可先取几份有代表性的深浅样本,边跑边记录工作盘占用,尤其留意多任务并发时的峰值。SRA 原始项目

什么时候值得换一台服务器

如果只想验证图 2,用前面的 Python 脚本即可。真正消耗算力的是从 FASTQ 重做组装、运行多个分箱器并保留中间文件。论文的基准节点有两颗 32 核 CPU、1 TB 内存和 3 TB SSD。TOFU-MAaPO 用了 110.08 小时,含下载。metaFun、ATLAS、nf-core/mag 分别为 74.43、92.12、430.15 小时,三者计时均从预下载之后开始。分箱器组合和执行设置也有差异,单看总用时无法判断换一个流程能给自己的队列省几天。论文硬件与计时说明

若你已经准备按整批样本跑,手边节点却经常排队、内存不足或工作盘吃紧,可以带着样本数、压缩 FASTQ 总量、预计保留哪些中间文件,以及试跑的 trace,和云生信核对可租节点的内存、临时盘与并发数。若卡在某一个分箱任务,附上该任务的峰值和错误日志,比报一个期望核数更容易估准资源。云生信生信服务器租赁

把知识用于当前任务

下一步可以直接开始分析

按研究目标查找在线工具、课程、计算资源或完整分析服务。

按目标找方案仍有疑问,联系客服 ↗