Commands for Drop-seq analysis using TTCK server (King)

Dropseq-toolsでの処理の流れ

fastqファイルから細胞ごとの遺伝子発現量のテーブル(DGE : degital gene expression file)を作成する。

  • Cell barcodeとUMIの抜き出し
  • リードのトリミング
  • ゲノムへのマッピング(STAR)
  • マッピング結果にバーコード情報を付与
  • 遺伝子情報の付与
  • バーコードの修正
  • 細胞の抽出
  • 種(mouse, human)ごとの細胞数のカウント

その後、Seuratを用いて発現量の表からクラスタリングや各クラスターを代表する遺伝子を探す。

Preparation

Login to TTCK server

ssh USER_NAME@cs0.bioinfo.ttck.keio.ac.jp

Login to cluster server (king)

ssh king

#Login to node
qsub -I -l nodes=1:ppn=32

シークエンスファイル(Fastq)は下記のディレクトリにアップロードしています。

/home/daney/projects/Drop_seq/data/20200308MicroMiSeq

Drop-seqの解析ツールはあらかじめ下記のディレクトリにあります。

/home/daney/projects/Drop_seq/for_dropseq_bootcamp

Make project directory

#ディレクトリを作成する
mkdir project
mkdir project/dropseq_bootcamp
mkdir project/dropseq_bootcamp/data

#作成したディレクトリに移動する
cd project/dropseq_bootcamp

#現在の位置を確認する
pwd
# /home/あなたのusername/project/dropseq_bootcamp のように出てくればok。
#今後は基本的にこのディレクトリで作業します。




#シーケンスデータをコピーする 
cp /home/daney/projects/Drop_seq/data/20200308MicroMiSeq/03072020-Ikko* data/.

#Drop seq tools のパスを通す
export PATH=/home/daney/projects/Drop_seq/for_dropseq_bootcamp/Drop-seq_tools-2.3.0:/home/daney/projects/Drop_seq/for_dropseq_bootcamp/STAR-2.7.3a/STAR/source:$PATH

Drop-seq toolsでデータを処理する

1. Dropseq toolsのインプット用にファイル形式を変換(fastq to bam)

java -jar /home/daney/projects/Drop_seq/for_dropseq_bootcamp/Drop-seq_tools-2.3.0/jar/lib/picard-2.18.14.jar  FastqToSam F1=data/09202019-yachielab-dan_S3_L001_R1_001.fastq  F2=data/09202019-yachielab-dan_S3_L001_R2_001.fastq  O=work.bam SM=example

#ここでの F1= はコピーしてきた自分の.fastqファイルのうち、R1 とある方を引数として渡す。同じくF2=はR2とあるもの。
#実行ができたらls してwork.bamができたことを確認する。以後も同様にoutputをlsで確認する。

2. Cell barcodeを抜き出してタグ付け

/home/daney/projects/Drop_seq/for_dropseq_bootcamp/Drop-seq_tools-2.3.0/TagBamWithReadSequenceExtended INPUT=work.bam OUTPUT=work.cb.bam SUMMARY=work.cb.bam_summary.txt BASE_RANGE=1-12 BASE_QUALITY=10 BARCODED_READ=1 DISCARD_READ=FALSE TAG_NAME=XC NUM_BASES_BELOW_QUALITY=1

3. UMIを抜き出してタグ付け

/home/daney/projects/Drop_seq/for_dropseq_bootcamp/Drop-seq_tools-2.3.0/TagBamWithReadSequenceExtended INPUT=work.cb.bam OUTPUT=work.cb.UMI.bam SUMMARY=work.cb.UMI.bam_summary.txt BASE_RANGE=13-20 BASE_QUALITY=10 BARCODED_READ=1 DISCARD_READ=TRUE TAG_NAME=XM NUM_BASES_BELOW_QUALITY=1

4. クオリティが低いリードをフィルタリング

/home/daney/projects/Drop_seq/for_dropseq_bootcamp/Drop-seq_tools-2.3.0/FilterBam TAG_REJECT=XQ INPUT=work.cb.UMI.bam OUTPUT=work.cb.UMI.filtered.bam

5. SMART adapter 配列の除去(Start site trimming)

/home/daney/projects/Drop_seq/for_dropseq_bootcamp/Drop-seq_tools-2.3.0/TrimStartingSequence INPUT=work.cb.UMI.filtered.bam OUTPUT=work.cb.UMI.filtered.trimS.bam OUTPUT_SUMMARY= work.cb.UMI.filtered.trimS_report.txt SEQUENCE= AAGCAGTGGTATCAACGCAGAGTGAATGGG MISMATCHES=0 NUM_BASES=5

6. Poly Aをトリミング

