UMI去重强行MarkDuplicates

使用fastp+gencore的去重流程以及fgbio流程均是默认把dups删除,而不是类似picard MarkDuplicates以及sambamba那样把dups标记到flags值中。不过应该可以利用MarkDuplicates的–BARCODE_TAG来去重。

以index-umiA-template-umiB-index结构的双端 4bpUMI为例,首先将fastq(过滤adapter后)转为ubam

gatk FastqToSam -F1 cleanReads.R1.fq.gz -F2 cleanReads.R2.fq.gz \
	-O Test.ubam \
	-SM Test -PL illumina -PU Test

然后使用fgbio提取UMI,注意提取的结构是4M1S+T,即4bp UMI然后跳过1bp,剩余的均是Template

java -jar fgbio.jar ExtractUmisFromBam \
	-i Test.ubam -o Test.umi.ubam \
	-r 4M1S+t 4M1S+T -t ZA ZB -s RX

然后比对,由于fgbio默认Read Group 的ID是A,为了避免后续合并报错,比对时也将ID记为A,有需要更改的话,可以使用gatk AddOrReplaceReadGroups来更改

samtools fastq Test.umi.ubam \
	| bwa mem -t 8 -p -R "@RG\tPL:illumina\tSM:Test\tID:A\tPU:Test" \
	ref.fa /dev/stdin \
	| samtools view -bSh - > Test.umi.bam

然后把ubam和bam合并,即把ubam中提取出的tag加入到bam中

gatk MergeBamAlignment \
	-R ref.fa \
	-ALIGNED Test.umi.bam -UNMAPPED Test.umi.ubam \
	-O Test.umi.merge.bam \
	--ALIGNER_PROPER_PAIR_FLAGS true \
	--ATTRIBUTES_TO_RETAIN XS

接下来本来应该是使用fgbio来去重的,但是这里强行转到MarkDuplicates了

gatk MarkDuplicates \
	-I Test.umi.merge.bam \
	-O Test.marked.bam \
	-M Test.dups.txt \
	--CREATE_INDEX true \
	--BARCODE_TAG RX

或者用GATK中的实验流程UmiAwareMarkDuplicatesWithMateCigar来去重

gatk UmiAwareMarkDuplicatesWithMateCigar \
        -I Test.umi.merge.bam \	
        -O Test.marked.bam -M Test.dups.txt \
        --UMI_METRICS Test.umi.txt --BARCODE_TAG RX --DUPLEX_UMI true