唯一分子标记(UMI)是一种分子条形码,可以在测序过程中错误校正,提高准确性。使用生信流程对下机数据进行处理,根据UMI可以确定唯一read,从而在最终数据分析之前消除已识别的错误,因为有助于检测DNA样本中罕见和低频的体细胞变异,因此多用于血浆中分离的cfDNA。
例如双端4bp UMI的数据,可进行以下处理。
fastp流程
使用fastp可以将UMI提取加入到read Name中,再使用gencore来去重即可。一般的由于是使用多重PCR的检测方式,而引物长度一般是20bp,所以把后面20bp也过滤掉。
fastp -i test.R1.fq.gz -I test.R2.fq.gz \
-o test.R1.clean.fq.gz -O test.R2.clean.fq.gz \
-U --umi_loc pre_read --umi_len 4 --umi_prefix UMI \
--umi_skip 20 -w 8
之后进行比对
bwa mem -t 8 hg19.fa test.R1.clean.fq.gz test.R2.clean.fq.gz \
| samtools view -bSh - \
| samtools sort -@ 8 - -o test.bam
samtools index test.bam
然后使用gencore进行过滤,还可以加入-b参数来使用bed文件。
gencore -i test.bam -o test.umi.bam -r hg19.fa \
-u UMI
samtools sort -@ 8 test.umi.bam -o test.umi.sorted.bam
samtools index test.umi.sorted.bam
fgbio流程
google到的一篇fgbio的UMI过滤流程则比较复杂,首先要将fastq转为ubam,可使用gatk4也能使用picard来转换。
gatk FastqToSam -F1 test.R1.fq.gz \
-F2 test.R2.fq.gz \
-O test.ubam \
-SM test
然后使用fgbio将UMI提取为一个tag,其中-r参数后指定read的结构,请参考fgbio的文档。
java -jar fgbio-1.3.0.jar ExtractUmisFromBam \
-i test.ubam \
-o test.umi.ubam \
-r 4M146T 4M146T \
-s RX \
-t ZA ZB
然后将ubam重新转为fastq并比对
samtools fastq test.umi.ubam \
| bwa mem -t 8 hg19.fa -p /dev/stdin \
| samtools view -b > test.umi.bam
再将bam和ubam进行合并
gatk MergeBamAlignment \
-R hg19.fa \
-UNMAPPED_BAM test.umi.ubam \
-ALIGNED_BAM test.umi.bam \
-O test.merged.bam \
-CREATE_INDEX true \
-MAX_GAPS -1 \
-ALIGNER_PROPER_PAIR_FLAGS true \
-VALIDATION_STRINGENCY SILENT \
-SO coordinate \
-ATTRIBUTES_TO_RETAIN XS
然后使用fgbio对umi进行分组
java -jar fgbio-1.3.0.jar GroupReadsByUmi \
-i test.merged.bam \
-o test.merged.group.bam \
-s Paired -m 20 -e 1 -t RX
再过滤
java -jar fgbio-1.3.0.jar CallMolecularConsensusReads \
-m 20 \
-i test.merged.group.bam \
-o test.consensus.ubam \
-M 2
然后再进行一次比对
samtools fastq test.consensus.ubam \
| bwa mem -t 8 hg19.fa -p /dev/stdin \
| samtools view -b - \
> test.consensus.bam
再合并ubam和bam
gatk MergeBamAlignment \
-R hg19.fa \
-UNMAPPED_BAM test.consensus.ubam \
-ALIGNED_BAM test.consensus.bam \
-O test.consensus.merged.bam \
-CREATE_INDEX true \
-MAX_GAPS -1 \
-ALIGNER_PROPER_PAIR_FLAGS true \
-VALIDATION_STRINGENCY SILENT \
-SO coordinate \
-ATTRIBUTES_TO_RETAIN XS
最终的过滤
java -jar fgbio-1.3.0.jar FilterConsensusReads \
-i test.consensus.merged.bam \
-o test.consensus.merged.filter.bam \
-r hg19.fa -M 2 \
-E 0.05 \
-e 0.1 \
-N 30
也可以进行一次Clip bam
java -jar fgbio-1.3.0.jar ClipBam \
-i test.consensus.merged.filter.bam \
-o test.consensus.merged.filter.clip.bam \
-r hg19.fa \
--clip-overlapping-reads=true
如果已经有Umi列表
上面的一般是我们没有Umi序列表的时候做的事,就是要自己提取Umi,但是如果我们已经有Umi的表格,那就用这个表去把Umi注释出来。
使用fgbio注释Umi,这里用已经比对好的bam,会默认注释到RX tag。当然也可以加入-t参数来指定注释到的tag。
java -jar fgbio-1.3.0.jar AnnotateBamWithUmis \
-i test.bam \
-f umi.fastq \
-o test.umi.bam
然后用gatk4或者picard来去重
gatk MarkDuplicates \
-I test.umi.bam \
-O test.rmdups.bam \
-M test.dups.txt \
--BARCODE_TAG RX