跳转至

SvABA — 基于局部从头组装的结构变异检测工具


一句话说明

SvABA 不靠"配对读段对齐"来找结构变异,而是先把测序reads在每个基因组区域重新组装成contigs,再对比参考基因组找变异——这种"先组装再比对"的方式对中等大小变异(20-300bp)特别擅长。


安装与配置

# 方法1:conda安装
conda create -n svaba python=3.8
conda activate svaba
conda install -c bioconda svaba    # 安装最新版SvABA(v1.x)

# 验证安装
svaba --version    # 查看版本信息
svaba run --help   # 查看运行帮助

# 方法2:源码编译(获取最新功能)
git clone --recursive https://github.com/walaj/svaba
cd svaba
./configure && make -j 8   # 编译(需要GCC 4.8+, zlib, bz2, lzma库)

# 依赖准备(必须)
# SvABA需要参考基因组的BWA索引
bwa index reference.fasta       # 建立BWA索引(较慢,只需一次)
samtools faidx reference.fasta  # 建立samtools索引

核心用法

胚系SV检测(单样本)

# 最基本用法
svaba run \
    -t sample.bam \              # 输入BAM(-t是target/肿瘤,也可用于胚系)
    -G reference.fasta \         # 参考基因组(需BWA索引)
    -a output_prefix \           # 输出文件前缀
    -p 16                        # 线程数

体细胞SV检测(肿瘤-正常配对)

# 体细胞分析(区分肿瘤特有变异)
svaba run \
    -t tumor.bam \               # 肿瘤样本BAM
    -n normal.bam \              # 正常样本BAM(-n参数)
    -G reference.fasta \
    -a somatic_output \          # 输出前缀
    -p 16                        # 线程数

指定分析区域(加速分析)

# 限定特定区域运行
svaba run \
    -t tumor.bam \
    -n normal.bam \
    -G reference.fasta \
    -a output \
    -k targets.bed \             # 仅分析BED文件中的区域(WES时使用)
    -p 16

参数详解

参数说明示例值
-t目标/肿瘤样本BAM(必须)tumor.bam
-n正常样本BAM(配对模式)normal.bam
-G参考基因组(必须有BWA索引)reference.fasta
-a输出文件前缀my_analysis
-p线程数16
-k限定分析区域BED文件targets.bed
-DdbSNP VCF文件(过滤已知胚系变异)dbsnp.vcf
-B黑名单区域BED文件(跳过重复区)blacklist.bed
--min-overlap最小读段重叠(组装参数)30(默认)
--no-interchrom不检测染色体间易位(加速)无值flag

实战案例

# 完整体细胞SV检测流程

REF="hg38.fasta"
# BWA索引必须存在(在同目录下有ref.fa.bwt等文件)
# 如果没有先建索引:bwa index $REF

# 1. 运行SvABA体细胞分析
svaba run \
    -t tumor_sample.bam \
    -n normal_sample.bam \
    -G $REF \
    -a my_sample \             # 输出文件将以 my_sample 开头
    -p 24 \                    # 24线程
    -D dbsnp.vcf \             # 用dbSNP过滤已知胚系变异
    2> svaba_run.log           # 保存日志

# 2. 查看输出文件
ls my_sample.*
# my_sample.svaba.sv.vcf           - SV(结构变异)
# my_sample.svaba.indel.vcf        - Indel(插入缺失)
# my_sample.svaba.unfiltered.sv.vcf    - 未过滤SV
# my_sample.svaba.unfiltered.indel.vcf - 未过滤Indel
# my_sample.bps.txt.gz              - 断点信息
# my_sample.alignments.txt.gz       - contig比对详情

# 3. 分析体细胞SV(过滤正常样本中无支持的变异)
grep -v "^#" my_sample.svaba.sv.vcf | \
    awk '$7=="PASS"' | \         # 仅保留PASS的变异
    wc -l                        # 统计通过过滤的SV数

# 4. 统计SV类型分布
grep -v "^#" my_sample.svaba.sv.vcf | \
    awk '$7=="PASS"{print $5}' | \
    sort | uniq -c               # 各类型变异数量

# 5. 提取大缺失(>1kb,可能影响基因)
grep -v "^#" my_sample.svaba.sv.vcf | \
    awk '$7=="PASS"' | \
    awk 'match($8, /SVLEN=([^;]+)/, arr) && arr[1]+0 < -1000' | \
    head -20                     # 查看前20个大缺失

常见报错与解决

报错1:BWA index not found for reference - 原因:参考基因组未建立BWA索引 - 解决:bwa index reference.fasta(需要时间,大基因组约1-2小时)

报错2:程序长时间无输出卡住 - 原因:SvABA在复杂区域(如重复序列区域)组装时可能很慢 - 解决:添加-B blacklist.bed跳过高重复区域;检查log查看进度:tail -f svaba_run.log

报错3:输出SV数量异常多(假阳性) - 原因:未提供配对正常样本,或dbSNP过滤未使用 - 解决:有条件时务必使用-n normal.bam;添加-D dbsnp.vcf过滤已知种系变异


速查表

命令/参数说明
svaba run -t tumor.bam胚系/单样本SV检测
svaba run -t tumor.bam -n normal.bam体细胞配对检测
-G reference.fasta参考基因组(需BWA索引)
-k targets.bed限定WES捕获区域
-D dbsnp.vcfdbSNP过滤已知胚系变异
-B blacklist.bed跳过低可图/重复区域
*.svaba.sv.vcf结构变异结果
*.svaba.indel.vcf插入缺失结果
*.svaba.unfiltered.sv.vcf未过滤原始结果
优势区间:20-300bpSvABA最强的检测范围