/home/daney/projects/Drop_seq/for_dropseq_bootcamp/Drop-seq_tools-2.3.0/PolyATrimmer INPUT=work.cb.UMI.filtered.trimS.bam OUTPUT=work.cb.UMI.filtered.trimS.trimA.bam OUTPUT_SUMMARY= work.cb.UMI.filtered.trimS.trimA_report.txt MISMATCHES=0 NUM_BASES=6 USE_NEW_TRIMMER=true

7. STARでアライメントするためファイル形式を変換(bam to fastq)

java -jar /home/daney/projects/Drop_seq/for_dropseq_bootcamp/Drop-seq_tools-2.3.0/jar/lib/picard-2.18.14.jar SamToFastq INPUT=work.cb.UMI.filtered.trimS.trimA.bam FASTQ=work.cb.UMI.filtered.trimS.trimA.fastq

8. STARでアライメント

/home/daney/projects/Drop_seq/for_dropseq_bootcamp/STAR-2.7.3a/source/STAR --runThreadN 1 --genomeDir /home/daney/projects/Drop_seq/for_dropseq_bootcamp/STAR_database/ --readFilesIn work.cb.UMI.filtered.trimS.trimA.fastq --outFileNamePrefix star

9. アライメント結果をソート

java -jar /home/daney/projects/Drop_seq/for_dropseq_bootcamp/Drop-seq_tools-2.3.0/jar/lib/picard-2.18.14.jar SortSam I=starAligned.out.sam O=aligned.sorted.bam SO=queryname

10. Cell barcode, UMI情報と統合

java -jar /home/daney/projects/Drop_seq/for_dropseq_bootcamp/Drop-seq_tools-2.3.0/jar/lib/picard-2.18.14.jar MergeBamAlignment ALIGNED_BAM=aligned.sorted.bam UNMAPPED_BAM=work.cb.UMI.filtered.trimS.trimA.bam OUTPUT=merged.bam REFERENCE_SEQUENCE=/home/daney/projects/Drop_seq/for_dropseq_bootcamp/metadata_dropseq_hg19mm10/genome.fa INCLUDE_SECONDARY_ALIGNMENTS=false PAIRED_RUN=false

11. gene情報を付加

/home/daney/projects/Drop_seq/for_dropseq_bootcamp/Drop-seq_tools-2.3.0/TagReadWithGeneFunction I= merged.bam O=star_gene_exon_tagged.bam ANNOTATIONS_FILE=/home/daney/projects/Drop_seq/for_dropseq_bootcamp/metadata_dropseq_hg19mm10/genes.refFlat

12.ビーズのエラー(置換)を修正


mkdir tmp

/home/daney/projects/Drop_seq/for_dropseq_bootcamp/Drop-seq_tools-2.3.0/DetectBeadSubstitutionErrors I=star_gene_exon_tagged.bam O=my_clean_substitution.bam OUTPUT_REPORT=my_clean.substitution_report.txt TMP_DIR= /home/[ユーザー名]/project/dropseq_bootcamp/tmp

13. ビーズのエラー(合成)を修正

/home/daney/projects/Drop_seq/for_dropseq_bootcamp/Drop-seq_tools-2.3.0/DetectBeadSynthesisErrors I=my_clean_substitution.bam O=my_clean.bam REPORT=my_clean.indel_report.txt OUTPUT_STATS=my.synthesis_stats.txt SUMMARY=my.synthesis_stats.summary.txt PRIMER_SEQUENCE=AAGCAGTGGTATCAACGCAGAGTAC TMP_DIR= /home/[ユーザー名]/project/dropseq_bootcamp/tmp

# my.synthesis_stats.summary.txtの中身を確認する
less my.synthesis_stats.summary.txt

#my.synthesis_stats.summary.txtに記載されているNO_ERRORの数を参照して、メモする。次のステップで値を使います。


14. 発現量等の表を作成

/home/daney/projects/Drop_seq/for_dropseq_bootcamp/Drop-seq_tools-2.3.0/DigitalExpression I= my_clean.bam O= my_clean.dge.txt.gz SUMMARY= my_clean.dge.summary.txt NUM_CORE_BARCODES=XXXX
#my.synthesis_stats.summary.txtに記載されているNO_ERRORの数を参照して、抜き出すバーコード数(NUM_CORE_BARCODESで指定する値)を決定

15. Read数の変化から発現している細胞数を見積もる

# knee pointの出し方の一例(自作スクリプト使用)
perl /home/daney/projects/Drop_seq/for_dropseq_bootcamp/convert_for_detect_knee_point.pl my_clean.dge.summary.txt
python /home/daney/projects/Drop_seq/for_dropseq_bootcamp/detect_knee_point.py for_detect_knee_x.txt for_detect_knee_y.txt           

