美文网首页单细胞测序单细胞测序
ProjecTILs系列教程(五):记忆性T细胞功能研究

ProjecTILs系列教程(五):记忆性T细胞功能研究

作者: 生信宝库 | 来源:发表于2022-06-28 21:46 被阅读0次

    说在前面

    CD4+ T细胞在启动和形成适应性免疫反应中发挥着核心作用,在病原体控制或清除后,绝大多数被激活的CD4 T细胞会发生凋亡,但有一部分细胞会长期存活,形成长寿记忆性细胞群。这些记忆细胞将能够在二次感染后,更快、更有效地做出反应。事实上,向特定的CD4+ T细胞亚群分化取决于几个因素,例如组织、抗原和周围环境中发现的细胞因子。其中一个亚群,滤泡辅助T细胞(Tfh),位于次级淋巴器官,并通过直接与B细胞接触促进抗体反应。

    下面,Immugent将通过实操展示使用ProjecTILs自动化重新分析NICD处理的细胞,在第35天的单细胞数据(与同一时间点的对照样本相比)。为此,小编将在病毒感染中CD4+ T细胞参考图谱的背景下,应用投射来分析这些样本的数据。


    代码实现

    library(ggplot2)
    library(reshape2)
    library(patchwork)
    library(ProjecTILs)
    
    library(GEOquery)
    geo_acc <- "GSE134157"
    datadir <- "input/Kunzli"
    
    gse <- getGEO(geo_acc)
    
    system(paste0("mkdir -p ", datadir))
    getGEOSuppFiles(geo_acc, baseDir = datadir)
    
    exp_mat.1 <- read.table(sprintf("%s/GSE134157/GSE134157_UMImatrix_NICD_protector.tsv.gz",
        datadir))
    exp_mat.2 <- read.table(sprintf("%s/GSE134157/GSE134157_UMImatrix_no_NICD_protector.tsv.gz",
        datadir))
        
    dataUrl <- "https://drive.switch.ch/index.php/s/iJKbWGHwOhY1Llu/download"
    fname <- sprintf("%s/mart_conversion_Mm.txt", datadir)
    
    download.file(dataUrl, fname)
    
    table <- read.csv(fname, sep = "\t")
    
    ID2name <- table$Gene.name
    names(ID2name) <- table$Gene.stable.ID
    ID2name <- ID2name[!duplicated(names(ID2name))]
    
    # Convert rownames in gene matrices
    exp_mat.1 <- exp_mat.1[rownames(exp_mat.1) %in% names(ID2name), ]
    rownames(exp_mat.1) <- ID2name[rownames(exp_mat.1)]
    
    exp_mat.2 <- exp_mat.2[rownames(exp_mat.2) %in% names(ID2name), ]
    rownames(exp_mat.2) <- ID2name[rownames(exp_mat.2)]
    
    query.list <- list()
    
    query.list[["protector"]] <- CreateSeuratObject(counts = exp_mat.1, min.cells = 3,
        min.features = 50)
    query.list[["protector"]]$Sample <- substring(colnames(query.list[["protector"]]),
        18)
    query.list[["protector"]]$condition <- "protector"
    
    query.list[["control"]] <- CreateSeuratObject(counts = exp_mat.2, min.cells = 3,
        min.features = 50)
    query.list[["control"]]$Sample <- substring(colnames(query.list[["control"]]), 18)
    query.list[["control"]]$condition <- "control"
    
    query.merged <- merge(query.list[[1]], query.list[[2]])
    
    # Downsample to 1000 cells per sample
    set.seed(1234)
    Idents(query.merged) <- "Sample"
    query.merged <- subset(query.merged, cells = WhichCells(query.merged, downsample = 1000))
    table(query.merged$Sample)
    
    # Download the reference atlas
    cd4.atlas.file <- "ref_LCMV_CD4_mouse_release_v1.rds"
    if (!file.exists(cd4.atlas.file)) {
        dataUrl <- "https://figshare.com/ndownloader/files/31057081"
        download.file(dataUrl, cd4.atlas.file)
    }
    ref <- load.reference.map(cd4.atlas.file)
    
    DimPlot(ref, label = T, cols = ref@misc$atlas.palette)
    
    image.png
    query.by.sample <- SplitObject(query.merged, split.by = "Sample")
    
    query.projected <- make.projection(query.by.sample, ref = ref)
    
    plots <- list()
    palette <- ref@misc$atlas.palette
    
    for (i in seq_along(query.projected)) {
        sample <- names(query.projected)[i]
        cond <- unique(query.projected[[i]]$condition)
    
        query.projected[[i]] <- cellstate.predict(ref = ref, query = query.projected[[i]],
            reduction = "umap", ndim = 2)
    
        plots[[i]] <- plot.projection(ref, query.projected[[i]], linesize = 0.5, pointsize = 0.5,
            cols = palette) + ggtitle(paste(sample, cond)) + NoLegend() + theme(legend.position = "none",
            panel.grid = element_blank(), axis.title = element_blank(), axis.text = element_blank(),
            axis.ticks = element_blank())
    
        plots[[i + 3]] <- plot.statepred.composition(ref, query = query.projected[[i]],
            cols = palette, metric = "Percent") + ggtitle(" ") + ylim(0, 50) + theme_bw() +
            theme(panel.grid = element_blank(), axis.text.x = element_blank(), axis.ticks.x = element_blank())
    }
    
    g <- wrap_plots(plots, ncol = 3)
    plot(g)
    
    image.png
    features <- c("Ifng", "Ccl5", "Gzmb", "Cxcr6", "Selplg", "Id2", "Tbx21", "Ly6c2",
        "Cxcr5", "Tox", "Tox2", "Izumo1r", "Pdcd1", "Tnfsf8", "Ccr7", "Il7r", "Tcf7",
        "Eomes", "Ifit1")
    
    p <- plot.states.radar(ref, query = query.projected, min.cells = 30, genes4radar = features)
    
    image.png
    query.bycondition <- list()
    
    query.bycondition[["Control"]] <- query.projected$Spleen_0
    query.bycondition[["Protector"]] <- ProjecTILs:::merge.Seurat.embeddings(query.projected$Spleen_1,
        query.projected$Spleen_2)
        
    plots <- list()
    
    for (i in seq_along(query.bycondition)) {
        cond <- names(query.bycondition)[i]
    
        plots[[i]] <- plot.projection(ref, query.bycondition[[i]], linesize = 0.5, pointsize = 0.5,
            cols = palette) + ggtitle(cond) + NoLegend()
    
        query.bycondition[[i]] <- cellstate.predict(ref = ref, query = query.bycondition[[i]],
            reduction = "umap", ndim = 2)
    
        plots[[i + 2]] <- plot.statepred.composition(ref, query = query.bycondition[[i]],
            cols = palette, metric = "Percent") + ggtitle(" ") + ylim(0, 50) + theme_bw() +
            theme(panel.grid = element_blank(), axis.text.x = element_blank(), axis.ticks.x = element_blank())
    }
    
    g <- wrap_plots(plots, ncol = 2)
    g
    
    image.png

    小结

    长寿型的Tfh细胞一直以来都是难以检测的,以至于其表征目前还不清楚。Kunzli等人(2020)的研究中发现,在样品分离过程中,Tfh细胞特别容易受到NADH诱导的细胞死亡(NICD)的影响,并建议使用阻断NICD的抑制剂来丰富感染后的Tfh细胞群。

    通过上面的分析结果我们可以发现,与原文一致的是在将CD4+ T细胞scRNA-seq数据映射到参考图谱中后,与对照组相比,NICD-protector治疗后Tfh记忆性细胞显著富集;重要的是,ProjecTILs在几分钟内就能完成对异质性较高的单细胞数据的分析,而这个过程不需要特定的T细胞生物学专业知识就能完成。

    好啦,截止到这,实操部分的5篇推文就全部完成,后面还会有一期对ProjecTILs在实际应用中的使用进行解读,敬请期待!

    相关文章

      网友评论

        本文标题:ProjecTILs系列教程(五):记忆性T细胞功能研究

        本文链接:https://www.haomeiwen.com/subject/yjuzvrtx.html