跳转至

摘要: Strainberry 是一种专为低复杂度宏基因组设计的菌株分离方法,能够利用易错长读长测序技术(如 Oxford Nanopore、PacBio)实现菌株级别的基因组重建。该方法整合了变异位点检测、单倍型分型与基因组组装等前沿工具,在单样本条件下即可获得优于现有长读长组装工具的高质量菌株基因组。

在技术实现上,Strainberry 以忽略菌株差异的宏基因组初始组装结果(如 metaFlye 生成的组装)及对应的长读长比对文件(BAM 格式)作为输入,通过多轮迭代逐步分离不同菌株的基因组序列,最终输出菌株分离后的 scaffold 组装结果。

在安装与使用方面,Strainberry 基于 Linux 环境开发,推荐通过 conda 创建独立环境以管理依赖,安装过程约需 5 至 10 分钟,操作流程简便。输出目录中包含最终组装文件、读长比对文件及各迭代轮次的中间结果,便于用户溯源分析过程。该工具为复杂微生物群落中的菌株分型与精细基因组重建提供了高效的计算解决方案。


Strainberry:基于长读长测序的宏基因组菌株分离工具

概述

Strainberry 是一款专为低复杂度宏基因组(low-complexity metagenome)设计的自动化菌株分离(strain separation)方法,依托易错长读长测序技术(error-prone long-read technologies)实现对混合菌株样本的高质量拆分与组装。

在宏基因组研究中,同一物种的不同菌株往往共存于同一样本中。传统的宏基因组组装工具通常将来自不同菌株的序列合并为一个共识序列(consensus sequence),导致菌株级别的遗传多样性信息大量丢失。Strainberry 正是为解决这一核心问题而生——它能够在单样本(single-sample)条件下,将混合在一起的多个菌株基因组分别组装,且组装质量优于现有同类长读长组装工具。

Strainberry 整合了变异检测(variant calling)、单倍型相位分析(haplotype phasing)和基因组组装(genome assembly)三个模块的前沿工具,形成自动化流水线。其应用场景涵盖微生物生态学、病原体溯源、耐药性研究等领域,尤其适合使用 PacBio 或 Oxford Nanopore 技术产生的长读长数据。该工具由 Vicedomini 等人开发,相关研究成果发表于 Nature Communications(2021),为长读长宏基因组菌株分离研究提供了系统性的解决方案。


核心原理与功能

整体技术框架

Strainberry 的核心设计理念是:以"菌株无感知组装"(strain-oblivious assembly)作为输入起点,利用长读长测序数据中保留的单核苷酸变异(SNV,Single Nucleotide Variant)信息,通过单倍型分块(haplotype phasing)将读长分配给不同的菌株单倍型,再分别进行独立组装,最终产出分离的菌株级别基因组。

整个流程可分解为以下三个关键技术阶段:

1. 变异检测(Variant Calling)

将长读长数据比对回菌株无感知的参考组装(strain-oblivious assembly,通常由 metaFlye 生成),然后对比对结果进行变异检测,识别不同菌株之间存在差异的 SNV 位点。这些 SNV 位点构成了后续单倍型划分的基础。

2. 单倍型相位分析(Haplotype Phasing)

利用检测到的 SNV 位点,对长读长数据进行单倍型相位分析,将具有相似变异模式的读长归并为同一单倍型块(haplotype block)。Strainberry 设置了最小 SNV 密度阈值(默认为 0.1%),只有满足该密度要求的单倍型块才会被纳入后续的菌株分离流程。

3. 分离组装(Strain-specific Assembly)

基于单倍型分块结果,将读长按菌株归属分组,再分别进行独立的基因组组装。Strainberry 支持迭代式组装(iterative assembly),默认最多尝试分离 5 个菌株(由 -n 参数控制),每轮迭代对应输出目录中的一个子目录 strainberry_n{k}

核心功能特性

  • 长读长兼容性:原生支持 PacBio 原始读长(raw reads)和 Oxford Nanopore 读长(通过 --nanopore 参数指定),适应易错长读长技术的噪声特性。
  • 自动化流水线:从变异检测到最终组装全流程自动化,无需人工干预中间步骤。
  • 菌株多重性控制(strain multiplicity):通过 -n 参数指定最大菌株分离数量,默认为 5,可根据样本复杂度灵活调整。
  • 中间结果保留:每轮迭代的 VCF(Variant Call Format)变异文件及日志均保存在对应子目录中,便于调试与追溯。
  • 输出对齐文件:自动生成基于 minimap2 的输入读长对最终组装的比对文件(BAM 格式),供下游分析使用。

