Mercurial > repos > immport-devteam > check_fcs_headers
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>
--- /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