Mercurial > repos > azomics > flowsom_tree
view FlowSOMGenerateTree.R @ 0:54a25f1139b4 draft
"planemo upload for repository https://github.com/ImmPortDB/immport-galaxy-tools/tree/master/flowtools/flowsom_tree commit b183455dde52e5b870fe898df9863b924e5370bd"
author | azomics |
---|---|
date | Tue, 23 Jun 2020 12:46:08 -0400 |
parents | |
children | 0efc47dba930 |
line wrap: on
line source
#!/usr/bin/Rscript # Module for Galaxy # Generates FlowSOM reference tree # with FlowSOM AggregateFlowFrames ###################################################################### # Copyright (c) 2017 Northrop Grumman. # All rights reserved. ###################################################################### # # Version 1 # Cristel Thomas # # library(FlowSOM) library(flowCore) generateTree <- function(ff, output="", columns=list(), cluster=10, xgrid=10, ygrid=10,plot="", plot_pdf=FALSE, mplot="", flag_def=T, table="", mtable="", flag_meta=FALSE, user_seed=42, flag_nodesize=F) { # check default -- if def get all except FSC/SSC # also check nb of markers/channels and indices markers <- colnames(ff) print_markers <- as.vector(pData(parameters(ff))$desc) # Update print_markers if the $P?S not in the FCS file for (i in 1:length(print_markers)) { if (is.na(print_markers[i])) { print_markers[i] <- markers[i] } } if (flag_def){ channels_to_exclude <- c(grep(markers, pattern="FSC"), grep(markers, pattern="SSC"), grep(markers, pattern="Time")) columns <- markers[-channels_to_exclude] } set.seed(user_seed) fs <- ReadInput(ff, compensate=F, transform=F, scale=T) fs <- BuildSOM(fs, colsToUse = columns, xdim=xgrid, ydim=ygrid) fst <- BuildMST(fs, tSNE=T) if (!mplot==""){ pdf(mplot, useDingbats=FALSE, onefile=TRUE) for (marker in markers){ PlotMarker(fst, marker) } dev.off() } metaC <- metaClustering_consensus(fst$map$codes, k=cluster, seed=user_seed) if (!plot==""){ if (flag_nodesize){ fst <- UpdateNodeSize(fst, reset=TRUE) fst$MST$size <- fst$MST$size/2 } if (plot_pdf) { pdf(plot, useDingbats=FALSE) PlotStars(fst, backgroundValues = as.factor(metaC)) dev.off() } else { png(plot, type="cairo", height=800, width=800) PlotStars(fst, backgroundValues = as.factor(metaC)) dev.off() } } if (!table==""){ m <- matrix(0,nrow=nrow(ff),ncol=1) s <- seq_len(nrow(ff)) if (flag_meta){ m[s,] <- metaC[fst$map$mapping[,1]] } else { m[s,] <- fst$map$mapping[,1] } colnames(m) <- "FlowSOM" ff <- cbind2(ff,m) out <- exprs(ff) print_markers <- append(print_markers, "Population") colnames(out) <- print_markers write.table(out, file=table, quote=F, row.names=F, col.names=T, sep='\t', append=F) nb_nodes <- max(fst$map$mapping[,1]) mm <- matrix(0, nrow=nb_nodes, ncol=2) ss <- seq_len(nb_nodes) mm[,1]<- as.character(ss) mm[ss,2]<- as.character(metaC) colnames(mm) <- c("Node", "Meta-Cluster") write.table(mm, file=mtable, quote=F, row.names=F, col.names=T, sep='\t', append=F) } saveRDS(fst, file = output) } flowFrameOrFCS <- function(input, output="", columns=list(),cluster=10,xgrid=10, ygrid=10,plot="",plot_pdf=FALSE, mplot="", default=T, table="", mtable="", flag_meta=FALSE, user_seed=42, nodesize=FALSE) { isValid <- F is_fcs <- F is_ff <- F ff <- "" tryCatch({ is_fcs <- isFCSfile(input) }, error = function(ex) { print(paste(ex)) }) if (!is_fcs){ tryCatch({ ff <- readRDS(input) is_ff <- T }, error = function(ex) { print(paste(ex)) }) } else { ff <- read.FCS(input, transformation=FALSE) } if (!is_ff && !is_fcs) { quit(save = "no", status = 10, runLast = FALSE) } else { for (cols in columns){ if (cols > length(colnames(ff))){ quit(save = "no", status = 12, runLast = FALSE) } } generateTree(ff, output, columns, cluster, xgrid, ygrid, plot, plot_pdf, mplot, default, table, mtable, flag_meta, user_seed, nodesize) } } args <- commandArgs(trailingOnly = TRUE) flag_default <- FALSE columns <- list() if (args[3] == "" || args[3] == "i.e.:1,2,5") { flag_default <- TRUE } else { #rm last X if it's there columns <- as.numeric(strsplit(args[3], ",")[[1]]) for (col in columns){ if (is.na(col)){ quit(save = "no", status = 11, runLast = FALSE) } } } cluster <- 10 if (!args[4] == ""){ if (!is.na(as.integer(args[4]))){ cluster <- as.integer(args[4]) } else { quit(save = "no", status = 13, runLast = FALSE) } } xgrid <- 10 if (!args[5] == ""){ if (!is.na(as.integer(args[5]))){ cluster <- as.integer(args[5]) } else { quit(save = "no", status = 14, runLast = FALSE) } } ygrid <- 10 if (!args[6] == ""){ if (!is.na(as.integer(args[6]))){ cluster <- as.integer(args[6]) } else { quit(save = "no", status = 14, runLast = FALSE) } } seed <- 42 if (!args[7]==""){ if (!is.na(as.integer(args[7]))){ seed <- as.integer(args[7]) } else { quit(save = "no", status = 15, runLast = FALSE) } } plot <- "" mplot <- "" plot_pdf <- FALSE table <- "" mtable <- "" flag_meta <- FALSE nodesize <- FALSE nb_args <- length(args) if (nb_args==16) { plot <- args[8] if (args[9]=='PDF') { plot_pdf <- TRUE } nodesize <- args[10] mplot <- args[11] table <- args[13] mtable <- args[14] if (args[12]=='meta'){ flag_meta<-TRUE } } else if (nb_args==15){ plot <- args[8] if (args[9]=='PDF') { plot_pdf <- TRUE } nodesize <- args[10] table <- args[12] mtable <- args[13] if (args[11]=='meta'){ flag_meta<-TRUE } } else if (nb_args==13) { mplot <- args[8] table <- args[10] mtable <- args[11] if (args[9]=='meta'){ flag_meta<-TRUE } } else if (nb_args==12) { table <- args[9] mtable <- args[10] if (args[8]=='meta'){ flag_meta<-TRUE } } else if (nb_args==11) { plot <- args[8] if (args[9]=='PDF') { plot_pdf <- TRUE } nodesize <- args[10] mplot <- args[11] } else if (nb_args==10) { plot <- args[8] if (args[9]=='PDF') { plot_pdf <- TRUE } nodesize <- args[10] } else if (nb_args==8){ mplot <- args[8] } flowFrameOrFCS(args[1], args[2], columns, cluster, xgrid, ygrid, plot, plot_pdf, mplot, flag_default, table, mtable, flag_meta, seed, nodesize)