From e25d0f98506b6627f8db74b23ea0075afa1010cf Mon Sep 17 00:00:00 2001 From: Lisa Tiberio Date: Mon, 20 Nov 2017 14:25:04 -0500 Subject: [PATCH 1/4] Created a test wrapper for serialized output. Added the call to batch_template. --- template_analysis/batch_template.m | 2 ++ template_analysis/serializeBatchOutput.m | 38 ++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 template_analysis/serializeBatchOutput.m diff --git a/template_analysis/batch_template.m b/template_analysis/batch_template.m index fdcefc7..7855344 100644 --- a/template_analysis/batch_template.m +++ b/template_analysis/batch_template.m @@ -52,6 +52,8 @@ OS.FixedInputAxis = [1e4 1e10]; plot_batch_histograms(results,sampleresults,OS,{'b','y','r'},CM); +[statisticsFile, histogramFile] = serializeBatchOutput(file_pairs, CM, AP, sampleresults, '../'); + save('LacI-CAGop-batch.mat','AP','bins','file_pairs','OS','results','sampleresults'); % Dump CSV files: diff --git a/template_analysis/serializeBatchOutput.m b/template_analysis/serializeBatchOutput.m new file mode 100644 index 0000000..e2eefd3 --- /dev/null +++ b/template_analysis/serializeBatchOutput.m @@ -0,0 +1,38 @@ +% Copyright (C) 2010-2017, Raytheon BBN Technologies and contributors listed +% in the AUTHORS file in TASBE analytics package distribution's top directory. +% +% This file is part of the TASBE analytics package, and is distributed +% under the terms of the GNU General Public License, with a linking +% exception, as described in the file LICENSE in the TASBE analytics +% package distribution's top directory. + +function [statisticsFile, histogramFile] = serializeBatchOutput(file_pairs, CM, AP, sampleresults, pathToOutputFiles) + + % Grab all the data in separate data structures. Then format for output + % files. + numConditions = size(file_pairs,1); + histogramFile = [pathToOutputFiles '/histogramFile.csv']; + + channels = getChannels(CM); + sampleIds = file_pairs(:,1); + binCenters = get_bin_centers(getBins(AP)); + + for i=1:numConditions + binCounts{i} = sampleresults{i}{1}.BinCounts; + geoMeans{i} = sampleresults{i}{1}.Means; + geoStdDev{i} = sampleresults{i}{1}.StandardDevs; + end + + % Formats and writes the output to the Statistics file. + statisticsFile = writeStatisticsCsv(numConditions, channels, sampleIds, binCounts, geoMeans, geoStdDev, pathToOutputFiles); + + % Formats and writes the output to the Histogram file. + %histogramFile = writeHistogramCsv(numConditions, channels, sampleIds, binCounts, binCenters, pathToOutputFiles); + + % Write the data points to a file (without headers for now). This is + % just a wrapper around readfcs_compensated_ERF. It returns + % the data, but for now ignore it because I'm testing writing files. + %fcsToCsvFlowConverterFileWriter(CM, filename, getUseAutoFluorescence(AP), floor); + +end + From 73605e5df955d31d567d9c4ada906d7b112f9a5c Mon Sep 17 00:00:00 2001 From: Lisa Tiberio Date: Wed, 29 Nov 2017 13:48:57 -0500 Subject: [PATCH 2/4] Unit test code. --- template_analysis/serializeBatchOutput.m | 2 +- template_colormodel/CM120312-Lisa.mat | Bin 0 -> 7424 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 template_colormodel/CM120312-Lisa.mat diff --git a/template_analysis/serializeBatchOutput.m b/template_analysis/serializeBatchOutput.m index e2eefd3..5a6a869 100644 --- a/template_analysis/serializeBatchOutput.m +++ b/template_analysis/serializeBatchOutput.m @@ -27,7 +27,7 @@ statisticsFile = writeStatisticsCsv(numConditions, channels, sampleIds, binCounts, geoMeans, geoStdDev, pathToOutputFiles); % Formats and writes the output to the Histogram file. - %histogramFile = writeHistogramCsv(numConditions, channels, sampleIds, binCounts, binCenters, pathToOutputFiles); + histogramFile = writeHistogramCsv(numConditions, channels, sampleIds, binCounts, binCenters, pathToOutputFiles); % Write the data points to a file (without headers for now). This is % just a wrapper around readfcs_compensated_ERF. It returns diff --git a/template_colormodel/CM120312-Lisa.mat b/template_colormodel/CM120312-Lisa.mat new file mode 100644 index 0000000000000000000000000000000000000000..b7f16fa6a5838fe05ebc67e0c95a873b11e8f7cd GIT binary patch literal 7424 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 literal 0 HcmV?d00001 From 58a3955fb8431ec9b307b6750d36d9e65555a936 Mon Sep 17 00:00:00 2001 From: ltiberio Date: Tue, 19 Dec 2017 16:16:53 -0500 Subject: [PATCH 3/4] Moved this file into the TASBE code directory. --- template_analysis/serializeBatchOutput.m | 38 ------------------------ 1 file changed, 38 deletions(-) delete mode 100644 template_analysis/serializeBatchOutput.m diff --git a/template_analysis/serializeBatchOutput.m b/template_analysis/serializeBatchOutput.m deleted file mode 100644 index 5a6a869..0000000 --- a/template_analysis/serializeBatchOutput.m +++ /dev/null @@ -1,38 +0,0 @@ -% Copyright (C) 2010-2017, Raytheon BBN Technologies and contributors listed -% in the AUTHORS file in TASBE analytics package distribution's top directory. -% -% This file is part of the TASBE analytics package, and is distributed -% under the terms of the GNU General Public License, with a linking -% exception, as described in the file LICENSE in the TASBE analytics -% package distribution's top directory. - -function [statisticsFile, histogramFile] = serializeBatchOutput(file_pairs, CM, AP, sampleresults, pathToOutputFiles) - - % Grab all the data in separate data structures. Then format for output - % files. - numConditions = size(file_pairs,1); - histogramFile = [pathToOutputFiles '/histogramFile.csv']; - - channels = getChannels(CM); - sampleIds = file_pairs(:,1); - binCenters = get_bin_centers(getBins(AP)); - - for i=1:numConditions - binCounts{i} = sampleresults{i}{1}.BinCounts; - geoMeans{i} = sampleresults{i}{1}.Means; - geoStdDev{i} = sampleresults{i}{1}.StandardDevs; - end - - % Formats and writes the output to the Statistics file. - statisticsFile = writeStatisticsCsv(numConditions, channels, sampleIds, binCounts, geoMeans, geoStdDev, pathToOutputFiles); - - % Formats and writes the output to the Histogram file. - histogramFile = writeHistogramCsv(numConditions, channels, sampleIds, binCounts, binCenters, pathToOutputFiles); - - % Write the data points to a file (without headers for now). This is - % just a wrapper around readfcs_compensated_ERF. It returns - % the data, but for now ignore it because I'm testing writing files. - %fcsToCsvFlowConverterFileWriter(CM, filename, getUseAutoFluorescence(AP), floor); - -end - From cfa4c322cf03ebfdbbf8167cbc42686a95da9659 Mon Sep 17 00:00:00 2001 From: jakebeal Date: Wed, 17 Jan 2018 18:33:08 -0600 Subject: [PATCH 4/4] testing color models shouldn't have been included --- template_colormodel/CM120312-Lisa.mat | Bin 7424 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 template_colormodel/CM120312-Lisa.mat diff --git a/template_colormodel/CM120312-Lisa.mat b/template_colormodel/CM120312-Lisa.mat deleted file mode 100644 index b7f16fa6a5838fe05ebc67e0c95a873b11e8f7cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7424 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