——标题:“OpenCyto教程
流式细胞术数据的鲁棒和可重复的自动门控
BIOC 2014.
“作者:”Greg Finak,Phd
科学家
" date: "July, 2014"输出:ioslides_presentation: fig_caption: yes fig_retina: null pandoc_args: -- c - mystyles.css宽屏幕:yes - ##什么是OpenCyto?{。} **不是算法,而是 *框架*为自动控制。****Goals** * Easily build *可重复的门控管道*。* *使用任何门控算法**在任何步骤(支持门控插件)中互换任何算法*简化 数据处理和数据管理。*轻松将数据(小区子集)的子集传递给不同的门控算法。* 简单(r)管道模板定义*通过文本文件(CSV)定义的管道*模板和代码是 *可重复使用的*用于标准化分析和数据。* 促进比较分析*从flowjo工作区导入手动门控数据* 缩放到*大*数据集* HDF5支持-数据集限制的磁盘空间,而不是RAM。##概述{.smaller}

原始数据➙预处理➙标注➙浇注➙统计分析➙输出

````{r framework_figure,echo = false,fig.cap ='GenceTo Gating框架是R / Biocumondocks的集合,以便容易地构建可重复的流量数据分析管道。',消息= false,fig.Align ='Center',fig.width = 8,cache = true}需要(png)需要(grid)img <-readpng(“资源/ framework.png”)grid.raster(img)```##入门|安装**要求:R + Biocumons ** *安装* r从[cran]的r的版本*(http://cran.r-project.org/)。*从[bioconductor.org/install](http://www.biocondudion.org/install/)*安装*释放版本* biocominiond(http://www.biocionder.org/)*在r中安装openceto及其依赖关系*键入以下内容:```{reg =false}需要(生物键合器)Bioclite(“opencyto”)```这是安装所有必需的软件包。

仍然有问题吗?[Bioconductor邮件列表](https://stat.ethz.ch/mailman/listinfo/bioconductor) Email: [Mike Jiang](wjiang2@fhcrc.org)或[Greg Finak](gfinak@fhcrc.org) Twitter: [\@OpenCyto](http://www.twitter.com/OpenCyto)

##开始入门II *交替*如果您是勇敢的并且想要最新的错误修复和功能 - * github.com / rglab *```{r eval = false}需要(devtools)packages <-c(“rglab / flowstats“,”rglab / flowcore“,”rglab / flowviz“,”rglab / ncdformlow“,”rglab / flowworkspace“,”rglab / apencyto“)install_github(包,quick = true)```您可以使用* devtools *包将直接从GitHub安装最新的稳定版本。##一个工作的例子|抗原刺激的T细胞的细胞内细胞因子染色* FlowRepository.org [FR-FCM-ZZ7U]的完整数据集(http://flowreposory.org/experiments/254/public_id)*批量0882,76样本文件,13补偿控制。```{r libs,echo = false,message = false,warning = false}需要(apencyto)需要(data.table)要求(Reshape2)要求(GGPlot2)```````{R回波= 1,结果='markup',结果='hide'} ws <-openworkspace(“data / workspace / 080批0882.xml”)ws```
FlowJo工作空间版本2.0文件位置:data/ Workspace文件名:080 batch 0882.xml工作空间是打开的。所有的样本158 2 0882- l -080 157 3 Comps 13 4 0882样本76
##导入手动门控(parseWorkspace){。创建一组手动门。{r parseWorkspace_echo,echo=TRUE,eval=FALSE} gating_set<-parseWorkspace(ws,name="0882 Samples",path="data/FCS/",isNcdf=TRUE)' ' ' ' ' ' {r parseWorkspace,回声= FALSE,结果=‘隐藏’,eval = TRUE}如果(! file.exists(“数据/ manual_gating /”)){gating_set < -parseWorkspace (name = " 0882个样本ws,路径=“数据/ FCS /”,isNcdf = TRUE,覆盖= TRUE) save_gs (gating_set、路径=“数据/ manual_gating”)其他}{gating_set < -load_gs(“数据/ manual_gating /”)}‘’
解析76个样本调用c++解析器... ...
我们现在有了门控,补偿和转换的数据 * HDF5 *文件表示的文件 * GatingSet *对象。我们可以把它留着以后用。“‘{r eval = FALSE,回声= TRUE,结果= '隐藏'}save_gs (gating_set、路径=“数据/ manual_gating”)' ' '
储蓄ncdf……拯救树对象……储蓄R对象……要重新加载它,使用'load_gs'函数
存档的门集包含关于的所有信息 转换、补偿、单细胞事件和门并且可以与合作者共享。可视化浇注布局(plotGate)Rm("Not 4+",gating_set) {r clean_manual,echo=FALSE,results='hide',warning=FALSE,message=FALSE} Rm("Not 4+",gating_set)' ' ' ' ' ' {r vis_manual_gates,回声= TRUE, eval = TRUE,结果=‘隐藏’,缓存= FALSE,消息= FALSE,警告= FALSE, fig.align =‘中心’,无花果。cap='Layout of manual gates'} plotGate(gating_set[[1]],xbin=16,gpar=list(ncol=5)) # Binning for更快的绘图' ' '##可视化门控组上调用的选通树(绘图),给我们一个看法。```{r plot_manual_tree,echo = 2,结果=“hide”,message = false,警告= false,figncap =''} plot(gating_set)`````)# #{注释。小}我们 注释我们的门集从 关键词 flowrepository。我们只保留 呕吐 消极的控制刺激```{r关键字,回声= c(2,3,4,8,9,10),eval = true} getKeywords <-function(gs,kv){r <-ras.data.frame(do。呼叫(CBIND,LAPPLEY(kV,函数(k){关键字(gs,k)[1]))))data.table :: setnames(r,r,'$ fil“,”名称“)r} keyword_vars <-c(“$ fil”,“stim”,“样本命令”,“实验名称”)#rerevant关键字pd <-data.table(getKeywords(gating_set,chinesence_vars))#extract对数据表注释<-data的相关关键字。表::: fread(“data / workspace / pd_submit.csv”)#从FlowLepository SetNames(注释,“文件名”,“名称”)SetKey(注释,“名称”)SetKey(PD,“名称”)读取注释)pd <-data.frame(注释[pd])#data.table样式合并成像(pd,c(“timepoint”,“个人”),c(“访问没有”,“ptid”))pdata(gating_set)<-pd #annotate gating_subset <-gating_set [子集(pd,!is.na(条件))$ name] #subset只有gag和negctrl````` {r chinesss_tbl,eval = true,echo = false,结果='ASIS',Cache = False} Knitr :: Kable(Head(子集(Na.omit(PD)[,C(1:5)],PTID%In%“080-17”),4),行。名称=假)```##克隆和保存用于自动门控{.smaller}我们希望执行此数据的自动化。*我们将克隆Gating Set,删除现有节点并将数据重新保存为新的门控组。````{r copy_and_save,eval = false,message = false,warining = false,结果='hide'} auto_gating <-clone(gating_subset)rm(“s”,auto_gating)save_gs(auto_gating,path =“数据/ autogate“,覆盖= true)`````{r load_empty,eval = true,echo = false,结果='hide',message = false,警告= false}如果(!file.exists(”数据/ autogating“))){auto_gating <-clone(gating_subset)try(RM(“s”,auto_gating))save_gs(auto_gating,path =“data / autogating”)} else {auto_gating <-load_gs(“data / autogating /”)}```````````{recho = true,eval = true} list.files(“数据/ autogating”)````.nc`文件是事件级数据的hdf5文件。*`.dat`文件包含来自`c`数据结构的选通集合。*“.rds`文件是包含R-object信息的`R`数据文件。将其发送给朋友,`load_gs()`将读取它,数据将可用。## COSTRUCTING模板 - I {.smaller}```{r read_template,echo = false,结果='asis',cache = false}模板<-read.csv(“data // template // gt_080.csv”,as.is = false,alloweScapes = true,stringsasfactors = false)模板$折叠式[is.na(模板$ collapsedataforging)] < - “”kmisc :: htmltable(data.frame(模板)[1:8,c(1:6,8,9)],attr =“宽度= 100%”)```##构造一个模板- II{。每一行定义了一个cell population * ' alias ':我们如何引用这个cell /简写* ' pop ':这个cell的定义,也就是我们在设置门之后,为一个标记/一对标记保留正的(+)或负的(-)cell。* ' dim ':用于定义此单元格填充的维度/标记。* ' gating_method ':使用哪种选门算法。* ' collaseDataForGating ': TRUE或FALSE. * ' collaseDataForGating ': TRUE或FALSE. * ' collaseDataForGating ': TRUE或FALSE。与groupBy一起,可以用一个共同的门对多个样本进行门控。* ' preprocessing_method ':用于某些控制方法的高级用途* ' preprocessing_args ':附加参数我们读取模板并将其可视化' ' {r read_plot_template,echo=TRUE,message=FALSE,warning=FALSE,results='hide',fig.align="center",fig.width=8,fig.height=5,out.width=600,dpi=200,帽= "}gt < -gatingTemplate(“数据/模板/ gt_080.csv”)情节(gt)' ' '##自动门控openCyto通过模板,并使用模板中命名的算法对每个样本中的每个人群进行门控。“‘{r gate_subset,回声= TRUE,消息= FALSE,警告= FALSE,结果=“隐藏”,eval = FALSE,无花果。} gating(x = gt, y = auto_gating) ##某些输出..情节(auto_gating)' ' ' ' ' ' {r plot_autogate_tree,回声= FALSE,消息= FALSE,警告= FALSE, fig.align =“中心”。if(length(getNodes(auto_gating))<1){gating(x = gt,y = auto_gating) save_gs (auto_gating路径=“数据/ / autogating”,覆盖= TRUE)} setNode (auto_gating,“nonNeutro”,假)setNode (auto_gating,“DebrisGate”,假)setNode (auto_gating,“cd4 / cd57 - / gzb_gate”,假)setNode (auto_gating,“cd4 / cd57 - / prf_gate”,假)setNode (auto_gating,“cd8 / cd57 - / gzb_gate”,假)setNode (auto_gating、“cd8 / cd57——“假)setNode(auto_gating,"cd4/cd57-",FALSE) setNode(auto_gating,"cd4neg",FALSE) setNode(auto_gating,"cd4pos",FALSE) setNode(auto_gating,"cd8+",FALSE) setNode(auto_gating,"cd8-",FALSE) setNode(auto_gating,"cd8-",FALSE) plot(auto_gating)' ' '##自动浇注- II{。小}’‘{r compare_to_manual,回声= TRUE,无花果。cap=' CD4/CD8的自动和手动门',cache=FALSE,fig.align='center',fig.width=5,fig.height=2.5,out。宽度= 600}p1 < -plotGate (auto_gating [[1]], c(“cd8”、“cd4”),安排= FALSE,预测=列表(“cd4”= c (x =“cd8”,y =“cd4”),“cd8”= c (x =“cd8”,y =“cd4”)),主要=“自动化门”,路径= 2)[[1]]p2 < -plotGate (gating_subset [[1]], c(“8 + 4 +),预测=列表(“4 +”= c (x =“cd8”,y =“cd4”),“8 +”= c (x =“cd8”,y =“cd4”)),安排= FALSE,主要=“手动门”,路径= 2)[[1]]grid.arrange (arrangeGrob (p1, p2, ncol = 2))数据和门是可比较的,如果有必要可以调整,但重要的是它是可复制的。总是生成相同的结果。##提取统计数据和将手册与自动化{.smaller}````````{r extract_stats进行比较{.smaller},回声= false,meash = false,警告= false,error = false,结果='hide',fig.cap ='手册的比较VS自动化选通单元集子集合',figthth = 12,fig.height = 5,cache = false,fign.align ='center',out.width = 800} auto_stats <-getpopstats(auto_gating,statistic =“count”)Manual_stats <-getpopstats(gating_subset,统计=“count”)gates_to_remove <-rownames(manual_stats)[哪个(sapply(baseName(baseName(shoreName(manual_stats)),函数(x)长度(strsplit(x,“)[[1]] ==“+”))> 1))gates_to_remove <-c(gates_to_remove,rowname(manual_stats)[哪个(sapply(baseName(sapename(shoreName(manual_stats)),函数(x)长度(strsplit(X,“”)[[1]] ==“ - ”))> 1)),“/ s / LV / L / NOT 4 +”,“/ S / LV / L / 3 + / 8 + /Granzyme B - “,”,“/ S / LV / L / 3 + / 8 + / IFN \\ IL2”,“/ S / LV / L / 3 + / 4 + / IFN \\ IL2”,“/ S / LV/ L / 3 + / 8 + / IFN + IL2 - “,”,“/ S / LV / L / 3 + / 4 + / IFN + IL2 - ”,“/ S / LV / L / 3 + / 8 + / IFN-il2 +“,”/ s / lv / L / 3 + / 4 + / granzyme b - “,4 + / IFN-IL2 +”,“/ s / LV / L / 3 + / 8 + / 57-”,“/ s / lv / l / 3 + / 4 + / 57-”)for(i在gates_to_remove){try(rm(i,gating_subset),silent = true)} .getcounts <-function(stat =“count”){auto_stats <-getpopstats(auto_gating,attistic = stat)manual_stats <-getpopstats(gating_subset,统计= stat)#combine melted_auto <-melt(auto_stats)melted_manual <-melt(manual_stats)setnames(melted_manual,c(“人口”,“文件”,“counts”))setNames(Melted_auto,C(“人口”,“文件”,“计数”))Melted_Auto < -子集(Melted_auto,!人口%c%c(“边界”,“根”))融化_ uto $群体< - 因子(Melted_auto $人口)Melted_Manual <-Subset(Melted_Manual,!人口%C(“4 + / 57)- “,”4 + / granzzyme b - “,”4 + / IFN + IL2 - “,”4 + / IFN-IL2 +“,”4 + / IFN \\ IL2“,”8 + / 57-“,”8 + / granzyme b - “,”8 + / IFN + IL2-“,”8 + / IFN-IL2 +“,”8 + / IFN \\ IL2“,”根“))Melted_Manual $人群< - 因子(Melted_Manual$人口)d < - (级别(elted_auto $人口)),(级别(melted_manual $人口)),ignore.case = true,partial = false)d <-solve_lsap(t(d))data.frame(水平(Melted_auto $人口)[D],水平(Melted_Manual $人口))水平(Melted_auto $人口)[D] <级别(Melted_Manual $population) merged<-rbind(cbind(melted_auto,method="auto"),cbind(melted_manual,method="manual")) merged } merged_counts<-.getCounts(stat="count") merged_props<-.getCounts(stat="freq") corr.coef<-cor(dcast(merged_counts,file+population~method,value.var = "counts")[,c("auto","manual")],use="complete") corr.coef.freq<-cor(dcast(merged_props,file+population~method,value.var = "counts")[,c("auto","manual")],use="complete") et<-element_text(size=20) et2<-element_text(size=12) p1<-ggplot(dcast(merged_counts,file+population~method,value.var = "counts"))+geom_point(aes(x=auto,y=manual,color=basename(as.character(population))))+scale_y_log10(Kmisc::wrap("Manual Gating Population Count",30))+scale_x_log10(Kmisc::wrap("Autogating Population Count",30))+theme_bw()+geom_abline(lty=3)+theme(axis.text.x=et,axis.text.y=et,axis.title.x=et,axis.title.y=et,legend.text=et2,legend.position="none",plot.title=et)+scale_color_discrete("Population")+geom_text(aes(x=10,y=100000,label=sprintf("rho=%s",signif(corr.coef[1,2],4))),data=data.frame(corr.coef))+ggtitle("Counts") p2<-ggplot(dcast(merged_props,file+population~method,value.var = "counts"))+geom_point(aes(x=auto,y=manual,color=basename(as.character(population))))+scale_y_log10(Kmisc::wrap("Manual Gating Population Proportion",30))+scale_x_log10(Kmisc::wrap("Autogating Population Proportion",30))+theme_bw()+geom_abline(lty=3)+theme(axis.text.x=et,axis.text.y=et,axis.title.x=et,axis.title.y=et,legend.text=et2,legend.position="left",plot.title=et)+scale_color_discrete("Population")+geom_text(aes(x=0.01,y=0.75,label=sprintf("rho=%s",signif(corr.coef.freq[1,2],4))),data=data.frame(corr.coef.freq))+ggtitle("Proportions") grid.draw(cbind(ggplotGrob(p1), ggplotGrob(p2), size="last")) ``` ```{r extract_stats_echo,echo=TRUE,eval=FALSE} #Extract stats auto_stats<-getPopStats(auto_gating,statistic="count") manual_stats<-getPopStats(gating_subset,statistic="count") ``` Note Perforin is incorrectly gated in the manual analysis. Minor differences at low end, but 可再生的和客观的穿孔素-细胞因子门和参考门。小}’‘{r example_Perforin,回声= FALSE, eval = TRUE,无花果。cap=' Perforin/CD8的自动和手动门控',cache=FALSE,fig.align='center',fig.width=7.5,fig.height=3.5,out。宽度= 500}p1 < -plotGate (auto_gating [[sampleNames (gating_subset)[7]]],“cd8 /脉冲重复频率”,default.y = " ”,xbin = 256,利润率= FALSE,路径= 2,安排= FALSE,主要= "自动",xlab =列表(cex = 1.5), ylab =列表(cex = 1.5),天平=列表(cex = 1.5), par.strip.text =列表(cex = 1.5)) [[1]] p2 < -plotGate (gating_subset [[sampleNames (gating_subset)[7]]],“8 + /穿孔素+”,default.y = " ”,xbin = 256,利润率= FALSE,路径= 2,xlab =列表(cex = 1.5), ylab =列表(cex = 1.5),天平=列表(cex = 1.5), par.strip.text =列表(cex = 1.5),安排= FALSE,主要=“手册”)[[1]]grid.arrange (p1, p2, ncol = 2)``` ```{r example_derivative_gate,echo=FALSE,eval=TRUE,fig.align='center',out.width=500,fig.width=7.5,fig.height=3.5} fr<- getdata (auto_gating[[7]],"cd8/cd57-") cut<-tailgate(fr,channel=" ”,filter_id = " perforin_gate”)洞穴<密度(exprs (fr。” []),调整=2)second_deriv <- diff(符号(diff(dens$y))) which_maxima <- which(second_deriv == -2) + 1 which_maxima <- which_maxima[findInterval(dens$x[which_maxima], range(exprs(fr[," openCyto:::. deri_density (x = exprs(fr[, ' ', ' ', ' ')) ),调整= 2,导数= 1 par(mfrow=c(1,2)) plot(dens,main="Density")标线(v=峰)标线(v=cut@min,col="red")标线(deri_out,type="l",main="一阶导数",xlab="X",ylab="Density")标线(v=cut@min,col="red")标线(v=峰)自动门设置在CD57上(参考)。穿孔素阴性细胞包括在手动门。
www.biocondion.org.
## TNFA```````````````` {remate_tnfa,equo = false,cache = false,f假,tim.cap = tfna的自动和手动门控“,fig.align ='center'} p1 <-plotgate(auto_gate [[Samplenames(Gating_subset)[7]],c(“CD8 / TNFA”,“CD4 / TNFA”),DEFAULT.Y =“ “,xbin = 256,边缘= false,path = 2,排列= false,main =”自动化“,xlab = list(cex = 1.1),ylab = list(cex = 1.1),scales = list(cex = 1.1),par.strip.text = list(cex = 1.1))p2 <-plotgate(gating_subset [[samplenames(gating_subset)[7]],c(“8 + / tnfa +”,“4 + / tnfa +”),默认.Y =“ ”,xbin = 256,利润率= FALSE,路径= 2,xlab =列表(cex = 1.1), ylab =列表(cex = 1.1),天平=列表(cex = 1.1), par.strip.text =列表(cex = 1.1),安排= FALSE,主要=“手册”)do.call (grid.arrange c (p1, p2, ncol = 2))' ' '
www.biocondion.org.
##一些有用的函数。返回一个包含 命名小区群体的事件级数据。“‘{r getData,回声= TRUE, eval = FALSE} cd3_population < getData (auto_gating, cd3)' ' ' 绘制一个名为细胞群。“‘{r plotGate,回声= TRUE, eval = FALSE} plotGate (auto_gating, cd3)' ' ' FCS文件子集。first_ten_fcs_files<-auto_gating[1:10] <-auto_gating[1:10] <-auto_gating[1:10 支持控制方法(可以在模板中使用)。“‘{r listgtMethods,回声= TRUE, eval = FALSE} listgtMethods ()注册一个“的” 新门控或预处理插件。```{r regread_plugin,echo = true,eval = false} registerplugins(myfunction,methodname,依赖关系,“预处理”|“gating”)```
www.biocondion.org.
##一些更有用的功能{.smaller} 从手动门控层次结构生成基本的GateTTemplate。“‘{r gen_template,回声= TRUE, eval = FALSE,结果=‘黑名单’}templateGen (gating_subset [[1]])``` ```{r gen_template_noecho,echo=FALSE,eval=TRUE,results='asis'} hd<-head(data.frame(templateGen(gating_subset[[1]])),7) hd[is.na(hd)]<-"" Kmisc::htmlTable(hd)只需填写' gating_method '和' dims '就可以开始了。
www.biocondion.org.
##一些典型的门控方法用例*`MINDESSENT`:发现两个主要人群之间的最小密度切割点。可以限制在数据的范围内。*`Cytokine / Tailegate`:识别稀有群体的罕见的人口。估计结局的第2个衍生物。可以调整平滑和宽容。*`flowclust`:1d,2d或n维聚类。通常对淋巴细胞有用。可以在跨样品之前推断数据驱动的实验室贝叶。*`单身称为:适合近似于散射区域Vs高度或宽度的典型单线栅极的模型。*“边界”:过滤出边界事件。 * `refGate`: A *reference* gate. Used to refer to a gate defined elsewhere in the hierarchy, the data-driven threshold can be reused. Similar to *"back-gating"*. * `flowDensity`: Supported via plugin, density-based gating from our good friends at the BC Cancer Agency. * Other methods: `rangeGate`, `quadrantGate`, `quantileGate`
www.biocondcutor.org
##轮到您的“/ data / apencyto`”,您将找到数据和一些R代码以在这些幻灯片中重现分析。从那里开始。- 将代码复制到您的主目录并从那里工作。- 设置路径以写入您的主目录。- 加载工作区并重现手动门控。- 克隆门控设置并清除手动门。- 加载模板并运行自动门控。- 开辟了OpencyTopracticalComponent文件并通过此工作。- 与Gating参数一起玩,看看它们有什么影响。## Gating方法示例 - 基于在1-D密度估计中分离两个主要群体的最小密度,Impleity {.smaller} Infers Infers Infers Infers Infers基于分离两个主要群体的栅极阈值。 - Open the `csv` template in a new window, the definition for the live/dead gate is: `viable, viable-, singlet, AViD, mindensity, gate_range=c(500,1000)` `gate_range` restricts the data region where the method searches for a cutpoint. `adjust` alters the smoothing (larger value = more smoothing, less *bumpy*) - Play with these parameters in the gating template. - What happens if you remove the `gate_range` parameter? - What happens if you set `adjust=0.75`? ```{r echo=TRUE,eval=FALSE} # Work with a subset of the data auto_subset<-auto_gating[1:20] # first 20 samples # Make changes in the template. SAVE it, then re-load it in R. gt<-gatingTemplate("data/template/gt_080.csv") # Remove the old gate from auto_gating Rm("viable",auto_subset) # Gate with the new template, stop after the viable gate (which is nonNeutro) gating(gt,auto_subset,stop.at="nonNeutro") # View the new result plotGate(auto_subset,"viable") ``` ## Where we've used OpenCyto 研究100gb的数据。 没有一个需要超过两个小时的运行时间。*贷款人标准化染色面板(FlowCAP III)的介绍* HVTN * ICS数据的许多大型临床试验ICS数据集 - MTB感染与健康受试者。* Cytof组合细胞因子数据*多官能T细胞亚群的详尽浇注。事件级数据和单元格群体成员可以轻松与合作者共享。快速推动下游分析。* Mimosa(PMC3862207)*指南针(http://rglab.github.org/compass/) 我们通常很友好,可以帮助你开始##摘要* a 框架用于标准化分析管道。* 灵活的支持通过不同的门方法 插件*例如 流动度是支持的。* 可重复使用的模板和代码*工作完成前面进行设置。*完全可重复和 *目标,数据驱动闸门*。* opencyto简化了*数据导入(来自flowjo工作区的原始数据和/或手动门控)*预处理*数据操作(与小区子集交互)*绘图和可视化*提取报告*下游分析的统计数据与R的工具的全部电力。
www.biocondion.org.
##在线资源{。大}* OpenCyto网站:http://opencyto.org *文档*可再生的例子和数据*我们的Github库:http://github.org/RGLab/OpenCyto *这些幻灯片:http://gfinak.github.io/OpenCytoTutorial *代码:http://www.github.com/gfinak/OpenCytoTutorial * BioConductor网站://www.andersvercelli.com
www.biocondion.org.
# #确认{。列2 .lessbigger} @ Fred Hutchinson癌症研究中心*** Raphael Gottardo ** ** Mike Jiang ** **雅各布Frelinger ** * John Ramey * *合作者***Steve De Rosa** @ HIV疫苗试验网络**Adam Asare** @免疫耐受网络**Evan Newell** @新加坡免疫网络**Mark Davis** @ Stanford **Adam Triester** @ TreeStar Inc. **Jay Almarode** @ TreeStar Inc. *资金*美国国立卫生研究院人类免疫项目联盟