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 |
-D | dbSNP 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.vcf | dbSNP过滤已知胚系变异 |
-B blacklist.bed | 跳过低可图/重复区域 |
*.svaba.sv.vcf | 结构变异结果 |
*.svaba.indel.vcf | 插入缺失结果 |
*.svaba.unfiltered.sv.vcf | 未过滤原始结果 |
| 优势区间:20-300bp | SvABA最强的检测范围 |