使用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