UMI-tools count 使用

之前拿到了一组类似Drop-seq的序列,虽然是双端测序,但只有read2用作映射参考基因,read1只提供cell barcode+UMI用于后期去重。需要对序列匹配到同一个基因且拥有同样cell barcode的唯一UMI进行计数。于是就要用到UMI-tools的count命令。

Drop-seq的原理可以看文章 Highly Parallel Genome-wide Expression Profiling of Individual Cells Using Nanoliter Droplets

UMI-tools的使用说明教程可以在github上查看

1--安装软件

我比较习惯装在conda里,还有其他的选择可以从使用说明里查看

$ conda install -c bioconda -c conda-forge umi_tools

2--在序列head里加上UMI信息

首先查看原始序列,read1的前8bp是UMI,read2末尾有一段poly(A)尾需要去除

原始序列
## read1

@A00159:637:HC555DSXY:2:1443:4679:29387 1:N:0:CTAGGAAT+TATAGCCT 
CGCTCGCCTCTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTATTTTTAAAATCAATTTAAGTTTGTGATGAAGATTTGGATATTTAGTGAGGAAAAAGAGAAA   
+       
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:,:,,,,,,,,,,,,,,,,,:,,,:,,,,,,,,,,,,,,,,,,,,,:,,,,,,,,,,,,,,,,,,,

## read2

@A00159:637:HC555DSXY:2:1443:4679:29387 2:N:0:CTAGGAAT+TATAGCCT 
GGACTGGATCCCGTCCTCTAACGTCCGTCTCTGGCCGAGTCTAACACTGTACAACTGTCTCTGACCATTAAATGCTGTTGTACCGTGGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   
+       
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFF:FFFF,FFF:F:F::F::FFF,:

使用fastp添加UMI

fastp \
-i ${fqdir}/${id}_1.clean.fq.gz \ #原始read1
-I ${fqdir}/${id}_2.clean.fq.gz \ #原始read2
-o ${fpdir}/${id}_1.fastp.fq.gz \ #输出read1
-O ${fpdir}/${id}_2.fastp.fq.gz \ #输出read2
-Q \ #disable quality filtering
-U \ #提取UMI
--umi_loc=read1 \ #设定read1里有UMI
--umi_len=8 \ #前8bp为UMI
--umi_prefix=UMI \ #命名
--trim_poly_x \ #去除read2 3'端的poly(A)尾
--thread=5 \ #线程数
-h ${cleandata}/${id}.fastp.html \ #结果报告html格式
-j ${cleandata}/${id}.fastp.json #结果报告json格式
处理后的序列
# read1
@A00159:637:HC555DSXY:2:1443:4679:29387:UMI_CGCTCGCC 1:N:0:CTAGGAAT+TATAGCCT
TCTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTATTTTTAAAATCAATTTAAGTTTGTGATGAAGATTTGGATATTTAGTGAGGAAAAAGAGAAA
+
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:,:,,,,,,,,,,,,,,,,,:,,,:,,,,,,,,,,,,,,,,,,,,,:,,,,,,,,,,,,,,,,,,,

# read2
@A00159:637:HC555DSXY:2:1443:4679:29387:UMI_CGCTCGCC 2:N:0:CTAGGAAT+TATAGCCT    
GGACTGGATCCCGTCCTCTAACGTCCGTCTCTGGCCGAGTCTAACACTGTACAACTGTCTCTGACCATTAAATGCTGTTGTACCGTGG
+
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

3--映射到参考基因

因为read1只用作提取UMI,这一步只用read2作为输入

# hiast2
hisat2 -p 10 -x ${index} \ #构建的index
-U ${fpdir}/read1/${id}_2.fastp.fq.gz \ #只输入read2
-S ${hisdir}/read1/${id}.hisat2.sam #输出SAM文件

# samtools sort & index
samtools view -bS ${hisdir}/${id}.hisat2.sam | \
samtools sort -@ 10 -o ${samdir}/${id}.hisat2.sorted.bam && \
samtools index ${samdir}/${id}.hisat2.sorted.bam ${samdir}/${id}.hisat2.sorted.bam.bai
输出结果
A00159:637:HC555DSXY:2:1443:4679:29387:UMI_CGCTCGCC     0       chr10   127281719       60      88M     *       0       0       GGACTGGATCCCGTCCTCTAACGTCCGTCTCTGGCCGAGTCTAACACTGTACAACTGTCTCTGACCATTAAATGCTGTTGTACCGTGG FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF        AS:i:-5 XN:i:0  XM:i:1  XO:i:0  XG:i:0  NM:i:1  MD:Z:25T62      YT:Z:UU NH:i:1

4--featureCounts

由于需要根据匹配到的基因来去除UMI的重复,所以需要使用featureCounts将匹配到的基因标记在序列中

# featureCounts
featureCounts \
-T 10 \ #线程
-g gene_id \ #从注释文件中提取Meta-features信息用于read count,默认是gene_id
-a ${gtf} \ #注释的GTF文件
-o ${fcdir}/${id}.txt \ #输出路径和名字
-R BAM \ #输出BAM文件(名字默认为-输入文件名.featureCounts.bam)
${samdir}/${id}.hisat2.sorted.bam #输入BAM文件

# samtools sort & index
samtools sort ${fcdir}/${id}.hisat2.sorted.bam.featureCounts.bam -o ${fcdir}/${id}.featureCounts.sorted.bam && \
samtools index ${fcdir}/${id}.featureCounts.sorted.bam
输出结果

