# HG changeset patch # User azomics # Date 1592872509 14400 # Node ID 8e568997abdaa12232e15a900ce22c71e79e24e4 "planemo upload for repository https://github.com/ImmPortDB/immport-galaxy-tools/tree/master/flowtools/fcs_merge_downsample commit 2fe0269eaff92916ca51729a7ca8d2017f65f89f" diff -r 000000000000 -r 8e568997abda FCSMergeDownsample.R --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FCSMergeDownsample.R Mon Jun 22 20:35:09 2020 -0400 @@ -0,0 +1,115 @@ +#!/usr/bin/Rscript +# Aggregate FCS files Module for Galaxy +# with FlowSOM AggregateFlowFrames +###################################################################### +# Copyright (c) 2017 Northrop Grumman. +# All rights reserved. +###################################################################### +# +# Version 1 +# Cristel Thomas +# +# +library(FlowSOM) +library(flowCore) + +downsampleMergeFCS <- function(fcs_files, nb_cells, output="", flag_fcs=FALSE) { + ff <- AggregateFlowFrames(fcs_files, nb_cells, writeOutput = FALSE) + n <- length(colnames(ff)) - 2 + exprs(ff) <- exprs(ff)[,1:n] + if (flag_fcs) { + write.FCS(ff, output) + } else { + saveRDS(ff, file=output) + } +} + +checkFCSfiles <- function(fcsfiles, ds_factor=0.1, out_file ="", + flag_fcs=FALSE) { + isValid <- F + nb_events <- 0 + markerCheck <- T + + for (i in 1:length(fcsfiles)){ + is_file_valid <- F + tryCatch({ + fcs <- read.FCS(fcsfiles[i], transformation=FALSE) + is_file_valid <- T + nb_events <- nb_events + as.numeric(fcs@description$`$TOT`) + }, error = function(ex) { + print(paste(ex)) + }) + if (is_file_valid){ + if (i == 1) { + m1 <- as.vector(pData(parameters(fcs))$desc) + } else { + m2 <- as.vector(pData(parameters(fcs))$desc) + if (is.na(all(m1==m2))) { + mm1 <- is.na(m1) + mm2 <- is.na(m2) + if (all(mm1==mm2)){ + if (!all(m1==m2, na.rm=TRUE)){ + markerCheck <- F + } + } else { + markerCheck <- F + } + } else if (!all(m1==m2)) { + markerCheck <- F + } + } + } else { + quit(save = "no", status = 10, runLast = FALSE) + } + } + + if (markerCheck) { + isValid <- T + } else { + quit(save = "no", status = 12, runLast = FALSE) + } + + ## translate ds_factor to nb of events + nb_cell <- floor(ds_factor*nb_events) + + if (isValid) { + downsampleMergeFCS(fcsfiles, nb_cell, out_file, flag_fcs) + } else { + quit(save = "no", status = 10, runLast = FALSE) + } +} + +args <- commandArgs(trailingOnly = TRUE) +flag_fcs <- FALSE + +if (args[2] == "FCS"){ + flag_fcs <- TRUE +} + +if (args[3] == "" || args[3] == "i.e.:0.1 or 10X") { + factor <- 0.1 +} else { + #rm last X if it's there + ds <- gsub("X", "", args[3]) + if (!is.na(as.numeric(ds))) { + factor <- as.numeric(ds) + if (factor > 1 && factor <= 100) { + factor <- as.numeric(ds) / 100 + } else if (factor > 100){ + quit(save = "no", status = 11, runLast = FALSE) + } + } else { + quit(save = "no", status = 11, runLast = FALSE) + } +} + +nb_files <- (length(args) - 3) +fcsfiles <- character(nb_files) +j <- 1 +## get files and file names +for (i in 4:length(args)) { + fcsfiles[[j]] <- args[i] + j <- j + 1 +} + +checkFCSfiles(fcsfiles, factor, args[1], flag_fcs) diff -r 000000000000 -r 8e568997abda FCSMergeDownsample.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FCSMergeDownsample.xml Mon Jun 22 20:35:09 2020 -0400 @@ -0,0 +1,149 @@ + + FCS files with FlowSOM + + bioconductor-flowsom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 10.1002/cyto.a.22625 + + diff -r 000000000000 -r 8e568997abda test-data/input1.fcs Binary file test-data/input1.fcs has changed diff -r 000000000000 -r 8e568997abda test-data/input2.fcs Binary file test-data/input2.fcs has changed diff -r 000000000000 -r 8e568997abda test-data/input3.fcs Binary file test-data/input3.fcs has changed diff -r 000000000000 -r 8e568997abda test-data/merge1.flowframe Binary file test-data/merge1.flowframe has changed diff -r 000000000000 -r 8e568997abda test-data/merge2.fcs Binary file test-data/merge2.fcs has changed