UMI的处理

唯一分子标记(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

其他

除以上,还有Umitoolscalib这些软件可供选择。