在上一篇筆記的結(jié)尾處医寿,提到了cellranger count這一步蘑斧,之前幾天我一直是用的服務(wù)器里128G和200G的內(nèi)存試著運(yùn)行這一步竖瘾,并且限制了cores的數(shù)量(64),但是在24小時(shí)之內(nèi)都沒有處理完SRR7722937這一個(gè)樣品的fastq文件(在服務(wù)器里跑程序需要設(shè)置運(yùn)行時(shí)間)惠拭。這次我取消了內(nèi)存以及cores的數(shù)量限制(這時(shí)cellranger會耗盡幾乎所有的可用內(nèi)存庸论,大概將近300個(gè)G)聂示,并且把運(yùn)行時(shí)間的限制從24小時(shí)改成了5天:
$ cellranger count \
--id=Tumor937
--transcriptome=/gpfs/home/practice/10_genomics_genome/GRCh38 \
--fastqs=/gpfs/home/practice \
--sample=SRR7722937
--expect-cells=10000
這次的嘗試成功的跑完了一個(gè)樣品,總共運(yùn)行時(shí)間為2天8個(gè)小時(shí)秀鞭。打開log文件可以看到程序運(yùn)行過程中記錄了很多條記錄锋边,大概有上百行記錄,在記錄的最后幾行剩辟,會出現(xiàn)運(yùn)行的總結(jié)搀矫,說明你的cellranger count運(yùn)行成功:
Outputs:
- Run summary HTML: /gpfs/home/practice/Tumor937/outs/web_summary.html
- Run summary CSV: /gpfs/home/practice/Tumor937/outs/metrics_summary.csv
- BAM: /gpfs/home/practice/Tumor937/outs/possorted_genome_bam.bam
- BAM index: /gpfs/home/practice/Tumor937/outs/possorted_genome_bam.bam.bai
- Filtered gene-barcode matrices MEX: /gpfs/home/practice/Tumor937/outs/filtered_gene_bc_matrices
- Filtered gene-barcode matrices HDF5: /gpfs/home/practice/Tumor937/outs/filtered_gene_bc_matrices_h5.h5
- Unfiltered gene-barcode matrices MEX: /gpfs/home/practice/Tumor937/outs/raw_gene_bc_matrices
- Unfiltered gene-barcode matrices HDF5: /gpfs/home/practice/Tumor937/outs/raw_gene_bc_matrices_h5.h5
- Secondary analysis output CSV: /gpfs/home/practice/Tumor937/outs/analysis
- Per-molecule read information: /gpfs/home/practice/Tumor937/outs/molecule_info.h5
- Loupe Cell Browser file: /gpfs/home/practice/Tumor937/outs/cloupe.cloupe
Waiting 6 seconds for UI to do final refresh.
Pipestance completed successfully!
Saving pipestance info to Tumor937/Tumor937.mri.tgz
打開我們在cellranger count代碼里設(shè)置的文件夾Tumor937瓤球,里面有以下文件:
$ ll
total 4820
-rw------- 1 fy04 fy04 267 Aug 4 20:35 _cmdline
-rw------- 1 fy04 fy04 48206 Aug 4 20:35 _filelist
-rw------- 1 fy04 fy04 725168 Aug 4 20:35 _finalstate
-rw------- 1 fy04 fy04 655 Aug 2 12:01 _invocation
-rw------- 1 fy04 fy04 5 Aug 2 12:01 _jobmode
-rw------- 1 fy04 fy04 246834 Aug 4 20:35 _log
-rw------- 1 fy04 fy04 46606 Aug 2 12:01 _mrosource
drwx------ 5 fy04 fy04 8192 Aug 4 20:35 outs #重點(diǎn)關(guān)注這個(gè)文件夾
-rw------- 1 fy04 fy04 324837 Aug 4 20:35 _perf
drwx------ 5 fy04 fy04 8192 Aug 4 20:34 SC_RNA_COUNTER_CS
-rw------- 1 fy04 fy04 12160 Aug 4 20:35 _sitecheck
-rw------- 1 fy04 fy04 2 Aug 2 12:01 _tags
-rw------- 1 fy04 fy04 51 Aug 4 20:35 _timestamp
-rw------- 1 fy04 fy04 3164754 Aug 4 20:35 Tumor937.mri.tgz
-rw------- 1 fy04 fy04 36 Aug 2 12:01 _uuid
-rw------- 1 fy04 fy04 102558 Aug 4 20:35 _vdrkill
-rw------- 1 fy04 fy04 61 Aug 2 12:01 _versions
再打開“outs”文件夾:
$ ll
total 3264857
drwx------ 6 fy04 fy04 8192 Aug 4 20:35 analysis
-rw------- 1 fy04 fy04 27898707 Aug 4 20:35 cloupe.cloupe #這個(gè)文件可以使用Loupe Cell Browser軟件打開
drwx------ 3 fy04 fy04 8192 Aug 4 20:35 filtered_gene_bc_matrices
-rw------- 1 fy04 fy04 7247168 Aug 4 16:04 filtered_gene_bc_matrices_h5.h5 #過濾后的基因-barcode矩陣噪馏,HDF5格式
-rw------- 1 fy04 fy04 684 Aug 4 20:34 metrics_summary.csv #csv格式的結(jié)果總結(jié)
-rw------- 1 fy04 fy04 105930133 Aug 4 17:47 molecule_info.h5 #之后如果需要aggr整合幾個(gè)單細(xì)胞測序的樣品绿饵,這個(gè)文件是aggr步驟的輸入文件
-rw------- 1 fy04 fy04 3182359671 Aug 4 15:59 possorted_genome_bam.bam #比對到基因組和轉(zhuǎn)錄本上的reads拟赊,并且?guī)в衎arcode注釋信息
-rw------- 1 fy04 fy04 3949040 Aug 4 16:00 possorted_genome_bam.bam.bai #possorted_genome_bam.bam的索引文件
drwx------ 3 fy04 fy04 8192 Aug 4 20:35 raw_gene_bc_matrices #沒有過濾的基因-barcode矩陣,包括所有的barcode
-rw------- 1 fy04 fy04 12085113 Aug 4 16:02 raw_gene_bc_matrices_h5.h5
-rw------- 1 fy04 fy04 3530757 Aug 4 20:34 web_summary.html #網(wǎng)頁版的運(yùn)行結(jié)果總結(jié)瑟慈,可以使用任何一個(gè)瀏覽器查看
解讀cellranger count的輸出文件
(1)web_summary.html文件
一旦cellranger count運(yùn)行完畢葛碧,你可以通過這個(gè)文件在瀏覽器里查看你的結(jié)果總結(jié)过吻。你也可以使用Loupe Cell Browser軟件查看“outs”文件夾里的.cloupe
文件纤虽。下面這個(gè)截屏就是總結(jié),里面記錄了測序質(zhì)量和檢測到的細(xì)胞的一些特征值刷袍。包括檢測到的細(xì)胞數(shù)量樊展,每個(gè)細(xì)胞的平均reads數(shù),每個(gè)細(xì)胞檢測到的平均基因數(shù)(上方的綠色的三個(gè)數(shù)字)雷酪。右面的曲線圖顯示的是barcode的計(jì)數(shù)分布哥力,以及哪些barcode對應(yīng)的相關(guān)細(xì)胞墩弯。Y軸是map到每一個(gè)barcode的UMI的計(jì)數(shù)數(shù)值渔工,X軸是對應(yīng)到這個(gè)數(shù)值的barcode的數(shù)量。這條曲線要有一個(gè)急劇下降的趨勢才是好的結(jié)果梁丘,說明細(xì)胞barcode在細(xì)胞和“空樣品”間的差異非常明顯旺韭。這個(gè)曲線圖下面的“Fraction reads in cells”這一項(xiàng)比例需要大于70%区端,說明數(shù)據(jù)才是質(zhì)量好的。
上面這個(gè)網(wǎng)頁的左上角杨何,有一個(gè)“ANALYSIS”的選項(xiàng)晚吞,點(diǎn)開看谋国,會出現(xiàn)下面這個(gè)頁面:
這個(gè)頁面里包括以下幾個(gè)部分:
(1)t-SNE降維分析
(2)自動生成的聚類分析(根據(jù)表達(dá)譜里相似表達(dá)的基因)
(3)一個(gè)差異基因列表芦瘾,是根據(jù)自動生成的聚類來生成的差異基因
(4)一個(gè)測序飽和度的曲線
(5)每個(gè)細(xì)胞里測得的基因數(shù)量的曲線
上面圖里左邊的圖是一個(gè)二維的t-SNE近弟,每一個(gè)點(diǎn)就是一個(gè)細(xì)胞,根據(jù)細(xì)胞里含有的UMI數(shù)量來區(qū)分顏色窗宦。這張圖也說明了細(xì)胞內(nèi)RNA含量,也通常與細(xì)胞大小有關(guān)媒怯。紅色的點(diǎn)代表這個(gè)細(xì)胞有著更多的RNA含量扇苞。在這個(gè)坐標(biāo)系里寄纵,兩個(gè)離得很近的點(diǎn)有著更為相似的基因表達(dá)模式(相比于兩個(gè)離得較遠(yuǎn)的點(diǎn))。
而上面的右邊的是一個(gè)聚類的圖定踱,你可以通過改變右上角的clustering type屋吨,來改變聚類的參數(shù):
這個(gè)頁面的中部的表就是差異基因列表:
再往下兩張圖就是測序飽和度(通常也指示文庫的復(fù)雜度)至扰,以及平均每個(gè)細(xì)胞里測得的基因资锰,這兩張圖都可以說明測序深度:
(2)bam文件
在“outs”文件夾里绷杜,有一個(gè)bam文件鞭盟,是根據(jù)我們的fastq文件生成的:
$ samtools view possorted_genome_bam.bam | head -5
SRR7722937.377377 16 1 10232 255 4S94M * 0 0 TTTTCCCTATCCCTAACCCTAACCCTATCCCCTTACCCCTAACCCTAACCCTAACCCTAACCCCAACCCCAACCCCAACCCCAACCCCTACCCCAACC .<.<..<<...<.<...G<...A.<....AGG<.GGGGA<.<GGGG<<GGGGGGGIGGG<GGA<.<AAA.<<GA<A<<AGAAA<GA<<..<.<..<AG NH:i:1 HI:i:1 AS:i:72 nM:i:10 RE:A:I BC:Z:TTTCATGA QT:Z:GGGGGIII CR:Z:CTTACCGAGTGTACCT CY:Z:GGGGGIIIIIIIIIII CB:Z:CTTACCGAGTGTACCT-1 UR:Z:TTTCCATCGT UY:Z:IIIIIIIIIG UB:Z:TTTCCATCGT RG:Z:Tumor937:MissingLibrary:1:HKMNCBCXY:1
SRR7722937.10911097 256 1 11201 0 1S97M * 0 0 GGCTTGCTCACGGTGCTGTGCCAGGGCGCCCCCTGCTGGCGACTAGGGCAACTGCAGGGCTCTCTTGCTTAGACTGGTGGCCAGCGCCCCCTGCTGGC .AG...GAGGIIGGGGGGGGIGGGGIIIIGGGGGIIIIIIIIGGGIGGIGGGIIIIIGIAGAAGAAGGGGGGGGIGGGGGGG<<.AAAGGIGAGAAA< NH:i:5 HI:i:2 AS:i:93 nM:i:1 RE:A:I BC:Z:ACGTCCCT QT:Z:GGGGGIII CR:Z:CACCACTGTCCATGAT CY:Z:GGGGGIIIIGIIIIII CB:Z:CACCACTGTCCATGAT-1 UR:Z:GAGCGCGGGC UY:Z:IIIIIIIIII UB:Z:GAGCGCGGGC RG:Z:Tumor937:MissingLibrary:1:HKMNCBCXY:1
SRR7722937.27657393 256 1 11208 0 98M * 0 0 CACGGTGCTGTGCCAGGGCGCCCCCTGCTGGCGACTAGGGCAACTGCAGGGCTCTCTTGCTTAGAGTGGTGGCCAGCGCCCCCTGCTGGCGCCGGGGC <.A...7A..<<.<GGG.G<AAAGGGIIIGGIIIGIGAA<GG.GGAGGGGGGGGIGGIIIGGAGG.<GGGGAGAAGAGGI<AAAGGAGGGAAA.<A.. NH:i:5 HI:i:3 AS:i:96 nM:i:0 RE:A:I BC:Z:GAAGGAAC QT:Z:GGGGGIII CR:Z:AGTGAGGGTCAGGACA CY:Z:GGGGGIIIIIIIIIII CB:Z:AGTGAGGGTCAGGACA-1 UR:Z:CAGAACACCA UY:Z:IIIIIIIIII UB:Z:CAGAACACCA RG:Z:Tumor937:MissingLibrary:1:HKMNCBCXY:1
SRR7722937.33049902 256 1 11285 0 98M * 0 0 GCCCCCTGCTGGCGCCGGGGCACTGCAGGGCCCTCTTGCTTACTGTATAGTGGTGGCACGCCGCCTGCTGGCAGCTAGGGACATTGCAGGGTCCTCTT AGAGAA<AG.<AA.AGGGGGIGGGGGGGGGGGGGIGGIIGIIGGG<<AGGGAGGGGGAGGGAG<AGGGGGGIGG.GAGAAAA.GGGG.AGGGGGAA.G NH:i:5 HI:i:2 AS:i:96 nM:i:0 RE:A:I BC:Z:GAAGGAAC QT:Z:GGGGGIII CR:Z:ATTACTCTCCCTTGTG CY:Z:GGGGAIIIIIIIIIII CB:Z:ATTACTCTCCCTTGTG-1 UR:Z:CAATATCCCC UY:Z:IGGGIIIIII UB:Z:CAATATCCCC RG:Z:Tumor937:MissingLibrary:1:HKMNCBCXY:1
SRR7722937.33235779 256 1 11292 0 97M1S * 0 0 GCTGGCGCCGGGGCACTGCAGGGCCCTCTTGCTTACTGTATAGTGGTGGCACGCCGCCTGCTGGCAGCTAGGGACATTGCAGGGTCCTCTTGCTCAAA GGGA...<A<<AGGGGGGAGAGGAGGIIIGIIIIGGGIGGIIIIIIIIGIGGIGGGGAGGGGGGIGGAGGA<GGGGGGGGGGI<GGGGGIIIAAGGG. NH:i:6 HI:i:3 AS:i:95 nM:i:0 RE:A:I BC:Z:GAAGGAAC QT:Z:GGGGGIII CR:Z:TGCCCTAGTAGTAGTA CY:Z:GGGGAIIIIIGGGIII CB:Z:TGCCCTAGTAGTAGTA-1 UR:Z:GTCAGAAGTG UY:Z:IIIIIIIIII UB:Z:GTCAGAAGTG RG:Z:Tumor937:MissingLibrary:1:HKMNCBCXY:1
這個(gè)bam文件有25列,前11列是標(biāo)準(zhǔn)的bam文件的內(nèi)容粤剧,后面的14列是cellranger count生成的bam文件特有的,這25列分別是:
(3)矩陣文件
運(yùn)行cellranger count后會自動生成的二級分析結(jié)果号胚,但是一般來說猫胁,我們通常是拿到基因表達(dá)矩陣后,自己在R里進(jìn)行后續(xù)的分析届惋。
參考文章:https://davetang.org/muse/2018/08/09/getting-started-with-cell-ranger/
在“outs”文件夾里菠赚,有一個(gè)名為raw_gene_bc_matrices的文件夾:
#包含3個(gè)文件:
$ tree
.
└── GRCh38
├── barcodes.tsv
├── genes.tsv
└── matrix.mtx
這3個(gè)文件你可以在R里用DropletUtils
包直接加載衡查,生成一個(gè)SingleCellExperiment對象:
> BiocManager::install("DropletUtils")
> library("DropletUtils")
> sce <- read10xCounts('raw_gene_bc_matrices/GRCh38/')
> sce
class: SingleCellExperiment
dim: 33694 737280
metadata(1): Samples
assays(1): counts
rownames(33694): ENSG00000243485 ENSG00000237613 ...
ENSG00000277475 ENSG00000268674
rowData names(2): ID Symbol
colnames: NULL
colData names(2): Sample Barcode
reducedDimNames(0):
spikeNames(0):
altExpNames(0):
barcodeRanks
函數(shù)可以把barcode按照總UMI計(jì)數(shù)來排序:
> br.out <- barcodeRanks(counts(sce))
> library("dplyr")
> br.out.df <- as.data.frame(br.out)
> br.out.df$barcode <- colData(sce)$Barcode
> br.out.df$knee <- br.out@metadata[["knee"]]
> br.out.df$inflection <- br.out@metadata[["inflection"]]
> br.out.df %>%
filter(rank <= 10) %>%
arrange(rank)
rank total fitted barcode knee inflection
1 1 40819 NA CAGGTGCAGCGCTTAT-1 2843 1282
2 2 39401 NA AACTCAGGTTACGGAG-1 2843 1282
3 3 38740 NA CTGATAGTCACCAGGC-1 2843 1282
4 4 36129 NA TTAACTCAGACACTAA-1 2843 1282
5 5 34162 NA GTATCTTCATGCTAGT-1 2843 1282
6 6 33527 NA TTCTCAATCGTACGGC-1 2843 1282
7 7 32814 NA CTCGTACAGCACGCCT-1 2843 1282
8 8 31075 NA ATGTGTGGTCTGGTCG-1 2843 1282
9 9 30447 30753.25 CTCGAGGTCGCGATCG-1 2843 1282
10 10 30439 29994.15 AACCGCGCAGACGCCT-1 2843 1282
我們可以自己畫一個(gè)barcode vs UMI的點(diǎn)圖拌牲,就像網(wǎng)頁版結(jié)果總結(jié)里的曲線圖那樣:
> library(ggplot2)
> x_knee <- br.out.df %>% filter(br.out.df$total > br.out.df$knee) %>% arrange(total) %>% select(rank) %>% head(1)
> x_inflection <- br.out.df %>% filter(br.out.df$total > br.out.df$inflection) %>% > arrange(total) %>% select(rank) %>% head(1)
> padding <- length(br.out$rank) / 10
> p1 <- ggplot(br.out.df, aes(x = rank, y = total)) +
geom_point() +
scale_x_log10() +
scale_y_log10() +
theme_bw() +
theme(axis.text = element_text(size = 10),
axis.title = element_text(size = 14),
title = element_text(size = 16)) +
geom_hline(yintercept = br.out$knee, linetype = 2, colour = "dodgerblue") +
geom_hline(yintercept = br.out$inflection, linetype = 2, colour = "forestgreen") +
labs(x = "Rank", y = "Total", title = "Barcode Rank vs Total UMI") +
annotate("text", label = paste0("Knee (", x_knee, ")"), x = x_knee$rank + padding, y = br.out.df$knee, size = 5) +
annotate("text", label = paste0("Inflection (", x_inflection, ")"), x = x_inflection$rank + padding, y = br.out.df$inflection, size = 5)
> p1
NOTE:我運(yùn)行的cellranger版本是2.2的拍埠,現(xiàn)在最新版已經(jīng)是cellranger3了土居,所以結(jié)果部分可能會有些出入装盯。