## ---- Framework_figure,echo = false,figncap ='GovencyTo Gating框架是R / Biocumondlase的集合,用于容易地构建可再现的流量数据分析管道。',消息= false,fig.Align ='Center',fig.width = 8,缓存= true ---- require(png)需要(grid)img <-readpng(“资源/ framework.png”)grid.raster(img)## ---- eval =错误的 - - - - - - - - - - - - - - - - - - - - - - - - ---------- ##要求(Biocinstaller)## Bioclite(“Apencyto”)## ---- eval = False ---------------------------------------------------- ##要求(devtools)##包-c(“rglab / flowstats”,“rglab / flowcore”,“rglab / flowviz”,“rglab / ncdfflow”,“rglab / flowworkspace”,“rglab / flowworkspace”,“rglab / apencyto”)## install_github(包,quick = true)##---- libs,echo = false,message = false,警告= false -----------------------索引(Apenceto)要求(数据.Table)要求(Reshape2)要求(Clue)要求(GGPLot2)## ----回声= 1,结果='标记',结果='隐藏'------------------------------ WS <-OPENWORKSPACE(“数据/工作空间/ 080批量0882.xml“)ws ## ---- parseworkssspace_echo,echo = true,eval = false -------------------------- ## goting_set<-parseWorkspace(WS,Name =“0882样本”,Path =“Data / FCS /”,ISNCDF = True)## ---- ParseWorkspace,Echo = False,结果=“隐藏”,eval = True ---------------- - 如果(!file.exists(“data / manual_gating /”))){gating_set <-parseworkspace(ws,name =“0882样本”,path =“数据/fcs /“,isncdf = true,overwrite = true)save_gs(gating_set,path =”data / manual_gating“)} else {gating_set <-load_gs(”data / manual_gating /“)} ## ---- eval = false,echo = true,结果='hide'------------------------------ ## save_gs(gating_set,path =“数据/手动”)## ---- Clean_Manual,Echo = False,结果=“隐藏”,警告= False,Message = False ---- RM(“不是4 +”,Gating_set)##-vis_manual_gates,echo = true,eval = true,结果='hide',cache = false,message = false,warning = false,fign.align ='center',fig.cap ='手动门的布局' -- 绘图(Gating_set [[1]],xbin = 16,gpar = list(ncol = 5))#binning for更快的绘图## ---- plot_manual_tree,echo = 2,结果=“隐藏”,消息= false,警告= false,fig.cap =''----绘图(gating_set)## ----关键字,回声= c(2,3,4,8,9,10),eval = true ------------------------------ GetKeywords <-Function(GS,KV){R <-_AS.DATA.FRAME(DO.CALL(Cbind,Lapply(kV,函数(k){关键字(gs,k)[1]})))data.table :: setnames(r,r,'$ fil“,”名称“)r} wesponse_vars <-c(”$FIL","Stim","Sample Order","EXPERIMENT NAME") #relevant keywords pd<-data.table(getKeywords(gating_set,keyword_vars)) #extract relevant keywords to a data table annotations<-data.table:::fread("data/workspace/pd_submit.csv") # read the annotations from flowrepository setnames(annotations,"File Name","name") setkey(annotations,"name") setkey(pd,"name") pd<-data.frame(annotations[pd]) #data.table style merge setnames(pd,c("Timepoint","Individual"),c("VISITNO","PTID")) pData(gating_set)<-pd #annotate gating_subset<-gating_set[subset(pd,!is.na(Condition))$name] #subset only the GAG and negctrl ## ----keywords_tbl,eval=TRUE,echo=FALSE,results='asis',cache=FALSE-------- knitr::kable(head(subset(na.omit(pd)[,c(1:5)],PTID%in%"080-17"),4),row.names = FALSE) ## ----copy_and_save,eval=FALSE,message=FALSE,warining=FALSE,results='hide'---- ## auto_gating<-clone(gating_subset) ## Rm("S",auto_gating) ## save_gs(auto_gating,path="data/autogating",overwrite=TRUE) ## ----load_empty,eval=TRUE,echo=FALSE,results='hide',message=FALSE,warning=FALSE---- if(!file.exists("data/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/") } ## ----echo=TRUE,eval=TRUE------------------------------------------------- list.files("data/autogating") ## ----read_template,echo=FALSE,results='asis',cache=FALSE----------------- template<-read.csv("data//template//gt_080.csv",as.is=FALSE,allowEscapes=TRUE,stringsAsFactors=FALSE) template$collapseDataForGating[is.na(template$collapseDataForGating)]<-" " Kmisc::htmlTable(data.frame(template)[1:8,c(1:6,8,9)],attr="width=100%") ## ----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,fig.cap=''---- gt<-gatingTemplate("data/template/gt_080.csv") plot(gt) ## ----gate_subset,echo=TRUE,message=FALSE,warning=FALSE,results='hide',eval=FALSE,fig.cap=''---- ## gating(x = gt, y = auto_gating) ## ## Some output.. ## plot(auto_gating) ## ----plot_autogate_tree,echo=FALSE,message=FALSE,warning=FALSE,fig.align='center',out.width=600,results='hide'---- if(length(getNodes(auto_gating))<1){ gating(x = gt, y = auto_gating) save_gs(auto_gating,path="data//autogating",overwrite = TRUE) } setNode(auto_gating,"nonNeutro",FALSE) setNode(auto_gating,"DebrisGate",FALSE) setNode(auto_gating,"cd4/cd57-/gzb_gate",FALSE) setNode(auto_gating,"cd4/cd57-/prf_gate",FALSE) setNode(auto_gating,"cd8/cd57-/gzb_gate",FALSE) setNode(auto_gating,"cd8/cd57-",FALSE) setNode(auto_gating,"cd4/cd57-",FALSE) setNode(auto_gating,"cd8/cd57-/prf_gate",FALSE) setNode(auto_gating,"cd4neg",FALSE) setNode(auto_gating,"cd4pos",FALSE) setNode(auto_gating,"cd8+",FALSE) setNode(auto_gating,"cd8-",FALSE) plot(auto_gating) ## ----compare_to_manual,echo=TRUE,fig.cap='Automated and Manual Gates for CD4/CD8',cache=FALSE,fig.align='center',fig.width=5,fig.height=2.5,out.width=600---- p1<-plotGate(auto_gating[[1]],c("cd8","cd4"),arrange=FALSE, projections=list("cd4"=c(x="CD8",y="CD4"),"cd8"=c(x="CD8",y="CD4")), main="Automated Gate",path=2)[[1]] p2<-plotGate(gating_subset[[1]],c("8+","4+"), projections=list("4+"=c(x="CD8",y="CD4"),"8+"=c(x="CD8",y="CD4")), arrange=FALSE,main="Manual Gate",path=2)[[1]] grid.arrange(arrangeGrob(p1,p2,ncol=2)) ## ----extract_stats,echo=FALSE,message=FALSE, warning=FALSE,error=FALSE,results='hide',fig.cap='Comparison of Manual vs Automated Gating Cell Subset Counts',fig.width=12,fig.height=5,cache=FALSE,fig.align='center',out.width=800---- auto_stats<-getPopStats(auto_gating,statistic="count") manual_stats<-getPopStats(gating_subset,statistic="count") gates_to_remove<-rownames(manual_stats)[which(sapply(basename(rownames(manual_stats)),function(x)length(which(strsplit(x,"")[[1]]=="+"))>1))] gates_to_remove<-c(gates_to_remove,rownames(manual_stats)[which(sapply(basename(rownames(manual_stats)),function(x)length(which(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 in gates_to_remove){ try(Rm(i,gating_subset),silent=TRUE) } .getCounts<-function(stat="count"){ auto_stats<-getPopStats(auto_gating,statistic=stat) manual_stats<-getPopStats(gating_subset,statistic=stat) #combine melted_auto<-melt(auto_stats) melted_manual<-melt(manual_stats) setnames(melted_manual,c("population","file","counts")) setnames(melted_auto,c("population","file","counts")) melted_auto<-subset(melted_auto,!population%in%c("boundary","root")) melted_auto$population<-factor(melted_auto$population) melted_manual<-subset(melted_manual,!population%in%c("4+/57-","4+/Granzyme B-","4+/IFN+IL2-","4+/IFN-IL2+","4+/IFN\\IL2","8+/57-","8+/Granzyme B-","8+/IFN+IL2-", "8+/IFN-IL2+" ,"8+/IFN\\IL2","root")) melted_manual$population<-factor(melted_manual$population) D<-adist((levels(melted_auto$population)),(levels(melted_manual$population)),ignore.case=TRUE,partial=FALSE) D<-solve_LSAP(t(D)) data.frame(levels(melted_auto$population)[D],levels(melted_manual$population)) levels(melted_auto$population)[D]<-levels(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")) ## ----extract_stats_echo,echo=TRUE,eval=FALSE----------------------------- ## #Extract stats ## auto_stats<-getPopStats(auto_gating,statistic="count") ## manual_stats<-getPopStats(gating_subset,statistic="count") ## ----example_Perforin,echo=FALSE,eval=TRUE,fig.cap='Automated and Manual Gating of Perforin/CD8',cache=FALSE,fig.align='center',fig.width=7.5,fig.height=3.5,out.width=500---- p1<-plotGate(auto_gating[[sampleNames(gating_subset)[7]]],"cd8/Prf",default.y=" “,xbin = 256,边缘= false,path = 2,排列= false,main =”自动“,xlab = list(cex = 1.5),ylab = list(cex = 1.5),scales = list(cex = 1.5),par.strip.text = list(cex = 1.5))[[1]] p2 <-plotgate(gating_subset [[samplenames(gating_subset)[7]]],“8 + / perforin +”,default.y =“ “,xbin = 256,边缘= false,path = 2,xlab = list(cex = 1.5),ylab = list(cex = 1.5),scales = list(cex = 1.5),par.strip.text = list(cex= 1.5),排列= false,main =“手动”)[[1]] grid.arrange(p1,p2,ncol = 2)## ---- example_derivative_gate,echo = false,eval = true,fig.align='center',out.width = 500,figthth = 7.5,fig.height = 3.5 ---- fr <-getdata(auto_gating [[7]],“CD8 / CD57-”)切割<-tailgate(FR,Channel =“ “,filter_id =”perforin_gate“)DENS <-DENTY(EXPRS(FR [,” “]),调整= 2)second_deriv < - diff(符号(diff(dent $ y)))哪个_maxima < - 哪个(second_deriv == -2)+ 1 when_maxima < - findinginterval(dens $ x [that_maxima],范围(exprs(fr [,' “])))== 1]哪个_maxima < - 哪个_maxima [drens_maxima],decenting = true)] peaks < - dens $ x [that_maxima] deriv_out < - apenceto ::。deriv_dentions(x = exprs(fr [,“ “),调整= 2,德国衍生= 1)par(mfrow = c(1,2))图(DENS,main =”密度“)aline(v =峰)abline(v = cut @ min,col =”红色“)绘图(deriv_out,type =”l“,main =”first arivative“,xlab =”x“,ylab =”密度“)abline(v = cut @ min,col =”红色“)abline(v =峰值)## ---- example_tnfa,echo = false,eval = true,cache = false,tim.cap =“tfna的自动和手动门控”,fig.Align ='Center'---- P1 <-Plotgate(auto_gating [[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,path = 2,xlab = list(cex = 1.1),ylab = list(cex = 1.1),scales = list(cex = 1.1),par.strip.text = list(cex= 1.1),排列= false,main =“手动”)do.call(grid.arrange,c(p1,p2,ncol = 2))## ---- getData,echo = true,eval = false ------------------------------------------------------------------g)## ----绘图,echo = true,eval = false ---------------------------------------------------- ## plotgate(auto_gating,“cd3”)## ----子集,echo = true,eval = false ------------------------------------------ ## first_ten_fcs_files <-auto_gating [1:10] ## ---- listgtmethods,echo = true,eval = false ------------------------------ ## listgtmethods()## ---- regrart_plugin,echo = true,eval =false ----------------------------- ## registerPlugins(MyFunction,methodname,依赖关系,“预处理”|“gating”)## ---- gen_template,echo = true,eval = false,结果='Asis'------------------ ## templategen(goting_subset [[1])## ---- Gen_Template_Noecho,Echo = False,Eval = True,结果='ASIS'------------- HD <-HED(DATA.FRAME(模板)gen(gating_subset [[1]]),7)HD [是.NA(HD)] < - “”kmisc :: htmltable(hd)## ---- echo = true,equ = false ----------------------------------------- ###########--数据子集## auto_subset <-auto_gating [1:20]#First 20 Samples ####在模板中进行更改。保存,然后在R. ## gt <-gatingTemplate(“数据/模板/ gt_080.csv”中重新加载它)###从auto_gating ## RM(“可行”,auto_subset)####与新模板的门,停止在可行的门后(是非全日子)## gating(gt,auto_subset,stop.at =“nonneutro”)###查看新结果## plotgate(auto_subset,“可行”)