# HG changeset patch
# User azomics
# Date 1592861166 14400
# Node ID 99bf034c674d35ccc7bd0d5a691bc64c36f3468b
# Parent 8e10184368a0e8e9a8c00a5efe5619f81cf31e8e
"planemo upload for repository https://github.com/ImmPortDB/immport-galaxy-tools/tree/master/flowtools/convert_fcs_to_text commit 5ac9759a4f1850b200cd7a301e6662ef8adca55d"
diff -r 8e10184368a0 -r 99bf034c674d FCSConvert.R
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/FCSConvert.R Mon Jun 22 17:26:06 2020 -0400
@@ -0,0 +1,151 @@
+#!/usr/bin/env Rscript
+# ImmPort FCSConvert
+######################################################################
+# Copyright (c) 2016 Northrop Grumman.
+# All rights reserved.
+######################################################################
+#
+# Converts the FCS file to text without transformaton
+# To run in R
+# 1) library(flowCore)
+# 2) source("FCSConvert.R")
+# 3) transformFCS("filename")
+#
+# Version 1.4.1
+# March 2016 -- added lines to run directly from command line
+#
+
+library(flowCore)
+
+convertFCS <- function(fcs,compensate=FALSE,debug=FALSE) {
+ # Check file type and FCS version
+ if (class(fcs)[1] != "flowFrame") {
+ print("convertFCS requires flowFrame object as input")
+ return(FALSE)
+ }
+
+ keywords <- keyword(fcs)
+ 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 (debug) {
+ print("****Inside convertFCS")
+ print(paste(" FCS version:", keywords$FCSversion))
+ print(paste(" DATATYPE:", keywords['$DATATYPE']))
+ }
+
+ if (keywords$FCSversion == "2" ||
+ keywords$FCSversion == "3" ||
+ keywords$FCSversion == "3.1" ) {
+ datatype = unlist(keywords['$DATATYPE'])
+ if (datatype == 'F') {
+ # Apply compensation if available and requested
+ spill <- keyword(fcs)$SPILL
+ if (is.null(spill) == FALSE && compensate == TRUE) {
+ if (debug) {
+ print("Attempting compensation")
+ }
+ tryCatch({ fcs = compensate(fcs, spill) },
+ error = function(ex) { str(ex); })
+ }
+ # Process fcs expression data, using transformation
+ # based on category of the marker.
+ fcs_exprs <- exprs(fcs)
+ colnames(fcs_exprs) <- print_markers
+ } else if (datatype == 'I') {
+ fcs_exprs <- exprs(fcs)
+ colnames(fcs_exprs) = print_markers
+ } else {
+ print(paste("Data type", datatype, "in FCS 3 is not supported"))
+ fcs_exprs <- FALSE
+ }
+ } else {
+ print(paste("FCS version", keyword(fcs)$FCSversion, "is not supported"))
+ fcs_exprs <- FALSE
+ }
+ fcs_exprs
+}
+
+
+#
+# Starting function for processing a FCS file
+#
+processFCSFile <- function(input_file, output_file="",
+ keyword_file="",compensate=FALSE, debug=FALSE) {
+
+ #
+ # Generate the file names for the output_file and keyword_file
+ #
+ pieces <- unlist(strsplit(input_file, .Platform$file.sep))
+ filename <- pieces[length(pieces)]
+
+ if (output_file == "") {
+ filepieces = unlist(strsplit(filename, '\\.'))
+ #replace .fcs with .txt; append .txt if not ending in .fcs
+ if (filepieces[length(filepieces)] == 'fcs') {
+ filepieces[length(filepieces)] <- 'txt'
+ } else {
+ filepieces[length(filepieces)+1] <- 'txt'
+ }
+ output_file <- paste(filepieces, collapse = '.')
+ }
+
+ if (keyword_file == "") {
+ filepieces <- unlist(strsplit(filename, '\\.'))
+ #replace .fcs with .keyword; append .keyword if not ending in .fcs
+ if (filepieces[length(filepieces)] == 'fcs') {
+ filepieces[length(filepieces)] <- 'keyword'
+ } else {
+ filepieces[length(filepieces)+1] <- 'keyword'
+ }
+ keyword_file <- paste(filepieces, collapse = '.')
+ }
+
+ if (debug) {
+ print (paste("Converting file: ",input_file))
+ print (paste("Original file name: ",filename))
+ print (paste("Output file name: ",output_file))
+ print (paste("Keyword file name: ",keyword_file))
+ }
+ fcs <- read.FCS(input_file, transformation=F)
+ keywords <- keyword(fcs)
+ write.table(as.matrix(keywords),file=keyword_file, quote=F,
+ row.names=T, col.names=F, sep='=', append=F)
+
+ transformed_data <- convertFCS(fcs,compensate,debug)
+ write.table(transformed_data, file=output_file, quote=F,
+ row.names=F,col.names=T, sep='\t', append=F)
+}
+
+# Convert FCS file without transformation
+# @param input_file FCS file to be transformed
+# @param output_file FCS file transformed ".txt" extension
+# @param keyword_file FCS file keywords ".keywords" extension"
+# @param compensate Flag indicating whether to apply compensation
+# matrix if it exists.
+transformFCS <- function(input_file, output_file="",
+ compensate=FALSE, keyword_file="", debug=FALSE) {
+
+ isValid <- F
+ # Check file beginning matches FCS standard
+ tryCatch({
+ isValid <- isFCSfile(input_file)
+ }, error = function(ex) {
+ print (paste(" ! Error in isFCSfile", ex))
+ })
+
+ if (isValid) {
+ processFCSFile(input_file, output_file, keyword_file, compensate, debug)
+ } else {
+ print (paste(input_file, "does not meet FCS standard"))
+ }
+}
+
+args <- commandArgs(trailingOnly = TRUE)
+transformFCS(args[1], args[2], args[3])
diff -r 8e10184368a0 -r 99bf034c674d convertFCSToText.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/convertFCSToText.xml Mon Jun 22 17:26:06 2020 -0400
@@ -0,0 +1,58 @@
+
+ with no transformation
+
+ bioconductor-flowcore
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 8e10184368a0 -r 99bf034c674d convert_fcs_to_text/FCSConvert.R
--- a/convert_fcs_to_text/FCSConvert.R Mon Feb 27 12:45:51 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,150 +0,0 @@
-# ImmPort FCSConvert
-######################################################################
-# Copyright (c) 2016 Northrop Grumman.
-# All rights reserved.
-######################################################################
-#
-# Converts the FCS file to text without transformaton
-# To run in R
-# 1) library(flowCore)
-# 2) source("FCSConvert.R")
-# 3) transformFCS("filename")
-#
-# Version 1.4.1
-# March 2016 -- added lines to run directly from command line
-#
-
-library(flowCore)
-
-convertFCS <- function(fcs,compensate=FALSE,debug=FALSE) {
- # Check file type and FCS version
- if (class(fcs)[1] != "flowFrame") {
- print("convertFCS requires flowFrame object as input")
- return(FALSE)
- }
-
- keywords <- keyword(fcs)
- 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 (debug) {
- print("****Inside convertFCS")
- print(paste(" FCS version:", keywords$FCSversion))
- print(paste(" DATATYPE:", keywords['$DATATYPE']))
- }
-
- if (keywords$FCSversion == "2" ||
- keywords$FCSversion == "3" ||
- keywords$FCSversion == "3.1" ) {
- datatype = unlist(keywords['$DATATYPE'])
- if (datatype == 'F') {
- # Apply compensation if available and requested
- spill <- keyword(fcs)$SPILL
- if (is.null(spill) == FALSE && compensate == TRUE) {
- if (debug) {
- print("Attempting compensation")
- }
- tryCatch({ fcs = compensate(fcs, spill) },
- error = function(ex) { str(ex); })
- }
- # Process fcs expression data, using transformation
- # based on category of the marker.
- fcs_exprs <- exprs(fcs)
- colnames(fcs_exprs) <- print_markers
- } else if (datatype == 'I') {
- fcs_exprs <- exprs(fcs)
- colnames(fcs_exprs) = print_markers
- } else {
- print(paste("Data type", datatype, "in FCS 3 is not supported"))
- fcs_exprs <- FALSE
- }
- } else {
- print(paste("FCS version", keyword(fcs)$FCSversion, "is not supported"))
- fcs_exprs <- FALSE
- }
- fcs_exprs
-}
-
-
-#
-# Starting function for processing a FCS file
-#
-processFCSFile <- function(input_file, output_file="",
- keyword_file="",compensate=FALSE, debug=FALSE) {
-
- #
- # Generate the file names for the output_file and keyword_file
- #
- pieces <- unlist(strsplit(input_file, .Platform$file.sep))
- filename <- pieces[length(pieces)]
-
- if (output_file == "") {
- filepieces = unlist(strsplit(filename, '\\.'))
- #replace .fcs with .txt; append .txt if not ending in .fcs
- if (filepieces[length(filepieces)] == 'fcs') {
- filepieces[length(filepieces)] <- 'txt'
- } else {
- filepieces[length(filepieces)+1] <- 'txt'
- }
- output_file <- paste(filepieces, collapse = '.')
- }
-
- if (keyword_file == "") {
- filepieces <- unlist(strsplit(filename, '\\.'))
- #replace .fcs with .keyword; append .keyword if not ending in .fcs
- if (filepieces[length(filepieces)] == 'fcs') {
- filepieces[length(filepieces)] <- 'keyword'
- } else {
- filepieces[length(filepieces)+1] <- 'keyword'
- }
- keyword_file <- paste(filepieces, collapse = '.')
- }
-
- if (debug) {
- print (paste("Converting file: ",input_file))
- print (paste("Original file name: ",filename))
- print (paste("Output file name: ",output_file))
- print (paste("Keyword file name: ",keyword_file))
- }
- fcs <- read.FCS(input_file, transformation=F)
- keywords <- keyword(fcs)
- write.table(as.matrix(keywords),file=keyword_file, quote=F,
- row.names=T, col.names=F, sep='=', append=F)
-
- transformed_data <- convertFCS(fcs,compensate,debug)
- write.table(transformed_data, file=output_file, quote=F,
- row.names=F,col.names=T, sep='\t', append=F)
-}
-
-# Convert FCS file without transformation
-# @param input_file FCS file to be transformed
-# @param output_file FCS file transformed ".txt" extension
-# @param keyword_file FCS file keywords ".keywords" extension"
-# @param compensate Flag indicating whether to apply compensation
-# matrix if it exists.
-transformFCS <- function(input_file, output_file="",
- compensate=FALSE, keyword_file="", debug=FALSE) {
-
- isValid <- F
- # Check file beginning matches FCS standard
- tryCatch({
- isValid <- isFCSfile(input_file)
- }, error = function(ex) {
- print (paste(" ! Error in isFCSfile", ex))
- })
-
- if (isValid) {
- processFCSFile(input_file, output_file, keyword_file, compensate, debug)
- } else {
- print (paste(input_file, "does not meet FCS standard"))
- }
-}
-
-args <- commandArgs(trailingOnly = TRUE)
-transformFCS(args[2], args[3], args[4])
diff -r 8e10184368a0 -r 99bf034c674d convert_fcs_to_text/convertFCSToText.xml
--- a/convert_fcs_to_text/convertFCSToText.xml Mon Feb 27 12:45:51 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-
- with no transformation.
-
- r
- bioconductor-flowcore
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff -r 8e10184368a0 -r 99bf034c674d convert_fcs_to_text/test-data/nocomp.flowtext
--- a/convert_fcs_to_text/test-data/nocomp.flowtext Mon Feb 27 12:45:51 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-FSC-A FSC-H SSC-A SSC-H CD127 CD45RO LIVE CD4 CD3 HLA-DR CD25 CCR4 Time
-9081 8811 19575.009765625 18578 -76 2140.15991210938 278.460021972656 19.1100006103516 3.83999991416931 146.879989624023 125.440002441406 942.760009765625 0
-13879.5 11372 76400.875 66800 -70.6800003051758 167.959991455078 157.43000793457 80.0800018310547 51.8400001525879 83.5199966430664 -4.90000009536743 -11.7600002288818 0
-53197.5 49698 32821.8828125 30290 243.959991455078 1424.23999023438 212.940002441406 66.4300003051758 731.519958496094 822.719970703125 -8.81999969482422 40.1800003051758 0
-94011.75 85861 46558.33203125 45425 -55.4799995422363 178.599990844727 600.600036621094 103.740005493164 546.239990234375 13994.8798828125 42.1399993896484 34.2999992370605 0.100000001490116
-56965.5 51060 42377.79296875 41492 2128.76000976562 12543.0400390625 239.330001831055 9038.1201171875 2529.59985351562 2429.76000976562 620.340026855469 1694.42004394531 0.100000001490116
-102877.5 91646 74486.234375 70382 2954.8798828125 8467.919921875 346.710021972656 276.640014648438 12951.359375 9643.2001953125 353.779998779297 209.720001220703 0.200000002980232
-170482.5 135955 126331.6640625 106115 196.839996337891 4349.47998046875 1876.42004394531 1431.43005371094 919.679992675781 12119.0400390625 265.580017089844 941.780029296875 0.200000002980232
-140555.25 100224 108512.046875 72196 173.279998779297 1068.55993652344 1397.76000976562 447.720001220703 1393.919921875 24694.080078125 210.699996948242 183.260009765625 0.200000002980232
-46518.75 37218 138006.046875 113970 74.4799957275391 1400.67993164062 2420.60009765625 755.300048828125 435.839996337891 7570.56005859375 211.68000793457 242.059997558594 0.200000002980232
-11892.75 11583 10502.310546875 10123 -37.2399978637695 220.399993896484 55.5100021362305 49.1400032043457 -7.67999982833862 7.67999982833862 -12.7399997711182 65.6600036621094 0.300000011920929
diff -r 8e10184368a0 -r 99bf034c674d convert_fcs_to_text/test-data/testfcs1.fcs
Binary file convert_fcs_to_text/test-data/testfcs1.fcs has changed
diff -r 8e10184368a0 -r 99bf034c674d convert_fcs_to_text/test-data/withcomp.flowtext
--- a/convert_fcs_to_text/test-data/withcomp.flowtext Mon Feb 27 12:45:51 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-FSC-A FSC-H SSC-A SSC-H CD127 CD45RO LIVE CD4 CD3 HLA-DR CD25 CCR4 Time
-9081 8811 19575.009765625 18578 -87.0409478040183 1862.84642436843 271.401077855461 -21.5928234634463 -3.8953788307554 128.962897543941 -105.49762363372 883.862950370797 0
-13879.5 11372 76400.875 66800 -78.6039894593431 181.219255881273 155.837498648 65.4989955303374 49.1162320405613 34.35089684109 -93.9379731423774 -20.2250618932269 0
-53197.5 49698 32821.8828125 30290 230.052594687552 1373.99921235714 197.676575400523 43.2961600914911 719.022620194678 260.803809001924 -123.26357251272 -7.84948514046658 0
-94011.75 85861 46558.33203125 45425 -71.9173894410761 175.966101207251 32.020003628979 59.0097517206453 -16.3262596884212 14004.8608140457 19.4103482134535 26.3251000552498 0.100000001490116
-56965.5 51060 42377.79296875 41492 1141.7755127904 10749.6103892967 198.722094418903 8932.67673912722 2473.54527111587 532.454297443733 422.911926152405 942.872373887256 0.100000001490116
-102877.5 91646 74486.234375 70382 2882.43278670468 7885.97842835489 269.438114676268 171.646872288934 12954.6785962761 -229.3446155909 202.938466043071 -74.2736739022447 0.200000002980232
-170482.5 135955 126331.6640625 106115 36.6180435027011 3913.39806836873 1398.12822721842 1227.24406134117 435.463239428049 11681.3109026932 -612.66079632735 757.567147469633 0.200000002980232
-140555.25 100224 108512.046875 72196 118.194682368212 954.043993675198 406.120956366245 316.018805963466 412.280494784593 24349.6063726745 -40.2882648979737 135.879221006295 0.200000002980232
-46518.75 37218 138006.046875 113970 10.0578231845294 1267.0939533411 2123.37003323943 495.398550791435 125.007577719306 7314.15255846409 -1039.4176032792 173.430016675029 0.200000002980232
-11892.75 11583 10502.310546875 10123 -43.2553273261776 203.396825762157 55.0774261065933 45.3952130843187 -8.67869816746458 10.0850033972805 -49.5506216433673 57.4240755386454 0.300000011920929
diff -r 8e10184368a0 -r 99bf034c674d test-data/nocomp.flowtext
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/nocomp.flowtext Mon Jun 22 17:26:06 2020 -0400
@@ -0,0 +1,11 @@
+FSC-A FSC-H SSC-A SSC-H CD127 CD45RO LIVE CD4 CD3 HLA-DR CD25 CCR4 Time
+9081 8811 19575.009765625 18578 -76 2140.15991210938 278.460021972656 19.1100006103516 3.83999991416931 146.879989624023 125.440002441406 942.760009765625 0
+13879.5 11372 76400.875 66800 -70.6800003051758 167.959991455078 157.43000793457 80.0800018310547 51.8400001525879 83.5199966430664 -4.90000009536743 -11.7600002288818 0
+53197.5 49698 32821.8828125 30290 243.959991455078 1424.23999023438 212.940002441406 66.4300003051758 731.519958496094 822.719970703125 -8.81999969482422 40.1800003051758 0
+94011.75 85861 46558.33203125 45425 -55.4799995422363 178.599990844727 600.600036621094 103.740005493164 546.239990234375 13994.8798828125 42.1399993896484 34.2999992370605 0.100000001490116
+56965.5 51060 42377.79296875 41492 2128.76000976562 12543.0400390625 239.330001831055 9038.1201171875 2529.59985351562 2429.76000976562 620.340026855469 1694.42004394531 0.100000001490116
+102877.5 91646 74486.234375 70382 2954.8798828125 8467.919921875 346.710021972656 276.640014648438 12951.359375 9643.2001953125 353.779998779297 209.720001220703 0.200000002980232
+170482.5 135955 126331.6640625 106115 196.839996337891 4349.47998046875 1876.42004394531 1431.43005371094 919.679992675781 12119.0400390625 265.580017089844 941.780029296875 0.200000002980232
+140555.25 100224 108512.046875 72196 173.279998779297 1068.55993652344 1397.76000976562 447.720001220703 1393.919921875 24694.080078125 210.699996948242 183.260009765625 0.200000002980232
+46518.75 37218 138006.046875 113970 74.4799957275391 1400.67993164062 2420.60009765625 755.300048828125 435.839996337891 7570.56005859375 211.68000793457 242.059997558594 0.200000002980232
+11892.75 11583 10502.310546875 10123 -37.2399978637695 220.399993896484 55.5100021362305 49.1400032043457 -7.67999982833862 7.67999982833862 -12.7399997711182 65.6600036621094 0.300000011920929
diff -r 8e10184368a0 -r 99bf034c674d test-data/testfcs1.fcs
Binary file test-data/testfcs1.fcs has changed
diff -r 8e10184368a0 -r 99bf034c674d test-data/withcomp.flowtext
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/withcomp.flowtext Mon Jun 22 17:26:06 2020 -0400
@@ -0,0 +1,11 @@
+FSC-A FSC-H SSC-A SSC-H CD127 CD45RO LIVE CD4 CD3 HLA-DR CD25 CCR4 Time
+9081 8811 19575.009765625 18578 -87.0409478040183 1862.84642436843 271.401077855461 -21.5928234634463 -3.8953788307554 128.96289754394 -105.49762363372 883.862950370797 0
+13879.5 11372 76400.875 66800 -78.6039894593431 181.219255881273 155.837498648 65.4989955303373 49.1162320405613 34.35089684109 -93.9379731423774 -20.2250618932269 0
+53197.5 49698 32821.8828125 30290 230.052594687552 1373.99921235714 197.676575400523 43.2961600914911 719.022620194678 260.803809001924 -123.26357251272 -7.84948514046658 0
+94011.75 85861 46558.33203125 45425 -71.9173894410761 175.966101207251 32.020003628979 59.0097517206453 -16.326259688421 14004.8608140457 19.4103482134534 26.3251000552498 0.100000001490116
+56965.5 51060 42377.79296875 41492 1141.7755127904 10749.6103892967 198.722094418903 8932.67673912722 2473.54527111587 532.454297443732 422.911926152405 942.872373887256 0.100000001490116
+102877.5 91646 74486.234375 70382 2882.43278670468 7885.9784283549 269.438114676268 171.646872288934 12954.6785962761 -229.3446155909 202.938466043071 -74.2736739022447 0.200000002980232
+170482.5 135955 126331.6640625 106115 36.6180435027011 3913.39806836873 1398.12822721842 1227.24406134117 435.463239428049 11681.3109026932 -612.66079632735 757.567147469633 0.200000002980232
+140555.25 100224 108512.046875 72196 118.194682368212 954.043993675198 406.120956366245 316.018805963466 412.280494784594 24349.6063726745 -40.2882648979739 135.879221006295 0.200000002980232
+46518.75 37218 138006.046875 113970 10.0578231845294 1267.0939533411 2123.37003323943 495.398550791435 125.007577719306 7314.15255846409 -1039.4176032792 173.430016675029 0.200000002980232
+11892.75 11583 10502.310546875 10123 -43.2553273261776 203.396825762157 55.0774261065933 45.3952130843187 -8.67869816746458 10.0850033972805 -49.5506216433673 57.4240755386454 0.300000011920929