在上一篇筆記的結尾處,提到了cellranger count這一步,之前幾天我一直是用的服務器裏128G和200G的內存試着運行這一步,並且限制了cores的數量(64),但是在24小時之內都沒有處理完SRR7722937這一個樣品的fastq文件(在服務器裏跑程序需要設置運行時間)。這次我取消了內存以及cores的數量限制(這時cellranger會耗盡幾乎所有的可用內存,大概將近300個G),並且把運行時間的限制從24小時改成了5天:
$ cellranger count \
--id=Tumor937
--transcriptome=/gpfs/home/practice/10_genomics_genome/GRCh38 \
--fastqs=/gpfs/home/practice \
--sample=SRR7722937
--expect-cells=10000
這次的嘗試成功的跑完了一個樣品,總共運行時間爲2天8個小時。打開log文件可以看到程序運行過程中記錄了很多條記錄,大概有上百行記錄,在記錄的最後幾行,會出現運行的總結,說明你的cellranger count運行成功:
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代碼裏設置的文件夾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 #重點關注這個文件夾
-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 #這個文件可以使用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格式的結果總結
-rw------- 1 fy04 fy04 105930133 Aug 4 17:47 molecule_info.h5 #之後如果需要aggr整合幾個單細胞測序的樣品,這個文件是aggr步驟的輸入文件
-rw------- 1 fy04 fy04 3182359671 Aug 4 15:59 possorted_genome_bam.bam #比對到基因組和轉錄本上的reads,並且帶有barcode註釋信息
-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 #網頁版的運行結果總結,可以使用任何一個瀏覽器查看
解讀cellranger count的輸出文件
(1)web_summary.html文件
一旦cellranger count運行完畢,你可以通過這個文件在瀏覽器裏查看你的結果總結。你也可以使用Loupe Cell Browser軟件查看“outs”文件夾裏的.cloupe
文件。下面這個截屏就是總結,裏面記錄了測序質量和檢測到的細胞的一些特徵值。包括檢測到的細胞數量,每個細胞的平均reads數,每個細胞檢測到的平均基因數(上方的綠色的三個數字)。右面的曲線圖顯示的是barcode的計數分佈,以及哪些barcode對應的相關細胞。Y軸是map到每一個barcode的UMI的計數數值,X軸是對應到這個數值的barcode的數量。這條曲線要有一個急劇下降的趨勢纔是好的結果,說明細胞barcode在細胞和“空樣品”間的差異非常明顯。這個曲線圖下面的“Fraction reads in cells”這一項比例需要大於70%,說明數據纔是質量好的。
上面這個網頁的左上角,有一個“ANALYSIS”的選項,點開看,會出現下面這個頁面:
這個頁面裏包括以下幾個部分:
(1)t-SNE降維分析
(2)自動生成的聚類分析(根據表達譜裏相似表達的基因)
(3)一個差異基因列表,是根據自動生成的聚類來生成的差異基因
(4)一個測序飽和度的曲線
(5)每個細胞裏測得的基因數量的曲線
上面圖裏左邊的圖是一個二維的t-SNE,每一個點就是一個細胞,根據細胞裏含有的UMI數量來區分顏色。這張圖也說明了細胞內RNA含量,也通常與細胞大小有關。紅色的點代表這個細胞有着更多的RNA含量。在這個座標系裏,兩個離得很近的點有着更爲相似的基因表達模式(相比於兩個離得較遠的點)。
而上面的右邊的是一個聚類的圖,你可以通過改變右上角的clustering type,來改變聚類的參數:
這個頁面的中部的表就是差異基因列表:
再往下兩張圖就是測序飽和度(通常也指示文庫的複雜度),以及平均每個細胞裏測得的基因,這兩張圖都可以說明測序深度:
(2)bam文件
在“outs”文件夾裏,有一個bam文件,是根據我們的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
這個bam文件有25列,前11列是標準的bam文件的內容,後面的14列是cellranger count生成的bam文件特有的,這25列分別是:
(3)矩陣文件
運行cellranger count後會自動生成的二級分析結果,但是一般來說,我們通常是拿到基因表達矩陣後,自己在R裏進行後續的分析。
參考文章:https://davetang.org/muse/2018/08/09/getting-started-with-cell-ranger/
在“outs”文件夾裏,有一個名爲raw_gene_bc_matrices的文件夾:
#包含3個文件:
$ tree
.
└── GRCh38
├── barcodes.tsv
├── genes.tsv
└── matrix.mtx
這3個文件你可以在R裏用DropletUtils
包直接加載,生成一個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
函數可以把barcode按照總UMI計數來排序:
> 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
我們可以自己畫一個barcode vs UMI的點圖,就像網頁版結果總結裏的曲線圖那樣:
> 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:我運行的cellranger版本是2.2的,現在最新版已經是cellranger3了,所以結果部分可能會有些出入。