Repository 'run_flock'
hg clone https://toolshed.g2.bx.psu.edu/repos/immport-devteam/run_flock

Changeset 2:b6b4d08b6858 (2020-07-17)
Previous changeset 1:81f9b44f5242 (2017-02-27)
Commit message:
"planemo upload for repository https://github.com/ImmPortDB/immport-galaxy-tools/tree/master/flowtools/run_flock commit 7e94637827c3637229f3b568fa7f9d38428d6607"
added:
runFlockMFI.py
runFlockMFI.xml
static/images/flock_logo.png
test-data/input.flowtext
test-data/mfi.flowmfi
test-data/mfi2.flowmfi
test-data/mfi3.flowmfi
test-data/out1.flowclr
test-data/out1.flowscore
test-data/out2.flowclr
test-data/out2.flowscore
test-data/out3.flowclr
test-data/out3.flowscore
removed:
run_flock/runFlockMFI.py
run_flock/runFlockMFI.xml
run_flock/src/README
run_flock/src/cent_adjust.c
run_flock/src/find_connected.c
run_flock/src/flock1.c
run_flock/src/flock2.c
run_flock/static/images/flock_logo.png
run_flock/test-data/input.flowtext
run_flock/test-data/mfi.flowmfi
run_flock/test-data/mfi2.flowmfi
run_flock/test-data/mfi3.flowmfi
run_flock/test-data/out1.flowclr
run_flock/test-data/out1.flowscore
run_flock/test-data/out2.flowclr
run_flock/test-data/out2.flowscore
run_flock/test-data/out3.flowclr
run_flock/test-data/out3.flowscore
b
diff -r 81f9b44f5242 -r b6b4d08b6858 runFlockMFI.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/runFlockMFI.py Fri Jul 17 09:06:54 2020 -0400
[
@@ -0,0 +1,116 @@
+#!/usr/bin/env python
+######################################################################
+#                  Copyright (c) 2016 Northrop Grumman.
+#                          All rights reserved.
+######################################################################
+# version 2
+
+import sys
+import os
+from argparse import ArgumentParser
+import pandas as pd
+from scipy.stats import gmean
+
+
+def run_FLOCK(input_file, method, bins, density, output_file, mfi_file,
+              mfi_calc, profile):
+    run_command = method + " " + input_file
+    if bins:
+        run_command += " " + bins
+    if density:
+        run_command += " " + density
+
+    os.system(run_command)
+
+    move_command = "mv flock_results.txt " + output_file
+    os.system(move_command)
+
+    # Here add some way to calculate the count and tack it on to profile file.
+    flockdf = pd.read_table(output_file)
+    if mfi_calc == "mfi":
+        MFIs = flockdf.groupby('Population').mean().round(decimals=2)
+    elif mfi_calc == "gmfi":
+        MFIs = flockdf.groupby('Population').agg(lambda x: gmean(list(x))).round(decimals=2)
+    else:
+        MFIs = flockdf.groupby('Population').median().round(decimals=2)
+
+    with open(mfi_file, "w") as outf:
+        MFIs.to_csv(outf, sep="\t", float_format='%.0f')
+
+    (events, columns) = flockdf.shape
+    fstats = {}
+    fstats['population'] = flockdf.iloc[:, -1:].iloc[:, 0]
+    fstats['population_freq'] = fstats['population'].value_counts()
+    fstats['population_freq_sort'] = fstats['population_freq'].sort_index()
+    fstats['population_per'] = (fstats['population'].value_counts(normalize=True) * 100).round(decimals=2)
+    fstats['population_per_sort'] = fstats['population_per'].sort_index()
+    fstats['population_all'] = pd.concat([fstats['population_freq_sort'], fstats['population_per_sort']], axis=1)
+    fstats['population_all'].columns = ['Count', 'Percentage']
+    fstats['population_all']['Population_ID'] = fstats['population_all'].index
+
+    flock_profile = pd.read_table('profile.txt')
+    profile_pop = flock_profile.merge(fstats['population_all'], on='Population_ID')
+    profile_pop.to_csv(profile, sep="\t", float_format='%.2f', index=False)
+
+#    get_profile = "mv profile.txt " + profile
+#    os.system(get_profile)
+    return
+
+
+if __name__ == "__main__":
+    parser = ArgumentParser(
+             prog="runFlockMFI",
+             description="Run Flock on text file and generate centroid file")
+
+    parser.add_argument(
+            '-i',
+            dest="input_file",
+            required=True,
+            help="File location for the FCS file.")
+
+    parser.add_argument(
+            '-m',
+            dest="method",
+            required=True,
+            help="Run flock1 or flock2.")
+
+    parser.add_argument(
+            '-M',
+            dest="mfi_calc",
+            required=True,
+            help="what to calculate for centroids.")
+
+    parser.add_argument(
+            '-b',
+            dest="bins",
+            required=False,
+            help="Number of Bins.")
+
+    parser.add_argument(
+            '-d',
+            dest="density",
+            required=False,
+            help="Density.")
+
+    parser.add_argument(
+            '-o',
+            dest="output_file",
+            required=True,
+            help="File location for the output file.")
+
+    parser.add_argument(
+            '-c',
+            dest="centroids",
+            required=True,
+            help="File location for the output centroid file.")
+
+    parser.add_argument(
+            '-p',
+            dest="profile",
+            required=True,
+            help="File location for the output profile file.")
+
+    args = parser.parse_args()
+    run_FLOCK(args.input_file, args.method, args.bins,
+              args.density, args.output_file, args.centroids, args.mfi_calc,
+              args.profile)
b
diff -r 81f9b44f5242 -r b6b4d08b6858 runFlockMFI.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/runFlockMFI.xml Fri Jul 17 09:06:54 2020 -0400
[
@@ -0,0 +1,166 @@
+<tool id="run_flock" name="Run FLOCK" version="1.2+galaxy0" profile="18.01">
+  <description>using a FCS file that was converted/transformed to a text file</description>
+  <requirements>
+    <requirement type="package" version="1.5.1">scipy</requirement>
+    <requirement type="package" version="1.0.5">pandas</requirement>
+    <requirement type="package" version="1.0">flock</requirement>
+  </requirements>
+  <stdio>
+    <exit_code range="1:" />
+  </stdio>
+  <command><![CDATA[
+    python3 '$__tool_directory__/runFlockMFI.py' -i '${input}' -m '${method}' -o '${output}' -c '${centroid}' -M '${mfi}' -p '${profile}'
+    #if $bins
+      -b $bins
+    #end if
+    #if $density
+      -d $density
+    #end if
+  ]]>
+  </command>
+  <inputs>
+    <param format="flowtext" name="input" type="data" label="Source file"/>
+    <param name="method" type="select" label="Method">
+      <option value="flock1" selected="true">Flock Version 1</option>
+      <option value="flock2">Flock Version 2</option>
+    </param>
+    <param name="bins" type="integer" min="6" max="30" optional="true" value="" label="bins (6-30)"/>
+    <param name="density" type="integer" min="2" max="100" optional="true" value="" label="density (2-100)"/>
+    <param name="mfi" type="select" label="Calculate centroids using:">
+      <option value="mfi" selected="true">Mean Fluorescence Intensity</option>
+      <option value="mdfi">Median Fluorescence Intensity</option>
+      <option value="gmfi">Geometric Mean Fluorescence Intensity</option>
+    </param>
+  </inputs>
+  <outputs>
+    <data format="flowclr" name="output" label="${method} with ${mfi} on ${input.name}"/>
+    <data format="flowmfi" name="centroid" label="${mfi} centroids from ${method} on ${input.name}"/>
+    <data format="flowscore" name="profile" label="Population score profiles from ${method} on ${input.name}"/>
+  </outputs>
+  <tests>
+    <test>
+      <param name="input" value="input.flowtext"/>
+      <param name="method" value="flock1"/>
+      <param name="bins" value=""/>
+      <param name="density" value=""/>
+      <param name="mfi" value="mfi"/>
+      <output name="output" file="out1.flowclr"/>
+      <output name="centroid" file="mfi.flowmfi"/>
+      <output name="profile" file="out1.flowscore"/>
+    </test>
+    <test>
+      <param name="input" value="input.flowtext"/>
+      <param name="method" value="flock2"/>
+      <param name="bins" value=""/>
+      <param name="density" value=""/>
+      <param name="mfi" value="mfi"/>
+      <output name="output" file="out2.flowclr"/>
+      <output name="centroid" file="mfi2.flowmfi"/>
+      <output name="profile" file="out2.flowscore"/>
+    </test>
+    <test>
+      <param name="input" value="input.flowtext"/>
+      <param name="method" value="flock1"/>
+      <param name="bins" value="7"/>
+      <param name="density" value="3"/>
+      <param name="mfi" value="mfi"/>
+      <output name="output" file="out3.flowclr"/>
+      <output name="centroid" file="mfi3.flowmfi"/>
+      <output name="profile" file="out3.flowscore"/>
+    </test>
+  </tests>
+  <help><![CDATA[
+   This tool runs FLOCK using a FCS file that was converted to a text file.
+
+-----
+
+.. image::  ./static/images/flowtools/flock_logo.png
+
+FLOCK (FLOw Clustering without K) is a computational approach to flow cytometry analysis which:
+
+  1. Computationally determines the number of unique populations in high dimensional flow data using a rapid binning approach
+  2. Can handle non-spherical hyper-shapes
+  3. Maps populations across independent samples
+  4. Calculates many useful summary statistics
+  5. Finds the most informative parameters
+  6. Reduces subjective factors in manual gating
+
+.. class:: warningmark
+
+This tool is not intended to analyze CyTOF data as is.
+
+-----
+
+**Input**
+
+FLOCK requires a text file, generated from a FCS file, as input.
+In order to define the populations in a given dataset collection for a given set of markers, run FLOCK on a super-set of FCS file. Use the Downsample and merge tool to concatenate and/or downsample datasets, and remove, edit or rearrange markers before running FLOCK on your favorite set of markers.
+
+.. class:: infomark
+
+Tip: Make sure to keep only columns containing data from markers.
+
+**Output**
+
+*FLOCK*
+
+FLOCK attributes each event to a population and generates a text file.
+
+*Centroids*
+
+The centroid file is a table containing the mean, median or geometric mean fluorescent intensity values of each marker within each population defined by FLOCK, as determined by the user.
+
+*Population scores*
+
+This output is a table containing marker scores for each population. The score value is a number indicating the degree to which this population expresses each marker, as follows:
+
+- 1 implies negative expression
+- 2 implies low expression
+- 3 implies positive expression
+- 4 implies highly positive expression
+
+-----
+
+**Example**
+
+*Input* - fluorescence intensities per marker per event::
+
+   Marker1 Marker2 Marker3 ...
+   34      45      12      ...
+   33      65      10      ...
+   19      62      98      ...
+   12      36      58      ...
+   ...     ...     ...     ...
+
+*FLOCK Output* - fluorescence intensities per marker and population ID per event::
+
+   Marker1 Marker2 Marker3 ... Population
+   34      45      12      ... 1
+   33      65      10      ... 5
+   19      62      98      ... 2
+   12      36      58      ... 1
+   ...     ...     ...     ... ...
+
+*Centroid file* - mean, geometric mean or median fluorescence intensity per marker per population::
+
+   Population Marker1 Marker2 Marker3 ...
+   1          38      49      10      ...
+   2          21      63      100     ...
+   3          31      52      45      ...
+   4          11      78      25      ...
+   ...        ...     ...     ...     ...
+
+*Population profile file*::
+
+   Population_ID Marker1 Marker2 Marker3 ... Count Percentage
+   1             1       3       2       ... 3885  6.44
+   2             1       3       4       ... 2774  4.62
+   3             2       2       3       ... 2151  3.59
+   4             1       3       2       ... 1207  2.01
+   ...           ...     ...     ...     ... ...   ...
+  ]]>
+  </help>
+  <citations>
+    <citation type="doi">10.1002/cyto.b.20554</citation>
+  </citations>
+</tool>
b
diff -r 81f9b44f5242 -r b6b4d08b6858 run_flock/runFlockMFI.py
--- a/run_flock/runFlockMFI.py Mon Feb 27 13:30:23 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,125 +0,0 @@
-#!/usr/bin/env python
-######################################################################
-#                  Copyright (c) 2016 Northrop Grumman.
-#                          All rights reserved.
-######################################################################
-# version 2
-from __future__ import print_function
-
-import sys
-import os
-from argparse import ArgumentParser
-import pandas as pd
-from scipy.stats import gmean
-
-
-def run_FLOCK(input_file, method, bins, density, output_file, mfi_file,
-              mfi_calc, profile, tool_directory):
-    run_command = tool_directory + "/bin/" + method + " " + input_file
-    if bins:
-        run_command += " " + bins
-    if density:
-        run_command += " " + density
-
-    os.system(run_command)
-
-    move_command = "mv flock_results.txt " + output_file
-    os.system(move_command)
-
-    # Here add some way to calculate the count and tack it on to profile file.
-    flockdf = pd.read_table(output_file)
-    if mfi_calc == "mfi":
-        MFIs = flockdf.groupby('Population').mean().round(decimals=2)
-    elif mfi_calc == "gmfi":
-        MFIs = flockdf.groupby('Population').agg(lambda x: gmean(list(x))).round(decimals=2)
-    else:
-        MFIs = flockdf.groupby('Population').median().round(decimals=2)
-
-    with open(mfi_file, "w") as outf:
-        MFIs.to_csv(outf, sep="\t", float_format='%.0f')
-
-    (events, columns) = flockdf.shape
-    fstats = {}
-    fstats['population'] = flockdf.iloc[:, -1:].iloc[:, 0]
-    fstats['population_freq'] = fstats['population'].value_counts()
-    fstats['population_freq_sort'] = fstats['population_freq'].sort_index()
-    fstats['population_per'] = (fstats['population'].value_counts(normalize=True) * 100).round(decimals=2)
-    fstats['population_per_sort'] = fstats['population_per'].sort_index()
-    fstats['population_all'] = pd.concat([fstats['population_freq_sort'], fstats['population_per_sort']], axis=1)
-    fstats['population_all'].columns = ['Count', 'Percentage']
-    fstats['population_all']['Population_ID'] = fstats['population_all'].index
-
-    flock_profile = pd.read_table('profile.txt')
-    profile_pop = flock_profile.merge(fstats['population_all'], on='Population_ID')
-    profile_pop.to_csv(profile, sep="\t", float_format='%.2f', index=False)
-
-#    get_profile = "mv profile.txt " + profile
-#    os.system(get_profile)
-    return
-
-
-if __name__ == "__main__":
-    parser = ArgumentParser(
-             prog="runFlockMFI",
-             description="Run Flock on text file and generate centroid file")
-
-    parser.add_argument(
-            '-i',
-            dest="input_file",
-            required=True,
-            help="File location for the FCS file.")
-
-    parser.add_argument(
-            '-m',
-            dest="method",
-            required=True,
-            help="Run flock1 or flock2.")
-
-    parser.add_argument(
-            '-M',
-            dest="mfi_calc",
-            required=True,
-            help="what to calculate for centroids.")
-
-    parser.add_argument(
-            '-b',
-            dest="bins",
-            required=False,
-            help="Number of Bins.")
-
-    parser.add_argument(
-            '-d',
-            dest="density",
-            required=False,
-            help="Density.")
-
-    parser.add_argument(
-            '-o',
-            dest="output_file",
-            required=True,
-            help="File location for the output file.")
-
-    parser.add_argument(
-            '-t',
-            dest="tool_directory",
-            required=True,
-            help="File location for the output file.")
-
-    parser.add_argument(
-            '-c',
-            dest="centroids",
-            required=True,
-            help="File location for the output centroid file.")
-
-    parser.add_argument(
-            '-p',
-            dest="profile",
-            required=True,
-            help="File location for the output profile file.")
-
-    args = parser.parse_args()
-    run_FLOCK(args.input_file, args.method, args.bins,
-              args.density, args.output_file, args.centroids, args.mfi_calc,
-              args.profile, args.tool_directory)
-
-    sys.exit(0)
b
diff -r 81f9b44f5242 -r b6b4d08b6858 run_flock/runFlockMFI.xml
--- a/run_flock/runFlockMFI.xml Mon Feb 27 13:30:23 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,158 +0,0 @@
-<tool id="run_flock" name="Run FLOCK" version="1.2">
-  <description>using a FCS file that was converted/transformed to a text file.</description>
-  <requirements>
-    <requirement type="package" version="0.16.0">scipy</requirement>
-    <requirement type="package" version="0.17.1">pandas</requirement>
-    <requirement type="package" version="1.0">flock</requirement>
-  </requirements>
-  <stdio>
-    <exit_code range="1:" />
-  </stdio>
-  <command><![CDATA[
-    python $__tool_directory__/runFlockMFI.py -i "${input}" -o "${output}" -m "${method}" -c "${centroid}" -M "${mfi}" -p "${profile}" -t $__tool_directory__
-    #if $bins
-      -b $bins
-    #end if
-    #if $density
-      -d $density
-    #end if
-  ]]>
-  </command>
-  <inputs>
-    <param format="flowtext" name="input" type="data" label="Source file"/>
-    <param name="method" type="select" label="Method">
-      <option value="flock1" selected="true">Flock Version 1</option>
-      <option value="flock2">Flock Version 2</option>
-    </param>
-    <param name="bins" type="integer" min="6" max="30" optional="true" value="" label="bins (6-30)"/>
-    <param name="density" type="integer" min="2" max="100" optional="true" value="" label="density (2-100)"/>
-    <param name="mfi" type="select" label="Calculate centroids using:">
-      <option value="mfi" selected="true">Mean Fluorescence Intensity</option>
-      <option value="mdfi">Median Fluorescence Intensity</option>
-      <option value="gmfi">Geometric Mean Fluorescence Intensity</option>
-    </param>
-  </inputs>
-  <outputs>
-    <data format="flowclr" name="output" label="${method} with ${mfi} on ${input.name}"/>
-    <data format="flowmfi" name="centroid" label="${mfi} centroids from ${method} on ${input.name}"/>
-    <data format="flowscore" name="profile" label="Population score profiles from ${method} on ${input.name}"/>
-  </outputs>
-  <tests>
-    <test>
-      <param name="input" value="input.flowtext"/>
-      <param name="method" value="flock1"/>
-      <param name="bins" value=""/>
-      <param name="density" value=""/>
-      <param name="mfi" value="mfi"/>
-      <output name="output" file="out1.flowclr"/>
-      <output name="centroid" file="mfi.flowmfi"/>
-      <output name="profile" file="out1.flowscore"/>
-    </test>
-    <test>
-      <param name="input" value="input.flowtext"/>
-      <param name="method" value="flock2"/>
-      <param name="bins" value=""/>
-      <param name="density" value=""/>
-      <param name="mfi" value="mfi"/>
-      <output name="output" file="out2.flowclr"/>
-      <output name="centroid" file="mfi2.flowmfi"/>
-      <output name="profile" file="out2.flowscore"/>
-    </test>
-    <test>
-      <param name="input" value="input.flowtext"/>
-      <param name="method" value="flock1"/>
-      <param name="bins" value="7"/>
-      <param name="density" value="3"/>
-      <param name="mfi" value="mfi"/>
-      <output name="output" file="out3.flowclr"/>
-      <output name="centroid" file="mfi3.flowmfi"/>
-      <output name="profile" file="out3.flowscore"/>
-    </test>
-  </tests>
-  <help><![CDATA[
-   This tool runs FLOCK using a FCS file that was converted to a text file.
-
------
-
-.. image::  static/images/flowtools/flock_logo.png
-
-FLOCK (FLOw Clustering without K) is a computational approach to flow cytometry analysis which:
-
-  1. Computationally determines the number of unique populations in high dimensional flow data using a rapid binning approach
-  2. Can handle non-spherical hyper-shapes
-  3. Maps populations across independent samples
-  4. Calculates many useful summary statistics
-  5. Finds the most informative parameters
-  6. Reduces subjective factors in manual gating
-
-.. class:: warningmark
-
-This tool is not intended to analyze CyTOF data as is.
-
------
-
-**Input**
-
-FLOCK requires a text file, generated from a FCS file, as input.
-In order to define the populations in a given dataset collection for a given set of markers, run FLOCK on a super-set of FCS file. Use the Downsample and merge tool to concatenate and/or downsample datasets, and remove, edit or rearrange markers before running FLOCK on your favorite set of markers.
-
-**Output**
-
-*FLOCK*
-
-FLOCK attributes each event to a population and generates a text file.
-
-*Centroids*
-
-The centroid file is a table containing the mean, median or geometric mean fluorescent intensity values of each marker within each population defined by FLOCK, as determined by the user.
-
-*Population scores*
-
-This output is a table containing marker scores for each population. The score value is a number indicating the degree to which this population expresses each marker, as follows:
-
-- 1 implies negative expression
-- 2 implies low expression
-- 3 implies positive expression
-- 4 implies highly positive expression
-
------
-
-**Example**
-
-*Input* - fluorescence intensities per marker per event::
-
-   Marker1 Marker2 Marker3
-   34      45      12
-   33      65      10
-   19      62      98
-   12      36      58
-
-*FLOCK Output* - fluorescence intensities per marker and population ID per event::
-
-   Marker1 Marker2 Marker3 Population
-   34      45      12      1
-   33      65      10      5
-   19      62      98      2
-   12      36      58      1
-
-*Centroid file* - mean, geometric mean or median fluorescence intensity per marker per population::
-
-   Population Marker1 Marker2 Marker3
-   1          38      49      10
-   2          21      63      100
-   3          31      52      45
-   4          11      78      25
-
-*Population profile file*::
-
-   Population_ID Marker1 Marker2 Marker3 Count Percentage
-   1             1       3       2       3885  6.44
-   2             1       3       4       2774  4.62
-   3             2       2       3       2151  3.59
-   4             1       3       2       1207  2.01
- ]]>
-  </help>
-  <citations>
-    <citation type="doi">10.1002/cyto.b.20554</citation>
-  </citations>
-</tool>
b
diff -r 81f9b44f5242 -r b6b4d08b6858 run_flock/src/README
--- a/run_flock/src/README Mon Feb 27 13:30:23 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,139 +0,0 @@
-This package contains R code for converting and transforming a binary
-FCS file, using the FCSTrans software, and the C code for running the
-flock1 and flock2 population identification software.
-
-src - contains the C code for flock1, flock2 and cent_adjust
-bin - contains the compiled C code for flock1, flock2 and cent_adjust,
-      plus the R code for using the FCSTrans algorithm for file
-      conversion and data transformation.
-doc - documentation for FCSTrans and FLOCK algorithms
-example - sample data and output from FCSTrans and FLOCK
-
-To run this software sucessfully the code assumes the software was installed
-in the /usr/local/flock directory and that R, plus the Bioconductor flowCore
-module has been installed. If you use the ipconvert.sh shell script, you
-may need to adjust the location of the RScript executable and the location
-of the FCSTrans.R code by editing the shell script.
-
-#############################################################################
-# Overview
-#############################################################################
-ImmPort-FLOCK
-
-FLOCK (FLOw Clustering without K), an automated population discovery tool for
-multidimensional FCM data was designed to specifically take into account the
-unique feature of FCM data and produce objective segregation of cell
-populations.
-
-FLOCK parameter settings can be customized by defining Bins and Density
-Threshold.  The number of bins is an integer specifying the number of
-equal-sized regions the data will be partitioned into on each axis. Increasing
-the number of bins increases the sensitivity to detect rare populations but
-may also result in single populations being divided.  Density Threshold is the
-cut-off value to separate the dense regions from background. It is a floating
-point number that helps define population centers; increasing the threshold
-may help separate major populations but could cause the algorithm to overlook
-rare populations.
-
-#############################################################################
-# Compiling C code
-#############################################################################
-cd bin
-cc -o flock1 ../src/flock1.c ../src/find_connected.c -lm
-cc -o flock2 ../src/flock2.c -lm
-cc -o cent_adjust ../src/cent_adjust.c -lm
-
-#############################################################################
-# FCSTrans
-#############################################################################
-A shell script named ipconvert.sh is included that runs the FCSTrans R
-code for converting and transforming a binary FCS file. The output consists
-of one text file containing the transformed channel intensity values and
-another file containing a list of the FCS parameters.
-
-cd bin
-/usr/local/flock/bin/ipconvert.sh ../example/data/FCS2.fcs
-/usr/local/flock/bin/ipconvert.sh ../example/data/FCS3.fcs
-
-#############################################################################
-# Running flock1 or flock2
-#############################################################################
-Running the FLOCK1 and FLOCK2 algorithms generate 8 output files that have
-generic file names. For this reason, it is recommended that one output
-directory be created for one input file to the program.
-
-cd example/output/FCS2
-/usr/local/flock/bin/flock1 ../../data/FCS2.txt
-
-cd example/output/FCS3
-/usr/local/flock/bin/flock2 ../../data/FCS3.txt
-
-Files created: MFI.txt, percentage.txt, population_id.txt, profile.txt,
-               flock_results.txt, coordinates.txt, population_center.txt
-               and percentage.txt
-
-Usage Information for FLOCK1
-----------------------------------------------------------------------------
-basic mode: flock1 fcs.txt
-advanced_ mode: flock1 fcs.txt num_bin density_index max_num_pop
-
-Usage Information for FLOCK2
-----------------------------------------------------------------------------
-basic mode: flock data_file
-advanced mode 0 (specify maximum # of pops): flock data_file max_num_pop
-advanced mode 1 (without # of pops): flock data_file num_bin density_index
-advanced mode 2 (specify # of pops): flock data_file num_bin density_index
-                                           number_of_pop
-advanced mode 3 (specify both # of pops): flock data_file num_bin density_index
-                                           number_of_pop max_num_pop
-
-FLOCK Output Files
-----------------------------------------------------------------------------
-coordinates.txt:
-    Output is the intensity values for each marker and event
-
-flock_results.txt:
-    A combination of the input file, event identifiers and population
-    identifiers.
-
-MFI.txt:
-    Provides the mean fluorescence intensity for each population for each
-    marker/parameter
-
-population_id.txt:
-    Contains population identifiers (i.e, values from [1 to n] where n is
-    the population assigned to the  corresponding events in the input data
-    file, one identifier per row.)
-
-population_center.txt:
-    Contains the centroid coordinates for each identified population
-
-percentage.txt:
-    Includes the population identifiers and percentage of events within that
-    population (relative to the whole data file)
-
-profile.txt:
-    Displays an expression profile, where the approximate expression level
-    for each marker is assigned a numeric value from 1-4, for each identified
-    population
-
-fcs_properties.txt:
-    Contains the number of events, number of populations, and number of
-    markers, as well as the algorithm parameters used in the  analysis
-
-#############################################################################
-# Running cent_adjust 
-#############################################################################
-Running the cent_adjust algorithm generates 4 output files that have
-generic file names. For this reason, it is recommened that one output
-directory be created for one input file to the program. 
-
-mkdir example/output/FCS2/cent_adjust
-cd example/output/FCS2/cent_adjust
-/usr/local/flock/bin/cent_adjust ../population_center.txt ../coordinates.txt
-
-Files created: MFI.txt, percentage.txt, population_id.txt and profile.txt
-
-Usage Information for cent_adjust
-----------------------------------------------------------------------------
-basic mode: cent_adjust input_center input_data_file
b
diff -r 81f9b44f5242 -r b6b4d08b6858 run_flock/src/cent_adjust.c
--- a/run_flock/src/cent_adjust.c Mon Feb 27 13:30:23 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,1009 +0,0 @@\n-/////////////////////////////////////////////////////////\n-//  Cent_adjust version number and modification history\n-//  ImmPort BISC project\n-//  Author: Yu "Max" Qian\n-//  v1.01: Oct 16, 2009\n-//         Line 899 of the main function:\n-//         Changed kmean_term=1 to kmean_term=2\n-//////////////////////////////////////////////////////////\n-\n-\n-#include <time.h>\n-#include <stdio.h>\n-#include <stdlib.h>\n-#include <math.h>\n-#include <string.h>\n-\n-#define DEBUG 0\n-#define LINE_LEN 1024\n-#define FILE_NAME_LEN 128\n-#define PARA_NAME_LEN 64\n-#define MAX_VALUE 1000000000\n-#define CUBE 0\n-\n-\n-void getctrfileinfo(FILE *f_src_ctr, long *num_clust)\n-{\n-\tint ch=\'\\n\';\n-\tint prev=\'\\n\';\n-\tlong num_rows=0;\n-\n-\twhile ((ch = fgetc(f_src_ctr))!= EOF )\n-    {\n-\t\tif (ch == \'\\n\')\n-        {\n-\t\t\t++num_rows;\n-        }\n-\t\tprev = ch;\n-    }\n-\tif (prev!=\'\\n\')\n-\t\t++num_rows;\n-\t\n-\t*num_clust=num_rows;\n-\t//printf("center file has %ld rows\\n", *num_clust);\n-}\n-\n-/************************************* Read basic info of the source file **************************************/\n-void getfileinfo(FILE *f_src, long *file_Len, long *num_dm, char *name_string, int *time_ID)\n-{\n-\tchar src[LINE_LEN];\n-\tchar current_name[64];\n-\tchar prv;\n-\n-\tlong num_rows=0;\n-\tlong num_columns=0;\n-\tint ch=\'\\n\';\n-\tint prev=\'\\n\';\n-\tlong time_pos=0;\n-\tlong i=0;\n-\tlong j=0;\n-\n-\t\n-\n-\tsrc[0]=\'\\0\';\n-\tfgets(src, LINE_LEN, f_src);\n-\n-\tname_string[0]=\'\\0\';\n-\tcurrent_name[0]=\'\\0\';\n-\tprv=\'\\n\';\n-\n-\twhile ((src[i]==\' \') || (src[i]==\'\\t\')) //skip space and tab characters\n-\t\ti++;\n-\n-\twhile ((src[i]!=\'\\r\') && (src[i]!=\'\\n\')) //repeat until the end of the line\n-\t{\n-\t\tcurrent_name[j]=src[i];\n-\t\t\n-\t\tif ((src[i]==\'\\t\') && (prv!=\'\\t\')) //a complete word\n-\t\t{\n-\t\t\tcurrent_name[j]=\'\\0\';\n-\t\t\t\n-          /* \n-           * Commented out John Campbell, June 10 2010\n-           * We no longer want to automatically remove Time column.\n-           * This column should have been removed by column selection\n-          if (0!=strcmp(current_name,"Time"))\n-            {\n-              num_columns++; //num_columns does not inlcude the column of Time\n-              time_pos++;\n-              strcat(name_string,current_name); \n-              strcat(name_string,"\\t");\n-            }\n-          else\n-            {\n-              *time_ID=time_pos;\n-            }\n-          */\n-\n-           num_columns++;\n-           strcat(name_string,current_name);\n-           strcat(name_string,"\\t");\n-\n-\t\t   current_name[0]=\'\\0\';\n-\t\t   j=0;\t\t\t\n-\t\t}\t\t\n-\t\t\n-\t\tif ((src[i]==\'\\t\') && (prv==\'\\t\')) //a duplicate tab or space\n-\t\t{\n-\t\t\tcurrent_name[0]=\'\\0\';\n-\t\t\tj=0;\n-\t\t}\n-\t\t\n-        if (src[i]!=\'\\t\')\n-\t        j++;\n-\n-\t\t\n-\t\tprv=src[i];\n-\t\ti++;\n-\t}\n-\t\n-\tif (prv!=\'\\t\') //the last one hasn\'t been retrieved\n-\t{\n-\t\tcurrent_name[j]=\'\\0\';\n-      /* \n-       * Commented out John Campbell, June 10 2010\n-       * We no longer want to automatically remove Time column.\n-       * This column should have been removed by column selection\n-      if (0!=strcmp(current_name,"Time"))\n-        {\n-          num_columns++;\n-          strcat(name_string,current_name);\n-          time_pos++;\n-        }\n-      else\n-        {\n-          *time_ID=time_pos;\n-        }\n-      */\n-\n-      num_columns++;\n-      strcat(name_string,current_name);\n-\t}\n-\n-\tif (DEBUG==1)\n-\t{\n-\t\tprintf("time_ID is %d\\n",*time_ID);\n-\t\tprintf("name_string is %s\\n",name_string);\n-\t}\n-\n-\t// # of rows\n-\n-\twhile ((ch = fgetc(f_src))!= EOF )\n-    {\n-\t\tif (ch == \'\\n\')\n-        {\n-\t\t\t++num_rows;\n-        }\n-\t\tprev = ch;\n-    }\n-\tif (prev!=\'\\n\')\n-\t\t++num_rows;\n-\t\n-\t*file_Len=num_rows;\n-\t*num_dm=num_columns; \n-\n-\t//printf("original file size is %ld; number of dimensions is %ld\\n", *file_Len, *num_dm);\n-}\n-\n-\n-\n-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n-/************************************* Read the source file into uncomp_data **************************************/\n-void readsource(FILE *f_src, lo'..b'0;\n-\tlong j=0;\n-\n-\tlong *cluster_id;\n-\tlong *IDmapping; //this is to keep the original populationID of the center.txt\n-\n-\tdouble kmean_term=0;\n-\t\n-\tdouble **cluster_center;\n-\tdouble **orig_data;\n-\tdouble **normalized_data;\n-\t\t\n-/*\n-\t_strtime( tmpbuf );\n-    printf( "Starting time:\\t\\t\\t\\t%s\\n", tmpbuf );\n-\t_strdate( tmpbuf );\n-    printf( "Starting date:\\t\\t\\t\\t%s\\n", tmpbuf );\n-*/\n-\n-\tif (argc!=3)\n-\t{\n-\t\tprintf("usage: cent_adjust input_center input_data_file\\n");       \n-\t\texit(0);\n-\t}\t\n-\t\n-\n-\tf_src_ctr=fopen(argv[1],"r");\t\n-\t\n-\t//read source data\n-\tf_src=fopen(argv[2],"r");\n-\t\n-\tgetfileinfo(f_src, &file_Len, &num_dm, name_string, &time_id); //get the filelength, number of dimensions, and num/name of parameters\n-\n-\trewind(f_src); //reset data file pointer\t\n-\n-\torig_data = (double **)malloc(sizeof(double*)*file_Len);\n-\tmemset(orig_data,0,sizeof(double*)*file_Len);\n-\tfor (i=0;i<file_Len;i++)\n-\t{\n-\t\torig_data[i]=(double *)malloc(sizeof(double)*num_dm);\n-\t\tmemset(orig_data[i],0,sizeof(double)*num_dm);\n-\t}\n-\t\n-\treadsource(f_src, file_Len, num_dm, orig_data, time_id); //read the data;\n-\t\n-\tfclose(f_src);\n-\t/////////////////////////////////////////////////////////////////////////////\n-\tgetctrfileinfo(f_src_ctr, &num_clust); //get how many populations\n-\tnorm_used=0;\n-\tdist_used=0;\n-\tkmean_term=2;  //modified on Oct 16, 2009: changed kmean_term=1 to kmean_term=2\n-\n-\trewind(f_src_ctr); //reset center file pointer\n-\n-\t//read population center\n-\tcluster_center=(double **)malloc(sizeof(double*)*num_clust);\n-\tmemset(cluster_center,0,sizeof(double*)*num_clust);\n-\tfor (i=0;i<num_clust;i++)\n-\t{\n-\t\tcluster_center[i]=(double*)malloc(sizeof(double)*num_dm);\n-\t\tmemset(cluster_center[i],0,sizeof(double)*num_dm);\n-\t}\n-\tfor (i=0;i<num_clust;i++)\n-\t\tfor (j=0;j<num_dm;j++)\n-\t\t\tcluster_center[i][j]=0;\n-\n-\tIDmapping=(long *)malloc(sizeof(long)*num_clust);\n-\tmemset(IDmapping,0,sizeof(long)*num_clust);\n-\n-\treadcenter(f_src_ctr,num_clust,num_dm,cluster_center,IDmapping); //read population center\n-    fclose(f_src_ctr);\n-\n-\t/////////////////////////////////////////////////////////////////////////////\n-\tnormalized_data=(double **)malloc(sizeof(double*)*file_Len);\n-\tmemset(normalized_data,0,sizeof(double*)*file_Len);\n-\tfor (i=0;i<file_Len;i++)\n-\t{\n-\t\tnormalized_data[i]=(double *)malloc(sizeof(double)*num_dm);\n-\t\tmemset(normalized_data[i],0,sizeof(double)*num_dm);\n-\t}\n-\t\n-\ttran(orig_data, file_Len, num_dm, norm_used, normalized_data);\n-\t/************************************************* Compute number of clusters *************************************************/\n-\t\n-\tcluster_id=(long*)malloc(sizeof(long)*file_Len);\n-\tmemset(cluster_id,0,sizeof(long)*file_Len);\n-\n-\tassign_event(normalized_data,num_clust,dist_used,kmean_term,file_Len,num_dm,cluster_id,cluster_center,0);\n-\n-\t\n-\t//show(orig_data,cluster_id,file_Len,num_clust,num_dm,show_data,num_disp,name_string); \n-\tshow(orig_data, cluster_id, file_Len, num_clust, num_dm, name_string, IDmapping);\n-\n-\tf_cid=fopen("population_id.txt","w");\n-\n-\tfor (i=0;i<file_Len;i++)\n-\t\tfprintf(f_cid,"%ld\\n",IDmapping[cluster_id[i]]);\n-\t\t\n-\n-\tfclose(f_cid);\n- \n-\t//added April 16, 2009\n-\tf_mfi=fopen("MFI.txt","w");\n-\n-\tfor (i=0;i<num_clust;i++)\n-\t{\n-\t\tfprintf(f_mfi,"%ld\\t",IDmapping[i]);\n-\n-\t\tfor (j=0;j<num_dm;j++)\n-\t\t{\n-\t\t\tif (j==num_dm-1)\n-\t\t\t\tfprintf(f_mfi,"%.0f\\n",cluster_center[i][j]);\n-\t\t\telse\n-\t\t\t\tfprintf(f_mfi,"%.0f\\t",cluster_center[i][j]);\n-\t\t}\n-\t}\n-\tfclose(f_mfi);\n-\n-\t//ended April 16, 2009\n-\n-\tfor (i=0;i<num_clust;i++)\n-\t\tfree(cluster_center[i]);\n-\tfree(cluster_center);\n-\t\t\n-\n-\t/********************************************** Release memory ******************************************/\n-  \n-\tfor (i=0;i<file_Len;i++)\n-\t{\n-\t\tfree(orig_data[i]);\t\t\n-\t\tfree(normalized_data[i]);\n-\t}\n-\t\n-\tfree(orig_data);\n-\tfree(normalized_data);\n-\tfree(cluster_id);\n-\tfree(IDmapping);\n-\n-/*\n-\t_strtime( tmpbuf );\n-    printf( "Ending time:\\t\\t\\t\\t%s\\n", tmpbuf );\n-\t_strdate( tmpbuf );\n-    printf( "Ending date:\\t\\t\\t\\t%s\\n", tmpbuf );\n-*/\n-\n-}\n'
b
diff -r 81f9b44f5242 -r b6b4d08b6858 run_flock/src/find_connected.c
--- a/run_flock/src/find_connected.c Mon Feb 27 13:30:23 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,176 +0,0 @@
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
-
-//static const char *rcsid = "$Id: find_connected.c,v 1.1 2008/09/05 21:54:40 rpl Exp $";
-
-int find_connected(int **G, int num_dense_grids, int ndim, int *grid_clusterID);
-void depth_first(int startnode);
-
-void bail(const char *);        /* exits via abort */
-static void check_clusters(int *gcID, int ndense);
-static void merge_cluster(int from, int into);
-  
-
-/* Vars that will not change througout the depth-first recursion.  We
-   store them here to avoid endless replication on the stack. */
-static int **Gr=0;
-static int *gcID = 0;          /* grid cluster IDs */
-static int *cluster_count=0;   /* count of nodes per cluster */
-static int ndense=0;
-static int ndim=0;
-/* cid changes between depth-first searches, but is constant within a
-   single search, so it goes here. */
-static int cid=0;
-
-/* Find connected components in the graph of neighboring grids defined in G.
- *
- * Output:
- *
- * grid_clusterID[]  -- cluster to which each dense grid was assigned
- * return value      -- number of clusters assigned.
- */
-int find_connected(int **G, int n_dense_grids, int num_dm, int *grid_clusterID)
-{
-  int nclust=0;                  /* number of clusters found */
-  int i;
-  int *subfac;
-  int subval=0,nempty=0;
-    int clustid=0;
-  
-  size_t sz = n_dense_grids*sizeof(int); 
-  cluster_count = malloc(sz);
-  if(!cluster_count)
-    bail("find_connected: Unable to allocate %zd bytes.\n");
-  memset(cluster_count,0,sz);
-
-  /* set up the statics that will be used in the DFS */
-  Gr=G;
-  gcID = grid_clusterID;
-  ndense = n_dense_grids;
-  ndim = num_dm;
-
-  
-  for(i=0;i<ndense;++i)
-    grid_clusterID[i] = -1;
-
-  for(i=0;i<ndense;++i) {
-    if(grid_clusterID[i] < 0) {  /* grid hasn't been assigned yet */
-      cid = nclust++;
-      depth_first(i);
-    }
-  }
-
-#ifndef NDEBUG
-  check_clusters(gcID,ndense);
-#endif 
-  
-  /* At this point we probably have some clusters that are empty due to merging.
-     We want to compact the cluster numbering to eliminate the empty clusters. */
-
-  subfac = malloc(sz);
-  if(!subfac)
-    bail("find_connected: Unable to allocate %zd bytes.\n");
- subval=0;
- nempty=0;
-
-  /* cluster #i needs to have its ID decremented by 1 for each empty cluster with
-     ID < i.  Precaclulate the decrements in this loop: */
-  for(i=0;i<nclust;++i) {
-    //clustid = grid_clusterID[i];
-    if(cluster_count[i] == 0) {
-      subval++;
-      nempty++;
-    }
-    subfac[i] = subval;
-  }
-
-  /* Now apply the decrements to all of the dense grids */
-  for(i=0;i<ndense;++i) {
-   clustid = grid_clusterID[i];
-    grid_clusterID[i] -= subfac[clustid];
-  }
-
-#ifndef NDEBUG
-  //  check_clusters(gcID,ndense);
-#endif  
-  
-  /* correct the number of clusters found */
-  nclust -= nempty;
-
-  return nclust;
-}
-
-
-/* Do a depth-first search for a single connected component in graph
- * G.  Start from node, tag the nodes found with cid, and record
- * the tags in grid_clusterID.  Also, record the node count in
- * cluster_count.  If we find a node that has already been assigned to
- * a cluster, that means we're merging two clusters, so zero out the
- * old cid's node count.
- *
- * Note that our graph is constructed as a DAG, so we can be
- * guaranteed to terminate without checking for cycles.  
- *
- * Note2: this function can potentially recurse to depth = ndense.
- * Plan stack size accordingly.  
- *
- * Output:
- *
- * grid_clusterID[] -- array where we tag the nodes.
- * cluster_count[]  -- count of the number of nodes per cluster.
- */
-   
-void depth_first(int node)
-{
-  int i;
-
-  if(gcID[node] == cid)         // we're guaranteed no cycles, but it is possible to reach a node 
-    return;                     // through two different paths in the same cluster.  This early
-                                // return saves us some unneeded work.
-
-  /* Check to see if we are merging a cluster */
-  if(gcID[node] >= 0) {
-    /* We are, so zero the count for the old cluster. */
-    cluster_count[ gcID[node] ] = 0;  
-    merge_cluster(gcID[node], cid);
-    return;
-  }
-
-  /* Update for this node */
-  gcID[node] = cid;
-  cluster_count[cid]++;
-
-  /* Recursively search the child nodes */
-  for(i=0; i<ndim; ++i)
-    if(Gr[node][i] >= 0)      /* This is a child node */
-      depth_first(Gr[node][i]);
-}
-
-void bail(const char *msg)
-{
-  fprintf(stderr,"%s",msg);
-  abort();
-}
-
-
-static void check_clusters(int *gcID, int ndense)
-{
-  int i;
-
-  for(i=0; i<ndense; ++i)
-    if(gcID[i] < 0) {
-      fprintf(stderr,"faulty cluster id at i= %d\n",i);
-      abort();
-    }
-}
-
-static void merge_cluster(int from, int into)
-{
-  int i;
-
-  for(i=0; i<ndense; ++i)
-    if(gcID[i] == from)
-      gcID[i] = into;
-}
b
diff -r 81f9b44f5242 -r b6b4d08b6858 run_flock/src/flock1.c
--- a/run_flock/src/flock1.c Mon Feb 27 13:30:23 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,2400 +0,0 @@\n-/*****************************************************************************\n-\t\n-\tFLOCK: FLOw cytometry Clustering without K (Named by: Jamie A. Lee and Richard H. Scheuermann) \n-\t\n-\tAuthor: (Max) Yu Qian, Ph.D.\n-\t\n-\tCopyright: Scheuermann Lab, Dept. of Pathology, UTSW\n-\t\n-\tDevelopment: November 2005 ~ Forever\n-\n-\tAlgorithm Status: May 2007: Release 1.0\n-\n-\tUsage: flock data_file\n-\t\t    Note: the input file format must be channel values and the delimiter between two values must be a tab.\n-\n-    Changes made July 23, 2010: made errors to STDERR\n-\tChanges made Nov 4, 2010: added one more error (select_num_bin<min_grid) || (select_num_bin>max_grid) to STDERR;\n-\t                          MAX_GRID changed to 50 as larger than 50 seems not useful for any file we have got\n-\t\n-******************************************************************************/\n-#include <time.h>\n-#include <stdio.h>\n-#include <stdlib.h>\n-#include <math.h>\n-#include <string.h>\n-#include <sys/stat.h>\n-#include <unistd.h>\n-#include <assert.h>\n-\n-\n-#define DEBUG 0\n-#define LINE_LEN 1024\n-#define FILE_NAME_LEN 128\n-#define PARA_NAME_LEN 64\n-#define MAX_VALUE 1000000000\n-#define MIN_GRID 6\n-#define MAX_GRID 50\n-\n-#define NORM_METHOD 2 //2 if z-score; 0 if no normalization; 1 if min-max \n-#define KMEANS_TERM 100\n-//#define MAX_NUM_POP 30\n-\n-\n-int find_connected(int **G, int num_dense_grids, int ndim, int *grid_clusterID);\n-\n-/************* Read basic info of the source file ****************************/\n-void getfileinfo(FILE *f_src, int *file_Len, int *num_dm, char *name_string, int *time_ID)\n-{\n-  char src[LINE_LEN];\n-  char current_name[64];\n-  char prv;\n-\n-  int num_rows=0;\n-  int num_columns=0;\n-  int ch=\'\\n\';\n-  int prev=\'\\n\';\n-  int time_pos=0;\n-  int i=0;\n-  int j=0;\n-  int sw=0;\n-\n-  src[0]=\'\\0\';\n-  fgets(src, LINE_LEN, f_src);\n-\n-  if ((src[0]==\'F\') && (src[1]==\'C\') && (src[2]==\'S\'))\n-\t{\n-\t\tfprintf(stderr,"the correct input format is a tab-delimited txt file, instead of FCS file.\\n");\n-\t\tabort();\n-\t}\n-\n-  name_string[0]=\'\\0\';\n-  current_name[0]=\'\\0\';\n-  prv=\'\\n\';\n-\n-  // skip space and tab characters\n-  while ((src[i]==\' \') || (src[i]==\'\\t\'))\n-    i++;\n-\n-  // repeat until the end of line is reached\n-  while ((src[i]!=\'\\0\') && (src[i]!=\'\\n\') && (src[i]!=\'\\r\'))\n-    {\n-      current_name[j]=src[i];\n-\t\t\n-      if ((src[i]==\'\\t\') && (prv!=\'\\t\')) //a complete word\n-        {\n-          current_name[j]=\'\\0\';\n-\t\t\t\n-          if (0!=strcmp(current_name,"Time"))\n-            {\n-              num_columns++; //num_columns does not inlcude the column of Time\n-              time_pos++;\n-              if (sw) {\n-                  strcat(name_string,"\\t");\n-              }\n-              strcat(name_string,current_name); \n-              sw = 1;\n-            }\n-          else\n-            {\n-              *time_ID=time_pos;\n-            }\n-          \n-          \n-          current_name[0]=\'\\0\';\n-          j=0;\t\t\t\n-        }\t\t\n-\t\t\n-      if ((src[i]==\'\\t\') && (prv==\'\\t\')) //a duplicate tab or space\n-        {\n-          current_name[0]=\'\\0\';\n-          j=0;\n-        }\n-\t\t\n-      if (src[i]!=\'\\t\')\n-        j++;\n-\t\t\n-      prv=src[i];\n-      i++;\n-    }\n-\t\n-  if (prv!=\'\\t\') //the last one hasn\'t been retrieved\n-    {\n-      current_name[j]=\'\\0\';\n-      \n-      if (0!=strcmp(current_name,"Time"))\n-        {\n-          num_columns++;\n-          strcat(name_string,"\\t");\n-          strcat(name_string,current_name);\n-          time_pos++;\n-        }\n-      else\n-        {\n-          *time_ID=time_pos;\n-        }\n-      \n-      \n-    }\n-  if (DEBUG==1)\n-    {\n-      printf("time_ID is %d\\n",*time_ID);\n-      printf("name_string is %s\\n",name_string);\n-    }\n-\n-  //start computing # of rows\n-\n-  while ((ch = fgetc(f_src))!= EOF )\n-    {\n-      if (ch == \'\\n\')\n-        {\n-          ++num_rows;\n-        }\n-      prev = ch;\n-    }\n-  if (prev!=\'\\n\')\n-    ++num_rows;\n-\n-  //added on July 23, 2010\n-  if (num_rows<50)\n-  {\n-    fprintf(stderr,"Number of events '..b'lation_ID=(int*)malloc(sizeof(int)*file_Len);\n-  memset(all_population_ID,0,sizeof(int)*file_Len);\n-\n-  kmeans(normalized_data, num_population, KMEANS_TERM, file_Len, num_dm, all_population_ID, population_center);\n-  show(input_data, all_population_ID, file_Len, num_population, num_dm, para_name_string);\n-\n-  ID2Center_all(input_data,file_Len,num_dm,num_population,all_population_ID,population_center);\n-  \n-\n-  f_cid=fopen("population_id.txt","w");\n-  f_ctr=fopen("population_center.txt","w");\n-  f_out=fopen("coordinates.txt","w");\n-  f_results=fopen("flock_results.txt","w");\n-\n-/*\n-  f_parameters=fopen("parameters.txt","w");\n-  fprintf(f_parameters,"Number_of_Bins\\t%d\\n",num_bin);\n-  fprintf(f_parameters,"Density\\t%f\\n",aver_index);\n-  fclose(f_parameters);\n-*/\n-\n-  for (i=0;i<file_Len;i++)\n-\tfprintf(f_cid,"%d\\n",all_population_ID[i]+1); //all_population_ID[i] changed to all_population_ID[i]+1 to start from 1 instead of 0: April 16, 2009\n-\n-  /*\n-   * New to check for min/max to add to parameters.txt\n-   *\n-  */\n-  \n-  fprintf(f_out,"%s\\n",para_name_string);\n-  //fprintf(f_results,"%s\\tEvent\\tPopulation\\n",para_name_string);\n-  fprintf(f_results,"%s\\tPopulation\\n",para_name_string);\n-  for (i=0;i<file_Len;i++)\n-  {\n-\tfor (j=0;j<num_dm;j++)\n-\t{\n-\t\tif (input_data[i][j] < min) {\n-\t\t\tmin = (int)input_data[i][j];\n-\t\t}\n-\t\tif (input_data[i][j] > max) {\n-\t\t\tmax = (int)input_data[i][j];\n-\t\t}\n-\t\tif (j==num_dm-1)\n-\t\t{\n-\t\t\tfprintf(f_out,"%d\\n",(int)input_data[i][j]);\n-\t\t\tfprintf(f_results,"%d\\t",(int)input_data[i][j]);\n-\t\t}\n-\t\telse\n-\t\t{\n-\t\t\tfprintf(f_out,"%d\\t",(int)input_data[i][j]);\n-\t\t\tfprintf(f_results,"%d\\t",(int)input_data[i][j]);\n-\t\t}\n-\t}\n-\t//fprintf(f_results,"%d\\t",i + 1);\n-\tfprintf(f_results,"%d\\n",all_population_ID[i]+1); //all_population_ID[i] changed to all_population_ID[i]+1 to start from 1 instead of 0: April 16, 2009\n-  }\n-\n-/*\n-  f_parameters=fopen("parameters.txt","w");\n-  fprintf(f_parameters,"Number_of_Bins\\t%d\\n",num_bin);\n-  fprintf(f_parameters,"Density\\t%d\\n",den_t_event);\n-  fprintf(f_parameters,"Min\\t%d\\n",min);\n-  fprintf(f_parameters,"Max\\t%d\\n",max);\n-  fclose(f_parameters);\n-*/\n-\n-  f_properties=fopen("fcs.properties","w");\n-  fprintf(f_properties,"Bins=%d\\n",num_bin);\n-  fprintf(f_properties,"Density=%d\\n",den_t_event);\n-  fprintf(f_properties,"Min=%d\\n",min);\n-  fprintf(f_properties,"Max=%d\\n",max);\n-  fprintf(f_properties,"Populations=%d\\n",num_population);\n-  fprintf(f_properties,"Events=%d\\n",file_Len);\n-  fprintf(f_properties,"Markers=%d\\n",num_dm);\n-  fclose(f_properties);\n-\n-\n-  for (i=0;i<num_population;i++) {\n-\t/* Add if we want to include population id in the output\n-\t*/\n-\tfprintf(f_ctr,"%d\\t",i+1);  //i changed to i+1 to start from 1 instead of 0: April 16, 2009\n-\n-\tfor (j=0;j<num_dm;j++) {\n-\t\tif (j==num_dm-1)\n-\t\t\tfprintf(f_ctr,"%.0f\\n",population_center[i][j]);\n-\t\telse\n-\t\t\tfprintf(f_ctr,"%.0f\\t",population_center[i][j]);\n-\t}\n-  }\n-\n-  \t//added April 16, 2009\n-\tf_mfi=fopen("MFI.txt","w");\n-\n-\tfor (i=0;i<num_population;i++)\n-\t{\n-\t\tfprintf(f_mfi,"%d\\t",i+1);\n-\n-\t\tfor (j=0;j<num_dm;j++)\n-\t\t{\n-\t\t\tif (j==num_dm-1)\n-\t\t\t\tfprintf(f_mfi,"%.0f\\n",population_center[i][j]);\n-\t\t\telse\n-\t\t\t\tfprintf(f_mfi,"%.0f\\t",population_center[i][j]);\n-\t\t}\n-\t}\n-\tfclose(f_mfi);\n-\n-\t//ended April 16, 2009\n-\t\t\t\n-  fclose(f_cid);\n-  fclose(f_ctr);\n-  fclose(f_out);\n-  fclose(f_results);\n-\n-\n-  for (i=0;i<num_population;i++)\n-  {\n-\tfree(population_center[i]);\n-  }\n-  free(population_center);\n- \n-\n-  for (i=0;i<file_Len;i++)\n-    free(normalized_data[i]);\n-  free(normalized_data);\t\n-\t\n-  free(grid_populationID);\n-\n-  free(cluster_populationID);\n-  free(grid_clusterID);\n-  free(cluster_ID);\n-\n-  for (i=0;i<file_Len;i++)\n-    free(input_data[i]);\n-  free(input_data);\n-\n-  free(grid_ID);\n-  free(population_ID);\n-  free(all_population_ID);\n-  free(eventID_To_denseventID);\n-\t\t\n-  ///////////////////////////////////////////////////////////\n-  printf("Ending time:\\t\\t\\t\\t");\n-  fflush(stdout);\n-  system("/bin/date");\n-\n-  return 0;\n-\n-}\n'
b
diff -r 81f9b44f5242 -r b6b4d08b6858 run_flock/src/flock2.c
--- a/run_flock/src/flock2.c Mon Feb 27 13:30:23 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b"@@ -1,3405 +0,0 @@\n-///////////\n-// Changes made:\n-// 1. Added another parameter: number of populations\n-// 2. Added a hierarchical merging step based on density change between centroids of two hyper-regions\n-// 3. Picked the longest dimensions between the population centroids to judge whether the two parts should be merged\n-// 4. Removed checking time parameter\n-// 5. Output error to stderr\n-// 6. Fixed the bug of density threshold always = 3\n-// 7. Added another error (select_num_bin<min_grid) || (select_num_bin>max_grid) to STDERR\n-// 8. Fixed a bug for 2D data by using K=e*K\n-// 9. Added some header files, may not be necessary\n-// 10. Added a lower bound (at least two) for number of populations\n-/***************************************************************************************************************************************\n-\t\n-\tFLOCK: FLOw cytometry Clustering without K (Named by: Jamie A. Lee and Richard H. Scheuermann) \n-\t\n-\tAuthor: (Max) Yu Qian, Ph.D.\n-\t\n-\tCopyright: Scheuermann Lab, Dept. of Pathology, UTSW\n-\t\n-\tDevelopment: November 2005 ~ Forever\n-\n-\tStatus: July 2010: Release 2.0\n-\n-\tUsage: flock data_file\n-\t\t    Note: the input file format must be channel values and the delimiter between two values must be a tab.\n-\n-\n-    \t\n-****************************************************************************************************************************************/\n-\n-#include <time.h>\n-#include <stdio.h>\n-#include <stdlib.h>\n-#include <math.h>\n-#include <string.h>\n-#include <sys/stat.h>\n-#include <unistd.h>\n-#include <assert.h>\n-\n-\n-\n-#define DEBUG 0\n-#define LINE_LEN 1024\n-#define FILE_NAME_LEN 128\n-#define PARA_NAME_LEN 64\n-#define MAX_VALUE 1000000000\n-#define MIN_GRID 6\n-#define MAX_GRID 50\n-#define E_T 1.0\n-\n-#define NORM_METHOD 2 //2 if z-score; 0 if no normalization; 1 if min-max \n-#define KMEANS_TERM 10 \n-#define MAX_POP_NUM 128\n-\n-#ifndef max\n-    #define max( a, b ) ( ((a) > (b)) ? (a) : (b) )\n-#endif\n-\n-#ifndef min\n-    #define min( a, b ) ( ((a) < (b)) ? (a) : (b) )\n-#endif\n-\n-static long **Gr=0;\n-static long *gcID = 0;          /* grid cluster IDs */\n-static long *cluster_count=0;   /* count of nodes per cluster */\n-static long ndense=0;\n-static long ndim=0;\n-/* cid changes between depth-first searches, but is constant within a\n-   single search, so it goes here. */\n-static long cid=0;\n-/* Do a depth-first search for a single connected component in graph\n- * G.  Start from node, tag the nodes found with cid, and record\n- * the tags in grid_clusterID.  Also, record the node count in\n- * cluster_count.  If we find a node that has already been assigned to\n- * a cluster, that means we're merging two clusters, so zero out the\n- * old cid's node count.\n- *\n- * Note that our graph is constructed as a DAG, so we can be\n- * guaranteed to terminate without checking for cycles.  \n- *\n- * Note2: this function can potentially recurse to depth = ndense.\n- * Plan stack size accordingly.  \n- *\n- * Output:\n- *\n- * grid_clusterID[] -- array where we tag the nodes.\n- * cluster_count[]  -- count of the number of nodes per cluster.\n- */\n-static void merge_cluster(long from, long into)\n-{\n-  int i;\n-\n-  for(i=0; i<ndense; ++i)\n-    if(gcID[i] == from)\n-      gcID[i] = into;\n-}\n-   \n-void depth_first(long node)\n-{\n-  long i;\n-\n-  if(gcID[node] == cid)         // we're guaranteed no cycles, but it is possible to reach a node \n-    return;                     // through two different paths in the same cluster.  This early\n-                                // return saves us some unneeded work.\n-\n-  /* Check to see if we are merging a cluster */\n-  if(gcID[node] >= 0) {\n-    /* We are, so zero the count for the old cluster. */\n-    cluster_count[ gcID[node] ] = 0;  \n-    merge_cluster(gcID[node], cid);\n-    return;\n-  }\n-\n-  /* Update for this node */\n-  gcID[node] = cid;\n-  cluster_count[cid]++;\n-\n-  /* Recursively search the child nodes */\n-  for(i=0; i<ndim; ++i)\n-    if(Gr[node][i] >= 0)      /* This is a child node */\n"..b'ring);\n-\n-  ID2Center_all(input_data,file_Len,num_dm,num_real_pop,all_population_ID,new_population_center);\n-  \n-\n-  f_cid=fopen("population_id.txt","w");\n-  f_ctr=fopen("population_center.txt","w");\n-  f_out=fopen("coordinates.txt","w");\n-  f_results=fopen("flock_results.txt","w");\n-\n-/*\n-  f_parameters=fopen("parameters.txt","w");\n-  fprintf(f_parameters,"Number_of_Bins\\t%d\\n",num_bin);\n-  fprintf(f_parameters,"Density\\t%f\\n",aver_index);\n-  fclose(f_parameters);\n-*/\n-\n-  for (i=0;i<file_Len;i++)\n-\tfprintf(f_cid,"%ld\\n",all_population_ID[i]+1); //all_population_ID[i] changed to all_population_ID[i]+1 to start from 1 instead of 0: April 16, 2009\n-\n-  /*\n-   * New to check for min/max to add to parameters.txt\n-   *\n-  */\n-  \n-  fprintf(f_out,"%s\\n",para_name_string);\n-  //fprintf(f_results,"%s\\tEvent\\tPopulation\\n",para_name_string);\n-  fprintf(f_results,"%s\\tPopulation\\n",para_name_string);\n-  for (i=0;i<file_Len;i++)\n-  {\n-\tfor (j=0;j<num_dm;j++)\n-\t{\n-\t\tif (input_data[i][j] < min) {\n-\t\t\tmin = (int)input_data[i][j];\n-\t\t}\n-\t\tif (input_data[i][j] > max) {\n-\t\t\tmax = (int)input_data[i][j];\n-\t\t}\n-\t\tif (j==num_dm-1)\n-\t\t{\n-\t\t\tfprintf(f_out,"%d\\n",(int)input_data[i][j]);\n-\t\t\tfprintf(f_results,"%d\\t",(int)input_data[i][j]);\n-\t\t}\n-\t\telse\n-\t\t{\n-\t\t\tfprintf(f_out,"%d\\t",(int)input_data[i][j]);\n-\t\t\tfprintf(f_results,"%d\\t",(int)input_data[i][j]);\n-\t\t}\n-\t}\n-\t//fprintf(f_results,"%ld\\t",i + 1);\n-\tfprintf(f_results,"%ld\\n",all_population_ID[i]+1); //all_population_ID[i] changed to all_population_ID[i]+1 to start from 1 instead of 0: April 16, 2009\n-  }\n-\n-/*\n-  f_parameters=fopen("parameters.txt","w");\n-  fprintf(f_parameters,"Number_of_Bins\\t%ld\\n",num_bin);\n-  fprintf(f_parameters,"Density\\t%d\\n",den_t_event);\n-  fprintf(f_parameters,"Min\\t%d\\n",min);\n-  fprintf(f_parameters,"Max\\t%d\\n",max);\n-  fclose(f_parameters);\n-*/\n-\n-  f_properties=fopen("fcs.properties","w");\n-  fprintf(f_properties,"Bins=%ld\\n",num_bin);\n-  fprintf(f_properties,"Density=%d\\n",den_t_event);\n-  fprintf(f_properties,"Min=%d\\n",min);\n-  fprintf(f_properties,"Max=%d\\n",max);\n-  fprintf(f_properties,"Populations=%ld\\n",num_real_pop);\n-  fprintf(f_properties,"Events=%ld\\n",file_Len);\n-  fprintf(f_properties,"Markers=%ld\\n",num_dm);\n-  fclose(f_properties);\n-\n-  for (i=0;i<num_real_pop;i++) {\n-\t/* Add if we want to include population id in the output\n-\t*/\n-\tfprintf(f_ctr,"%ld\\t",i+1);  //i changed to i+1 to start from 1 instead of 0: April 16, 2009\n-\n-\tfor (j=0;j<num_dm;j++) {\n-\t\tif (j==num_dm-1)\n-\t\t\tfprintf(f_ctr,"%.0f\\n",new_population_center[i][j]);\n-\t\telse\n-\t\t\tfprintf(f_ctr,"%.0f\\t",new_population_center[i][j]);\n-\t}\n-  }\n-\n-  \t//added April 16, 2009\n-\tf_mfi=fopen("MFI.txt","w");\n-\n-\tfor (i=0;i<num_real_pop;i++)\n-\t{\n-\t\tfprintf(f_mfi,"%ld\\t",i+1);\n-\n-\t\tfor (j=0;j<num_dm;j++)\n-\t\t{\n-\t\t\tif (j==num_dm-1)\n-\t\t\t\tfprintf(f_mfi,"%.0f\\n",new_population_center[i][j]);\n-\t\t\telse\n-\t\t\t\tfprintf(f_mfi,"%.0f\\t",new_population_center[i][j]);\n-\t\t}\n-\t}\n-\tfclose(f_mfi);\n-\n-\t//ended April 16, 2009\n-\t\t\t\n-  fclose(f_cid);\n-  fclose(f_ctr);\n-  fclose(f_out);\n-  fclose(f_results);\n-\n-\n-  for (i=0;i<num_population;i++)\n-  \tfree(population_center[i]);\n-  \n-  free(population_center);\n- \n-  for (i=0;i<num_real_pop;i++)\n-\t  free(new_population_center[i]);\n-  \n-  free(new_population_center);\n-\n-  for (i=0;i<file_Len;i++)\n-    free(normalized_data[i]);\n-  free(normalized_data);\t\n-\t\n-  free(grid_populationID);\n-\n-  free(cluster_populationID);\n-  free(grid_clusterID);\n-  free(cluster_ID);\n-\n-  for (i=0;i<file_Len;i++)\n-    free(input_data[i]);\n-  free(input_data);\n-\n-  free(grid_ID);\n-  free(population_ID);\n-  free(all_population_ID);\n-  free(eventID_To_denseventID);\n-\t\t\n-  ///////////////////////////////////////////////////////////\n-  printf("Ending time:\\t\\t\\t\\t");\n-  fflush(stdout);\n-  system("/bin/date");\n-\n-  /*\n-   * Windows version\n-  _strtime( tmpbuf );\n-  printf( "Ending time:\\t\\t\\t\\t%s\\n", tmpbuf );\n-  _strdate( tmpbuf );\n-  printf( "Ending date:\\t\\t\\t\\t%s\\n", tmpbuf );\n- */\n-  \n-  return 0;\n-}\n'
b
diff -r 81f9b44f5242 -r b6b4d08b6858 run_flock/static/images/flock_logo.png
b
Binary file run_flock/static/images/flock_logo.png has changed
b
diff -r 81f9b44f5242 -r b6b4d08b6858 run_flock/test-data/input.flowtext
--- a/run_flock/test-data/input.flowtext Mon Feb 27 13:30:23 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
b'@@ -1,20000 +0,0 @@\n-FSC\tSSC\tCD4\tCCR3\tCD8\tCCR7\n-328\t122\t547\t94\t85\t93\n-581\t1023\t143\t235\t270\t106\n-427\t172\t140\t200\t631\t300\n-363\t92\t526\t0\t140\t5\n-416\t113\t485\t22\t157\t226\n-317\t100\t488\t165\t83\t39\n-636\t436\t439\t143\t81\t217\n-262\t49\t395\t0\t42\t171\n-332\t147\t534\t241\t142\t43\n-567\t454\t305\t30\t168\t236\n-333\t138\t104\t0\t612\t225\n-359\t100\t530\t132\t63\t100\n-298\t85\t480\t253\t0\t171\n-392\t123\t90\t176\t623\t182\n-303\t112\t0\t115\t84\t64\n-591\t948\t188\t176\t247\t130\n-687\t535\t422\t301\t156\t230\n-372\t151\t524\t182\t16\t273\n-420\t180\t555\t88\t0\t119\n-401\t182\t104\t76\t103\t138\n-571\t1023\t364\t461\t377\t463\n-398\t169\t92\t126\t668\t312\n-378\t152\t552\t114\t125\t92\n-352\t108\t528\t174\t47\t28\n-714\t391\t449\t0\t210\t257\n-524\t497\t106\t106\t180\t244\n-563\t1023\t366\t471\t397\t460\n-407\t93\t80\t145\t579\t306\n-358\t129\t73\t257\t604\t268\n-1023\t1023\t479\t406\t385\t351\n-1023\t1023\t455\t536\t472\t508\n-474\t172\t563\t0\t160\t111\n-577\t1023\t164\t302\t258\t219\n-348\t73\t521\t212\t0\t142\n-294\t79\t470\t43\t112\t293\n-369\t197\t0\t197\t185\t124\n-389\t121\t71\t179\t637\t297\n-589\t895\t180\t184\t246\t239\n-432\t883\t8\t220\t177\t128\n-601\t1004\t162\t221\t231\t128\n-353\t137\t539\t196\t123\t63\n-357\t127\t40\t203\t520\t174\n-326\t128\t483\t194\t67\t34\n-286\t74\t27\t78\t546\t266\n-394\t158\t130\t82\t596\t314\n-389\t224\t100\t113\t236\t104\n-294\t77\t479\t270\t0\t47\n-556\t946\t156\t211\t299\t177\n-363\t117\t539\t199\t132\t62\n-769\t1023\t189\t288\t291\t28\n-558\t334\t325\t185\t186\t227\n-760\t1023\t181\t271\t239\t258\n-421\t243\t113\t90\t215\t181\n-513\t283\t263\t241\t126\t124\n-686\t935\t227\t267\t223\t109\n-418\t137\t104\t127\t649\t260\n-322\t115\t527\t0\t75\t70\n-563\t1023\t165\t177\t212\t224\n-620\t1023\t238\t267\t176\t206\n-766\t1023\t347\t411\t384\t191\n-378\t159\t41\t186\t637\t245\n-598\t1023\t402\t490\t417\t399\n-349\t142\t0\t191\t643\t286\n-373\t102\t544\t147\t0\t215\n-404\t138\t559\t267\t236\t133\n-277\t47\t486\t242\t61\t120\n-375\t113\t542\t122\t113\t23\n-695\t849\t168\t230\t238\t209\n-466\t185\t569\t184\t112\t238\n-393\t114\t581\t131\t0\t118\n-574\t1023\t127\t275\t245\t207\n-618\t1023\t129\t271\t228\t230\n-605\t1006\t213\t204\t220\t220\n-495\t605\t83\t155\t167\t225\n-716\t807\t131\t269\t126\t129\n-607\t1023\t147\t294\t253\t219\n-392\t236\t484\t237\t29\t106\n-551\t910\t379\t822\t363\t417\n-383\t153\t0\t0\t643\t286\n-1023\t1023\t465\t336\t347\t366\n-316\t233\t31\t209\t140\t307\n-681\t1023\t284\t324\t280\t220\n-418\t143\t553\t171\t98\t195\n-361\t87\t26\t0\t618\t307\n-419\t177\t91\t153\t277\t199\n-598\t984\t87\t260\t246\t263\n-634\t1023\t88\t158\t178\t156\n-595\t1023\t154\t238\t284\t247\n-388\t203\t544\t0\t149\t126\n-354\t159\t504\t210\t0\t152\n-294\t76\t141\t0\t29\t255\n-328\t99\t468\t177\t171\t44\n-283\t128\t463\t112\t0\t126\n-673\t1023\t156\t262\t211\t40\n-409\t115\t515\t217\t52\t193\n-321\t102\t514\t0\t62\t135\n-279\t83\t435\t174\t0\t267\n-565\t1017\t67\t233\t210\t238\n-339\t123\t538\t60\t99\t73\n-343\t148\t44\t134\t615\t235\n-390\t130\t86\t82\t635\t220\n-283\t52\t423\t52\t63\t69\n-548\t843\t101\t49\t239\t133\n-1023\t1023\t307\t345\t357\t285\n-580\t1019\t105\t263\t222\t286\n-597\t1023\t234\t215\t225\t89\n-441\t159\t546\t269\t33\t164\n-330\t101\t531\t0\t59\t14\n-373\t170\t53\t131\t84\t0\n-338\t117\t261\t0\t80\t68\n-398\t155\t144\t123\t616\t223\n-615\t460\t273\t253\t171\t14\n-773\t583\t406\t246\t187\t289\n-369\t121\t556\t167\t0\t175\n-379\t104\t505\t0\t0\t215\n-369\t111\t68\t142\t299\t190\n-358\t102\t552\t190\t18\t169\n-448\t167\t99\t0\t0\t18\n-594\t270\t154\t167\t707\t397\n-501\t193\t147\t0\t39\t199\n-726\t980\t187\t195\t221\t192\n-373\t140\t554\t20\t0\t43\n-423\t152\t116\t0\t591\t142\n-338\t129\t36\t0\t597\t202\n-371\t104\t568\t49\t139\t130\n-353\t112\t550\t48\t0\t95\n-351\t118\t498\t251\t44\t206\n-788\t1023\t124\t266\t221\t278\n-346\t138\t510\t206\t0\t128\n-304\t90\t467\t74\t0\t194\n-655\t530\t275\t285\t246\t309\n-356\t116\t539\t79\t0\t96\n-356\t138\t67\t0\t645\t250\n-656\t1023\t200\t274\t318\t286\n-817\t1023\t155\t266\t240\t173\n-370\t80\t74\t196\t532\t246\n-350\t128\t540\t0\t146\t77\n-691\t1023\t0\t283\t190\t277\n-631\t302\t459\t156\t164\t229\n-645\t285\t388\t205\t187\t196\n-389\t185\t160\t28\t664\t319\n-413\t152\t22\t0\t645\t66\n-464\t230\t97\t170\t164\t109\n-328\t93\t0\t0\t436\t206\n-956\t391\t578\t205\t288\t255\n-335\t141\t520\t103\t21\t155\n-588\t1009\t177\t271\t237\t206\n-427\t132\t549\t1\t68\t270\n-779\t1023\t121\t267\t274\t283\n-599\t933\t192\t228\t173\t256\n-688\t1023\t132\t304\t256\t64\n-333\t79\t493\t123\t8\t128\n-391\t193\t137\t189\t649\t313\n-371\t166\t102\t125\t124\t227\n-690\t931\t174\t282\t264\t161\n-277\t155\t2\t78\t0\t91\n-430\t131\t545\t72\t155\t316\n-361\t146\t26\t73\t659\t267\n-340\t129\t504\t152\t0\t161\n-357\t152\t59\t65\t569\t205\n-620\t1023\t185\t263\t224\t239\n-691\t503\t359\t13\t179\t298\n-365\t206\t523\t174\t0\t162\n-863\t1023\t179\t286\t250\t171\n-367\t92\t478\t159\t132\t126\n-503\t589\t153\t294\t127\t2'..b'\t1023\t222\t198\t274\t293\n-567\t1023\t356\t437\t355\t441\n-414\t150\t138\t100\t649\t325\n-658\t979\t191\t303\t213\t128\n-721\t1023\t166\t260\t318\t232\n-566\t954\t119\t266\t279\t311\n-383\t190\t512\t211\t131\t125\n-367\t108\t523\t0\t83\t122\n-404\t164\t101\t192\t627\t262\n-402\t140\t175\t129\t545\t249\n-376\t156\t548\t180\t33\t219\n-656\t1023\t122\t250\t290\t130\n-342\t92\t42\t51\t652\t337\n-611\t290\t261\t179\t206\t256\n-327\t98\t509\t117\t0\t209\n-324\t105\t532\t166\t0\t254\n-373\t216\t73\t334\t81\t154\n-584\t1023\t116\t219\t126\t250\n-351\t125\t540\t214\t0\t196\n-318\t181\t76\t82\t52\t26\n-327\t114\t510\t220\t0\t57\n-945\t1023\t234\t319\t308\t197\n-412\t133\t564\t199\t100\t165\n-436\t259\t502\t164\t64\t155\n-815\t1023\t120\t292\t223\t136\n-810\t1023\t258\t296\t283\t224\n-420\t91\t525\t1\t0\t22\n-443\t198\t555\t129\t156\t245\n-369\t121\t541\t40\t114\t110\n-494\t295\t147\t150\t128\t103\n-637\t1012\t183\t266\t267\t83\n-375\t164\t106\t166\t642\t239\n-394\t199\t75\t76\t597\t272\n-665\t1023\t195\t223\t251\t195\n-362\t107\t551\t10\t0\t0\n-704\t1023\t206\t175\t191\t267\n-338\t97\t464\t139\t106\t176\n-325\t90\t521\t17\t0\t69\n-379\t212\t526\t140\t85\t191\n-424\t163\t565\t27\t190\t98\n-376\t126\t99\t56\t622\t238\n-398\t190\t124\t150\t628\t269\n-349\t113\t80\t76\t648\t202\n-647\t1019\t154\t245\t221\t240\n-791\t1023\t146\t161\t183\t137\n-363\t169\t548\t129\t91\t252\n-433\t248\t99\t159\t152\t225\n-346\t115\t516\t155\t0\t132\n-758\t1023\t195\t258\t269\t230\n-330\t158\t64\t0\t56\t234\n-374\t119\t548\t146\t0\t22\n-362\t211\t550\t232\t0\t214\n-687\t1023\t194\t282\t197\t115\n-489\t209\t0\t144\t262\t43\n-594\t1023\t343\t500\t375\t406\n-329\t130\t535\t11\t49\t98\n-829\t1023\t186\t238\t227\t176\n-326\t178\t44\t182\t621\t203\n-609\t1023\t99\t225\t206\t183\n-315\t104\t505\t88\t0\t118\n-380\t185\t112\t2\t632\t253\n-709\t491\t332\t198\t232\t159\n-422\t138\t564\t187\t0\t263\n-359\t168\t516\t4\t84\t135\n-766\t1023\t167\t226\t215\t223\n-693\t1023\t201\t291\t238\t121\n-373\t127\t462\t124\t87\t57\n-590\t965\t152\t114\t195\t265\n-582\t375\t413\t171\t121\t232\n-606\t1023\t179\t213\t201\t226\n-358\t96\t63\t164\t593\t283\n-380\t112\t562\t102\t142\t0\n-382\t90\t521\t73\t121\t110\n-351\t95\t540\t0\t178\t127\n-541\t1023\t321\t447\t380\t428\n-331\t176\t497\t172\t0\t141\n-682\t1023\t175\t327\t242\t228\n-378\t114\t532\t148\t0\t135\n-334\t113\t511\t200\t46\t211\n-362\t84\t526\t102\t0\t185\n-791\t1023\t197\t279\t314\t236\n-356\t126\t529\t0\t43\t138\n-696\t1023\t130\t274\t235\t332\n-722\t1023\t190\t260\t250\t237\n-376\t94\t544\t104\t0\t99\n-415\t147\t525\t0\t189\t102\n-641\t950\t91\t250\t244\t212\n-387\t124\t538\t23\t139\t4\n-458\t103\t513\t0\t0\t106\n-414\t126\t86\t95\t567\t171\n-559\t919\t160\t218\t138\t193\n-572\t895\t156\t49\t236\t47\n-381\t111\t510\t93\t0\t95\n-299\t143\t11\t0\t95\t58\n-585\t1023\t197\t221\t216\t193\n-638\t1023\t225\t254\t180\t157\n-369\t162\t540\t81\t0\t56\n-599\t915\t77\t255\t248\t124\n-686\t1023\t89\t257\t217\t232\n-578\t1023\t83\t207\t216\t126\n-364\t120\t503\t0\t153\t225\n-600\t1018\t153\t222\t275\t38\n-383\t192\t101\t229\t624\t224\n-383\t130\t532\t0\t67\t107\n-328\t146\t23\t138\t0\t116\n-272\t75\t99\t154\t220\t133\n-323\t171\t96\t61\t146\t0\n-337\t81\t506\t10\t0\t150\n-290\t151\t0\t0\t106\t159\n-661\t1023\t213\t292\t238\t295\n-590\t1023\t216\t252\t264\t276\n-512\t263\t118\t0\t213\t348\n-315\t126\t502\t269\t48\t98\n-276\t85\t479\t104\t40\t102\n-378\t81\t548\t167\t0\t58\n-387\t154\t0\t190\t656\t362\n-602\t1023\t143\t256\t247\t38\n-341\t142\t530\t7\t89\t46\n-691\t1023\t141\t212\t189\t204\n-576\t1006\t135\t209\t251\t216\n-567\t849\t120\t157\t87\t213\n-705\t1023\t189\t282\t279\t330\n-985\t1023\t421\t292\t257\t220\n-651\t1023\t181\t285\t202\t201\n-693\t1023\t213\t300\t221\t225\n-408\t113\t545\t183\t210\t104\n-418\t143\t545\t0\t82\t126\n-384\t112\t522\t111\t76\t109\n-275\t48\t394\t0\t131\t0\n-359\t113\t42\t80\t600\t163\n-357\t169\t154\t138\t649\t283\n-400\t224\t108\t227\t31\t107\n-346\t88\t82\t84\t196\t98\n-323\t124\t534\t0\t186\t183\n-374\t103\t541\t142\t101\t52\n-380\t105\t508\t170\t126\t313\n-353\t196\t117\t115\t0\t164\n-359\t113\t511\t259\t0\t141\n-377\t137\t558\t11\t0\t14\n-623\t423\t459\t227\t147\t40\n-389\t149\t96\t50\t640\t263\n-543\t1023\t144\t249\t187\t104\n-691\t982\t85\t264\t194\t206\n-627\t1023\t157\t238\t216\t193\n-577\t1023\t165\t258\t299\t198\n-402\t131\t569\t0\t124\t0\n-337\t91\t506\t231\t0\t49\n-636\t870\t91\t227\t96\t172\n-356\t125\t58\t0\t621\t308\n-390\t190\t46\t88\t665\t313\n-351\t68\t529\t86\t0\t56\n-623\t475\t365\t79\t157\t281\n-335\t74\t512\t209\t49\t270\n-496\t194\t105\t202\t427\t25\n-614\t1023\t178\t280\t196\t117\n-381\t84\t545\t101\t0\t140\n-289\t93\t425\t0\t28\t68\n-385\t240\t52\t168\t638\t277\n-322\t162\t103\t0\t52\t61\n-343\t126\t488\t99\t187\t276\n-362\t197\t105\t68\t0\t2\n-378\t99\t527\t0\t0\t116\n-347\t107\t522\t0\t0\t200\n-468\t198\t137\t99\t341\t111\n-572\t967\t57\t255\t159\t220\n-608\t1023\t115\t247\t174\t266\n-637\t1023\t203\t289\t255\t175\n-649\t902\t155\t165\t213\t262\n-322\t148\t0\t187\t87\t115\n'
b
diff -r 81f9b44f5242 -r b6b4d08b6858 run_flock/test-data/mfi.flowmfi
--- a/run_flock/test-data/mfi.flowmfi Mon Feb 27 13:30:23 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
@@ -1,31 +0,0 @@
-Population FSC SSC CD4 CCR3 CD8 CCR7
-1 357 117 517 12 57 111
-2 333 152 69 20 69 106
-3 355 174 76 152 79 77
-4 421 381 147 402 140 186
-5 372 124 524 227 51 131
-6 370 150 75 26 618 264
-7 358 118 513 119 57 114
-8 378 207 99 127 120 218
-9 360 121 518 179 51 38
-10 384 158 83 154 620 272
-11 367 152 70 98 583 164
-12 414 146 527 208 71 282
-13 374 126 520 150 57 196
-14 387 184 91 96 338 101
-15 355 118 515 27 58 34
-16 369 124 516 20 70 188
-17 411 147 530 41 86 301
-18 675 453 385 196 184 256
-19 613 988 153 256 222 257
-20 620 986 151 255 224 180
-21 745 1015 190 274 255 261
-22 655 987 153 244 224 70
-23 540 926 347 485 363 413
-24 766 1012 181 267 243 163
-25 966 965 328 323 295 331
-26 650 392 384 179 171 121
-27 612 965 145 152 213 228
-28 578 934 128 172 209 129
-29 979 1010 437 523 406 456
-30 749 858 535 834 564 580
b
diff -r 81f9b44f5242 -r b6b4d08b6858 run_flock/test-data/mfi2.flowmfi
--- a/run_flock/test-data/mfi2.flowmfi Mon Feb 27 13:30:23 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
@@ -1,15 +0,0 @@
-Population FSC SSC CD4 CCR3 CD8 CCR7
-1 367 123 521 108 59 131
-2 360 183 77 104 121 127
-3 375 154 77 95 610 244
-4 361 129 289 89 84 93
-5 648 399 415 19 173 207
-6 695 472 397 233 188 255
-7 659 980 162 242 229 197
-8 442 383 325 616 334 397
-9 651 402 390 178 171 142
-10 574 983 351 479 362 412
-11 493 634 496 864 562 577
-12 509 341 169 224 161 383
-13 1007 976 326 320 298 306
-14 996 1013 454 536 426 469
b
diff -r 81f9b44f5242 -r b6b4d08b6858 run_flock/test-data/mfi3.flowmfi
--- a/run_flock/test-data/mfi3.flowmfi Mon Feb 27 13:30:23 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
@@ -1,10 +0,0 @@
-Population FSC SSC CD4 CCR3 CD8 CCR7
-1 375 155 78 95 607 244
-2 366 123 519 189 53 95
-3 357 178 79 99 116 124
-4 387 132 522 110 67 234
-5 653 422 372 195 177 212
-6 357 118 513 28 60 95
-7 630 966 148 227 219 135
-8 724 937 380 497 376 426
-9 694 997 177 257 239 247
b
diff -r 81f9b44f5242 -r b6b4d08b6858 run_flock/test-data/out1.flowclr
--- a/run_flock/test-data/out1.flowclr Mon Feb 27 13:30:23 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
b'@@ -1,20000 +0,0 @@\n-FSC\tSSC\tCD4\tCCR3\tCD8\tCCR7\tPopulation\n-328\t122\t547\t94\t85\t93\t7\n-581\t1023\t143\t235\t270\t106\t22\n-427\t172\t140\t200\t631\t300\t10\n-363\t92\t526\t0\t140\t5\t15\n-416\t113\t485\t22\t157\t226\t16\n-317\t100\t488\t165\t83\t39\t9\n-636\t436\t439\t143\t81\t217\t18\n-262\t49\t395\t0\t42\t171\t16\n-332\t147\t534\t241\t142\t43\t9\n-567\t454\t305\t30\t168\t236\t18\n-333\t138\t104\t0\t612\t225\t6\n-359\t100\t530\t132\t63\t100\t7\n-298\t85\t480\t253\t0\t171\t5\n-392\t123\t90\t176\t623\t182\t11\n-303\t112\t0\t115\t84\t64\t3\n-591\t948\t188\t176\t247\t130\t28\n-687\t535\t422\t301\t156\t230\t18\n-372\t151\t524\t182\t16\t273\t12\n-420\t180\t555\t88\t0\t119\t7\n-401\t182\t104\t76\t103\t138\t2\n-571\t1023\t364\t461\t377\t463\t23\n-398\t169\t92\t126\t668\t312\t10\n-378\t152\t552\t114\t125\t92\t7\n-352\t108\t528\t174\t47\t28\t9\n-714\t391\t449\t0\t210\t257\t18\n-524\t497\t106\t106\t180\t244\t8\n-563\t1023\t366\t471\t397\t460\t23\n-407\t93\t80\t145\t579\t306\t10\n-358\t129\t73\t257\t604\t268\t10\n-1023\t1023\t479\t406\t385\t351\t25\n-1023\t1023\t455\t536\t472\t508\t29\n-474\t172\t563\t0\t160\t111\t1\n-577\t1023\t164\t302\t258\t219\t19\n-348\t73\t521\t212\t0\t142\t5\n-294\t79\t470\t43\t112\t293\t17\n-369\t197\t0\t197\t185\t124\t3\n-389\t121\t71\t179\t637\t297\t10\n-589\t895\t180\t184\t246\t239\t27\n-432\t883\t8\t220\t177\t128\t28\n-601\t1004\t162\t221\t231\t128\t28\n-353\t137\t539\t196\t123\t63\t9\n-357\t127\t40\t203\t520\t174\t11\n-326\t128\t483\t194\t67\t34\t9\n-286\t74\t27\t78\t546\t266\t6\n-394\t158\t130\t82\t596\t314\t6\n-389\t224\t100\t113\t236\t104\t14\n-294\t77\t479\t270\t0\t47\t9\n-556\t946\t156\t211\t299\t177\t20\n-363\t117\t539\t199\t132\t62\t9\n-769\t1023\t189\t288\t291\t28\t22\n-558\t334\t325\t185\t186\t227\t18\n-760\t1023\t181\t271\t239\t258\t21\n-421\t243\t113\t90\t215\t181\t8\n-513\t283\t263\t241\t126\t124\t26\n-686\t935\t227\t267\t223\t109\t22\n-418\t137\t104\t127\t649\t260\t10\n-322\t115\t527\t0\t75\t70\t15\n-563\t1023\t165\t177\t212\t224\t27\n-620\t1023\t238\t267\t176\t206\t20\n-766\t1023\t347\t411\t384\t191\t24\n-378\t159\t41\t186\t637\t245\t10\n-598\t1023\t402\t490\t417\t399\t23\n-349\t142\t0\t191\t643\t286\t10\n-373\t102\t544\t147\t0\t215\t13\n-404\t138\t559\t267\t236\t133\t5\n-277\t47\t486\t242\t61\t120\t5\n-375\t113\t542\t122\t113\t23\t9\n-695\t849\t168\t230\t238\t209\t20\n-466\t185\t569\t184\t112\t238\t12\n-393\t114\t581\t131\t0\t118\t7\n-574\t1023\t127\t275\t245\t207\t20\n-618\t1023\t129\t271\t228\t230\t19\n-605\t1006\t213\t204\t220\t220\t27\n-495\t605\t83\t155\t167\t225\t27\n-716\t807\t131\t269\t126\t129\t24\n-607\t1023\t147\t294\t253\t219\t19\n-392\t236\t484\t237\t29\t106\t5\n-551\t910\t379\t822\t363\t417\t30\n-383\t153\t0\t0\t643\t286\t6\n-1023\t1023\t465\t336\t347\t366\t25\n-316\t233\t31\t209\t140\t307\t8\n-681\t1023\t284\t324\t280\t220\t21\n-418\t143\t553\t171\t98\t195\t13\n-361\t87\t26\t0\t618\t307\t6\n-419\t177\t91\t153\t277\t199\t8\n-598\t984\t87\t260\t246\t263\t19\n-634\t1023\t88\t158\t178\t156\t28\n-595\t1023\t154\t238\t284\t247\t19\n-388\t203\t544\t0\t149\t126\t1\n-354\t159\t504\t210\t0\t152\t5\n-294\t76\t141\t0\t29\t255\t8\n-328\t99\t468\t177\t171\t44\t9\n-283\t128\t463\t112\t0\t126\t7\n-673\t1023\t156\t262\t211\t40\t22\n-409\t115\t515\t217\t52\t193\t13\n-321\t102\t514\t0\t62\t135\t1\n-279\t83\t435\t174\t0\t267\t12\n-565\t1017\t67\t233\t210\t238\t19\n-339\t123\t538\t60\t99\t73\t15\n-343\t148\t44\t134\t615\t235\t10\n-390\t130\t86\t82\t635\t220\t11\n-283\t52\t423\t52\t63\t69\t15\n-548\t843\t101\t49\t239\t133\t28\n-1023\t1023\t307\t345\t357\t285\t25\n-580\t1019\t105\t263\t222\t286\t19\n-597\t1023\t234\t215\t225\t89\t22\n-441\t159\t546\t269\t33\t164\t5\n-330\t101\t531\t0\t59\t14\t15\n-373\t170\t53\t131\t84\t0\t3\n-338\t117\t261\t0\t80\t68\t2\n-398\t155\t144\t123\t616\t223\t10\n-615\t460\t273\t253\t171\t14\t26\n-773\t583\t406\t246\t187\t289\t18\n-369\t121\t556\t167\t0\t175\t13\n-379\t104\t505\t0\t0\t215\t16\n-369\t111\t68\t142\t299\t190\t8\n-358\t102\t552\t190\t18\t169\t13\n-448\t167\t99\t0\t0\t18\t2\n-594\t270\t154\t167\t707\t397\t10\n-501\t193\t147\t0\t39\t199\t8\n-726\t980\t187\t195\t221\t192\t24\n-373\t140\t554\t20\t0\t43\t15\n-423\t152\t116\t0\t591\t142\t11\n-338\t129\t36\t0\t597\t202\t6\n-371\t104\t568\t49\t139\t130\t1\n-353\t112\t550\t48\t0\t95\t1\n-351\t118\t498\t251\t44\t206\t5\n-788\t1023\t124\t266\t221\t278\t21\n-346\t138\t510\t206\t0\t128\t5\n-304\t90\t467\t74\t0\t194\t16\n-655\t530\t275\t285\t246\t309\t18\n-356\t116\t539\t79\t0\t96\t7\n-356\t138\t67\t0\t645\t250\t6\n-656\t1023\t200\t274\t318\t286\t21\n-817\t1023\t155\t266\t240\t173\t24\n-370\t80\t74\t196\t532\t246\t10\n-350\t128\t540\t0\t146\t77\t1\n-691\t1023\t0\t283\t190\t277\t19\n-631\t302\t459\t156\t164\t229\t18\n-645\t285\t388\t205\t187\t196\t18\n-389\t185\t160\t28\t664\t319\t6\n-413\t152\t22\t0\t645\t66\t11\n-464\t230\t97\t170\t164\t109\t3\n-328\t93\t0\t0\t436\t206\t6\n-956\t391\t578\t205\t288\t255\t18\n-335\t141\t520\t103\t21\t155\t7\n-588\t1009\t177\t271\t237\t206\t20\n-427\t132\t549\t1\t68\t270\t17\n-779\t1023\t121\t267\t274\t283\t21\n-'..b'\t154\t4\n-584\t1023\t116\t219\t126\t250\t19\n-351\t125\t540\t214\t0\t196\t13\n-318\t181\t76\t82\t52\t26\t3\n-327\t114\t510\t220\t0\t57\t9\n-945\t1023\t234\t319\t308\t197\t24\n-412\t133\t564\t199\t100\t165\t5\n-436\t259\t502\t164\t64\t155\t13\n-815\t1023\t120\t292\t223\t136\t24\n-810\t1023\t258\t296\t283\t224\t21\n-420\t91\t525\t1\t0\t22\t15\n-443\t198\t555\t129\t156\t245\t13\n-369\t121\t541\t40\t114\t110\t1\n-494\t295\t147\t150\t128\t103\t3\n-637\t1012\t183\t266\t267\t83\t22\n-375\t164\t106\t166\t642\t239\t10\n-394\t199\t75\t76\t597\t272\t6\n-665\t1023\t195\t223\t251\t195\t20\n-362\t107\t551\t10\t0\t0\t15\n-704\t1023\t206\t175\t191\t267\t27\n-338\t97\t464\t139\t106\t176\t13\n-325\t90\t521\t17\t0\t69\t15\n-379\t212\t526\t140\t85\t191\t13\n-424\t163\t565\t27\t190\t98\t1\n-376\t126\t99\t56\t622\t238\t6\n-398\t190\t124\t150\t628\t269\t10\n-349\t113\t80\t76\t648\t202\t11\n-647\t1019\t154\t245\t221\t240\t19\n-791\t1023\t146\t161\t183\t137\t24\n-363\t169\t548\t129\t91\t252\t13\n-433\t248\t99\t159\t152\t225\t8\n-346\t115\t516\t155\t0\t132\t7\n-758\t1023\t195\t258\t269\t230\t21\n-330\t158\t64\t0\t56\t234\t8\n-374\t119\t548\t146\t0\t22\t9\n-362\t211\t550\t232\t0\t214\t13\n-687\t1023\t194\t282\t197\t115\t22\n-489\t209\t0\t144\t262\t43\t14\n-594\t1023\t343\t500\t375\t406\t23\n-329\t130\t535\t11\t49\t98\t1\n-829\t1023\t186\t238\t227\t176\t24\n-326\t178\t44\t182\t621\t203\t10\n-609\t1023\t99\t225\t206\t183\t20\n-315\t104\t505\t88\t0\t118\t7\n-380\t185\t112\t2\t632\t253\t6\n-709\t491\t332\t198\t232\t159\t26\n-422\t138\t564\t187\t0\t263\t12\n-359\t168\t516\t4\t84\t135\t1\n-766\t1023\t167\t226\t215\t223\t21\n-693\t1023\t201\t291\t238\t121\t24\n-373\t127\t462\t124\t87\t57\t9\n-590\t965\t152\t114\t195\t265\t27\n-582\t375\t413\t171\t121\t232\t18\n-606\t1023\t179\t213\t201\t226\t19\n-358\t96\t63\t164\t593\t283\t10\n-380\t112\t562\t102\t142\t0\t15\n-382\t90\t521\t73\t121\t110\t7\n-351\t95\t540\t0\t178\t127\t1\n-541\t1023\t321\t447\t380\t428\t23\n-331\t176\t497\t172\t0\t141\t5\n-682\t1023\t175\t327\t242\t228\t21\n-378\t114\t532\t148\t0\t135\t7\n-334\t113\t511\t200\t46\t211\t13\n-362\t84\t526\t102\t0\t185\t13\n-791\t1023\t197\t279\t314\t236\t21\n-356\t126\t529\t0\t43\t138\t1\n-696\t1023\t130\t274\t235\t332\t21\n-722\t1023\t190\t260\t250\t237\t21\n-376\t94\t544\t104\t0\t99\t7\n-415\t147\t525\t0\t189\t102\t1\n-641\t950\t91\t250\t244\t212\t20\n-387\t124\t538\t23\t139\t4\t15\n-458\t103\t513\t0\t0\t106\t1\n-414\t126\t86\t95\t567\t171\t11\n-559\t919\t160\t218\t138\t193\t20\n-572\t895\t156\t49\t236\t47\t28\n-381\t111\t510\t93\t0\t95\t7\n-299\t143\t11\t0\t95\t58\t2\n-585\t1023\t197\t221\t216\t193\t20\n-638\t1023\t225\t254\t180\t157\t20\n-369\t162\t540\t81\t0\t56\t15\n-599\t915\t77\t255\t248\t124\t20\n-686\t1023\t89\t257\t217\t232\t19\n-578\t1023\t83\t207\t216\t126\t28\n-364\t120\t503\t0\t153\t225\t16\n-600\t1018\t153\t222\t275\t38\t22\n-383\t192\t101\t229\t624\t224\t10\n-383\t130\t532\t0\t67\t107\t1\n-328\t146\t23\t138\t0\t116\t3\n-272\t75\t99\t154\t220\t133\t3\n-323\t171\t96\t61\t146\t0\t3\n-337\t81\t506\t10\t0\t150\t1\n-290\t151\t0\t0\t106\t159\t2\n-661\t1023\t213\t292\t238\t295\t21\n-590\t1023\t216\t252\t264\t276\t19\n-512\t263\t118\t0\t213\t348\t8\n-315\t126\t502\t269\t48\t98\t5\n-276\t85\t479\t104\t40\t102\t7\n-378\t81\t548\t167\t0\t58\t9\n-387\t154\t0\t190\t656\t362\t10\n-602\t1023\t143\t256\t247\t38\t22\n-341\t142\t530\t7\t89\t46\t15\n-691\t1023\t141\t212\t189\t204\t20\n-576\t1006\t135\t209\t251\t216\t27\n-567\t849\t120\t157\t87\t213\t27\n-705\t1023\t189\t282\t279\t330\t21\n-985\t1023\t421\t292\t257\t220\t25\n-651\t1023\t181\t285\t202\t201\t20\n-693\t1023\t213\t300\t221\t225\t21\n-408\t113\t545\t183\t210\t104\t5\n-418\t143\t545\t0\t82\t126\t1\n-384\t112\t522\t111\t76\t109\t7\n-275\t48\t394\t0\t131\t0\t15\n-359\t113\t42\t80\t600\t163\t11\n-357\t169\t154\t138\t649\t283\t10\n-400\t224\t108\t227\t31\t107\t3\n-346\t88\t82\t84\t196\t98\t14\n-323\t124\t534\t0\t186\t183\t16\n-374\t103\t541\t142\t101\t52\t9\n-380\t105\t508\t170\t126\t313\t12\n-353\t196\t117\t115\t0\t164\t8\n-359\t113\t511\t259\t0\t141\t5\n-377\t137\t558\t11\t0\t14\t15\n-623\t423\t459\t227\t147\t40\t26\n-389\t149\t96\t50\t640\t263\t6\n-543\t1023\t144\t249\t187\t104\t28\n-691\t982\t85\t264\t194\t206\t20\n-627\t1023\t157\t238\t216\t193\t20\n-577\t1023\t165\t258\t299\t198\t20\n-402\t131\t569\t0\t124\t0\t15\n-337\t91\t506\t231\t0\t49\t9\n-636\t870\t91\t227\t96\t172\t20\n-356\t125\t58\t0\t621\t308\t6\n-390\t190\t46\t88\t665\t313\t10\n-351\t68\t529\t86\t0\t56\t15\n-623\t475\t365\t79\t157\t281\t18\n-335\t74\t512\t209\t49\t270\t12\n-496\t194\t105\t202\t427\t25\t14\n-614\t1023\t178\t280\t196\t117\t22\n-381\t84\t545\t101\t0\t140\t7\n-289\t93\t425\t0\t28\t68\t15\n-385\t240\t52\t168\t638\t277\t10\n-322\t162\t103\t0\t52\t61\t2\n-343\t126\t488\t99\t187\t276\t17\n-362\t197\t105\t68\t0\t2\t3\n-378\t99\t527\t0\t0\t116\t1\n-347\t107\t522\t0\t0\t200\t16\n-468\t198\t137\t99\t341\t111\t14\n-572\t967\t57\t255\t159\t220\t19\n-608\t1023\t115\t247\t174\t266\t19\n-637\t1023\t203\t289\t255\t175\t20\n-649\t902\t155\t165\t213\t262\t27\n-322\t148\t0\t187\t87\t115\t3\n'
b
diff -r 81f9b44f5242 -r b6b4d08b6858 run_flock/test-data/out1.flowscore
--- a/run_flock/test-data/out1.flowscore Mon Feb 27 13:30:23 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
@@ -1,31 +0,0 @@
-Population_ID FSC SSC CD4 CCR3 CD8 CCR7 Count Percentage
-1 1 1 3 1 1 1 1093 5.47
-2 1 1 1 1 1 1 695 3.48
-3 1 1 1 1 1 1 574 2.87
-4 1 2 1 2 1 1 146 0.73
-5 1 1 3 1 1 1 982 4.91
-6 1 1 1 1 3 2 1212 6.06
-7 1 1 3 1 1 1 1055 5.28
-8 1 1 1 1 1 1 578 2.89
-9 1 1 3 1 1 1 986 4.93
-10 1 1 1 1 3 2 1326 6.63
-11 1 1 1 1 3 1 693 3.47
-12 1 1 3 1 1 2 368 1.84
-13 1 1 3 1 1 1 841 4.21
-14 1 1 1 1 2 1 315 1.58
-15 1 1 3 1 1 1 879 4.40
-16 1 1 3 1 1 1 911 4.56
-17 1 1 3 1 1 2 323 1.62
-18 3 2 3 1 1 2 522 2.61
-19 2 4 1 1 1 2 1003 5.02
-20 2 4 1 1 1 1 1081 5.41
-21 3 4 1 2 2 2 947 4.74
-22 3 4 1 1 1 1 597 2.99
-23 2 4 2 2 2 3 297 1.49
-24 3 4 1 2 1 1 699 3.50
-25 4 4 2 2 2 2 289 1.45
-26 3 2 3 1 1 1 364 1.82
-27 2 4 1 1 1 2 586 2.93
-28 2 4 1 1 1 1 485 2.43
-29 4 4 3 2 2 3 106 0.53
-30 4 4 3 4 2 3 46 0.23
b
diff -r 81f9b44f5242 -r b6b4d08b6858 run_flock/test-data/out2.flowclr
--- a/run_flock/test-data/out2.flowclr Mon Feb 27 13:30:23 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
b'@@ -1,20000 +0,0 @@\n-FSC\tSSC\tCD4\tCCR3\tCD8\tCCR7\tPopulation\n-328\t122\t547\t94\t85\t93\t1\n-581\t1023\t143\t235\t270\t106\t7\n-427\t172\t140\t200\t631\t300\t3\n-363\t92\t526\t0\t140\t5\t1\n-416\t113\t485\t22\t157\t226\t1\n-317\t100\t488\t165\t83\t39\t1\n-636\t436\t439\t143\t81\t217\t9\n-262\t49\t395\t0\t42\t171\t1\n-332\t147\t534\t241\t142\t43\t1\n-567\t454\t305\t30\t168\t236\t5\n-333\t138\t104\t0\t612\t225\t3\n-359\t100\t530\t132\t63\t100\t1\n-298\t85\t480\t253\t0\t171\t1\n-392\t123\t90\t176\t623\t182\t3\n-303\t112\t0\t115\t84\t64\t2\n-591\t948\t188\t176\t247\t130\t7\n-687\t535\t422\t301\t156\t230\t6\n-372\t151\t524\t182\t16\t273\t1\n-420\t180\t555\t88\t0\t119\t1\n-401\t182\t104\t76\t103\t138\t2\n-571\t1023\t364\t461\t377\t463\t10\n-398\t169\t92\t126\t668\t312\t3\n-378\t152\t552\t114\t125\t92\t1\n-352\t108\t528\t174\t47\t28\t1\n-714\t391\t449\t0\t210\t257\t5\n-524\t497\t106\t106\t180\t244\t2\n-563\t1023\t366\t471\t397\t460\t10\n-407\t93\t80\t145\t579\t306\t3\n-358\t129\t73\t257\t604\t268\t3\n-1023\t1023\t479\t406\t385\t351\t14\n-1023\t1023\t455\t536\t472\t508\t14\n-474\t172\t563\t0\t160\t111\t1\n-577\t1023\t164\t302\t258\t219\t7\n-348\t73\t521\t212\t0\t142\t1\n-294\t79\t470\t43\t112\t293\t1\n-369\t197\t0\t197\t185\t124\t2\n-389\t121\t71\t179\t637\t297\t3\n-589\t895\t180\t184\t246\t239\t7\n-432\t883\t8\t220\t177\t128\t7\n-601\t1004\t162\t221\t231\t128\t7\n-353\t137\t539\t196\t123\t63\t1\n-357\t127\t40\t203\t520\t174\t3\n-326\t128\t483\t194\t67\t34\t1\n-286\t74\t27\t78\t546\t266\t3\n-394\t158\t130\t82\t596\t314\t3\n-389\t224\t100\t113\t236\t104\t2\n-294\t77\t479\t270\t0\t47\t1\n-556\t946\t156\t211\t299\t177\t7\n-363\t117\t539\t199\t132\t62\t1\n-769\t1023\t189\t288\t291\t28\t7\n-558\t334\t325\t185\t186\t227\t6\n-760\t1023\t181\t271\t239\t258\t7\n-421\t243\t113\t90\t215\t181\t2\n-513\t283\t263\t241\t126\t124\t9\n-686\t935\t227\t267\t223\t109\t7\n-418\t137\t104\t127\t649\t260\t3\n-322\t115\t527\t0\t75\t70\t1\n-563\t1023\t165\t177\t212\t224\t7\n-620\t1023\t238\t267\t176\t206\t7\n-766\t1023\t347\t411\t384\t191\t7\n-378\t159\t41\t186\t637\t245\t3\n-598\t1023\t402\t490\t417\t399\t10\n-349\t142\t0\t191\t643\t286\t3\n-373\t102\t544\t147\t0\t215\t1\n-404\t138\t559\t267\t236\t133\t1\n-277\t47\t486\t242\t61\t120\t1\n-375\t113\t542\t122\t113\t23\t1\n-695\t849\t168\t230\t238\t209\t7\n-466\t185\t569\t184\t112\t238\t1\n-393\t114\t581\t131\t0\t118\t1\n-574\t1023\t127\t275\t245\t207\t7\n-618\t1023\t129\t271\t228\t230\t7\n-605\t1006\t213\t204\t220\t220\t7\n-495\t605\t83\t155\t167\t225\t7\n-716\t807\t131\t269\t126\t129\t7\n-607\t1023\t147\t294\t253\t219\t7\n-392\t236\t484\t237\t29\t106\t1\n-551\t910\t379\t822\t363\t417\t11\n-383\t153\t0\t0\t643\t286\t3\n-1023\t1023\t465\t336\t347\t366\t13\n-316\t233\t31\t209\t140\t307\t2\n-681\t1023\t284\t324\t280\t220\t7\n-418\t143\t553\t171\t98\t195\t1\n-361\t87\t26\t0\t618\t307\t3\n-419\t177\t91\t153\t277\t199\t2\n-598\t984\t87\t260\t246\t263\t7\n-634\t1023\t88\t158\t178\t156\t7\n-595\t1023\t154\t238\t284\t247\t7\n-388\t203\t544\t0\t149\t126\t1\n-354\t159\t504\t210\t0\t152\t1\n-294\t76\t141\t0\t29\t255\t2\n-328\t99\t468\t177\t171\t44\t1\n-283\t128\t463\t112\t0\t126\t1\n-673\t1023\t156\t262\t211\t40\t7\n-409\t115\t515\t217\t52\t193\t1\n-321\t102\t514\t0\t62\t135\t1\n-279\t83\t435\t174\t0\t267\t1\n-565\t1017\t67\t233\t210\t238\t7\n-339\t123\t538\t60\t99\t73\t1\n-343\t148\t44\t134\t615\t235\t3\n-390\t130\t86\t82\t635\t220\t3\n-283\t52\t423\t52\t63\t69\t1\n-548\t843\t101\t49\t239\t133\t7\n-1023\t1023\t307\t345\t357\t285\t13\n-580\t1019\t105\t263\t222\t286\t7\n-597\t1023\t234\t215\t225\t89\t7\n-441\t159\t546\t269\t33\t164\t1\n-330\t101\t531\t0\t59\t14\t1\n-373\t170\t53\t131\t84\t0\t2\n-338\t117\t261\t0\t80\t68\t4\n-398\t155\t144\t123\t616\t223\t3\n-615\t460\t273\t253\t171\t14\t9\n-773\t583\t406\t246\t187\t289\t6\n-369\t121\t556\t167\t0\t175\t1\n-379\t104\t505\t0\t0\t215\t1\n-369\t111\t68\t142\t299\t190\t2\n-358\t102\t552\t190\t18\t169\t1\n-448\t167\t99\t0\t0\t18\t2\n-594\t270\t154\t167\t707\t397\t3\n-501\t193\t147\t0\t39\t199\t2\n-726\t980\t187\t195\t221\t192\t7\n-373\t140\t554\t20\t0\t43\t1\n-423\t152\t116\t0\t591\t142\t3\n-338\t129\t36\t0\t597\t202\t3\n-371\t104\t568\t49\t139\t130\t1\n-353\t112\t550\t48\t0\t95\t1\n-351\t118\t498\t251\t44\t206\t1\n-788\t1023\t124\t266\t221\t278\t7\n-346\t138\t510\t206\t0\t128\t1\n-304\t90\t467\t74\t0\t194\t1\n-655\t530\t275\t285\t246\t309\t6\n-356\t116\t539\t79\t0\t96\t1\n-356\t138\t67\t0\t645\t250\t3\n-656\t1023\t200\t274\t318\t286\t7\n-817\t1023\t155\t266\t240\t173\t7\n-370\t80\t74\t196\t532\t246\t3\n-350\t128\t540\t0\t146\t77\t1\n-691\t1023\t0\t283\t190\t277\t7\n-631\t302\t459\t156\t164\t229\t9\n-645\t285\t388\t205\t187\t196\t6\n-389\t185\t160\t28\t664\t319\t3\n-413\t152\t22\t0\t645\t66\t3\n-464\t230\t97\t170\t164\t109\t2\n-328\t93\t0\t0\t436\t206\t3\n-956\t391\t578\t205\t288\t255\t6\n-335\t141\t520\t103\t21\t155\t1\n-588\t1009\t177\t271\t237\t206\t7\n-427\t132\t549\t1\t68\t270\t1\n-779\t1023\t121\t267\t274\t283\t7\n-599\t933\t192\t228\t173\t256\t7\n-688\t1023\t132\t304\t256\t64\t7\n-333\t79\t493\t123\t8\t128\t1\n-391\t193\t'..b'3\n-611\t290\t261\t179\t206\t256\t6\n-327\t98\t509\t117\t0\t209\t1\n-324\t105\t532\t166\t0\t254\t1\n-373\t216\t73\t334\t81\t154\t2\n-584\t1023\t116\t219\t126\t250\t7\n-351\t125\t540\t214\t0\t196\t1\n-318\t181\t76\t82\t52\t26\t2\n-327\t114\t510\t220\t0\t57\t1\n-945\t1023\t234\t319\t308\t197\t13\n-412\t133\t564\t199\t100\t165\t1\n-436\t259\t502\t164\t64\t155\t1\n-815\t1023\t120\t292\t223\t136\t7\n-810\t1023\t258\t296\t283\t224\t7\n-420\t91\t525\t1\t0\t22\t1\n-443\t198\t555\t129\t156\t245\t1\n-369\t121\t541\t40\t114\t110\t1\n-494\t295\t147\t150\t128\t103\t2\n-637\t1012\t183\t266\t267\t83\t7\n-375\t164\t106\t166\t642\t239\t3\n-394\t199\t75\t76\t597\t272\t3\n-665\t1023\t195\t223\t251\t195\t7\n-362\t107\t551\t10\t0\t0\t1\n-704\t1023\t206\t175\t191\t267\t7\n-338\t97\t464\t139\t106\t176\t1\n-325\t90\t521\t17\t0\t69\t1\n-379\t212\t526\t140\t85\t191\t1\n-424\t163\t565\t27\t190\t98\t1\n-376\t126\t99\t56\t622\t238\t3\n-398\t190\t124\t150\t628\t269\t3\n-349\t113\t80\t76\t648\t202\t3\n-647\t1019\t154\t245\t221\t240\t7\n-791\t1023\t146\t161\t183\t137\t7\n-363\t169\t548\t129\t91\t252\t1\n-433\t248\t99\t159\t152\t225\t2\n-346\t115\t516\t155\t0\t132\t1\n-758\t1023\t195\t258\t269\t230\t7\n-330\t158\t64\t0\t56\t234\t2\n-374\t119\t548\t146\t0\t22\t1\n-362\t211\t550\t232\t0\t214\t1\n-687\t1023\t194\t282\t197\t115\t7\n-489\t209\t0\t144\t262\t43\t2\n-594\t1023\t343\t500\t375\t406\t10\n-329\t130\t535\t11\t49\t98\t1\n-829\t1023\t186\t238\t227\t176\t7\n-326\t178\t44\t182\t621\t203\t3\n-609\t1023\t99\t225\t206\t183\t7\n-315\t104\t505\t88\t0\t118\t1\n-380\t185\t112\t2\t632\t253\t3\n-709\t491\t332\t198\t232\t159\t9\n-422\t138\t564\t187\t0\t263\t1\n-359\t168\t516\t4\t84\t135\t1\n-766\t1023\t167\t226\t215\t223\t7\n-693\t1023\t201\t291\t238\t121\t7\n-373\t127\t462\t124\t87\t57\t1\n-590\t965\t152\t114\t195\t265\t7\n-582\t375\t413\t171\t121\t232\t9\n-606\t1023\t179\t213\t201\t226\t7\n-358\t96\t63\t164\t593\t283\t3\n-380\t112\t562\t102\t142\t0\t1\n-382\t90\t521\t73\t121\t110\t1\n-351\t95\t540\t0\t178\t127\t1\n-541\t1023\t321\t447\t380\t428\t10\n-331\t176\t497\t172\t0\t141\t1\n-682\t1023\t175\t327\t242\t228\t7\n-378\t114\t532\t148\t0\t135\t1\n-334\t113\t511\t200\t46\t211\t1\n-362\t84\t526\t102\t0\t185\t1\n-791\t1023\t197\t279\t314\t236\t7\n-356\t126\t529\t0\t43\t138\t1\n-696\t1023\t130\t274\t235\t332\t7\n-722\t1023\t190\t260\t250\t237\t7\n-376\t94\t544\t104\t0\t99\t1\n-415\t147\t525\t0\t189\t102\t1\n-641\t950\t91\t250\t244\t212\t7\n-387\t124\t538\t23\t139\t4\t1\n-458\t103\t513\t0\t0\t106\t1\n-414\t126\t86\t95\t567\t171\t3\n-559\t919\t160\t218\t138\t193\t7\n-572\t895\t156\t49\t236\t47\t7\n-381\t111\t510\t93\t0\t95\t1\n-299\t143\t11\t0\t95\t58\t2\n-585\t1023\t197\t221\t216\t193\t7\n-638\t1023\t225\t254\t180\t157\t7\n-369\t162\t540\t81\t0\t56\t1\n-599\t915\t77\t255\t248\t124\t7\n-686\t1023\t89\t257\t217\t232\t7\n-578\t1023\t83\t207\t216\t126\t7\n-364\t120\t503\t0\t153\t225\t1\n-600\t1018\t153\t222\t275\t38\t7\n-383\t192\t101\t229\t624\t224\t3\n-383\t130\t532\t0\t67\t107\t1\n-328\t146\t23\t138\t0\t116\t2\n-272\t75\t99\t154\t220\t133\t2\n-323\t171\t96\t61\t146\t0\t2\n-337\t81\t506\t10\t0\t150\t1\n-290\t151\t0\t0\t106\t159\t2\n-661\t1023\t213\t292\t238\t295\t7\n-590\t1023\t216\t252\t264\t276\t7\n-512\t263\t118\t0\t213\t348\t2\n-315\t126\t502\t269\t48\t98\t1\n-276\t85\t479\t104\t40\t102\t1\n-378\t81\t548\t167\t0\t58\t1\n-387\t154\t0\t190\t656\t362\t3\n-602\t1023\t143\t256\t247\t38\t7\n-341\t142\t530\t7\t89\t46\t1\n-691\t1023\t141\t212\t189\t204\t7\n-576\t1006\t135\t209\t251\t216\t7\n-567\t849\t120\t157\t87\t213\t7\n-705\t1023\t189\t282\t279\t330\t7\n-985\t1023\t421\t292\t257\t220\t13\n-651\t1023\t181\t285\t202\t201\t7\n-693\t1023\t213\t300\t221\t225\t7\n-408\t113\t545\t183\t210\t104\t1\n-418\t143\t545\t0\t82\t126\t1\n-384\t112\t522\t111\t76\t109\t1\n-275\t48\t394\t0\t131\t0\t1\n-359\t113\t42\t80\t600\t163\t3\n-357\t169\t154\t138\t649\t283\t3\n-400\t224\t108\t227\t31\t107\t2\n-346\t88\t82\t84\t196\t98\t2\n-323\t124\t534\t0\t186\t183\t1\n-374\t103\t541\t142\t101\t52\t1\n-380\t105\t508\t170\t126\t313\t1\n-353\t196\t117\t115\t0\t164\t2\n-359\t113\t511\t259\t0\t141\t1\n-377\t137\t558\t11\t0\t14\t1\n-623\t423\t459\t227\t147\t40\t9\n-389\t149\t96\t50\t640\t263\t3\n-543\t1023\t144\t249\t187\t104\t7\n-691\t982\t85\t264\t194\t206\t7\n-627\t1023\t157\t238\t216\t193\t7\n-577\t1023\t165\t258\t299\t198\t7\n-402\t131\t569\t0\t124\t0\t1\n-337\t91\t506\t231\t0\t49\t1\n-636\t870\t91\t227\t96\t172\t7\n-356\t125\t58\t0\t621\t308\t3\n-390\t190\t46\t88\t665\t313\t3\n-351\t68\t529\t86\t0\t56\t1\n-623\t475\t365\t79\t157\t281\t9\n-335\t74\t512\t209\t49\t270\t1\n-496\t194\t105\t202\t427\t25\t2\n-614\t1023\t178\t280\t196\t117\t7\n-381\t84\t545\t101\t0\t140\t1\n-289\t93\t425\t0\t28\t68\t1\n-385\t240\t52\t168\t638\t277\t3\n-322\t162\t103\t0\t52\t61\t2\n-343\t126\t488\t99\t187\t276\t1\n-362\t197\t105\t68\t0\t2\t2\n-378\t99\t527\t0\t0\t116\t1\n-347\t107\t522\t0\t0\t200\t1\n-468\t198\t137\t99\t341\t111\t2\n-572\t967\t57\t255\t159\t220\t7\n-608\t1023\t115\t247\t174\t266\t7\n-637\t1023\t203\t289\t255\t175\t7\n-649\t902\t155\t165\t213\t262\t7\n-322\t148\t0\t187\t87\t115\t2\n'
b
diff -r 81f9b44f5242 -r b6b4d08b6858 run_flock/test-data/out2.flowscore
--- a/run_flock/test-data/out2.flowscore Mon Feb 27 13:30:23 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
@@ -1,15 +0,0 @@
-Population_ID FSC SSC CD4 CCR3 CD8 CCR7 Count Percentage
-1 1 1 3 1 1 1 7351 36.76
-2 1 1 1 1 1 1 2126 10.63
-3 1 1 1 1 3 2 3264 16.32
-4 1 1 2 1 1 1 148 0.74
-5 2 2 3 1 1 2 88 0.44
-6 3 2 3 1 1 2 366 1.83
-7 3 4 1 1 1 1 5562 27.81
-8 1 2 2 3 2 3 37 0.19
-9 3 2 3 1 1 1 398 1.99
-10 2 4 2 2 2 2 292 1.46
-11 2 2 3 4 2 3 14 0.07
-12 2 2 1 1 1 2 40 0.20
-13 4 4 2 2 2 2 157 0.79
-14 4 4 3 2 2 3 156 0.78
b
diff -r 81f9b44f5242 -r b6b4d08b6858 run_flock/test-data/out3.flowclr
--- a/run_flock/test-data/out3.flowclr Mon Feb 27 13:30:23 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
b'@@ -1,20000 +0,0 @@\n-FSC\tSSC\tCD4\tCCR3\tCD8\tCCR7\tPopulation\n-328\t122\t547\t94\t85\t93\t6\n-581\t1023\t143\t235\t270\t106\t7\n-427\t172\t140\t200\t631\t300\t1\n-363\t92\t526\t0\t140\t5\t6\n-416\t113\t485\t22\t157\t226\t4\n-317\t100\t488\t165\t83\t39\t2\n-636\t436\t439\t143\t81\t217\t5\n-262\t49\t395\t0\t42\t171\t6\n-332\t147\t534\t241\t142\t43\t2\n-567\t454\t305\t30\t168\t236\t5\n-333\t138\t104\t0\t612\t225\t1\n-359\t100\t530\t132\t63\t100\t2\n-298\t85\t480\t253\t0\t171\t2\n-392\t123\t90\t176\t623\t182\t1\n-303\t112\t0\t115\t84\t64\t3\n-591\t948\t188\t176\t247\t130\t7\n-687\t535\t422\t301\t156\t230\t5\n-372\t151\t524\t182\t16\t273\t4\n-420\t180\t555\t88\t0\t119\t6\n-401\t182\t104\t76\t103\t138\t3\n-571\t1023\t364\t461\t377\t463\t8\n-398\t169\t92\t126\t668\t312\t1\n-378\t152\t552\t114\t125\t92\t2\n-352\t108\t528\t174\t47\t28\t2\n-714\t391\t449\t0\t210\t257\t5\n-524\t497\t106\t106\t180\t244\t5\n-563\t1023\t366\t471\t397\t460\t8\n-407\t93\t80\t145\t579\t306\t1\n-358\t129\t73\t257\t604\t268\t1\n-1023\t1023\t479\t406\t385\t351\t8\n-1023\t1023\t455\t536\t472\t508\t8\n-474\t172\t563\t0\t160\t111\t6\n-577\t1023\t164\t302\t258\t219\t9\n-348\t73\t521\t212\t0\t142\t2\n-294\t79\t470\t43\t112\t293\t4\n-369\t197\t0\t197\t185\t124\t3\n-389\t121\t71\t179\t637\t297\t1\n-589\t895\t180\t184\t246\t239\t9\n-432\t883\t8\t220\t177\t128\t7\n-601\t1004\t162\t221\t231\t128\t7\n-353\t137\t539\t196\t123\t63\t2\n-357\t127\t40\t203\t520\t174\t1\n-326\t128\t483\t194\t67\t34\t2\n-286\t74\t27\t78\t546\t266\t1\n-394\t158\t130\t82\t596\t314\t1\n-389\t224\t100\t113\t236\t104\t3\n-294\t77\t479\t270\t0\t47\t2\n-556\t946\t156\t211\t299\t177\t7\n-363\t117\t539\t199\t132\t62\t2\n-769\t1023\t189\t288\t291\t28\t7\n-558\t334\t325\t185\t186\t227\t5\n-760\t1023\t181\t271\t239\t258\t9\n-421\t243\t113\t90\t215\t181\t3\n-513\t283\t263\t241\t126\t124\t5\n-686\t935\t227\t267\t223\t109\t7\n-418\t137\t104\t127\t649\t260\t1\n-322\t115\t527\t0\t75\t70\t6\n-563\t1023\t165\t177\t212\t224\t9\n-620\t1023\t238\t267\t176\t206\t9\n-766\t1023\t347\t411\t384\t191\t9\n-378\t159\t41\t186\t637\t245\t1\n-598\t1023\t402\t490\t417\t399\t8\n-349\t142\t0\t191\t643\t286\t1\n-373\t102\t544\t147\t0\t215\t4\n-404\t138\t559\t267\t236\t133\t2\n-277\t47\t486\t242\t61\t120\t2\n-375\t113\t542\t122\t113\t23\t2\n-695\t849\t168\t230\t238\t209\t9\n-466\t185\t569\t184\t112\t238\t4\n-393\t114\t581\t131\t0\t118\t2\n-574\t1023\t127\t275\t245\t207\t9\n-618\t1023\t129\t271\t228\t230\t9\n-605\t1006\t213\t204\t220\t220\t9\n-495\t605\t83\t155\t167\t225\t7\n-716\t807\t131\t269\t126\t129\t7\n-607\t1023\t147\t294\t253\t219\t9\n-392\t236\t484\t237\t29\t106\t2\n-551\t910\t379\t822\t363\t417\t8\n-383\t153\t0\t0\t643\t286\t1\n-1023\t1023\t465\t336\t347\t366\t8\n-316\t233\t31\t209\t140\t307\t3\n-681\t1023\t284\t324\t280\t220\t9\n-418\t143\t553\t171\t98\t195\t4\n-361\t87\t26\t0\t618\t307\t1\n-419\t177\t91\t153\t277\t199\t3\n-598\t984\t87\t260\t246\t263\t9\n-634\t1023\t88\t158\t178\t156\t7\n-595\t1023\t154\t238\t284\t247\t9\n-388\t203\t544\t0\t149\t126\t6\n-354\t159\t504\t210\t0\t152\t2\n-294\t76\t141\t0\t29\t255\t3\n-328\t99\t468\t177\t171\t44\t2\n-283\t128\t463\t112\t0\t126\t2\n-673\t1023\t156\t262\t211\t40\t7\n-409\t115\t515\t217\t52\t193\t4\n-321\t102\t514\t0\t62\t135\t6\n-279\t83\t435\t174\t0\t267\t4\n-565\t1017\t67\t233\t210\t238\t9\n-339\t123\t538\t60\t99\t73\t6\n-343\t148\t44\t134\t615\t235\t1\n-390\t130\t86\t82\t635\t220\t1\n-283\t52\t423\t52\t63\t69\t6\n-548\t843\t101\t49\t239\t133\t7\n-1023\t1023\t307\t345\t357\t285\t9\n-580\t1019\t105\t263\t222\t286\t9\n-597\t1023\t234\t215\t225\t89\t7\n-441\t159\t546\t269\t33\t164\t2\n-330\t101\t531\t0\t59\t14\t6\n-373\t170\t53\t131\t84\t0\t3\n-338\t117\t261\t0\t80\t68\t6\n-398\t155\t144\t123\t616\t223\t1\n-615\t460\t273\t253\t171\t14\t7\n-773\t583\t406\t246\t187\t289\t5\n-369\t121\t556\t167\t0\t175\t4\n-379\t104\t505\t0\t0\t215\t4\n-369\t111\t68\t142\t299\t190\t3\n-358\t102\t552\t190\t18\t169\t2\n-448\t167\t99\t0\t0\t18\t3\n-594\t270\t154\t167\t707\t397\t1\n-501\t193\t147\t0\t39\t199\t3\n-726\t980\t187\t195\t221\t192\t9\n-373\t140\t554\t20\t0\t43\t6\n-423\t152\t116\t0\t591\t142\t1\n-338\t129\t36\t0\t597\t202\t1\n-371\t104\t568\t49\t139\t130\t6\n-353\t112\t550\t48\t0\t95\t6\n-351\t118\t498\t251\t44\t206\t4\n-788\t1023\t124\t266\t221\t278\t9\n-346\t138\t510\t206\t0\t128\t2\n-304\t90\t467\t74\t0\t194\t4\n-655\t530\t275\t285\t246\t309\t5\n-356\t116\t539\t79\t0\t96\t6\n-356\t138\t67\t0\t645\t250\t1\n-656\t1023\t200\t274\t318\t286\t9\n-817\t1023\t155\t266\t240\t173\t9\n-370\t80\t74\t196\t532\t246\t1\n-350\t128\t540\t0\t146\t77\t6\n-691\t1023\t0\t283\t190\t277\t9\n-631\t302\t459\t156\t164\t229\t5\n-645\t285\t388\t205\t187\t196\t5\n-389\t185\t160\t28\t664\t319\t1\n-413\t152\t22\t0\t645\t66\t1\n-464\t230\t97\t170\t164\t109\t3\n-328\t93\t0\t0\t436\t206\t1\n-956\t391\t578\t205\t288\t255\t5\n-335\t141\t520\t103\t21\t155\t4\n-588\t1009\t177\t271\t237\t206\t9\n-427\t132\t549\t1\t68\t270\t4\n-779\t1023\t121\t267\t274\t283\t9\n-599\t933\t192\t228\t173\t256\t9\n-688\t1023\t132\t304\t256\t64\t7\n-333\t79\t493\t123\t8\t128\t2\n-391\t193\t137\t189\t'..b'337\t1\n-611\t290\t261\t179\t206\t256\t5\n-327\t98\t509\t117\t0\t209\t4\n-324\t105\t532\t166\t0\t254\t4\n-373\t216\t73\t334\t81\t154\t3\n-584\t1023\t116\t219\t126\t250\t9\n-351\t125\t540\t214\t0\t196\t4\n-318\t181\t76\t82\t52\t26\t3\n-327\t114\t510\t220\t0\t57\t2\n-945\t1023\t234\t319\t308\t197\t9\n-412\t133\t564\t199\t100\t165\t2\n-436\t259\t502\t164\t64\t155\t2\n-815\t1023\t120\t292\t223\t136\t7\n-810\t1023\t258\t296\t283\t224\t9\n-420\t91\t525\t1\t0\t22\t6\n-443\t198\t555\t129\t156\t245\t4\n-369\t121\t541\t40\t114\t110\t6\n-494\t295\t147\t150\t128\t103\t3\n-637\t1012\t183\t266\t267\t83\t7\n-375\t164\t106\t166\t642\t239\t1\n-394\t199\t75\t76\t597\t272\t1\n-665\t1023\t195\t223\t251\t195\t9\n-362\t107\t551\t10\t0\t0\t6\n-704\t1023\t206\t175\t191\t267\t9\n-338\t97\t464\t139\t106\t176\t4\n-325\t90\t521\t17\t0\t69\t6\n-379\t212\t526\t140\t85\t191\t4\n-424\t163\t565\t27\t190\t98\t6\n-376\t126\t99\t56\t622\t238\t1\n-398\t190\t124\t150\t628\t269\t1\n-349\t113\t80\t76\t648\t202\t1\n-647\t1019\t154\t245\t221\t240\t9\n-791\t1023\t146\t161\t183\t137\t7\n-363\t169\t548\t129\t91\t252\t4\n-433\t248\t99\t159\t152\t225\t3\n-346\t115\t516\t155\t0\t132\t2\n-758\t1023\t195\t258\t269\t230\t9\n-330\t158\t64\t0\t56\t234\t3\n-374\t119\t548\t146\t0\t22\t2\n-362\t211\t550\t232\t0\t214\t4\n-687\t1023\t194\t282\t197\t115\t7\n-489\t209\t0\t144\t262\t43\t3\n-594\t1023\t343\t500\t375\t406\t8\n-329\t130\t535\t11\t49\t98\t6\n-829\t1023\t186\t238\t227\t176\t9\n-326\t178\t44\t182\t621\t203\t1\n-609\t1023\t99\t225\t206\t183\t7\n-315\t104\t505\t88\t0\t118\t6\n-380\t185\t112\t2\t632\t253\t1\n-709\t491\t332\t198\t232\t159\t5\n-422\t138\t564\t187\t0\t263\t4\n-359\t168\t516\t4\t84\t135\t6\n-766\t1023\t167\t226\t215\t223\t9\n-693\t1023\t201\t291\t238\t121\t7\n-373\t127\t462\t124\t87\t57\t2\n-590\t965\t152\t114\t195\t265\t9\n-582\t375\t413\t171\t121\t232\t5\n-606\t1023\t179\t213\t201\t226\t9\n-358\t96\t63\t164\t593\t283\t1\n-380\t112\t562\t102\t142\t0\t6\n-382\t90\t521\t73\t121\t110\t6\n-351\t95\t540\t0\t178\t127\t6\n-541\t1023\t321\t447\t380\t428\t8\n-331\t176\t497\t172\t0\t141\t2\n-682\t1023\t175\t327\t242\t228\t9\n-378\t114\t532\t148\t0\t135\t2\n-334\t113\t511\t200\t46\t211\t4\n-362\t84\t526\t102\t0\t185\t4\n-791\t1023\t197\t279\t314\t236\t9\n-356\t126\t529\t0\t43\t138\t6\n-696\t1023\t130\t274\t235\t332\t9\n-722\t1023\t190\t260\t250\t237\t9\n-376\t94\t544\t104\t0\t99\t6\n-415\t147\t525\t0\t189\t102\t6\n-641\t950\t91\t250\t244\t212\t9\n-387\t124\t538\t23\t139\t4\t6\n-458\t103\t513\t0\t0\t106\t6\n-414\t126\t86\t95\t567\t171\t1\n-559\t919\t160\t218\t138\t193\t7\n-572\t895\t156\t49\t236\t47\t7\n-381\t111\t510\t93\t0\t95\t6\n-299\t143\t11\t0\t95\t58\t3\n-585\t1023\t197\t221\t216\t193\t7\n-638\t1023\t225\t254\t180\t157\t7\n-369\t162\t540\t81\t0\t56\t6\n-599\t915\t77\t255\t248\t124\t7\n-686\t1023\t89\t257\t217\t232\t9\n-578\t1023\t83\t207\t216\t126\t7\n-364\t120\t503\t0\t153\t225\t4\n-600\t1018\t153\t222\t275\t38\t7\n-383\t192\t101\t229\t624\t224\t1\n-383\t130\t532\t0\t67\t107\t6\n-328\t146\t23\t138\t0\t116\t3\n-272\t75\t99\t154\t220\t133\t3\n-323\t171\t96\t61\t146\t0\t3\n-337\t81\t506\t10\t0\t150\t6\n-290\t151\t0\t0\t106\t159\t3\n-661\t1023\t213\t292\t238\t295\t9\n-590\t1023\t216\t252\t264\t276\t9\n-512\t263\t118\t0\t213\t348\t1\n-315\t126\t502\t269\t48\t98\t2\n-276\t85\t479\t104\t40\t102\t6\n-378\t81\t548\t167\t0\t58\t2\n-387\t154\t0\t190\t656\t362\t1\n-602\t1023\t143\t256\t247\t38\t7\n-341\t142\t530\t7\t89\t46\t6\n-691\t1023\t141\t212\t189\t204\t9\n-576\t1006\t135\t209\t251\t216\t9\n-567\t849\t120\t157\t87\t213\t7\n-705\t1023\t189\t282\t279\t330\t9\n-985\t1023\t421\t292\t257\t220\t9\n-651\t1023\t181\t285\t202\t201\t9\n-693\t1023\t213\t300\t221\t225\t9\n-408\t113\t545\t183\t210\t104\t2\n-418\t143\t545\t0\t82\t126\t6\n-384\t112\t522\t111\t76\t109\t2\n-275\t48\t394\t0\t131\t0\t6\n-359\t113\t42\t80\t600\t163\t1\n-357\t169\t154\t138\t649\t283\t1\n-400\t224\t108\t227\t31\t107\t3\n-346\t88\t82\t84\t196\t98\t3\n-323\t124\t534\t0\t186\t183\t6\n-374\t103\t541\t142\t101\t52\t2\n-380\t105\t508\t170\t126\t313\t4\n-353\t196\t117\t115\t0\t164\t3\n-359\t113\t511\t259\t0\t141\t2\n-377\t137\t558\t11\t0\t14\t6\n-623\t423\t459\t227\t147\t40\t5\n-389\t149\t96\t50\t640\t263\t1\n-543\t1023\t144\t249\t187\t104\t7\n-691\t982\t85\t264\t194\t206\t9\n-627\t1023\t157\t238\t216\t193\t7\n-577\t1023\t165\t258\t299\t198\t7\n-402\t131\t569\t0\t124\t0\t6\n-337\t91\t506\t231\t0\t49\t2\n-636\t870\t91\t227\t96\t172\t7\n-356\t125\t58\t0\t621\t308\t1\n-390\t190\t46\t88\t665\t313\t1\n-351\t68\t529\t86\t0\t56\t6\n-623\t475\t365\t79\t157\t281\t5\n-335\t74\t512\t209\t49\t270\t4\n-496\t194\t105\t202\t427\t25\t3\n-614\t1023\t178\t280\t196\t117\t7\n-381\t84\t545\t101\t0\t140\t6\n-289\t93\t425\t0\t28\t68\t6\n-385\t240\t52\t168\t638\t277\t1\n-322\t162\t103\t0\t52\t61\t3\n-343\t126\t488\t99\t187\t276\t4\n-362\t197\t105\t68\t0\t2\t3\n-378\t99\t527\t0\t0\t116\t6\n-347\t107\t522\t0\t0\t200\t4\n-468\t198\t137\t99\t341\t111\t3\n-572\t967\t57\t255\t159\t220\t9\n-608\t1023\t115\t247\t174\t266\t9\n-637\t1023\t203\t289\t255\t175\t7\n-649\t902\t155\t165\t213\t262\t9\n-322\t148\t0\t187\t87\t115\t3\n'
b
diff -r 81f9b44f5242 -r b6b4d08b6858 run_flock/test-data/out3.flowscore
--- a/run_flock/test-data/out3.flowscore Mon Feb 27 13:30:23 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
@@ -1,10 +0,0 @@
-Population_ID FSC SSC CD4 CCR3 CD8 CCR7 Count Percentage
-1 1 1 1 1 3 2 3297 16.49
-2 1 1 3 1 1 1 2695 13.48
-3 1 1 1 1 1 1 2094 10.47
-4 1 1 3 1 1 2 1932 9.66
-5 3 2 3 1 1 2 934 4.67
-6 1 1 3 1 1 1 2852 14.26
-7 2 4 1 1 1 1 2478 12.39
-8 4 4 2 2 2 3 568 2.84
-9 3 4 1 2 1 2 3149 15.75
b
diff -r 81f9b44f5242 -r b6b4d08b6858 static/images/flock_logo.png
b
Binary file static/images/flock_logo.png has changed
b
diff -r 81f9b44f5242 -r b6b4d08b6858 test-data/input.flowtext
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/input.flowtext Fri Jul 17 09:06:54 2020 -0400
b
b'@@ -0,0 +1,20000 @@\n+FSC\tSSC\tCD4\tCCR3\tCD8\tCCR7\n+328\t122\t547\t94\t85\t93\n+581\t1023\t143\t235\t270\t106\n+427\t172\t140\t200\t631\t300\n+363\t92\t526\t0\t140\t5\n+416\t113\t485\t22\t157\t226\n+317\t100\t488\t165\t83\t39\n+636\t436\t439\t143\t81\t217\n+262\t49\t395\t0\t42\t171\n+332\t147\t534\t241\t142\t43\n+567\t454\t305\t30\t168\t236\n+333\t138\t104\t0\t612\t225\n+359\t100\t530\t132\t63\t100\n+298\t85\t480\t253\t0\t171\n+392\t123\t90\t176\t623\t182\n+303\t112\t0\t115\t84\t64\n+591\t948\t188\t176\t247\t130\n+687\t535\t422\t301\t156\t230\n+372\t151\t524\t182\t16\t273\n+420\t180\t555\t88\t0\t119\n+401\t182\t104\t76\t103\t138\n+571\t1023\t364\t461\t377\t463\n+398\t169\t92\t126\t668\t312\n+378\t152\t552\t114\t125\t92\n+352\t108\t528\t174\t47\t28\n+714\t391\t449\t0\t210\t257\n+524\t497\t106\t106\t180\t244\n+563\t1023\t366\t471\t397\t460\n+407\t93\t80\t145\t579\t306\n+358\t129\t73\t257\t604\t268\n+1023\t1023\t479\t406\t385\t351\n+1023\t1023\t455\t536\t472\t508\n+474\t172\t563\t0\t160\t111\n+577\t1023\t164\t302\t258\t219\n+348\t73\t521\t212\t0\t142\n+294\t79\t470\t43\t112\t293\n+369\t197\t0\t197\t185\t124\n+389\t121\t71\t179\t637\t297\n+589\t895\t180\t184\t246\t239\n+432\t883\t8\t220\t177\t128\n+601\t1004\t162\t221\t231\t128\n+353\t137\t539\t196\t123\t63\n+357\t127\t40\t203\t520\t174\n+326\t128\t483\t194\t67\t34\n+286\t74\t27\t78\t546\t266\n+394\t158\t130\t82\t596\t314\n+389\t224\t100\t113\t236\t104\n+294\t77\t479\t270\t0\t47\n+556\t946\t156\t211\t299\t177\n+363\t117\t539\t199\t132\t62\n+769\t1023\t189\t288\t291\t28\n+558\t334\t325\t185\t186\t227\n+760\t1023\t181\t271\t239\t258\n+421\t243\t113\t90\t215\t181\n+513\t283\t263\t241\t126\t124\n+686\t935\t227\t267\t223\t109\n+418\t137\t104\t127\t649\t260\n+322\t115\t527\t0\t75\t70\n+563\t1023\t165\t177\t212\t224\n+620\t1023\t238\t267\t176\t206\n+766\t1023\t347\t411\t384\t191\n+378\t159\t41\t186\t637\t245\n+598\t1023\t402\t490\t417\t399\n+349\t142\t0\t191\t643\t286\n+373\t102\t544\t147\t0\t215\n+404\t138\t559\t267\t236\t133\n+277\t47\t486\t242\t61\t120\n+375\t113\t542\t122\t113\t23\n+695\t849\t168\t230\t238\t209\n+466\t185\t569\t184\t112\t238\n+393\t114\t581\t131\t0\t118\n+574\t1023\t127\t275\t245\t207\n+618\t1023\t129\t271\t228\t230\n+605\t1006\t213\t204\t220\t220\n+495\t605\t83\t155\t167\t225\n+716\t807\t131\t269\t126\t129\n+607\t1023\t147\t294\t253\t219\n+392\t236\t484\t237\t29\t106\n+551\t910\t379\t822\t363\t417\n+383\t153\t0\t0\t643\t286\n+1023\t1023\t465\t336\t347\t366\n+316\t233\t31\t209\t140\t307\n+681\t1023\t284\t324\t280\t220\n+418\t143\t553\t171\t98\t195\n+361\t87\t26\t0\t618\t307\n+419\t177\t91\t153\t277\t199\n+598\t984\t87\t260\t246\t263\n+634\t1023\t88\t158\t178\t156\n+595\t1023\t154\t238\t284\t247\n+388\t203\t544\t0\t149\t126\n+354\t159\t504\t210\t0\t152\n+294\t76\t141\t0\t29\t255\n+328\t99\t468\t177\t171\t44\n+283\t128\t463\t112\t0\t126\n+673\t1023\t156\t262\t211\t40\n+409\t115\t515\t217\t52\t193\n+321\t102\t514\t0\t62\t135\n+279\t83\t435\t174\t0\t267\n+565\t1017\t67\t233\t210\t238\n+339\t123\t538\t60\t99\t73\n+343\t148\t44\t134\t615\t235\n+390\t130\t86\t82\t635\t220\n+283\t52\t423\t52\t63\t69\n+548\t843\t101\t49\t239\t133\n+1023\t1023\t307\t345\t357\t285\n+580\t1019\t105\t263\t222\t286\n+597\t1023\t234\t215\t225\t89\n+441\t159\t546\t269\t33\t164\n+330\t101\t531\t0\t59\t14\n+373\t170\t53\t131\t84\t0\n+338\t117\t261\t0\t80\t68\n+398\t155\t144\t123\t616\t223\n+615\t460\t273\t253\t171\t14\n+773\t583\t406\t246\t187\t289\n+369\t121\t556\t167\t0\t175\n+379\t104\t505\t0\t0\t215\n+369\t111\t68\t142\t299\t190\n+358\t102\t552\t190\t18\t169\n+448\t167\t99\t0\t0\t18\n+594\t270\t154\t167\t707\t397\n+501\t193\t147\t0\t39\t199\n+726\t980\t187\t195\t221\t192\n+373\t140\t554\t20\t0\t43\n+423\t152\t116\t0\t591\t142\n+338\t129\t36\t0\t597\t202\n+371\t104\t568\t49\t139\t130\n+353\t112\t550\t48\t0\t95\n+351\t118\t498\t251\t44\t206\n+788\t1023\t124\t266\t221\t278\n+346\t138\t510\t206\t0\t128\n+304\t90\t467\t74\t0\t194\n+655\t530\t275\t285\t246\t309\n+356\t116\t539\t79\t0\t96\n+356\t138\t67\t0\t645\t250\n+656\t1023\t200\t274\t318\t286\n+817\t1023\t155\t266\t240\t173\n+370\t80\t74\t196\t532\t246\n+350\t128\t540\t0\t146\t77\n+691\t1023\t0\t283\t190\t277\n+631\t302\t459\t156\t164\t229\n+645\t285\t388\t205\t187\t196\n+389\t185\t160\t28\t664\t319\n+413\t152\t22\t0\t645\t66\n+464\t230\t97\t170\t164\t109\n+328\t93\t0\t0\t436\t206\n+956\t391\t578\t205\t288\t255\n+335\t141\t520\t103\t21\t155\n+588\t1009\t177\t271\t237\t206\n+427\t132\t549\t1\t68\t270\n+779\t1023\t121\t267\t274\t283\n+599\t933\t192\t228\t173\t256\n+688\t1023\t132\t304\t256\t64\n+333\t79\t493\t123\t8\t128\n+391\t193\t137\t189\t649\t313\n+371\t166\t102\t125\t124\t227\n+690\t931\t174\t282\t264\t161\n+277\t155\t2\t78\t0\t91\n+430\t131\t545\t72\t155\t316\n+361\t146\t26\t73\t659\t267\n+340\t129\t504\t152\t0\t161\n+357\t152\t59\t65\t569\t205\n+620\t1023\t185\t263\t224\t239\n+691\t503\t359\t13\t179\t298\n+365\t206\t523\t174\t0\t162\n+863\t1023\t179\t286\t250\t171\n+367\t92\t478\t159\t132\t126\n+503\t589\t153\t294\t127\t2'..b'\t1023\t222\t198\t274\t293\n+567\t1023\t356\t437\t355\t441\n+414\t150\t138\t100\t649\t325\n+658\t979\t191\t303\t213\t128\n+721\t1023\t166\t260\t318\t232\n+566\t954\t119\t266\t279\t311\n+383\t190\t512\t211\t131\t125\n+367\t108\t523\t0\t83\t122\n+404\t164\t101\t192\t627\t262\n+402\t140\t175\t129\t545\t249\n+376\t156\t548\t180\t33\t219\n+656\t1023\t122\t250\t290\t130\n+342\t92\t42\t51\t652\t337\n+611\t290\t261\t179\t206\t256\n+327\t98\t509\t117\t0\t209\n+324\t105\t532\t166\t0\t254\n+373\t216\t73\t334\t81\t154\n+584\t1023\t116\t219\t126\t250\n+351\t125\t540\t214\t0\t196\n+318\t181\t76\t82\t52\t26\n+327\t114\t510\t220\t0\t57\n+945\t1023\t234\t319\t308\t197\n+412\t133\t564\t199\t100\t165\n+436\t259\t502\t164\t64\t155\n+815\t1023\t120\t292\t223\t136\n+810\t1023\t258\t296\t283\t224\n+420\t91\t525\t1\t0\t22\n+443\t198\t555\t129\t156\t245\n+369\t121\t541\t40\t114\t110\n+494\t295\t147\t150\t128\t103\n+637\t1012\t183\t266\t267\t83\n+375\t164\t106\t166\t642\t239\n+394\t199\t75\t76\t597\t272\n+665\t1023\t195\t223\t251\t195\n+362\t107\t551\t10\t0\t0\n+704\t1023\t206\t175\t191\t267\n+338\t97\t464\t139\t106\t176\n+325\t90\t521\t17\t0\t69\n+379\t212\t526\t140\t85\t191\n+424\t163\t565\t27\t190\t98\n+376\t126\t99\t56\t622\t238\n+398\t190\t124\t150\t628\t269\n+349\t113\t80\t76\t648\t202\n+647\t1019\t154\t245\t221\t240\n+791\t1023\t146\t161\t183\t137\n+363\t169\t548\t129\t91\t252\n+433\t248\t99\t159\t152\t225\n+346\t115\t516\t155\t0\t132\n+758\t1023\t195\t258\t269\t230\n+330\t158\t64\t0\t56\t234\n+374\t119\t548\t146\t0\t22\n+362\t211\t550\t232\t0\t214\n+687\t1023\t194\t282\t197\t115\n+489\t209\t0\t144\t262\t43\n+594\t1023\t343\t500\t375\t406\n+329\t130\t535\t11\t49\t98\n+829\t1023\t186\t238\t227\t176\n+326\t178\t44\t182\t621\t203\n+609\t1023\t99\t225\t206\t183\n+315\t104\t505\t88\t0\t118\n+380\t185\t112\t2\t632\t253\n+709\t491\t332\t198\t232\t159\n+422\t138\t564\t187\t0\t263\n+359\t168\t516\t4\t84\t135\n+766\t1023\t167\t226\t215\t223\n+693\t1023\t201\t291\t238\t121\n+373\t127\t462\t124\t87\t57\n+590\t965\t152\t114\t195\t265\n+582\t375\t413\t171\t121\t232\n+606\t1023\t179\t213\t201\t226\n+358\t96\t63\t164\t593\t283\n+380\t112\t562\t102\t142\t0\n+382\t90\t521\t73\t121\t110\n+351\t95\t540\t0\t178\t127\n+541\t1023\t321\t447\t380\t428\n+331\t176\t497\t172\t0\t141\n+682\t1023\t175\t327\t242\t228\n+378\t114\t532\t148\t0\t135\n+334\t113\t511\t200\t46\t211\n+362\t84\t526\t102\t0\t185\n+791\t1023\t197\t279\t314\t236\n+356\t126\t529\t0\t43\t138\n+696\t1023\t130\t274\t235\t332\n+722\t1023\t190\t260\t250\t237\n+376\t94\t544\t104\t0\t99\n+415\t147\t525\t0\t189\t102\n+641\t950\t91\t250\t244\t212\n+387\t124\t538\t23\t139\t4\n+458\t103\t513\t0\t0\t106\n+414\t126\t86\t95\t567\t171\n+559\t919\t160\t218\t138\t193\n+572\t895\t156\t49\t236\t47\n+381\t111\t510\t93\t0\t95\n+299\t143\t11\t0\t95\t58\n+585\t1023\t197\t221\t216\t193\n+638\t1023\t225\t254\t180\t157\n+369\t162\t540\t81\t0\t56\n+599\t915\t77\t255\t248\t124\n+686\t1023\t89\t257\t217\t232\n+578\t1023\t83\t207\t216\t126\n+364\t120\t503\t0\t153\t225\n+600\t1018\t153\t222\t275\t38\n+383\t192\t101\t229\t624\t224\n+383\t130\t532\t0\t67\t107\n+328\t146\t23\t138\t0\t116\n+272\t75\t99\t154\t220\t133\n+323\t171\t96\t61\t146\t0\n+337\t81\t506\t10\t0\t150\n+290\t151\t0\t0\t106\t159\n+661\t1023\t213\t292\t238\t295\n+590\t1023\t216\t252\t264\t276\n+512\t263\t118\t0\t213\t348\n+315\t126\t502\t269\t48\t98\n+276\t85\t479\t104\t40\t102\n+378\t81\t548\t167\t0\t58\n+387\t154\t0\t190\t656\t362\n+602\t1023\t143\t256\t247\t38\n+341\t142\t530\t7\t89\t46\n+691\t1023\t141\t212\t189\t204\n+576\t1006\t135\t209\t251\t216\n+567\t849\t120\t157\t87\t213\n+705\t1023\t189\t282\t279\t330\n+985\t1023\t421\t292\t257\t220\n+651\t1023\t181\t285\t202\t201\n+693\t1023\t213\t300\t221\t225\n+408\t113\t545\t183\t210\t104\n+418\t143\t545\t0\t82\t126\n+384\t112\t522\t111\t76\t109\n+275\t48\t394\t0\t131\t0\n+359\t113\t42\t80\t600\t163\n+357\t169\t154\t138\t649\t283\n+400\t224\t108\t227\t31\t107\n+346\t88\t82\t84\t196\t98\n+323\t124\t534\t0\t186\t183\n+374\t103\t541\t142\t101\t52\n+380\t105\t508\t170\t126\t313\n+353\t196\t117\t115\t0\t164\n+359\t113\t511\t259\t0\t141\n+377\t137\t558\t11\t0\t14\n+623\t423\t459\t227\t147\t40\n+389\t149\t96\t50\t640\t263\n+543\t1023\t144\t249\t187\t104\n+691\t982\t85\t264\t194\t206\n+627\t1023\t157\t238\t216\t193\n+577\t1023\t165\t258\t299\t198\n+402\t131\t569\t0\t124\t0\n+337\t91\t506\t231\t0\t49\n+636\t870\t91\t227\t96\t172\n+356\t125\t58\t0\t621\t308\n+390\t190\t46\t88\t665\t313\n+351\t68\t529\t86\t0\t56\n+623\t475\t365\t79\t157\t281\n+335\t74\t512\t209\t49\t270\n+496\t194\t105\t202\t427\t25\n+614\t1023\t178\t280\t196\t117\n+381\t84\t545\t101\t0\t140\n+289\t93\t425\t0\t28\t68\n+385\t240\t52\t168\t638\t277\n+322\t162\t103\t0\t52\t61\n+343\t126\t488\t99\t187\t276\n+362\t197\t105\t68\t0\t2\n+378\t99\t527\t0\t0\t116\n+347\t107\t522\t0\t0\t200\n+468\t198\t137\t99\t341\t111\n+572\t967\t57\t255\t159\t220\n+608\t1023\t115\t247\t174\t266\n+637\t1023\t203\t289\t255\t175\n+649\t902\t155\t165\t213\t262\n+322\t148\t0\t187\t87\t115\n'
b
diff -r 81f9b44f5242 -r b6b4d08b6858 test-data/mfi.flowmfi
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/mfi.flowmfi Fri Jul 17 09:06:54 2020 -0400
b
@@ -0,0 +1,31 @@
+Population FSC SSC CD4 CCR3 CD8 CCR7
+1 357 117 517 12 57 111
+2 333 152 69 20 69 106
+3 355 174 76 152 79 77
+4 421 381 147 402 140 186
+5 372 124 524 227 51 131
+6 370 150 75 26 618 264
+7 358 118 513 119 57 114
+8 378 207 99 127 120 218
+9 360 121 518 179 51 38
+10 384 158 83 154 620 272
+11 367 152 70 98 583 164
+12 414 146 527 208 71 282
+13 374 126 520 150 57 196
+14 387 184 91 96 338 101
+15 355 118 515 27 58 34
+16 369 124 516 20 70 188
+17 411 147 530 41 86 301
+18 675 453 385 196 184 256
+19 613 988 153 256 222 257
+20 620 986 151 255 224 180
+21 745 1015 190 274 255 261
+22 655 987 153 244 224 70
+23 540 926 347 485 363 413
+24 766 1012 181 267 243 163
+25 966 965 328 323 295 331
+26 650 392 384 179 171 121
+27 612 965 145 152 213 228
+28 578 934 128 172 209 129
+29 979 1010 437 523 406 456
+30 749 858 535 834 564 580
b
diff -r 81f9b44f5242 -r b6b4d08b6858 test-data/mfi2.flowmfi
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/mfi2.flowmfi Fri Jul 17 09:06:54 2020 -0400
b
@@ -0,0 +1,15 @@
+Population FSC SSC CD4 CCR3 CD8 CCR7
+1 367 123 521 108 59 131
+2 360 183 77 104 121 127
+3 375 154 77 95 610 244
+4 361 129 289 89 84 93
+5 648 399 415 19 173 207
+6 695 472 397 233 188 255
+7 659 980 162 242 229 197
+8 442 383 325 616 334 397
+9 651 402 390 178 171 142
+10 574 983 351 479 362 412
+11 493 634 496 864 562 577
+12 509 341 169 224 161 383
+13 1007 976 326 320 298 306
+14 996 1013 454 536 426 469
b
diff -r 81f9b44f5242 -r b6b4d08b6858 test-data/mfi3.flowmfi
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/mfi3.flowmfi Fri Jul 17 09:06:54 2020 -0400
b
@@ -0,0 +1,10 @@
+Population FSC SSC CD4 CCR3 CD8 CCR7
+1 375 155 78 95 607 244
+2 366 123 519 189 53 95
+3 357 178 79 99 116 124
+4 387 132 522 110 67 234
+5 653 422 372 195 177 212
+6 357 118 513 28 60 95
+7 630 966 148 227 219 135
+8 724 937 380 497 376 426
+9 694 997 177 257 239 247
b
diff -r 81f9b44f5242 -r b6b4d08b6858 test-data/out1.flowclr
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out1.flowclr Fri Jul 17 09:06:54 2020 -0400
b
b'@@ -0,0 +1,20000 @@\n+FSC\tSSC\tCD4\tCCR3\tCD8\tCCR7\tPopulation\n+328\t122\t547\t94\t85\t93\t7\n+581\t1023\t143\t235\t270\t106\t22\n+427\t172\t140\t200\t631\t300\t10\n+363\t92\t526\t0\t140\t5\t15\n+416\t113\t485\t22\t157\t226\t16\n+317\t100\t488\t165\t83\t39\t9\n+636\t436\t439\t143\t81\t217\t18\n+262\t49\t395\t0\t42\t171\t16\n+332\t147\t534\t241\t142\t43\t9\n+567\t454\t305\t30\t168\t236\t18\n+333\t138\t104\t0\t612\t225\t6\n+359\t100\t530\t132\t63\t100\t7\n+298\t85\t480\t253\t0\t171\t5\n+392\t123\t90\t176\t623\t182\t11\n+303\t112\t0\t115\t84\t64\t3\n+591\t948\t188\t176\t247\t130\t28\n+687\t535\t422\t301\t156\t230\t18\n+372\t151\t524\t182\t16\t273\t12\n+420\t180\t555\t88\t0\t119\t7\n+401\t182\t104\t76\t103\t138\t2\n+571\t1023\t364\t461\t377\t463\t23\n+398\t169\t92\t126\t668\t312\t10\n+378\t152\t552\t114\t125\t92\t7\n+352\t108\t528\t174\t47\t28\t9\n+714\t391\t449\t0\t210\t257\t18\n+524\t497\t106\t106\t180\t244\t8\n+563\t1023\t366\t471\t397\t460\t23\n+407\t93\t80\t145\t579\t306\t10\n+358\t129\t73\t257\t604\t268\t10\n+1023\t1023\t479\t406\t385\t351\t25\n+1023\t1023\t455\t536\t472\t508\t29\n+474\t172\t563\t0\t160\t111\t1\n+577\t1023\t164\t302\t258\t219\t19\n+348\t73\t521\t212\t0\t142\t5\n+294\t79\t470\t43\t112\t293\t17\n+369\t197\t0\t197\t185\t124\t3\n+389\t121\t71\t179\t637\t297\t10\n+589\t895\t180\t184\t246\t239\t27\n+432\t883\t8\t220\t177\t128\t28\n+601\t1004\t162\t221\t231\t128\t28\n+353\t137\t539\t196\t123\t63\t9\n+357\t127\t40\t203\t520\t174\t11\n+326\t128\t483\t194\t67\t34\t9\n+286\t74\t27\t78\t546\t266\t6\n+394\t158\t130\t82\t596\t314\t6\n+389\t224\t100\t113\t236\t104\t14\n+294\t77\t479\t270\t0\t47\t9\n+556\t946\t156\t211\t299\t177\t20\n+363\t117\t539\t199\t132\t62\t9\n+769\t1023\t189\t288\t291\t28\t22\n+558\t334\t325\t185\t186\t227\t18\n+760\t1023\t181\t271\t239\t258\t21\n+421\t243\t113\t90\t215\t181\t8\n+513\t283\t263\t241\t126\t124\t26\n+686\t935\t227\t267\t223\t109\t22\n+418\t137\t104\t127\t649\t260\t10\n+322\t115\t527\t0\t75\t70\t15\n+563\t1023\t165\t177\t212\t224\t27\n+620\t1023\t238\t267\t176\t206\t20\n+766\t1023\t347\t411\t384\t191\t24\n+378\t159\t41\t186\t637\t245\t10\n+598\t1023\t402\t490\t417\t399\t23\n+349\t142\t0\t191\t643\t286\t10\n+373\t102\t544\t147\t0\t215\t13\n+404\t138\t559\t267\t236\t133\t5\n+277\t47\t486\t242\t61\t120\t5\n+375\t113\t542\t122\t113\t23\t9\n+695\t849\t168\t230\t238\t209\t20\n+466\t185\t569\t184\t112\t238\t12\n+393\t114\t581\t131\t0\t118\t7\n+574\t1023\t127\t275\t245\t207\t20\n+618\t1023\t129\t271\t228\t230\t19\n+605\t1006\t213\t204\t220\t220\t27\n+495\t605\t83\t155\t167\t225\t27\n+716\t807\t131\t269\t126\t129\t24\n+607\t1023\t147\t294\t253\t219\t19\n+392\t236\t484\t237\t29\t106\t5\n+551\t910\t379\t822\t363\t417\t30\n+383\t153\t0\t0\t643\t286\t6\n+1023\t1023\t465\t336\t347\t366\t25\n+316\t233\t31\t209\t140\t307\t8\n+681\t1023\t284\t324\t280\t220\t21\n+418\t143\t553\t171\t98\t195\t13\n+361\t87\t26\t0\t618\t307\t6\n+419\t177\t91\t153\t277\t199\t8\n+598\t984\t87\t260\t246\t263\t19\n+634\t1023\t88\t158\t178\t156\t28\n+595\t1023\t154\t238\t284\t247\t19\n+388\t203\t544\t0\t149\t126\t1\n+354\t159\t504\t210\t0\t152\t5\n+294\t76\t141\t0\t29\t255\t8\n+328\t99\t468\t177\t171\t44\t9\n+283\t128\t463\t112\t0\t126\t7\n+673\t1023\t156\t262\t211\t40\t22\n+409\t115\t515\t217\t52\t193\t13\n+321\t102\t514\t0\t62\t135\t1\n+279\t83\t435\t174\t0\t267\t12\n+565\t1017\t67\t233\t210\t238\t19\n+339\t123\t538\t60\t99\t73\t15\n+343\t148\t44\t134\t615\t235\t10\n+390\t130\t86\t82\t635\t220\t11\n+283\t52\t423\t52\t63\t69\t15\n+548\t843\t101\t49\t239\t133\t28\n+1023\t1023\t307\t345\t357\t285\t25\n+580\t1019\t105\t263\t222\t286\t19\n+597\t1023\t234\t215\t225\t89\t22\n+441\t159\t546\t269\t33\t164\t5\n+330\t101\t531\t0\t59\t14\t15\n+373\t170\t53\t131\t84\t0\t3\n+338\t117\t261\t0\t80\t68\t2\n+398\t155\t144\t123\t616\t223\t10\n+615\t460\t273\t253\t171\t14\t26\n+773\t583\t406\t246\t187\t289\t18\n+369\t121\t556\t167\t0\t175\t13\n+379\t104\t505\t0\t0\t215\t16\n+369\t111\t68\t142\t299\t190\t8\n+358\t102\t552\t190\t18\t169\t13\n+448\t167\t99\t0\t0\t18\t2\n+594\t270\t154\t167\t707\t397\t10\n+501\t193\t147\t0\t39\t199\t8\n+726\t980\t187\t195\t221\t192\t24\n+373\t140\t554\t20\t0\t43\t15\n+423\t152\t116\t0\t591\t142\t11\n+338\t129\t36\t0\t597\t202\t6\n+371\t104\t568\t49\t139\t130\t1\n+353\t112\t550\t48\t0\t95\t1\n+351\t118\t498\t251\t44\t206\t5\n+788\t1023\t124\t266\t221\t278\t21\n+346\t138\t510\t206\t0\t128\t5\n+304\t90\t467\t74\t0\t194\t16\n+655\t530\t275\t285\t246\t309\t18\n+356\t116\t539\t79\t0\t96\t7\n+356\t138\t67\t0\t645\t250\t6\n+656\t1023\t200\t274\t318\t286\t21\n+817\t1023\t155\t266\t240\t173\t24\n+370\t80\t74\t196\t532\t246\t10\n+350\t128\t540\t0\t146\t77\t1\n+691\t1023\t0\t283\t190\t277\t19\n+631\t302\t459\t156\t164\t229\t18\n+645\t285\t388\t205\t187\t196\t18\n+389\t185\t160\t28\t664\t319\t6\n+413\t152\t22\t0\t645\t66\t11\n+464\t230\t97\t170\t164\t109\t3\n+328\t93\t0\t0\t436\t206\t6\n+956\t391\t578\t205\t288\t255\t18\n+335\t141\t520\t103\t21\t155\t7\n+588\t1009\t177\t271\t237\t206\t20\n+427\t132\t549\t1\t68\t270\t17\n+779\t1023\t121\t267\t274\t283\t21\n+'..b'\t154\t4\n+584\t1023\t116\t219\t126\t250\t19\n+351\t125\t540\t214\t0\t196\t13\n+318\t181\t76\t82\t52\t26\t3\n+327\t114\t510\t220\t0\t57\t9\n+945\t1023\t234\t319\t308\t197\t24\n+412\t133\t564\t199\t100\t165\t5\n+436\t259\t502\t164\t64\t155\t13\n+815\t1023\t120\t292\t223\t136\t24\n+810\t1023\t258\t296\t283\t224\t21\n+420\t91\t525\t1\t0\t22\t15\n+443\t198\t555\t129\t156\t245\t13\n+369\t121\t541\t40\t114\t110\t1\n+494\t295\t147\t150\t128\t103\t3\n+637\t1012\t183\t266\t267\t83\t22\n+375\t164\t106\t166\t642\t239\t10\n+394\t199\t75\t76\t597\t272\t6\n+665\t1023\t195\t223\t251\t195\t20\n+362\t107\t551\t10\t0\t0\t15\n+704\t1023\t206\t175\t191\t267\t27\n+338\t97\t464\t139\t106\t176\t13\n+325\t90\t521\t17\t0\t69\t15\n+379\t212\t526\t140\t85\t191\t13\n+424\t163\t565\t27\t190\t98\t1\n+376\t126\t99\t56\t622\t238\t6\n+398\t190\t124\t150\t628\t269\t10\n+349\t113\t80\t76\t648\t202\t11\n+647\t1019\t154\t245\t221\t240\t19\n+791\t1023\t146\t161\t183\t137\t24\n+363\t169\t548\t129\t91\t252\t13\n+433\t248\t99\t159\t152\t225\t8\n+346\t115\t516\t155\t0\t132\t7\n+758\t1023\t195\t258\t269\t230\t21\n+330\t158\t64\t0\t56\t234\t8\n+374\t119\t548\t146\t0\t22\t9\n+362\t211\t550\t232\t0\t214\t13\n+687\t1023\t194\t282\t197\t115\t22\n+489\t209\t0\t144\t262\t43\t14\n+594\t1023\t343\t500\t375\t406\t23\n+329\t130\t535\t11\t49\t98\t1\n+829\t1023\t186\t238\t227\t176\t24\n+326\t178\t44\t182\t621\t203\t10\n+609\t1023\t99\t225\t206\t183\t20\n+315\t104\t505\t88\t0\t118\t7\n+380\t185\t112\t2\t632\t253\t6\n+709\t491\t332\t198\t232\t159\t26\n+422\t138\t564\t187\t0\t263\t12\n+359\t168\t516\t4\t84\t135\t1\n+766\t1023\t167\t226\t215\t223\t21\n+693\t1023\t201\t291\t238\t121\t24\n+373\t127\t462\t124\t87\t57\t9\n+590\t965\t152\t114\t195\t265\t27\n+582\t375\t413\t171\t121\t232\t18\n+606\t1023\t179\t213\t201\t226\t19\n+358\t96\t63\t164\t593\t283\t10\n+380\t112\t562\t102\t142\t0\t15\n+382\t90\t521\t73\t121\t110\t7\n+351\t95\t540\t0\t178\t127\t1\n+541\t1023\t321\t447\t380\t428\t23\n+331\t176\t497\t172\t0\t141\t5\n+682\t1023\t175\t327\t242\t228\t21\n+378\t114\t532\t148\t0\t135\t7\n+334\t113\t511\t200\t46\t211\t13\n+362\t84\t526\t102\t0\t185\t13\n+791\t1023\t197\t279\t314\t236\t21\n+356\t126\t529\t0\t43\t138\t1\n+696\t1023\t130\t274\t235\t332\t21\n+722\t1023\t190\t260\t250\t237\t21\n+376\t94\t544\t104\t0\t99\t7\n+415\t147\t525\t0\t189\t102\t1\n+641\t950\t91\t250\t244\t212\t20\n+387\t124\t538\t23\t139\t4\t15\n+458\t103\t513\t0\t0\t106\t1\n+414\t126\t86\t95\t567\t171\t11\n+559\t919\t160\t218\t138\t193\t20\n+572\t895\t156\t49\t236\t47\t28\n+381\t111\t510\t93\t0\t95\t7\n+299\t143\t11\t0\t95\t58\t2\n+585\t1023\t197\t221\t216\t193\t20\n+638\t1023\t225\t254\t180\t157\t20\n+369\t162\t540\t81\t0\t56\t15\n+599\t915\t77\t255\t248\t124\t20\n+686\t1023\t89\t257\t217\t232\t19\n+578\t1023\t83\t207\t216\t126\t28\n+364\t120\t503\t0\t153\t225\t16\n+600\t1018\t153\t222\t275\t38\t22\n+383\t192\t101\t229\t624\t224\t10\n+383\t130\t532\t0\t67\t107\t1\n+328\t146\t23\t138\t0\t116\t3\n+272\t75\t99\t154\t220\t133\t3\n+323\t171\t96\t61\t146\t0\t3\n+337\t81\t506\t10\t0\t150\t1\n+290\t151\t0\t0\t106\t159\t2\n+661\t1023\t213\t292\t238\t295\t21\n+590\t1023\t216\t252\t264\t276\t19\n+512\t263\t118\t0\t213\t348\t8\n+315\t126\t502\t269\t48\t98\t5\n+276\t85\t479\t104\t40\t102\t7\n+378\t81\t548\t167\t0\t58\t9\n+387\t154\t0\t190\t656\t362\t10\n+602\t1023\t143\t256\t247\t38\t22\n+341\t142\t530\t7\t89\t46\t15\n+691\t1023\t141\t212\t189\t204\t20\n+576\t1006\t135\t209\t251\t216\t27\n+567\t849\t120\t157\t87\t213\t27\n+705\t1023\t189\t282\t279\t330\t21\n+985\t1023\t421\t292\t257\t220\t25\n+651\t1023\t181\t285\t202\t201\t20\n+693\t1023\t213\t300\t221\t225\t21\n+408\t113\t545\t183\t210\t104\t5\n+418\t143\t545\t0\t82\t126\t1\n+384\t112\t522\t111\t76\t109\t7\n+275\t48\t394\t0\t131\t0\t15\n+359\t113\t42\t80\t600\t163\t11\n+357\t169\t154\t138\t649\t283\t10\n+400\t224\t108\t227\t31\t107\t3\n+346\t88\t82\t84\t196\t98\t14\n+323\t124\t534\t0\t186\t183\t16\n+374\t103\t541\t142\t101\t52\t9\n+380\t105\t508\t170\t126\t313\t12\n+353\t196\t117\t115\t0\t164\t8\n+359\t113\t511\t259\t0\t141\t5\n+377\t137\t558\t11\t0\t14\t15\n+623\t423\t459\t227\t147\t40\t26\n+389\t149\t96\t50\t640\t263\t6\n+543\t1023\t144\t249\t187\t104\t28\n+691\t982\t85\t264\t194\t206\t20\n+627\t1023\t157\t238\t216\t193\t20\n+577\t1023\t165\t258\t299\t198\t20\n+402\t131\t569\t0\t124\t0\t15\n+337\t91\t506\t231\t0\t49\t9\n+636\t870\t91\t227\t96\t172\t20\n+356\t125\t58\t0\t621\t308\t6\n+390\t190\t46\t88\t665\t313\t10\n+351\t68\t529\t86\t0\t56\t15\n+623\t475\t365\t79\t157\t281\t18\n+335\t74\t512\t209\t49\t270\t12\n+496\t194\t105\t202\t427\t25\t14\n+614\t1023\t178\t280\t196\t117\t22\n+381\t84\t545\t101\t0\t140\t7\n+289\t93\t425\t0\t28\t68\t15\n+385\t240\t52\t168\t638\t277\t10\n+322\t162\t103\t0\t52\t61\t2\n+343\t126\t488\t99\t187\t276\t17\n+362\t197\t105\t68\t0\t2\t3\n+378\t99\t527\t0\t0\t116\t1\n+347\t107\t522\t0\t0\t200\t16\n+468\t198\t137\t99\t341\t111\t14\n+572\t967\t57\t255\t159\t220\t19\n+608\t1023\t115\t247\t174\t266\t19\n+637\t1023\t203\t289\t255\t175\t20\n+649\t902\t155\t165\t213\t262\t27\n+322\t148\t0\t187\t87\t115\t3\n'
b
diff -r 81f9b44f5242 -r b6b4d08b6858 test-data/out1.flowscore
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out1.flowscore Fri Jul 17 09:06:54 2020 -0400
b
@@ -0,0 +1,31 @@
+Population_ID FSC SSC CD4 CCR3 CD8 CCR7 Count Percentage
+1 1 1 3 1 1 1 1093 5.47
+2 1 1 1 1 1 1 695 3.48
+3 1 1 1 1 1 1 574 2.87
+4 1 2 1 2 1 1 146 0.73
+5 1 1 3 1 1 1 982 4.91
+6 1 1 1 1 3 2 1212 6.06
+7 1 1 3 1 1 1 1055 5.28
+8 1 1 1 1 1 1 578 2.89
+9 1 1 3 1 1 1 986 4.93
+10 1 1 1 1 3 2 1326 6.63
+11 1 1 1 1 3 1 693 3.47
+12 1 1 3 1 1 2 368 1.84
+13 1 1 3 1 1 1 841 4.21
+14 1 1 1 1 2 1 315 1.58
+15 1 1 3 1 1 1 879 4.40
+16 1 1 3 1 1 1 911 4.56
+17 1 1 3 1 1 2 323 1.62
+18 3 2 3 1 1 2 522 2.61
+19 2 4 1 1 1 2 1003 5.02
+20 2 4 1 1 1 1 1081 5.41
+21 3 4 1 2 2 2 947 4.74
+22 3 4 1 1 1 1 597 2.99
+23 2 4 2 2 2 3 297 1.49
+24 3 4 1 2 1 1 699 3.50
+25 4 4 2 2 2 2 289 1.45
+26 3 2 3 1 1 1 364 1.82
+27 2 4 1 1 1 2 586 2.93
+28 2 4 1 1 1 1 485 2.43
+29 4 4 3 2 2 3 106 0.53
+30 4 4 3 4 2 3 46 0.23
b
diff -r 81f9b44f5242 -r b6b4d08b6858 test-data/out2.flowclr
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out2.flowclr Fri Jul 17 09:06:54 2020 -0400
b
b'@@ -0,0 +1,20000 @@\n+FSC\tSSC\tCD4\tCCR3\tCD8\tCCR7\tPopulation\n+328\t122\t547\t94\t85\t93\t1\n+581\t1023\t143\t235\t270\t106\t7\n+427\t172\t140\t200\t631\t300\t3\n+363\t92\t526\t0\t140\t5\t1\n+416\t113\t485\t22\t157\t226\t1\n+317\t100\t488\t165\t83\t39\t1\n+636\t436\t439\t143\t81\t217\t9\n+262\t49\t395\t0\t42\t171\t1\n+332\t147\t534\t241\t142\t43\t1\n+567\t454\t305\t30\t168\t236\t5\n+333\t138\t104\t0\t612\t225\t3\n+359\t100\t530\t132\t63\t100\t1\n+298\t85\t480\t253\t0\t171\t1\n+392\t123\t90\t176\t623\t182\t3\n+303\t112\t0\t115\t84\t64\t2\n+591\t948\t188\t176\t247\t130\t7\n+687\t535\t422\t301\t156\t230\t6\n+372\t151\t524\t182\t16\t273\t1\n+420\t180\t555\t88\t0\t119\t1\n+401\t182\t104\t76\t103\t138\t2\n+571\t1023\t364\t461\t377\t463\t10\n+398\t169\t92\t126\t668\t312\t3\n+378\t152\t552\t114\t125\t92\t1\n+352\t108\t528\t174\t47\t28\t1\n+714\t391\t449\t0\t210\t257\t5\n+524\t497\t106\t106\t180\t244\t2\n+563\t1023\t366\t471\t397\t460\t10\n+407\t93\t80\t145\t579\t306\t3\n+358\t129\t73\t257\t604\t268\t3\n+1023\t1023\t479\t406\t385\t351\t14\n+1023\t1023\t455\t536\t472\t508\t14\n+474\t172\t563\t0\t160\t111\t1\n+577\t1023\t164\t302\t258\t219\t7\n+348\t73\t521\t212\t0\t142\t1\n+294\t79\t470\t43\t112\t293\t1\n+369\t197\t0\t197\t185\t124\t2\n+389\t121\t71\t179\t637\t297\t3\n+589\t895\t180\t184\t246\t239\t7\n+432\t883\t8\t220\t177\t128\t7\n+601\t1004\t162\t221\t231\t128\t7\n+353\t137\t539\t196\t123\t63\t1\n+357\t127\t40\t203\t520\t174\t3\n+326\t128\t483\t194\t67\t34\t1\n+286\t74\t27\t78\t546\t266\t3\n+394\t158\t130\t82\t596\t314\t3\n+389\t224\t100\t113\t236\t104\t2\n+294\t77\t479\t270\t0\t47\t1\n+556\t946\t156\t211\t299\t177\t7\n+363\t117\t539\t199\t132\t62\t1\n+769\t1023\t189\t288\t291\t28\t7\n+558\t334\t325\t185\t186\t227\t6\n+760\t1023\t181\t271\t239\t258\t7\n+421\t243\t113\t90\t215\t181\t2\n+513\t283\t263\t241\t126\t124\t9\n+686\t935\t227\t267\t223\t109\t7\n+418\t137\t104\t127\t649\t260\t3\n+322\t115\t527\t0\t75\t70\t1\n+563\t1023\t165\t177\t212\t224\t7\n+620\t1023\t238\t267\t176\t206\t7\n+766\t1023\t347\t411\t384\t191\t7\n+378\t159\t41\t186\t637\t245\t3\n+598\t1023\t402\t490\t417\t399\t10\n+349\t142\t0\t191\t643\t286\t3\n+373\t102\t544\t147\t0\t215\t1\n+404\t138\t559\t267\t236\t133\t1\n+277\t47\t486\t242\t61\t120\t1\n+375\t113\t542\t122\t113\t23\t1\n+695\t849\t168\t230\t238\t209\t7\n+466\t185\t569\t184\t112\t238\t1\n+393\t114\t581\t131\t0\t118\t1\n+574\t1023\t127\t275\t245\t207\t7\n+618\t1023\t129\t271\t228\t230\t7\n+605\t1006\t213\t204\t220\t220\t7\n+495\t605\t83\t155\t167\t225\t7\n+716\t807\t131\t269\t126\t129\t7\n+607\t1023\t147\t294\t253\t219\t7\n+392\t236\t484\t237\t29\t106\t1\n+551\t910\t379\t822\t363\t417\t11\n+383\t153\t0\t0\t643\t286\t3\n+1023\t1023\t465\t336\t347\t366\t13\n+316\t233\t31\t209\t140\t307\t2\n+681\t1023\t284\t324\t280\t220\t7\n+418\t143\t553\t171\t98\t195\t1\n+361\t87\t26\t0\t618\t307\t3\n+419\t177\t91\t153\t277\t199\t2\n+598\t984\t87\t260\t246\t263\t7\n+634\t1023\t88\t158\t178\t156\t7\n+595\t1023\t154\t238\t284\t247\t7\n+388\t203\t544\t0\t149\t126\t1\n+354\t159\t504\t210\t0\t152\t1\n+294\t76\t141\t0\t29\t255\t2\n+328\t99\t468\t177\t171\t44\t1\n+283\t128\t463\t112\t0\t126\t1\n+673\t1023\t156\t262\t211\t40\t7\n+409\t115\t515\t217\t52\t193\t1\n+321\t102\t514\t0\t62\t135\t1\n+279\t83\t435\t174\t0\t267\t1\n+565\t1017\t67\t233\t210\t238\t7\n+339\t123\t538\t60\t99\t73\t1\n+343\t148\t44\t134\t615\t235\t3\n+390\t130\t86\t82\t635\t220\t3\n+283\t52\t423\t52\t63\t69\t1\n+548\t843\t101\t49\t239\t133\t7\n+1023\t1023\t307\t345\t357\t285\t13\n+580\t1019\t105\t263\t222\t286\t7\n+597\t1023\t234\t215\t225\t89\t7\n+441\t159\t546\t269\t33\t164\t1\n+330\t101\t531\t0\t59\t14\t1\n+373\t170\t53\t131\t84\t0\t2\n+338\t117\t261\t0\t80\t68\t4\n+398\t155\t144\t123\t616\t223\t3\n+615\t460\t273\t253\t171\t14\t9\n+773\t583\t406\t246\t187\t289\t6\n+369\t121\t556\t167\t0\t175\t1\n+379\t104\t505\t0\t0\t215\t1\n+369\t111\t68\t142\t299\t190\t2\n+358\t102\t552\t190\t18\t169\t1\n+448\t167\t99\t0\t0\t18\t2\n+594\t270\t154\t167\t707\t397\t3\n+501\t193\t147\t0\t39\t199\t2\n+726\t980\t187\t195\t221\t192\t7\n+373\t140\t554\t20\t0\t43\t1\n+423\t152\t116\t0\t591\t142\t3\n+338\t129\t36\t0\t597\t202\t3\n+371\t104\t568\t49\t139\t130\t1\n+353\t112\t550\t48\t0\t95\t1\n+351\t118\t498\t251\t44\t206\t1\n+788\t1023\t124\t266\t221\t278\t7\n+346\t138\t510\t206\t0\t128\t1\n+304\t90\t467\t74\t0\t194\t1\n+655\t530\t275\t285\t246\t309\t6\n+356\t116\t539\t79\t0\t96\t1\n+356\t138\t67\t0\t645\t250\t3\n+656\t1023\t200\t274\t318\t286\t7\n+817\t1023\t155\t266\t240\t173\t7\n+370\t80\t74\t196\t532\t246\t3\n+350\t128\t540\t0\t146\t77\t1\n+691\t1023\t0\t283\t190\t277\t7\n+631\t302\t459\t156\t164\t229\t9\n+645\t285\t388\t205\t187\t196\t6\n+389\t185\t160\t28\t664\t319\t3\n+413\t152\t22\t0\t645\t66\t3\n+464\t230\t97\t170\t164\t109\t2\n+328\t93\t0\t0\t436\t206\t3\n+956\t391\t578\t205\t288\t255\t6\n+335\t141\t520\t103\t21\t155\t1\n+588\t1009\t177\t271\t237\t206\t7\n+427\t132\t549\t1\t68\t270\t1\n+779\t1023\t121\t267\t274\t283\t7\n+599\t933\t192\t228\t173\t256\t7\n+688\t1023\t132\t304\t256\t64\t7\n+333\t79\t493\t123\t8\t128\t1\n+391\t193\t'..b'3\n+611\t290\t261\t179\t206\t256\t6\n+327\t98\t509\t117\t0\t209\t1\n+324\t105\t532\t166\t0\t254\t1\n+373\t216\t73\t334\t81\t154\t2\n+584\t1023\t116\t219\t126\t250\t7\n+351\t125\t540\t214\t0\t196\t1\n+318\t181\t76\t82\t52\t26\t2\n+327\t114\t510\t220\t0\t57\t1\n+945\t1023\t234\t319\t308\t197\t13\n+412\t133\t564\t199\t100\t165\t1\n+436\t259\t502\t164\t64\t155\t1\n+815\t1023\t120\t292\t223\t136\t7\n+810\t1023\t258\t296\t283\t224\t7\n+420\t91\t525\t1\t0\t22\t1\n+443\t198\t555\t129\t156\t245\t1\n+369\t121\t541\t40\t114\t110\t1\n+494\t295\t147\t150\t128\t103\t2\n+637\t1012\t183\t266\t267\t83\t7\n+375\t164\t106\t166\t642\t239\t3\n+394\t199\t75\t76\t597\t272\t3\n+665\t1023\t195\t223\t251\t195\t7\n+362\t107\t551\t10\t0\t0\t1\n+704\t1023\t206\t175\t191\t267\t7\n+338\t97\t464\t139\t106\t176\t1\n+325\t90\t521\t17\t0\t69\t1\n+379\t212\t526\t140\t85\t191\t1\n+424\t163\t565\t27\t190\t98\t1\n+376\t126\t99\t56\t622\t238\t3\n+398\t190\t124\t150\t628\t269\t3\n+349\t113\t80\t76\t648\t202\t3\n+647\t1019\t154\t245\t221\t240\t7\n+791\t1023\t146\t161\t183\t137\t7\n+363\t169\t548\t129\t91\t252\t1\n+433\t248\t99\t159\t152\t225\t2\n+346\t115\t516\t155\t0\t132\t1\n+758\t1023\t195\t258\t269\t230\t7\n+330\t158\t64\t0\t56\t234\t2\n+374\t119\t548\t146\t0\t22\t1\n+362\t211\t550\t232\t0\t214\t1\n+687\t1023\t194\t282\t197\t115\t7\n+489\t209\t0\t144\t262\t43\t2\n+594\t1023\t343\t500\t375\t406\t10\n+329\t130\t535\t11\t49\t98\t1\n+829\t1023\t186\t238\t227\t176\t7\n+326\t178\t44\t182\t621\t203\t3\n+609\t1023\t99\t225\t206\t183\t7\n+315\t104\t505\t88\t0\t118\t1\n+380\t185\t112\t2\t632\t253\t3\n+709\t491\t332\t198\t232\t159\t9\n+422\t138\t564\t187\t0\t263\t1\n+359\t168\t516\t4\t84\t135\t1\n+766\t1023\t167\t226\t215\t223\t7\n+693\t1023\t201\t291\t238\t121\t7\n+373\t127\t462\t124\t87\t57\t1\n+590\t965\t152\t114\t195\t265\t7\n+582\t375\t413\t171\t121\t232\t9\n+606\t1023\t179\t213\t201\t226\t7\n+358\t96\t63\t164\t593\t283\t3\n+380\t112\t562\t102\t142\t0\t1\n+382\t90\t521\t73\t121\t110\t1\n+351\t95\t540\t0\t178\t127\t1\n+541\t1023\t321\t447\t380\t428\t10\n+331\t176\t497\t172\t0\t141\t1\n+682\t1023\t175\t327\t242\t228\t7\n+378\t114\t532\t148\t0\t135\t1\n+334\t113\t511\t200\t46\t211\t1\n+362\t84\t526\t102\t0\t185\t1\n+791\t1023\t197\t279\t314\t236\t7\n+356\t126\t529\t0\t43\t138\t1\n+696\t1023\t130\t274\t235\t332\t7\n+722\t1023\t190\t260\t250\t237\t7\n+376\t94\t544\t104\t0\t99\t1\n+415\t147\t525\t0\t189\t102\t1\n+641\t950\t91\t250\t244\t212\t7\n+387\t124\t538\t23\t139\t4\t1\n+458\t103\t513\t0\t0\t106\t1\n+414\t126\t86\t95\t567\t171\t3\n+559\t919\t160\t218\t138\t193\t7\n+572\t895\t156\t49\t236\t47\t7\n+381\t111\t510\t93\t0\t95\t1\n+299\t143\t11\t0\t95\t58\t2\n+585\t1023\t197\t221\t216\t193\t7\n+638\t1023\t225\t254\t180\t157\t7\n+369\t162\t540\t81\t0\t56\t1\n+599\t915\t77\t255\t248\t124\t7\n+686\t1023\t89\t257\t217\t232\t7\n+578\t1023\t83\t207\t216\t126\t7\n+364\t120\t503\t0\t153\t225\t1\n+600\t1018\t153\t222\t275\t38\t7\n+383\t192\t101\t229\t624\t224\t3\n+383\t130\t532\t0\t67\t107\t1\n+328\t146\t23\t138\t0\t116\t2\n+272\t75\t99\t154\t220\t133\t2\n+323\t171\t96\t61\t146\t0\t2\n+337\t81\t506\t10\t0\t150\t1\n+290\t151\t0\t0\t106\t159\t2\n+661\t1023\t213\t292\t238\t295\t7\n+590\t1023\t216\t252\t264\t276\t7\n+512\t263\t118\t0\t213\t348\t2\n+315\t126\t502\t269\t48\t98\t1\n+276\t85\t479\t104\t40\t102\t1\n+378\t81\t548\t167\t0\t58\t1\n+387\t154\t0\t190\t656\t362\t3\n+602\t1023\t143\t256\t247\t38\t7\n+341\t142\t530\t7\t89\t46\t1\n+691\t1023\t141\t212\t189\t204\t7\n+576\t1006\t135\t209\t251\t216\t7\n+567\t849\t120\t157\t87\t213\t7\n+705\t1023\t189\t282\t279\t330\t7\n+985\t1023\t421\t292\t257\t220\t13\n+651\t1023\t181\t285\t202\t201\t7\n+693\t1023\t213\t300\t221\t225\t7\n+408\t113\t545\t183\t210\t104\t1\n+418\t143\t545\t0\t82\t126\t1\n+384\t112\t522\t111\t76\t109\t1\n+275\t48\t394\t0\t131\t0\t1\n+359\t113\t42\t80\t600\t163\t3\n+357\t169\t154\t138\t649\t283\t3\n+400\t224\t108\t227\t31\t107\t2\n+346\t88\t82\t84\t196\t98\t2\n+323\t124\t534\t0\t186\t183\t1\n+374\t103\t541\t142\t101\t52\t1\n+380\t105\t508\t170\t126\t313\t1\n+353\t196\t117\t115\t0\t164\t2\n+359\t113\t511\t259\t0\t141\t1\n+377\t137\t558\t11\t0\t14\t1\n+623\t423\t459\t227\t147\t40\t9\n+389\t149\t96\t50\t640\t263\t3\n+543\t1023\t144\t249\t187\t104\t7\n+691\t982\t85\t264\t194\t206\t7\n+627\t1023\t157\t238\t216\t193\t7\n+577\t1023\t165\t258\t299\t198\t7\n+402\t131\t569\t0\t124\t0\t1\n+337\t91\t506\t231\t0\t49\t1\n+636\t870\t91\t227\t96\t172\t7\n+356\t125\t58\t0\t621\t308\t3\n+390\t190\t46\t88\t665\t313\t3\n+351\t68\t529\t86\t0\t56\t1\n+623\t475\t365\t79\t157\t281\t9\n+335\t74\t512\t209\t49\t270\t1\n+496\t194\t105\t202\t427\t25\t2\n+614\t1023\t178\t280\t196\t117\t7\n+381\t84\t545\t101\t0\t140\t1\n+289\t93\t425\t0\t28\t68\t1\n+385\t240\t52\t168\t638\t277\t3\n+322\t162\t103\t0\t52\t61\t2\n+343\t126\t488\t99\t187\t276\t1\n+362\t197\t105\t68\t0\t2\t2\n+378\t99\t527\t0\t0\t116\t1\n+347\t107\t522\t0\t0\t200\t1\n+468\t198\t137\t99\t341\t111\t2\n+572\t967\t57\t255\t159\t220\t7\n+608\t1023\t115\t247\t174\t266\t7\n+637\t1023\t203\t289\t255\t175\t7\n+649\t902\t155\t165\t213\t262\t7\n+322\t148\t0\t187\t87\t115\t2\n'
b
diff -r 81f9b44f5242 -r b6b4d08b6858 test-data/out2.flowscore
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out2.flowscore Fri Jul 17 09:06:54 2020 -0400
b
@@ -0,0 +1,15 @@
+Population_ID FSC SSC CD4 CCR3 CD8 CCR7 Count Percentage
+1 1 1 3 1 1 1 7351 36.76
+2 1 1 1 1 1 1 2126 10.63
+3 1 1 1 1 3 2 3264 16.32
+4 1 1 2 1 1 1 148 0.74
+5 2 2 3 1 1 2 88 0.44
+6 3 2 3 1 1 2 366 1.83
+7 3 4 1 1 1 1 5562 27.81
+8 1 2 2 3 2 3 37 0.19
+9 3 2 3 1 1 1 398 1.99
+10 2 4 2 2 2 2 292 1.46
+11 2 2 3 4 2 3 14 0.07
+12 2 2 1 1 1 2 40 0.20
+13 4 4 2 2 2 2 157 0.79
+14 4 4 3 2 2 3 156 0.78
b
diff -r 81f9b44f5242 -r b6b4d08b6858 test-data/out3.flowclr
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out3.flowclr Fri Jul 17 09:06:54 2020 -0400
b
b'@@ -0,0 +1,20000 @@\n+FSC\tSSC\tCD4\tCCR3\tCD8\tCCR7\tPopulation\n+328\t122\t547\t94\t85\t93\t6\n+581\t1023\t143\t235\t270\t106\t7\n+427\t172\t140\t200\t631\t300\t1\n+363\t92\t526\t0\t140\t5\t6\n+416\t113\t485\t22\t157\t226\t4\n+317\t100\t488\t165\t83\t39\t2\n+636\t436\t439\t143\t81\t217\t5\n+262\t49\t395\t0\t42\t171\t6\n+332\t147\t534\t241\t142\t43\t2\n+567\t454\t305\t30\t168\t236\t5\n+333\t138\t104\t0\t612\t225\t1\n+359\t100\t530\t132\t63\t100\t2\n+298\t85\t480\t253\t0\t171\t2\n+392\t123\t90\t176\t623\t182\t1\n+303\t112\t0\t115\t84\t64\t3\n+591\t948\t188\t176\t247\t130\t7\n+687\t535\t422\t301\t156\t230\t5\n+372\t151\t524\t182\t16\t273\t4\n+420\t180\t555\t88\t0\t119\t6\n+401\t182\t104\t76\t103\t138\t3\n+571\t1023\t364\t461\t377\t463\t8\n+398\t169\t92\t126\t668\t312\t1\n+378\t152\t552\t114\t125\t92\t2\n+352\t108\t528\t174\t47\t28\t2\n+714\t391\t449\t0\t210\t257\t5\n+524\t497\t106\t106\t180\t244\t5\n+563\t1023\t366\t471\t397\t460\t8\n+407\t93\t80\t145\t579\t306\t1\n+358\t129\t73\t257\t604\t268\t1\n+1023\t1023\t479\t406\t385\t351\t8\n+1023\t1023\t455\t536\t472\t508\t8\n+474\t172\t563\t0\t160\t111\t6\n+577\t1023\t164\t302\t258\t219\t9\n+348\t73\t521\t212\t0\t142\t2\n+294\t79\t470\t43\t112\t293\t4\n+369\t197\t0\t197\t185\t124\t3\n+389\t121\t71\t179\t637\t297\t1\n+589\t895\t180\t184\t246\t239\t9\n+432\t883\t8\t220\t177\t128\t7\n+601\t1004\t162\t221\t231\t128\t7\n+353\t137\t539\t196\t123\t63\t2\n+357\t127\t40\t203\t520\t174\t1\n+326\t128\t483\t194\t67\t34\t2\n+286\t74\t27\t78\t546\t266\t1\n+394\t158\t130\t82\t596\t314\t1\n+389\t224\t100\t113\t236\t104\t3\n+294\t77\t479\t270\t0\t47\t2\n+556\t946\t156\t211\t299\t177\t7\n+363\t117\t539\t199\t132\t62\t2\n+769\t1023\t189\t288\t291\t28\t7\n+558\t334\t325\t185\t186\t227\t5\n+760\t1023\t181\t271\t239\t258\t9\n+421\t243\t113\t90\t215\t181\t3\n+513\t283\t263\t241\t126\t124\t5\n+686\t935\t227\t267\t223\t109\t7\n+418\t137\t104\t127\t649\t260\t1\n+322\t115\t527\t0\t75\t70\t6\n+563\t1023\t165\t177\t212\t224\t9\n+620\t1023\t238\t267\t176\t206\t9\n+766\t1023\t347\t411\t384\t191\t9\n+378\t159\t41\t186\t637\t245\t1\n+598\t1023\t402\t490\t417\t399\t8\n+349\t142\t0\t191\t643\t286\t1\n+373\t102\t544\t147\t0\t215\t4\n+404\t138\t559\t267\t236\t133\t2\n+277\t47\t486\t242\t61\t120\t2\n+375\t113\t542\t122\t113\t23\t2\n+695\t849\t168\t230\t238\t209\t9\n+466\t185\t569\t184\t112\t238\t4\n+393\t114\t581\t131\t0\t118\t2\n+574\t1023\t127\t275\t245\t207\t9\n+618\t1023\t129\t271\t228\t230\t9\n+605\t1006\t213\t204\t220\t220\t9\n+495\t605\t83\t155\t167\t225\t7\n+716\t807\t131\t269\t126\t129\t7\n+607\t1023\t147\t294\t253\t219\t9\n+392\t236\t484\t237\t29\t106\t2\n+551\t910\t379\t822\t363\t417\t8\n+383\t153\t0\t0\t643\t286\t1\n+1023\t1023\t465\t336\t347\t366\t8\n+316\t233\t31\t209\t140\t307\t3\n+681\t1023\t284\t324\t280\t220\t9\n+418\t143\t553\t171\t98\t195\t4\n+361\t87\t26\t0\t618\t307\t1\n+419\t177\t91\t153\t277\t199\t3\n+598\t984\t87\t260\t246\t263\t9\n+634\t1023\t88\t158\t178\t156\t7\n+595\t1023\t154\t238\t284\t247\t9\n+388\t203\t544\t0\t149\t126\t6\n+354\t159\t504\t210\t0\t152\t2\n+294\t76\t141\t0\t29\t255\t3\n+328\t99\t468\t177\t171\t44\t2\n+283\t128\t463\t112\t0\t126\t2\n+673\t1023\t156\t262\t211\t40\t7\n+409\t115\t515\t217\t52\t193\t4\n+321\t102\t514\t0\t62\t135\t6\n+279\t83\t435\t174\t0\t267\t4\n+565\t1017\t67\t233\t210\t238\t9\n+339\t123\t538\t60\t99\t73\t6\n+343\t148\t44\t134\t615\t235\t1\n+390\t130\t86\t82\t635\t220\t1\n+283\t52\t423\t52\t63\t69\t6\n+548\t843\t101\t49\t239\t133\t7\n+1023\t1023\t307\t345\t357\t285\t9\n+580\t1019\t105\t263\t222\t286\t9\n+597\t1023\t234\t215\t225\t89\t7\n+441\t159\t546\t269\t33\t164\t2\n+330\t101\t531\t0\t59\t14\t6\n+373\t170\t53\t131\t84\t0\t3\n+338\t117\t261\t0\t80\t68\t6\n+398\t155\t144\t123\t616\t223\t1\n+615\t460\t273\t253\t171\t14\t7\n+773\t583\t406\t246\t187\t289\t5\n+369\t121\t556\t167\t0\t175\t4\n+379\t104\t505\t0\t0\t215\t4\n+369\t111\t68\t142\t299\t190\t3\n+358\t102\t552\t190\t18\t169\t2\n+448\t167\t99\t0\t0\t18\t3\n+594\t270\t154\t167\t707\t397\t1\n+501\t193\t147\t0\t39\t199\t3\n+726\t980\t187\t195\t221\t192\t9\n+373\t140\t554\t20\t0\t43\t6\n+423\t152\t116\t0\t591\t142\t1\n+338\t129\t36\t0\t597\t202\t1\n+371\t104\t568\t49\t139\t130\t6\n+353\t112\t550\t48\t0\t95\t6\n+351\t118\t498\t251\t44\t206\t4\n+788\t1023\t124\t266\t221\t278\t9\n+346\t138\t510\t206\t0\t128\t2\n+304\t90\t467\t74\t0\t194\t4\n+655\t530\t275\t285\t246\t309\t5\n+356\t116\t539\t79\t0\t96\t6\n+356\t138\t67\t0\t645\t250\t1\n+656\t1023\t200\t274\t318\t286\t9\n+817\t1023\t155\t266\t240\t173\t9\n+370\t80\t74\t196\t532\t246\t1\n+350\t128\t540\t0\t146\t77\t6\n+691\t1023\t0\t283\t190\t277\t9\n+631\t302\t459\t156\t164\t229\t5\n+645\t285\t388\t205\t187\t196\t5\n+389\t185\t160\t28\t664\t319\t1\n+413\t152\t22\t0\t645\t66\t1\n+464\t230\t97\t170\t164\t109\t3\n+328\t93\t0\t0\t436\t206\t1\n+956\t391\t578\t205\t288\t255\t5\n+335\t141\t520\t103\t21\t155\t4\n+588\t1009\t177\t271\t237\t206\t9\n+427\t132\t549\t1\t68\t270\t4\n+779\t1023\t121\t267\t274\t283\t9\n+599\t933\t192\t228\t173\t256\t9\n+688\t1023\t132\t304\t256\t64\t7\n+333\t79\t493\t123\t8\t128\t2\n+391\t193\t137\t189\t'..b'337\t1\n+611\t290\t261\t179\t206\t256\t5\n+327\t98\t509\t117\t0\t209\t4\n+324\t105\t532\t166\t0\t254\t4\n+373\t216\t73\t334\t81\t154\t3\n+584\t1023\t116\t219\t126\t250\t9\n+351\t125\t540\t214\t0\t196\t4\n+318\t181\t76\t82\t52\t26\t3\n+327\t114\t510\t220\t0\t57\t2\n+945\t1023\t234\t319\t308\t197\t9\n+412\t133\t564\t199\t100\t165\t2\n+436\t259\t502\t164\t64\t155\t2\n+815\t1023\t120\t292\t223\t136\t7\n+810\t1023\t258\t296\t283\t224\t9\n+420\t91\t525\t1\t0\t22\t6\n+443\t198\t555\t129\t156\t245\t4\n+369\t121\t541\t40\t114\t110\t6\n+494\t295\t147\t150\t128\t103\t3\n+637\t1012\t183\t266\t267\t83\t7\n+375\t164\t106\t166\t642\t239\t1\n+394\t199\t75\t76\t597\t272\t1\n+665\t1023\t195\t223\t251\t195\t9\n+362\t107\t551\t10\t0\t0\t6\n+704\t1023\t206\t175\t191\t267\t9\n+338\t97\t464\t139\t106\t176\t4\n+325\t90\t521\t17\t0\t69\t6\n+379\t212\t526\t140\t85\t191\t4\n+424\t163\t565\t27\t190\t98\t6\n+376\t126\t99\t56\t622\t238\t1\n+398\t190\t124\t150\t628\t269\t1\n+349\t113\t80\t76\t648\t202\t1\n+647\t1019\t154\t245\t221\t240\t9\n+791\t1023\t146\t161\t183\t137\t7\n+363\t169\t548\t129\t91\t252\t4\n+433\t248\t99\t159\t152\t225\t3\n+346\t115\t516\t155\t0\t132\t2\n+758\t1023\t195\t258\t269\t230\t9\n+330\t158\t64\t0\t56\t234\t3\n+374\t119\t548\t146\t0\t22\t2\n+362\t211\t550\t232\t0\t214\t4\n+687\t1023\t194\t282\t197\t115\t7\n+489\t209\t0\t144\t262\t43\t3\n+594\t1023\t343\t500\t375\t406\t8\n+329\t130\t535\t11\t49\t98\t6\n+829\t1023\t186\t238\t227\t176\t9\n+326\t178\t44\t182\t621\t203\t1\n+609\t1023\t99\t225\t206\t183\t7\n+315\t104\t505\t88\t0\t118\t6\n+380\t185\t112\t2\t632\t253\t1\n+709\t491\t332\t198\t232\t159\t5\n+422\t138\t564\t187\t0\t263\t4\n+359\t168\t516\t4\t84\t135\t6\n+766\t1023\t167\t226\t215\t223\t9\n+693\t1023\t201\t291\t238\t121\t7\n+373\t127\t462\t124\t87\t57\t2\n+590\t965\t152\t114\t195\t265\t9\n+582\t375\t413\t171\t121\t232\t5\n+606\t1023\t179\t213\t201\t226\t9\n+358\t96\t63\t164\t593\t283\t1\n+380\t112\t562\t102\t142\t0\t6\n+382\t90\t521\t73\t121\t110\t6\n+351\t95\t540\t0\t178\t127\t6\n+541\t1023\t321\t447\t380\t428\t8\n+331\t176\t497\t172\t0\t141\t2\n+682\t1023\t175\t327\t242\t228\t9\n+378\t114\t532\t148\t0\t135\t2\n+334\t113\t511\t200\t46\t211\t4\n+362\t84\t526\t102\t0\t185\t4\n+791\t1023\t197\t279\t314\t236\t9\n+356\t126\t529\t0\t43\t138\t6\n+696\t1023\t130\t274\t235\t332\t9\n+722\t1023\t190\t260\t250\t237\t9\n+376\t94\t544\t104\t0\t99\t6\n+415\t147\t525\t0\t189\t102\t6\n+641\t950\t91\t250\t244\t212\t9\n+387\t124\t538\t23\t139\t4\t6\n+458\t103\t513\t0\t0\t106\t6\n+414\t126\t86\t95\t567\t171\t1\n+559\t919\t160\t218\t138\t193\t7\n+572\t895\t156\t49\t236\t47\t7\n+381\t111\t510\t93\t0\t95\t6\n+299\t143\t11\t0\t95\t58\t3\n+585\t1023\t197\t221\t216\t193\t7\n+638\t1023\t225\t254\t180\t157\t7\n+369\t162\t540\t81\t0\t56\t6\n+599\t915\t77\t255\t248\t124\t7\n+686\t1023\t89\t257\t217\t232\t9\n+578\t1023\t83\t207\t216\t126\t7\n+364\t120\t503\t0\t153\t225\t4\n+600\t1018\t153\t222\t275\t38\t7\n+383\t192\t101\t229\t624\t224\t1\n+383\t130\t532\t0\t67\t107\t6\n+328\t146\t23\t138\t0\t116\t3\n+272\t75\t99\t154\t220\t133\t3\n+323\t171\t96\t61\t146\t0\t3\n+337\t81\t506\t10\t0\t150\t6\n+290\t151\t0\t0\t106\t159\t3\n+661\t1023\t213\t292\t238\t295\t9\n+590\t1023\t216\t252\t264\t276\t9\n+512\t263\t118\t0\t213\t348\t1\n+315\t126\t502\t269\t48\t98\t2\n+276\t85\t479\t104\t40\t102\t6\n+378\t81\t548\t167\t0\t58\t2\n+387\t154\t0\t190\t656\t362\t1\n+602\t1023\t143\t256\t247\t38\t7\n+341\t142\t530\t7\t89\t46\t6\n+691\t1023\t141\t212\t189\t204\t9\n+576\t1006\t135\t209\t251\t216\t9\n+567\t849\t120\t157\t87\t213\t7\n+705\t1023\t189\t282\t279\t330\t9\n+985\t1023\t421\t292\t257\t220\t9\n+651\t1023\t181\t285\t202\t201\t9\n+693\t1023\t213\t300\t221\t225\t9\n+408\t113\t545\t183\t210\t104\t2\n+418\t143\t545\t0\t82\t126\t6\n+384\t112\t522\t111\t76\t109\t2\n+275\t48\t394\t0\t131\t0\t6\n+359\t113\t42\t80\t600\t163\t1\n+357\t169\t154\t138\t649\t283\t1\n+400\t224\t108\t227\t31\t107\t3\n+346\t88\t82\t84\t196\t98\t3\n+323\t124\t534\t0\t186\t183\t6\n+374\t103\t541\t142\t101\t52\t2\n+380\t105\t508\t170\t126\t313\t4\n+353\t196\t117\t115\t0\t164\t3\n+359\t113\t511\t259\t0\t141\t2\n+377\t137\t558\t11\t0\t14\t6\n+623\t423\t459\t227\t147\t40\t5\n+389\t149\t96\t50\t640\t263\t1\n+543\t1023\t144\t249\t187\t104\t7\n+691\t982\t85\t264\t194\t206\t9\n+627\t1023\t157\t238\t216\t193\t7\n+577\t1023\t165\t258\t299\t198\t7\n+402\t131\t569\t0\t124\t0\t6\n+337\t91\t506\t231\t0\t49\t2\n+636\t870\t91\t227\t96\t172\t7\n+356\t125\t58\t0\t621\t308\t1\n+390\t190\t46\t88\t665\t313\t1\n+351\t68\t529\t86\t0\t56\t6\n+623\t475\t365\t79\t157\t281\t5\n+335\t74\t512\t209\t49\t270\t4\n+496\t194\t105\t202\t427\t25\t3\n+614\t1023\t178\t280\t196\t117\t7\n+381\t84\t545\t101\t0\t140\t6\n+289\t93\t425\t0\t28\t68\t6\n+385\t240\t52\t168\t638\t277\t1\n+322\t162\t103\t0\t52\t61\t3\n+343\t126\t488\t99\t187\t276\t4\n+362\t197\t105\t68\t0\t2\t3\n+378\t99\t527\t0\t0\t116\t6\n+347\t107\t522\t0\t0\t200\t4\n+468\t198\t137\t99\t341\t111\t3\n+572\t967\t57\t255\t159\t220\t9\n+608\t1023\t115\t247\t174\t266\t9\n+637\t1023\t203\t289\t255\t175\t7\n+649\t902\t155\t165\t213\t262\t9\n+322\t148\t0\t187\t87\t115\t3\n'
b
diff -r 81f9b44f5242 -r b6b4d08b6858 test-data/out3.flowscore
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out3.flowscore Fri Jul 17 09:06:54 2020 -0400
b
@@ -0,0 +1,10 @@
+Population_ID FSC SSC CD4 CCR3 CD8 CCR7 Count Percentage
+1 1 1 1 1 3 2 3297 16.49
+2 1 1 3 1 1 1 2695 13.48
+3 1 1 1 1 1 1 2094 10.47
+4 1 1 3 1 1 2 1932 9.66
+5 3 2 3 1 1 2 934 4.67
+6 1 1 3 1 1 1 2852 14.26
+7 2 4 1 1 1 1 2478 12.39
+8 4 4 2 2 2 3 568 2.84
+9 3 4 1 2 1 2 3149 15.75