输出目录结构详解

OUTPUT_DIR/
├── strainberry_n2/       # 第2轮迭代中间结果(VCF、日志等)
├── strainberry_n3/       # 第3轮迭代中间结果
├── ...
├── strainberry_nK/       # 第K轮迭代中间结果
├── assembly.scaffolds.bam     # 输入读长对最终组装的minimap2比对文件
├── assembly.scaffolds.bam.bai # BAM索引文件
├── assembly.scaffolds.fa      # 最终菌株分离组装结果(核心输出)
└── assembly.scaffolds.fa.fai  # FASTA索引文件

核心输出文件为 assembly.scaffolds.fa,包含分离后的各菌株 scaffold 序列。中间结果子目录在确认运行成功后可以删除。


安装与使用

环境要求

  • 操作系统:Linux(Strainberry 在 Linux 环境下开发和测试)
  • GNU bash 版本 4 或更高版本
  • miniconda3(用于依赖管理)

安装步骤

# 克隆 Strainberry 代码仓库到本地
git clone https://github.com/rvicedomini/strainberry.git

# 进入项目目录
cd strainberry

# 使用 conda 创建名为 sberry 的隔离环境并安装所有依赖
# 整个安装过程约需 5-10 分钟
conda env create -n sberry --file environment.yml

配置 PATH 环境变量

为使 strainberry 命令在任意目录下均可调用,建议将其绝对路径加入 PATH

# 将以下行添加到 ~/.bashrc 文件中(将路径替换为实际安装路径)
export PATH=/absolute/path/to/strainberry:${PATH}

更新到最新版本

# 进入 Strainberry 目录
cd strainberry

# 拉取最新的开发版本代码
git pull

# 强制重建 conda 环境以同步最新依赖
conda env create -n sberry --file environment.yml --force

基本运行方式

# 激活 Strainberry 专用 conda 环境
conda activate sberry

# 运行 Strainberry(基本语法)
# -r:菌株无感知组装的 FASTA 文件(需已用 samtools faidx 建索引)
# -b:坐标排序的长读长比对 BAM 文件(需已用 samtools index 建索引)
# -o:输出目录路径
strainberry [options] -r FASTA -b BAM -o OUTPUT_DIR

# 运行结束后退出 conda 环境
conda deactivate

注意FASTABAM 文件在输入前必须分别使用以下命令建立索引:

samtools faidx your_assembly.fasta      # 为 FASTA 文件建立索引
samtools index your_alignment.bam       # 为 BAM 文件建立索引

完整参数说明

usage: strainberry -r PATH -b PATH -o PATH [--nanopore] [-n int] [-s float]
                   [-c int] [-h] [-V] [-v]

必选参数:
  -r PATH, --reference PATH    菌株无感知组装的 FASTA 格式文件
  -b PATH, --bam PATH          BAM 格式的读长比对文件
  -o PATH, --out-dir PATH      Strainberry 组装结果的输出目录

可选参数:
  --nanopore                   指定输入为 Oxford Nanopore 读长
  -n int, --max-strains int    最大菌株分离数量,默认值为 5
  -s float, --snv-density float  纳入单倍型块的最小 SNV 百分比,默认值为 0.1
  -c int, --cpus int           最大 CPU 使用数量,默认值为 1

其他参数:
  -h, --help                   显示帮助信息并退出
  -V, --version                显示版本号并退出
  -v, --verbose                输出详细日志

实战示例

以下示例基于 Strainberry 自带的 example 子目录,演示从原始读长到菌株分离组装的完整流程。测试数据包含一段来自 E. coli K12 和 W 两个菌株小区域的共识序列。

第一步:生成菌株无感知组装与读长比对

使用 metaFlye 进行宏基因组组装,使用 minimap2 进行读长比对,使用 samtools 对结果排序和建索引,共使用 12 个线程:

# 进入示例目录
cd example

# 使用 metaFlye 对 PacBio 原始读长进行宏基因组组装
# --meta:启用宏基因组模式
# --pacbio-raw:指定输入为 PacBio 原始读长
# --out-dir:指定输出目录
# --genome-size:提供宏基因组大小估计(metaFlye 2.8 版本后不再必须)
# --threads:使用线程数
flye --meta --pacbio-raw reads.fq.gz --out-dir flye_out --genome-size 300k --threads 12

