Mercurial > repos > immport-devteam > fcs_scatterplot
view fcs_scatterplot/getDensityPlots.R @ 0:164cd5384f1d draft
Uploaded
author | immport-devteam |
---|---|
date | Mon, 27 Feb 2017 12:52:20 -0500 |
parents | |
children |
line wrap: on
line source
# Density Plot Module for Galaxy # FlowDensity ###################################################################### # Copyright (c) 2016 Northrop Grumman. # All rights reserved. ###################################################################### # # Version 1 # Cristel Thomas # # library(flowCore) library(flowDensity) generateGraph <- function(input, channels, output, plot_default, flag_pdf, pdf_out) { fcs <- read.FCS(input, transformation=F) ## marker names markers <- colnames(fcs) print_markers <- as.vector(pData(parameters(fcs))$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 (plot_default) { channels <- c(grep(colnames(fcs), pattern="Forward scatter", ignore.case=TRUE), grep(colnames(fcs), pattern="Side scatter", ignore.case=TRUE)) if (length(channels) == 0){ channels <- c(grep(colnames(fcs), pattern="FSC"), grep(colnames(fcs), pattern="SSC")) if (length(channels) > 2) { #get first FSC and corresponding SSC channels <- c(grep(colnames(fcs), pattern="FSC-A"), grep(colnames(fcs), pattern="SSC-A")) if (length(channels) == 0) { channels <- c(grep(colnames(fcs), pattern="FSC-H"), grep(colnames(fcs), pattern="SSC-H")) if (length(channels) == 0) { channels <- c(grep(colnames(fcs), pattern="FSC-W"), grep(colnames(fcs), pattern="SSC-W")) } } } } if (length(channels) == 0) { warning('No forward/side scatter channels found, no plots will be generated.') quit(save = "no", status = 10, runLast = FALSE) } } nb_markers <- length(channels) for (j in nb_markers) { if (channels[j] > length(markers)){ warning('Please indicate markers between 1 and ', length(markers)) quit(save = "no", status = 10, runLast = FALSE) } } png(output, type="cairo", height=600, width=600) par(mfrow=c(2,2)) for (m in 1:(nb_markers - 1)) { for (n in (m+1):nb_markers) { plotDens(fcs, c(channels[m],channels[n]), xlab = print_markers[channels[m]], ylab = print_markers[channels[n]]) } } dev.off() if (flag_pdf) { pdf(pdf_out, useDingbats=FALSE, onefile=TRUE) par(mfrow=c(2,2)) for (m in 1:(nb_markers - 1)) { for (n in (m+1):nb_markers) { plotDens(fcs, c(channels[m],channels[n]), xlab = print_markers[channels[m]], ylab = print_markers[channels[n]]) } } dev.off() } } checkFCS <- function(input_file, channels, output_file, plot_default, flag_pdf, pdf_out) { isValid <- F # Check file beginning matches FCS standard tryCatch({ isValid = isFCSfile(input_file) }, error = function(ex) { print (paste(" ! Error in isFCSfile", ex)) }) if (isValid) { generateGraph(input_file, channels, output_file, plot_default, flag_pdf, pdf_out) } else { print (paste(input_file, "does not meet FCS standard")) } } args <- commandArgs(trailingOnly = TRUE) channels <- "" flag_default <- FALSE flag_pdf <- FALSE pdf_output <- "" if (args[3]=="None") { flag_default <- TRUE } else { if (args[3] == "i.e.:1,3,4"){ flag_default <- TRUE } else { channels <- as.numeric(strsplit(args[3], ",")[[1]]) for (channel in channels){ if (is.na(channel)){ quit(save = "no", status = 11, runLast = FALSE) } } if (length(channels) == 1){ warning('Please indicate more than one marker to plot.') quit(save = "no", status = 10, runLast = FALSE) } } } if (args[5] == "TRUE"){ pdf_output <- args[6] flag_pdf <- TRUE } checkFCS(args[2], channels, args[4], flag_default, flag_pdf, pdf_output)