跳转至

Smoove — LUMPY结构变异检测的简化最佳实践封装


一句话说明

Smoove 是对 LUMPY/SVTyper 工具链的"傻瓜封装"——它把繁琐的多步结构变异检测流程(过滤、调用、基因分型、合并)整合成几个简单命令,同时降低假阳性,比直接用 lumpyexpress 更快更准。


安装与配置

# 方法1:Docker运行(最推荐,依赖最复杂)
docker pull brentp/smoove:latest    # 包含所有依赖(lumpy、svtyper等)

# 运行smoove(检查依赖)
docker run brentp/smoove smoove     # 显示已安装依赖列表

# 方法2:conda安装(部分依赖需单独安装)
conda create -n smoove python=3.8
conda activate smoove
conda install -c bioconda smoove lumpy-sv svtyper mosdepth

# 验证安装(smoove运行时会列出找到的依赖)
smoove                               # 无参数运行,显示依赖状态

# 方法3:下载预编译二进制(smoove本身是单二进制)
wget https://github.com/brentp/smoove/releases/download/v0.2.7/smoove
chmod +x smoove
export PATH=$(pwd):$PATH

核心用法

单样本SV检测

# smoove call:调用LUMPY并进行基因分型
smoove call \
    --outdir smoove_results \      # 输出目录
    --name SAMPLE_NAME \           # 样本名称
    --fasta reference.fasta \      # 参考基因组
    -p 8 \                         # 线程数
    --genotype \                   # 同时用SVTyper进行基因分型
    sample.bam                     # 输入BAM(需排序和索引)

多样本群体分析流程

# 第一步:对每个样本单独检测SV
for bam in sample1.bam sample2.bam sample3.bam; do
    name="${bam%.bam}"
    smoove call \
        --outdir smoove_call_out \
        --name $name \
        --fasta reference.fasta \
        -p 8 \
        --genotype \
        $bam
done

# 第二步:合并所有样本的SV位点
smoove merge \
    --name cohort \                   # 合并后样本集合名
    --fasta reference.fasta \
    -o smoove_merged \                # 输出目录
    smoove_call_out/*.genotyped.vcf.gz  # 所有样本的VCF

# 第三步:对每个样本根据合并位点重新基因分型
for bam in sample1.bam sample2.bam sample3.bam; do
    name="${bam%.bam}"
    smoove genotype \
        -d \                          # 使用duphold注释(推荐,提高精度)
        -x \                          # 每个样本独立运行
        --name $name \
        --outdir smoove_genotype_out \
        --fasta reference.fasta \
        --vcf smoove_merged/cohort.sites.vcf.gz \  # 合并后的SV位点
        $bam
done

# 第四步:汇总所有样本基因分型结果
smoove paste \
    --name cohort_final \             # 最终文件名前缀
    smoove_genotype_out/*.vcf.gz      # 所有基因分型VCF

参数详解

子命令参数说明
call--outdir输出目录
call--name样本名称(写入VCF)
call--fasta参考基因组
call-p线程数
call--genotype同时运行SVTyper基因分型
call--exclude排除区域BED文件(推荐,过滤重复区)
merge--name合并后的样本集名称
genotype-d使用duphold注释深度支持(推荐)
paste--name最终输出文件前缀
annotate--gff使用GFF文件注释SV位于哪些基因

实战案例

# 完整多样本SV分析(3个样本)

REF="hg38.fasta"
SAMPLES=(sample1 sample2 sample3)
BAMS=(sample1.bam sample2.bam sample3.bam)
# 推荐排除区域(smoove提供)
EXCL="exclude.cnvnator_100bp.GRCh38.20170403.bed"

# 1. 单样本检测(使用Docker)
for i in "${!SAMPLES[@]}"; do
    name="${SAMPLES[$i]}"
    bam="${BAMS[$i]}"
    docker run -v $(pwd):/data brentp/smoove \
        smoove call \
        --outdir /data/smoove_call \
        --name $name \
        --fasta /data/$REF \
        --exclude /data/$EXCL \    # 排除低可图区域
        -p 16 \
        --genotype \
        /data/$bam
done

# 2. 合并SV位点
docker run -v $(pwd):/data brentp/smoove \
    smoove merge \
    --name cohort \
    --fasta /data/$REF \
    -o /data/smoove_merge \
    /data/smoove_call/*.genotyped.vcf.gz

# 3. 联合基因分型
for i in "${!SAMPLES[@]}"; do
    name="${SAMPLES[$i]}"
    bam="${BAMS[$i]}"
    docker run -v $(pwd):/data brentp/smoove \
        smoove genotype -d -x \
        --name $name \
        --outdir /data/smoove_geno \
        --fasta /data/$REF \
        --vcf /data/smoove_merge/cohort.sites.vcf.gz \
        /data/$bam
done

# 4. 汇总最终结果
docker run -v $(pwd):/data brentp/smoove \
    smoove paste --name final_cohort /data/smoove_geno/*.vcf.gz

# 5. 过滤高质量SV(PASS变异)
bcftools view -f PASS final_cohort.smoove.square.vcf.gz | \
    grep -v "^#" | awk '{print $5}' | sort | uniq -c

常见报错与解决

报错1:smoove: lumpy not found - 原因:LUMPY未安装或不在PATH中 - 解决:使用Docker(推荐):docker pull brentp/smoove;或conda install -c bioconda lumpy-sv

报错2:ERROR: BAM file is not sorted - 原因:输入BAM未排序 - 解决:samtools sort -o sorted.bam input.bam && samtools index sorted.bam

报错3:paste步骤VCF列数不一致 - 原因:部分样本的genotype步骤失败或产生不完整VCF - 解决:检查smoove_geno目录中各样本VCF是否存在且完整;重跑失败样本的genotype步骤


速查表

命令说明
smoove call --genotype单样本SV检测+基因分型
smoove merge合并多样本SV位点
smoove genotype -d -x联合基因分型(-d用duphold,-x并行)
smoove paste汇总所有样本基因分型结果
smoove annotate --gff注释SV所在基因
docker pull brentp/smoove获取包含全部依赖的Docker镜像
--exclude excl.bed排除重复/低可图区域(降低假阳性)
final_cohort.smoove.square.vcf.gz最终群体SV矩阵