changeset 0:d3957a51cc51 draft

Uploaded
author immport-devteam
date Mon, 27 Feb 2017 12:16:44 -0500
parents
children a5609a84ed16
files check_fcs_headers/getFCSheader.R check_fcs_headers/getFCSheaders.py check_fcs_headers/getFCSheaders.xml check_fcs_headers/test-data/input1.fcs check_fcs_headers/test-data/input2.fcs check_fcs_headers/test-data/input3.fcs check_fcs_headers/test-data/output.tabular
diffstat 7 files changed, 203 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/check_fcs_headers/getFCSheader.R	Mon Feb 27 12:16:44 2017 -0500
@@ -0,0 +1,43 @@
+# FCS Headers Module for Galaxy
+# FlowCore
+######################################################################
+#                  Copyright (c) 2016 Northrop Grumman.
+#                          All rights reserved.
+######################################################################
+#
+# Version 1
+# Cristel Thomas
+#
+#
+
+library(flowCore)
+
+getFCSMarkerNames <- function(input, output) {
+  fcs <- read.FCS(input, transformation=F)
+  ## marker names
+  channels <- colnames(fcs)
+  markers <- as.vector(pData(parameters(fcs))$desc)
+  df <- data.frame(channels, markers)
+  fcs_markers <- capture.output(df)
+
+  write.table(df, output, sep="\t")
+}
+
+checkFCS <- function(input_file, output_file) {
+  isValid <- F
+  # Check file beginning matches FCS standard
+  tryCatch({
+    isValid = isFCSfile(input_file)
+  }, error = function(ex) {
+    print (paste("    ! Error in isFCSfile", ex))
+  })
+
+  if (isValid) {
+    getFCSMarkerNames(input_file, output_file)
+  } else {
+    print (paste(input_file, "does not meet FCS standard"))
+  }
+}
+
+args <- commandArgs(trailingOnly = TRUE)
+checkFCS(args[2], args[3])
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/check_fcs_headers/getFCSheaders.py	Mon Feb 27 12:16:44 2017 -0500
@@ -0,0 +1,81 @@
+#!/usr/bin/env python
+######################################################################
+#                  Copyright (c) 2016 Northrop Grumman.
+#                          All rights reserved.
+######################################################################
+from __future__ import print_function
+import sys
+import os
+
+from argparse import ArgumentParser
+
+
+def get_fcs_marker_list(marker_file):
+    with open(marker_file, "r") as mrkrs:
+        useless_first_line = mrkrs.readline()
+        channels = []
+        markers = []
+        for lines in mrkrs:
+            stuff = lines.strip().split("\t")
+            channels.append(stuff[1].strip("\""))
+            markers.append(stuff[2].strip("\""))
+    fcs_markers = [
+        "\t".join(channels),
+        "\t".join(markers)
+    ]
+    return(fcs_markers)
+
+
+def print_fcs_headers(files, filenames, outfile, tool_dir):
+    headers = {}
+    tool = "/".join([tool_dir, "getFCSheader.R"])
+    for eachfile in files:
+        tmp_output = "tmp_fcs_headers.txt"
+        run_command = " ". join(["Rscript --slave --vanilla", tool, "--args", eachfile, tmp_output])
+        os.system(run_command)
+        headers[eachfile] = get_fcs_marker_list(tmp_output)
+
+    with open(outfile, "w") as outf:
+        for i, flc in enumerate(files):
+            outf.write("\t".join([filenames[i], "channels", headers[flc][0]]) + "\n")
+        for j, flm in enumerate(files):
+            outf.write("\t".join([filenames[j], "markers", headers[flm][1]]) + "\n")
+    return
+
+
+if __name__ == "__main__":
+    parser = ArgumentParser(
+             prog="GetFCSHeaders",
+             description="Gets the headers of all files in given set.")
+
+    parser.add_argument(
+            '-i',
+            dest="input_files",
+            required=True,
+            action='append',
+            help="File location for the text files.")
+
+    parser.add_argument(
+            '-n',
+            dest="file_names",
+            required=True,
+            action='append',
+            help="File names.")
+
+    parser.add_argument(
+            '-t',
+            dest="tool_dir",
+            required=True,
+            help="Path to the tool directory")
+
+    parser.add_argument(
+            '-o',
+            dest="output_file",
+            required=True,
+            help="Name of the output file.")
+
+    args = parser.parse_args()
+    input_files = [f for f in args.input_files]
+    file_names = [fn for fn in args.file_names]
+    print_fcs_headers(input_files, file_names, args.output_file, args.tool_dir)
+    sys.exit(0)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/check_fcs_headers/getFCSheaders.xml	Mon Feb 27 12:16:44 2017 -0500
@@ -0,0 +1,73 @@
+<tool id="get_fcs_headers" name="Get list of markers" version="1.0">
+  <description>in FCS files.</description>
+  <requirements>
+    <requirement type="package" version="3.3.0">r</requirement>
+    <requirement type="package" version="1.38.2">bioconductor-flowcore</requirement>
+  </requirements>
+  <stdio>
+    <exit_code range="2:" level="fatal" description="See stderr for more details." />
+  </stdio>
+  <command><![CDATA[
+    python $__tool_directory__/getFCSheaders.py -o "${output_file}" -t $__tool_directory__
+ #for $f in $input#
+    -i "${f}"
+    -n "${f.name}"
+ #end for#
+  ]]>
+  </command>
+  <inputs>
+    <param format="fcs" name="input" type="data_collection" collection_type="list" label="FCS files Collection"/>
+  </inputs>
+  <outputs>
+    <data format="tabular" name="output_file" label="Headers of files in ${input.name}"/>
+  </outputs>
+  <tests>
+    <test>
+      <param name="input">
+        <collection type="list">
+          <element name="input1.fcs" value="input1.fcs"/>
+          <element name="input2.fcs" value="input2.fcs"/>
+          <element name="input3.fcs" value="input3.fcs"/>
+        </collection>
+      </param>
+      <output name="output_file" file="output.tabular"/>
+    </test>
+  </tests>
+  <help><![CDATA[
+  This tool returns a table of the headers of a set of FCS files.
+
+-----
+
+**Input files**
+
+This tool requires collections of FCS files as input.
+
+**Output file**
+
+The output file is a table listing the markers and channels for each file.
+
+-----
+
+**Example**
+
+*File1*::
+
+  Marker1 Marker2 Marker3
+  34      45      12
+  33      65      10
+
+*File2*::
+
+  Marker4 Marker5 Marker3
+  19      62      98
+  12      36      58
+
+*Output*::
+
+  File1 channels Channel1 Channel2 Channel3
+  File2 channels Channel4 Channel5 Channel3
+  File1 markers  Marker1  Marker2  Marker3
+  File2 markers  Marker4  Marker5  Marker3
+ ]]>
+  </help>
+</tool>
Binary file check_fcs_headers/test-data/input1.fcs has changed
Binary file check_fcs_headers/test-data/input2.fcs has changed
Binary file check_fcs_headers/test-data/input3.fcs has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/check_fcs_headers/test-data/output.tabular	Mon Feb 27 12:16:44 2017 -0500
@@ -0,0 +1,6 @@
+input3.fcs	channels	FSC-H	SSC-H	FL1-H	FL2-H	FL3-H	FL4-H
+input1.fcs	channels	FSC-H	SSC-H	FL1-H	FL2-H	FL3-H	FL4-H
+input2.fcs	channels	FSC-H	SSC-H	FL1-H	FL2-H	FL3-H	FL4-H
+input3.fcs	markers	Forward Scatter	Side Scatter	FITC CD4	PE CCR3	PP CD8	APC CCR4
+input1.fcs	markers	Forward Scatter	Side Scatter	FITC CD4	PE CD25	PP CD3	APC CD45RA
+input2.fcs	markers	Forward Scatter	Side Scatter	FITC CD4	PE CXCR3	PP CD8	APC CCR5