与上次输出结果不同的地方是多了后三列,标记了该序列是否匹配上基因(tag=XS)以及匹配到的具体基因编号(tag=XT)

A00159:637:HC555DSXY:2:1443:4679:29387:UMI_CGCTCGCC     0       chr10   127281719       60      88M     *       0       0       GGACTGGATCCCGTCCTCTAACGTCCGTCTCTGGCCGAGTCTAACACTGTACAACTGTCTCTGACCATTAAATGCTGTTGTACCGTGG FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF        AS:i:-5 XN:i:0  XM:i:1  XO:i:0  XG:i:0  NM:i:1  MD:Z:25T62      YT:Z:UU NH:i:1   XS:Z:Assigned   XN:i:1  XT:Z:ENSMUSG00000025410

5--UMI-tools count

基本表达
umi_tools count [OPTIONS] --stdin=IN_BAM [--stdout=OUT_BAM]
部分参数说明
参数 说明
Barcode extraction options barcode提取选项
--extract-umi-method=GET_UMI_METHOD cell barcode和UMI是如何编码?选择:read_id [default]; tag; umis
--umi-separator=UMI_SEP 读取ID和UMI之间的分隔符
--umi-tag=UMI_TAG 包含UMI的标签
--cell-tag=CELL_TAG 包含cell barcode的标签
UMI grouping options UMI分组选项
--method=METHOD 用于UMI分组的方法。选择:unique (读取组共享完全相同的UMI); percentile; cluster; adjacency; directional [default] (确定连接的UMI的群集(基于汉明距离阈值),并且umi A计数> =((2 * umi B计数)-1)。每个网络都是一个读取组。)
single-cell RNA-Seq options 单细胞RNA-Seq选项
--per-gene 每个基因的组/重复/计数。必须与-gene-tag或--per-contig结合使用
--gene-tag=GENE_TAG 基因是由此bam标签定义的[default = none]
--assigned-status-tag=ASSIGNED_TAG Bam标签,描述是否将read指定给基因。默认设置为与--gene-tag相同的标签
--per-cell 每个细胞的组/重复/计数
SAM/BAM options SAM/BAM文件选项
--mapping-quality=MAPPING_QUALITY 保留read的最低映射质量[default= 0]
--unmapped-reads=UNMAPPED_READS 如何处理未映射的read。选择:discard [default]; use; correct
--unpaired-reads=UNPAIRED_READS 如何处理未配对的read。选择:discard; use [default]; correct
-i, --in-sam 输入文件为sam格式 [default = False]
--paired 输入BAM为双端测序 [default = False]
-o, --out-sam 以sam格式输出 [default = False]
--no-sort-output 不要对输出进行排序
input/output options 输入/输出选项
-I FILE, --stdin=FILE 输入文件路径 [default = stdin]
-S FILE, --stdout=FILE 输出文件路径 [default = stdout]

具体参数设置

umi_tools count \
--umi-separator=UMI_ \ #设置ID和UMI之间的分隔符为UMI_
--method=unique \ #UMI分组设置为unique,即只取唯一
--per-gene --gene-tag=XT \ #按基因计数,标签为XT
--assigned-status-tag=XS \ #设置匹配到基因的标签为XS
-I ${fcdir}/${id}.featureCounts.sorted.bam \ #输入BAM文件路径
-S ${umidir}/count/${id}.unique.counts.tsv.gz #输出计数结果
输出结果

为单条read的基因表达矩阵

gene                    count
ENSMUSG00000001138      1
ENSMUSG00000001143      6
ENSMUSG00000001674      1
ENSMUSG00000002881      1
ENSMUSG00000003134      11
ENSMUSG00000003135      4
ENSMUSG00000003458      1
ENSMUSG00000003464      2
ENSMUSG00000003721      3

如果要计算总和可以用下面的命令

zcat ${id}.unique.counts.tsv.gz | perl -alne '$sum += $F[1]; END {print $sum}'

如果需要输出的BAM文件,可以用UMI-tools中的group命令

umi_tools group \
--umi-separator=UMI_ \
--method=unique \
--per-gene --gene-tag=XT \
-I ${fcdir}/${id}.featureCounts.sorted.bam \
--group-out=${umidir}/${id}.grouped.tsv \
--log=${umidir}/${id}.group.log \
--output-bam | \
samtools view -o ${umidir}/${id}.umi.bam
输出结果

多了末尾两列,加上了UMI标签

A00159:637:HC555DSXY:2:1443:4679:29387:UMI_CGCTCGCC     0       chr10   127281719       60      88M     *       0       0       GGACTGGATCCCGTCCTCTAACGTCCGTCTCTGGCCGAGTCTAACACTGTACAACTGTCTCTGACCATTAAATGCTGTTGTACCGTGG FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF        AS:i:-5 XN:i:0  XM:i:1  XO:i:0  XG:i:0  NM:i:1  MD:Z:25T62      YT:Z:UU NH:i:1   XS:Z:Assigned   XN:i:1  XT:Z:ENSMUSG00000025410 UG:i:4183       BX:Z:CGCTCGCC

结尾

由于我拿到的这组数据结果不是特别好,最后放弃了这组数据,也没有进行后续分析了,感觉UMI-tools还挺好用却没有教程,希望对大家有用!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    余生动听阅读 13,588评论 0 11
  • 彩排完,天已黑
    刘凯书法阅读 9,761评论 1 3
  • 没事就多看看书,因为腹有诗书气自华,读书万卷始通神。没事就多出去旅游,别因为没钱而找借口,因为只要你省吃俭用,来...
    向阳之心阅读 10,248评论 3 11
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 127,107评论 2 7