基于BWA的链特异性比对问题咨询(遵循lentiMPRA流程)
解决方案
方案1:构建链特异性参考基因组(推荐,解决MAPQ为0问题)
- 重新生成参考基因组:将每条原始序列及其反向互补序列设为独立contig,给不同链的contig加独特后缀(比如原序列ID是
seq_001,正向contig命名为seq_001_plus,反向互补contig命名为seq_001_minus) - 用新参考构建BWA索引:
bwa index chain_specific_ref.fasta - 常规执行BWA比对:
bwa mem -t 8 chain_specific_ref.fasta reads_R1.fq reads_R2.fq > aligned.sam - 分离正反链序列:通过contig ID筛选,比如用samtools提取比对到
_plus的reads:
这种方式下每条reads只会匹配对应链的contig,不会因多比对导致MAPQ降低,下游流程可直接通过分离后的bam文件或contig ID处理,无需依赖SAM flags。samtools view -b aligned.bam "*_plus" > forward_reads.bam samtools view -b aligned.bam "*_minus" > reverse_comp_reads.bam
方案2:给reads添加链特异性标签(兼容现有参考)
如果不想重构参考,可在比对后给reads加自定义标签,替代SAM flags用于下游区分:
- 正常完成BWA比对得到bam文件
- 用samtools和awk判断链方向,添加自定义标签(比如
ZS:Z:PLUS/ZS:Z:MINUS):samtools view -h aligned.bam | awk ' BEGIN {OFS="\t"} /^@/ {print; next} { if(and($2, 16)) { tag = "ZS:Z:MINUS" } else { tag = "ZS:Z:PLUS" } print $0, tag }' | samtools view -b > tagged_aligned.bam - 下游流程可通过读取
ZS标签区分正反链,避免依赖原始SAM flags的筛选逻辑,减少兼容性冲突。
方案3:分组合并比对(针对单端数据)
如果是单端数据,可先拆分reads再预处理比对:
- 根据实验设计的barcode或序列特征,将原始reads拆分为正向组和反向互补组
- 对反向互补组执行序列转换:
seqkit seq -r -p reverse_comp_reads.fq > rev_comp_converted.fq - 分别用BWA比对到原始参考:
转换后两组reads都比对到正链,后续直接通过比对文件区分即可。bwa mem ref.fasta forward_reads.fq > forward_aligned.sam bwa mem ref.fasta rev_comp_converted.fq > reverse_aligned.sam
内容的提问来源于stack exchange,提问作者Le Qi
相关产品推荐
相关产品推荐