#次のステップで使用するknee pointの値が出力されるので、メモする。

16. 細胞として抽出したバーコードの発現量表を作成

/home/daney/projects/Drop_seq/for_dropseq_bootcamp/Drop-seq_tools-2.3.0/DigitalExpression I=my_clean.bam O=my_clean.dge.extracted.txt.gz SUMMARY=my_clean.dge.extracted.summary.txt  NUM_CORE_BARCODES=XXX
#NUM_CORE_BARCODESにKnee pointを指定

17. 細胞を種ごとにカウントする(1)

/home/daney/projects/Drop_seq/for_dropseq_bootcamp/Drop-seq_tools-2.3.0/FilterBam INPUT=my_clean.bam OUTPUT=human.bam REF_SOFT_MATCHED_RETAINED=hg19

/home/daney/projects/Drop_seq/for_dropseq_bootcamp/Drop-seq_tools-2.3.0/FilterBam INPUT=my_clean.bam OUTPUT=mouse.bam REF_SOFT_MATCHED_RETAINED=mm10

17. 細胞を種ごとにカウントする(2)

/home/daney/projects/Drop_seq/for_dropseq_bootcamp/Drop-seq_tools-2.3.0/DigitalExpression I=my_clean.bam O=my_clean.dge.extracted.txt.gz SUMMARY=my_clean.dge.extracted.summary.txt TMP_DIR= TMP_DIR= /home/[ユーザー名]/project/dropseq_bootcamp/tmp NUM_CORE_BARCODES=XXX
#NUM_CORE_BARCODESにKnee pointを指定

18. 細胞として抽出したバーコードの発現量表を作成

細胞として抽出されたバーコードのリストを作成

awk -F "\t" '{print $1}' my_clean.dge.extracted.summary.txt > barcode_list.txt
#headerなどはいらないのでbarcode_list.txtファイル中から削除

emacs barcode_list.txt
#消去するところは僕が指示するので、ここまでできたら教えてください。


種ごとに遺伝子発現量のテーブルを作成

/home/daney/projects/Drop_seq/for_dropseq_bootcamp/Drop-seq_tools-2.3.0/DigitalExpression I=human.bam O=human.dge.txt.gz SUMMARY=human.dge.summary.txt CELL_BC_FILE=barcode_list.txt TMP_DIR= /home/[ユーザー名]project/dropseq_bootcamp/tmp

/home/daney/projects/Drop_seq/for_dropseq_bootcamp/Drop-seq_tools-2.3.0/DigitalExpression I=mouse.bam O=mouse.dge.txt.gz SUMMARY=mouse.dge.summary.txt CELL_BC_FILE=barcode_list.txt TMP_DIR= /home/[ユーザー名]project/dropseq_bootcamp/tmp

19. 細胞を種ごとにカウントする(3)

#まずはファイルの位置を確認します
pwd
#この場所をメモります。

#次に Command + T を押し、新しいタブを開いてください。
#以下のようにDesktopに移動します。
cd Desktop

#次にDropseq_bootcampというディレクトリを作ります
mkdir Dropseq_bootcamp

#いま作成したディレクトリに入ります
cd Dropseq_bootcamp

#先ほどのサーバー上の位置から、ファイルをダウンロードします。
scp [ユーザー名]@cs0.bioinfo.ttck.keio.ac.jp:[先ほどのpwdで得られたパス]/"*.txt.gz" .


#メールにて送ったRスクリプトも同じディレクトリに入れましょう。

20. Rを用いた解析(1) データ前処理


#パッケージのダウンロード
library(Seurat)
library(ggplot2)
library(Matrix)
library(tidyverse)


#ない場合はインストールし、再度実行する
#install.packages("パッケージ")
#library(パッケージ)

setwd("~/Desktop/Dropseq_bootcamp/")

## For Dropseq data, read the expression matrix and transform into the sparse matrix format

exp <- read_tsv("my_clean.dge.txt.gz",col_names = TRUE)
exp <- column_to_rownames(exp,var="GENE")
exp.mat <- Matrix(as.matrix(exp))

## Build a Seurat object
## min.cells: Include features detected in at least N cells
## min.features: Include cells where at least N features are detected
seu <- CreateSeuratObject(exp.mat,min.cells = 3,min.features = 200)

## Remove low quality cells which have high mitochondrial gene expresison
mito_pattern <- "^hg19-MT-|^mm10-mt-" #Reagular expression which indicates mitochondrial gene name
rownames(seu)[grep(mito_pattern,rownames(seu))] #Check it
seu[["percent.mito"]] <- PercentageFeatureSet(seu, pattern = mito_pattern)
VlnPlot(seu, features = c("nFeature_RNA", "nCount_RNA", "percent.mito"), ncol = 3)
seu <- subset(seu, subset = nFeature_RNA > 200 & nFeature_RNA < 100000 & percent.mito < 20)

