samblaster 是一款高速、轻量灵活的工具,用于对按 read ID 分组的双端 SAM 比对文件标记 PCR 重复。 额外可选功能:将不一致配对 reads、分段嵌合比对分别输出至独立 SAM 文件;也可将未比对 / 软剪切 reads 输出至独立 FASTQ 文件。 标记重复时,每 100 万对 reads 仅占用约 20MB 内存。
bash
https://github.com/GregoryFaust/samblaster #官网
安装
samblaster 为独立程序,仅依赖 g++ 编译器与 make 编译工具,无其他第三方依赖。 可在 GitHub 发布页下载,或通过 git 克隆源码编译,编译完成后将二进制程序放入系统环境变量目录即可全局调用:
git clone git://github.com/GregoryFaust/samblaster.git
cd samblaster
make
cp samblaster /usr/local/bin/.
使用说明
SAM 格式规范详见官方 SAM 文档。 默认行为:从标准输入 stdin 读取 SAM,处理后输出至标准输出 stdout。 输入 SAM 文件需为双端测序数据、包含 @SQ 序列头信息、且按 read ID 连续分组 。 输出 SAM 保留全部原始比对记录、顺序不变;PCR 重复通过 SAM 标签0x400标记。 若添加--removeDups参数,则直接从输出中删除全部重复比对,仅保留非重复 reads。
注释:按 read ID 分组的 SAM,指同一 QNAME(read 名称)的所有比对行连续排布。比对软件输出天然满足该格式;也可通过
samtools sort -n按 read name 排序得到。若原始比对文件已天然分组,无需提前排序即可输入 samblaster。
常用标准流程示例
1. bwa mem 比对后直接管道标记重复,转 BAM
bwa mem <参考索引前缀> 样本R1.fq R2.fq | samblaster | samtools view -Sb - > samp.out.bam
2. bwa mem 使用 - M 参数时,samblaster 同步加 - M 兼容模式
bwa mem -M <参考索引前缀> 样本R1.fq R2.fq | samblaster -M | samtools view -Sb - > samp.out.bam
3. 标记重复,并额外输出不一致配对 reads、分段嵌合比对至独立 SAM
bwa mem <参考索引前缀> 样本R1.fq R2.fq | samblaster -e -d samp.disc.sam -s samp.split.sam | samtools view -Sb - > samp.out.bam
4. 对已标记重复的现成 BAM,单独提取嵌合 reads、不一致配对 reads
samtools view -h samp.bam | samblaster -a -e -d samp.disc.sam -s samp.split.sam -o /dev/null
5. 单组长读 BAM 处理,提取分段 / 未比对 reads,可选标记重复
# 标记重复,输出最终BAM
samtools view -h samp.bam | samblaster --ignoreUnmated [-e] --maxReadLength 100000 [-s samp.split.sam] [-u samp.umc.fasta] | samtools view -Sb - > samp.out.bam
# 仅提取分段/未比对reads,不输出主SAM
samtools view -h samp.bam | samblaster --ignoreUnmated -a [-e] [-s samp.split.sam] [-u samp.umc.fasta] -o /dev/null
参数说明(默认值置于方括号 \[\])
输入输出参数
-i --input FILE:输入 SAM 文件 默认读取 stdin -o --output FILE:主输出 SAM 文件 默认输出 stdout -d --discordantFile FILE:输出不一致配对 reads 到该文件 默认不输出 -s --splitterFile FILE:输出分段嵌合 reads 至该文件,受下方过滤参数约束 默认不输出 -u --unmappedFile FILE:将未比对 / 剪切 reads 输出为 FASTQ,受下方参数约束 默认不输出
要求输入包含软剪切 CIGAR;存在质量值 QUAL 则输出 FASTQ,无 QUAL 则输出 FASTA
功能控制参数
-a --acceptDupMarks:复用输入文件已有的重复标记,不再重新检测重复 -e --excludeDups:从不一致配对、分段 reads、未比对 reads 输出文件中剔除标记为重复的 reads -r --removeDups:从全部输出文件中删除重复 reads(自动等效开启--excludeDups) --addMateTags:为所有双端 SAM 行添加 MC、MQ 配对标签 --ignoreUnmated:关闭 "配对缺失" 报错。仅确认输入已按 read ID 分组、或已过滤双端数据、或输入为单端长读时使用;常规双端 Hi-C / 重测序不推荐,会丢失输入排序异常校验。 -M:兼容模式(下文详述),0x100次优比对、0x800辅助嵌合比对统一视为 supplementary;适配bwa mem -M输出 --maxReadLength INT:输入 SEQ/QUAL 字符串允许最大长度 500 --maxSplitCount INT:单条 read 最多允许的分段比对数量,超出则不写入分段文件 2 --maxUnmappedBases INT:两段比对之间允许的最大未对齐碱基长度 50 --minIndelSize INT:分段比对判定结构变异的最小插入缺失长度 50 --minNonOverlap INT:两段比对之间最小非重叠碱基长度 20 --minClipSize INT:剪切碱基最低阈值,达到才会写入未比对文件 20
辅助参数
-h --help:打印帮助信息至标准错误流 -q --quiet:精简统计输出 --version:打印程序版本号
比对类型定义
自 0.1.22 版本起,比对类型判定受-M参数影响:
- 默认模式:遵循标准 SAM 规范
- FLAG
0x100= 次优比对 secondary - FLAG
0x800= 辅助嵌合比对 supplementary 主比对 primary:既非次优、也非辅助比对;仅主比对 + 辅助比对用于识别分段嵌合 reads。
- FLAG
-M兼容模式:0x100、0x800全部判定为辅助嵌合比对,无次优比对概念。 用于兼容旧版 SAM 文件(旧版嵌合 reads 标记为 0x100),搭配bwa mem -M输出必须使用。
重复判定规则
一对 reads 若两端有效比对 5' 端特征坐标与前文某对 reads 完全一致,则判定为 PCR 重复。 特征签名由染色体名称、链方向、5' 端完整比对参考坐标组合而成;坐标由 POS、链方向、CIGAR 字符串共同计算,逻辑与 Picard MarkDuplicates 完全一致。
- 双端均比对成功:两端特征签名必须同时匹配才判定为重复;
- 仅一端比对成功(单端孤儿 reads):比对端签名匹配即判定重复;0.1.25 版本起,正负链孤儿 reads 可互为重复;未比对端无需出现在文件中;单端长读独立比对按孤儿规则处理;
- 两端均未比对:不会标记为重复;
- 与重复主比对关联的所有次优、辅助嵌合比对,同步标记为重复 FLAG 0x400。
不一致配对 reads 判定标准
同时满足全部条件才判定为不一致配对:
- 双端均有比对(无 FLAG 0x4、0x8);
- 未设置 properly paired 标准配对标签 FLAG 0x2;
- 次优 / 辅助比对不会单独作为不一致配对输出,但合格配对可附带次优 / 辅助比对;
- 符合条件的重复配对默认输出至 discordant 文件,添加
-e则剔除重复。
分段嵌合 reads 判定规则
单条 read 分段比对至基因组不同区域,两段比对断点常对应结构变异 SV,是 LUMPY 等 SV 检测软件输入源。筛选逻辑:
- 筛选拥有 2~
--maxSplitCount条主 / 辅助比对的 reads; - 按 read 内部坐标归一化排序所有比对;
- 相邻两段比对满足以下任一条件,输出为分段 reads:
- 两段比对位于不同染色体 / 不同链;
- 同染色体同链,但区间差异≥
--minIndelSize,且中间未对齐碱基≤--maxUnmappedBases; - 两段互相至少存在
--minNonOverlap不重叠碱基。 属于重复的分段 reads 默认输出,添加-e则剔除。
未比对 / 剪切 reads 判定规则
未比对 read:带 FLAG 0x4; 剪切 read:可比对,但 CIGAR 首尾存在≥--minClipSize软剪切 S/H,且该 read 无辅助嵌合比对; 这类 reads 常跨结构变异断点,可输出至 FASTQ 供 YAHA 等分段比对软件重分析。
- 输入必须为软剪切主比对,才能完整提取 read 序列;
- 存在 QUAL 质量值输出 FASTQ,无 QUAL 输出 FASTA;
- 属于重复配对的剪切 / 未比对 reads 默认输出,添加
-e则剔除。