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

Changeset 1:bca68066a957 (2020-05-20)
Previous changeset 0:8c17aa8032c2 (2017-02-27) Next changeset 2:a64ece32a01a (2020-07-28)
Commit message:
"planemo upload for repository https://github.com/ImmPortDB/immport-galaxy-tools/tree/master/flowtools/cs_overview commit 2afc7e52ba525635c05027c11f978bc76aa83e2d"
added:
crossSampleOverview.xml
static/images/flowtools/barssm.png
static/images/flowtools/cs_bpt.png
static/images/flowtools/edit_popdistrib.png
static/images/flowtools/pcmfi.png
static/images/flowtools/pcpop.png
static/images/flowtools/popdistrib.png
static/images/flowtools/stackedA.png
static/images/flowtools/stackedB.png
static/images/flowtools/stackedsm.png
test-data/csAllMFIs.tsv
test-data/csBoxplotData.json
test-data/csOverview.tsv
test-data/input.flowstat1
test-data/input.flowstat2
test-data/input.mfi
test-data/input1.flowclr
test-data/input2.flowclr
test-data/input3.flowclr
test-data/out.html
removed:
cs_overview/crossSampleOverview.py
cs_overview/crossSampleOverview.xml
cs_overview/static/flowtools/css/parallelCoordinates.css
cs_overview/static/flowtools/js/boxplots.js
cs_overview/static/flowtools/js/color_palette.js
cs_overview/static/flowtools/js/crossSamplePlots.js
cs_overview/static/flowtools/js/csOverview.js
cs_overview/static/flowtools/js/pCoordCSstats.js
cs_overview/static/flowtools/js/pCoordMFIstats.js
cs_overview/static/images/flowtools/barssm.png
cs_overview/static/images/flowtools/cs_bpt.png
cs_overview/static/images/flowtools/edit_popdistrib.png
cs_overview/static/images/flowtools/pcmfi.png
cs_overview/static/images/flowtools/pcpop.png
cs_overview/static/images/flowtools/popdistrib.png
cs_overview/static/images/flowtools/stackedA.png
cs_overview/static/images/flowtools/stackedB.png
cs_overview/static/images/flowtools/stackedsm.png
cs_overview/templates/csOverview.template
cs_overview/test-data/csAllMFIs.tsv
cs_overview/test-data/csBoxplotData.json
cs_overview/test-data/csOverview.tsv
cs_overview/test-data/input.flowstat1
cs_overview/test-data/input.flowstat2
cs_overview/test-data/input.mfi
cs_overview/test-data/input1.flowclr
cs_overview/test-data/input2.flowclr
cs_overview/test-data/input3.flowclr
cs_overview/test-data/out.html
b
diff -r 8c17aa8032c2 -r bca68066a957 crossSampleOverview.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/crossSampleOverview.xml Wed May 20 16:04:43 2020 -0400
[
b'@@ -0,0 +1,165 @@\n+<tool id="cross_sample_overview" name="Generate overview information" version="1.1+galaxy0">\n+  <description>of a multi-sample analysis.</description>\n+  <requirements>\n+    <requirement type="package" version="2.0.2">ig-flowtools</requirement>\n+  </requirements>\n+  <stdio>\n+    <exit_code range="1" level="fatal" description="There are too many populations in the input files. The maximum number of populations is 40." />\n+    <exit_code range="2" level="fatal" description="There are populations inconsistencies between provided inputs." />\n+  </stdio>\n+  <command><![CDATA[\n+    mkdir templates &&\n+    mkdir -p static/flowtools &&\n+    mkdir -p static/images/flowtools &&\n+    export FLOWTOOL=\'which crossSampleOverview.py\' &&\n+    FLOWTOOLDIR=\\$(dirname $FLOWTOOL) &&\n+    cp $FLOWTOOLDIR/../share/templates/* templates/ &&\n+    cp -r $FLOWTOOLDIR/../share/static/flowtools/* static/flowtools/ &&\n+    cp $FLOWTOOLDIR/../share/static/images/flowtools/* static/images/flowtools/ &&\n+    crossSampleOverview.py -i \'${input}\' -I \'${inputmfi}\' -o \'${html_file}\' -m \'${mfi}\' -d \'${html_file.files_path}\' -t \'templates/\'\n+    #for $f in $cs_outputs\n+       -s $f\n+    #end for\n+  ]]>\n+  </command>\n+  <inputs>\n+    <param format="flowstat1" name="input" type="data" label="CrossSample Population Summary Table"/>\n+    <param format="flowstat2" name="inputmfi" type="data" label="Centroids MFI Summary Table"/>\n+    <param format="flowmfi" name="mfi" type="data" label="Centroids File from FLOCK"/>\n+    <param format="flowclr" name="cs_outputs" type="data_collection" collection_type="list" label="Clustered flow files" help="output from a Cross Sample analysis or from mapping individual files to a FlowSOM reference tree."/>\n+  </inputs>\n+  <outputs>\n+    <data format="html" name="html_file" label="Overview of ${input.name}">\n+    </data>\n+  </outputs>\n+  <tests>\n+    <test>\n+      <param name="input" value="input.flowstat1"/>\n+      <param name="inputmfi" value="input.flowstat2"/>\n+      <param name="mfi" value="input.mfi"/>\n+      <param name="cs_outputs">\n+        <collection type="list">\n+          <element name="input1.flowclr" value="input1.flowclr"/>\n+          <element name="input2.flowclr" value="input2.flowclr"/>\n+          <element name="input3.flowclr" value="input3.flowclr"/>\n+        </collection>\n+      </param>\n+      <output name="html_file" file="out.html" compare="sim_size">\n+        <extra_files type="file" name="csAllMFIs.tsv" value="csAllMFIs.tsv"/>\n+        <extra_files type="file" name="csOverview.tsv" value="csOverview.tsv"/>\n+        <extra_files type="file" name="csBoxplotData.json" value="csBoxplotData.json" compare="contains"/>\n+      </output>\n+    </test>\n+  </tests>\n+  <help><![CDATA[\n+   This tool generates an overview of the flow analysis results.\n+\n+-----\n+\n+**Input**\n+\n+Input files are tab-separated files containing counts of events in each population for each file compared to reference population patterns, MFI for each marker in each population for each file, and individual files used in the comparison. The output from a Cross Sample analysis as well as from mapping individual files to a FlowSOM reference tree are suitable files.\n+The Centroids file can be generated with the following Flow Analysis tool:\n+\n+- Generate the centroids from a flow result file\n+\n+.. class:: warningmark\n+\n+The number of populations or clusters this tool can handle is limited to 40.\n+\n+**Output**\n+\n+The output is a page that allows visualization of the data.\n+\n+.. class:: warningmark\n+\n+*The output of this tool is interactive. However, comments or any other modifications made are not saved when exiting the view.*\n+\n+-----\n+\n+**Example**\n+\n+*Input*\n+\n+Clustered Flow Data - fluorescence intensities per marker and population ID per event::\n+\n+   Marker1 Marker2 Marker3 ... Population\n+   33      47      11      ... 1\n+   31      64      11      ... 6\n+   21      62      99      ... 2\n+   14      34      60      ... 7\n+   ...'..b"s MFI Summary table::\n+\n+   Marker1 Marker2 Marker3 ... Population Percentage SampleName\n+   154     885     24      ... 1          0.2        Biosample1\n+   458     74      574     ... 2          0.3        Biosample1\n+   3       210     86      ... 3          0.05       Biosample1\n+   ...     ...     ...     ... ...        ...        ...\n+   140     921     19      ... 1          0.1        Biosample2\n+   428     79      508     ... 2          0.25       Biosample2\n+   9       225     90      ... 3          0.3        Biosample2\n+   ...     ...     ...     ... ...        ...        ...\n+\n+Centroids file::\n+\n+   Population Marker1 Marker2 Marker3 ...\n+   1          38      49      10      ...\n+   2          21      63      100     ...\n+   3          31      52      45      ...\n+   4          11      78      25      ...\n+   ...        ...     ...     ...     ...\n+\n+*Output*\n+\n+Summary of the population distribution:\n+\n+The comment field of this table is editable, as well as the population names. The edited values are used to populate the legends of the other graphs. The columns are re-orderable. The 'col visibility' button allows to choose which columns to display. 'CSV', 'PDF' and 'Copy' respectively allow to download a comma-separated values file, a pdf version or to copy to your clipboard in a tab-separated format the current view of the table.\n+\n+.. image:: ./static/images/flowtools/popdistrib.png\n+\n+.. image:: ./static/images/flowtools/edit_popdistrib.png\n+\n+\n+Stacked plot of the population distribution in each sample:\n+\n+The user can choose which populations to display, and whether to see the data as a bar plot or area plot. The graph displays the proportion of each population within the set of selected populations. The Plotly toolbar allows more control over the display of the graph. There is an option to save the plot as a png file.\n+\n+.. image:: ./static/images/flowtools/stackedA.png\n+\n+.. image:: ./static/images/flowtools/stackedB.png\n+\n+\n+Parallel coordinates representation of populations:\n+\n+The user can reorder the populations, and choose which samples to display either by selecting them in the legend via checkboxes or by selecting them on the graph. Data selected for display is shown in the table below the graph. Mousing over a line in that table highlights the corresponding line on the graph. The 'col visibility' button allows to choose which columns to display. 'CSV', 'PDF' and 'Copy' respectively allow to download a comma-separated values file, a pdf version or to copy to your clipboard in a tab-separated format the current view of the table.\n+\n+.. image:: ./static/images/flowtools/pcpop.png\n+\n+\n+Parallel coordinates representation of the data:\n+\n+The user can reorder the markers, and choose which samples and/or populations to display either by selecting them in the legends via checkboxes or by selecting them on the graph. Data selected for display is shown in the table below the graph. Mousing over a line in that table highlights the corresponding line on the graph. The 'col visibility' button allows to choose which columns to display. 'CSV', 'PDF' and 'Copy' respectively allow to download a comma-separated values file, a pdf version or to copy to your clipboard in a tab-separated format the current view of the table.\n+\n+.. image:: ./static/images/flowtools/pcmfi.png\n+\n+\n+Summary Statistics Boxplots:\n+\n+The user can choose whether to group the boxplots per marker or per population. By default, the values displayed are the 25th, median and 75th percentiles. The whiskers represent 1.5 times the interquartile range. The MFI or the values can be displayed by checking the corresponding checkboxes. The number of markers that can be plotted simultaneously is limited to 5. The number of outliers per data point is limited to 100. If there are more than 100 outliers, they are downsampled randomly to a 100 and a warning message is displayed.\n+\n+.. image:: ./static/images/flowtools/cs_bpt.png\n+  ]]>\n+  </help>\n+</tool>\n"
b
diff -r 8c17aa8032c2 -r bca68066a957 cs_overview/crossSampleOverview.py
--- a/cs_overview/crossSampleOverview.py Mon Feb 27 12:48:54 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,180 +0,0 @@
-#!/usr/bin/env python
-
-######################################################################
-#                  Copyright (c) 2016 Northrop Grumman.
-#                          All rights reserved.
-######################################################################
-
-from __future__ import print_function
-import sys
-import os
-import logging
-import fileinput
-import pandas as pd
-from argparse import ArgumentParser
-from jinja2 import Environment, FileSystemLoader
-from shutil import copyfile
-from collections import defaultdict
-
-
-def panel_to_json_string(panel):
-    # from http://stackoverflow.com/questions/28078118/merge-many-json-strings-with-python-pandas-inputs
-    def __merge_stream(key, stream):
-        return '"' + key + '"' + ': ' + stream + ', '
-    try:
-        stream = '{'
-        for item in panel.items:
-            stream += __merge_stream(item, panel.loc[item, :, :].to_json())
-        # take out extra last comma
-        stream = stream[:-2]
-        # add the final paren
-        stream += '}'
-    except:
-        logging.exception('Panel Encoding did not work')
-    return stream
-
-
-def get_outliers(group, upper, lower):
-    cat = group.name
-    out = {}
-    for marker in group:
-        out[marker] = group[(group[marker] > upper.loc[cat][marker]) | (group[marker] < lower.loc[cat][marker])][marker]
-    return out
-
-
-def get_boxplot_stats(all_data, mfi_file, output_json):
-    # modified code from http://bokeh.pydata.org/en/latest/docs/gallery/boxplot.html
-    df = pd.read_table(all_data)
-    pops = df.groupby('Population')
-    q1 = pops.quantile(q=0.25)
-    q2 = pops.quantile(q=0.5)
-    q3 = pops.quantile(q=0.75)
-    iqr = q3 - q1
-    upper = q3 + 1.5*iqr
-    lower = q1 - 1.5*iqr
-    resampled = False
-    # get outliers
-    out = pops.apply(get_outliers, upper, lower).dropna()
-    outliers = defaultdict(dict)
-    for population in set(df.Population):
-        for marker in df.columns:
-            if marker != 'Population':
-                tmp_outliers = list(out[population][marker])
-                if (len(list(out[population][marker]))> 100):
-                    tmp_outliers = list(out[population][marker].sample(n=100))
-                    resampled = True
-                outliers[population][marker] = tmp_outliers
-    outdf = pd.DataFrame(outliers)
-    # Get initial MFI values
-    mfi = pd.read_table(mfi_file)
-    mfi = mfi.set_index('Population')
-
-    data = {'q1': q1,
-            'q2': q2,
-            'q3': q3,
-            'upper': upper,
-            'lower': lower,
-            'outliers': outdf.T,
-            'mfi': mfi}
-    wp = pd.Panel(data)
-
-    with open(output_json, "w") as js_all:
-        js_all.write(panel_to_json_string(wp))
-
-    return resampled
-
-def cs_overview(input_file, input_mfi, init_mfi, output_file, output_dir, tools_dir, cs_files):
-    os.mkdir(output_dir)
-
-    env = Environment(loader=FileSystemLoader(tools_dir + "/templates"))
-    template = env.get_template("csOverview.template")
-
-    real_directory = output_dir.replace("/job_working_directory", "")
-    context = {'outputDirectory': real_directory}
-    overview = template.render(**context)
-    with open(output_file, "w") as outf:
-        outf.write(overview)
-
-    cs_overview_file = output_dir + "/csOverview.tsv"
-    copyfile(input_file, cs_overview_file)
-
-    cs_overview_mfis = output_dir + "/csAllMFIs.tsv"
-    copyfile(input_mfi, cs_overview_mfis)
-
-    # Get all the data to calculate quantiles, IRC and outliers.
-    tmp_all_data = "csAllData.tsv"
-    with open(tmp_all_data, "a") as alldata:
-        # assumes that the files have ran through flock and CS and therefore have the same headers
-        df1 = pd.read_table(cs_files[0])
-        df1.to_csv(alldata, sep="\t", header=True, index=False)
-        for i in range(1, len(cs_files)):
-            df = pd.read_table(cs_files[i])
-            df.to_csv(alldata, sep="\t", header=False, index=False)
-
-    cs_boxplot_data = output_dir + "/csBoxplotData.json"
-    resampled = get_boxplot_stats(tmp_all_data, init_mfi, cs_boxplot_data)
-    if resampled:
-        to_find = '<div id="outlierWarning" style="display:none;">'
-        to_replace = '<div id="outlierWarning">'
-        ## yay python 2.7
-        ro = fileinput.input(output_file, inplace=True, backup=".bak")
-        for roline in ro:
-            print(roline.replace(to_find, to_replace), end='')
-        ro.close()
-
-    return
-
-
-if __name__ == "__main__":
-    parser = ArgumentParser(
-             prog="csOverview",
-             description="Generate an overview plot of crossSample results.")
-
-    parser.add_argument(
-            '-i',
-            dest="input_file",
-            required=True,
-            help="File location for the summary statistics from CrossSample.")
-
-    parser.add_argument(
-            '-I',
-            dest="input_mfi",
-            required=True,
-            help="File location for the MFI summary statistics from CrossSample.")
-
-    parser.add_argument(
-            '-s',
-            dest="cs_outputs",
-            required=True,
-            action='append',
-            help="File location for the CrossSample output files.")
-
-    parser.add_argument(
-            '-o',
-            dest="output_file",
-            required=True,
-            help="File location for the HTML output file.")
-
-    parser.add_argument(
-            '-m',
-            dest="mfi",
-            required=True,
-            help="File location for the MFI from FLOCK.")
-
-    parser.add_argument(
-            '-d',
-            dest="output_directory",
-            required=True,
-            help="Directory location for the html supporting files.")
-
-    parser.add_argument(
-            '-t',
-            dest="tool_directory",
-            required=True,
-            help="Location of the Tool Directory.")
-
-    args = parser.parse_args()
-
-    cs_files = [f for f in args.cs_outputs]
-    cs_overview(args.input_file, args.input_mfi, args.mfi, args.output_file, args.output_directory, args.tool_directory, cs_files)
-    sys.exit(0)
b
diff -r 8c17aa8032c2 -r bca68066a957 cs_overview/crossSampleOverview.xml
--- a/cs_overview/crossSampleOverview.xml Mon Feb 27 12:48:54 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,136 +0,0 @@
-<tool id="cross_sample_overview" name="Generate overview information" version="1.0">
-  <description>of the CrossSample analysis</description>
-  <requirements>
-    <requirement type="package" version="2.8">jinja2</requirement>
-  </requirements>
-  <stdio>
-    <exit_code range="1:" />
-  </stdio>
-  <command><![CDATA[
-    python $__tool_directory__/crossSampleOverview.py -i "${input}" -I "${inputmfi}" -o "${html_file}" -m "${mfi}" -d "${html_file.files_path}" -t $__tool_directory__
-    #for $f in $cs_outputs#
-       -s $f
-    #end for#
-  ]]>
-  </command>
-  <inputs>
-    <param format="flowstat1" name="input" type="data" label="CrossSample Population Summary Table"/>
-    <param format="flowstat2" name="inputmfi" type="data" label="Centroids MFI Summary Table"/>
-    <param format="flowmfi" name="mfi" type="data" label="Centroids File from FLOCK"/>
-    <param format="flowclr" name="cs_outputs" type="data_collection" collection_type="list" label="CrossSample output files"/>
-  </inputs>
-  <outputs>
-    <data format="html" name="html_file" label="Overview of ${input.name}">
-    </data>
-  </outputs>
-  <tests>
-    <test>
-      <param name="input" value="input.flowstat1"/>
-      <param name="inputmfi" value="input.flowstat2"/>
-      <param name="mfi" value="input.mfi"/>
-      <param name="cs_outputs">
-        <collection type="list">
-          <element name="input1" value="input1.flowclr"/>
-          <element name="input2" value="input2.flowclr"/>
-          <element name="input3" value="input3.flowclr"/>
-        </collection>
-      </param>
-      <output name="output_file" file="out.html">
-        <extra_files type="file" name="csAllMFIs.tsv" value="csAllMFIs.tsv"/>
-        <extra_files type="file" name="csOverview.tsv" value="csOverview.tsv"/>
-        <extra_files type="file" name="csBoxplotData.json" value="csBoxplotData.json"/>
-      </output>
-    </test>
-  </tests>
-  <help><![CDATA[
-   This tool generates an overview of the flow analysis results.
-
------
-
-**Input**
-
-Input files are summary tables generated from a CrossSample analysis (tab-separated file containing counts of events in each population for each file run through CrossSample and a tab-separated file containing the MFI for each marker in each population for each file.)
-
-**Output**
-
-The output is a page that allows visualization of the data.
-
-.. class:: warningmark
-
-*The output of this tool is interactive. However, comments or any other modifications made are not saved when exiting the view.*
-
------
-
-**Example**
-
-*Input*
-
-Population distribution table::
-
-   Filename SampleName Pop1 Pop2 Pop3 ...
-   File1    Biosample1 255  147  18   ...
-   File2    Biosample2 27   61   965  ...
-   File3    Biosample3 201  546  221  ...
-   File4    Biosample4 11   77   327  ...
-
-Centroids MFI Summary table::
-
-   Marker1 Marker2 Marker3 ... Population Percentage SampleName
-   154     885     24      ... 1          0.2        Biosample1
-   458     74      574     ... 2          0.3        Biosample1
-   3       210     86      ... 3          0.05       Biosample1
-   140     921     19      ... 1          0.1        Biosample2
-   428     79      508     ... 2          0.25       Biosample2
-   9       225     90      ... 3          0.3        Biosample2
-
-MFI Descriptive Stats table::
-
-   Population Marker1_mean Marker1_median Marker1_stdev ... Percentage_mean Percentage_median Percentage_stdev
-   1          94.65        90.86          25.8          ... 1.84            0.55              2.48
-   2          132.18       131.58         5.02          ... 9.89            9.76              0.33
-   3          71.8         69.68          10.53         ... 3.02            1.49              3.45
-   4          84.85        84.85          nan           ... 8.52            8.52              nan
-   5          161.82       132.77         61.29         ... 0.95            0.37              1.06
-
-*Output*
-
-Summary of the population distribution:
-
-The comment field of this table is editable, as well as the population names. The edited values are used to populate the legends of the other graphs. The columns are re-orderable. The 'col visibility' button allows to choose which columns to display. 'CSV', 'PDF' and 'Copy' respectively allow to download a comma-separated values file, a pdf version or to copy to your clipboard in a tab-separated format the current view of the table.
-
-.. image:: static/images/flowtools/popdistrib.png
-
-.. image:: static/images/flowtools/edit_popdistrib.png
-
-
-Stacked plot of the population distribution in each sample:
-
-The user can choose which populations to display, and whether to see the data as a bar plot or area plot. The graph displays the proportion of each population within the set of selected populations. The Plotly toolbar allows more control over the display of the graph. There is an option to save the plot as a png file.
-
-.. image:: static/images/flowtools/stackedA.png
-
-.. image:: static/images/flowtools/stackedB.png
-
-
-Parallel coordinates representation of populations:
-
-The user can reorder the populations, and choose which samples to display either by selecting them in the legend via checkboxes or by selecting them on the graph. Data selected for display is shown in the table below the graph. Mousing over a line in that table highlights the corresponding line on the graph. The 'col visibility' button allows to choose which columns to display. 'CSV', 'PDF' and 'Copy' respectively allow to download a comma-separated values file, a pdf version or to copy to your clipboard in a tab-separated format the current view of the table.
-
-.. image:: static/images/flowtools/pcpop.png
-
-
-Parallel coordinates representation of the data:
-
-The user can reorder the markers, and choose which samples and/or populations to display either by selecting them in the legends via checkboxes or by selecting them on the graph. Data selected for display is shown in the table below the graph. Mousing over a line in that table highlights the corresponding line on the graph. The 'col visibility' button allows to choose which columns to display. 'CSV', 'PDF' and 'Copy' respectively allow to download a comma-separated values file, a pdf version or to copy to your clipboard in a tab-separated format the current view of the table.
-
-.. image:: static/images/flowtools/pcmfi.png
-
-
-Summary Statistics Boxplots:
-
-The user can choose whether to group the boxplots per marker or per population. By default, the values displayed are the 25th, median and 75th percentiles. The whiskers represent 1.5 times the interquartile range. The MFI or the values can be displayed by checking the corresponding checkboxes. The number of markers that can be plotted simultaneously is limited to 5. The number of outliers per data point is limited to 100. If there are more than 100 outliers, they are downsampled randomly to a 100 and a warning message is displayed.
-
-.. image:: static/images/flowtools/cs_bpt.png
-  ]]>
-  </help>
-</tool>
b
diff -r 8c17aa8032c2 -r bca68066a957 cs_overview/static/flowtools/css/parallelCoordinates.css
--- a/cs_overview/static/flowtools/css/parallelCoordinates.css Mon Feb 27 12:48:54 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
@@ -1,170 +0,0 @@
-/*Chart*/
-.chartDiv {
-    margin-top: 10px;
-    margin-bottom: 10px;
-    margin-left: 10px;
-    margin-right: 10px;
-    background-color: #ffffff;
-}
-/*This for stacked / bar plot*/
-.optionButtons{
-    padding-bottom: 8px;
-}
-.igbtn {
-    border-radius: 4px;
-    color: white;
-    background-color: #0E3163;
-    border:1px;
-    font-size: 14px;
-    font-weight: bold;
-    border-color: #0E3163;
-    padding: 6px 12px;
-    background: -webkit-linear-gradient(#0E3163, #3e6db0);
-    background: -o-linear-gradient(#0E3163, #3e6db0);
-    background: -moz-linear-gradient(#0E3163, #3e6db0);
-    background: linear-gradient(#0E3163, #3e6db0);
-}
- #togglePlot {
-    display: block;
-    margin-left: auto;
-    margin-right: auto;
-    height: 60px;
-    width: 90px;
-    padding: 4px 8px 8px 4px;
-}
-/*DataTables config*/
-div.dt-buttons {
-    float: right;
-}
-th {
-    background-color:#3965A4;
-    color:#fff;
-    border-radius: 2px;
-    padding:6px 12px;
-    font-size:14px;
-    text-align: center;
-}
-.igtable th {
-  background: -webkit-linear-gradient(#0E3163, #3e6db0);
-  background: -o-linear-gradient(#0E3163, #3e6db0);
-  background: -moz-linear-gradient(#0E3163, #3e6db0);
-  background: linear-gradient(#0E3163, #3e6db0)
-}
-body td {
-    max-width: 50px;
-    font-size: 14px;
-    overflow: hidden;
-    text-overflow: ellipsis;
-}
-.pctable td {
-    max-width: 100px;
-}
-.dtable td {
-    max-width: 50px;
-    word-break: break-all;
-    word-wrap: break-word;
-}
-.popt thead {
-    display:none;
-}
-.popt td {
-    max-width: 40px;
-    word-break: break-all;
-    word-wrap: break-word;
-}
-div.dataTables_wrapper {
-    width: 95%;
-    margin: 0 auto;
-}
-/*Opacity widget*/
-.widget {
-  margin-top: 4px;
-  padding: 4px 4px 8px 4px;
-  margin-bottom: 10px
-  height: 36px;
-  line-height: 12px;
-  font-size: 12px;
-  text-align: center;
- // float: right;
-}
-/*This section for coordinates plot*/
-.table th {
-    text-align: center;
-    padding: 10px;
-}
-.table {
-    width:100%;
-    border:0px solid;
-    border-collapse:collapse;
-    text-align:center;
-    font-size: 14px;
-}
-svg {
-  font: 10px sans-serif;
-}
-.background path {
-  fill: none;
-  stroke: #F0F0F0;
-  shape-rendering: crispEdges;
-}
-.foreground path {
-  fill: none;
-  stroke-opacity: .8;
-}
-.brush .extent {
-  fill-opacity: .3;
-  stroke: #fff;
-  shape-rendering: crispEdges;
-}
-.axis line,
-.axis path {
-  fill: none;
-  stroke: #000;
-  stroke-width: 2;
-  shape-rendering: crispEdges;
-}
-.axis text {
-  text-shadow: 0 1px 0 #fff, 1px 0 0 #fff, 0 -1px 0 #fff, -1px 0 0 #fff;
-}
-.xlabel {
-  font-size: 14px;
-  fill: #808080;
-}
-.ylabel {
-  font-size: 16px;
-  fill: #808080;
-}
-/*This section for boxplots*/
-.box {
-  font: 10px sans-serif;
-}
-.box line,
-.box rect,
-.box circle {
-   fill: red;
-  stroke: #000;
-  stroke-width: 1px;
-}
-.box .center {
-  stroke-dasharray: 3,3;
-}
-.box .outlier {
-  fill: none;
-  stroke: #000;
-}
-.axisbp path,
-.axisbp line {
-  stroke-width: 1px;
-  fill:
-}
-.y.axisbp path {
-  stroke-width: 2;
-  stroke: #000;
-  fill: none;
-}
-.x.axisbp path {
-  fill: none;
-  stroke: #C8C8C8;
-  stroke-width: 0px;
-  shape-rendering: crispEdges;
-}
b
diff -r 8c17aa8032c2 -r bca68066a957 cs_overview/static/flowtools/js/boxplots.js
--- a/cs_overview/static/flowtools/js/boxplots.js Mon Feb 27 12:48:54 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,608 +0,0 @@\n-// Copyright (c) 2016 Northrop Grumman.\n-// All rights reserved.\n-\n-var displayMarkerTable = function(plotconfig){\n-  var nbm = plotconfig.mrkrNames.length + 1;\n-  $(plotconfig.mtable).empty();\n-  plotconfig.allMarkers.map(function(v) {\n-    $(plotconfig.mtable).append(\'<tr>\'\n-        + \'<td><span style="background-color:rgba(0,0,0,\' + (v + 1 )/ nbm + \')\'\n-        + \'">&nbsp;&nbsp;&nbsp;</span></td>\'\n-        + \'<td title="\' + plotconfig.mrkrNames[v] + \'">\'\n-        + plotconfig.mrkrNames[v] + \'</td>\'\n-        + \'<td align="center"><input type="checkbox" checked class=\'\n-        + plotconfig.mrkrSelect + \' value=\' + v + \'/></td></tr>\');\n-  });\n-  if (nbm > 5) {\n-    $(plotconfig.mrkrSelectAll).prop(\'checked\', false);\n-    $(plotconfig.mrkrSelectAll).prop(\'disabled\', true);\n-    $(\'#markerWarning\').show();\n-    $(plotconfig.mrkrSelectj).each(function() {\n-      var selectedMrkr = parseInt(this.value);\n-      if (selectedMrkr > 4){\n-        this.checked = false;\n-        this.disabled = true;\n-      } else {\n-        this.checked = true;\n-      }\n-    });\n-  }\n-\n-  $(plotconfig.mrkrSelectAll).click(function() {\n-    var checkAll = $(plotconfig.mrkrSelectAll).prop(\'checked\');\n-    if (checkAll) {\n-      $(plotconfig.mrkrSelectj).prop("checked", true);\n-    } else {\n-      $(plotconfig.mrkrSelectj).prop("checked", false);\n-    }\n-    updateCSplots(plotconfig);\n-  });\n-\n-  $(plotconfig.mrkrSelectj).click(function() {\n-    if (nbm < 6){\n-      if ($(plotconfig.mrkrSelectj).length == $(plotconfig.mrkrSelectCheck).length) {\n-        $(plotconfig.mrkrSelectAll).prop("checked",true);\n-      } else {\n-        $(plotconfig.mrkrSelectAll).prop("checked",false);\n-      }\n-    } else {\n-      var nbSelected = 0;\n-      $(plotconfig.mrkrSelectj).each(function() {\n-        if (this.checked) {nbSelected++}\n-      });\n-      if (nbSelected < 5) {\n-        $(plotconfig.mrkrSelectj).prop(\'disabled\', false);\n-      } else {\n-        $(plotconfig.mrkrSelectj).each(function() {\n-          if (!this.checked) {\n-            this.disabled = true;\n-          }\n-        });\n-      }\n-    }\n-    updateCSplots(plotconfig);\n-  });\n-};\n-\n-var updateBoxplot = function(plotconfig){\n-  var margin = {top: 30, right: 10, bottom: 50, left: 60},\n-      h = 0,\n-      w = 0,\n-      width = 0,\n-      height = 0,\n-      labels = false, // show the text labels beside individual boxplots?\n-      mfi_option = false,\n-      min = Infinity,\n-      max = -Infinity,\n-      checkLabels = $(plotconfig.displayvalues).prop("checked"),\n-      checkMFI = $(plotconfig.displayMFI).prop("checked"),\n-      dataToPlot = [],\n-      tmp = [],\n-      nbm = plotconfig.mrkrNames.length + 1,\n-      maxRange = 0,\n-      minRange = 0,\n-      domainx = [],\n-      domainx1 = [];\n-\n-  $(plotconfig.plotdivj).empty();\n-  h = $(window).height() - 200;\n-  $(plotconfig.plotdivj).height(h);\n-  w = $(plotconfig.plotdivj).width();\n-  width = w - margin.left - margin.right;\n-  height = h - margin.top - margin.bottom;\n-\n-  var svg = d3.select(plotconfig.plotdivj).append("svg")\n-      .attr("width", w)\n-      .attr("height", h)\n-      .attr("class", "box")\n-    .append("g")\n-      .attr("transform", "translate(" + margin.left + "," + margin.top + ")");\n-\n-  if (checkLabels) {\n-      labels = true;\n-  };\n-  if (checkMFI) {\n-      mfi_option = true;\n-  };\n-  /* Get the data in proper shape to feed to the boxplot function\n-  want [Object, Object, ..., Object] where Object:\n-    \'population\': pop\n-    \'Data\' : [Object, Object, ..., Object] where Object:\n-        \'Marker\' : marker name\n-        \'outliers\' : outliers\n-  */\n-\n-  if (plotconfig.view == \'p\') {\n-    plotconfig.selectedPopulations.forEach(function(p) {\n-      tmpPlot = [];\n-      plotconfig.selectedMarkers.forEach(function(m) {\n-        var markernm = plotconfig.mrkrNames[m],\n-            qtmp = [\n-                +plotconfig.csdata.q1[markernm][p],\n-                +plotconfig.csdata.q2[markernm][p],\n-                +plotconfig.csd'..b'("opacity", 1e-6)\n-            .style("fill", function(d) {\n-                    var nbm = data.config[2],\n-                        pop = data.config[1],\n-                        mrkr = data.config[0];\n-                    var color = color_palette[0][pop][1] + (mrkr + 1 )/ nbm + \')\';\n-                    return color; })\n-            .style("stroke", function(d) { return color_palette[0][data.config[1]][3]; })\n-          .transition()\n-            .duration(duration)\n-            .attr("cy", function(i) { return x1(d[i]); })\n-            .style("opacity", 1);\n-\n-        outlier.transition()\n-            .duration(duration)\n-            .attr("cy", function(i) { return x1(d[i]); })\n-            .style("opacity", 1);\n-\n-        outlier.exit().transition()\n-            .duration(duration)\n-            .attr("cy", function(i) { return x1(d[i]); })\n-            .style("opacity", 1e-6)\n-            .remove();\n-\n-        // Compute the tick format.\n-        var format = tickFormat || x1.tickFormat(8);\n-\n-        // Update box ticks.\n-        var boxTick = g.selectAll("text.box")\n-            .data(quartileData);\n-        if(showLabels == true) {\n-          boxTick.enter().append("text")\n-              .attr("class", "box")\n-              .attr("dy", ".3em")\n-              .attr("dx", function(d, i) { return i & 1 ? 6 : -6 })\n-              .attr("x", function(d, i) { return i & 1 ?  + width : 0 })\n-              .attr("y", x0)\n-              .attr("text-anchor", function(d, i) { return i & 1 ? "start" : "end"; })\n-              .text(format)\n-            .transition()\n-              .duration(duration)\n-              .attr("y", x1);\n-        }\n-\n-        boxTick.transition()\n-            .duration(duration)\n-            .text(format)\n-            .attr("y", x1);\n-\n-        // Update whisker ticks. These are handled separately from the box\n-        // ticks because they may or may not exist, and we want don\'t want\n-        // to join box ticks pre-transition with whisker ticks post-.\n-        var whiskerTick = g.selectAll("text.whisker")\n-            .data(whiskerData || []);\n-        if(showLabels == true) {\n-          whiskerTick.enter().append("text")\n-              .attr("class", "whisker")\n-              .attr("dy", ".3em")\n-              .attr("dx", 6)\n-              .attr("x", width)\n-              .attr("y", x0)\n-              .text(format)\n-              .style("opacity", 1e-6)\n-            .transition()\n-              .duration(duration)\n-              .attr("y", x1)\n-              .style("opacity", 1);\n-        }\n-        whiskerTick.transition()\n-            .duration(duration)\n-            .text(format)\n-            .attr("y", x1)\n-            .style("opacity", 1);\n-\n-        whiskerTick.exit().transition()\n-            .duration(duration)\n-            .attr("y", x1)\n-            .style("opacity", 1e-6)\n-            .remove();\n-      });\n-      d3.timer.flush();\n-    }\n-\n-    box.width = function(x) {\n-      if (!arguments.length) return width;\n-      width = x;\n-      return box;\n-    };\n-    box.height = function(x) {\n-      if (!arguments.length) return height;\n-      height = x;\n-      return box;\n-    };\n-    box.tickFormat = function(x) {\n-      if (!arguments.length) return tickFormat;\n-      tickFormat = x;\n-      return box;\n-    };\n-    box.duration = function(x) {\n-      if (!arguments.length) return duration;\n-      duration = x;\n-      return box;\n-    };\n-    box.domain = function(x) {\n-      if (!arguments.length) return domain;\n-      domain = x == null ? x : d3.functor(x);\n-      return box;\n-    };\n-    box.value = function(x) {\n-      if (!arguments.length) return value;\n-      value = x;\n-      return box;\n-    };\n-    box.showLabels = function(x) {\n-      if (!arguments.length) return showLabels;\n-      showLabels = x;\n-      return box;\n-    };\n-    box.showMFI = function(x) {\n-      if (!arguments.length) return showMFI;\n-      showMFI = x;\n-      return box;\n-    };\n-    return box;\n-  };\n-})();\n'
b
diff -r 8c17aa8032c2 -r bca68066a957 cs_overview/static/flowtools/js/color_palette.js
--- a/cs_overview/static/flowtools/js/color_palette.js Mon Feb 27 12:48:54 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b"@@ -1,226 +0,0 @@\n-// Copyright (c) 2016 Northrop Grumman.\n-// All rights reserved.\n-\n-/* Palettes for graphics.\n-* 0 -> Liz's palette (original ImmPort color scheme for graphics)\n-* 1 -> Cris's palette (diverging)\n-* 2 -> Christmas (diverging)\n-* 3 -> not Christmas (sequential color blind friendly)\n-* 4 -> Rainbow (sequential)\n-* arrays are color HEX, color RGB (for transparency effect), contrasting color, darker shade for borders\n-*/\n-var color_palette = [[\n-  ['#000000','rgba(0,0,0,','rgba(52,17,81,1)','#111111'],\n-\t['#FF0000','rgba(255,0,0,','rgba(52,17,81,1)','#D21111'],\n-\t['#FFFF00','rgba(255,255,0,','rgba(52,17,81,1)','#FFC900'],\n-\t['#008000','rgba(0,128,0,','rgba(52,17,81,1)','#016D01'],\n-\t['#0000FF','rgba(0,0,255,','rgba(255,0,0,1)','#2121A0'],\n-\t['#FFA500','rgba(255,165,0,','rgba(52,17,81,1)','#DE991B'],\n-\t['#8A2BE2','rgba(138,43,226,','rgba(52,17,81,1)','#6A0EBF'],\n-\t['#808000','rgba(128,128,0,','rgba(52,17,81,1)','#66660A'],\n-\t['#00FFFF','rgba(0,255,255,','rgba(52,17,81,1)','#1DCBCB'],\n-\t['#FF00FF','rgba(255,0,255,','rgba(52,17,81,1)','#A009A0'],\n-\t['#00FF00','rgba(0,255,0,','rgba(52,17,81,1)','#20AB20'],\n-\t['#000080','rgba(0,0,128,','rgba(255,0,0,1)','#13135B'],\n-\t['#F08080','rgba(240,128,128,','rgba(52,17,81,1)','#922626'],\n-\t['#800080','rgba(128,0,128,','rgba(255,0,0,1)','#580B58'],\n-\t['#F0E68C','rgba(240,230,140,','rgba(52,17,81,1)','#F0C08C'],\n-\t['#8FBC8F','rgba(143,188,143,','rgba(52,17,81,1)','#668166'],\n-\t['#2F4F4F','rgba(47,79,79,','rgba(52,17,81,1)','#0E3636'],\n-\t['#008080','rgba(0,128,128,','rgba(52,17,81,1)','#095454'],\n-\t['#9932CC','rgba(153,50,204,','rgba(52,17,81,1)','#78289F'],\n-\t['#FF7F50','rgba(255,127,80,','rgba(52,17,81,1)','#B0431A'],\n-\t['#FFD700','rgba(255,215,0,','rgba(52,17,81,1)','#FFB900'],\n-\t['#008B8B','rgba(0,139,139,','rgba(52,17,81,1)','#097171'],\n-\t['#800000','rgba(128,0,0,','rgba(255,0,0,1)','#500303'],\n-\t['#5F9EA0','rgba(95,158,160,','rgba(52,17,81,1)','#366668'],\n-\t['#FFC0CB','rgba(255,192,203,','rgba(52,17,81,1)','#FC869B'],\n-\t['#545454','rgba(84,84,84,','rgba(255,0,0,1)','#342C2C'],\n-\t['#7FFFD4','rgba(127,255,212,','rgba(255,0,0,1)','#8CCAB5'],\n-\t['#ADD8E6','rgba(173,216,230,','rgba(52,17,81,1)','#77C6DF'],\n-\t['#DB7093','rgba(219,112,147,','rgba(52,17,81,1)','#B24B6D'],\n-\t['#CD853F','rgba(205,133,63,','rgba(52,17,81,1)','#BA6D22'],\n-\t['#4169E1','rgba(65,105,225,','rgba(52,17,81,1)','#1840B8'],\n-\t['#708090','rgba(112,128,144,','rgba(52,17,81,1)','#465A6D'],\n-\t['#4682B4','rgba(70,130,180,','rgba(52,17,81,1)','#1F5785'],\n-\t['#D8BFD8','rgba(216,191,216,','rgba(52,17,81,1)','#B679B6'],\n-\t['#F5DEB3','rgba(245,222,179,','rgba(52,17,81,1)','#E9AB3F'],\n-\t['#9ACD32','rgba(154,205,50,','rgba(52,17,81,1)','#6E971B'],\n-\t['#BDB76B','rgba(189,183,107,','rgba(52,17,81,1)','#938E49'],\n-\t['#8B008B','rgba(139,0,139,','rgba(255,0,0,1)','#590A59'],\n-\t['#556B2F','rgba(85,107,47,','rgba(52,17,81,1)','#3A4D19'],\n-\t['#00CED1','rgba(0,206,209,','rgba(52,17,81,1)','#1BA0A2'],\n-\t['#FF1493','rgba(255,20,147,','rgba(52,17,81,1)','#A40F5F']\n-],[\n-\t//cris\n-  ['#000000','rgba(0,0,0,','rgba(52,17,81,1)','#111111'],\n-\t['#5B1A48','rgba(91,26,72,','rgba(255,0,0,1)','#922B74'],\n-\t['#1ED992','rgba(30,217,146,','rgba(52,17,81,1)','#108A5B'],\n-\t['#FFE4FF','rgba(255,228,255,','rgba(52,17,81,1)','#FF9AFF'],\n-\t['#3B2000','rgba(59,32,0,','rgba(255,0,0,1)','#8C4D02'],\n-\t['#BDF765','rgba(189,247,101,','rgba(52,17,81,1)','#83b438'],\n-\t['#C6DCFD','rgba(198,220,253,','rgba(52,17,81,1)','#70A9FE'],\n-\t['#542788','rgba(84,39,136,','rgba(255,0,0,1)','#8055B2'],\n-\t['#FB8072','rgba(251,128,114,','rgba(52,17,81,1)','#D55446'],\n-\t['#F2E0B8','rgba(242,224,184,','rgba(52,17,81,1)','#F9C146'],\n-\t['#0A684C','rgba(10,104,76,','rgba(52,17,81,1)','#27B88D'],\n-\t['#FD8ADC','rgba(253,138,220,','rgba(52,17,81,1)','#CB3AA2'],\n-\t['#CDFAFF','rgba(205,250,255,','rgba(52,17,81,1)','#66EDFC'],\n-\t['#0C1657','rgba(12,22,87,','rgba(255,0,0,1)','#3243B6'],\n-\t['#FFDE69','rgba(255,222,105,','rgba(52,17,81,1)','#CFAD34'],\n-\t['#BEBADA','rgba(190,186,218,','rgb"..b",1)','#28785D'],\n-\t['#6DB388','rgba(109,179,136,','rgba(52,17,81,1)','#348252'],\n-\t['#76B67D','rgba(118,182,125,','rgba(52,17,81,1)','#388340'],\n-\t['#7FB972','rgba(127,185,114,','rgba(52,17,81,1)','#448635'],\n-\t['#88BB69','rgba(136,187,105,','rgba(52,17,81,1)','#518730'],\n-\t['#92BD60','rgba(146,189,96,','rgba(52,17,81,1)','#62902D'],\n-\t['#9CBE59','rgba(156,190,89,','rgba(52,17,81,1)','#6D9028'],\n-\t['#A7BE53','rgba(167,190,83,','rgba(52,17,81,1)','#70871D'],\n-\t['#B1BE49','rgba(177,190,78,','rgba(52,17,81,1)','#7C8919'],\n-\t['#BABC49','rgba(186,188,73,','rgba(52,17,81,1)','#87891B'],\n-\t['#C3BA45','rgba(195,186,69,','rgba(52,17,81,1)','#928917'],\n-\t['#CCB742','rgba(204,183,66,','rgba(52,17,81,1)','#AC9516'],\n-\t['#D3B33F','rgba(211,179,63,','rgba(52,17,81,1)','#A78713'],\n-\t['#DAAD3C','rgba(218,173,60,','rgba(52,17,81,1)','#AB7E0D'],\n-\t['#DFA539','rgba(223,165,57,','rgba(52,17,81,1)','#B17609'],\n-\t['#E39C37','rgba(227,156,55,','rgba(52,17,81,1)','#BB730D'],\n-\t['#E59134','rgba(229,145,52,','rgba(52,17,81,1)','#B16006'],\n-\t['#E78432','rgba(231,132,50,','rgba(52,17,81,1)','#B45404'],\n-\t['#E7752F','rgba(231,117,47,','rgba(52,17,81,1)','#763703'],\n-\t['#E6652D','rgba(230,101,45,','rgba(52,17,81,1)','#AD3906'],\n-\t['#E4542A','rgba(228,84,42,','rgba(52,17,81,1)','#AE2A04'],\n-\t['#E14326','rgba(225,67,38,','rgba(52,17,81,1)','#AD1E04'],\n-\t['#DD3123','rgba(221,49,35,','rgba(52,17,81,1)','#A11105'],\n-\t['#D92120','rgba(217,33,32,','rgba(52,17,81,1)','#8A0201']\n-],[\n-// Rainbow\n-  ['#000000','rgba(0,0,0,','rgba(52,17,81,1)','#111111'],\n-\t['#FF0000','rgba(255,0,0,','rgba(52,17,81,1)','#C30707'],\n-\t['#FF2600','rgba(255,38,0,','rgba(52,17,81,1)','#BA250B'],\n-\t['#FF4D00','rgba(255,77,0,','rgba(52,17,81,1)','#BD3A02'],\n-\t['#FF7300','rgba(255,115,0,','rgba(52,17,81,1)','#C15B06'],\n-\t['#FF9900','rgba(255,153,0,','rgba(52,17,81,1)','#BF7504'],\n-\t['#FFBF00','rgba(255,191,0,','rgba(52,17,81,1)','#C49405'],\n-\t['#FFE500','rgba(255,229,0,','rgba(52,17,81,1)','#BEAB01'],\n-\t['#F2FF00','rgba(242,255,0,','rgba(52,17,81,1)','#B3BD03'],\n-\t['#CCFF00','rgba(204,255,0,','rgba(52,17,81,1)','#93B607'],\n-\t['#A6FF00','rgba(166,255,0,','rgba(52,17,81,1)','#7BBB05'],\n-\t['#80FF00','rgba(128,255,0,','rgba(52,17,81,1)','#59AC05'],\n-\t['#59FF00','rgba(89,255,0,','rgba(52,17,81,1)','#3DAD01'],\n-\t['#33FF00','rgba(51,255,0,','rgba(52,17,81,1)','#24B001'],\n-\t['#0DFF00','rgba(13,255,0,','rgba(52,17,81,1)','#0CAA03'],\n-\t['#00FF1A','rgba(0,255,26,','rgba(52,17,81,1)','#03AC14'],\n-\t['#00FF40','rgba(0,255,64,','rgba(52,17,81,1)','#02AB2C'],\n-\t['#00FF66','rgba(0,255,102,','rgba(52,17,81,1)','#01AD46'],\n-\t['#00FF8C','rgba(0,255,140,','rgba(52,17,81,1)','#06B466'],\n-\t['#00FFB3','rgba(0,255,179,','rgba(52,17,81,1)','#01AB79'],\n-\t['#00FFD9','rgba(0,255,217,','rgba(52,17,81,1)','#02B399'],\n-\t['#00FFFF','rgba(0,255,255,','rgba(52,17,81,1)','#04AEAE'],\n-\t['#00D9FF','rgba(0,217,255,','rgba(52,17,81,1)','#0496B0'],\n-\t['#00B2FF','rgba(0,178,255,','rgba(52,17,81,1)','#0272A3'],\n-\t['#008CFF','rgba(0,140,255,','rgba(255,0,0,1)','#00569D'],\n-\t['#0068FF','rgba(0,102,255,','rgba(255,0,0,1)','#044AAE'],\n-\t['#0040FF','rgba(0,64,255,','rgba(255,0,0,1)','#032894'],\n-\t['#0019FF','rgba(0,25,255,','rgba(255,0,0,1)','#01109C'],\n-\t['#0D00FF','rgba(13,0,255,','rgba(255,0,0,1)','#0B03A7'],\n-\t['#3300FF','rgba(51,0,255,','rgba(255,0,0,1)','#2403A7'],\n-\t['#5900FF','rgba(89,0,255,','rgba(255,0,0,1)','#3E04AA'],\n-\t['#8000FF','rgba(128,0,255,','rgba(255,0,0,1)','#5302A4'],\n-\t['#A600FF','rgba(166,0,255,','rgba(255,0,0,1)','#6F03A9'],\n-\t['#CC00FF','rgba(204,0,255,','rgba(255,0,0,1)','#8A04AC'],\n-\t['#F200FF','rgba(242,0,255,','rgba(52,17,81,1)','#9D03A5'],\n-\t['#FF00E5','rgba(255,0,229,','rgba(52,17,81,1)','#B607A4'],\n-\t['#FF00BF','rgba(255,0,191,','rgba(52,17,81,1)','#B40588'],\n-\t['#FF0099','rgba(255,0,153,','rgba(52,17,81,1)','#B4016D'],\n-\t['#FF0073','rgba(255,0,115,','rgba(52,17,81,1)','#A9024D'],\n-\t['#FF004C','rgba(255,0,76,','rgba(52,17,81,1)','#A90335'],\n-\t['#FF0026','rgba(255,0,38,','rgba(52,17,81,1)','#A6051D']\n-]];\n"
b
diff -r 8c17aa8032c2 -r bca68066a957 cs_overview/static/flowtools/js/crossSamplePlots.js
--- a/cs_overview/static/flowtools/js/crossSamplePlots.js Mon Feb 27 12:48:54 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,263 +0,0 @@\n-// Copyright (c) 2016 Northrop Grumman.\n-// All rights reserved.\n-var updateCSplots = function(plotconfig){\n-  plotconfig.selectedPopulations = [];\n-  $(plotconfig.popSelectj).each(function() {\n-    if (this.checked) {\n-      plotconfig.selectedPopulations.push(parseInt(this.value));\n-    }\n-  });\n-  if (plotconfig.hasOwnProperty("mtable")) {\n-    // Update selected markers?\n-    plotconfig.selectedMarkers = [];\n-    $(plotconfig.mrkrSelectj).each(function() {\n-      if (this.checked) {\n-        plotconfig.selectedMarkers.push(parseInt(this.value));\n-      }\n-    });\n-    // update plot\n-    updateBoxplot(plotconfig);\n-  } else {\n-    updatePlot(plotconfig);\n-  }\n-};\n-\n-var displayPopulationLegend = function(plotconfig) {\n-  $(plotconfig.table).empty();\n-  plotconfig.allPopulations.map(function(value,index) {\n-    $(plotconfig.table).append(\'<tr><td align="center">\'\n-        + \'<input type="checkbox" checked class=\' + plotconfig.popSelect\n-        + \' value=\' + value + \'/></td><td title="\' + newPopNames[value] + \'">\'\n-        + newPopNames[value] + \'</td><td><span style="background-color:\'\n-        + color_palette[0][value][0] + \'">&nbsp;&nbsp;&nbsp;</span></td></tr>\');\n-  });\n-\n-  $(plotconfig.popSelectAll).click(function() {\n-    var checkAll = $(plotconfig.popSelectAll).prop(\'checked\');\n-    if (checkAll) {\n-      $(plotconfig.popSelectj).prop("checked", true);\n-    } else {\n-      $(plotconfig.popSelectj).prop("checked", false);\n-    }\n-    updateCSplots(plotconfig);\n-  });\n-\n-  $(plotconfig.popSelectj).click(function() {\n-    if ($(plotconfig.popSelectj).length == $(plotconfig.popSelectCheck).length) {\n-      $(plotconfig.popSelectAll).prop("checked",true);\n-    } else {\n-      $(plotconfig.popSelectAll).prop("checked",false);\n-    }\n-    updateCSplots(plotconfig);\n-  });\n-\n-  $(plotconfig.popSelectj).each(function() {\n-    var selectedpopn = parseInt(this.value);\n-    if ($.inArray(selectedpopn,plotconfig.selectedPopulations) > -1) {\n-      this.checked = true;\n-    } else {\n-      this.checked = false;\n-    }\n-  });\n-};\n-\n-var displayToolbar = function(plotconfig){\n-  $(plotconfig.displaybutton).on("click",function() {\n-    $(plotconfig.popSelectj).prop("checked", true);\n-    $(plotconfig.popSelectAll).prop("checked", true);\n-    if (plotconfig.hasOwnProperty("mtable")){\n-      $(plotconfig.displayMFI).prop("checked", false);\n-      $(plotconfig.displayvalues).prop("checked", false);\n-      $(plotconfig.mrkrSelectj).prop("checked", true);\n-      $(plotconfig.mrkrSelectAll).prop("checked",true);\n-    }\n-    updateCSplots(plotconfig);\n-  });\n-\n-  if (plotconfig.hasOwnProperty("mtable")){\n-    $(plotconfig.displayMFI).on("click", function(){\n-      updateCSplots(plotconfig);\n-    });\n-    $(plotconfig.displayvalues).on("click", function(){\n-      updateCSplots(plotconfig);\n-    });\n-  }\n-  $(plotconfig.toggledisplayj).on("click",function() {\n-    plotconfig.selectedPopulations = [];\n-    $(plotconfig.popSelectj).each(function() {\n-      if (this.checked) {\n-        plotconfig.selectedPopulations.push(parseInt(this.value));\n-      }\n-    })\n-    if (plotconfig.hasOwnProperty("mtable")){\n-      plotconfig.selectedMarkers = [];\n-      $(plotconfig.mrkrSelectj).each(function() {\n-        if (this.checked) {\n-          plotconfig.selectedMarkers.push(parseInt(this.value));\n-        }\n-      });\n-      var text = document.getElementById(plotconfig.toggledisplay).firstChild;\n-      text.data = text.data == "View per marker" ? "View per population" : "View per marker";\n-      plotconfig.view = plotconfig.view == "p" ? "m" : "p";\n-      updateBoxplot(plotconfig);\n-    } else {\n-      var imgSrc = document.getElementById(plotconfig.toggledisplay);\n-      imgSrc.src = imgSrc.src.endsWith("stackedsm.png") ? "/static/images/flowtools/barssm.png" : "/static/images/flowtools/stackedsm.png";\n-      plotconfig.type = plotconfig.type == "barplot" ? "areaplot" : "barplot";\n-      updatePlot(plotconfig);\n-    }\n-  });\n-  d'..b'rNames.length; i < nbMarkers; i++) {\n-      plotconfig.allMarkers.push(i);\n-      plotconfig.selectedMarkers.push(i);\n-    }\n-  } else {\n-    var nbPop = plotconfig.csdata[0].length;\n-  }\n-\n-  for (var i = 2; i < nbPop; i++) {\n-    plotconfig.allPopulations.push(i - 1);\n-    plotconfig.selectedPopulations.push(i - 1);\n-  }\n-\n-  $(window).on(\'resize\',function() {\n-    waitForFinalEvent(function() {\n-      if (plotconfig.hasOwnProperty("mtable")){\n-          updateBoxplot(plotconfig);\n-      } else {\n-          updatePlot(plotconfig);\n-      }\n-    }, 500, "resizePlot");\n-  });\n-\n-  displayPopulationLegend(plotconfig);\n-  if (plotconfig.hasOwnProperty("mtable")){\n-    displayMarkerTable(plotconfig);\n-    updateBoxplot(plotconfig);\n-  } else {\n-    updatePlot(plotconfig);\n-  }\n-};\n-\n-var updatePlot = function(plotconfig) {\n-  var h = $(window).height() - 200,\n-      traces = [],\n-      tmptraces = [],\n-      x_values = [],\n-      totals = [];\n-      layout = {};\n-\n-  $(plotconfig.plotdivj).empty();\n-  $(plotconfig.plotdivj).height(h);\n-  for (var i = 1, j = plotconfig.csdata.length; i < j; i++) {\n-    x_values.push(newSmpNames[plotconfig.csdata[i][1]]);\n-  }\n-\n-  for (var k = 1, i = plotconfig.csdata.length; k < i; k++){\n-    totals[k] = 0;\n-    for (var m = 2, o = plotconfig.csdata[0].length; m < o; m++){\n-      for (var n = 0, p = plotconfig.selectedPopulations.length; n < p; n++){\n-        if (plotconfig.csdata[0][m] === plotconfig.selectedPopulations[n]) {\n-          totals[k] += plotconfig.csdata[k][m];\n-        }\n-      }\n-    }\n-  }\n-\n-  for (var i = 0, ii = plotconfig.selectedPopulations.length; i < ii; i++) {\n-    pop = plotconfig.selectedPopulations[i];\n-    var popName = "Pop " + pop;\n-    var y_values = [];\n-    var obj;\n-\n-    for (var j = 1, jj = plotconfig.csdata.length; j < jj; j++) {\n-      var newvalue = (plotconfig.csdata[j][pop + 1] / totals[j]) * 100;\n-      y_values.push(newvalue);\n-    }\n-    if (plotconfig.type === "areaplot") {\n-      obj = {\n-          x: x_values,\n-          y: y_values,\n-          hoverinfo: "x",\n-          name: popName,\n-          type: \'area\',\n-          fill: \'tonexty\',\n-          marker: {color: color_palette[0][pop][0]}\n-      };\n-    }\n-    if (plotconfig.type === "barplot") {\n-      obj = {\n-          x: x_values,\n-          y: y_values,\n-          hoverinfo: "x",\n-          name: popName,\n-          type: \'bar\',\n-          marker: {color: color_palette[0][pop][0]}\n-      };\n-    }\n-    tmptraces.push(obj)\n-  }\n-\n-  if (plotconfig.type === "barplot") {\n-    layout = {\n-        hovermode:\'closest\',\n-        title: \'\',\n-        barmode: \'stack\',\n-        showlegend: false,\n-        yaxis: {\n-            mirror: \'all\',\n-            tickmode: \'array\',\n-            ticktext: ["","20%", "40%", "60%", "80%", "100%"],\n-            tickvals: [0,20,40,60,80,100],\n-            title: \'Populations proportions in selected set\',\n-            titlefont: {\n-                size: 16,\n-                color: \'grey\'\n-            }\n-        }\n-    };\n-    traces = tmptraces;\n-  }\n-  if (plotconfig.type === "areaplot") {\n-    function stacked(trcs) {\n-      for(var i=1; i<trcs.length; i++) {\n-        for(var j=0; j<(Math.min(trcs[i][\'y\'].length, trcs[i-1][\'y\'].length)); j++) {\n-          trcs[i][\'y\'][j] += trcs[i-1][\'y\'][j];\n-        }\n-      }\n-      return trcs;\n-    }\n-    layout = {\n-        title: \'\',\n-        showlegend: false,\n-        yaxis: {\n-            mirror: \'all\',\n-            tickmode: \'array\',\n-            ticktext: ["","20%", "40%", "60%", "80%", "100%"],\n-            tickvals: [0,20,40,60,80,100],\n-            title: \'Populations proportions in selected set\',\n-            titlefont: {\n-                size: 16,\n-                color: \'grey\'\n-            }\n-        },\n-        xaxis: {\n-            autorange: false,\n-            range: [-0.2, x_values.length - 0.8]\n-        }\n-    };\n-    traces = stacked(tmptraces);\n-  }\n-  Plotly.newPlot(plotconfig.plotdiv,traces,layout);\n-};\n'
b
diff -r 8c17aa8032c2 -r bca68066a957 cs_overview/static/flowtools/js/csOverview.js
--- a/cs_overview/static/flowtools/js/csOverview.js Mon Feb 27 12:48:54 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,250 +0,0 @@
-// Copyright (c) 2016 Northrop Grumman.
-// All rights reserved.
-
-var url = "./csOverview.tsv",
-    boxplotUrl = "./csBoxplotData.json",
-    pctablecontent,
-    newSmpNames= {},
-    newPopNames = {},
-    configBoxplot = {},
-    configAreaplot = {};
-
-var waitForFinalEvent = (function () {
-  var timers = {};
-  return function (callback, ms, uniqueId) {
-    if (!uniqueId) {
-      uniqueId = "Don't call this twice without a uniqueId";
-    }
-    if (timers[uniqueId]) {
-      clearTimeout (timers[uniqueId]);
-    }
-    timers[uniqueId] = setTimeout(callback, ms);
-  };
-})();
-
-var preprocess = function(text){
-  var crossSampleData = d3.tsv.parseRows(text).map(function(row) {
-    return row.map(function(value) {
-      if (isNaN(value)) {
-        return value;
-      }
-      return +value;
-    })
-  })
-  return crossSampleData;
-};
-
-var displayProp = function() {
-  d3.text(url, function(error, data) {
-    var fileID = [],
-        sampleNames = [],
-        popTableData = [],
-        propHeadings = [],
-        propTableData = [],
-        propTableHeadings = [],
-        propTargets = [],
-        popTableHeadings = [],
-        propEditorData = [],
-        popEditorData = [],
-        smpcol = 2,
-        propHTML = '<table id="proptable" class="dtable display compact nowrap" cellspacing="0" width="100%"/>',
-        popHTML = '<table id="popnamestable" class="popt dtable display nowrap compact" cellspacing="0" width="100%"/>';
-
-    if (error) {
-      alert("Problem retrieving data");
-      return;
-    }
-    propHeadings = data.split("\n")[0].split("\t");
-    propHeadings.unshift("Comment");
-    data = d3.tsv.parse(data);
-    function propHandle(method, url, d, successCallBack, errorCallBack) {
-      var output = {data : propTableData};
-      successCallBack(output);
-    }
-
-    function popHandle(method, url, d, successCallBack, errorCallBack) {
-      var output = {data : popTableData};
-      successCallBack(output);
-    }
-
-    propTableData = $.extend(true,[],data);
-    propTableData.forEach(function(d) {
-      d.Comment = d.SampleName;
-      newSmpNames[d.SampleName] = d.Comment;
-      fileID.push(d.FileID);
-      sampleNames.push(d.SampleName);
-    });
-
-    for (var i = 3, j = propHeadings.length; i < j; i++){
-      propTargets.push(i);
-    }
-    propHeadings.forEach(function(d) {
-      propTableHeadings.push({"data":d, "title":d});
-      propEditorData.push({"label":d,"name":d});
-      if (d != 'Comment' && d != 'SampleName' && d != "FileID") {
-        newPopNames[d] = d.toString();
-        popTableHeadings.push({"data":d, "title":d});
-        popEditorData.push({"label":d,"name":d});
-      }
-    });
-    popTableData.push(newPopNames);
-    pctablecontent = $.extend(true,[],propTableData);
-
-    $('#propDiv').empty();
-    $('#propDiv').html(propHTML);
-    var smpEditor = new $.fn.dataTable.Editor({
-        ajax: propHandle,
-        table: '#proptable',
-        fields: propEditorData,
-        idSrc: 'SampleName'
-    });
-
-    $('#proptable').on( 'click', 'tbody td:first-child', function (e) {
-      smpEditor.bubble( this );
-    });
-    var propTable = $('#proptable').DataTable({
-        columns: propTableHeadings,
-        data: propTableData,
-        order: [[ smpcol, "asc" ]],
-        pageLength: 10,
-        scrollX: true,
-        scrollCollapse: true,
-        dom: '<"top"Bi>t<"bottom"lp><"clear">',
-        columnDefs: [{
-            targets: propTargets,
-            className: "dt-body-right",
-            render: function(data, type, row){
-                    return parseFloat(data).toFixed(2) + '%';
-            }
-          }, {
-            targets: [smpcol - 1, smpcol, smpcol + 1],
-            className: "dt-body-left",
-        }],
-        buttons: [
-            'copy', 'pdfHtml5','csvHtml5', 'colvis'
-        ],
-        colReorder: {
-            fixedColumnsLeft:1
-        },
-        select: true
-    });
-
-    // Add titles to File ID and Sample Name
-    $('#proptable tr').each(function(i,d){
-      if (i > 0) {
-        $(this).find('td').each(function(j,e){
-          if (j == 1 ) {
-            $(this).prop('title', fileID[i - 1] );
-          }
-          if (j == 2) {
-            $(this).prop('title', sampleNames[i - 1]);
-          }
-        });
-      }
-    });
-
-    // Add a table below to rename pops
-    // Might want to change that some other time?
-    $('#popnamesDiv').html(popHTML);
-    var popEditor = new $.fn.dataTable.Editor({
-        ajax: popHandle,
-        table: '#popnamestable',
-        fields: popEditorData,
-        idSrc: '1'
-    });
-
-    $('#popnamestable').on( 'click', 'tbody td', function (e) {
-      popEditor.bubble(this);
-    });
-    var popTable = $('#popnamestable').DataTable({
-        columns: popTableHeadings,
-        dom: 't',
-        select: true,
-        data: popTableData
-    });
-
-    smpEditor.on( 'preSubmit', function(e, object, action){
-      var data = object.data;
-      var key = Object.keys(data)[0];
-      var count = object.data[key]['Comment'];
-
-      propTableData.forEach(function(d){
-        if (d.SampleName === key) {
-          d.Comment = count;
-          newSmpNames[key] = count;
-        }
-      });
-      pctablecontent = $.extend(true, [], propTableData);
-    });
-    popEditor.on( 'preSubmit', function(e, object, action){
-      var data = object.data;
-      var key = Object.keys(data['1'])[0];
-      var count = object.data['1'][key];
-      popTableData[0][key] = count;
-      newPopNames[key] = count;
-    });
-  });
-};
-
-var displayStackedAreaPlot = function() {
-  $.ajax({
-    url: url,
-    dataType: "text",
-    success: function(text) {
-      configAreaplot = {
-        displaybutton : '#updateDisplayA',
-        popSelectj : '.popSelectA',
-        plotdivj : '#plotDivA',
-        toggledisplayj : '#togglePlot',
-        toggledisplay : 'toggleButtonImg',
-        csdata : preprocess(text),
-        plotdiv : 'plotDivA',
-        type : 'areaplot',
-        table : '#popTableA tbody',
-        popSelect : 'popSelectA',
-        allPopulations : [],
-        selectedPopulations : [],
-        popSelectAll : '#popSelectAllA',
-        popSelectCheck : '.popSelectA:checked'
-      };
-      displayToolbar(configAreaplot);
-    }
-  });
-};
-
-var displayBoxplot = function() {
-  $.ajax({
-    url: boxplotUrl,
-    dataType: "json",
-    success: function(data) {
-      configBoxplot = {
-        displaybutton : '#updateDisplayC',
-        toggledisplayj : '#changeDisplayC',
-        toggledisplay : 'changeDisplayC',
-        popSelectj : '.popSelectC',
-        plotdivj : '#plotDivC',
-        csdata : data,
-        plotdiv : 'plotDivC',
-        type : 'boxplot',
-        table : '#popTableC tbody',
-        popSelect : 'popSelectC',
-        allMarkers : [],
-        selectedMarkers: [],
-        allPopulations : [],
-        selectedPopulations : [],
-        popSelectAll : '#popSelectAllC',
-        popSelectCheck: '.popSelectC:checked',
-        mrkrSelectAll : '#mrkrSelectAllC',
-        mrkrSelectCheck: '.mrkrSelectC:checked',
-        mrkrSelect : 'mrkrSelectC',
-        mtable : '#mrkrTableC tbody',
-        mrkrSelectj: '.mrkrSelectC',
-        displayvalues: '#displayLabelsC',
-        displayMFI: '#displayMFIC',
-        view: 'p',
-        mrkrNames :  Object.keys(data.mfi)
-      };
-      displayToolbar(configBoxplot);
-    }
-  });
-};
b
diff -r 8c17aa8032c2 -r bca68066a957 cs_overview/static/flowtools/js/pCoordCSstats.js
--- a/cs_overview/static/flowtools/js/pCoordCSstats.js Mon Feb 27 12:48:54 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,418 +0,0 @@\n-// Copyright (c) 2016 Northrop Grumman.\n-// All rights reserved.\n-\n-/*\n- * Initialize variables for parallelCoordinates display\n-*/\n-var pcApp = pcApp || {};\n-\n-pcApp.allSamples = [];\n-pcApp.selectedSamples = [];\n-pcApp.origData;\n-pcApp.flowData;\n-pcApp.updatedData;\n-pcApp.headers = [];\n-pcApp.foreground;\n-pcApp.background;\n-\n-var displayAll = function() {\n-  displayParallelPlot();\n-}\n-/*\n- * Display the Population Legend\n-*/\n-var displaySmpTable = function() {\n-  $(\'#popTablePC tbody\').empty();\n-  pcApp.origData.map(function(d) {\n-    $(\'#popTablePC tbody\').append(\'<tr><td align="center">\'\n-        + \'<input type="checkbox" id="\' + d.SampleName + \'" \'\n-        + \'checked class="popSelectPC" value=\'\n-        + d.SampleNumber + \'/></td><td title="\' + newSmpNames[d.SampleName]\n-        + \'">\' + newSmpNames[d.SampleName]\n-        + \'</td><td><span style="background-color:\'\n-        + color_palette[0][d.SampleNumber + 1][0]\n-        + \'">&nbsp;&nbsp;&nbsp;</span></td></tr>\');\n-  });\n-\n-  $(\'#popSelectAllPC\').click(function() {\n-    var checkAll = $("#popSelectAllPC").prop(\'checked\');\n-    if (checkAll) {\n-      $(".popSelectPC").prop("checked", true);\n-    } else {\n-      $(".popSelectPC").prop("checked", false);\n-    }\n-    pcApp.selectedSamples = [];\n-    $(\'.popSelectPC\').each(function() {\n-      if (this.checked) {\n-        pcApp.selectedSamples.push(parseInt(this.value));\n-      }\n-    })\n-    displayTableGrid();\n-    if (checkAll) {\n-      displayParallelPlot();\n-    } else {\n-      updateParallelForeground();\n-    }\n-  });\n-\n-  $(\'.popSelectPC\').click(function() {\n-    if ($(\'.popSelectPC\').length == $(".popSelectPC:checked").length) {\n-      $(\'#popSelectAllPC\').prop("checked",true);\n-    } else {\n-      $(\'#popSelectAllPC\').prop("checked",false);\n-    }\n-    pcApp.selectedSamples = [];\n-    $(\'.popSelectPC\').each(function() {\n-      if (this.checked) {\n-         pcApp.selectedSamples.push(parseInt(this.value));\n-      }\n-    })\n-    displayTableGrid();\n-    updateParallelForeground();\n-  });\n-  updateSmpTable();\n-};\n-\n-var updateSmpTable = function() {\n-  $(\'.popSelectPC\').each(function() {\n-    var smp = parseInt(this.value);\n-    if ($.inArray(smp,pcApp.selectedSamples) > -1) {\n-      this.checked = true;\n-    } else {\n-      this.checked = false;\n-    }\n-  })\n-}\n-\n-var displayTableGrid = function() {\n-  var colTable = [],\n-      colNames = [],\n-      pctargets = [],\n-      updatedHeaders = [],\n-      displayData = [],\n-      targetCol = 0,\n-      textCol = [],\n-      colOrder = [],\n-      tableHTML = [];\n-\n-  $("#tableDivPC").empty();\n-  pcApp.updatedData = $.extend(true,[],pctablecontent);\n-  pcApp.updatedData.forEach(function(d, idx){\n-    d.SampleName = idx + 1;\n-    delete(d.FileID);\n-  });\n-\n-  updatedHeaders = Object.keys(pcApp.updatedData[0]);\n-  displayData = pcApp.updatedData.filter(function(d,i) {\n-    if ($.inArray(i,pcApp.selectedSamples) > -1) {\n-      return d;\n-    }\n-  });\n-\n-  targetCol = updatedHeaders.length - 2;\n-  updatedHeaders.forEach(function(d,i){\n-    colTable.push("<th>" + d + "</th>");\n-    colNames.push({"data":d});\n-    if (i < targetCol){\n-      pctargets.push(i);\n-    }\n-  });\n-  textCol = [targetCol, targetCol + 1];\n-  colOrder = textCol.concat(pctargets);\n-  tableHTML = [\n-      \'<table id="pcTable" class="pctable display compact nowrap" cellspacing="0" width="100%">\',\n-      \'<thead>\',\n-      \'<tr>\',\n-      colTable.join("\\n"),\n-      \'</tr>\',\n-      \'</thead>\',\n-      \'</table>\',\n-  ];\n-\n-  $(\'#tableDivPC\').html(tableHTML.join("\\n"));\n-  var pcTable = $(\'#pcTable\').DataTable({\n-      columns: colNames,\n-      data: displayData,\n-      order: [[ targetCol, "asc" ]],\n-      pageLength: 10,\n-      //paging: false,\n-      scrollY: 250,\n-      scrollCollapse: true,\n-      scrollX: true,\n-      dom: \'<"top"B>t<"bottom"lip><"clear">\',\n-      columnDefs: [{\n-          targets: pctargets,\n-          className: "dt-body-right",\n-          render: function(data,type,row){\n- '..b'ter().append("g")\n-      .attr("class", "dimension")\n-      .attr("transform", function(d) { return "translate(" + x(d) + ")"; })\n-      .call(d3.behavior.drag()\n-        .origin(function(d) { return {x: x(d)}; })\n-        .on("dragstart", function(d) {\n-          dragging[d] = x(d);\n-          pcApp.background.attr("visibility", "hidden");})\n-        .on("drag", function(d) {\n-          dragging[d] = Math.min(width, Math.max(0, d3.event.x));\n-          pcApp.foreground.attr("d", path);\n-          dimensions.sort(function(a, b) { return position(a) - position(b); });\n-          x.domain(dimensions);\n-          g.attr("transform", function(d) { return "translate(" + position(d) + ")"; }); })\n-        .on("dragend", function(d) {\n-          delete dragging[d];\n-          transition(d3.select(this)).attr("transform", "translate(" + x(d) + ")");\n-          transition(pcApp.foreground).attr("d", path);\n-          pcApp.background\n-              .attr("d", path)\n-            .transition()\n-              .delay(500)\n-              .duration(0)\n-              .attr("visibility", null);\n-        }));\n-\n-  // Add an axis and title.\n-  g.append("g")\n-      .attr("class", "axis")\n-      .each(function(d) { d3.select(this).call(axis.scale(y[d])); });\n-  g.append("g")\n-      .attr("class", "xlabel")\n-    .append("text")\n-      .style("text-anchor", "middle")\n-      .attr("y", -9)\n-      .text(function(d) { return d; });\n-\n-  // Add and store a brush for each axis.\n-  g.append("g")\n-      .attr("class", "brush")\n-      .each(function(d) { d3.select(this).call(y[d].brush = d3.svg.brush().y(y[d]).on("brush", brush)); })\n-    .selectAll("rect")\n-      .attr("x", -8)\n-      .attr("width", 16);\n-\n-  // Control line opacity.\n-  $(\'#PCline_opacity\').on(\'change\', (function() {\n-    var val = $(this).val();\n-    $(\'#plotDivPC .foreground path\').css(\'stroke-opacity\', val.toString());\n-    $(\'#pc_opacity\').html((Math.round(val*10000)/100) + "%");\n-  }));\n-};\n-\n-var updateParallelForeground = function() {\n-  pcApp.foreground[0].map(function(d) {\n-    var smp = parseInt(d[\'__data__\'][\'SampleNumber\'])\n-    if ($.inArray(smp,pcApp.selectedSamples) < 0) {\n-      d.style.display = "none";\n-    } else {\n-      d.style.display = null;\n-    }\n-  });\n-};\n-/*\n- * Retrieve the data, then call display functions\n-*/\n-var displayParallelCoordinates = function() {\n-/*    var inputFile = "./csOverview.tsv";\n-    d3.tsv(inputFile, function(error, data) {\n-         if (error) {\n-            alert("Problem Retrieving Data");\n-            return;\n-        }\n-  */\n-  pcApp.origData = $.extend(true,[], pctablecontent);\n-  pcApp.headers = Object.keys(pcApp.origData[0]);\n-  pcApp.headers.splice(pcApp.headers.indexOf("FileID"), 1);\n-  pcApp.origData.forEach(function(d,idx){\n-      d.SampleNumber = idx;\n-//    delete d.FileID;\n-  })\n-  /*\n-   * For the plot use only the proportion of each\n-   * population per sample. Store in flowData\n-  */\n-  pcApp.flowData = $.extend(true,[],pctablecontent);\n-  pcApp.flowData.forEach(function(d,idx){\n-    delete d.SampleName;\n-    delete d.FileID;\n-    delete d.Comment;\n-  });\n-  for (var i = 0, j = pcApp.flowData.length; i < j ; i++) {\n-    pcApp.allSamples.push(i);\n-    pcApp.selectedSamples.push(i);\n-  }\n-  displaySmpTable();\n-  displayTableGrid();\n-  displayParallelPlot();\n-\n-  $("#resetPCDisplay").on("click",function() {\n-    var opcty = ".8";\n-    for (var i = 0, j = pcApp.flowData.length; i < j; i++) {\n-      pcApp.allSamples.push(i);\n-      pcApp.selectedSamples.push(i);\n-    }\n-    $("#smpSelectAllPC").prop(\'checked\',true);\n-    $(".smpSelectPC").prop("checked",true);\n-\n-    $(\'#plotDivPC .foreground path\').css(\'stroke-opacity\', opcty);\n-    $(\'#pc_opacity\').html("80%");\n-    $(\'#PCline_opacity\').val(0.8);\n-\n-    displaySmpTable();\n-    displayTableGrid();\n-    displayParallelPlot();\n-  });\n-\n-  $(window).on(\'resize\',function() {\n-    waitForFinalEvent(function() {\n-      displayAll();\n-    }, 500, "resizePC");\n-  });\n-//    });\n-};\n'
b
diff -r 8c17aa8032c2 -r bca68066a957 cs_overview/static/flowtools/js/pCoordMFIstats.js
--- a/cs_overview/static/flowtools/js/pCoordMFIstats.js Mon Feb 27 12:48:54 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,559 +0,0 @@\n-// Copyright (c) 2016 Northrop Grumman.\n-// All rights reserved.\n-/*\n- * Initialize variables for parallelCoordinates display\n-*/\n-var pcAppMFI = pcAppMFI || {};\n-\n-pcAppMFI.origData;\n-pcAppMFI.flowData;\n-pcAppMFI.background;\n-pcAppMFI.foreground;\n-pcAppMFI.selectedLines = [];\n-pcAppMFI.selectedPopulations = [];\n-pcAppMFI.selectedSamples = [];\n-pcAppMFI.populations = [];\n-pcAppMFI.samples = [];\n-pcAppMFI.lines = [];\n-pcAppMFI.allLines;\n-pcAppMFI.headers = [];\n-\n-var displayAllm = function() {\n-  displayParallelPlotm();\n-};\n-/*\n- * Display the Population Legend\n-*/\n-var displayPopTablem = function() {\n-  $(\'#popTablePCm tbody\').empty();\n-  pcAppMFI.populations.map(function(d, index) {\n-    $(\'#popTablePCm tbody\').append(\'<tr><td align="center">\'\n-        + \'<input type="checkbox" \'\n-        + \'id="\'+ d + \'" \'\n-        + \'checked class="popSelectPCm" value=\'\n-        + index + \'/></td><td title="\' + newPopNames[d]\n-        + \'">\' + newPopNames[d]\n-        + \'</td><td><span style="background-color:\'\n-        + color_palette[0][index + 1][0]\n-        + \'">&nbsp;&nbsp;&nbsp;</span></td></tr>\');\n-  });\n-\n-  $(\'#popSelectAllPCm\').click(function() {\n-    var checkAll = $("#popSelectAllPCm").prop(\'checked\');\n-    if (checkAll) {\n-      $(".popSelectPCm").prop("checked", true);\n-      for (var i = 0; i < pcAppMFI.allLines; i ++) {\n-        pcAppMFI.selectedLines.push(i);\n-        pcAppMFI.lines.push(i);\n-      }\n-    } else {\n-      $(".popSelectPCm").prop("checked", false);\n-      pcAppMFI.selectedLines = [];\n-      pcAppMFI.lines = [];\n-    }\n-\n-    pcAppMFI.selectedPopulations = [];\n-    $(\'.popSelectPCm\').each(function() {\n-      if (this.checked) {\n-        pcAppMFI.selectedPopulations.push(parseInt(this.value));\n-      }\n-    });\n-\n-    displayTableGridm();\n-    if (checkAll) {\n-      displayParallelPlotm();\n-    } else {\n-      updateParallelForegroundidx();\n-    }\n-  });\n-\n-  $(\'.popSelectPCm\').click(function() {\n-    if ($(\'.popSelectPCm\').length == $(".popSelectPCm:checked").length) {\n-      $(\'#popSelectAllPCm\').prop("checked",true);\n-    } else {\n-      $(\'#popSelectAllPCm\').prop("checked",false);\n-    }\n-    pcAppMFI.selectedPopulations = [];\n-    $(\'.popSelectPCm\').each(function() {\n-      if (this.checked) {\n-        pcAppMFI.selectedPopulations.push(parseInt(this.value));\n-      }\n-    });\n-    pcAppMFI.selectedLines = [];\n-    pcAppMFI.lines = [];\n-    pcAppMFI.origData.forEach(function(d,idx){\n-      if ($.inArray(pcAppMFI.populations.indexOf(d.Population), pcAppMFI.selectedPopulations) > -1) {\n-        if ($.inArray(pcAppMFI.samples.indexOf(d.SmpName), pcAppMFI.selectedSamples) > -1){\n-          pcAppMFI.selectedLines.push(idx);\n-          pcAppMFI.lines.push(idx);\n-        }\n-      }\n-    });\n-    displayTableGridm();\n-    updateParallelForegroundidx();\n-  });\n-  updatePopTableidx();\n-  updateSmpTableidx();\n-};\n-\n-var updatePopTableidx = function() {\n-  $(\'.popSelectPCm\').each(function() {\n-    var pop = parseInt(this.value);\n-    var selectedPops = pcAppMFI.origData.map(function(d){\n-      if ($.inArray(d.idx, pcAppMFI.selectedLines) > -1){\n-        return pcAppMFI.populations.indexOf(d.Population);\n-      }\n-    });\n-    if ($.inArray(pop,selectedPops) > -1) {\n-      this.checked = true;\n-    } else {\n-      this.checked = false;\n-    }\n-  });\n-};\n-/*\n-* Display Sample Legend\n-*/\n-var displaySmpTablem = function(){\n-  $(\'#smpTablePCm tbody\').empty();\n-  pcAppMFI.samples.map(function(d, index) {\n-    $(\'#smpTablePCm tbody\').append(\'<tr><td title="\'\n-        + newSmpNames[d] + \'">\' + newSmpNames[d]\n-        + \'</td><td align="center">\' + \'<input type="checkbox" \'\n-        + \'id="\' + d + \'" \' + \'checked class="smpSelectPCm" value=\'\n-        + index + \'></td></tr>\');\n-  });\n-\n-  $(\'#smpSelectAllPCm\').click(function() {\n-    var checkAll = $("#smpSelectAllPCm").prop(\'checked\');\n-    if (checkAll) {\n-      $(".smpSelectPCm").prop("checked", true);\n-      for (var i = 0; i < pcAppMFI.allLines; i ++) {\n'..b'ging[d];\n-          transition(d3.select(this)).attr("transform", "translate(" + x(d) + ")");\n-          transition(pcAppMFI.foreground).attr("d", path);\n-          pcAppMFI.background\n-              .attr("d", path)\n-            .transition()\n-              .delay(500)\n-              .duration(0)\n-              .attr("visibility", null);\n-      }));\n-\n-  // Add an axis and title.\n-  g.append("g")\n-      .attr("class", "axis")\n-      .each(function(d) { d3.select(this).call(axis.scale(y[d])); });\n-  g.append("g")\n-      .attr("class", "xlabel")\n-    .append("text")\n-      .style("text-anchor", "middle")\n-      .attr("y", -9)\n-      .text(function(d) { return d; });\n-\n-  // Add and store a brush for each axis.\n-  g.append("g")\n-      .attr("class", "brush")\n-      .each(function(d) { d3.select(this).call(y[d].brush = d3.svg.brush().y(y[d]).on("brush", brush)); })\n-    .selectAll("rect")\n-      .attr("x", -8)\n-      .attr("width", 16);\n-\n-  // Control line opacity.\n-  $(\'#PCmline_opacity\').on(\'change\', (function() {\n-    var val = $(this).val();\n-    $(\'#plotDivPCm .foreground path\').css(\'stroke-opacity\', val.toString());\n-    $(\'#pcm_opacity\').html((Math.round(val*10000)/100) + "%");\n-  }));\n-};\n-\n-/*\n- * Retrieve the data, then call display functions\n-*/\n-var displayParallelCoordinatesMFI = function() {\n-  var inputFile = "./csAllMFIs.tsv";\n-  d3.tsv(inputFile, function(error, data) {\n-    var allPops = 0,\n-        allSamples = 0;\n-    if (error) {\n-      alert("Problem Retrieving Data");\n-      return;\n-    }\n-    pcAppMFI.origData = $.extend(true,[],data);\n-    pcAppMFI.headers = Object.keys(pcAppMFI.origData[0]);\n-    pcAppMFI.headers.push("EditedPopName");\n-    pcAppMFI.origData.forEach(function(d,idx) {\n-      d.idx = idx;\n-      d.EditedPopName = d.Population;\n-      d.SmpName = d.SampleName;\n-      pcAppMFI.selectedLines.push(idx);\n-      pcAppMFI.lines.push(idx);\n-      if (!pcAppMFI.populations.includes(d.Population)){\n-        pcAppMFI.populations.push(d.Population);\n-      }\n-      if (!pcAppMFI.samples.includes(d.SmpName)){\n-        pcAppMFI.samples.push(d.SmpName);\n-      }\n-    });\n-    pcAppMFI.populations = pcAppMFI.populations.sort(function(a, b){return a-b});\n-    pcAppMFI.allLines = pcAppMFI.origData.length;\n-\n-    allPops = pcAppMFI.populations.length;\n-    allSamples = pcAppMFI.samples.length;\n-    for (var i = 0; i < allPops; i++) {\n-      pcAppMFI.selectedPopulations.push(i);\n-    }\n-    for (var i = 0; i < allSamples; i++) {\n-      pcAppMFI.selectedSamples.push(i);\n-    }\n-    /*\n-     * For the plot use only the MFI information\n-     * for each populations. Store in flowData\n-    */\n-    pcAppMFI.flowData = $.extend(true,[],data);\n-    pcAppMFI.flowData.forEach(function(d) {\n-      delete d[\'Population\'];\n-      delete d[\'SampleName\'];\n-      delete d[\'Percentage\'];\n-    });\n-\n-    displayPopTablem();\n-    displaySmpTablem();\n-    displayTableGridm();\n-    displayParallelPlotm();\n-\n-    $("#resetDisplayMFIpop").on("click",function() {\n-      var opcty = ".8";\n-      for (var i = 0; i < allPops; i++) {\n-        pcAppMFI.selectedPopulations.push(i);\n-      }\n-      for (var i = 0; i < allSamples; i++) {\n-        pcAppMFI.selectedSamples.push(i);\n-      }\n-      for (var i = 0; i < pcAppMFI.allLines; i++) {\n-        pcAppMFI.selectedLines.push(i);\n-        pcAppMFI.lines.push(i);\n-      }\n-\n-      $("#popSelectAllPCm").prop(\'checked\',true);\n-      $(".popSelectPCm").prop("checked",true);\n-      $("#smpSelectAllPCm").prop(\'checked\',true);\n-      $(".smpSelectPCm").prop("checked",true);\n-\n-      $(\'#plotDivPCm .foreground path\').css(\'stroke-opacity\', opcty);\n-      $(\'#pcm_opacity\').html("80%");\n-      $(\'#PCmline_opacity\').val(0.8);\n-\n-      displayPopTablem();\n-      displaySmpTablem();\n-      displayTableGridm();\n-      displayParallelPlotm();\n-    });\n-\n-    $(window).on(\'resize\',function() {\n-      waitForFinalEvent(function() {\n-        displayAllm();\n-      }, 500, "resizePCm");\n-    });\n-  });\n-};\n'
b
diff -r 8c17aa8032c2 -r bca68066a957 cs_overview/static/images/flowtools/barssm.png
b
Binary file cs_overview/static/images/flowtools/barssm.png has changed
b
diff -r 8c17aa8032c2 -r bca68066a957 cs_overview/static/images/flowtools/cs_bpt.png
b
Binary file cs_overview/static/images/flowtools/cs_bpt.png has changed
b
diff -r 8c17aa8032c2 -r bca68066a957 cs_overview/static/images/flowtools/edit_popdistrib.png
b
Binary file cs_overview/static/images/flowtools/edit_popdistrib.png has changed
b
diff -r 8c17aa8032c2 -r bca68066a957 cs_overview/static/images/flowtools/pcmfi.png
b
Binary file cs_overview/static/images/flowtools/pcmfi.png has changed
b
diff -r 8c17aa8032c2 -r bca68066a957 cs_overview/static/images/flowtools/pcpop.png
b
Binary file cs_overview/static/images/flowtools/pcpop.png has changed
b
diff -r 8c17aa8032c2 -r bca68066a957 cs_overview/static/images/flowtools/popdistrib.png
b
Binary file cs_overview/static/images/flowtools/popdistrib.png has changed
b
diff -r 8c17aa8032c2 -r bca68066a957 cs_overview/static/images/flowtools/stackedA.png
b
Binary file cs_overview/static/images/flowtools/stackedA.png has changed
b
diff -r 8c17aa8032c2 -r bca68066a957 cs_overview/static/images/flowtools/stackedB.png
b
Binary file cs_overview/static/images/flowtools/stackedB.png has changed
b
diff -r 8c17aa8032c2 -r bca68066a957 cs_overview/static/images/flowtools/stackedsm.png
b
Binary file cs_overview/static/images/flowtools/stackedsm.png has changed
b
diff -r 8c17aa8032c2 -r bca68066a957 cs_overview/templates/csOverview.template
--- a/cs_overview/templates/csOverview.template Mon Feb 27 12:48:54 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,286 +0,0 @@\n-<!DOCTYPE html>\n-<html>\n-<head lang="en">\n-<title>CrossSample Overview</title>\n-<meta charset="UTF-8">\n-<meta HTTP-EQUIV="Pragma" CONTENT="no-cache">\n-<meta name="viewport" content="width=device-width, initial-scale=1.0">\n-<!-- Plotly.js -->\n-<link rel="stylesheet" href="/static/flowtools/bootstrap/css/bootstrap.css"/>\n-<link rel="stylesheet" href="/static/flowtools/select2/select2.min.css"/>\n-<link rel="stylesheet" href="/static/flowtools/css/parallelCoordinates.css"/>\n-<link rel="stylesheet" href="/static/flowtools/datatables/datatables.min.css"/>\n-<link rel="stylesheet" href="/static/flowtools/datatables/Buttons-1.1.2/css/buttons.dataTables.min.css"/>\n-<link rel="stylesheet" href="/static/flowtools/datatables/Select-1.1.2/css/select.dataTables.min.css"/>\n-<link rel="stylesheet" href="/static/flowtools/datatables/Editor-1.5.6/css/editor.dataTables.min.css"/>\n-<script src="/static/flowtools/jquery-1.11.3.min.js" type="text/javascript"></script>\n-<script src="/static/flowtools/bootstrap/js/bootstrap.js" type="text/javascript"></script>\n-<script src="/static/flowtools/select2/select2.full.min.js" type="text/javascript"></script>\n-<script src="/static/flowtools/d3/d3.min.js" type="text/javascript"></script>\n-<script src="/static/flowtools/plotly-latest.min.js" type="text/javascript"></script>\n-<script src="/static/flowtools/datatables/datatables.min.js" type="text/javascript"></script>\n-<script src="/static/flowtools/datatables/Editor-1.5.6/js/dataTables.editor.min.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/csOverview.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/crossSamplePlots.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/pCoordMFIstats.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/pCoordCSstats.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/color_palette.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/boxplots.js" type="text/javascript"></script>\n-\n-<style>\n-#input{font-family:Calibri,Arial}\n-table.dataTable tbody td.dt-body-right {\n-    text-align: right;\n-}\n-#div{padding:5px;width:150px;height:100px;text-align:center}\n-table{width:100%;border:0px solid;border-collapse:collapse;text-align:center;}\n-th{background-color:#3e6db0;color:#fff;padding:5px}\n-</style>\n-</head>\n-\n-<body>\n-<div class="container-fluid">\n-    <div class="row" style="padding-bottom:10px;min-height:500px;">\n-        <div  class="col-md-12">\n-            <ul class="nav nav-tabs tabs-main">\n-                <li class="homeTab active" data-value="prop"><a href="#prop" data-toggle="tab">Population Distribution</a></li>\n-                <li class="homeTab" data-value="stackedA"><a href="#stackedA" data-toggle="tab">Stacked Plot</a></li>\n-                <li class="homeTab" data-value="pcoord"><a href="#pcoord" data-toggle="tab">Parallel Coordinates Population Summary</a></li>\n-                <li class="homeTab" data-value="pcoordMFI"><a href="#pcoordMFI" data-toggle="tab">Parallel Coordinates MFI Summary</a></li>\n-                <li class="homeTab" data-value="csstats"><a href="#boxplot" data-toggle="tab">Summary Statistics Boxplots</a></li>\n-            </ul>\n-\n-            <div class="tab-content">\n-                <div class="tab-pane active" id="prop" style="min-height:500px;">\n-                    <div class="row">\n-                        <div id="propDiv">Population Distribution</div>\n-                    </div>\n-                    <div class="row">\n-                    &nbsp;&nbsp;&nbsp;&nbsp;Edit population names below:\n-                    <div id="popnamesDiv"></div>\n-                    </div>\n-                </div>\n-\n-                <div class="tab-pane" id="stackedA" style="min-height:500px;">\n-                    <div class="col-md-12 chartDiv">\n-                        <div id="plotDivA" class="col-md-10" style="height:100%;"></div>\n-\n-                        <div id'..b'       <input type="checkbox" unchecked id="displayMFIC"/>&nbsp;Display MFI<br><br>\n-                          <button id="changeDisplayC" class="igbtn">View per marker</button><br><br>\n-                          <div id="markerWarning" style="display:none;">\n-                            <div class="alert alert-info alert-dismissible fade in" role="alert">\n-                              <button type="button" class="close" data-dismiss="alert" aria-label="Close">\n-                                <span aria-hidden="true">&times;</span></button>\n-                                  Only 5 markers can be displayed at most.\n-                            </div>\n-                          </div>\n-                          <div id="outlierWarning" style="display:none;">\n-                            <div class="alert alert-info alert-dismissible fade in" role="alert">\n-                              <button type="button" class="close" data-dismiss="alert" aria-label="Close">\n-                                <span aria-hidden="true">&times;</span></button>\n-                                  The number of outliers is too large to display. Representation shows randomly downsampled outliers.\n-                            </div>\n-                          </div>\n-                        </div>\n-\n-                        <div id="plotDivC" class="col-md-8" style="height:100%;"></div>\n-\n-                        <div id="popDivC" class="col-md-2" style="height:100%;">\n-                            <button id="updateDisplayC" class="igbtn">Reset Display</button>\n-                            <table id="popTableC" class="table table-condensed table-bordered igtable">\n-                                <thead>\n-                                    <tr>\n-                                        <th><input type="checkbox" checked id="popSelectAllC"/></th>\n-                                        <th>Pop. Names</th>\n-                                        <th>Color</th>\n-                                     </tr>\n-                                </thead>\n-                                <tbody>\n-                                </tbody>\n-                            </table>\n-                        </div>\n-                    </div>\n-                </div>\n-            </div>\n-        </div>\n-    </div>\n-</div>\n-\n-\n-</div>\n-</div>\n-<script>\n-var poppropLoaded = false;\n-var stackedALoaded = false;\n-var pCoordLoaded = false;\n-var pCoordMFILoaded = false;\n-var boxplotLoaded = false;\n-\n-$().ready(function() {\n-    $(document).on(\'shown.bs.tab\',\'a[data-toggle="tab"]\', function(e) {\n-      var tab = e.target.getAttribute("href");\n-      if (tab == \'#prop\') {\n-        if (poppropLoaded) {\n-            return true;\n-        }\n-        poppropLoaded = true;\n-        displayProp();\n-      }\n-      if (tab == \'#stackedA\') {\n-        if (stackedALoaded) {\n-            displayPopulationLegend(configAreaplot);\n-            updatePlot(configAreaplot);\n-            return true;\n-        }\n-        stackedALoaded = true;\n-        displayStackedAreaPlot();\n-      }\n-      if (tab == \'#pcoord\') {\n-        if (pCoordLoaded) {\n-            displaySmpTable();\n-            displayTableGrid();\n-            return true;\n-        }\n-        pCoordLoaded = true;\n-        displayParallelCoordinates();\n-      }\n-      if (tab == \'#pcoordMFI\') {\n-        if (pCoordMFILoaded) {\n-            displayPopTablem();\n-            displaySmpTablem();\n-            displayTableGridm();\n-            return true;\n-        }\n-        pCoordMFILoaded = true;\n-        displayParallelCoordinatesMFI();\n-      }\n-      if (tab == \'#boxplot\') {\n-        if (boxplotLoaded) {\n-            displayPopulationLegend(configBoxplot);\n-            displayMarkerTable(configBoxplot);\n-            updateBoxplot(configBoxplot);\n-            return true;\n-        }\n-        boxplotLoaded = true;\n-        displayBoxplot();\n-      }\n-    });\n-\n-    poppropLoaded = true;\n-    displayProp();\n-});\n-</script>\n-</body>\n-</html>\n'
b
diff -r 8c17aa8032c2 -r bca68066a957 cs_overview/test-data/csAllMFIs.tsv
--- a/cs_overview/test-data/csAllMFIs.tsv Mon Feb 27 12:48:54 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
@@ -1,76 +0,0 @@
-FSC SSC CD4 CCR7 CD8 CCR3 Percentage Population SampleName
-361.11 119.12 521.83 181.74 48.05 76.45 10.22 1 Sample01
-374.37 125.63 525.73 35.68 72.0 197.41 8.49 2 Sample01
-407.04 153.46 426.27 60.27 578.92 268.62 0.13 3 Sample01
-363.32 241.46 99.96 145.89 102.81 318.15 0.42 4 Sample01
-337.01 155.21 56.65 72.22 73.39 112.31 6.66 5 Sample01
-368.59 148.89 69.11 71.71 606.03 237.4 13.3 6 Sample01
-403.38 176.77 93.68 191.88 620.84 263.67 2.96 7 Sample01
-394.0 176.73 319.53 183.2 615.93 287.33 0.08 8 Sample01
-345.6 331.2 292.6 562.5 293.0 413.3 0.05 9 Sample01
-352.11 115.59 519.67 30.16 54.33 72.31 9.86 10 Sample01
-421.38 241.16 115.05 151.82 215.63 147.29 3.27 12 Sample01
-456.33 283.0 451.33 333.83 524.33 268.17 0.03 13 Sample01
-363.33 188.33 360.33 551.11 77.56 198.67 0.04 14 Sample01
-354.13 118.63 301.28 81.22 69.19 117.1 1.42 15 Sample01
-419.05 392.93 120.34 408.48 122.57 168.11 0.5 16 Sample01
-461.88 422.08 421.0 718.08 357.2 480.84 0.12 17 Sample01
-388.56 132.3 528.7 189.23 62.06 206.63 7.59 18 Sample01
-972.67 1014.57 510.17 649.92 498.02 507.31 0.46 19 Sample01
-436.0 331.33 195.33 587.83 698.0 475.67 0.03 20 Sample01
-602.7 967.96 140.02 220.22 213.07 176.14 14.78 21 Sample01
-687.29 492.17 377.54 210.74 192.45 266.89 2.35 22 Sample01
-551.75 988.58 350.25 482.74 364.3 411.62 1.38 23 Sample01
-647.97 385.39 396.58 170.54 166.82 144.43 2.22 24 Sample01
-726.14 1016.99 182.62 264.76 248.2 217.07 12.0 25 Sample01
-969.6 1001.4 329.24 338.48 302.98 333.58 1.62 26 Sample01
-562.4 279.89 395.37 85.52 233.15 423.82 0.41 2 Sample02
-361.27 110.68 512.56 68.78 633.79 483.62 10.72 3 Sample02
-355.26 167.2 73.65 147.49 108.77 528.0 5.69 4 Sample02
-320.36 182.36 72.15 113.6 120.13 198.04 0.27 5 Sample02
-379.34 171.32 79.19 96.03 612.98 319.43 3.08 6 Sample02
-412.95 178.92 94.56 281.78 623.08 375.29 2.95 7 Sample02
-371.12 112.05 517.49 258.96 642.94 505.4 11.26 8 Sample02
-432.33 214.49 133.48 402.37 298.53 645.37 1.27 9 Sample02
-380.56 135.17 85.28 110.51 602.83 574.66 8.98 11 Sample02
-447.84 525.86 156.54 205.91 232.41 226.26 1.04 12 Sample02
-406.28 136.61 517.79 421.89 615.35 306.51 10.94 13 Sample02
-358.41 103.0 460.06 676.12 556.82 164.12 0.08 14 Sample02
-392.82 210.34 274.9 177.84 205.7 226.14 0.25 15 Sample02
-433.7 263.98 107.32 510.33 149.7 224.73 0.58 16 Sample02
-503.0 183.67 512.67 468.67 380.67 284.33 0.02 17 Sample02
-401.91 199.4 351.38 197.56 325.84 376.18 0.22 18 Sample02
-942.11 977.37 496.87 556.88 589.5 591.94 0.71 19 Sample02
-431.49 175.21 108.33 449.62 589.5 338.8 0.53 20 Sample02
-612.64 962.73 145.03 218.27 241.53 218.17 12.76 21 Sample02
-677.89 432.97 395.05 215.41 253.52 320.54 2.78 22 Sample02
-537.32 987.67 377.08 463.75 412.69 503.96 2.01 23 Sample02
-709.18 473.67 400.15 219.99 227.86 177.82 1.58 24 Sample02
-724.18 1017.01 183.88 263.44 272.12 249.6 19.98 25 Sample02
-956.13 990.81 316.67 335.77 337.53 324.79 1.88 26 Sample02
-363.95 112.51 518.71 193.17 50.64 67.35 8.88 1 Sample03
-366.04 113.59 521.83 39.17 65.94 165.47 5.34 2 Sample03
-395.7 119.3 384.9 85.9 585.6 230.1 0.05 3 Sample03
-369.39 205.67 97.01 236.06 84.86 292.39 0.34 4 Sample03
-318.6 144.34 48.13 81.89 64.55 103.94 4.61 5 Sample03
-356.89 131.76 69.32 144.68 612.42 244.05 1.94 6 Sample03
-373.64 149.87 73.69 364.35 620.22 274.16 5.76 7 Sample03
-438.0 176.67 517.33 423.0 277.33 437.33 0.02 8 Sample03
-456.47 368.94 339.69 764.56 534.31 616.89 0.18 9 Sample03
-358.86 110.17 520.31 33.06 61.37 62.34 7.46 10 Sample03
-395.52 201.76 124.0 438.24 675.14 501.81 0.1 11 Sample03
-416.88 238.6 120.19 236.76 187.66 133.17 3.0 12 Sample03
-435.72 195.36 389.95 550.08 631.15 289.23 0.19 13 Sample03
-399.59 136.41 525.46 567.47 69.53 112.63 4.7 14 Sample03
-361.32 113.15 344.55 109.52 71.39 102.73 1.61 15 Sample03
-404.65 196.83 95.23 518.72 130.58 201.29 3.17 16 Sample03
-451.64 196.71 522.26 588.96 117.02 273.98 1.52 17 Sample03
-383.16 121.62 525.61 214.22 63.94 172.91 5.26 18 Sample03
-948.66 979.64 477.18 676.02 492.0 476.04 0.48 19 Sample03
-393.34 154.15 80.74 547.09 620.52 265.13 7.53 20 Sample03
-618.71 977.02 140.44 231.46 216.74 155.19 16.55 21 Sample03
-634.28 434.83 361.97 254.26 193.6 244.19 1.54 22 Sample03
-550.91 992.18 358.58 469.96 366.77 399.73 1.77 23 Sample03
-692.2 478.05 385.86 213.85 182.9 123.52 2.62 24 Sample03
-732.99 1018.5 182.2 275.26 250.19 190.78 13.6 25 Sample03
-971.95 998.45 334.88 363.32 315.37 269.93 1.74 26 Sample03
b
diff -r 8c17aa8032c2 -r bca68066a957 cs_overview/test-data/csBoxplotData.json
--- a/cs_overview/test-data/csBoxplotData.json Mon Feb 27 12:48:54 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,1 +0,0 @@\n-{"lower": {"CCR3":{"1":-57.5,"2":56.0,"3":294.25,"4":288.5,"5":-76.5,"6":94.0,"7":116.0,"8":342.0,"9":434.875,"10":-57.5,"11":446.5,"12":-64.5,"13":125.5,"14":-74.0,"15":-86.0,"16":-88.375,"17":78.0,"18":58.5,"19":237.625,"20":96.0,"21":-21.0,"22":135.625,"23":251.5,"24":-39.5,"25":60.0,"26":114.0},"CCR7":{"1":37.5,"2":-112.5,"3":-183.75,"4":-114.75,"5":-196.5,"6":-160.625,"7":-20.0,"8":71.5,"9":64.5,"10":-94.5,"11":-126.875,"12":-23.0,"13":135.0,"14":351.5,"15":-202.25,"16":262.875,"17":397.0,"18":39.0,"19":192.625,"20":268.25,"21":94.5,"22":44.375,"23":373.0,"24":-4.75,"25":167.5,"26":200.0},"CD4":{"1":446.0,"2":441.0,"3":434.0,"4":-96.5,"5":-105.5,"6":-79.0,"7":-62.5,"8":449.5,"9":-77.0,"10":442.0,"11":-65.5,"12":-15.25,"13":415.0,"14":430.0,"15":191.0,"16":-57.5,"17":376.25,"18":450.5,"19":249.75,"20":-60.25,"21":25.5,"22":240.875,"23":271.5,"24":277.0,"25":77.5,"26":5.5},"CD8":{"1":-133.5,"2":-183.0,"3":550.5,"4":-141.25,"5":-144.5,"6":504.5,"7":515.0,"8":566.5,"9":-198.5,"10":-151.5,"11":510.0,"12":-57.75,"13":512.5,"14":-196.5,"15":-161.75,"16":-188.875,"17":-205.75,"18":-172.5,"19":117.375,"20":516.0,"21":111.0,"22":53.0,"23":281.0,"24":21.5,"25":161.0,"26":190.5},"FSC":{"1":271.5,"2":260.5,"3":265.0,"4":175.5,"5":207.0,"6":278.5,"7":295.0,"8":287.0,"9":187.875,"10":258.0,"11":286.5,"12":256.5,"13":263.5,"14":278.0,"15":232.25,"16":270.0,"17":261.75,"18":268.0,"19":708.0,"20":297.0,"21":486.5,"22":463.5,"23":326.0,"24":469.0,"25":548.0,"26":748.625},"SSC":{"1":42.0,"2":37.5,"3":42.0,"4":23.5,"5":49.0,"6":38.5,"7":43.5,"8":46.0,"9":21.75,"10":43.0,"11":36.5,"12":2.25,"13":15.5,"14":34.0,"15":1.5,"16":26.5,"17":-25.25,"18":41.0,"19":1023.0,"20":53.0,"21":798.0,"22":186.375,"23":1023.0,"24":178.75,"25":1023.0,"26":1023.0}}, "mfi": {"CCR3":{"1":72,"2":187,"3":483,"4":520,"5":109,"6":251,"7":304,"8":504,"9":641,"10":68,"11":565,"12":161,"13":306,"14":108,"15":110,"16":201,"17":289,"18":195,"19":541,"20":267,"21":173,"22":283,"23":448,"24":132,"25":232,"26":311},"CCR7":{"1":189,"2":37,"3":68,"4":141,"5":67,"6":90,"7":318,"8":257,"9":419,"10":32,"11":111,"12":213,"13":424,"14":566,"15":84,"16":509,"17":598,"18":198,"19":629,"20":534,"21":224,"22":204,"23":476,"24":204,"25":269,"26":343},"CD4":{"1":520,"2":523,"3":512,"4":84,"5":56,"6":75,"7":83,"8":517,"9":138,"10":521,"11":85,"12":119,"13":516,"14":526,"15":322,"16":104,"17":509,"18":524,"19":490,"20":82,"21":145,"22":389,"23":366,"24":392,"25":182,"26":325},"CD8":{"1":53,"2":67,"3":632,"4":114,"5":82,"6":608,"7":620,"8":641,"9":327,"10":59,"11":604,"12":183,"13":615,"14":76,"15":75,"16":138,"17":119,"18":60,"19":533,"20":621,"21":225,"22":215,"23":387,"24":187,"25":259,"26":318},"FSC":{"1":364,"2":370,"3":363,"4":360,"5":333,"6":372,"7":389,"8":371,"9":422,"10":357,"11":381,"12":410,"13":406,"14":401,"15":356,"16":413,"17":440,"18":384,"19":944,"20":393,"21":617,"22":667,"23":546,"24":681,"25":727,"26":960},"SSC":{"1":117,"2":121,"3":112,"4":175,"5":156,"6":154,"7":162,"8":113,"9":214,"10":114,"11":138,"12":276,"13":137,"14":139,"15":121,"16":239,"17":198,"18":128,"19":966,"20":154,"21":975,"22":437,"23":976,"24":440,"25":1013,"26":975}}, "outliers": {"CCR3":{"1":[],"2":[342,565,320,633,364,568,450,390,545,543,548,558,305,309,322,385,344,331,424,358,310,388,542,607,335,338,530,324,316,412,594,593,339,386,306,432,333,488,560,375,317,323,627,367,536,333,578,313,321,348,385,310,407,366,502,333,337,334,335,334,351,419,376,312,317,310,307,418,317,345,423,368,340,334,393,568,553,317,326,366,587,354,553,313,315,313,314,565,345,385,340,407,387,333,503,550,378,385,320,531],"3":[283,281,260,281,258,291,278,222,240,287,273,236,270,272,260,280,259,262,277,282,261,156,698,190,251,283,286,278,239,167,281,187,293,285,165,237,245,240,280,256,268,262,286,153,237,285,294,249,294,285,228,286,293,282,282,141,255,254,180,274,234,210,266,175,159,264,270,266,272,277,256,214,273,224,206,195,276,127,184,176,268,241,246,274,281,215,288,266,278,168,274,275,230,232,270,252,267,181,95'..b'":414.0,"13":406.0,"14":400.0,"15":357.0,"16":400.0,"17":433.0,"18":380.0,"19":1023.0,"20":391.0,"21":614.0,"22":666.0,"23":547.0,"24":679.0,"25":719.0,"26":1001.0},"SSC":{"1":113.0,"2":117.0,"3":109.0,"4":166.0,"5":147.0,"6":147.0,"7":158.0,"8":110.0,"9":211.0,"10":110.0,"11":133.0,"12":230.0,"13":130.0,"14":132.0,"15":109.0,"16":201.0,"17":183.0,"18":123.0,"19":1023.0,"20":152.0,"21":1022.0,"22":457.0,"23":1023.0,"24":452.0,"25":1023.0,"26":1023.0}}, "q3": {"CCR3":{"1":105.0,"2":211.0,"3":543.0,"4":571.0,"5":156.0,"6":294.0,"7":341.0,"8":547.0,"9":683.0,"10":100.0,"11":609.0,"12":208.0,"13":348.0,"14":161.0,"15":164.0,"16":271.0,"17":338.0,"18":221.0,"19":583.25,"20":316.0,"21":234.0,"22":306.25,"23":499.0,"24":193.0,"25":270.0,"26":359.0},"CCR7":{"1":220.0,"2":75.0,"3":122.5,"4":214.0,"5":131.0,"6":135.0,"7":380.0,"8":294.0,"9":524.5,"10":63.0,"11":165.0,"12":247.0,"13":495.0,"14":629.0,"15":166.5,"16":559.75,"17":642.0,"18":234.0,"19":713.25,"20":609.5,"21":262.0,"22":270.0,"23":488.0,"24":259.0,"25":295.0,"26":375.0},"CD4":{"1":541.0,"2":546.0,"3":534.0,"4":116.0,"5":87.0,"6":106.0,"7":120.0,"8":537.0,"9":199.25,"10":542.0,"11":122.0,"12":153.5,"13":545.0,"14":550.0,"15":356.0,"16":135.0,"17":560.0,"18":548.0,"19":554.75,"20":118.5,"21":173.0,"22":429.0,"23":389.0,"24":427.0,"25":210.0,"26":413.0},"CD8":{"1":89.0,"2":122.0,"3":658.0,"4":162.5,"5":108.0,"6":642.0,"7":655.0,"8":664.0,"9":460.25,"10":101.0,"11":630.0,"12":273.5,"13":645.0,"14":131.0,"15":124.5,"16":201.75,"17":198.0,"18":115.0,"19":633.0,"20":656.0,"21":256.0,"22":258.0,"23":406.0,"24":234.0,"25":286.0,"26":348.0},"FSC":{"1":384.0,"2":398.0,"3":385.0,"4":398.0,"5":357.0,"6":391.0,"7":410.0,"8":392.0,"9":476.0,"10":378.0,"11":404.0,"12":459.0,"13":441.0,"14":428.0,"15":388.5,"16":435.0,"17":488.0,"18":413.0,"19":1023.0,"20":417.0,"21":644.0,"22":721.0,"23":601.0,"24":734.0,"25":768.0,"26":1023.0},"SSC":{"1":132.0,"2":140.0,"3":127.0,"4":206.0,"5":174.0,"6":176.0,"7":191.0,"8":126.0,"9":270.5,"10":128.0,"11":159.0,"12":313.5,"13":163.0,"14":159.0,"15":144.0,"16":259.0,"17":263.5,"18":146.0,"19":1023.0,"20":178.0,"21":1023.0,"22":522.0,"23":1023.0,"24":510.0,"25":1023.0,"26":1023.0}}, "upper": {"CCR3":{"1":202.5,"2":304.0,"3":692.25,"4":740.5,"5":295.5,"6":414.0,"7":476.0,"8":670.0,"9":831.875,"10":194.5,"11":706.5,"12":371.5,"13":481.5,"14":302.0,"15":314.0,"16":486.625,"17":494.0,"18":318.5,"19":790.625,"20":448.0,"21":387.0,"22":408.625,"23":647.5,"24":332.5,"25":396.0,"26":506.0},"CCR7":{"1":329.5,"2":187.5,"3":306.25,"4":411.25,"5":327.5,"6":312.375,"7":620.0,"8":427.5,"9":800.5,"10":157.5,"11":340.125,"12":409.0,"13":711.0,"14":795.5,"15":387.75,"16":737.875,"17":789.0,"18":351.0,"19":1025.625,"20":814.25,"21":362.5,"22":405.375,"23":557.0,"24":417.25,"25":371.5,"26":480.0},"CD4":{"1":598.0,"2":609.0,"3":594.0,"4":243.5,"5":202.5,"6":217.0,"7":229.5,"8":589.5,"9":365.0,"10":602.0,"11":234.5,"12":254.75,"13":623.0,"14":622.0,"15":455.0,"16":250.5,"17":670.25,"18":606.5,"19":737.75,"20":225.75,"21":261.5,"22":541.875,"23":459.5,"24":517.0,"25":289.5,"26":657.5},"CD8":{"1":222.5,"2":305.0,"3":722.5,"4":344.75,"5":259.5,"6":724.5,"7":739.0,"8":722.5,"9":855.5,"10":252.5,"11":702.0,"12":472.25,"13":724.5,"14":327.5,"15":296.25,"16":436.125,"17":440.25,"18":287.5,"19":942.375,"20":740.0,"21":343.0,"22":381.0,"23":481.0,"24":361.5,"25":361.0,"26":442.5},"FSC":{"1":451.5,"2":480.5,"3":457.0,"4":531.5,"5":447.0,"6":458.5,"7":479.0,"8":455.0,"9":648.875,"10":450.0,"11":474.5,"12":580.5,"13":547.5,"14":518.0,"15":482.25,"16":534.0,"17":623.75,"18":500.0,"19":1212.0,"20":489.0,"21":738.5,"22":875.5,"23":766.0,"24":893.0,"25":900.0,"26":1187.625},"SSC":{"1":186.0,"2":201.5,"3":178.0,"4":315.5,"5":249.0,"6":258.5,"7":279.5,"8":174.0,"9":419.75,"10":179.0,"11":232.5,"12":500.25,"13":251.5,"14":234.0,"15":229.5,"16":398.5,"17":436.75,"18":209.0,"19":1023.0,"20":253.0,"21":1158.0,"22":723.375,"23":1023.0,"24":708.75,"25":1023.0,"26":1023.0}}}\n\\ No newline at end of file\n'
b
diff -r 8c17aa8032c2 -r bca68066a957 cs_overview/test-data/csOverview.tsv
--- a/cs_overview/test-data/csOverview.tsv Mon Feb 27 12:48:54 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
@@ -1,4 +0,0 @@
-FileID SampleName 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
-Rearranged FCSGateTrans on FCS2.003.20Kevents.fcs Sample01 10.225 8.49 0.13 0.42 6.665 13.3 2.965 0.075 0.05 9.855 0.0 3.27 0.03 0.045 1.415 0.495 0.125 7.59 0.465 0.03 14.78 2.35 1.385 2.22 12.0 1.625
-Rearranged FCSGateTrans on FCS2.001.20Kevents.fcs Sample02 0.0 0.41 10.715 5.69 0.275 3.075 2.95 11.26 1.27 0.0 8.985 1.04 10.94 0.085 0.25 0.585 0.015 0.225 0.71 0.535 12.755 2.785 2.01 1.575 19.975 1.885
-Rearranged FCSGateTrans on FCS2.002.20Kevents.fcs Sample03 8.88 5.345 0.05 0.345 4.61 1.945 5.765 0.015 0.18 7.465 0.105 3.005 0.195 4.695 1.61 3.17 1.515 5.265 0.485 7.53 16.545 1.545 1.77 2.62 13.605 1.74
b
diff -r 8c17aa8032c2 -r bca68066a957 cs_overview/test-data/input.flowstat1
--- a/cs_overview/test-data/input.flowstat1 Mon Feb 27 12:48:54 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
@@ -1,4 +0,0 @@
-FileID SampleName 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
-Rearranged FCSGateTrans on FCS2.003.20Kevents.fcs Sample01 10.225 8.49 0.13 0.42 6.665 13.3 2.965 0.075 0.05 9.855 0.0 3.27 0.03 0.045 1.415 0.495 0.125 7.59 0.465 0.03 14.78 2.35 1.385 2.22 12.0 1.625
-Rearranged FCSGateTrans on FCS2.001.20Kevents.fcs Sample02 0.0 0.41 10.715 5.69 0.275 3.075 2.95 11.26 1.27 0.0 8.985 1.04 10.94 0.085 0.25 0.585 0.015 0.225 0.71 0.535 12.755 2.785 2.01 1.575 19.975 1.885
-Rearranged FCSGateTrans on FCS2.002.20Kevents.fcs Sample03 8.88 5.345 0.05 0.345 4.61 1.945 5.765 0.015 0.18 7.465 0.105 3.005 0.195 4.695 1.61 3.17 1.515 5.265 0.485 7.53 16.545 1.545 1.77 2.62 13.605 1.74
b
diff -r 8c17aa8032c2 -r bca68066a957 cs_overview/test-data/input.flowstat2
--- a/cs_overview/test-data/input.flowstat2 Mon Feb 27 12:48:54 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
@@ -1,76 +0,0 @@
-FSC SSC CD4 CCR7 CD8 CCR3 Percentage Population SampleName
-361.11 119.12 521.83 181.74 48.05 76.45 10.22 1 Sample01
-374.37 125.63 525.73 35.68 72.0 197.41 8.49 2 Sample01
-407.04 153.46 426.27 60.27 578.92 268.62 0.13 3 Sample01
-363.32 241.46 99.96 145.89 102.81 318.15 0.42 4 Sample01
-337.01 155.21 56.65 72.22 73.39 112.31 6.66 5 Sample01
-368.59 148.89 69.11 71.71 606.03 237.4 13.3 6 Sample01
-403.38 176.77 93.68 191.88 620.84 263.67 2.96 7 Sample01
-394.0 176.73 319.53 183.2 615.93 287.33 0.08 8 Sample01
-345.6 331.2 292.6 562.5 293.0 413.3 0.05 9 Sample01
-352.11 115.59 519.67 30.16 54.33 72.31 9.86 10 Sample01
-421.38 241.16 115.05 151.82 215.63 147.29 3.27 12 Sample01
-456.33 283.0 451.33 333.83 524.33 268.17 0.03 13 Sample01
-363.33 188.33 360.33 551.11 77.56 198.67 0.04 14 Sample01
-354.13 118.63 301.28 81.22 69.19 117.1 1.42 15 Sample01
-419.05 392.93 120.34 408.48 122.57 168.11 0.5 16 Sample01
-461.88 422.08 421.0 718.08 357.2 480.84 0.12 17 Sample01
-388.56 132.3 528.7 189.23 62.06 206.63 7.59 18 Sample01
-972.67 1014.57 510.17 649.92 498.02 507.31 0.46 19 Sample01
-436.0 331.33 195.33 587.83 698.0 475.67 0.03 20 Sample01
-602.7 967.96 140.02 220.22 213.07 176.14 14.78 21 Sample01
-687.29 492.17 377.54 210.74 192.45 266.89 2.35 22 Sample01
-551.75 988.58 350.25 482.74 364.3 411.62 1.38 23 Sample01
-647.97 385.39 396.58 170.54 166.82 144.43 2.22 24 Sample01
-726.14 1016.99 182.62 264.76 248.2 217.07 12.0 25 Sample01
-969.6 1001.4 329.24 338.48 302.98 333.58 1.62 26 Sample01
-562.4 279.89 395.37 85.52 233.15 423.82 0.41 2 Sample02
-361.27 110.68 512.56 68.78 633.79 483.62 10.72 3 Sample02
-355.26 167.2 73.65 147.49 108.77 528.0 5.69 4 Sample02
-320.36 182.36 72.15 113.6 120.13 198.04 0.27 5 Sample02
-379.34 171.32 79.19 96.03 612.98 319.43 3.08 6 Sample02
-412.95 178.92 94.56 281.78 623.08 375.29 2.95 7 Sample02
-371.12 112.05 517.49 258.96 642.94 505.4 11.26 8 Sample02
-432.33 214.49 133.48 402.37 298.53 645.37 1.27 9 Sample02
-380.56 135.17 85.28 110.51 602.83 574.66 8.98 11 Sample02
-447.84 525.86 156.54 205.91 232.41 226.26 1.04 12 Sample02
-406.28 136.61 517.79 421.89 615.35 306.51 10.94 13 Sample02
-358.41 103.0 460.06 676.12 556.82 164.12 0.08 14 Sample02
-392.82 210.34 274.9 177.84 205.7 226.14 0.25 15 Sample02
-433.7 263.98 107.32 510.33 149.7 224.73 0.58 16 Sample02
-503.0 183.67 512.67 468.67 380.67 284.33 0.02 17 Sample02
-401.91 199.4 351.38 197.56 325.84 376.18 0.22 18 Sample02
-942.11 977.37 496.87 556.88 589.5 591.94 0.71 19 Sample02
-431.49 175.21 108.33 449.62 589.5 338.8 0.53 20 Sample02
-612.64 962.73 145.03 218.27 241.53 218.17 12.76 21 Sample02
-677.89 432.97 395.05 215.41 253.52 320.54 2.78 22 Sample02
-537.32 987.67 377.08 463.75 412.69 503.96 2.01 23 Sample02
-709.18 473.67 400.15 219.99 227.86 177.82 1.58 24 Sample02
-724.18 1017.01 183.88 263.44 272.12 249.6 19.98 25 Sample02
-956.13 990.81 316.67 335.77 337.53 324.79 1.88 26 Sample02
-363.95 112.51 518.71 193.17 50.64 67.35 8.88 1 Sample03
-366.04 113.59 521.83 39.17 65.94 165.47 5.34 2 Sample03
-395.7 119.3 384.9 85.9 585.6 230.1 0.05 3 Sample03
-369.39 205.67 97.01 236.06 84.86 292.39 0.34 4 Sample03
-318.6 144.34 48.13 81.89 64.55 103.94 4.61 5 Sample03
-356.89 131.76 69.32 144.68 612.42 244.05 1.94 6 Sample03
-373.64 149.87 73.69 364.35 620.22 274.16 5.76 7 Sample03
-438.0 176.67 517.33 423.0 277.33 437.33 0.02 8 Sample03
-456.47 368.94 339.69 764.56 534.31 616.89 0.18 9 Sample03
-358.86 110.17 520.31 33.06 61.37 62.34 7.46 10 Sample03
-395.52 201.76 124.0 438.24 675.14 501.81 0.1 11 Sample03
-416.88 238.6 120.19 236.76 187.66 133.17 3.0 12 Sample03
-435.72 195.36 389.95 550.08 631.15 289.23 0.19 13 Sample03
-399.59 136.41 525.46 567.47 69.53 112.63 4.7 14 Sample03
-361.32 113.15 344.55 109.52 71.39 102.73 1.61 15 Sample03
-404.65 196.83 95.23 518.72 130.58 201.29 3.17 16 Sample03
-451.64 196.71 522.26 588.96 117.02 273.98 1.52 17 Sample03
-383.16 121.62 525.61 214.22 63.94 172.91 5.26 18 Sample03
-948.66 979.64 477.18 676.02 492.0 476.04 0.48 19 Sample03
-393.34 154.15 80.74 547.09 620.52 265.13 7.53 20 Sample03
-618.71 977.02 140.44 231.46 216.74 155.19 16.55 21 Sample03
-634.28 434.83 361.97 254.26 193.6 244.19 1.54 22 Sample03
-550.91 992.18 358.58 469.96 366.77 399.73 1.77 23 Sample03
-692.2 478.05 385.86 213.85 182.9 123.52 2.62 24 Sample03
-732.99 1018.5 182.2 275.26 250.19 190.78 13.6 25 Sample03
-971.95 998.45 334.88 363.32 315.37 269.93 1.74 26 Sample03
b
diff -r 8c17aa8032c2 -r bca68066a957 cs_overview/test-data/input.mfi
--- a/cs_overview/test-data/input.mfi Mon Feb 27 12:48:54 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
@@ -1,27 +0,0 @@
-Population FSC SSC CD4 CCR7 CD8 CCR3
-1 364 117 520 189 53 72
-2 370 121 523 37 67 187
-3 363 112 512 68 632 483
-4 360 175 84 141 114 520
-5 333 156 56 67 82 109
-6 372 154 75 90 608 251
-7 389 162 83 318 620 304
-8 371 113 517 257 641 504
-9 422 214 138 419 327 641
-10 357 114 521 32 59 68
-11 381 138 85 111 604 565
-12 410 276 119 213 183 161
-13 406 137 516 424 615 306
-14 401 139 526 566 76 108
-15 356 121 322 84 75 110
-16 413 239 104 509 138 201
-17 440 198 509 598 119 289
-18 384 128 524 198 60 195
-19 944 966 490 629 533 541
-20 393 154 82 534 621 267
-21 617 975 145 224 225 173
-22 667 437 389 204 215 283
-23 546 976 366 476 387 448
-24 681 440 392 204 187 132
-25 727 1013 182 269 259 232
-26 960 975 325 343 318 311
b
diff -r 8c17aa8032c2 -r bca68066a957 cs_overview/test-data/input1.flowclr
--- a/cs_overview/test-data/input1.flowclr Mon Feb 27 12:48:54 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
b'@@ -1,20001 +0,0 @@\n-FSC\tSSC\tCD4\tCCR7\tCD8\tCCR3\tPopulation\n-449\t157\t551\t129\t169\t292\t18\n-894\t1023\t199\t277\t320\t227\t25\n-262\t73\t437\t69\t0\t146\t10\n-340\t115\t509\t268\t0\t74\t1\n-316\t76\t50\t0\t60\t129\t5\n-394\t144\t83\t138\t335\t194\t12\n-383\t139\t499\t0\t0\t224\t2\n-800\t1023\t239\t284\t288\t280\t25\n-388\t97\t534\t111\t83\t177\t2\n-481\t117\t566\t247\t157\t99\t1\n-652\t997\t118\t236\t250\t300\t25\n-333\t100\t526\t82\t21\t34\t10\n-636\t1023\t162\t290\t242\t261\t25\n-283\t137\t0\t32\t137\t151\t5\n-389\t105\t538\t36\t0\t130\t10\n-684\t1023\t111\t180\t205\t186\t21\n-688\t1023\t156\t255\t233\t77\t21\n-431\t83\t64\t114\t586\t144\t6\n-788\t1023\t167\t258\t158\t241\t25\n-687\t1023\t94\t234\t218\t133\t21\n-676\t1023\t149\t287\t215\t102\t21\n-869\t1023\t223\t285\t277\t388\t26\n-986\t1023\t267\t290\t261\t224\t26\n-603\t1018\t193\t272\t255\t135\t21\n-404\t168\t532\t113\t0\t0\t1\n-661\t501\t418\t184\t256\t248\t22\n-381\t169\t508\t0\t125\t204\t2\n-686\t860\t49\t190\t225\t97\t21\n-402\t202\t117\t90\t693\t316\t6\n-418\t89\t566\t19\t0\t306\t2\n-303\t119\t35\t155\t87\t108\t5\n-402\t184\t70\t111\t627\t309\t6\n-304\t107\t0\t118\t86\t257\t5\n-360\t124\t26\t10\t615\t209\t6\n-372\t118\t558\t125\t0\t120\t1\n-659\t1023\t341\t246\t228\t256\t25\n-720\t1023\t180\t178\t212\t229\t25\n-712\t1002\t228\t163\t282\t195\t25\n-321\t90\t472\t35\t151\t178\t2\n-376\t154\t54\t61\t587\t264\t6\n-744\t1023\t229\t271\t226\t216\t25\n-329\t149\t82\t173\t629\t266\t6\n-447\t153\t524\t161\t138\t197\t18\n-364\t294\t248\t335\t0\t222\t16\n-645\t1023\t177\t179\t282\t254\t25\n-1023\t1023\t456\t557\t482\t445\t19\n-440\t297\t403\t122\t82\t135\t15\n-432\t115\t572\t165\t78\t225\t18\n-366\t112\t299\t0\t23\t98\t15\n-673\t1023\t230\t330\t294\t261\t25\n-707\t1023\t222\t246\t206\t242\t25\n-628\t1023\t161\t288\t241\t234\t25\n-601\t1023\t126\t296\t278\t191\t21\n-347\t157\t531\t0\t42\t49\t10\n-262\t65\t210\t36\t0\t176\t15\n-349\t101\t481\t139\t96\t211\t18\n-596\t1023\t193\t252\t233\t288\t21\n-375\t112\t546\t184\t59\t88\t1\n-436\t141\t123\t229\t611\t218\t7\n-389\t131\t576\t0\t0\t144\t2\n-353\t97\t477\t204\t0\t221\t18\n-400\t149\t91\t143\t639\t310\t7\n-742\t1023\t225\t277\t114\t241\t25\n-747\t1023\t132\t254\t227\t176\t25\n-350\t122\t489\t194\t0\t99\t1\n-407\t131\t535\t209\t0\t57\t1\n-266\t92\t0\t0\t5\t128\t5\n-355\t142\t540\t103\t115\t84\t10\n-387\t123\t529\t116\t115\t0\t1\n-358\t86\t523\t18\t32\t101\t10\n-388\t132\t105\t99\t653\t329\t6\n-305\t165\t509\t126\t0\t63\t1\n-454\t168\t113\t124\t629\t251\t6\n-400\t121\t176\t0\t581\t240\t6\n-405\t230\t115\t233\t632\t289\t7\n-596\t942\t74\t236\t280\t279\t21\n-380\t211\t72\t236\t670\t255\t7\n-392\t127\t546\t204\t47\t105\t1\n-519\t409\t169\t117\t136\t417\t4\n-767\t1023\t196\t278\t266\t192\t25\n-367\t121\t528\t95\t0\t117\t10\n-378\t175\t507\t201\t0\t227\t18\n-664\t668\t359\t287\t268\t166\t22\n-435\t161\t543\t185\t67\t197\t18\n-358\t233\t0\t136\t148\t331\t4\n-633\t977\t95\t250\t175\t187\t21\n-373\t128\t564\t0\t35\t119\t10\n-386\t123\t547\t0\t65\t181\t2\n-319\t110\t497\t77\t101\t0\t10\n-401\t86\t503\t126\t184\t138\t18\n-364\t136\t0\t161\t15\t0\t5\n-741\t1023\t188\t221\t270\t230\t25\n-677\t510\t416\t268\t195\t188\t22\n-311\t212\t17\t22\t91\t146\t5\n-642\t1023\t152\t268\t221\t196\t21\n-739\t395\t291\t219\t174\t75\t24\n-760\t1023\t175\t247\t284\t198\t25\n-410\t168\t528\t125\t0\t211\t18\n-338\t158\t71\t69\t1\t155\t5\n-401\t137\t34\t223\t641\t291\t7\n-780\t853\t198\t256\t230\t270\t25\n-389\t185\t160\t28\t664\t319\t6\n-369\t130\t567\t21\t0\t38\t10\n-359\t119\t60\t55\t660\t217\t6\n-349\t97\t522\t0\t21\t0\t10\n-553\t762\t136\t193\t137\t198\t21\n-476\t91\t554\t0\t0\t102\t10\n-372\t77\t506\t0\t89\t0\t10\n-628\t1023\t202\t285\t305\t61\t21\n-493\t351\t403\t242\t150\t196\t24\n-393\t181\t128\t0\t148\t83\t5\n-400\t143\t554\t109\t89\t115\t1\n-387\t91\t544\t199\t141\t45\t1\n-564\t924\t104\t220\t170\t249\t21\n-673\t237\t124\t79\t648\t268\t7\n-363\t203\t84\t213\t79\t224\t12\n-353\t83\t517\t168\t70\t133\t1\n-378\t157\t577\t0\t68\t205\t2\n-338\t139\t25\t41\t38\t92\t5\n-330\t70\t0\t55\t597\t165\t6\n-558\t280\t421\t143\t113\t226\t24\n-447\t288\t156\t211\t5\t33\t12\n-341\t112\t457\t22\t0\t116\t10\n-757\t1023\t205\t268\t291\t189\t25\n-375\t112\t541\t20\t14\t0\t10\n-657\t1023\t141\t206\t196\t125\t21\n-356\t114\t550\t0\t0\t101\t10\n-700\t1023\t196\t256\t272\t64\t25\n-629\t1023\t189\t174\t253\t149\t21\n-360\t141\t554\t0\t32\t52\t10\n-362\t108\t543\t219\t158\t128\t1\n-337\t112\t511\t107\t65\t178\t2\n-398\t277\t67\t116\t277\t95\t12\n-767\t1023\t157\t205\t212\t95\t25\n-609\t1023\t348\t474\t390\t429\t23\n-369\t96\t532\t255\t0\t212\t18\n-386\t174\t46\t65\t619\t231\t6\n-336\t115\t492\t87\t0\t105\t10\n-469\t164\t580\t94\t50\t12\t10\n-396\t108\t535\t84\t4\t82\t10\n-452\t159\t534\t176\t169\t176\t18\n-410\t129\t537\t107\t0\t67\t1\n-304\t141\t31\t0\t112\t176\t5\n-863\t1023\t242\t349\t309\t330\t26\n-391\t226\t83\t224\t576\t232\t7\n-701\t1023\t77\t158\t258\t111\t21\n-674\t1023\t151\t247\t256\t238\t25\n-309\t70\t73\t137\t287\t110\t5\n-352\t154\t0\t23\t602\t271\t6\n-352\t152\t130\t0\t29\t161\t5\n-542\t1011\t70\t2'..b'653\t800\t119\t209\t182\t110\t21\n-358\t182\t80\t44\t667\t310\t6\n-512\t1023\t125\t168\t262\t201\t21\n-466\t240\t133\t157\t196\t5\t12\n-302\t139\t471\t0\t7\t19\t10\n-361\t114\t533\t0\t0\t275\t2\n-1023\t1023\t263\t311\t246\t309\t26\n-334\t118\t371\t156\t0\t44\t15\n-820\t1023\t294\t313\t318\t305\t26\n-407\t150\t547\t133\t138\t210\t18\n-271\t65\t486\t0\t48\t0\t10\n-364\t121\t541\t49\t94\t229\t2\n-654\t1023\t151\t256\t251\t230\t25\n-366\t143\t555\t195\t0\t15\t1\n-512\t571\t107\t220\t20\t192\t16\n-556\t265\t448\t81\t172\t103\t24\n-424\t228\t43\t132\t616\t310\t7\n-753\t1023\t224\t268\t192\t116\t25\n-360\t96\t533\t15\t109\t138\t2\n-426\t207\t276\t99\t578\t328\t8\n-432\t207\t142\t0\t408\t0\t12\n-640\t580\t445\t287\t171\t207\t22\n-658\t1023\t201\t282\t277\t300\t25\n-666\t1023\t92\t257\t172\t234\t21\n-354\t216\t87\t176\t336\t106\t12\n-356\t176\t42\t0\t170\t134\t5\n-689\t1023\t186\t217\t283\t198\t25\n-346\t115\t516\t155\t0\t132\t1\n-387\t128\t579\t203\t51\t141\t18\n-665\t1023\t122\t229\t165\t78\t21\n-400\t168\t0\t160\t600\t249\t6\n-357\t95\t517\t0\t87\t186\t2\n-373\t158\t534\t228\t53\t103\t1\n-372\t103\t522\t238\t7\t175\t18\n-298\t86\t428\t55\t0\t174\t2\n-348\t131\t546\t6\t0\t55\t10\n-368\t135\t549\t144\t0\t12\t1\n-589\t1023\t333\t446\t322\t395\t23\n-337\t117\t81\t149\t643\t348\t6\n-372\t258\t139\t113\t174\t374\t4\n-827\t1023\t128\t271\t263\t132\t25\n-693\t1023\t179\t292\t201\t287\t25\n-732\t946\t187\t253\t264\t121\t25\n-370\t268\t125\t182\t104\t97\t12\n-554\t761\t111\t293\t224\t233\t21\n-411\t188\t522\t185\t124\t208\t18\n-356\t165\t123\t85\t672\t282\t6\n-353\t92\t508\t124\t141\t66\t1\n-684\t902\t144\t248\t244\t173\t21\n-402\t185\t135\t497\t774\t472\t20\n-380\t144\t527\t156\t62\t31\t1\n-765\t1023\t202\t261\t254\t258\t25\n-1023\t1023\t500\t508\t445\t550\t19\n-1023\t1023\t538\t456\t358\t450\t19\n-652\t921\t131\t204\t107\t223\t21\n-480\t181\t541\t223\t133\t294\t18\n-651\t1023\t174\t340\t182\t19\t21\n-619\t1023\t133\t263\t239\t231\t21\n-374\t93\t520\t0\t0\t138\t10\n-547\t760\t70\t0\t162\t224\t21\n-427\t278\t113\t238\t385\t170\t12\n-753\t1023\t156\t296\t263\t300\t25\n-640\t942\t122\t265\t237\t242\t21\n-348\t94\t507\t300\t109\t22\t1\n-599\t1023\t135\t321\t261\t212\t21\n-591\t948\t188\t176\t247\t130\t21\n-386\t92\t515\t201\t32\t79\t1\n-423\t156\t562\t8\t120\t144\t2\n-581\t1023\t146\t214\t153\t145\t21\n-779\t1023\t208\t308\t295\t319\t25\n-1022\t174\t372\t274\t253\t397\t22\n-395\t112\t554\t213\t64\t109\t1\n-398\t283\t104\t418\t52\t211\t16\n-459\t215\t559\t287\t198\t109\t18\n-366\t160\t536\t218\t156\t122\t1\n-380\t197\t123\t74\t638\t287\t6\n-624\t1023\t133\t241\t194\t265\t21\n-400\t163\t518\t139\t69\t225\t18\n-380\t131\t564\t126\t0\t36\t1\n-283\t146\t65\t180\t134\t0\t5\n-379\t112\t173\t0\t646\t223\t6\n-752\t1023\t129\t258\t239\t245\t25\n-409\t206\t179\t149\t641\t290\t7\n-635\t522\t409\t225\t206\t227\t22\n-680\t1023\t234\t196\t249\t165\t25\n-702\t458\t425\t271\t150\t46\t24\n-734\t511\t416\t176\t152\t200\t22\n-409\t171\t20\t29\t574\t212\t6\n-413\t251\t83\t12\t21\t64\t5\n-737\t1023\t180\t287\t284\t283\t25\n-431\t175\t361\t239\t132\t0\t1\n-353\t114\t50\t0\t621\t271\t6\n-408\t141\t559\t0\t132\t196\t2\n-531\t798\t102\t253\t209\t75\t21\n-619\t1023\t205\t294\t235\t212\t25\n-667\t1023\t187\t234\t288\t219\t25\n-392\t247\t261\t675\t198\t451\t9\n-311\t102\t514\t99\t110\t146\t2\n-460\t125\t559\t0\t0\t73\t10\n-400\t99\t564\t212\t139\t96\t1\n-633\t1023\t168\t232\t214\t195\t21\n-404\t166\t556\t177\t58\t46\t1\n-678\t1023\t210\t305\t274\t229\t25\n-364\t174\t98\t36\t615\t267\t6\n-372\t118\t543\t109\t3\t52\t1\n-672\t1023\t188\t292\t133\t249\t25\n-643\t1023\t216\t273\t296\t169\t25\n-445\t134\t552\t0\t143\t94\t10\n-400\t151\t556\t179\t191\t181\t18\n-701\t1023\t226\t239\t247\t291\t25\n-365\t157\t122\t0\t667\t233\t6\n-385\t88\t542\t89\t180\t60\t10\n-358\t87\t482\t10\t0\t55\t10\n-710\t487\t449\t284\t139\t96\t24\n-371\t134\t510\t19\t14\t351\t2\n-264\t69\t463\t0\t0\t80\t10\n-428\t103\t512\t263\t0\t70\t1\n-614\t490\t462\t229\t120\t325\t22\n-466\t219\t513\t117\t0\t174\t18\n-674\t522\t400\t208\t194\t194\t22\n-324\t110\t506\t66\t32\t128\t10\n-394\t115\t28\t0\t557\t193\t6\n-411\t175\t63\t139\t618\t323\t7\n-611\t303\t345\t92\t88\t100\t24\n-450\t239\t160\t99\t195\t210\t12\n-356\t129\t33\t90\t602\t94\t6\n-605\t1006\t213\t204\t220\t220\t21\n-773\t1023\t237\t275\t210\t167\t25\n-429\t142\t570\t272\t0\t141\t18\n-263\t33\t417\t0\t0\t194\t2\n-347\t148\t26\t0\t630\t300\t6\n-364\t121\t528\t182\t70\t194\t18\n-339\t87\t483\t0\t43\t74\t10\n-692\t1009\t147\t285\t115\t156\t21\n-596\t988\t133\t305\t113\t273\t21\n-847\t1023\t244\t216\t316\t101\t25\n-386\t135\t531\t166\t184\t117\t1\n-621\t970\t37\t127\t238\t274\t21\n-298\t99\t482\t88\t0\t130\t10\n-658\t1023\t117\t165\t208\t188\t21\n-326\t172\t76\t12\t149\t77\t5\n-360\t84\t532\t57\t138\t102\t10\n-886\t1023\t229\t361\t290\t234\t26\n-634\t972\t248\t277\t271\t215\t25\n-332\t164\t0\t73\t246\t210\t5\n-447\t121\t548\t0\t0\t393\t2\n-391\t119\t74\t0\t628\t238\t6\n-340\t100\t528\t245\t0\t8\t1\n-385\t99\t179\t115\t513\t163\t6\n-400\t157\t126\t99\t638\t313\t6\n-431\t97\t527\t156\t122\t197\t18\n'
b
diff -r 8c17aa8032c2 -r bca68066a957 cs_overview/test-data/input2.flowclr
--- a/cs_overview/test-data/input2.flowclr Mon Feb 27 12:48:54 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
b'@@ -1,20001 +0,0 @@\n-FSC\tSSC\tCD4\tCCR7\tCD8\tCCR3\tPopulation\n-289\t56\t438\t0\t626\t480\t3\n-352\t153\t30\t147\t483\t386\t6\n-383\t190\t156\t228\t734\t408\t7\n-261\t62\t432\t121\t598\t555\t3\n-451\t120\t537\t338\t568\t201\t13\n-373\t104\t3\t110\t621\t584\t11\n-418\t105\t561\t0\t610\t562\t3\n-358\t185\t0\t292\t641\t327\t7\n-733\t970\t139\t227\t293\t259\t25\n-765\t1023\t71\t239\t233\t253\t25\n-762\t957\t143\t158\t271\t255\t25\n-406\t191\t513\t122\t646\t264\t3\n-695\t1023\t168\t251\t234\t283\t25\n-336\t178\t0\t146\t128\t537\t4\n-668\t1023\t167\t306\t302\t253\t25\n-330\t135\t493\t72\t734\t496\t3\n-618\t1015\t201\t266\t284\t141\t21\n-662\t1023\t204\t241\t273\t149\t25\n-383\t109\t49\t50\t575\t451\t11\n-427\t206\t169\t258\t725\t402\t7\n-369\t152\t216\t569\t738\t684\t20\n-420\t209\t26\t368\t651\t303\t7\n-554\t218\t601\t336\t629\t300\t13\n-425\t229\t89\t416\t616\t373\t20\n-493\t355\t516\t252\t625\t568\t8\n-674\t1023\t211\t243\t259\t310\t25\n-286\t88\t0\t63\t556\t491\t11\n-318\t83\t477\t469\t627\t546\t8\n-297\t65\t489\t324\t618\t518\t8\n-358\t101\t496\t0\t646\t543\t3\n-429\t168\t515\t462\t675\t321\t13\n-364\t105\t504\t298\t602\t460\t8\n-319\t469\t415\t202\t571\t405\t8\n-532\t1023\t390\t528\t406\t507\t23\n-561\t287\t396\t72\t381\t279\t2\n-422\t150\t522\t351\t626\t353\t13\n-448\t149\t529\t288\t612\t270\t13\n-361\t143\t0\t132\t656\t362\t6\n-377\t96\t504\t163\t603\t524\t8\n-837\t1023\t211\t231\t316\t280\t25\n-702\t907\t176\t206\t271\t236\t21\n-367\t130\t570\t0\t661\t568\t3\n-302\t95\t508\t205\t643\t494\t8\n-403\t216\t159\t361\t158\t554\t9\n-427\t215\t188\t0\t711\t381\t6\n-743\t1023\t217\t316\t306\t278\t25\n-746\t339\t238\t433\t692\t433\t20\n-409\t104\t545\t278\t631\t480\t8\n-345\t67\t499\t581\t682\t524\t13\n-292\t171\t69\t115\t70\t463\t4\n-314\t152\t84\t0\t0\t514\t4\n-824\t1023\t220\t273\t315\t179\t25\n-554\t1023\t143\t255\t219\t283\t21\n-700\t998\t193\t261\t294\t148\t25\n-732\t1023\t204\t314\t322\t279\t25\n-360\t84\t467\t425\t577\t278\t13\n-425\t136\t558\t193\t622\t586\t8\n-301\t135\t49\t66\t574\t499\t11\n-356\t146\t511\t110\t635\t287\t3\n-390\t119\t528\t386\t580\t251\t13\n-654\t931\t169\t259\t334\t220\t21\n-385\t255\t102\t211\t671\t449\t7\n-589\t1023\t187\t203\t270\t189\t21\n-678\t1023\t0\t251\t177\t250\t21\n-410\t123\t528\t305\t710\t429\t8\n-362\t90\t514\t292\t642\t531\t8\n-543\t934\t127\t153\t283\t199\t21\n-739\t587\t416\t244\t300\t158\t24\n-406\t98\t497\t428\t621\t364\t13\n-895\t1023\t201\t307\t281\t279\t26\n-330\t123\t7\t230\t577\t247\t6\n-384\t158\t83\t62\t614\t300\t6\n-685\t1023\t197\t257\t209\t278\t25\n-395\t163\t531\t0\t618\t434\t3\n-350\t128\t483\t352\t642\t514\t8\n-339\t119\t124\t127\t546\t556\t11\n-357\t107\t516\t66\t679\t560\t3\n-1023\t1023\t420\t305\t336\t355\t26\n-620\t894\t88\t189\t210\t272\t21\n-618\t970\t394\t238\t179\t201\t21\n-678\t954\t143\t286\t280\t114\t21\n-544\t766\t122\t184\t279\t236\t21\n-416\t138\t120\t358\t578\t228\t7\n-425\t100\t167\t229\t582\t600\t11\n-333\t95\t516\t229\t591\t443\t8\n-396\t147\t554\t263\t608\t280\t13\n-331\t140\t27\t51\t39\t552\t4\n-689\t1023\t204\t267\t316\t276\t25\n-564\t810\t151\t89\t250\t253\t21\n-282\t70\t494\t158\t497\t546\t3\n-378\t127\t550\t189\t629\t555\t8\n-396\t182\t181\t323\t541\t509\t7\n-627\t1011\t239\t262\t314\t225\t25\n-319\t139\t45\t78\t131\t480\t4\n-324\t123\t17\t73\t637\t603\t11\n-398\t95\t555\t173\t643\t518\t8\n-445\t1023\t426\t492\t402\t540\t23\n-671\t1023\t113\t249\t281\t283\t25\n-384\t223\t0\t200\t621\t273\t6\n-780\t1023\t237\t227\t287\t64\t25\n-408\t141\t72\t272\t645\t621\t11\n-672\t1023\t164\t214\t258\t273\t25\n-626\t932\t66\t256\t207\t301\t21\n-398\t111\t118\t165\t589\t531\t11\n-687\t927\t137\t266\t263\t141\t21\n-342\t139\t82\t122\t305\t595\t4\n-736\t393\t454\t252\t235\t324\t22\n-311\t102\t491\t118\t632\t474\t3\n-318\t110\t503\t46\t643\t523\t3\n-623\t1023\t159\t266\t253\t197\t21\n-416\t106\t547\t347\t668\t489\t8\n-350\t91\t93\t199\t590\t577\t11\n-403\t158\t186\t222\t604\t540\t11\n-362\t202\t128\t187\t597\t241\t6\n-628\t886\t205\t244\t172\t201\t21\n-656\t1023\t231\t241\t251\t104\t21\n-731\t981\t141\t207\t273\t165\t25\n-340\t224\t49\t449\t548\t782\t9\n-699\t1023\t259\t233\t266\t220\t25\n-392\t148\t43\t35\t595\t575\t11\n-942\t1023\t199\t308\t335\t193\t26\n-312\t164\t35\t103\t0\t461\t4\n-822\t1023\t202\t311\t252\t308\t25\n-683\t457\t339\t241\t182\t180\t24\n-683\t1023\t180\t263\t277\t261\t25\n-397\t174\t25\t20\t654\t616\t11\n-324\t77\t487\t0\t623\t518\t3\n-371\t146\t511\t36\t648\t414\t3\n-399\t162\t144\t64\t622\t589\t11\n-682\t1023\t157\t221\t257\t233\t25\n-590\t922\t199\t196\t271\t146\t21\n-393\t105\t506\t253\t497\t251\t13\n-633\t1023\t41\t145\t256\t162\t21\n-550\t232\t350\t249\t197\t556\t18\n-355\t99\t523\t31\t646\t507\t3\n-434\t202\t88\t311\t725\t360\t7\n-696\t1023\t222\t263\t293\t283\t25\n-725\t345\t375\t211\t267\t260\t22\n-678\t1023\t163\t273\t259\t286\t25\n-559\t831\t132\t272\t323\t237\t21\n-298\t110\t506\t382\t669\t443\t8\n-334\t117\t542\t4\t628\t522\t3\n-681\t1023\t206\t236\t252\t223\t25\n-638\t1023\t167\t225\t290\t234\t21\n-297\t101\t0\t33\t579\t305\t6\n-359\t1'..b'2\t232\t24\n-363\t83\t464\t526\t458\t398\t13\n-404\t143\t538\t282\t581\t229\t13\n-535\t1023\t133\t259\t238\t118\t21\n-454\t1023\t240\t324\t338\t257\t21\n-430\t212\t534\t498\t646\t266\t13\n-290\t78\t445\t508\t645\t476\t13\n-431\t165\t549\t489\t659\t263\t13\n-350\t110\t536\t136\t638\t609\t3\n-434\t169\t89\t212\t630\t664\t11\n-681\t282\t338\t196\t221\t147\t24\n-466\t779\t167\t101\t125\t188\t21\n-330\t176\t81\t67\t47\t499\t4\n-409\t138\t550\t347\t649\t324\t13\n-595\t962\t186\t253\t220\t172\t21\n-704\t986\t218\t244\t283\t207\t25\n-382\t119\t539\t354\t615\t558\t8\n-406\t181\t541\t566\t661\t196\t13\n-654\t1023\t171\t304\t320\t271\t25\n-367\t174\t75\t300\t598\t294\t7\n-383\t119\t536\t205\t660\t582\t8\n-329\t92\t510\t240\t652\t574\t8\n-473\t217\t161\t90\t0\t601\t4\n-556\t278\t479\t118\t264\t627\t2\n-655\t1023\t211\t250\t296\t291\t25\n-361\t120\t96\t24\t600\t557\t11\n-468\t1023\t366\t419\t409\t500\t23\n-303\t89\t91\t90\t602\t563\t11\n-315\t169\t39\t0\t0\t476\t4\n-315\t99\t521\t140\t650\t499\t3\n-419\t126\t81\t186\t624\t677\t11\n-748\t1023\t177\t287\t236\t140\t25\n-342\t100\t49\t52\t569\t507\t11\n-730\t1023\t217\t327\t278\t308\t25\n-389\t197\t76\t26\t626\t337\t6\n-593\t900\t215\t209\t285\t248\t21\n-685\t1023\t137\t278\t318\t109\t25\n-454\t149\t550\t469\t585\t294\t13\n-380\t235\t117\t220\t651\t327\t7\n-358\t53\t476\t302\t674\t485\t8\n-603\t1023\t404\t506\t414\t494\t23\n-315\t56\t511\t0\t629\t522\t3\n-719\t1023\t166\t268\t277\t308\t25\n-405\t140\t66\t184\t617\t286\t6\n-645\t1023\t119\t169\t236\t256\t21\n-626\t1023\t136\t283\t180\t248\t21\n-836\t1023\t180\t305\t203\t193\t25\n-656\t1023\t249\t310\t291\t353\t25\n-726\t372\t175\t299\t674\t367\t7\n-684\t1023\t147\t276\t200\t282\t25\n-638\t927\t130\t216\t243\t256\t21\n-354\t133\t523\t120\t694\t565\t3\n-374\t125\t527\t241\t650\t497\t8\n-718\t1023\t189\t235\t278\t259\t25\n-735\t1023\t188\t199\t287\t253\t25\n-381\t156\t87\t57\t646\t606\t11\n-406\t151\t547\t332\t645\t536\t8\n-402\t241\t118\t203\t139\t593\t4\n-405\t106\t539\t202\t624\t504\t8\n-419\t118\t527\t555\t685\t349\t13\n-618\t548\t436\t238\t196\t289\t22\n-281\t107\t19\t211\t54\t460\t4\n-425\t130\t540\t219\t612\t495\t8\n-387\t153\t106\t35\t563\t649\t11\n-398\t87\t505\t241\t611\t528\t8\n-720\t1023\t194\t262\t184\t298\t25\n-699\t880\t166\t238\t248\t235\t21\n-409\t149\t32\t216\t612\t638\t11\n-395\t145\t84\t344\t632\t361\t7\n-394\t109\t473\t219\t659\t355\t8\n-595\t1023\t210\t133\t164\t104\t21\n-387\t139\t77\t0\t632\t583\t11\n-393\t163\t513\t285\t574\t308\t13\n-382\t108\t540\t89\t643\t555\t3\n-565\t932\t176\t209\t268\t76\t21\n-349\t79\t492\t0\t618\t410\t3\n-653\t1023\t187\t202\t250\t282\t25\n-364\t147\t497\t278\t490\t558\t8\n-563\t219\t498\t343\t638\t582\t8\n-787\t1023\t259\t195\t292\t350\t25\n-566\t634\t173\t253\t273\t248\t12\n-403\t107\t529\t457\t623\t371\t13\n-784\t1023\t198\t300\t313\t295\t25\n-983\t1023\t245\t338\t372\t318\t26\n-348\t104\t503\t49\t483\t454\t3\n-448\t222\t130\t278\t732\t443\t7\n-1023\t1023\t519\t526\t592\t406\t19\n-354\t93\t535\t217\t703\t509\t8\n-464\t210\t557\t538\t615\t268\t13\n-395\t103\t108\t87\t583\t593\t11\n-402\t193\t86\t364\t70\t498\t4\n-366\t106\t184\t4\t631\t601\t11\n-360\t110\t500\t86\t513\t554\t3\n-334\t64\t501\t0\t632\t473\t3\n-411\t190\t15\t299\t623\t412\t7\n-737\t986\t151\t234\t159\t210\t25\n-330\t82\t505\t440\t536\t238\t13\n-416\t161\t549\t436\t648\t303\t13\n-401\t187\t534\t295\t579\t192\t13\n-871\t1023\t538\t465\t679\t266\t19\n-324\t103\t475\t559\t584\t511\t13\n-331\t148\t74\t95\t0\t530\t4\n-665\t1023\t198\t178\t276\t283\t25\n-401\t143\t60\t99\t539\t562\t11\n-390\t133\t497\t616\t590\t240\t13\n-708\t975\t175\t270\t257\t96\t25\n-374\t100\t501\t47\t607\t504\t3\n-357\t91\t470\t128\t618\t604\t3\n-484\t527\t183\t214\t256\t285\t12\n-686\t1023\t153\t263\t335\t176\t25\n-409\t146\t542\t0\t669\t444\t3\n-370\t172\t107\t81\t578\t319\t6\n-611\t1023\t200\t306\t266\t298\t25\n-653\t1023\t123\t236\t265\t241\t21\n-333\t87\t480\t509\t681\t462\t13\n-614\t816\t125\t165\t184\t117\t21\n-333\t96\t503\t460\t584\t221\t13\n-362\t183\t113\t270\t604\t227\t7\n-776\t564\t356\t271\t270\t223\t24\n-637\t1023\t185\t299\t259\t296\t25\n-795\t1023\t243\t266\t311\t247\t25\n-415\t107\t481\t403\t545\t288\t13\n-721\t950\t157\t204\t276\t259\t25\n-464\t310\t113\t193\t615\t265\t6\n-668\t400\t415\t202\t230\t229\t22\n-407\t109\t554\t22\t691\t466\t3\n-704\t1023\t297\t277\t294\t121\t25\n-603\t1020\t209\t222\t290\t220\t21\n-577\t1017\t174\t235\t224\t145\t21\n-822\t1023\t155\t171\t274\t185\t25\n-332\t97\t503\t229\t665\t522\t8\n-693\t1023\t166\t259\t307\t211\t25\n-394\t111\t545\t290\t710\t510\t8\n-457\t226\t0\t106\t131\t573\t4\n-554\t1023\t137\t0\t262\t145\t21\n-330\t116\t507\t1\t647\t558\t3\n-619\t983\t105\t151\t199\t257\t21\n-442\t129\t531\t413\t591\t214\t13\n-384\t160\t541\t267\t661\t527\t8\n-687\t1023\t197\t250\t221\t195\t25\n-438\t100\t97\t169\t636\t461\t11\n-383\t168\t105\t183\t620\t581\t11\n-312\t71\t482\t164\t639\t427\t3\n-541\t1023\t166\t207\t266\t103\t21\n-778\t893\t114\t242\t232\t248\t25\n-341\t185\t10\t228\t117\t561\t4\n-694\t370\t391\t254\t311\t330\t22\n'
b
diff -r 8c17aa8032c2 -r bca68066a957 cs_overview/test-data/input3.flowclr
--- a/cs_overview/test-data/input3.flowclr Mon Feb 27 12:48:54 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
b'@@ -1,20001 +0,0 @@\n-FSC\tSSC\tCD4\tCCR7\tCD8\tCCR3\tPopulation\n-363\t76\t550\t200\t0\t127\t1\n-372\t126\t519\t44\t51\t148\t2\n-1023\t1023\t289\t401\t362\t254\t26\n-770\t1023\t175\t361\t225\t237\t25\n-384\t111\t522\t121\t0\t138\t1\n-602\t578\t385\t286\t222\t131\t24\n-788\t1023\t216\t310\t270\t294\t25\n-420\t211\t552\t479\t0\t62\t14\n-668\t1019\t73\t193\t227\t132\t21\n-417\t134\t542\t597\t22\t107\t14\n-755\t1023\t232\t305\t294\t204\t25\n-374\t128\t536\t493\t0\t173\t14\n-332\t71\t495\t0\t60\t34\t10\n-561\t874\t136\t254\t245\t241\t21\n-423\t146\t542\t284\t98\t81\t1\n-261\t74\t477\t0\t5\t72\t10\n-355\t120\t58\t348\t649\t276\t7\n-595\t857\t169\t193\t246\t100\t21\n-749\t662\t434\t318\t216\t247\t22\n-450\t142\t559\t187\t0\t32\t1\n-365\t129\t515\t0\t0\t30\t10\n-370\t181\t76\t357\t74\t314\t4\n-651\t655\t339\t274\t129\t132\t24\n-305\t149\t74\t0\t118\t182\t5\n-375\t85\t285\t137\t0\t0\t15\n-274\t149\t0\t164\t0\t38\t5\n-399\t187\t102\t625\t226\t365\t16\n-602\t1023\t167\t257\t204\t273\t21\n-293\t240\t263\t222\t0\t6\t15\n-671\t929\t112\t215\t182\t170\t21\n-436\t149\t90\t425\t659\t308\t7\n-317\t89\t492\t266\t0\t99\t1\n-363\t146\t6\t527\t194\t64\t16\n-858\t1023\t252\t325\t217\t105\t25\n-266\t152\t91\t173\t44\t12\t5\n-318\t114\t495\t230\t10\t0\t1\n-337\t83\t502\t103\t3\t149\t2\n-619\t977\t159\t241\t274\t5\t21\n-869\t1023\t177\t296\t252\t323\t25\n-734\t388\t470\t143\t93\t238\t22\n-361\t114\t522\t86\t3\t0\t10\n-372\t113\t551\t109\t104\t153\t2\n-333\t239\t363\t529\t121\t263\t17\n-749\t1023\t219\t260\t225\t179\t25\n-353\t194\t77\t352\t663\t182\t7\n-649\t1023\t373\t478\t420\t453\t23\n-416\t118\t535\t291\t91\t38\t1\n-716\t515\t423\t240\t203\t201\t24\n-413\t197\t106\t511\t130\t306\t16\n-370\t110\t517\t252\t66\t141\t18\n-341\t131\t20\t438\t609\t265\t7\n-327\t88\t520\t53\t207\t111\t10\n-340\t75\t520\t0\t0\t33\t10\n-447\t153\t551\t575\t0\t113\t14\n-399\t88\t554\t266\t0\t167\t18\n-380\t96\t484\t557\t138\t173\t14\n-993\t1023\t195\t318\t335\t263\t26\n-375\t147\t554\t168\t0\t72\t1\n-358\t130\t0\t0\t299\t76\t5\n-284\t96\t448\t126\t0\t147\t1\n-744\t1023\t189\t313\t240\t168\t25\n-610\t1023\t158\t232\t231\t234\t21\n-633\t1023\t144\t244\t275\t200\t21\n-477\t584\t84\t403\t131\t161\t12\n-370\t117\t532\t59\t9\t169\t2\n-709\t923\t193\t233\t246\t76\t21\n-342\t152\t533\t92\t66\t161\t2\n-306\t129\t10\t66\t82\t106\t5\n-349\t165\t80\t201\t301\t207\t12\n-650\t1023\t108\t178\t150\t61\t21\n-316\t106\t0\t337\t600\t236\t7\n-535\t435\t368\t226\t10\t83\t24\n-320\t78\t500\t185\t0\t135\t1\n-364\t189\t158\t363\t396\t206\t7\n-367\t134\t552\t0\t129\t208\t2\n-367\t109\t537\t198\t49\t185\t18\n-650\t1023\t113\t289\t213\t258\t25\n-354\t211\t117\t75\t116\t205\t5\n-599\t1023\t131\t186\t252\t181\t21\n-528\t355\t334\t248\t180\t219\t22\n-560\t933\t181\t239\t307\t137\t21\n-262\t88\t3\t189\t0\t165\t5\n-708\t1023\t41\t300\t174\t227\t25\n-532\t862\t158\t113\t259\t179\t21\n-358\t102\t515\t0\t70\t18\t10\n-648\t438\t442\t286\t206\t49\t24\n-410\t141\t518\t323\t182\t3\t1\n-399\t62\t498\t125\t0\t29\t1\n-784\t549\t343\t23\t201\t152\t24\n-342\t169\t102\t195\t24\t146\t5\n-616\t691\t378\t268\t230\t276\t22\n-585\t1009\t164\t124\t223\t236\t21\n-678\t1023\t155\t197\t140\t30\t21\n-378\t113\t76\t464\t624\t173\t20\n-682\t1023\t185\t293\t187\t285\t25\n-402\t143\t568\t262\t0\t68\t1\n-339\t150\t512\t542\t26\t115\t14\n-607\t898\t56\t278\t217\t194\t21\n-333\t93\t524\t129\t0\t103\t1\n-369\t153\t62\t426\t656\t263\t7\n-345\t108\t523\t205\t0\t0\t1\n-615\t747\t199\t285\t260\t263\t21\n-389\t247\t91\t0\t93\t44\t5\n-365\t114\t517\t0\t35\t83\t10\n-362\t83\t547\t236\t39\t87\t1\n-776\t1023\t172\t253\t259\t268\t25\n-368\t120\t539\t198\t20\t84\t1\n-735\t1023\t253\t304\t315\t151\t25\n-350\t138\t54\t284\t652\t243\t7\n-390\t162\t554\t29\t0\t62\t10\n-466\t183\t71\t676\t699\t371\t20\n-370\t120\t244\t117\t85\t19\t15\n-361\t132\t537\t223\t0\t163\t18\n-730\t1023\t187\t307\t303\t208\t25\n-636\t979\t127\t275\t257\t133\t21\n-405\t124\t27\t464\t634\t252\t20\n-329\t109\t108\t315\t546\t216\t7\n-582\t1023\t135\t227\t156\t148\t21\n-348\t120\t501\t39\t74\t201\t2\n-356\t66\t467\t93\t304\t155\t2\n-385\t206\t60\t439\t675\t364\t7\n-351\t116\t520\t549\t43\t71\t14\n-836\t429\t537\t214\t79\t160\t24\n-386\t162\t61\t530\t701\t354\t20\n-413\t180\t119\t476\t670\t272\t20\n-357\t119\t551\t281\t70\t30\t1\n-348\t74\t545\t222\t0\t0\t1\n-414\t154\t0\t354\t606\t178\t7\n-490\t169\t570\t628\t108\t95\t14\n-384\t112\t537\t150\t75\t172\t18\n-754\t1009\t121\t180\t203\t86\t21\n-394\t82\t537\t85\t63\t73\t10\n-942\t1023\t230\t307\t299\t216\t26\n-401\t211\t95\t519\t678\t321\t20\n-686\t1023\t151\t236\t274\t242\t25\n-622\t946\t120\t196\t158\t177\t21\n-615\t1023\t184\t84\t230\t179\t21\n-709\t1019\t181\t275\t148\t236\t25\n-458\t210\t598\t527\t58\t172\t14\n-357\t146\t65\t366\t651\t257\t7\n-621\t1023\t70\t244\t245\t249\t21\n-437\t206\t530\t654\t0\t211\t17\n-974\t1023\t242\t319\t318\t221\t26\n-320\t189\t319\t396\t172\t221\t16\n-323\t72\t482\t186\t0\t156\t18\n-823\t1023\t131\t272\t167\t232\t25\n-660\t1023\t229\t290\t246\t28\t21\n-297\t119\t444\t0\t0\t104\t10\n-393\t117\t82\t503\t658\t196\t20\n-586\t834\t175\t274'..b'26\n-365\t150\t530\t172\t0\t37\t1\n-378\t121\t16\t354\t660\t290\t7\n-363\t133\t52\t398\t674\t255\t7\n-775\t1023\t149\t265\t217\t181\t25\n-334\t82\t502\t71\t27\t162\t2\n-383\t173\t75\t397\t676\t243\t7\n-681\t354\t407\t284\t266\t243\t22\n-386\t133\t545\t103\t93\t112\t2\n-416\t110\t532\t173\t148\t63\t1\n-636\t1023\t132\t243\t243\t203\t21\n-405\t152\t96\t299\t656\t301\t7\n-639\t1023\t132\t308\t183\t280\t25\n-629\t946\t125\t256\t211\t47\t21\n-429\t104\t230\t714\t692\t738\t9\n-700\t1023\t211\t292\t271\t252\t25\n-568\t323\t441\t389\t118\t316\t22\n-323\t97\t507\t183\t120\t51\t1\n-671\t1023\t213\t362\t301\t0\t25\n-329\t134\t94\t146\t0\t173\t5\n-388\t125\t19\t433\t591\t254\t7\n-360\t183\t0\t266\t649\t231\t7\n-331\t78\t489\t41\t0\t131\t2\n-634\t897\t167\t226\t210\t252\t21\n-292\t108\t22\t0\t0\t79\t5\n-336\t111\t0\t316\t655\t258\t7\n-434\t141\t489\t167\t162\t185\t18\n-560\t845\t137\t252\t178\t150\t21\n-396\t145\t568\t147\t0\t128\t1\n-645\t936\t138\t185\t223\t222\t21\n-663\t1023\t155\t260\t230\t151\t21\n-954\t1023\t207\t339\t286\t306\t26\n-674\t972\t195\t257\t173\t45\t21\n-381\t105\t548\t103\t85\t177\t2\n-333\t212\t123\t717\t655\t302\t20\n-600\t1023\t110\t214\t245\t181\t21\n-360\t113\t509\t223\t5\t114\t1\n-600\t1023\t213\t261\t235\t219\t21\n-754\t995\t185\t289\t42\t7\t21\n-427\t157\t86\t174\t569\t270\t6\n-325\t91\t508\t39\t6\t11\t10\n-372\t171\t68\t463\t0\t277\t16\n-402\t215\t527\t646\t191\t44\t14\n-709\t1023\t365\t530\t393\t377\t23\n-291\t126\t76\t0\t114\t159\t5\n-568\t673\t187\t320\t185\t230\t22\n-323\t79\t458\t0\t15\t170\t2\n-406\t161\t536\t605\t0\t212\t14\n-420\t127\t519\t0\t23\t90\t10\n-605\t1023\t237\t166\t258\t187\t21\n-382\t124\t511\t134\t37\t95\t1\n-702\t511\t377\t256\t160\t267\t22\n-596\t1023\t160\t192\t250\t182\t21\n-431\t211\t111\t495\t658\t274\t20\n-703\t1023\t135\t316\t128\t103\t21\n-357\t123\t529\t62\t149\t21\t10\n-772\t1023\t223\t266\t188\t226\t25\n-567\t1023\t130\t251\t253\t104\t21\n-356\t95\t489\t126\t0\t128\t1\n-390\t129\t568\t75\t124\t90\t10\n-691\t1023\t229\t340\t209\t256\t25\n-311\t116\t0\t145\t24\t185\t5\n-381\t130\t101\t619\t649\t367\t20\n-376\t116\t549\t163\t27\t33\t1\n-705\t329\t430\t149\t119\t0\t24\n-670\t1023\t122\t266\t228\t199\t21\n-711\t962\t148\t235\t274\t256\t25\n-641\t1023\t160\t259\t194\t181\t21\n-556\t1023\t135\t247\t279\t164\t21\n-571\t1023\t179\t245\t160\t215\t21\n-392\t100\t515\t65\t0\t45\t10\n-340\t105\t499\t69\t0\t82\t10\n-636\t967\t185\t158\t282\t74\t21\n-373\t132\t500\t217\t34\t48\t1\n-929\t1023\t431\t319\t260\t282\t26\n-345\t120\t507\t0\t0\t124\t10\n-293\t106\t505\t133\t104\t63\t1\n-359\t96\t529\t222\t127\t150\t18\n-381\t176\t551\t222\t0\t156\t18\n-263\t191\t440\t451\t47\t140\t14\n-1013\t1023\t450\t456\t401\t351\t26\n-441\t331\t131\t99\t79\t131\t12\n-317\t129\t514\t0\t143\t39\t10\n-373\t94\t517\t0\t168\t59\t10\n-602\t1023\t100\t189\t188\t93\t21\n-356\t120\t491\t546\t0\t123\t14\n-375\t118\t554\t71\t159\t109\t10\n-387\t95\t494\t196\t152\t0\t1\n-326\t68\t54\t201\t582\t256\t6\n-717\t1023\t230\t275\t270\t195\t25\n-306\t80\t455\t370\t0\t42\t1\n-411\t282\t149\t127\t82\t213\t12\n-405\t122\t116\t436\t653\t360\t7\n-633\t906\t180\t248\t271\t263\t21\n-364\t104\t541\t0\t213\t168\t2\n-313\t133\t48\t167\t117\t61\t5\n-294\t58\t478\t120\t17\t35\t1\n-313\t78\t459\t247\t0\t59\t1\n-389\t148\t563\t146\t154\t85\t1\n-305\t145\t57\t91\t92\t6\t5\n-637\t1023\t154\t242\t291\t226\t21\n-655\t1023\t194\t238\t261\t257\t25\n-632\t1023\t205\t268\t268\t234\t25\n-391\t187\t542\t31\t107\t245\t2\n-305\t122\t38\t0\t130\t112\t5\n-358\t250\t85\t130\t157\t15\t12\n-446\t134\t559\t255\t37\t10\t1\n-386\t138\t531\t74\t133\t167\t2\n-367\t106\t535\t4\t47\t49\t10\n-391\t84\t521\t217\t143\t76\t1\n-357\t110\t515\t171\t93\t38\t1\n-374\t122\t552\t0\t23\t93\t10\n-360\t124\t501\t469\t0\t129\t14\n-533\t1023\t349\t446\t357\t406\t23\n-332\t74\t105\t328\t559\t232\t7\n-466\t232\t146\t351\t263\t85\t12\n-405\t87\t517\t538\t0\t183\t14\n-597\t1023\t143\t242\t241\t208\t21\n-333\t111\t523\t123\t0\t0\t1\n-788\t1023\t202\t311\t298\t227\t25\n-599\t995\t128\t266\t260\t178\t21\n-377\t123\t62\t574\t629\t198\t20\n-719\t1023\t183\t260\t267\t153\t25\n-680\t1023\t159\t287\t251\t255\t25\n-379\t97\t535\t51\t0\t84\t10\n-383\t225\t63\t307\t0\t405\t4\n-597\t987\t222\t220\t201\t244\t21\n-360\t82\t14\t376\t23\t1\t16\n-592\t1023\t104\t276\t212\t164\t21\n-651\t368\t378\t283\t21\t91\t24\n-304\t132\t73\t138\t67\t52\t5\n-380\t160\t543\t273\t0\t68\t1\n-305\t143\t0\t52\t45\t162\t5\n-405\t132\t552\t417\t22\t142\t14\n-366\t99\t509\t0\t102\t183\t2\n-704\t1023\t122\t250\t310\t204\t25\n-713\t1023\t169\t282\t280\t140\t25\n-380\t198\t97\t647\t662\t234\t20\n-577\t273\t318\t268\t329\t260\t22\n-372\t80\t490\t584\t0\t0\t14\n-801\t980\t156\t331\t228\t182\t25\n-402\t153\t38\t594\t656\t289\t20\n-317\t82\t32\t131\t323\t45\t5\n-630\t1023\t101\t188\t157\t153\t21\n-670\t1023\t185\t162\t250\t249\t25\n-338\t108\t536\t0\t0\t119\t10\n-964\t1023\t262\t348\t358\t266\t26\n-639\t823\t129\t263\t178\t177\t21\n-362\t145\t24\t123\t310\t158\t12\n-360\t223\t65\t352\t600\t403\t7\n-1014\t1023\t410\t349\t265\t286\t26\n-656\t1023\t149\t307\t240\t175\t25\n'
b
diff -r 8c17aa8032c2 -r bca68066a957 cs_overview/test-data/out.html
--- a/cs_overview/test-data/out.html Mon Feb 27 12:48:54 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,286 +0,0 @@\n-<!DOCTYPE html>\n-<html>\n-<head lang="en">\n-<title>CrossSample Overview</title>\n-<meta charset="UTF-8">\n-<meta HTTP-EQUIV="Pragma" CONTENT="no-cache">\n-<meta name="viewport" content="width=device-width, initial-scale=1.0">\n-<!-- Plotly.js -->\n-<link rel="stylesheet" href="/static/flowtools/bootstrap/css/bootstrap.css"/>\n-<link rel="stylesheet" href="/static/flowtools/select2/select2.min.css"/>\n-<link rel="stylesheet" href="/static/flowtools/css/parallelCoordinates.css"/>\n-<link rel="stylesheet" href="/static/flowtools/datatables/datatables.min.css"/>\n-<link rel="stylesheet" href="/static/flowtools/datatables/Buttons-1.1.2/css/buttons.dataTables.min.css"/>\n-<link rel="stylesheet" href="/static/flowtools/datatables/Select-1.1.2/css/select.dataTables.min.css"/>\n-<link rel="stylesheet" href="/static/flowtools/datatables/Editor-1.5.6/css/editor.dataTables.min.css"/>\n-<script src="/static/flowtools/jquery-1.11.3.min.js" type="text/javascript"></script>\n-<script src="/static/flowtools/bootstrap/js/bootstrap.js" type="text/javascript"></script>\n-<script src="/static/flowtools/select2/select2.full.min.js" type="text/javascript"></script>\n-<script src="/static/flowtools/d3/d3.min.js" type="text/javascript"></script>\n-<script src="/static/flowtools/plotly-latest.min.js" type="text/javascript"></script>\n-<script src="/static/flowtools/datatables/datatables.min.js" type="text/javascript"></script>\n-<script src="/static/flowtools/datatables/Editor-1.5.6/js/dataTables.editor.min.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/csOverview.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/crossSamplePlots.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/pCoordMFIstats.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/pCoordCSstats.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/color_palette.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/boxplots.js" type="text/javascript"></script>\n-\n-<style>\n-#input{font-family:Calibri,Arial}\n-table.dataTable tbody td.dt-body-right {\n-    text-align: right;\n-}\n-#div{padding:5px;width:150px;height:100px;text-align:center}\n-table{width:100%;border:0px solid;border-collapse:collapse;text-align:center;}\n-th{background-color:#3e6db0;color:#fff;padding:5px}\n-</style>\n-</head>\n-\n-<body>\n-<div class="container-fluid">\n-    <div class="row" style="padding-bottom:10px;min-height:500px;">\n-        <div  class="col-md-12">\n-            <ul class="nav nav-tabs tabs-main">\n-                <li class="homeTab active" data-value="prop"><a href="#prop" data-toggle="tab">Population Distribution</a></li>\n-                <li class="homeTab" data-value="stackedA"><a href="#stackedA" data-toggle="tab">Stacked Plot</a></li>\n-                <li class="homeTab" data-value="pcoord"><a href="#pcoord" data-toggle="tab">Parallel Coordinates Population Summary</a></li>\n-                <li class="homeTab" data-value="pcoordMFI"><a href="#pcoordMFI" data-toggle="tab">Parallel Coordinates MFI Summary</a></li>\n-                <li class="homeTab" data-value="csstats"><a href="#boxplot" data-toggle="tab">Summary Statistics Boxplots</a></li>\n-            </ul>\n-\n-            <div class="tab-content">\n-                <div class="tab-pane active" id="prop" style="min-height:500px;">\n-                    <div class="row">\n-                        <div id="propDiv">Population Distribution</div>\n-                    </div>\n-                    <div class="row">\n-                    &nbsp;&nbsp;&nbsp;&nbsp;Edit population names below:\n-                    <div id="popnamesDiv"></div>\n-                    </div>\n-                </div>\n-\n-                <div class="tab-pane" id="stackedA" style="min-height:500px;">\n-                    <div class="col-md-12 chartDiv">\n-                        <div id="plotDivA" class="col-md-10" style="height:100%;"></div>\n-\n-                        <div id'..b'>\n-                          <input type="checkbox" unchecked id="displayMFIC"/>&nbsp;Display MFI<br><br>\n-                          <button id="changeDisplayC" class="igbtn">View per marker</button><br><br>\n-                          <div id="markerWarning" style="display:none;">\n-                            <div class="alert alert-info alert-dismissible fade in" role="alert">\n-                              <button type="button" class="close" data-dismiss="alert" aria-label="Close">\n-                                <span aria-hidden="true">&times;</span></button>\n-                                  Only 5 markers can be displayed at most.\n-                            </div>\n-                          </div>\n-                          <div id="outlierWarning">\n-                            <div class="alert alert-info alert-dismissible fade in" role="alert">\n-                              <button type="button" class="close" data-dismiss="alert" aria-label="Close">\n-                                <span aria-hidden="true">&times;</span></button>\n-                                  The number of outliers is too large to display. Representation shows randomly downsampled outliers.\n-                            </div>\n-                          </div>\n-                        </div>\n-\n-                        <div id="plotDivC" class="col-md-8" style="height:100%;"></div>\n-\n-                        <div id="popDivC" class="col-md-2" style="height:100%;">\n-                            <button id="updateDisplayC" class="igbtn">Reset Display</button>\n-                            <table id="popTableC" class="table table-condensed table-bordered igtable">\n-                                <thead>\n-                                    <tr>\n-                                        <th><input type="checkbox" checked id="popSelectAllC"/></th>\n-                                        <th>Pop. Names</th>\n-                                        <th>Color</th>\n-                                     </tr>\n-                                </thead>\n-                                <tbody>\n-                                </tbody>\n-                            </table>\n-                        </div>\n-                    </div>\n-                </div>\n-            </div>\n-        </div>\n-    </div>\n-</div>\n-\n-\n-</div>\n-</div>\n-<script>\n-var poppropLoaded = false;\n-var stackedALoaded = false;\n-var pCoordLoaded = false;\n-var pCoordMFILoaded = false;\n-var boxplotLoaded = false;\n-\n-$().ready(function() {\n-    $(document).on(\'shown.bs.tab\',\'a[data-toggle="tab"]\', function(e) {\n-      var tab = e.target.getAttribute("href");\n-      if (tab == \'#prop\') {\n-        if (poppropLoaded) {\n-            return true;\n-        }\n-        poppropLoaded = true;\n-        displayProp();\n-      }\n-      if (tab == \'#stackedA\') {\n-        if (stackedALoaded) {\n-            displayPopulationLegend(configAreaplot);\n-            updatePlot(configAreaplot);\n-            return true;\n-        }\n-        stackedALoaded = true;\n-        displayStackedAreaPlot();\n-      }\n-      if (tab == \'#pcoord\') {\n-        if (pCoordLoaded) {\n-            displaySmpTable();\n-            displayTableGrid();\n-            return true;\n-        }\n-        pCoordLoaded = true;\n-        displayParallelCoordinates();\n-      }\n-      if (tab == \'#pcoordMFI\') {\n-        if (pCoordMFILoaded) {\n-            displayPopTablem();\n-            displaySmpTablem();\n-            displayTableGridm();\n-            return true;\n-        }\n-        pCoordMFILoaded = true;\n-        displayParallelCoordinatesMFI();\n-      }\n-      if (tab == \'#boxplot\') {\n-        if (boxplotLoaded) {\n-            displayPopulationLegend(configBoxplot);\n-            displayMarkerTable(configBoxplot);\n-            updateBoxplot(configBoxplot);\n-            return true;\n-        }\n-        boxplotLoaded = true;\n-        displayBoxplot();\n-      }\n-    });\n-\n-    poppropLoaded = true;\n-    displayProp();\n-});\n-</script>\n-</body>\n-</html>\n'
b
diff -r 8c17aa8032c2 -r bca68066a957 static/images/flowtools/barssm.png
b
Binary file static/images/flowtools/barssm.png has changed
b
diff -r 8c17aa8032c2 -r bca68066a957 static/images/flowtools/cs_bpt.png
b
Binary file static/images/flowtools/cs_bpt.png has changed
b
diff -r 8c17aa8032c2 -r bca68066a957 static/images/flowtools/edit_popdistrib.png
b
Binary file static/images/flowtools/edit_popdistrib.png has changed
b
diff -r 8c17aa8032c2 -r bca68066a957 static/images/flowtools/pcmfi.png
b
Binary file static/images/flowtools/pcmfi.png has changed
b
diff -r 8c17aa8032c2 -r bca68066a957 static/images/flowtools/pcpop.png
b
Binary file static/images/flowtools/pcpop.png has changed
b
diff -r 8c17aa8032c2 -r bca68066a957 static/images/flowtools/popdistrib.png
b
Binary file static/images/flowtools/popdistrib.png has changed
b
diff -r 8c17aa8032c2 -r bca68066a957 static/images/flowtools/stackedA.png
b
Binary file static/images/flowtools/stackedA.png has changed
b
diff -r 8c17aa8032c2 -r bca68066a957 static/images/flowtools/stackedB.png
b
Binary file static/images/flowtools/stackedB.png has changed
b
diff -r 8c17aa8032c2 -r bca68066a957 static/images/flowtools/stackedsm.png
b
Binary file static/images/flowtools/stackedsm.png has changed
b
diff -r 8c17aa8032c2 -r bca68066a957 test-data/csAllMFIs.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/csAllMFIs.tsv Wed May 20 16:04:43 2020 -0400
b
@@ -0,0 +1,76 @@
+FSC SSC CD4 CCR7 CD8 CCR3 Percentage Population SampleName
+361.11 119.12 521.83 181.74 48.05 76.45 10.22 1 Sample01
+374.37 125.63 525.73 35.68 72.0 197.41 8.49 2 Sample01
+407.04 153.46 426.27 60.27 578.92 268.62 0.13 3 Sample01
+363.32 241.46 99.96 145.89 102.81 318.15 0.42 4 Sample01
+337.01 155.21 56.65 72.22 73.39 112.31 6.66 5 Sample01
+368.59 148.89 69.11 71.71 606.03 237.4 13.3 6 Sample01
+403.38 176.77 93.68 191.88 620.84 263.67 2.96 7 Sample01
+394.0 176.73 319.53 183.2 615.93 287.33 0.08 8 Sample01
+345.6 331.2 292.6 562.5 293.0 413.3 0.05 9 Sample01
+352.11 115.59 519.67 30.16 54.33 72.31 9.86 10 Sample01
+421.38 241.16 115.05 151.82 215.63 147.29 3.27 12 Sample01
+456.33 283.0 451.33 333.83 524.33 268.17 0.03 13 Sample01
+363.33 188.33 360.33 551.11 77.56 198.67 0.04 14 Sample01
+354.13 118.63 301.28 81.22 69.19 117.1 1.42 15 Sample01
+419.05 392.93 120.34 408.48 122.57 168.11 0.5 16 Sample01
+461.88 422.08 421.0 718.08 357.2 480.84 0.12 17 Sample01
+388.56 132.3 528.7 189.23 62.06 206.63 7.59 18 Sample01
+972.67 1014.57 510.17 649.92 498.02 507.31 0.46 19 Sample01
+436.0 331.33 195.33 587.83 698.0 475.67 0.03 20 Sample01
+602.7 967.96 140.02 220.22 213.07 176.14 14.78 21 Sample01
+687.29 492.17 377.54 210.74 192.45 266.89 2.35 22 Sample01
+551.75 988.58 350.25 482.74 364.3 411.62 1.38 23 Sample01
+647.97 385.39 396.58 170.54 166.82 144.43 2.22 24 Sample01
+726.14 1016.99 182.62 264.76 248.2 217.07 12.0 25 Sample01
+969.6 1001.4 329.24 338.48 302.98 333.58 1.62 26 Sample01
+562.4 279.89 395.37 85.52 233.15 423.82 0.41 2 Sample02
+361.27 110.68 512.56 68.78 633.79 483.62 10.72 3 Sample02
+355.26 167.2 73.65 147.49 108.77 528.0 5.69 4 Sample02
+320.36 182.36 72.15 113.6 120.13 198.04 0.27 5 Sample02
+379.34 171.32 79.19 96.03 612.98 319.43 3.08 6 Sample02
+412.95 178.92 94.56 281.78 623.08 375.29 2.95 7 Sample02
+371.12 112.05 517.49 258.96 642.94 505.4 11.26 8 Sample02
+432.33 214.49 133.48 402.37 298.53 645.37 1.27 9 Sample02
+380.56 135.17 85.28 110.51 602.83 574.66 8.98 11 Sample02
+447.84 525.86 156.54 205.91 232.41 226.26 1.04 12 Sample02
+406.28 136.61 517.79 421.89 615.35 306.51 10.94 13 Sample02
+358.41 103.0 460.06 676.12 556.82 164.12 0.08 14 Sample02
+392.82 210.34 274.9 177.84 205.7 226.14 0.25 15 Sample02
+433.7 263.98 107.32 510.33 149.7 224.73 0.58 16 Sample02
+503.0 183.67 512.67 468.67 380.67 284.33 0.02 17 Sample02
+401.91 199.4 351.38 197.56 325.84 376.18 0.22 18 Sample02
+942.11 977.37 496.87 556.88 589.5 591.94 0.71 19 Sample02
+431.49 175.21 108.33 449.62 589.5 338.8 0.53 20 Sample02
+612.64 962.73 145.03 218.27 241.53 218.17 12.76 21 Sample02
+677.89 432.97 395.05 215.41 253.52 320.54 2.78 22 Sample02
+537.32 987.67 377.08 463.75 412.69 503.96 2.01 23 Sample02
+709.18 473.67 400.15 219.99 227.86 177.82 1.58 24 Sample02
+724.18 1017.01 183.88 263.44 272.12 249.6 19.98 25 Sample02
+956.13 990.81 316.67 335.77 337.53 324.79 1.88 26 Sample02
+363.95 112.51 518.71 193.17 50.64 67.35 8.88 1 Sample03
+366.04 113.59 521.83 39.17 65.94 165.47 5.34 2 Sample03
+395.7 119.3 384.9 85.9 585.6 230.1 0.05 3 Sample03
+369.39 205.67 97.01 236.06 84.86 292.39 0.34 4 Sample03
+318.6 144.34 48.13 81.89 64.55 103.94 4.61 5 Sample03
+356.89 131.76 69.32 144.68 612.42 244.05 1.94 6 Sample03
+373.64 149.87 73.69 364.35 620.22 274.16 5.76 7 Sample03
+438.0 176.67 517.33 423.0 277.33 437.33 0.02 8 Sample03
+456.47 368.94 339.69 764.56 534.31 616.89 0.18 9 Sample03
+358.86 110.17 520.31 33.06 61.37 62.34 7.46 10 Sample03
+395.52 201.76 124.0 438.24 675.14 501.81 0.1 11 Sample03
+416.88 238.6 120.19 236.76 187.66 133.17 3.0 12 Sample03
+435.72 195.36 389.95 550.08 631.15 289.23 0.19 13 Sample03
+399.59 136.41 525.46 567.47 69.53 112.63 4.7 14 Sample03
+361.32 113.15 344.55 109.52 71.39 102.73 1.61 15 Sample03
+404.65 196.83 95.23 518.72 130.58 201.29 3.17 16 Sample03
+451.64 196.71 522.26 588.96 117.02 273.98 1.52 17 Sample03
+383.16 121.62 525.61 214.22 63.94 172.91 5.26 18 Sample03
+948.66 979.64 477.18 676.02 492.0 476.04 0.48 19 Sample03
+393.34 154.15 80.74 547.09 620.52 265.13 7.53 20 Sample03
+618.71 977.02 140.44 231.46 216.74 155.19 16.55 21 Sample03
+634.28 434.83 361.97 254.26 193.6 244.19 1.54 22 Sample03
+550.91 992.18 358.58 469.96 366.77 399.73 1.77 23 Sample03
+692.2 478.05 385.86 213.85 182.9 123.52 2.62 24 Sample03
+732.99 1018.5 182.2 275.26 250.19 190.78 13.6 25 Sample03
+971.95 998.45 334.88 363.32 315.37 269.93 1.74 26 Sample03
b
diff -r 8c17aa8032c2 -r bca68066a957 test-data/csBoxplotData.json
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/csBoxplotData.json Wed May 20 16:04:43 2020 -0400
[
b'@@ -0,0 +1,1 @@\n+{"lower": {"CCR3":{"1":-57.5,"2":56.0,"3":294.25,"4":288.5,"5":-76.5,"6":94.0,"7":116.0,"8":342.0,"9":434.875,"10":-57.5,"11":446.5,"12":-64.5,"13":125.5,"14":-74.0,"15":-86.0,"16":-88.375,"17":78.0,"18":58.5,"19":237.625,"20":96.0,"21":-21.0,"22":135.625,"23":251.5,"24":-39.5,"25":60.0,"26":114.0},"CCR7":{"1":37.5,"2":-112.5,"3":-183.75,"4":-114.75,"5":-196.5,"6":-160.625,"7":-20.0,"8":71.5,"9":64.5,"10":-94.5,"11":-126.875,"12":-23.0,"13":135.0,"14":351.5,"15":-202.25,"16":262.875,"17":397.0,"18":39.0,"19":192.625,"20":268.25,"21":94.5,"22":44.375,"23":373.0,"24":-4.75,"25":167.5,"26":200.0},"CD4":{"1":446.0,"2":441.0,"3":434.0,"4":-96.5,"5":-105.5,"6":-79.0,"7":-62.5,"8":449.5,"9":-77.0,"10":442.0,"11":-65.5,"12":-15.25,"13":415.0,"14":430.0,"15":191.0,"16":-57.5,"17":376.25,"18":450.5,"19":249.75,"20":-60.25,"21":25.5,"22":240.875,"23":271.5,"24":277.0,"25":77.5,"26":5.5},"CD8":{"1":-133.5,"2":-183.0,"3":550.5,"4":-141.25,"5":-144.5,"6":504.5,"7":515.0,"8":566.5,"9":-198.5,"10":-151.5,"11":510.0,"12":-57.75,"13":512.5,"14":-196.5,"15":-161.75,"16":-188.875,"17":-205.75,"18":-172.5,"19":117.375,"20":516.0,"21":111.0,"22":53.0,"23":281.0,"24":21.5,"25":161.0,"26":190.5},"FSC":{"1":271.5,"2":260.5,"3":265.0,"4":175.5,"5":207.0,"6":278.5,"7":295.0,"8":287.0,"9":187.875,"10":258.0,"11":286.5,"12":256.5,"13":263.5,"14":278.0,"15":232.25,"16":270.0,"17":261.75,"18":268.0,"19":708.0,"20":297.0,"21":486.5,"22":463.5,"23":326.0,"24":469.0,"25":548.0,"26":748.625},"SSC":{"1":42.0,"2":37.5,"3":42.0,"4":23.5,"5":49.0,"6":38.5,"7":43.5,"8":46.0,"9":21.75,"10":43.0,"11":36.5,"12":2.25,"13":15.5,"14":34.0,"15":1.5,"16":26.5,"17":-25.25,"18":41.0,"19":1023.0,"20":53.0,"21":798.0,"22":186.375,"23":1023.0,"24":178.75,"25":1023.0,"26":1023.0}}, "mfi": {"CCR3":{"1":72,"2":187,"3":483,"4":520,"5":109,"6":251,"7":304,"8":504,"9":641,"10":68,"11":565,"12":161,"13":306,"14":108,"15":110,"16":201,"17":289,"18":195,"19":541,"20":267,"21":173,"22":283,"23":448,"24":132,"25":232,"26":311},"CCR7":{"1":189,"2":37,"3":68,"4":141,"5":67,"6":90,"7":318,"8":257,"9":419,"10":32,"11":111,"12":213,"13":424,"14":566,"15":84,"16":509,"17":598,"18":198,"19":629,"20":534,"21":224,"22":204,"23":476,"24":204,"25":269,"26":343},"CD4":{"1":520,"2":523,"3":512,"4":84,"5":56,"6":75,"7":83,"8":517,"9":138,"10":521,"11":85,"12":119,"13":516,"14":526,"15":322,"16":104,"17":509,"18":524,"19":490,"20":82,"21":145,"22":389,"23":366,"24":392,"25":182,"26":325},"CD8":{"1":53,"2":67,"3":632,"4":114,"5":82,"6":608,"7":620,"8":641,"9":327,"10":59,"11":604,"12":183,"13":615,"14":76,"15":75,"16":138,"17":119,"18":60,"19":533,"20":621,"21":225,"22":215,"23":387,"24":187,"25":259,"26":318},"FSC":{"1":364,"2":370,"3":363,"4":360,"5":333,"6":372,"7":389,"8":371,"9":422,"10":357,"11":381,"12":410,"13":406,"14":401,"15":356,"16":413,"17":440,"18":384,"19":944,"20":393,"21":617,"22":667,"23":546,"24":681,"25":727,"26":960},"SSC":{"1":117,"2":121,"3":112,"4":175,"5":156,"6":154,"7":162,"8":113,"9":214,"10":114,"11":138,"12":276,"13":137,"14":139,"15":121,"16":239,"17":198,"18":128,"19":966,"20":154,"21":975,"22":437,"23":976,"24":440,"25":1013,"26":975}}, "outliers": {"CCR3":{"1":[],"2":[342,565,320,633,364,568,450,390,545,543,548,558,305,309,322,385,344,331,424,358,310,388,542,607,335,338,530,324,316,412,594,593,339,386,306,432,333,488,560,375,317,323,627,367,536,333,578,313,321,348,385,310,407,366,502,333,337,334,335,334,351,419,376,312,317,310,307,418,317,345,423,368,340,334,393,568,553,317,326,366,587,354,553,313,315,313,314,565,345,385,340,407,387,333,503,550,378,385,320,531],"3":[283,281,260,281,258,291,278,222,240,287,273,236,270,272,260,280,259,262,277,282,261,156,698,190,251,283,286,278,239,167,281,187,293,285,165,237,245,240,280,256,268,262,286,153,237,285,294,249,294,285,228,286,293,282,282,141,255,254,180,274,234,210,266,175,159,264,270,266,272,277,256,214,273,224,206,195,276,127,184,176,268,241,246,274,281,215,288,266,278,168,274,275,230,232,270,252,267,181,95'..b'":414.0,"13":406.0,"14":400.0,"15":357.0,"16":400.0,"17":433.0,"18":380.0,"19":1023.0,"20":391.0,"21":614.0,"22":666.0,"23":547.0,"24":679.0,"25":719.0,"26":1001.0},"SSC":{"1":113.0,"2":117.0,"3":109.0,"4":166.0,"5":147.0,"6":147.0,"7":158.0,"8":110.0,"9":211.0,"10":110.0,"11":133.0,"12":230.0,"13":130.0,"14":132.0,"15":109.0,"16":201.0,"17":183.0,"18":123.0,"19":1023.0,"20":152.0,"21":1022.0,"22":457.0,"23":1023.0,"24":452.0,"25":1023.0,"26":1023.0}}, "q3": {"CCR3":{"1":105.0,"2":211.0,"3":543.0,"4":571.0,"5":156.0,"6":294.0,"7":341.0,"8":547.0,"9":683.0,"10":100.0,"11":609.0,"12":208.0,"13":348.0,"14":161.0,"15":164.0,"16":271.0,"17":338.0,"18":221.0,"19":583.25,"20":316.0,"21":234.0,"22":306.25,"23":499.0,"24":193.0,"25":270.0,"26":359.0},"CCR7":{"1":220.0,"2":75.0,"3":122.5,"4":214.0,"5":131.0,"6":135.0,"7":380.0,"8":294.0,"9":524.5,"10":63.0,"11":165.0,"12":247.0,"13":495.0,"14":629.0,"15":166.5,"16":559.75,"17":642.0,"18":234.0,"19":713.25,"20":609.5,"21":262.0,"22":270.0,"23":488.0,"24":259.0,"25":295.0,"26":375.0},"CD4":{"1":541.0,"2":546.0,"3":534.0,"4":116.0,"5":87.0,"6":106.0,"7":120.0,"8":537.0,"9":199.25,"10":542.0,"11":122.0,"12":153.5,"13":545.0,"14":550.0,"15":356.0,"16":135.0,"17":560.0,"18":548.0,"19":554.75,"20":118.5,"21":173.0,"22":429.0,"23":389.0,"24":427.0,"25":210.0,"26":413.0},"CD8":{"1":89.0,"2":122.0,"3":658.0,"4":162.5,"5":108.0,"6":642.0,"7":655.0,"8":664.0,"9":460.25,"10":101.0,"11":630.0,"12":273.5,"13":645.0,"14":131.0,"15":124.5,"16":201.75,"17":198.0,"18":115.0,"19":633.0,"20":656.0,"21":256.0,"22":258.0,"23":406.0,"24":234.0,"25":286.0,"26":348.0},"FSC":{"1":384.0,"2":398.0,"3":385.0,"4":398.0,"5":357.0,"6":391.0,"7":410.0,"8":392.0,"9":476.0,"10":378.0,"11":404.0,"12":459.0,"13":441.0,"14":428.0,"15":388.5,"16":435.0,"17":488.0,"18":413.0,"19":1023.0,"20":417.0,"21":644.0,"22":721.0,"23":601.0,"24":734.0,"25":768.0,"26":1023.0},"SSC":{"1":132.0,"2":140.0,"3":127.0,"4":206.0,"5":174.0,"6":176.0,"7":191.0,"8":126.0,"9":270.5,"10":128.0,"11":159.0,"12":313.5,"13":163.0,"14":159.0,"15":144.0,"16":259.0,"17":263.5,"18":146.0,"19":1023.0,"20":178.0,"21":1023.0,"22":522.0,"23":1023.0,"24":510.0,"25":1023.0,"26":1023.0}}, "upper": {"CCR3":{"1":202.5,"2":304.0,"3":692.25,"4":740.5,"5":295.5,"6":414.0,"7":476.0,"8":670.0,"9":831.875,"10":194.5,"11":706.5,"12":371.5,"13":481.5,"14":302.0,"15":314.0,"16":486.625,"17":494.0,"18":318.5,"19":790.625,"20":448.0,"21":387.0,"22":408.625,"23":647.5,"24":332.5,"25":396.0,"26":506.0},"CCR7":{"1":329.5,"2":187.5,"3":306.25,"4":411.25,"5":327.5,"6":312.375,"7":620.0,"8":427.5,"9":800.5,"10":157.5,"11":340.125,"12":409.0,"13":711.0,"14":795.5,"15":387.75,"16":737.875,"17":789.0,"18":351.0,"19":1025.625,"20":814.25,"21":362.5,"22":405.375,"23":557.0,"24":417.25,"25":371.5,"26":480.0},"CD4":{"1":598.0,"2":609.0,"3":594.0,"4":243.5,"5":202.5,"6":217.0,"7":229.5,"8":589.5,"9":365.0,"10":602.0,"11":234.5,"12":254.75,"13":623.0,"14":622.0,"15":455.0,"16":250.5,"17":670.25,"18":606.5,"19":737.75,"20":225.75,"21":261.5,"22":541.875,"23":459.5,"24":517.0,"25":289.5,"26":657.5},"CD8":{"1":222.5,"2":305.0,"3":722.5,"4":344.75,"5":259.5,"6":724.5,"7":739.0,"8":722.5,"9":855.5,"10":252.5,"11":702.0,"12":472.25,"13":724.5,"14":327.5,"15":296.25,"16":436.125,"17":440.25,"18":287.5,"19":942.375,"20":740.0,"21":343.0,"22":381.0,"23":481.0,"24":361.5,"25":361.0,"26":442.5},"FSC":{"1":451.5,"2":480.5,"3":457.0,"4":531.5,"5":447.0,"6":458.5,"7":479.0,"8":455.0,"9":648.875,"10":450.0,"11":474.5,"12":580.5,"13":547.5,"14":518.0,"15":482.25,"16":534.0,"17":623.75,"18":500.0,"19":1212.0,"20":489.0,"21":738.5,"22":875.5,"23":766.0,"24":893.0,"25":900.0,"26":1187.625},"SSC":{"1":186.0,"2":201.5,"3":178.0,"4":315.5,"5":249.0,"6":258.5,"7":279.5,"8":174.0,"9":419.75,"10":179.0,"11":232.5,"12":500.25,"13":251.5,"14":234.0,"15":229.5,"16":398.5,"17":436.75,"18":209.0,"19":1023.0,"20":253.0,"21":1158.0,"22":723.375,"23":1023.0,"24":708.75,"25":1023.0,"26":1023.0}}}\n\\ No newline at end of file\n'
b
diff -r 8c17aa8032c2 -r bca68066a957 test-data/csOverview.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/csOverview.tsv Wed May 20 16:04:43 2020 -0400
b
@@ -0,0 +1,4 @@
+FileID SampleName 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
+Rearranged FCSGateTrans on FCS2.003.20Kevents.fcs Sample01 10.225 8.49 0.13 0.42 6.665 13.3 2.965 0.075 0.05 9.855 0.0 3.27 0.03 0.045 1.415 0.495 0.125 7.59 0.465 0.03 14.78 2.35 1.385 2.22 12.0 1.625
+Rearranged FCSGateTrans on FCS2.001.20Kevents.fcs Sample02 0.0 0.41 10.715 5.69 0.275 3.075 2.95 11.26 1.27 0.0 8.985 1.04 10.94 0.085 0.25 0.585 0.015 0.225 0.71 0.535 12.755 2.785 2.01 1.575 19.975 1.885
+Rearranged FCSGateTrans on FCS2.002.20Kevents.fcs Sample03 8.88 5.345 0.05 0.345 4.61 1.945 5.765 0.015 0.18 7.465 0.105 3.005 0.195 4.695 1.61 3.17 1.515 5.265 0.485 7.53 16.545 1.545 1.77 2.62 13.605 1.74
b
diff -r 8c17aa8032c2 -r bca68066a957 test-data/input.flowstat1
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/input.flowstat1 Wed May 20 16:04:43 2020 -0400
b
@@ -0,0 +1,4 @@
+FileID SampleName 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
+Rearranged FCSGateTrans on FCS2.003.20Kevents.fcs Sample01 10.225 8.49 0.13 0.42 6.665 13.3 2.965 0.075 0.05 9.855 0.0 3.27 0.03 0.045 1.415 0.495 0.125 7.59 0.465 0.03 14.78 2.35 1.385 2.22 12.0 1.625
+Rearranged FCSGateTrans on FCS2.001.20Kevents.fcs Sample02 0.0 0.41 10.715 5.69 0.275 3.075 2.95 11.26 1.27 0.0 8.985 1.04 10.94 0.085 0.25 0.585 0.015 0.225 0.71 0.535 12.755 2.785 2.01 1.575 19.975 1.885
+Rearranged FCSGateTrans on FCS2.002.20Kevents.fcs Sample03 8.88 5.345 0.05 0.345 4.61 1.945 5.765 0.015 0.18 7.465 0.105 3.005 0.195 4.695 1.61 3.17 1.515 5.265 0.485 7.53 16.545 1.545 1.77 2.62 13.605 1.74
b
diff -r 8c17aa8032c2 -r bca68066a957 test-data/input.flowstat2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/input.flowstat2 Wed May 20 16:04:43 2020 -0400
b
@@ -0,0 +1,76 @@
+FSC SSC CD4 CCR7 CD8 CCR3 Percentage Population SampleName
+361.11 119.12 521.83 181.74 48.05 76.45 10.22 1 Sample01
+374.37 125.63 525.73 35.68 72.0 197.41 8.49 2 Sample01
+407.04 153.46 426.27 60.27 578.92 268.62 0.13 3 Sample01
+363.32 241.46 99.96 145.89 102.81 318.15 0.42 4 Sample01
+337.01 155.21 56.65 72.22 73.39 112.31 6.66 5 Sample01
+368.59 148.89 69.11 71.71 606.03 237.4 13.3 6 Sample01
+403.38 176.77 93.68 191.88 620.84 263.67 2.96 7 Sample01
+394.0 176.73 319.53 183.2 615.93 287.33 0.08 8 Sample01
+345.6 331.2 292.6 562.5 293.0 413.3 0.05 9 Sample01
+352.11 115.59 519.67 30.16 54.33 72.31 9.86 10 Sample01
+421.38 241.16 115.05 151.82 215.63 147.29 3.27 12 Sample01
+456.33 283.0 451.33 333.83 524.33 268.17 0.03 13 Sample01
+363.33 188.33 360.33 551.11 77.56 198.67 0.04 14 Sample01
+354.13 118.63 301.28 81.22 69.19 117.1 1.42 15 Sample01
+419.05 392.93 120.34 408.48 122.57 168.11 0.5 16 Sample01
+461.88 422.08 421.0 718.08 357.2 480.84 0.12 17 Sample01
+388.56 132.3 528.7 189.23 62.06 206.63 7.59 18 Sample01
+972.67 1014.57 510.17 649.92 498.02 507.31 0.46 19 Sample01
+436.0 331.33 195.33 587.83 698.0 475.67 0.03 20 Sample01
+602.7 967.96 140.02 220.22 213.07 176.14 14.78 21 Sample01
+687.29 492.17 377.54 210.74 192.45 266.89 2.35 22 Sample01
+551.75 988.58 350.25 482.74 364.3 411.62 1.38 23 Sample01
+647.97 385.39 396.58 170.54 166.82 144.43 2.22 24 Sample01
+726.14 1016.99 182.62 264.76 248.2 217.07 12.0 25 Sample01
+969.6 1001.4 329.24 338.48 302.98 333.58 1.62 26 Sample01
+562.4 279.89 395.37 85.52 233.15 423.82 0.41 2 Sample02
+361.27 110.68 512.56 68.78 633.79 483.62 10.72 3 Sample02
+355.26 167.2 73.65 147.49 108.77 528.0 5.69 4 Sample02
+320.36 182.36 72.15 113.6 120.13 198.04 0.27 5 Sample02
+379.34 171.32 79.19 96.03 612.98 319.43 3.08 6 Sample02
+412.95 178.92 94.56 281.78 623.08 375.29 2.95 7 Sample02
+371.12 112.05 517.49 258.96 642.94 505.4 11.26 8 Sample02
+432.33 214.49 133.48 402.37 298.53 645.37 1.27 9 Sample02
+380.56 135.17 85.28 110.51 602.83 574.66 8.98 11 Sample02
+447.84 525.86 156.54 205.91 232.41 226.26 1.04 12 Sample02
+406.28 136.61 517.79 421.89 615.35 306.51 10.94 13 Sample02
+358.41 103.0 460.06 676.12 556.82 164.12 0.08 14 Sample02
+392.82 210.34 274.9 177.84 205.7 226.14 0.25 15 Sample02
+433.7 263.98 107.32 510.33 149.7 224.73 0.58 16 Sample02
+503.0 183.67 512.67 468.67 380.67 284.33 0.02 17 Sample02
+401.91 199.4 351.38 197.56 325.84 376.18 0.22 18 Sample02
+942.11 977.37 496.87 556.88 589.5 591.94 0.71 19 Sample02
+431.49 175.21 108.33 449.62 589.5 338.8 0.53 20 Sample02
+612.64 962.73 145.03 218.27 241.53 218.17 12.76 21 Sample02
+677.89 432.97 395.05 215.41 253.52 320.54 2.78 22 Sample02
+537.32 987.67 377.08 463.75 412.69 503.96 2.01 23 Sample02
+709.18 473.67 400.15 219.99 227.86 177.82 1.58 24 Sample02
+724.18 1017.01 183.88 263.44 272.12 249.6 19.98 25 Sample02
+956.13 990.81 316.67 335.77 337.53 324.79 1.88 26 Sample02
+363.95 112.51 518.71 193.17 50.64 67.35 8.88 1 Sample03
+366.04 113.59 521.83 39.17 65.94 165.47 5.34 2 Sample03
+395.7 119.3 384.9 85.9 585.6 230.1 0.05 3 Sample03
+369.39 205.67 97.01 236.06 84.86 292.39 0.34 4 Sample03
+318.6 144.34 48.13 81.89 64.55 103.94 4.61 5 Sample03
+356.89 131.76 69.32 144.68 612.42 244.05 1.94 6 Sample03
+373.64 149.87 73.69 364.35 620.22 274.16 5.76 7 Sample03
+438.0 176.67 517.33 423.0 277.33 437.33 0.02 8 Sample03
+456.47 368.94 339.69 764.56 534.31 616.89 0.18 9 Sample03
+358.86 110.17 520.31 33.06 61.37 62.34 7.46 10 Sample03
+395.52 201.76 124.0 438.24 675.14 501.81 0.1 11 Sample03
+416.88 238.6 120.19 236.76 187.66 133.17 3.0 12 Sample03
+435.72 195.36 389.95 550.08 631.15 289.23 0.19 13 Sample03
+399.59 136.41 525.46 567.47 69.53 112.63 4.7 14 Sample03
+361.32 113.15 344.55 109.52 71.39 102.73 1.61 15 Sample03
+404.65 196.83 95.23 518.72 130.58 201.29 3.17 16 Sample03
+451.64 196.71 522.26 588.96 117.02 273.98 1.52 17 Sample03
+383.16 121.62 525.61 214.22 63.94 172.91 5.26 18 Sample03
+948.66 979.64 477.18 676.02 492.0 476.04 0.48 19 Sample03
+393.34 154.15 80.74 547.09 620.52 265.13 7.53 20 Sample03
+618.71 977.02 140.44 231.46 216.74 155.19 16.55 21 Sample03
+634.28 434.83 361.97 254.26 193.6 244.19 1.54 22 Sample03
+550.91 992.18 358.58 469.96 366.77 399.73 1.77 23 Sample03
+692.2 478.05 385.86 213.85 182.9 123.52 2.62 24 Sample03
+732.99 1018.5 182.2 275.26 250.19 190.78 13.6 25 Sample03
+971.95 998.45 334.88 363.32 315.37 269.93 1.74 26 Sample03
b
diff -r 8c17aa8032c2 -r bca68066a957 test-data/input.mfi
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/input.mfi Wed May 20 16:04:43 2020 -0400
b
@@ -0,0 +1,27 @@
+Population FSC SSC CD4 CCR7 CD8 CCR3
+1 364 117 520 189 53 72
+2 370 121 523 37 67 187
+3 363 112 512 68 632 483
+4 360 175 84 141 114 520
+5 333 156 56 67 82 109
+6 372 154 75 90 608 251
+7 389 162 83 318 620 304
+8 371 113 517 257 641 504
+9 422 214 138 419 327 641
+10 357 114 521 32 59 68
+11 381 138 85 111 604 565
+12 410 276 119 213 183 161
+13 406 137 516 424 615 306
+14 401 139 526 566 76 108
+15 356 121 322 84 75 110
+16 413 239 104 509 138 201
+17 440 198 509 598 119 289
+18 384 128 524 198 60 195
+19 944 966 490 629 533 541
+20 393 154 82 534 621 267
+21 617 975 145 224 225 173
+22 667 437 389 204 215 283
+23 546 976 366 476 387 448
+24 681 440 392 204 187 132
+25 727 1013 182 269 259 232
+26 960 975 325 343 318 311
b
diff -r 8c17aa8032c2 -r bca68066a957 test-data/input1.flowclr
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/input1.flowclr Wed May 20 16:04:43 2020 -0400
b
b'@@ -0,0 +1,20001 @@\n+FSC\tSSC\tCD4\tCCR7\tCD8\tCCR3\tPopulation\n+449\t157\t551\t129\t169\t292\t18\n+894\t1023\t199\t277\t320\t227\t25\n+262\t73\t437\t69\t0\t146\t10\n+340\t115\t509\t268\t0\t74\t1\n+316\t76\t50\t0\t60\t129\t5\n+394\t144\t83\t138\t335\t194\t12\n+383\t139\t499\t0\t0\t224\t2\n+800\t1023\t239\t284\t288\t280\t25\n+388\t97\t534\t111\t83\t177\t2\n+481\t117\t566\t247\t157\t99\t1\n+652\t997\t118\t236\t250\t300\t25\n+333\t100\t526\t82\t21\t34\t10\n+636\t1023\t162\t290\t242\t261\t25\n+283\t137\t0\t32\t137\t151\t5\n+389\t105\t538\t36\t0\t130\t10\n+684\t1023\t111\t180\t205\t186\t21\n+688\t1023\t156\t255\t233\t77\t21\n+431\t83\t64\t114\t586\t144\t6\n+788\t1023\t167\t258\t158\t241\t25\n+687\t1023\t94\t234\t218\t133\t21\n+676\t1023\t149\t287\t215\t102\t21\n+869\t1023\t223\t285\t277\t388\t26\n+986\t1023\t267\t290\t261\t224\t26\n+603\t1018\t193\t272\t255\t135\t21\n+404\t168\t532\t113\t0\t0\t1\n+661\t501\t418\t184\t256\t248\t22\n+381\t169\t508\t0\t125\t204\t2\n+686\t860\t49\t190\t225\t97\t21\n+402\t202\t117\t90\t693\t316\t6\n+418\t89\t566\t19\t0\t306\t2\n+303\t119\t35\t155\t87\t108\t5\n+402\t184\t70\t111\t627\t309\t6\n+304\t107\t0\t118\t86\t257\t5\n+360\t124\t26\t10\t615\t209\t6\n+372\t118\t558\t125\t0\t120\t1\n+659\t1023\t341\t246\t228\t256\t25\n+720\t1023\t180\t178\t212\t229\t25\n+712\t1002\t228\t163\t282\t195\t25\n+321\t90\t472\t35\t151\t178\t2\n+376\t154\t54\t61\t587\t264\t6\n+744\t1023\t229\t271\t226\t216\t25\n+329\t149\t82\t173\t629\t266\t6\n+447\t153\t524\t161\t138\t197\t18\n+364\t294\t248\t335\t0\t222\t16\n+645\t1023\t177\t179\t282\t254\t25\n+1023\t1023\t456\t557\t482\t445\t19\n+440\t297\t403\t122\t82\t135\t15\n+432\t115\t572\t165\t78\t225\t18\n+366\t112\t299\t0\t23\t98\t15\n+673\t1023\t230\t330\t294\t261\t25\n+707\t1023\t222\t246\t206\t242\t25\n+628\t1023\t161\t288\t241\t234\t25\n+601\t1023\t126\t296\t278\t191\t21\n+347\t157\t531\t0\t42\t49\t10\n+262\t65\t210\t36\t0\t176\t15\n+349\t101\t481\t139\t96\t211\t18\n+596\t1023\t193\t252\t233\t288\t21\n+375\t112\t546\t184\t59\t88\t1\n+436\t141\t123\t229\t611\t218\t7\n+389\t131\t576\t0\t0\t144\t2\n+353\t97\t477\t204\t0\t221\t18\n+400\t149\t91\t143\t639\t310\t7\n+742\t1023\t225\t277\t114\t241\t25\n+747\t1023\t132\t254\t227\t176\t25\n+350\t122\t489\t194\t0\t99\t1\n+407\t131\t535\t209\t0\t57\t1\n+266\t92\t0\t0\t5\t128\t5\n+355\t142\t540\t103\t115\t84\t10\n+387\t123\t529\t116\t115\t0\t1\n+358\t86\t523\t18\t32\t101\t10\n+388\t132\t105\t99\t653\t329\t6\n+305\t165\t509\t126\t0\t63\t1\n+454\t168\t113\t124\t629\t251\t6\n+400\t121\t176\t0\t581\t240\t6\n+405\t230\t115\t233\t632\t289\t7\n+596\t942\t74\t236\t280\t279\t21\n+380\t211\t72\t236\t670\t255\t7\n+392\t127\t546\t204\t47\t105\t1\n+519\t409\t169\t117\t136\t417\t4\n+767\t1023\t196\t278\t266\t192\t25\n+367\t121\t528\t95\t0\t117\t10\n+378\t175\t507\t201\t0\t227\t18\n+664\t668\t359\t287\t268\t166\t22\n+435\t161\t543\t185\t67\t197\t18\n+358\t233\t0\t136\t148\t331\t4\n+633\t977\t95\t250\t175\t187\t21\n+373\t128\t564\t0\t35\t119\t10\n+386\t123\t547\t0\t65\t181\t2\n+319\t110\t497\t77\t101\t0\t10\n+401\t86\t503\t126\t184\t138\t18\n+364\t136\t0\t161\t15\t0\t5\n+741\t1023\t188\t221\t270\t230\t25\n+677\t510\t416\t268\t195\t188\t22\n+311\t212\t17\t22\t91\t146\t5\n+642\t1023\t152\t268\t221\t196\t21\n+739\t395\t291\t219\t174\t75\t24\n+760\t1023\t175\t247\t284\t198\t25\n+410\t168\t528\t125\t0\t211\t18\n+338\t158\t71\t69\t1\t155\t5\n+401\t137\t34\t223\t641\t291\t7\n+780\t853\t198\t256\t230\t270\t25\n+389\t185\t160\t28\t664\t319\t6\n+369\t130\t567\t21\t0\t38\t10\n+359\t119\t60\t55\t660\t217\t6\n+349\t97\t522\t0\t21\t0\t10\n+553\t762\t136\t193\t137\t198\t21\n+476\t91\t554\t0\t0\t102\t10\n+372\t77\t506\t0\t89\t0\t10\n+628\t1023\t202\t285\t305\t61\t21\n+493\t351\t403\t242\t150\t196\t24\n+393\t181\t128\t0\t148\t83\t5\n+400\t143\t554\t109\t89\t115\t1\n+387\t91\t544\t199\t141\t45\t1\n+564\t924\t104\t220\t170\t249\t21\n+673\t237\t124\t79\t648\t268\t7\n+363\t203\t84\t213\t79\t224\t12\n+353\t83\t517\t168\t70\t133\t1\n+378\t157\t577\t0\t68\t205\t2\n+338\t139\t25\t41\t38\t92\t5\n+330\t70\t0\t55\t597\t165\t6\n+558\t280\t421\t143\t113\t226\t24\n+447\t288\t156\t211\t5\t33\t12\n+341\t112\t457\t22\t0\t116\t10\n+757\t1023\t205\t268\t291\t189\t25\n+375\t112\t541\t20\t14\t0\t10\n+657\t1023\t141\t206\t196\t125\t21\n+356\t114\t550\t0\t0\t101\t10\n+700\t1023\t196\t256\t272\t64\t25\n+629\t1023\t189\t174\t253\t149\t21\n+360\t141\t554\t0\t32\t52\t10\n+362\t108\t543\t219\t158\t128\t1\n+337\t112\t511\t107\t65\t178\t2\n+398\t277\t67\t116\t277\t95\t12\n+767\t1023\t157\t205\t212\t95\t25\n+609\t1023\t348\t474\t390\t429\t23\n+369\t96\t532\t255\t0\t212\t18\n+386\t174\t46\t65\t619\t231\t6\n+336\t115\t492\t87\t0\t105\t10\n+469\t164\t580\t94\t50\t12\t10\n+396\t108\t535\t84\t4\t82\t10\n+452\t159\t534\t176\t169\t176\t18\n+410\t129\t537\t107\t0\t67\t1\n+304\t141\t31\t0\t112\t176\t5\n+863\t1023\t242\t349\t309\t330\t26\n+391\t226\t83\t224\t576\t232\t7\n+701\t1023\t77\t158\t258\t111\t21\n+674\t1023\t151\t247\t256\t238\t25\n+309\t70\t73\t137\t287\t110\t5\n+352\t154\t0\t23\t602\t271\t6\n+352\t152\t130\t0\t29\t161\t5\n+542\t1011\t70\t2'..b'653\t800\t119\t209\t182\t110\t21\n+358\t182\t80\t44\t667\t310\t6\n+512\t1023\t125\t168\t262\t201\t21\n+466\t240\t133\t157\t196\t5\t12\n+302\t139\t471\t0\t7\t19\t10\n+361\t114\t533\t0\t0\t275\t2\n+1023\t1023\t263\t311\t246\t309\t26\n+334\t118\t371\t156\t0\t44\t15\n+820\t1023\t294\t313\t318\t305\t26\n+407\t150\t547\t133\t138\t210\t18\n+271\t65\t486\t0\t48\t0\t10\n+364\t121\t541\t49\t94\t229\t2\n+654\t1023\t151\t256\t251\t230\t25\n+366\t143\t555\t195\t0\t15\t1\n+512\t571\t107\t220\t20\t192\t16\n+556\t265\t448\t81\t172\t103\t24\n+424\t228\t43\t132\t616\t310\t7\n+753\t1023\t224\t268\t192\t116\t25\n+360\t96\t533\t15\t109\t138\t2\n+426\t207\t276\t99\t578\t328\t8\n+432\t207\t142\t0\t408\t0\t12\n+640\t580\t445\t287\t171\t207\t22\n+658\t1023\t201\t282\t277\t300\t25\n+666\t1023\t92\t257\t172\t234\t21\n+354\t216\t87\t176\t336\t106\t12\n+356\t176\t42\t0\t170\t134\t5\n+689\t1023\t186\t217\t283\t198\t25\n+346\t115\t516\t155\t0\t132\t1\n+387\t128\t579\t203\t51\t141\t18\n+665\t1023\t122\t229\t165\t78\t21\n+400\t168\t0\t160\t600\t249\t6\n+357\t95\t517\t0\t87\t186\t2\n+373\t158\t534\t228\t53\t103\t1\n+372\t103\t522\t238\t7\t175\t18\n+298\t86\t428\t55\t0\t174\t2\n+348\t131\t546\t6\t0\t55\t10\n+368\t135\t549\t144\t0\t12\t1\n+589\t1023\t333\t446\t322\t395\t23\n+337\t117\t81\t149\t643\t348\t6\n+372\t258\t139\t113\t174\t374\t4\n+827\t1023\t128\t271\t263\t132\t25\n+693\t1023\t179\t292\t201\t287\t25\n+732\t946\t187\t253\t264\t121\t25\n+370\t268\t125\t182\t104\t97\t12\n+554\t761\t111\t293\t224\t233\t21\n+411\t188\t522\t185\t124\t208\t18\n+356\t165\t123\t85\t672\t282\t6\n+353\t92\t508\t124\t141\t66\t1\n+684\t902\t144\t248\t244\t173\t21\n+402\t185\t135\t497\t774\t472\t20\n+380\t144\t527\t156\t62\t31\t1\n+765\t1023\t202\t261\t254\t258\t25\n+1023\t1023\t500\t508\t445\t550\t19\n+1023\t1023\t538\t456\t358\t450\t19\n+652\t921\t131\t204\t107\t223\t21\n+480\t181\t541\t223\t133\t294\t18\n+651\t1023\t174\t340\t182\t19\t21\n+619\t1023\t133\t263\t239\t231\t21\n+374\t93\t520\t0\t0\t138\t10\n+547\t760\t70\t0\t162\t224\t21\n+427\t278\t113\t238\t385\t170\t12\n+753\t1023\t156\t296\t263\t300\t25\n+640\t942\t122\t265\t237\t242\t21\n+348\t94\t507\t300\t109\t22\t1\n+599\t1023\t135\t321\t261\t212\t21\n+591\t948\t188\t176\t247\t130\t21\n+386\t92\t515\t201\t32\t79\t1\n+423\t156\t562\t8\t120\t144\t2\n+581\t1023\t146\t214\t153\t145\t21\n+779\t1023\t208\t308\t295\t319\t25\n+1022\t174\t372\t274\t253\t397\t22\n+395\t112\t554\t213\t64\t109\t1\n+398\t283\t104\t418\t52\t211\t16\n+459\t215\t559\t287\t198\t109\t18\n+366\t160\t536\t218\t156\t122\t1\n+380\t197\t123\t74\t638\t287\t6\n+624\t1023\t133\t241\t194\t265\t21\n+400\t163\t518\t139\t69\t225\t18\n+380\t131\t564\t126\t0\t36\t1\n+283\t146\t65\t180\t134\t0\t5\n+379\t112\t173\t0\t646\t223\t6\n+752\t1023\t129\t258\t239\t245\t25\n+409\t206\t179\t149\t641\t290\t7\n+635\t522\t409\t225\t206\t227\t22\n+680\t1023\t234\t196\t249\t165\t25\n+702\t458\t425\t271\t150\t46\t24\n+734\t511\t416\t176\t152\t200\t22\n+409\t171\t20\t29\t574\t212\t6\n+413\t251\t83\t12\t21\t64\t5\n+737\t1023\t180\t287\t284\t283\t25\n+431\t175\t361\t239\t132\t0\t1\n+353\t114\t50\t0\t621\t271\t6\n+408\t141\t559\t0\t132\t196\t2\n+531\t798\t102\t253\t209\t75\t21\n+619\t1023\t205\t294\t235\t212\t25\n+667\t1023\t187\t234\t288\t219\t25\n+392\t247\t261\t675\t198\t451\t9\n+311\t102\t514\t99\t110\t146\t2\n+460\t125\t559\t0\t0\t73\t10\n+400\t99\t564\t212\t139\t96\t1\n+633\t1023\t168\t232\t214\t195\t21\n+404\t166\t556\t177\t58\t46\t1\n+678\t1023\t210\t305\t274\t229\t25\n+364\t174\t98\t36\t615\t267\t6\n+372\t118\t543\t109\t3\t52\t1\n+672\t1023\t188\t292\t133\t249\t25\n+643\t1023\t216\t273\t296\t169\t25\n+445\t134\t552\t0\t143\t94\t10\n+400\t151\t556\t179\t191\t181\t18\n+701\t1023\t226\t239\t247\t291\t25\n+365\t157\t122\t0\t667\t233\t6\n+385\t88\t542\t89\t180\t60\t10\n+358\t87\t482\t10\t0\t55\t10\n+710\t487\t449\t284\t139\t96\t24\n+371\t134\t510\t19\t14\t351\t2\n+264\t69\t463\t0\t0\t80\t10\n+428\t103\t512\t263\t0\t70\t1\n+614\t490\t462\t229\t120\t325\t22\n+466\t219\t513\t117\t0\t174\t18\n+674\t522\t400\t208\t194\t194\t22\n+324\t110\t506\t66\t32\t128\t10\n+394\t115\t28\t0\t557\t193\t6\n+411\t175\t63\t139\t618\t323\t7\n+611\t303\t345\t92\t88\t100\t24\n+450\t239\t160\t99\t195\t210\t12\n+356\t129\t33\t90\t602\t94\t6\n+605\t1006\t213\t204\t220\t220\t21\n+773\t1023\t237\t275\t210\t167\t25\n+429\t142\t570\t272\t0\t141\t18\n+263\t33\t417\t0\t0\t194\t2\n+347\t148\t26\t0\t630\t300\t6\n+364\t121\t528\t182\t70\t194\t18\n+339\t87\t483\t0\t43\t74\t10\n+692\t1009\t147\t285\t115\t156\t21\n+596\t988\t133\t305\t113\t273\t21\n+847\t1023\t244\t216\t316\t101\t25\n+386\t135\t531\t166\t184\t117\t1\n+621\t970\t37\t127\t238\t274\t21\n+298\t99\t482\t88\t0\t130\t10\n+658\t1023\t117\t165\t208\t188\t21\n+326\t172\t76\t12\t149\t77\t5\n+360\t84\t532\t57\t138\t102\t10\n+886\t1023\t229\t361\t290\t234\t26\n+634\t972\t248\t277\t271\t215\t25\n+332\t164\t0\t73\t246\t210\t5\n+447\t121\t548\t0\t0\t393\t2\n+391\t119\t74\t0\t628\t238\t6\n+340\t100\t528\t245\t0\t8\t1\n+385\t99\t179\t115\t513\t163\t6\n+400\t157\t126\t99\t638\t313\t6\n+431\t97\t527\t156\t122\t197\t18\n'
b
diff -r 8c17aa8032c2 -r bca68066a957 test-data/input2.flowclr
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/input2.flowclr Wed May 20 16:04:43 2020 -0400
b
b'@@ -0,0 +1,20001 @@\n+FSC\tSSC\tCD4\tCCR7\tCD8\tCCR3\tPopulation\n+289\t56\t438\t0\t626\t480\t3\n+352\t153\t30\t147\t483\t386\t6\n+383\t190\t156\t228\t734\t408\t7\n+261\t62\t432\t121\t598\t555\t3\n+451\t120\t537\t338\t568\t201\t13\n+373\t104\t3\t110\t621\t584\t11\n+418\t105\t561\t0\t610\t562\t3\n+358\t185\t0\t292\t641\t327\t7\n+733\t970\t139\t227\t293\t259\t25\n+765\t1023\t71\t239\t233\t253\t25\n+762\t957\t143\t158\t271\t255\t25\n+406\t191\t513\t122\t646\t264\t3\n+695\t1023\t168\t251\t234\t283\t25\n+336\t178\t0\t146\t128\t537\t4\n+668\t1023\t167\t306\t302\t253\t25\n+330\t135\t493\t72\t734\t496\t3\n+618\t1015\t201\t266\t284\t141\t21\n+662\t1023\t204\t241\t273\t149\t25\n+383\t109\t49\t50\t575\t451\t11\n+427\t206\t169\t258\t725\t402\t7\n+369\t152\t216\t569\t738\t684\t20\n+420\t209\t26\t368\t651\t303\t7\n+554\t218\t601\t336\t629\t300\t13\n+425\t229\t89\t416\t616\t373\t20\n+493\t355\t516\t252\t625\t568\t8\n+674\t1023\t211\t243\t259\t310\t25\n+286\t88\t0\t63\t556\t491\t11\n+318\t83\t477\t469\t627\t546\t8\n+297\t65\t489\t324\t618\t518\t8\n+358\t101\t496\t0\t646\t543\t3\n+429\t168\t515\t462\t675\t321\t13\n+364\t105\t504\t298\t602\t460\t8\n+319\t469\t415\t202\t571\t405\t8\n+532\t1023\t390\t528\t406\t507\t23\n+561\t287\t396\t72\t381\t279\t2\n+422\t150\t522\t351\t626\t353\t13\n+448\t149\t529\t288\t612\t270\t13\n+361\t143\t0\t132\t656\t362\t6\n+377\t96\t504\t163\t603\t524\t8\n+837\t1023\t211\t231\t316\t280\t25\n+702\t907\t176\t206\t271\t236\t21\n+367\t130\t570\t0\t661\t568\t3\n+302\t95\t508\t205\t643\t494\t8\n+403\t216\t159\t361\t158\t554\t9\n+427\t215\t188\t0\t711\t381\t6\n+743\t1023\t217\t316\t306\t278\t25\n+746\t339\t238\t433\t692\t433\t20\n+409\t104\t545\t278\t631\t480\t8\n+345\t67\t499\t581\t682\t524\t13\n+292\t171\t69\t115\t70\t463\t4\n+314\t152\t84\t0\t0\t514\t4\n+824\t1023\t220\t273\t315\t179\t25\n+554\t1023\t143\t255\t219\t283\t21\n+700\t998\t193\t261\t294\t148\t25\n+732\t1023\t204\t314\t322\t279\t25\n+360\t84\t467\t425\t577\t278\t13\n+425\t136\t558\t193\t622\t586\t8\n+301\t135\t49\t66\t574\t499\t11\n+356\t146\t511\t110\t635\t287\t3\n+390\t119\t528\t386\t580\t251\t13\n+654\t931\t169\t259\t334\t220\t21\n+385\t255\t102\t211\t671\t449\t7\n+589\t1023\t187\t203\t270\t189\t21\n+678\t1023\t0\t251\t177\t250\t21\n+410\t123\t528\t305\t710\t429\t8\n+362\t90\t514\t292\t642\t531\t8\n+543\t934\t127\t153\t283\t199\t21\n+739\t587\t416\t244\t300\t158\t24\n+406\t98\t497\t428\t621\t364\t13\n+895\t1023\t201\t307\t281\t279\t26\n+330\t123\t7\t230\t577\t247\t6\n+384\t158\t83\t62\t614\t300\t6\n+685\t1023\t197\t257\t209\t278\t25\n+395\t163\t531\t0\t618\t434\t3\n+350\t128\t483\t352\t642\t514\t8\n+339\t119\t124\t127\t546\t556\t11\n+357\t107\t516\t66\t679\t560\t3\n+1023\t1023\t420\t305\t336\t355\t26\n+620\t894\t88\t189\t210\t272\t21\n+618\t970\t394\t238\t179\t201\t21\n+678\t954\t143\t286\t280\t114\t21\n+544\t766\t122\t184\t279\t236\t21\n+416\t138\t120\t358\t578\t228\t7\n+425\t100\t167\t229\t582\t600\t11\n+333\t95\t516\t229\t591\t443\t8\n+396\t147\t554\t263\t608\t280\t13\n+331\t140\t27\t51\t39\t552\t4\n+689\t1023\t204\t267\t316\t276\t25\n+564\t810\t151\t89\t250\t253\t21\n+282\t70\t494\t158\t497\t546\t3\n+378\t127\t550\t189\t629\t555\t8\n+396\t182\t181\t323\t541\t509\t7\n+627\t1011\t239\t262\t314\t225\t25\n+319\t139\t45\t78\t131\t480\t4\n+324\t123\t17\t73\t637\t603\t11\n+398\t95\t555\t173\t643\t518\t8\n+445\t1023\t426\t492\t402\t540\t23\n+671\t1023\t113\t249\t281\t283\t25\n+384\t223\t0\t200\t621\t273\t6\n+780\t1023\t237\t227\t287\t64\t25\n+408\t141\t72\t272\t645\t621\t11\n+672\t1023\t164\t214\t258\t273\t25\n+626\t932\t66\t256\t207\t301\t21\n+398\t111\t118\t165\t589\t531\t11\n+687\t927\t137\t266\t263\t141\t21\n+342\t139\t82\t122\t305\t595\t4\n+736\t393\t454\t252\t235\t324\t22\n+311\t102\t491\t118\t632\t474\t3\n+318\t110\t503\t46\t643\t523\t3\n+623\t1023\t159\t266\t253\t197\t21\n+416\t106\t547\t347\t668\t489\t8\n+350\t91\t93\t199\t590\t577\t11\n+403\t158\t186\t222\t604\t540\t11\n+362\t202\t128\t187\t597\t241\t6\n+628\t886\t205\t244\t172\t201\t21\n+656\t1023\t231\t241\t251\t104\t21\n+731\t981\t141\t207\t273\t165\t25\n+340\t224\t49\t449\t548\t782\t9\n+699\t1023\t259\t233\t266\t220\t25\n+392\t148\t43\t35\t595\t575\t11\n+942\t1023\t199\t308\t335\t193\t26\n+312\t164\t35\t103\t0\t461\t4\n+822\t1023\t202\t311\t252\t308\t25\n+683\t457\t339\t241\t182\t180\t24\n+683\t1023\t180\t263\t277\t261\t25\n+397\t174\t25\t20\t654\t616\t11\n+324\t77\t487\t0\t623\t518\t3\n+371\t146\t511\t36\t648\t414\t3\n+399\t162\t144\t64\t622\t589\t11\n+682\t1023\t157\t221\t257\t233\t25\n+590\t922\t199\t196\t271\t146\t21\n+393\t105\t506\t253\t497\t251\t13\n+633\t1023\t41\t145\t256\t162\t21\n+550\t232\t350\t249\t197\t556\t18\n+355\t99\t523\t31\t646\t507\t3\n+434\t202\t88\t311\t725\t360\t7\n+696\t1023\t222\t263\t293\t283\t25\n+725\t345\t375\t211\t267\t260\t22\n+678\t1023\t163\t273\t259\t286\t25\n+559\t831\t132\t272\t323\t237\t21\n+298\t110\t506\t382\t669\t443\t8\n+334\t117\t542\t4\t628\t522\t3\n+681\t1023\t206\t236\t252\t223\t25\n+638\t1023\t167\t225\t290\t234\t21\n+297\t101\t0\t33\t579\t305\t6\n+359\t1'..b'2\t232\t24\n+363\t83\t464\t526\t458\t398\t13\n+404\t143\t538\t282\t581\t229\t13\n+535\t1023\t133\t259\t238\t118\t21\n+454\t1023\t240\t324\t338\t257\t21\n+430\t212\t534\t498\t646\t266\t13\n+290\t78\t445\t508\t645\t476\t13\n+431\t165\t549\t489\t659\t263\t13\n+350\t110\t536\t136\t638\t609\t3\n+434\t169\t89\t212\t630\t664\t11\n+681\t282\t338\t196\t221\t147\t24\n+466\t779\t167\t101\t125\t188\t21\n+330\t176\t81\t67\t47\t499\t4\n+409\t138\t550\t347\t649\t324\t13\n+595\t962\t186\t253\t220\t172\t21\n+704\t986\t218\t244\t283\t207\t25\n+382\t119\t539\t354\t615\t558\t8\n+406\t181\t541\t566\t661\t196\t13\n+654\t1023\t171\t304\t320\t271\t25\n+367\t174\t75\t300\t598\t294\t7\n+383\t119\t536\t205\t660\t582\t8\n+329\t92\t510\t240\t652\t574\t8\n+473\t217\t161\t90\t0\t601\t4\n+556\t278\t479\t118\t264\t627\t2\n+655\t1023\t211\t250\t296\t291\t25\n+361\t120\t96\t24\t600\t557\t11\n+468\t1023\t366\t419\t409\t500\t23\n+303\t89\t91\t90\t602\t563\t11\n+315\t169\t39\t0\t0\t476\t4\n+315\t99\t521\t140\t650\t499\t3\n+419\t126\t81\t186\t624\t677\t11\n+748\t1023\t177\t287\t236\t140\t25\n+342\t100\t49\t52\t569\t507\t11\n+730\t1023\t217\t327\t278\t308\t25\n+389\t197\t76\t26\t626\t337\t6\n+593\t900\t215\t209\t285\t248\t21\n+685\t1023\t137\t278\t318\t109\t25\n+454\t149\t550\t469\t585\t294\t13\n+380\t235\t117\t220\t651\t327\t7\n+358\t53\t476\t302\t674\t485\t8\n+603\t1023\t404\t506\t414\t494\t23\n+315\t56\t511\t0\t629\t522\t3\n+719\t1023\t166\t268\t277\t308\t25\n+405\t140\t66\t184\t617\t286\t6\n+645\t1023\t119\t169\t236\t256\t21\n+626\t1023\t136\t283\t180\t248\t21\n+836\t1023\t180\t305\t203\t193\t25\n+656\t1023\t249\t310\t291\t353\t25\n+726\t372\t175\t299\t674\t367\t7\n+684\t1023\t147\t276\t200\t282\t25\n+638\t927\t130\t216\t243\t256\t21\n+354\t133\t523\t120\t694\t565\t3\n+374\t125\t527\t241\t650\t497\t8\n+718\t1023\t189\t235\t278\t259\t25\n+735\t1023\t188\t199\t287\t253\t25\n+381\t156\t87\t57\t646\t606\t11\n+406\t151\t547\t332\t645\t536\t8\n+402\t241\t118\t203\t139\t593\t4\n+405\t106\t539\t202\t624\t504\t8\n+419\t118\t527\t555\t685\t349\t13\n+618\t548\t436\t238\t196\t289\t22\n+281\t107\t19\t211\t54\t460\t4\n+425\t130\t540\t219\t612\t495\t8\n+387\t153\t106\t35\t563\t649\t11\n+398\t87\t505\t241\t611\t528\t8\n+720\t1023\t194\t262\t184\t298\t25\n+699\t880\t166\t238\t248\t235\t21\n+409\t149\t32\t216\t612\t638\t11\n+395\t145\t84\t344\t632\t361\t7\n+394\t109\t473\t219\t659\t355\t8\n+595\t1023\t210\t133\t164\t104\t21\n+387\t139\t77\t0\t632\t583\t11\n+393\t163\t513\t285\t574\t308\t13\n+382\t108\t540\t89\t643\t555\t3\n+565\t932\t176\t209\t268\t76\t21\n+349\t79\t492\t0\t618\t410\t3\n+653\t1023\t187\t202\t250\t282\t25\n+364\t147\t497\t278\t490\t558\t8\n+563\t219\t498\t343\t638\t582\t8\n+787\t1023\t259\t195\t292\t350\t25\n+566\t634\t173\t253\t273\t248\t12\n+403\t107\t529\t457\t623\t371\t13\n+784\t1023\t198\t300\t313\t295\t25\n+983\t1023\t245\t338\t372\t318\t26\n+348\t104\t503\t49\t483\t454\t3\n+448\t222\t130\t278\t732\t443\t7\n+1023\t1023\t519\t526\t592\t406\t19\n+354\t93\t535\t217\t703\t509\t8\n+464\t210\t557\t538\t615\t268\t13\n+395\t103\t108\t87\t583\t593\t11\n+402\t193\t86\t364\t70\t498\t4\n+366\t106\t184\t4\t631\t601\t11\n+360\t110\t500\t86\t513\t554\t3\n+334\t64\t501\t0\t632\t473\t3\n+411\t190\t15\t299\t623\t412\t7\n+737\t986\t151\t234\t159\t210\t25\n+330\t82\t505\t440\t536\t238\t13\n+416\t161\t549\t436\t648\t303\t13\n+401\t187\t534\t295\t579\t192\t13\n+871\t1023\t538\t465\t679\t266\t19\n+324\t103\t475\t559\t584\t511\t13\n+331\t148\t74\t95\t0\t530\t4\n+665\t1023\t198\t178\t276\t283\t25\n+401\t143\t60\t99\t539\t562\t11\n+390\t133\t497\t616\t590\t240\t13\n+708\t975\t175\t270\t257\t96\t25\n+374\t100\t501\t47\t607\t504\t3\n+357\t91\t470\t128\t618\t604\t3\n+484\t527\t183\t214\t256\t285\t12\n+686\t1023\t153\t263\t335\t176\t25\n+409\t146\t542\t0\t669\t444\t3\n+370\t172\t107\t81\t578\t319\t6\n+611\t1023\t200\t306\t266\t298\t25\n+653\t1023\t123\t236\t265\t241\t21\n+333\t87\t480\t509\t681\t462\t13\n+614\t816\t125\t165\t184\t117\t21\n+333\t96\t503\t460\t584\t221\t13\n+362\t183\t113\t270\t604\t227\t7\n+776\t564\t356\t271\t270\t223\t24\n+637\t1023\t185\t299\t259\t296\t25\n+795\t1023\t243\t266\t311\t247\t25\n+415\t107\t481\t403\t545\t288\t13\n+721\t950\t157\t204\t276\t259\t25\n+464\t310\t113\t193\t615\t265\t6\n+668\t400\t415\t202\t230\t229\t22\n+407\t109\t554\t22\t691\t466\t3\n+704\t1023\t297\t277\t294\t121\t25\n+603\t1020\t209\t222\t290\t220\t21\n+577\t1017\t174\t235\t224\t145\t21\n+822\t1023\t155\t171\t274\t185\t25\n+332\t97\t503\t229\t665\t522\t8\n+693\t1023\t166\t259\t307\t211\t25\n+394\t111\t545\t290\t710\t510\t8\n+457\t226\t0\t106\t131\t573\t4\n+554\t1023\t137\t0\t262\t145\t21\n+330\t116\t507\t1\t647\t558\t3\n+619\t983\t105\t151\t199\t257\t21\n+442\t129\t531\t413\t591\t214\t13\n+384\t160\t541\t267\t661\t527\t8\n+687\t1023\t197\t250\t221\t195\t25\n+438\t100\t97\t169\t636\t461\t11\n+383\t168\t105\t183\t620\t581\t11\n+312\t71\t482\t164\t639\t427\t3\n+541\t1023\t166\t207\t266\t103\t21\n+778\t893\t114\t242\t232\t248\t25\n+341\t185\t10\t228\t117\t561\t4\n+694\t370\t391\t254\t311\t330\t22\n'
b
diff -r 8c17aa8032c2 -r bca68066a957 test-data/input3.flowclr
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/input3.flowclr Wed May 20 16:04:43 2020 -0400
b
b'@@ -0,0 +1,20001 @@\n+FSC\tSSC\tCD4\tCCR7\tCD8\tCCR3\tPopulation\n+363\t76\t550\t200\t0\t127\t1\n+372\t126\t519\t44\t51\t148\t2\n+1023\t1023\t289\t401\t362\t254\t26\n+770\t1023\t175\t361\t225\t237\t25\n+384\t111\t522\t121\t0\t138\t1\n+602\t578\t385\t286\t222\t131\t24\n+788\t1023\t216\t310\t270\t294\t25\n+420\t211\t552\t479\t0\t62\t14\n+668\t1019\t73\t193\t227\t132\t21\n+417\t134\t542\t597\t22\t107\t14\n+755\t1023\t232\t305\t294\t204\t25\n+374\t128\t536\t493\t0\t173\t14\n+332\t71\t495\t0\t60\t34\t10\n+561\t874\t136\t254\t245\t241\t21\n+423\t146\t542\t284\t98\t81\t1\n+261\t74\t477\t0\t5\t72\t10\n+355\t120\t58\t348\t649\t276\t7\n+595\t857\t169\t193\t246\t100\t21\n+749\t662\t434\t318\t216\t247\t22\n+450\t142\t559\t187\t0\t32\t1\n+365\t129\t515\t0\t0\t30\t10\n+370\t181\t76\t357\t74\t314\t4\n+651\t655\t339\t274\t129\t132\t24\n+305\t149\t74\t0\t118\t182\t5\n+375\t85\t285\t137\t0\t0\t15\n+274\t149\t0\t164\t0\t38\t5\n+399\t187\t102\t625\t226\t365\t16\n+602\t1023\t167\t257\t204\t273\t21\n+293\t240\t263\t222\t0\t6\t15\n+671\t929\t112\t215\t182\t170\t21\n+436\t149\t90\t425\t659\t308\t7\n+317\t89\t492\t266\t0\t99\t1\n+363\t146\t6\t527\t194\t64\t16\n+858\t1023\t252\t325\t217\t105\t25\n+266\t152\t91\t173\t44\t12\t5\n+318\t114\t495\t230\t10\t0\t1\n+337\t83\t502\t103\t3\t149\t2\n+619\t977\t159\t241\t274\t5\t21\n+869\t1023\t177\t296\t252\t323\t25\n+734\t388\t470\t143\t93\t238\t22\n+361\t114\t522\t86\t3\t0\t10\n+372\t113\t551\t109\t104\t153\t2\n+333\t239\t363\t529\t121\t263\t17\n+749\t1023\t219\t260\t225\t179\t25\n+353\t194\t77\t352\t663\t182\t7\n+649\t1023\t373\t478\t420\t453\t23\n+416\t118\t535\t291\t91\t38\t1\n+716\t515\t423\t240\t203\t201\t24\n+413\t197\t106\t511\t130\t306\t16\n+370\t110\t517\t252\t66\t141\t18\n+341\t131\t20\t438\t609\t265\t7\n+327\t88\t520\t53\t207\t111\t10\n+340\t75\t520\t0\t0\t33\t10\n+447\t153\t551\t575\t0\t113\t14\n+399\t88\t554\t266\t0\t167\t18\n+380\t96\t484\t557\t138\t173\t14\n+993\t1023\t195\t318\t335\t263\t26\n+375\t147\t554\t168\t0\t72\t1\n+358\t130\t0\t0\t299\t76\t5\n+284\t96\t448\t126\t0\t147\t1\n+744\t1023\t189\t313\t240\t168\t25\n+610\t1023\t158\t232\t231\t234\t21\n+633\t1023\t144\t244\t275\t200\t21\n+477\t584\t84\t403\t131\t161\t12\n+370\t117\t532\t59\t9\t169\t2\n+709\t923\t193\t233\t246\t76\t21\n+342\t152\t533\t92\t66\t161\t2\n+306\t129\t10\t66\t82\t106\t5\n+349\t165\t80\t201\t301\t207\t12\n+650\t1023\t108\t178\t150\t61\t21\n+316\t106\t0\t337\t600\t236\t7\n+535\t435\t368\t226\t10\t83\t24\n+320\t78\t500\t185\t0\t135\t1\n+364\t189\t158\t363\t396\t206\t7\n+367\t134\t552\t0\t129\t208\t2\n+367\t109\t537\t198\t49\t185\t18\n+650\t1023\t113\t289\t213\t258\t25\n+354\t211\t117\t75\t116\t205\t5\n+599\t1023\t131\t186\t252\t181\t21\n+528\t355\t334\t248\t180\t219\t22\n+560\t933\t181\t239\t307\t137\t21\n+262\t88\t3\t189\t0\t165\t5\n+708\t1023\t41\t300\t174\t227\t25\n+532\t862\t158\t113\t259\t179\t21\n+358\t102\t515\t0\t70\t18\t10\n+648\t438\t442\t286\t206\t49\t24\n+410\t141\t518\t323\t182\t3\t1\n+399\t62\t498\t125\t0\t29\t1\n+784\t549\t343\t23\t201\t152\t24\n+342\t169\t102\t195\t24\t146\t5\n+616\t691\t378\t268\t230\t276\t22\n+585\t1009\t164\t124\t223\t236\t21\n+678\t1023\t155\t197\t140\t30\t21\n+378\t113\t76\t464\t624\t173\t20\n+682\t1023\t185\t293\t187\t285\t25\n+402\t143\t568\t262\t0\t68\t1\n+339\t150\t512\t542\t26\t115\t14\n+607\t898\t56\t278\t217\t194\t21\n+333\t93\t524\t129\t0\t103\t1\n+369\t153\t62\t426\t656\t263\t7\n+345\t108\t523\t205\t0\t0\t1\n+615\t747\t199\t285\t260\t263\t21\n+389\t247\t91\t0\t93\t44\t5\n+365\t114\t517\t0\t35\t83\t10\n+362\t83\t547\t236\t39\t87\t1\n+776\t1023\t172\t253\t259\t268\t25\n+368\t120\t539\t198\t20\t84\t1\n+735\t1023\t253\t304\t315\t151\t25\n+350\t138\t54\t284\t652\t243\t7\n+390\t162\t554\t29\t0\t62\t10\n+466\t183\t71\t676\t699\t371\t20\n+370\t120\t244\t117\t85\t19\t15\n+361\t132\t537\t223\t0\t163\t18\n+730\t1023\t187\t307\t303\t208\t25\n+636\t979\t127\t275\t257\t133\t21\n+405\t124\t27\t464\t634\t252\t20\n+329\t109\t108\t315\t546\t216\t7\n+582\t1023\t135\t227\t156\t148\t21\n+348\t120\t501\t39\t74\t201\t2\n+356\t66\t467\t93\t304\t155\t2\n+385\t206\t60\t439\t675\t364\t7\n+351\t116\t520\t549\t43\t71\t14\n+836\t429\t537\t214\t79\t160\t24\n+386\t162\t61\t530\t701\t354\t20\n+413\t180\t119\t476\t670\t272\t20\n+357\t119\t551\t281\t70\t30\t1\n+348\t74\t545\t222\t0\t0\t1\n+414\t154\t0\t354\t606\t178\t7\n+490\t169\t570\t628\t108\t95\t14\n+384\t112\t537\t150\t75\t172\t18\n+754\t1009\t121\t180\t203\t86\t21\n+394\t82\t537\t85\t63\t73\t10\n+942\t1023\t230\t307\t299\t216\t26\n+401\t211\t95\t519\t678\t321\t20\n+686\t1023\t151\t236\t274\t242\t25\n+622\t946\t120\t196\t158\t177\t21\n+615\t1023\t184\t84\t230\t179\t21\n+709\t1019\t181\t275\t148\t236\t25\n+458\t210\t598\t527\t58\t172\t14\n+357\t146\t65\t366\t651\t257\t7\n+621\t1023\t70\t244\t245\t249\t21\n+437\t206\t530\t654\t0\t211\t17\n+974\t1023\t242\t319\t318\t221\t26\n+320\t189\t319\t396\t172\t221\t16\n+323\t72\t482\t186\t0\t156\t18\n+823\t1023\t131\t272\t167\t232\t25\n+660\t1023\t229\t290\t246\t28\t21\n+297\t119\t444\t0\t0\t104\t10\n+393\t117\t82\t503\t658\t196\t20\n+586\t834\t175\t274'..b'26\n+365\t150\t530\t172\t0\t37\t1\n+378\t121\t16\t354\t660\t290\t7\n+363\t133\t52\t398\t674\t255\t7\n+775\t1023\t149\t265\t217\t181\t25\n+334\t82\t502\t71\t27\t162\t2\n+383\t173\t75\t397\t676\t243\t7\n+681\t354\t407\t284\t266\t243\t22\n+386\t133\t545\t103\t93\t112\t2\n+416\t110\t532\t173\t148\t63\t1\n+636\t1023\t132\t243\t243\t203\t21\n+405\t152\t96\t299\t656\t301\t7\n+639\t1023\t132\t308\t183\t280\t25\n+629\t946\t125\t256\t211\t47\t21\n+429\t104\t230\t714\t692\t738\t9\n+700\t1023\t211\t292\t271\t252\t25\n+568\t323\t441\t389\t118\t316\t22\n+323\t97\t507\t183\t120\t51\t1\n+671\t1023\t213\t362\t301\t0\t25\n+329\t134\t94\t146\t0\t173\t5\n+388\t125\t19\t433\t591\t254\t7\n+360\t183\t0\t266\t649\t231\t7\n+331\t78\t489\t41\t0\t131\t2\n+634\t897\t167\t226\t210\t252\t21\n+292\t108\t22\t0\t0\t79\t5\n+336\t111\t0\t316\t655\t258\t7\n+434\t141\t489\t167\t162\t185\t18\n+560\t845\t137\t252\t178\t150\t21\n+396\t145\t568\t147\t0\t128\t1\n+645\t936\t138\t185\t223\t222\t21\n+663\t1023\t155\t260\t230\t151\t21\n+954\t1023\t207\t339\t286\t306\t26\n+674\t972\t195\t257\t173\t45\t21\n+381\t105\t548\t103\t85\t177\t2\n+333\t212\t123\t717\t655\t302\t20\n+600\t1023\t110\t214\t245\t181\t21\n+360\t113\t509\t223\t5\t114\t1\n+600\t1023\t213\t261\t235\t219\t21\n+754\t995\t185\t289\t42\t7\t21\n+427\t157\t86\t174\t569\t270\t6\n+325\t91\t508\t39\t6\t11\t10\n+372\t171\t68\t463\t0\t277\t16\n+402\t215\t527\t646\t191\t44\t14\n+709\t1023\t365\t530\t393\t377\t23\n+291\t126\t76\t0\t114\t159\t5\n+568\t673\t187\t320\t185\t230\t22\n+323\t79\t458\t0\t15\t170\t2\n+406\t161\t536\t605\t0\t212\t14\n+420\t127\t519\t0\t23\t90\t10\n+605\t1023\t237\t166\t258\t187\t21\n+382\t124\t511\t134\t37\t95\t1\n+702\t511\t377\t256\t160\t267\t22\n+596\t1023\t160\t192\t250\t182\t21\n+431\t211\t111\t495\t658\t274\t20\n+703\t1023\t135\t316\t128\t103\t21\n+357\t123\t529\t62\t149\t21\t10\n+772\t1023\t223\t266\t188\t226\t25\n+567\t1023\t130\t251\t253\t104\t21\n+356\t95\t489\t126\t0\t128\t1\n+390\t129\t568\t75\t124\t90\t10\n+691\t1023\t229\t340\t209\t256\t25\n+311\t116\t0\t145\t24\t185\t5\n+381\t130\t101\t619\t649\t367\t20\n+376\t116\t549\t163\t27\t33\t1\n+705\t329\t430\t149\t119\t0\t24\n+670\t1023\t122\t266\t228\t199\t21\n+711\t962\t148\t235\t274\t256\t25\n+641\t1023\t160\t259\t194\t181\t21\n+556\t1023\t135\t247\t279\t164\t21\n+571\t1023\t179\t245\t160\t215\t21\n+392\t100\t515\t65\t0\t45\t10\n+340\t105\t499\t69\t0\t82\t10\n+636\t967\t185\t158\t282\t74\t21\n+373\t132\t500\t217\t34\t48\t1\n+929\t1023\t431\t319\t260\t282\t26\n+345\t120\t507\t0\t0\t124\t10\n+293\t106\t505\t133\t104\t63\t1\n+359\t96\t529\t222\t127\t150\t18\n+381\t176\t551\t222\t0\t156\t18\n+263\t191\t440\t451\t47\t140\t14\n+1013\t1023\t450\t456\t401\t351\t26\n+441\t331\t131\t99\t79\t131\t12\n+317\t129\t514\t0\t143\t39\t10\n+373\t94\t517\t0\t168\t59\t10\n+602\t1023\t100\t189\t188\t93\t21\n+356\t120\t491\t546\t0\t123\t14\n+375\t118\t554\t71\t159\t109\t10\n+387\t95\t494\t196\t152\t0\t1\n+326\t68\t54\t201\t582\t256\t6\n+717\t1023\t230\t275\t270\t195\t25\n+306\t80\t455\t370\t0\t42\t1\n+411\t282\t149\t127\t82\t213\t12\n+405\t122\t116\t436\t653\t360\t7\n+633\t906\t180\t248\t271\t263\t21\n+364\t104\t541\t0\t213\t168\t2\n+313\t133\t48\t167\t117\t61\t5\n+294\t58\t478\t120\t17\t35\t1\n+313\t78\t459\t247\t0\t59\t1\n+389\t148\t563\t146\t154\t85\t1\n+305\t145\t57\t91\t92\t6\t5\n+637\t1023\t154\t242\t291\t226\t21\n+655\t1023\t194\t238\t261\t257\t25\n+632\t1023\t205\t268\t268\t234\t25\n+391\t187\t542\t31\t107\t245\t2\n+305\t122\t38\t0\t130\t112\t5\n+358\t250\t85\t130\t157\t15\t12\n+446\t134\t559\t255\t37\t10\t1\n+386\t138\t531\t74\t133\t167\t2\n+367\t106\t535\t4\t47\t49\t10\n+391\t84\t521\t217\t143\t76\t1\n+357\t110\t515\t171\t93\t38\t1\n+374\t122\t552\t0\t23\t93\t10\n+360\t124\t501\t469\t0\t129\t14\n+533\t1023\t349\t446\t357\t406\t23\n+332\t74\t105\t328\t559\t232\t7\n+466\t232\t146\t351\t263\t85\t12\n+405\t87\t517\t538\t0\t183\t14\n+597\t1023\t143\t242\t241\t208\t21\n+333\t111\t523\t123\t0\t0\t1\n+788\t1023\t202\t311\t298\t227\t25\n+599\t995\t128\t266\t260\t178\t21\n+377\t123\t62\t574\t629\t198\t20\n+719\t1023\t183\t260\t267\t153\t25\n+680\t1023\t159\t287\t251\t255\t25\n+379\t97\t535\t51\t0\t84\t10\n+383\t225\t63\t307\t0\t405\t4\n+597\t987\t222\t220\t201\t244\t21\n+360\t82\t14\t376\t23\t1\t16\n+592\t1023\t104\t276\t212\t164\t21\n+651\t368\t378\t283\t21\t91\t24\n+304\t132\t73\t138\t67\t52\t5\n+380\t160\t543\t273\t0\t68\t1\n+305\t143\t0\t52\t45\t162\t5\n+405\t132\t552\t417\t22\t142\t14\n+366\t99\t509\t0\t102\t183\t2\n+704\t1023\t122\t250\t310\t204\t25\n+713\t1023\t169\t282\t280\t140\t25\n+380\t198\t97\t647\t662\t234\t20\n+577\t273\t318\t268\t329\t260\t22\n+372\t80\t490\t584\t0\t0\t14\n+801\t980\t156\t331\t228\t182\t25\n+402\t153\t38\t594\t656\t289\t20\n+317\t82\t32\t131\t323\t45\t5\n+630\t1023\t101\t188\t157\t153\t21\n+670\t1023\t185\t162\t250\t249\t25\n+338\t108\t536\t0\t0\t119\t10\n+964\t1023\t262\t348\t358\t266\t26\n+639\t823\t129\t263\t178\t177\t21\n+362\t145\t24\t123\t310\t158\t12\n+360\t223\t65\t352\t600\t403\t7\n+1014\t1023\t410\t349\t265\t286\t26\n+656\t1023\t149\t307\t240\t175\t25\n'
b
diff -r 8c17aa8032c2 -r bca68066a957 test-data/out.html
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out.html Wed May 20 16:04:43 2020 -0400
[
b'@@ -0,0 +1,282 @@\n+<!DOCTYPE html>\n+<html>\n+<head lang="en">\n+<title>CrossSample Overview</title>\n+<meta charset="UTF-8">\n+<meta HTTP-EQUIV="Pragma" CONTENT="no-cache">\n+<meta name="viewport" content="width=device-width, initial-scale=1.0">\n+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css"/>\n+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/css/select2.min.css"/>\n+<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/v/dt/pdfmake-0.1.18/dt-1.10.12/b-1.2.1/b-colvis-1.2.1/b-html5-1.2.1/cr-1.3.2/fc-3.2.2/fh-3.1.2/r-2.1.0/rr-1.1.2/sc-1.4.2/se-1.2.0/datatables.min.css"/>\n+<link rel="stylesheet" href="/static/flowtools/css/parallelCoordinates.css"/>\n+\n+<script type="text/javascript" src="https://cdn.datatables.net/v/dt/pdfmake-0.1.18/dt-1.10.12/b-1.2.1/b-colvis-1.2.1/b-html5-1.2.1/cr-1.3.2/fc-3.2.2/fh-3.1.2/r-2.1.0/rr-1.1.2/sc-1.4.2/se-1.2.0/datatables.min.js"></script>\n+<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>\n+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js" type="text/javascript"></script>\n+<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/js/select2.full.min.js" type="text/javascript"></script>\n+<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js" type="text/javascript"></script>\n+<script src="https://cdn.plot.ly/plotly-1.0.0.min.js" type="text/javascript"></script>\n+<script src="/static/flowtools/js/csOverview.js" type="text/javascript"></script>\n+<script src="/static/flowtools/js/crossSamplePlots.js" type="text/javascript"></script>\n+<script src="/static/flowtools/js/pCoordMFIstats.js" type="text/javascript"></script>\n+<script src="/static/flowtools/js/pCoordCSstats.js" type="text/javascript"></script>\n+<script src="/static/flowtools/js/color_palette.js" type="text/javascript"></script>\n+<script src="/static/flowtools/js/boxplots.js" type="text/javascript"></script>\n+\n+<style>\n+#input{font-family:Calibri,Arial}\n+table.dataTable tbody td.dt-body-right {\n+    text-align: right;\n+}\n+#div{padding:5px;width:150px;height:100px;text-align:center}\n+table{width:100%;border:0px solid;border-collapse:collapse;text-align:center;}\n+th{background-color:#3e6db0;color:#fff;padding:5px}\n+</style>\n+</head>\n+\n+<body>\n+<div class="container-fluid">\n+    <div class="row" style="padding-bottom:10px;min-height:500px;">\n+        <div  class="col-md-12">\n+            <ul class="nav nav-tabs tabs-main">\n+                <li class="homeTab active" data-value="prop"><a href="#prop" data-toggle="tab">Population Distribution</a></li>\n+                <li class="homeTab" data-value="stackedA"><a href="#stackedA" data-toggle="tab">Stacked Plot</a></li>\n+                <li class="homeTab" data-value="pcoord"><a href="#pcoord" data-toggle="tab">Parallel Coordinates Population Summary</a></li>\n+                <li class="homeTab" data-value="pcoordMFI"><a href="#pcoordMFI" data-toggle="tab">Parallel Coordinates MFI Summary</a></li>\n+                <li class="homeTab" data-value="csstats"><a href="#boxplot" data-toggle="tab">Summary Statistics Boxplots</a></li>\n+            </ul>\n+\n+            <div class="tab-content">\n+                <div class="tab-pane active" id="prop" style="min-height:500px;">\n+                    <div class="row">\n+                        <div id="propDiv">Population Distribution</div>\n+                    </div>\n+                    <div class="row">\n+                    &nbsp;&nbsp;&nbsp;&nbsp;Edit population names below:\n+                    <div id="popnamesDiv"></div>\n+                    </div>\n+                </div>\n+\n+                <div class="tab-pane" id="stackedA" style="min-height:500px;">\n+                    <div class="col-md-12 chartDiv">\n+                        <div id="plotDivA" class="col-md-10" style="height:100%;"></div>\n+\n+                        <div id="popDivA" class="col-md-2" style="heigh'..b'>\n+                          <input type="checkbox" unchecked id="displayMFIC"/>&nbsp;Display MFI<br><br>\n+                          <button id="changeDisplayC" class="igbtn">View per marker</button><br><br>\n+                          <div id="markerWarning" style="display:none;">\n+                            <div class="alert alert-info alert-dismissible fade in" role="alert">\n+                              <button type="button" class="close" data-dismiss="alert" aria-label="Close">\n+                                <span aria-hidden="true">&times;</span></button>\n+                                  Only 5 markers can be displayed at most.\n+                            </div>\n+                          </div>\n+                          <div id="outlierWarning">\n+                            <div class="alert alert-info alert-dismissible fade in" role="alert">\n+                              <button type="button" class="close" data-dismiss="alert" aria-label="Close">\n+                                <span aria-hidden="true">&times;</span></button>\n+                                  The number of outliers is too large to display. Representation shows randomly downsampled outliers.\n+                            </div>\n+                          </div>\n+                        </div>\n+\n+                        <div id="plotDivC" class="col-md-8" style="height:100%;"></div>\n+\n+                        <div id="popDivC" class="col-md-2" style="height:100%;">\n+                            <button id="updateDisplayC" class="igbtn">Reset Display</button>\n+                            <table id="popTableC" class="table table-condensed table-bordered igtable">\n+                                <thead>\n+                                    <tr>\n+                                        <th><input type="checkbox" checked id="popSelectAllC"/></th>\n+                                        <th>Pop. Names</th>\n+                                        <th>Color</th>\n+                                     </tr>\n+                                </thead>\n+                                <tbody>\n+                                </tbody>\n+                            </table>\n+                        </div>\n+                    </div>\n+                </div>\n+            </div>\n+        </div>\n+    </div>\n+</div>\n+\n+\n+</div>\n+</div>\n+<script>\n+var poppropLoaded = false;\n+var stackedALoaded = false;\n+var pCoordLoaded = false;\n+var pCoordMFILoaded = false;\n+var boxplotLoaded = false;\n+\n+$().ready(function() {\n+    $(document).on(\'shown.bs.tab\',\'a[data-toggle="tab"]\', function(e) {\n+      var tab = e.target.getAttribute("href");\n+      if (tab == \'#prop\') {\n+        if (poppropLoaded) {\n+            return true;\n+        }\n+        poppropLoaded = true;\n+        displayProp();\n+      }\n+      if (tab == \'#stackedA\') {\n+        if (stackedALoaded) {\n+            displayPopulationLegend(configAreaplot);\n+            updatePlot(configAreaplot);\n+            return true;\n+        }\n+        stackedALoaded = true;\n+        displayStackedAreaPlot();\n+      }\n+      if (tab == \'#pcoord\') {\n+        if (pCoordLoaded) {\n+            displaySmpTable();\n+            displayTableGrid();\n+            return true;\n+        }\n+        pCoordLoaded = true;\n+        displayParallelCoordinates();\n+      }\n+      if (tab == \'#pcoordMFI\') {\n+        if (pCoordMFILoaded) {\n+            displayPopTablem();\n+            displaySmpTablem();\n+            displayTableGridm();\n+            return true;\n+        }\n+        pCoordMFILoaded = true;\n+        displayParallelCoordinatesMFI();\n+      }\n+      if (tab == \'#boxplot\') {\n+        if (boxplotLoaded) {\n+            displayPopulationLegend(configBoxplot);\n+            displayMarkerTable(configBoxplot);\n+            updateBoxplot(configBoxplot);\n+            return true;\n+        }\n+        boxplotLoaded = true;\n+        displayBoxplot();\n+      }\n+    });\n+\n+    poppropLoaded = true;\n+    displayProp();\n+});\n+</script>\n+</body>\n+</html>\n'