## Human-Mouse plot
exp.count.mat <- seu@assays$RNA@counts
exp.human.mat <- exp.count.mat[grep("^hg19",rownames(exp.count.mat)),]
exp.mouse.mat <- exp.count.mat[grep("^mm10",rownames(exp.count.mat)),]
exp.human.sum <- colSums(exp.human.mat)
exp.mouse.sum <- colSums(exp.mouse.mat)
human.mouse.mat <- data.frame(exp_human=exp.human.sum,exp_mouse=exp.mouse.sum)
ggplot(human.mouse.mat,aes(x=exp_human,y=exp_mouse))+
  geom_point(col="orange",size=1.5)+
  theme_classic()

#Save plot
ggsave("human-mouse.pdf")

## save the object
saveRDS(seu,"step1_seurat_object.rds")

ここで得られる描画一覧

各セルバーコードに見られるRNAの種類、総数、ミトコンドリア由来の割合

VlnPlot(seu, features = c("nFeature_RNA", "nCount_RNA", "percent.mito"), ncol = 3)

photo

各セルバーコードにおいてHumanとMouseにそれぞれマップした総リード数

ggplot(human.mouse.mat,aes(x=exp_human,y=exp_mouse))+
  geom_point(col="orange",size=1.5)+
  theme_classic()

photo

20. Rを用いた解析(2) PCA解析


## Load the saved object
seu <- readRDS("step1_seurat_object.rds")

## Normalize the expression data
seu <- NormalizeData(seu,normalization.method = "LogNormalize", scale.factor = 10000,verbose = FALSE)

## Find top 3000 highly variable genes that is expected to be useful for cell population clustering
seu <- FindVariableFeatures(seu,selection.method="vst",nfeatures = 3000,verbose = FALSE)
head(VariableFeatures(seu),10) #see top 10 highly variable genes

## Centering and scaling the data so that the variance across cells is 1 using linear transformation
seu <- ScaleData(seu,verbose=FALSE)

## Run principal component analysis to reduce the dimention
seu <- RunPCA(seu,verbose = FALSE)

## PCA is enough to cluster the cells
DimPlot(seu)
FeaturePlot(seu,features = c("mm10-Pclaf","mm10-Prc1"))

saveRDS(seu,"step2_seurat_object.rds")

ここで得られる描画一覧

PCA解析の出力

DimPlot(seu)DimPlot(seu)

photo

PCA解析の出力に、head(VariableFeatures(seu),10) で見られたTop2の遺伝子をマップしたもの

FeaturePlot(seu,features = c("mm10-Pclaf","mm10-Prc1"))

photo

20. Rを用いた解析(3) UMAP


## Load the saved object
seu <- readRDS("step2_seurat_object.rds")

## Detect the informative PC used for dimention reduction
ElbowPlot(seu)
dimlimit <- 8 #Using PC1-8 seems to be fine

## Find k-neighbor cells
seu <- FindNeighbors(seu, reduction = "pca", dims = 1:dimlimit,verbose=FALSE)

## detect clusters with unsupervised way
seu <- FindClusters(seu, resolution = 0.3,verbose=FALSE)

## UMAP
seu <- RunUMAP(seu, reduction = "pca", dims = 1:dimlimit,verbose=FALSE)
DimPlot(seu,reduction = "umap")

## Map human or mouse gene expression on UMAP
norm.count <- seu@assays$RNA@data
norm.count.human <- norm.count[grep("^hg19",rownames(norm.count)),]
norm.count.mouse <- norm.count[grep("^mm10",rownames(norm.count)),]
exp.human.sum <- colSums(norm.count.human)
exp.mouse.sum <- colSums(norm.count.mouse)

seu$huamn_gene_count <- exp.human.sum
seu$mouse_gene_count <- exp.mouse.sum

FeaturePlot(seu,
            features = c("huamn_gene_count","mouse_gene_count"),
            cols = c("grey80","deeppink2"),
            pt.size = 1.5)
            
#Save plot
ggsave("UMAP.pdf")
ここで得られる描画一覧

次元圧縮に寄与している遺伝子を上から並べ、それぞれどれくらいのばらつきがあるかを示す

ElbowPlot(seu)

photo

次元圧縮したデータを、UMAPを用いて描画する

DimPlot(seu,reduction = "umap")

photo

UMAPの描画にHumanとMouseのgeneカウントをマップする

FeaturePlot(seu,
            features = c("huamn_gene_count","mouse_gene_count"),
            cols = c("grey80","deeppink2"),
            pt.size = 1.5)

photo