# 使用 minimap2 将读长比对到组装结果,再用 samtools 排序生成 BAM 文件
# -ax map-pb:使用 PacBio 读长比对预设参数
# -t 12:使用 12 个线程
minimap2 -ax map-pb -t 12 ./flye_out/assembly.fasta reads.fq.gz | samtools sort >./flye_out/alignment.sorted.bam

# 为组装 FASTA 文件建立索引
samtools faidx ./flye_out/assembly.fasta

# 为排序后的 BAM 文件建立索引
samtools index ./flye_out/alignment.sorted.bam

完成后,flye_out 目录中将包含: - assembly.fasta:菌株无感知的宏基因组组装结果 - alignment.sorted.bam:排序后的读长比对文件

第二步:运行 Strainberry 进行菌株分离

# 确保处于 example 目录
cd example

# 运行 Strainberry:
# -r:指定组装 FASTA 文件
# -b:指定比对 BAM 文件
# -o:指定输出目录为 sberry_out
# -c 4:使用 4 个 CPU 线程
strainberry -r assembly.fasta -b alignment.sorted.bam -o sberry_out -c 4

该示例运行时间约为 5 分钟。

预期输出结果

运行成功后,sberry_out/assembly.scaffolds.fa 文件中应包含两条 scaffold: - 一条序列更接近 E. coli K12 菌株 - 另一条序列更接近 E. coli W 菌株

这验证了 Strainberry 成功将两个共存菌株的序列进行了分离。


常见问题

Q1:Strainberry 的输入组装文件需要如何准备?可以使用任意组装工具吗?

A:Strainberry 的输入 FASTA 文件需要是"菌株无感知组装"(strain-oblivious assembly),即将来自所有菌株的序列合并为共识序列的组装结果。官方推荐使用 metaFlye(宏基因组模式)生成该输入。理论上其他宏基因组组装工具的结果也可使用 [待验证],但需确保输入文件已用 samtools faidx 建立索引,且对应的 BAM 文件已排序并建立索引。

Q2:如何处理 Oxford Nanopore 数据?与 PacBio 数据的使用方式有何不同?

A:对于 Oxford Nanopore 数据,在运行 Strainberry 时需添加 --nanopore 参数以启用针对 Nanopore 读长特性优化的处理流程。PacBio 数据则无需此参数(默认模式)。在上游准备阶段,minimap2 的比对预设参数也应相应调整(PacBio 使用 map-pb,Nanopore 使用 map-ont)[待验证具体minimap2参数]。

Q3:-n 参数(最大菌株数)应如何设置?设置过大会有什么影响?

A:-n 参数(--max-strains)控制 Strainberry 最多尝试分离的菌株数量,默认值为 5。建议根据对样本菌株多样性的先验知识进行设置。设置过大可能会增加运行时间并产生更多中间文件,但 Strainberry 会根据 SNV 密度(-s 参数控制)自动判断是否需要继续分离,因此不会无限制拆分。对于复杂度确实较低的样本,保留默认值即可。

Q4:中间结果目录 strainberry_n{k} 可以删除吗?

A:可以。这些子目录存储的是各轮迭代的中间结果,包括变异检测的 VCF 文件和运行日志,主要用于调试和问题排查。在确认 Strainberry 成功运行完成、输出的 assembly.scaffolds.fa 结果符合预期后,这些中间目录可以安全删除以释放存储空间。

Q5:如何验证 Strainberry 是否安装正确?

A:可以使用 Strainberry 自带的 example 子目录进行验证。按照文档中的示例步骤,依次使用 metaFlye 生成组装、minimap2 生成比对,再运行 Strainberry。若最终 sberry_out/assembly.scaffolds.fa 文件包含两条 scaffold(分别对应 E. coli K12 和 W 菌株),则说明安装和运行均正常。整个验证流程约需 5 分钟。


总结

Strainberry 是一款针对低复杂度宏基因组场景的自动化菌株分离工具,通过整合变异检测、单倍型相位分析与基因组组装三大技术模块,实现了在单样本条件下基于长读长数据的高质量菌株级别基因组拆分。其核心优势在于:自动化程度高、对 PacBio 和 Nanopore 两类主流长读长技术均有原生支持、输出结果质量优于同类工具。安装方面,通过 conda 隔离环境可快速完成部署,依赖管理清晰。使用方面,核心命令参数简洁,必选参数仅需指定参考组装、比对文件和输出目录三项。对于从事微生物群落分析、病原体多菌株鉴定或耐药基因溯源等研究的人员,Strainberry 提供了一条从宏基因组数据直达菌株级别解析的高效路径。相关方法论文发表于 Nature Communications(2021)。