0
|
1 # Density Plot Module for Galaxy
|
|
2 # FlowDensity
|
|
3 ######################################################################
|
|
4 # Copyright (c) 2016 Northrop Grumman.
|
|
5 # All rights reserved.
|
|
6 ######################################################################
|
|
7 #
|
|
8 # Version 1
|
|
9 # Cristel Thomas
|
|
10 #
|
|
11 #
|
|
12
|
|
13 library(flowCore)
|
|
14 library(flowDensity)
|
|
15
|
|
16 generateGraph <- function(input, channels, output, plot_default, flag_pdf, pdf_out) {
|
|
17 fcs <- read.FCS(input, transformation=F)
|
|
18 ## marker names
|
|
19 markers <- colnames(fcs)
|
|
20 print_markers <- as.vector(pData(parameters(fcs))$desc)
|
|
21 # Update print_markers if the $P?S not in the FCS file
|
|
22 for (i in 1:length(print_markers)) {
|
|
23 if (is.na(print_markers[i])) {
|
|
24 print_markers[i] <- markers[i]
|
|
25 }
|
|
26 }
|
|
27
|
|
28 if (plot_default) {
|
|
29 channels <- c(grep(colnames(fcs), pattern="Forward scatter", ignore.case=TRUE),
|
|
30 grep(colnames(fcs), pattern="Side scatter", ignore.case=TRUE))
|
|
31 if (length(channels) == 0){
|
|
32 channels <- c(grep(colnames(fcs), pattern="FSC"),
|
|
33 grep(colnames(fcs), pattern="SSC"))
|
|
34 if (length(channels) > 2) {
|
|
35 #get first FSC and corresponding SSC
|
|
36 channels <- c(grep(colnames(fcs), pattern="FSC-A"),
|
|
37 grep(colnames(fcs), pattern="SSC-A"))
|
|
38 if (length(channels) == 0) {
|
|
39 channels <- c(grep(colnames(fcs), pattern="FSC-H"),
|
|
40 grep(colnames(fcs), pattern="SSC-H"))
|
|
41 if (length(channels) == 0) {
|
|
42 channels <- c(grep(colnames(fcs), pattern="FSC-W"),
|
|
43 grep(colnames(fcs), pattern="SSC-W"))
|
|
44 }
|
|
45 }
|
|
46 }
|
|
47 }
|
|
48 if (length(channels) == 0) {
|
|
49 warning('No forward/side scatter channels found, no plots will be generated.')
|
|
50 quit(save = "no", status = 10, runLast = FALSE)
|
|
51 }
|
|
52 }
|
|
53
|
|
54 nb_markers <- length(channels)
|
|
55 for (j in nb_markers) {
|
|
56 if (channels[j] > length(markers)){
|
|
57 warning('Please indicate markers between 1 and ', length(markers))
|
|
58 quit(save = "no", status = 10, runLast = FALSE)
|
|
59 }
|
|
60 }
|
|
61 png(output, type="cairo", height=600, width=600)
|
|
62 par(mfrow=c(2,2))
|
|
63 for (m in 1:(nb_markers - 1)) {
|
|
64 for (n in (m+1):nb_markers) {
|
|
65 plotDens(fcs, c(channels[m],channels[n]), xlab = print_markers[channels[m]], ylab = print_markers[channels[n]])
|
|
66 }
|
|
67 }
|
|
68 dev.off()
|
|
69
|
|
70 if (flag_pdf) {
|
|
71 pdf(pdf_out, useDingbats=FALSE, onefile=TRUE)
|
|
72 par(mfrow=c(2,2))
|
|
73 for (m in 1:(nb_markers - 1)) {
|
|
74 for (n in (m+1):nb_markers) {
|
|
75 plotDens(fcs, c(channels[m],channels[n]), xlab = print_markers[channels[m]], ylab = print_markers[channels[n]])
|
|
76 }
|
|
77 }
|
|
78 dev.off()
|
|
79 }
|
|
80 }
|
|
81
|
|
82 checkFCS <- function(input_file, channels, output_file, plot_default, flag_pdf, pdf_out) {
|
|
83 isValid <- F
|
|
84 # Check file beginning matches FCS standard
|
|
85 tryCatch({
|
|
86 isValid = isFCSfile(input_file)
|
|
87 }, error = function(ex) {
|
|
88 print (paste(" ! Error in isFCSfile", ex))
|
|
89 })
|
|
90
|
|
91 if (isValid) {
|
|
92 generateGraph(input_file, channels, output_file, plot_default, flag_pdf, pdf_out)
|
|
93 } else {
|
|
94 print (paste(input_file, "does not meet FCS standard"))
|
|
95 }
|
|
96 }
|
|
97
|
|
98 args <- commandArgs(trailingOnly = TRUE)
|
|
99 channels <- ""
|
|
100 flag_default <- FALSE
|
|
101 flag_pdf <- FALSE
|
|
102 pdf_output <- ""
|
|
103
|
|
104 if (args[3]=="None") {
|
|
105 flag_default <- TRUE
|
|
106 } else {
|
|
107 if (args[3] == "i.e.:1,3,4"){
|
|
108 flag_default <- TRUE
|
|
109 } else {
|
|
110 channels <- as.numeric(strsplit(args[3], ",")[[1]])
|
|
111 for (channel in channels){
|
|
112 if (is.na(channel)){
|
|
113 quit(save = "no", status = 11, runLast = FALSE)
|
|
114 }
|
|
115 }
|
|
116 if (length(channels) == 1){
|
|
117 warning('Please indicate more than one marker to plot.')
|
|
118 quit(save = "no", status = 10, runLast = FALSE)
|
|
119 }
|
|
120 }
|
|
121 }
|
|
122
|
|
123 if (args[5] == "TRUE"){
|
|
124 pdf_output <- args[6]
|
|
125 flag_pdf <- TRUE
|
|
126 }
|
|
127
|
|
128 checkFCS(args[2], channels, args[4], flag_default, flag_pdf, pdf_output)
|