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

Changeset 1:b5453d07f740 (2020-07-29)
Previous changeset 0:8283ff163ba6 (2017-02-27)
Commit message:
"planemo upload for repository https://github.com/ImmPortDB/immport-galaxy-tools/tree/master/flowtools/flow_overview commit 65373effef15809f3db0e5f9603ef808f4110aa3"
added:
color_palette.py
css/parallelCoordinates.css
flowstatlib.py
genFlowOverview.py
genFlowOverview.xml
getOntology.R
js/Editor-1.5.6/css/dataTables.editor.css
js/Editor-1.5.6/css/editor.bootstrap.css
js/Editor-1.5.6/css/editor.bootstrap.min.css
js/Editor-1.5.6/css/editor.dataTables.css
js/Editor-1.5.6/css/editor.dataTables.min.css
js/Editor-1.5.6/css/editor.foundation.css
js/Editor-1.5.6/css/editor.foundation.min.css
js/Editor-1.5.6/css/editor.jqueryui.css
js/Editor-1.5.6/css/editor.jqueryui.min.css
js/Editor-1.5.6/css/scss/bubble.scss
js/Editor-1.5.6/css/scss/datatable.scss
js/Editor-1.5.6/css/scss/datetime.scss
js/Editor-1.5.6/css/scss/envelope.scss
js/Editor-1.5.6/css/scss/fields.scss
js/Editor-1.5.6/css/scss/inline.scss
js/Editor-1.5.6/css/scss/lightbox.scss
js/Editor-1.5.6/css/scss/main.scss
js/Editor-1.5.6/css/scss/mixins.scss
js/Editor-1.5.6/css/scss/upload.scss
js/Editor-1.5.6/images/ajax-loader-small.gif
js/Editor-1.5.6/images/ajax-loader.gif
js/Editor-1.5.6/images/calender.png
js/Editor-1.5.6/images/close.png
js/Editor-1.5.6/images/shadow_left.png
js/Editor-1.5.6/images/shadow_right.png
js/Editor-1.5.6/js/dataTables.editor.js
js/Editor-1.5.6/js/dataTables.editor.min.js
js/Editor-1.5.6/js/editor.bootstrap.js
js/Editor-1.5.6/js/editor.bootstrap.min.js
js/Editor-1.5.6/js/editor.foundation.js
js/Editor-1.5.6/js/editor.foundation.min.js
js/Editor-1.5.6/js/editor.jqueryui.js
js/Editor-1.5.6/js/editor.jqueryui.min.js
js/boxplotsFlow.js
js/color_palette.js
js/overview.js
js/parallelCoordinates.js
js/profileCLs.js
js/scatter2D.js
js/scatter3D.js
js/scatterMFI.js
static/images/flowtools/bpflock.png
static/images/flowtools/edit_summary.png
static/images/flowtools/overview.png
static/images/flowtools/pcflock.png
static/images/flowtools/profileCL_go.png
static/images/flowtools/scatter2D.png
static/images/flowtools/scatter3D.png
static/images/flowtools/summary.png
templates/genOverview.template
templates/genOverviewCL.template
test-data/input.flowclr
test-data/out1/boxplotData.json
test-data/out1/flow.mfi
test-data/out1/flow.mfi_pop
test-data/out1/flow.overview
test-data/out1/flow.sample
test-data/out1/m0_m0_90X90.png
test-data/out1/m0_m1_90X90.png
test-data/out1/m1_m0_90X90.png
test-data/out1/m1_m1_90X90.png
test-data/out1/out.html
test-data/out2/CLprofiles.txt
test-data/out2/boxplotData.json
test-data/out2/flow.mfi
test-data/out2/flow.mfi_pop
test-data/out2/flow.overview
test-data/out2/flow.sample
test-data/out2/flowcl_pop01.pdf
test-data/out2/flowcl_pop01.txt
test-data/out2/flowcl_pop04.pdf
test-data/out2/flowcl_pop04.txt
test-data/out2/flowcl_pop07.pdf
test-data/out2/flowcl_pop07.txt
test-data/out2/flowcl_pop13.pdf
test-data/out2/flowcl_pop13.txt
test-data/out2/flowcl_pop14.pdf
test-data/out2/flowcl_pop14.txt
test-data/out2/flowcl_pop15.pdf
test-data/out2/flowcl_pop15.txt
test-data/out2/flowcl_pop19.pdf
test-data/out2/flowcl_pop19.txt
test-data/out2/flowcl_pop20.pdf
test-data/out2/flowcl_pop20.txt
test-data/out2/flowcl_pop23.pdf
test-data/out2/flowcl_pop23.txt
test-data/out2/m0_m0_90X90.png
test-data/out2/m0_m1_90X90.png
test-data/out2/m1_m0_90X90.png
test-data/out2/m1_m1_90X90.png
test-data/out2/out.html
test-data/out2/scores.txt
test-data/profile.flowscore
removed:
flow_overview/color_palette.py
flow_overview/flowstatlib.py
flow_overview/genFlowOverview.py
flow_overview/genFlowOverview.xml
flow_overview/getOntology.R
flow_overview/static/flowtools/css/flowCL.css
flow_overview/static/flowtools/css/parallelCoordinates.css
flow_overview/static/flowtools/js/boxplotsFlow.js
flow_overview/static/flowtools/js/color_palette.js
flow_overview/static/flowtools/js/overview.js
flow_overview/static/flowtools/js/parallelCoordinates.js
flow_overview/static/flowtools/js/profileCLs.js
flow_overview/static/flowtools/js/scatter2D.js
flow_overview/static/flowtools/js/scatter3D.js
flow_overview/static/flowtools/js/scatterMFI.js
flow_overview/static/images/flowtools/bpflock.png
flow_overview/static/images/flowtools/edit_summary.png
flow_overview/static/images/flowtools/overview.png
flow_overview/static/images/flowtools/pcflock.png
flow_overview/static/images/flowtools/profileCL_go.png
flow_overview/static/images/flowtools/scatter2D.png
flow_overview/static/images/flowtools/scatter3D.png
flow_overview/static/images/flowtools/summary.png
flow_overview/templates/genOverview.template
flow_overview/templates/genOverviewCL.template
flow_overview/test-data/input.flowclr
flow_overview/test-data/out1/boxplotData.json
flow_overview/test-data/out1/flow.mfi
flow_overview/test-data/out1/flow.mfi_pop
flow_overview/test-data/out1/flow.overview
flow_overview/test-data/out1/flow.sample
flow_overview/test-data/out1/m0_m0_90X90.png
flow_overview/test-data/out1/m0_m1_90X90.png
flow_overview/test-data/out1/m1_m0_90X90.png
flow_overview/test-data/out1/m1_m1_90X90.png
flow_overview/test-data/out1/out.html
flow_overview/test-data/out2/CLprofiles.txt
flow_overview/test-data/out2/boxplotData.json
flow_overview/test-data/out2/flow.mfi
flow_overview/test-data/out2/flow.mfi_pop
flow_overview/test-data/out2/flow.overview
flow_overview/test-data/out2/flow.sample
flow_overview/test-data/out2/flowcl_pop01.pdf
flow_overview/test-data/out2/flowcl_pop01.txt
flow_overview/test-data/out2/flowcl_pop04.pdf
flow_overview/test-data/out2/flowcl_pop04.txt
flow_overview/test-data/out2/flowcl_pop07.pdf
flow_overview/test-data/out2/flowcl_pop07.txt
flow_overview/test-data/out2/flowcl_pop13.pdf
flow_overview/test-data/out2/flowcl_pop13.txt
flow_overview/test-data/out2/flowcl_pop14.pdf
flow_overview/test-data/out2/flowcl_pop14.txt
flow_overview/test-data/out2/flowcl_pop15.pdf
flow_overview/test-data/out2/flowcl_pop15.txt
flow_overview/test-data/out2/flowcl_pop19.pdf
flow_overview/test-data/out2/flowcl_pop19.txt
flow_overview/test-data/out2/flowcl_pop20.pdf
flow_overview/test-data/out2/flowcl_pop20.txt
flow_overview/test-data/out2/flowcl_pop23.pdf
flow_overview/test-data/out2/flowcl_pop23.txt
flow_overview/test-data/out2/m0_m0_90X90.png
flow_overview/test-data/out2/m0_m1_90X90.png
flow_overview/test-data/out2/m1_m0_90X90.png
flow_overview/test-data/out2/m1_m1_90X90.png
flow_overview/test-data/out2/out.html
flow_overview/test-data/out2/scores.txt
flow_overview/test-data/profile.flowscore
b
diff -r 8283ff163ba6 -r b5453d07f740 color_palette.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/color_palette.py Wed Jul 29 17:03:53 2020 -0400
[
@@ -0,0 +1,48 @@
+######################################################################
+#                  Copyright (c) 2016 Northrop Grumman.
+#                          All rights reserved.
+######################################################################
+
+color_palette = [
+    '#000000',  # Black 0
+    '#FF0000',  # Red 1
+    '#FFFF00',  # Yellow 2
+    '#008000',  # Dark Green 3
+    '#0000FF',   # Blue 4
+    '#FFA500',  # Orange 5
+    '#8A2BE2',  # BlueViolet 6
+    '#808000',  # Olive 7
+    '#00FFFF',  # Cyan 8
+    '#FF00FF',  # Magenta 9
+    '#00FF00',  # Green 10
+    '#000080',  # Navy Blue 11
+    '#F08080',  # Light Coral 12
+    '#800080',  # Purple 13
+    '#F0E68C',  # Khaki 14
+    '#8FBC8F',  # Dark Sea Green 15
+    '#2F4F4F',  # Dark Slate Grey 16
+    '#008080',  # Teal 17
+    '#9932CC',  # Dark Orchid 18
+    '#FF7F50',  # Coral 19
+    '#FFD700',  # Gold 20
+    '#008B8B',  # Cyan 4 21
+    '#800000',  # Maroon 22
+    '#5F9EA0',  # Cadet Blue 23
+    '#FFC0CB',  # Pink 24
+    '#545454',  # Grey 25
+    '#7FFFD4',  # Aquamarine 26
+    '#ADD8E6',  # Light Blue 27
+    '#DB7093',  # Medium Violet Red 28
+    '#CD853F',  # Tan 3 29
+    '#4169E1',  # Royal Blue 30
+    '#708090',  # Slate Grey 31
+    '#4682B4',  # Steel Blue 32
+    '#D8BFD8',  # Thistle 33
+    '#F5DEB3',  # Wheat 34
+    '#9ACD32',  # Yellow Green 35
+    '#BDB76B',  # Dark Khaki 36
+    '#8B008B',  # Magenta 4 37
+    '#556B2F',  # Dark Olive Green 38
+    '#00CED1',  # Dark Turquoise 39
+    '#FF1493'   # Deep Pink
+]
b
diff -r 8283ff163ba6 -r b5453d07f740 css/parallelCoordinates.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/css/parallelCoordinates.css Wed Jul 29 17:03:53 2020 -0400
b
@@ -0,0 +1,170 @@
+/*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 8283ff163ba6 -r b5453d07f740 flow_overview/color_palette.py
--- a/flow_overview/color_palette.py Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,48 +0,0 @@
-######################################################################
-#                  Copyright (c) 2016 Northrop Grumman.
-#                          All rights reserved.
-######################################################################
-
-color_palette = [
-    '#000000',  # Black 0
-    '#FF0000',  # Red 1
-    '#FFFF00',  # Yellow 2
-    '#008000',  # Dark Green 3
-    '#0000FF',   # Blue 4
-    '#FFA500',  # Orange 5
-    '#8A2BE2',  # BlueViolet 6
-    '#808000',  # Olive 7
-    '#00FFFF',  # Cyan 8
-    '#FF00FF',  # Magenta 9
-    '#00FF00',  # Green 10
-    '#000080',  # Navy Blue 11
-    '#F08080',  # Light Coral 12
-    '#800080',  # Purple 13
-    '#F0E68C',  # Khaki 14
-    '#8FBC8F',  # Dark Sea Green 15
-    '#2F4F4F',  # Dark Slate Grey 16
-    '#008080',  # Teal 17
-    '#9932CC',  # Dark Orchid 18
-    '#FF7F50',  # Coral 19
-    '#FFD700',  # Gold 20
-    '#008B8B',  # Cyan 4 21
-    '#800000',  # Maroon 22
-    '#5F9EA0',  # Cadet Blue 23
-    '#FFC0CB',  # Pink 24
-    '#545454',  # Grey 25
-    '#7FFFD4',  # Aquamarine 26
-    '#ADD8E6',  # Light Blue 27
-    '#DB7093',  # Medium Violet Red 28
-    '#CD853F',  # Tan 3 29
-    '#4169E1',  # Royal Blue 30
-    '#708090',  # Slate Grey 31
-    '#4682B4',  # Steel Blue 32
-    '#D8BFD8',  # Thistle 33
-    '#F5DEB3',  # Wheat 34
-    '#9ACD32',  # Yellow Green 35
-    '#BDB76B',  # Dark Khaki 36
-    '#8B008B',  # Magenta 4 37
-    '#556B2F',  # Dark Olive Green 38
-    '#00CED1',  # Dark Turquoise 39
-    '#FF1493'   # Deep Pink
-]
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/flowstatlib.py
--- a/flow_overview/flowstatlib.py Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,100 +0,0 @@
-######################################################################
-#                  Copyright (c) 2016 Northrop Grumman.
-#                          All rights reserved.
-######################################################################
-from __future__ import print_function
-import sys
-import pandas as pd
-from scipy.stats import gmean
-from argparse import ArgumentParser
-
-
-def gen_overview_stats(file_name):
-    flow_stats = {}
-    fcs = pd.read_table(file_name)
-    (events, columns) = fcs.shape
-    flow_stats['fcs'] = fcs
-    flow_stats['events'] = events
-    flow_stats['columns'] = columns - 1
-    flow_stats['data'] = fcs.iloc[:, :-1]
-    flow_stats['population'] = fcs.iloc[:, -1:].iloc[:, 0]
-    flow_stats['population_freq'] = flow_stats['population'].value_counts()
-    flow_stats['population_sample'] = (flow_stats['population_freq'] * (20000/float(events))).round(decimals=0)
-    flow_stats['population_freq_sort'] = flow_stats['population_freq'].sort_index()
-    flow_stats['population_per'] = (flow_stats['population'].value_counts(normalize=True) * 100).round(decimals=2)
-    flow_stats['population_per_sort'] = flow_stats['population_per'].sort_index()
-    flow_stats['population_all'] = pd.concat([flow_stats['population_freq_sort'], flow_stats['population_per_sort']], axis=1)
-    flow_stats['population_all'].columns = ['Count', 'Percentage']
-    flow_stats['min'] = flow_stats['data'].values.min()
-    flow_stats['max'] = flow_stats['data'].values.max()
-    flow_stats['markers'] = list(flow_stats['data'].columns)
-    flow_stats['mfi'] = fcs.groupby('Population').mean().round(decimals=2)
-    flow_stats['mfi_pop'] = pd.merge(flow_stats['mfi'], flow_stats['population_all'], left_index=True, right_index=True)
-    flow_stats['mfi_pop']['Population'] = flow_stats['mfi_pop'].index
-    flow_stats['gmfi'] = fcs.groupby('Population').agg(lambda x: gmean(list(x))).round(decimals=2)
-    flow_stats['gmfi_pop'] = pd.merge(flow_stats['gmfi'], flow_stats['population_all'], left_index=True, right_index=True)
-    flow_stats['gmfi_pop']['Population'] = flow_stats['gmfi_pop'].index
-    flow_stats['mdfi'] = fcs.groupby('Population').median().round(decimals=2)
-    flow_stats['mdfi_pop'] = pd.merge(flow_stats['mdfi'], flow_stats['population_all'], left_index=True, right_index=True)
-    flow_stats['mdfi_pop']['Population'] = flow_stats['mdfi_pop'].index
-
-    #
-    # If the number of events is less than 20000, then return
-    # the complete data set,
-    # Otherwise sample the data to only return 20000 events.
-    if events <= 20000:
-        flow_stats['sample'] = fcs
-    else:
-        fcs_np = fcs.values
-        sample_data = []
-        pop_found = {}
-        for i in range(0, events):
-            population_number = fcs_np[i][columns-1]
-            if population_number in pop_found:
-                if pop_found[population_number] < flow_stats['population_sample'][population_number]:
-                    pop_found[population_number] += 1
-                    sample_data.append(fcs_np[i])
-            else:
-                pop_found[population_number] = 1
-                sample_data.append(fcs_np[i])
-        flow_stats['sample'] = pd.DataFrame(sample_data)
-        flow_stats['sample'].columns = fcs.columns
-
-    flow_stats['sample_data'] = flow_stats['sample'].iloc[:, :-1]
-    flow_stats['sample_population'] = flow_stats['sample'].iloc[:, -1:].iloc[:, 0]
-
-    return flow_stats
-
-
-if __name__ == '__main__':
-    parser = ArgumentParser(
-             prog="flowstats",
-             description="Gets statistics on FLOCK run")
-
-    parser.add_argument(
-            '-i',
-            dest="input_file",
-            required=True,
-            help="File locations for flow clr file.")
-
-    parser.add_argument(
-            '-o',
-            dest="out_file",
-            required=True,
-            help="Path to the directory for the output file.")
-    args = parser.parse_args()
-
-    flow_stats = gen_overview_stats(args.input_file)
-    with open(args.out_file, "w") as outf:
-        outf.write("Events: ", flow_stats['events'])
-        outf.write("Min: ", flow_stats['min'])
-        outf.write("Max: ", flow_stats['max'])
-        outf.write("Columns: ", flow_stats['columns'])
-        outf.write("Markers: ", flow_stats['markers'])
-        outf.write("Population: ", flow_stats['population'])
-        outf.write("Population Freq: ", flow_stats['population_freq'])
-        outf.write("Population Sample: ", flow_stats['population_sample'])
-        outf.write("Population Per: ", flow_stats['population_per'])
-        outf.write("Sample Data contains ", len(flow_stats['sample']), " events")
-        outf.write("MIF_POP ", flow_stats['mfi_pop'])
-    sys.exit(0)
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/genFlowOverview.py
--- a/flow_overview/genFlowOverview.py Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,330 +0,0 @@\n-#!/usr/bin/env python\n-######################################################################\n-#                  Copyright (c) 2016 Northrop Grumman.\n-#                          All rights reserved.\n-######################################################################\n-from __future__ import print_function\n-import sys\n-import os\n-import pandas as pd\n-import logging\n-import fileinput\n-\n-from argparse import ArgumentParser\n-from jinja2 import Environment, FileSystemLoader\n-from collections import defaultdict\n-\n-from color_palette import color_palette\n-from flowstatlib import gen_overview_stats\n-import matplotlib as mpl\n-mpl.use(\'Agg\')\n-import matplotlib.pyplot as plt\n-\n-\n-profile_key = {\n-    "1": "-",\n-    "2": "lo",\n-    "3": "+",\n-    "4": "hi"\n-}\n-\n-\n-# flow CL functions\n-def run_flowCL(phenotype, output_txt, output_pdf, tool):\n-    run_command = " ". join(["Rscript --slave --vanilla", tool, "--args",\n-                             output_txt, phenotype])\n-    os.system(run_command)\n-\n-    get_graph = " ".join(["mv flowCL_results/*.pdf", output_pdf])\n-    os.system(get_graph)\n-    return\n-\n-\n-def generate_flowCL_query(list_markers, list_types):\n-    if (len(list_markers) != len(list_types)):\n-        return("pb with headers")\n-    query = []\n-    # go through both lists, remove fsc/ssc\n-    for i in range(1, len(list_markers)):\n-        if not list_markers[i].startswith("FSC") and not list_markers[i].startswith("SSC"):\n-            query.append(list_markers[i].upper())\n-            query.append(profile_key[list_types[i]])\n-    # return concatenated string\n-    return("".join(query))\n-\n-\n-def translate_profiles(input_file, tool_dir, html_dir):\n-    tool = "/".join([tool_dir, "getOntology.R"])\n-    html_table = "".join([html_dir, "/CLprofiles.txt"])\n-    score_table = "".join(["cp ", input_file, " ", html_dir, "/scores.txt"])\n-    os.system(score_table)\n-\n-    # read profile\n-    with open(input_file, "r") as flock_profiles, open(html_table, "w") as out:\n-        headers = flock_profiles.readline()\n-        headers = headers.strip()\n-        markers = headers.split("\\t")[:-2]\n-        counter = 0\n-\n-        out.write("Population\\tFlowCL Query\\tNb Results\\tLink to PDF\\t")\n-        out.write("Top Result Label\\tTop Result Score\\tTop Result CL\\n")\n-        queries = {}\n-        # create marker query for each population\n-        for lines in flock_profiles:\n-            lines = lines.strip("\\n")\n-            pop_profile = lines.split("\\t")[:-2]\n-            flowcl_query = generate_flowCL_query(markers, pop_profile)\n-            counter += 1\n-            nb_results = "0"\n-            top_label = "no_match"\n-            top_score = "NA"\n-            top_CL = "NA"\n-            pdf_link = "NA"\n-\n-            # check if query was run before\n-            if flowcl_query not in queries:\n-                # create filenames for results & graphs\n-                txt = "".join(["flowcl_pop", str(counter).zfill(2), ".txt"])\n-                text_result = "/".join([html_dir, txt])\n-                graph = "".join(["flowcl_pop", str(counter).zfill(2), ".pdf"])\n-                graph_output = "/".join([html_dir, graph])\n-                # run flowCL for each marker profile\n-                run_flowCL(flowcl_query, text_result, graph_output, tool)\n-\n-                # test that text file exists if not results are all NAs:\n-                if os.path.isfile(text_result):\n-                    with open(text_result, "r") as res:\n-                        for line in res:\n-                            if line.startswith("Score"):\n-                                data = line.split(") ")\n-                                top_score = data[2][:-2]\n-                                tot_results = len(data) - 2\n-                                nb_results = str(tot_results)\n-                                if tot_results == 5:\n-                                    if len(data[6].split("+")) > 1:\n-                                        nb_res'..b'"w") as flow_mfi_file:\n-        flow_stats[args.mfi_calc].to_csv(flow_mfi_file, sep="\\t", float_format=\'%.0f\')\n-\n-    mpop = "_".join([args.mfi_calc, "pop"])\n-    flow_mfi_pop_file_name = args.output_directory + "/flow.mfi_pop"\n-    with open(flow_mfi_pop_file_name, "w") as flow_mfi_pop_file:\n-        flow_stats[mpop].to_csv(flow_mfi_pop_file, sep="\\t", index=False, float_format="%.2f")\n-\n-    # box plot data\n-    boxplot_data = args.output_directory + "/boxplotData.json"\n-    resampled = get_boxplot_stats(args.input_file, flow_mfi_file_name, boxplot_data)\n-\n-    # Generate the Images  -- eventually we should change that over to D3\n-    fcm = flow_stats[\'sample_data\'].values\n-    colors = []\n-    for i, j in enumerate(flow_stats[\'sample_population\']):\n-        colors.append(color_palette[j])\n-\n-    for i in range(flow_stats[\'columns\']):\n-        for j in range(flow_stats[\'columns\']):\n-            file_name = "m" + str(i) + "_m" + str(j)\n-            ax = plt.subplot(1, 1, 1)\n-            plt.subplots_adjust(left=0.0, bottom=0.0, right=1.0, top=1.0, wspace=0.0, hspace=0.0)\n-            plt.scatter(fcm[:, i], fcm[:, j], s=1, c=colors, edgecolors=\'none\')\n-            plt.axis([0, 1024, 0, 1024])\n-            plt.xticks([])\n-            plt.yticks([])\n-            F = plt.gcf()\n-            F.set_size_inches(1, 1)\n-            F.set_dpi(90)\n-            png_file = file_name + "_90X90.png"\n-            F.savefig(args.output_directory + "/" + png_file)\n-            plt.clf()\n-\n-    flow_overview_file_name = args.output_directory + "/flow.overview"\n-    with open(flow_overview_file_name, "w") as flow_overview_file:\n-        flow_overview_file.write("<table>\\n")\n-        flow_overview_file.write("<tr><td>&nbsp;</td>\\n")\n-        for i in range(flow_stats[\'columns\']):\n-            flow_overview_file.write("<td>" + flow_stats[\'markers\'][i] + "</td>\\n")\n-\n-        for i in range(flow_stats[\'columns\']):\n-            flow_overview_file.write("<tr>\\n")\n-            flow_overview_file.write("<td>" + flow_stats[\'markers\'][i] + "</td>\\n")\n-            for j in range(flow_stats[\'columns\']):\n-                file_name = "m" + str(j) + "_m" + str(i)\n-                image_file = file_name + "_90X90.png"\n-                flow_overview_file.write(\'<td><img src="\' + image_file + \'"/></td>\')\n-            flow_overview_file.write("</tr>\\n")\n-\n-        flow_overview_file.write("</table>\\n</body>\\n<html>\\n")\n-\n-    if resampled:\n-        to_find = \'<div id="outlierWarning" style="display:none;">\'\n-        to_replace = \'<div id="outlierWarning">\'\n-        ## yay python 2.7\n-        ro = fileinput.input(args.output_file, inplace=True, backup=".bak")\n-        for roline in ro:\n-            print(roline.replace(to_find, to_replace), end=\'\')\n-        ro.close()\n-\n-\n-if __name__ == "__main__":\n-    parser = ArgumentParser(\n-             prog="genOverview",\n-             description="Generate an overview plot of Flow results.")\n-\n-    parser.add_argument(\n-            \'-i\',\n-            dest="input_file",\n-            required=True,\n-            help="File location for the Flow Text file.")\n-\n-    parser.add_argument(\n-            \'-o\',\n-            dest="output_file",\n-            required=True,\n-            help="File location for the HTML output file.")\n-\n-    parser.add_argument(\n-            \'-d\',\n-            dest="output_directory",\n-            required=True,\n-            help="Directory location for the Flow Plot.")\n-\n-    parser.add_argument(\n-            \'-M\',\n-            dest="mfi_calc",\n-            required=True,\n-            help="what to calculate for centroids.")\n-\n-    parser.add_argument(\n-            \'-p\',\n-            dest="scores",\n-            help="File location for FLOCK population scores.")\n-\n-    parser.add_argument(\n-            \'-t\',\n-            dest="tool_directory",\n-            required=True,\n-            help="Location of the Tool Directory.")\n-\n-    args = parser.parse_args()\n-\n-    gen_flow_overview(args)\n-    sys.exit(0)\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/genFlowOverview.xml
--- a/flow_overview/genFlowOverview.xml Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,191 +0,0 @@\n-<tool id="gen_flow_overview" name="Generate overview information" version="1.0">\n-  <description>of FLOCK flow analysis</description>\n-  <requirements>\n-    <requirement type="package" version="1.5.0">matplotlib</requirement>\n-    <requirement type="package" version="1.10.2">numpy</requirement>\n-    <requirement type="package" version="0.16.0">scipy</requirement>\n-    <requirement type="package" version="0.17.1">pandas</requirement>\n-    <requirement type="package" version="2.8">jinja2</requirement>\n-    <requirement type="package" version="3.3.0">r</requirement>\n-    <requirement type="package" version="1.11.2">bioconductor-flowcl</requirement>\n-  </requirements>\n-  <stdio>\n-    <exit_code range="2" level="fatal" description="There was a problem running flowCL. You might want to check your marker names - See stderr for more details." />\n-    <exit_code range="3:" level="fatal" description="See stderr for more details." />\n-  </stdio>\n-  <command><![CDATA[\n-   #if $ontology.runcl == "no"\n-    python $__tool_directory__/genFlowOverview.py -i "${input}" -o "${html_file}" -M "${mfi}" -d "${html_file.files_path}" -t $__tool_directory__\n-   #else\n-    python $__tool_directory__/genFlowOverview.py -i "${input}" -o "${html_file}" -M "${mfi}" -d "${html_file.files_path}" -t $__tool_directory__ -p "${scores}"\n-   #end if\n-  ]]>\n-  </command>\n-  <inputs>\n-    <param format="flowclr" name="input" type="data" label="Flow Result File"/>\n-    <param name="mfi" type="select" label="Calculate centroids using:">\n-      <option value="mfi" selected="true">Mean Fluorescence Intensity</option>\n-      <option value="mdfi">Median Fluorescence Intensity</option>\n-      <option value="gmfi">Geometric Mean Fluorescence Intensity</option>\n-    </param>\n-    <conditional name="ontology">\n-      <param name="runcl" type="select" label="Associate FLOCK population score profiles with Cell Ontology?" help="using FlowCL">\n-        <option value="no">No, thank you</option>\n-        <option value="yes">Yes, pretty please, even though it will take 10 more minutes to run</option>\n-      </param>\n-      <when value="yes">\n-        <param format="flowscore" name="scores" type="data" label="Population score profiles from FLOCK"/>\n-      </when>\n-    </conditional>\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.flowclr"/>\n-      <param name="mfi" value="mfi"/>\n-      <param name="runcl" value="no"/>\n-      <output name="output_file" file="out1/out.html">\n-        <extra_files type="file" name="flow.mfi" value="out1/flow.mfi"/>\n-        <extra_files type="file" name="flow.mfi_pop" value="out1/flow.mfi_pop"/>\n-        <extra_files type="file" name="flow.overview" value="out1/flow.overview"/>\n-        <extra_files type="file" name="flow.sample" value="out1/flow.sample"/>\n-        <extra_files type="file" name="boxplot.json" value="out1/boxplotData.json"/>\n-        <extra_files type="file" name="m0_m0_90X90.png" value="out1/m0_m0_90X90.png" compare="contains"/>\n-        <extra_files type="file" name="m0_m1_90X90.png" value="out1/m0_m1_90X90.png" compare="contains"/>\n-        <extra_files type="file" name="m1_m0_90X90.png" value="out1/m1_m0_90X90.png" compare="contains"/>\n-        <extra_files type="file" name="m1_m1_90X90.png" value="out1/m1_m1_90X90.png" compare="contains"/>\n-      </output>\n-    </test>\n-    <test>\n-      <param name="input" value="input.flowclr"/>\n-      <param name="mfi" value="mfi"/>\n-      <param name="runcl" value="yes"/>\n-      <param name="scores" value="profile.flowscore"/>\n-      <output name="output_file" file="out2/out.html">\n-        <extra_files type="file" name="boxplot.json" value="out2/boxplotData.json"/>\n-        <extra_files type="file" name="CLprofiles.txt" value="out2/CLprofiles.txt"/>\n-        <extra_files type="file" name="flow.mfi" value="out2/flow.mfi"/>\n-        <'..b'/tests>\n-  <help><![CDATA[\n-   This tool generates an overview of the flow analysis results.\n-\n------\n-\n-**Input**\n-\n-Tool input is a tab-separated file containing markers fluorescence intensities for each event as well as population and is generated as part of FLOCK or CrossSample output.  If the option is selected, flowCL is used to associate populations defined by FLOCK to a Cell Ontology term.\n-\n-.. class:: infomark\n-\n-Tip: Marker names need to be in the Cell Ontology for flowCL to run.\n-\n-**Output**\n-\n-The output is a page with multiple tabs that allows visualization of the data.\n-\n-.. class: warningmark\n-\n-The FLOCK output is proportionally downsampled to 20K events for the visualization.\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* - 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-\n-*Output*\n-\n-Summary of the data:\n-\n-The comment field of this table is editable, and can be used to name the populations. 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/summary.png\n-\n-.. image:: static/images/flowtools/edit_summary.png\n-\n-\n-Scatterplots overview:\n-\n-.. image:: static/images/flowtools/overview.png\n-\n-\n-2D Scatterplot:\n-\n-The user can choose which populations and markers to display. 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/scatter2D.png\n-\n-\n-3D Scatterplot:\n-\n-The user can choose which populations and markers to display. 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/scatter3D.png\n-\n-\n-Parallel Coordinates:\n-\n-The user can reorder the markers, and choose which 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/pcflock.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/bpflock.png\n-\n-\n-If the ontology option was selected, the following tab is displayed.\n-The CL terms hyperlink to their representation in the Immport Cell Ontology browser. The full flowCL run summary is accessible by clicking on the phenotype.\n-\n-.. image:: static/images/flowtools/profileCL_go.png\n-\n-  ]]>\n-  </help>\n-  <citations>\n-    <citation type="doi">10.1093/bioinformatics/btu807</citation>\n-  </citations>\n-</tool>\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/getOntology.R
--- a/flow_overview/getOntology.R Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,28 +0,0 @@
-# Cell Ontology Module for Galaxy
-# FlowCL
-######################################################################
-#                  Copyright (c) 2016 Northrop Grumman.
-#                          All rights reserved.
-######################################################################
-# 
-# Version 1
-# Cristel Thomas
-#
-#
-
-library(flowCL)
-library(base)
-
-getOntology <- function(output_file, markers) {
-  res <- flowCL(markers, ResetArch = TRUE)
-  if (length(res) == 6) {
-    report <- capture.output(res$Table)
-    sink(output_file)
-    cat(report, sep = "\n")
-    sink()
-  }
-}
-
-args <- commandArgs(trailingOnly = TRUE)
-markers <- paste(args[3:length(args)], collapse="")
-getOntology(args[2], markers)
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/static/flowtools/css/flowCL.css
--- a/flow_overview/static/flowtools/css/flowCL.css Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
@@ -1,43 +0,0 @@
-/*
-** DataTables config
-*/
-div.dt-buttons {
-    float: right;
-}
-
-th {
-    font-size:16px;
-    text-align: left;
-}
-
-body td {
-    max-width: 50px;
-    font-size: 14px;
-    overflow: hidden;
-    text-overflow: ellipsis; 
-}
-
-.cltable thead {
-    display:none;
-}
-
-.cltable td {
-    max-width: 40px;
-    word-break: break-all;
-    word-wrap: break-word;
-}
-
-.firstcol {
-    width: 160px;
-}
-
-.smallcols {
-    width: 100px;
-}
-
-div.dataTables_wrapper {
-    width: 95%;
-    margin: 0 auto;
-}
-
-
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/static/flowtools/css/parallelCoordinates.css
--- a/flow_overview/static/flowtools/css/parallelCoordinates.css Mon Feb 27 12:54:37 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 8283ff163ba6 -r b5453d07f740 flow_overview/static/flowtools/js/boxplotsFlow.js
--- a/flow_overview/static/flowtools/js/boxplotsFlow.js Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,724 +0,0 @@\n-// Copyright (c) 2016 Northrop Grumman.\n-// All rights reserved.\n-var updateBPmfi = function(plotconfig){\n-  plotconfig.selectedPopulations = [];\n-  $(plotconfig.popSelectj).each(function() {\n-    if (this.checked) {\n-      plotconfig.selectedPopulations.push(parseInt(this.value));\n-    }\n-  });\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-  updateBoxplotMFI(plotconfig);\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="\' + newNames[value] + \'">\'\n-        + newNames[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-    updateBPmfi(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-    updateBPmfi(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.popSelectAll).prop("checked",true);\n-    $(plotconfig.popSelectj).prop("checked", true);\n-    $(plotconfig.mrkrSelectj).prop("checked", true);\n-    $(plotconfig.mrkrSelectAll).prop("checked",true);\n-    $(plotconfig.displayMFI).prop("checked", false);\n-    $(plotconfig.displayvalues).prop("checked", false);\n-    updateBPmfi(plotconfig);\n-  });\n-\n-  $(plotconfig.toggledisplayj).on("click",function() {\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-    updateBPmfi(plotconfig);\n-  });\n-\n-  $(plotconfig.displayMFI).on("click", function(){\n-    updateBPmfi(plotconfig);\n-  });\n-\n-  $(plotconfig.displayvalues).on("click", function(){\n-    updateBPmfi(plotconfig);\n-  });\n-\n-  displayPlot(plotconfig);\n-};\n-\n-var displayPlot = function(plotconfig) {\n-  var h = $(window).height() - 200,\n-      nbPop = Object.keys(plotconfig.csdata.mfi[plotconfig.mrkrNames[0]]).length + 2;\n-\n-  $(plotconfig.plotdivj).empty();\n-  $(plotconfig.plotdivj).height(h);\n-\n-  // Get Markers too\n-  for (var i = 0, nbMarkers = plotconfig.mrkrNames.length; i < nbMarkers; i++){\n-    plotconfig.allMarkers.push(i);\n-    plotconfig.selectedMarkers.push(i);\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-      updateBoxplotMFI(plotconfig);\n-    }, 500, "resizePlot");\n-  });\n-\n-  displayPopulationLegend(plotconfig);\n-  displayMarkerTable(plotconfig);\n-  updateBoxplotMFI(plotconfig);\n-};\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).app'..b'onfig[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-          // Update box ticks.\n-        var boxTick = g.selectAll("text.box")\n-            .data(quartileData);\n-\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-              .style("stroke", function(d) { return color_palette[0][data.config[1]][3]; })\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 8283ff163ba6 -r b5453d07f740 flow_overview/static/flowtools/js/color_palette.js
--- a/flow_overview/static/flowtools/js/color_palette.js Mon Feb 27 12:54:37 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 8283ff163ba6 -r b5453d07f740 flow_overview/static/flowtools/js/overview.js
--- a/flow_overview/static/flowtools/js/overview.js Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,325 +0,0 @@\n-// Copyright (c) 2016 Northrop Grumman.\n-// All rights reserved.\n-\n-var scatterData2D = {};\n-var scatterData3D = {};\n-var scatterData3DMFI = {};\n-var scatterDataMFI = {};\n-var tableContent;\n-var newNames ={};\n-var configbp = {};\n-var bpurl = "./boxplotData.json";\n-\n-var waitForFinalEvent = (function () {\n-  var timers = {};\n-  return function (callback, ms, uniqueId) {\n-    if (!uniqueId) {\n-      uniqueId = "Don\'t call this twice without a uniqueId";\n-    }\n-    if (timers[uniqueId]) {\n-      clearTimeout (timers[uniqueId]);\n-    }\n-    timers[uniqueId] = setTimeout(callback, ms);\n-  };\n-})();\n-\n-var updateOverviewPlotDisplay = function(data) {\n-  $(\'#overviewPlotDiv\').empty();\n-  $(\'#overviewPlotDiv\').html(data);\n-};\n-\n-var displayMFI = function() {\n-  var url = "flow.mfi_pop";\n-  d3.text(url, function(error, data){\n-    var mfiHdgs = [],\n-        pp = [],\n-        mfiTableData = [],\n-        mfiTableHeadings = [],\n-        mfiTargets = [],\n-        mfiTableHTML = \'<table id="mfitable" class="dtable display compact" cellspacing="0" width="100%"/>\',\n-        popcol = 1,\n-        mfiEditorData =[];\n-\n-    if (error){\n-      alert("Problem retrieving data");\n-      return;\n-    }\n-    mfiHdgs = data.split("\\n")[0].split("\\t");\n-    pp = mfiHdgs.pop();\n-    mfiHdgs.unshift(pp);\n-    mfiHdgs.unshift("Comment");\n-    data = d3.tsv.parse(data);\n-    function handleSubmit(method, url, d, successCallBack, errorCallBack) {\n-      var output = {data : mfiTableData};\n-      successCallBack(output);\n-    }\n-\n-    $(\'#mfiDiv\').empty();\n-    mfiTableData = $.extend(true,[],data);\n-    mfiTableData.forEach(function(d){\n-      d.Comment = d.Population;\n-      newNames[parseInt(d.Population)] = d.Comment;\n-    });\n-    //var mfiData = mfiTableData.filter(function(d){return d});\n-    tableContent = $.extend(true, [], mfiTableData);\n-    mfiHdgs.forEach(function(d,i) {\n-      mfiTableHeadings.push({"data": d, "title": d});\n-      mfiEditorData.push({"label" : d, "name" : d});\n-    });\n-\n-    for (var i = 2, j = mfiHdgs.length - 2; i<j; i++){\n-      mfiTargets.push(i);\n-    }\n-\n-    $(\'#mfiDiv\').html(mfiTableHTML);\n-    var editor = new $.fn.dataTable.Editor({\n-        ajax: handleSubmit,\n-        table: \'#mfitable\',\n-        fields: mfiEditorData,\n-        idSrc: \'Population\'\n-    });\n-    $(\'#mfitable\').on(\'click\', \'tbody td:first-child\', function (e) {\n-      editor.bubble(this);\n-    });\n-    var mfiTable = $(\'#mfitable\').DataTable({\n-        columns: mfiTableHeadings,\n-        data: mfiTableData,\n-        order: [[ popcol, "asc" ]],\n-        pageLength: 25,\n-        dom: \'<"top"Bi>t<"bottom"lp><"clear">\',\n-        columnDefs: [{\n-            targets: mfiTargets,\n-            className: "dt-body-right",\n-            render: function(data, type, row){\n-              return parseFloat(data).toFixed(2);\n-            }\n-          }, {\n-            targets: [mfiHdgs.length - 2],\n-            className: "dt-body-right"\n-          }, {\n-            targets: [mfiHdgs.length-1],\n-            className: "dt-body-right",\n-            render: function(data, type, row){\n-                    return parseFloat(data).toFixed(2) + \'%\';\n-            }\n-          }\n-        ],\n-        buttons: [\n-            \'copy\', \'pdfHtml5\',\'csvHtml5\', \'colvis\'\n-        ],\n-        colReorder: {fixedColumnsLeft:1},\n-        select: true\n-    });\n-    editor.on(\'preSubmit\', function(e, object, action){\n-      var data = object.data;\n-      var key = Object.keys(data)[0];\n-      var count = object.data[key][\'Comment\'];\n-      mfiTableData.forEach(function(d) {\n-        if (d.Population === key) {\n-          d.Comment = count;\n-          newNames[parseInt(d.Population)] = count;\n-        }\n-      });\n-      tableContent = $.extend(true, [], mfiTableData);\n-    });\n-  });\n-};\n-\n-var displayOverviewPlot = function() {\n-  var url = "flow.overview";\n-  $.ajax({\n-    url: url,\n-    dataType: "text",\n-    success: function(data) {\n-      updateOverviewPlotDispla'..b'l: mfi_url,\n-        dataType: "text",\n-        success: function(mfi_text) {\n-          scatterData3DMFI = new processMFI(mfi_text);\n-          scatterData3D = new processData(text);\n-          displayScatterToolbar3D();\n-          displayScatterPopulation3D();\n-          processScatterData3D();\n-          processScatterData3DMFI();\n-          displayScatterPlot3D();\n-          $(window).on(\'resize\',function() {\n-            waitForFinalEvent(function() {\n-              processScatterData3D();\n-              displayScatterPlot3D();\n-            }, 500, "resize3D");\n-          });\n-        }\n-      });\n-    }\n-  });\n-};\n-\n-var displayMFIBoxplot = function() {\n-  $.ajax({\n-    url: bpurl,\n-    dataType: "json",\n-    success: function(data) {\n-      configbp = {\n-        displaybutton : \'#updateDisplaybp\',\n-        toggledisplayj : \'#changeDisplay\',\n-        toggledisplay : \'changeDisplay\',\n-        popSelectj : \'.popSelectbp\',\n-        plotdivj : \'#plotDivbp\',\n-        csdata : data,\n-        plotdiv : \'plotDivbp\',\n-        type : \'boxplot\',\n-        table : \'#popTablebp tbody\',\n-        popSelect : \'popSelectbp\',\n-        allMarkers : [],\n-        selectedMarkers: [],\n-        allPopulations : [],\n-        selectedPopulations : [],\n-        popSelectAll : \'#popSelectAllbp\',\n-        popSelectCheck: \'.popSelectbp:checked\',\n-        mrkrSelectAll : \'#mrkrSelectAll\',\n-        mrkrSelectCheck: \'.mrkrSelect:checked\',\n-        mrkrSelect : \'mrkrSelect\',\n-        mtable : \'#mrkrTable tbody\',\n-        mrkrSelectj: \'.mrkrSelect\',\n-        displayvalues: \'#displayLabels\',\n-        displayMFI: \'#displayMFI\',\n-        view: \'p\',\n-        mrkrNames :  Object.keys(data.mfi)\n-      };\n-      displayToolbar(configbp);\n-    }\n-  });\n-};\n-\n-function processData(text) {\n-  var data = d3.tsv.parseRows(text).map(function(row) {\n-    return row.map(function(value) {\n-      if (isNaN(value)) {\n-        return value;\n-      }\n-      return +value;\n-    });\n-  });\n-\n-  this.columnHeadings = data.shift();\n-  this.columnHeadings.pop();\n-  var popCol = data[0].length - 1;\n-  var p = data.map(function(value,index) {\n-    return parseInt(value[popCol]);\n-  });\n-\n-  var populations = {};\n-  for (var i = 0; i < p.length; i++) {\n-    if (populations[p[i]] === undefined) {\n-      populations[p[i]] = 1;\n-    } else {\n-      populations[p[i]] = populations[p[i]] + 1;\n-    }\n-  }\n-\n-  this.popCol = popCol;\n-  this.populations = d3.set(p).values();\n-  this.populations = this.populations.map(function(value,index) {\n-    return parseInt(value);\n-  });\n-  this.selectedPopulations = this.populations;\n-  this.percent = this.populations.map(function(value,index) {\n-    return Math.floor(populations[value] * 10000.0 / data.length) / 100.0;\n-  });\n-\n-  this.data = data;\n-  this.m1 = 0;\n-  this.m2 = 1;\n-  this.m3 = 2;\n-  this.view = 1;\n-};\n-\n-function processMFI(text) {\n-  data = d3.tsv.parseRows(text).map(function(row) {\n-    return row.map(function(value) {\n-      if (isNaN(value)) {\n-        return value;\n-      }\n-      return +value;\n-    });\n-  });\n-\n-  // Get the Headings Row, then remove the Count, Percentage and\n-  // Population headings\n-  this.columnHeadings = data.shift();\n-  this.columnHeadings.pop();\n-  this.columnHeadings.pop();\n-  this.columnHeadings.pop();\n-\n-  var popCol = data[0].length -1;\n-  var pop = data.map(function(value,index) {\n-    return parseInt(value[popCol]);\n-  });\n-\n-  var perCol = data[0].length -2;\n-  var per = data.map(function(value,index) {\n-    return parseFloat(value[perCol]);\n-  });\n-\n-  var countCol = data[0].length -3;\n-  var count = data.map(function(value,index) {\n-    return parseInt(value[countCol]);\n-  });\n-\n-  this.popCol = popCol;\n-  this.populations = pop;\n-  this.selectedPopulations = pop;\n-  this.percent = per;\n-  this.counts = count;\n-\n-  var l = data[0].length;\n-  this.data = data.map(function(row) {\n-    return row.splice(0,countCol);\n-  });\n-  this.poplist = pop;\n-  this.m1 = 0;\n-  this.m2 = 1;\n-  this.m3 = 2;\n-};\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/static/flowtools/js/parallelCoordinates.js
--- a/flow_overview/static/flowtools/js/parallelCoordinates.js Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,455 +0,0 @@\n-// Copyright (c) 2016 Northrop Grumman.\n-// All rights reserved.\n-/*\n- * Initialize variables for parallelCoordinates display\n-*/\n-var pCoordApp = pCoordApp || {};\n-pCoordApp.allPopulations = [];\n-pCoordApp.selectedPopulations = [];\n-pCoordApp.origData;\n-pCoordApp.flowData;\n-pCoordApp.headers = [];\n-pCoordApp.foreground;\n-pCoordApp.background;\n-pCoordApp.populations = [];\n-pCoordApp.allLines;\n-pCoordApp.lines = [];\n-pCoordApp.selectedLines = [];\n-\n-var displayAll = function() {\n-  displayParallelPlot();\n-}\n-/*\n- * Display the Population Legend\n-*/\n-var displayPopTable = function() {\n-  $(\'#popTable tbody\').empty();\n-  pCoordApp.origData.map(function(d,index) {\n-    $(\'#popTable tbody\')\n-        .append(\'<tr><td align="center"><input type="checkbox" \'\n-            + \'id="pop\' + d.Population + \'" \'\n-            + \'checked class="popSelect" value=\' + index + \'/></td>\'\n-            + \'<td title="\' + newNames[d.Population] + \'">\'\n-            + newNames[d.Population]\n-            + \'</td><td><span style="background-color:\'\n-            + color_palette[0][index + 1][0]\n-            + \'">&nbsp;&nbsp;&nbsp;</span></td>\'\n-            + \'<td>\' + d.Percentage + \'</td></tr>\');\n-  });\n-\n-  $(\'#popSelectAll\').click(function() {\n-    var checkAll = $("#popSelectAll").prop(\'checked\');\n-    if (checkAll) {\n-      $(".popSelect").prop("checked", true);\n-      for (var i = 0; i < pCoordApp.allLines; i ++){\n-        pCoordApp.selectedLines.push(i);\n-        pCoordApp.lines.push(i);\n-      }\n-    } else {\n-      $(".popSelect").prop("checked", false);\n-      pCoordApp.selectedLines = [];\n-      pCoordApp.lines = [];\n-    }\n-\n-    pCoordApp.selectedPopulations = [];\n-    $(\'.popSelect\').each(function() {\n-      if (this.checked) {\n-        pCoordApp.selectedPopulations.push(parseInt(this.value));\n-      }\n-    });\n-    displayTableGrid();\n-    if (checkAll) {\n-      displayParallelPlot();\n-    } else {\n-      updateParallelForeground();\n-    }\n-  });\n-\n-  $(\'.popSelect\').click(function() {\n-    if ($(\'.popSelect\').length == $(".popSelect:checked").length) {\n-        $(\'#popSelectAll\').prop("checked",true);\n-    } else {\n-        $(\'#popSelectAll\').prop("checked",false);\n-    }\n-\n-    pCoordApp.selectedPopulations = [];\n-    $(\'.popSelect\').each(function() {\n-      if (this.checked) {\n-        pCoordApp.selectedPopulations.push(parseInt(this.value));\n-      }\n-    });\n-\n-    pCoordApp.selectedLines = [];\n-    pCoordApp.lines = [];\n-\n-    pCoordApp.origData.forEach(function(d,idx){\n-      if ($.inArray(pCoordApp.populations.indexOf(d.Population), pCoordApp.selectedPopulations) > -1) {\n-        pCoordApp.selectedLines.push(idx);\n-        pCoordApp.lines.push(idx);\n-      }\n-    });\n-\n-    displayTableGrid();\n-    updateParallelForeground();\n-  });\n-  updatePopTable();\n-};\n-\n-var updatePopTable = function() {\n-  $(\'.popSelect\').each(function() {\n-    var pop = parseInt(this.value),\n-        selectedPops = pCoordApp.origData.map(function(d){\n-      if ($.inArray(d.idx, pCoordApp.selectedLines) > -1){\n-        return pCoordApp.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-/*\n- * Display the table under the graph\n-*/\n-var displayTableGrid = function() {\n-  var updatedData = [],\n-      displayData = [],\n-      colNames = [],\n-      pctargets = [],\n-      colTable = [],\n-      tableHTML = [],\n-      textCol = [],\n-      colOrder = [],\n-      targetCol = 0;\n-\n-  $("#tableDiv").empty();\n-  updatedData = $.extend(true, [], tableContent);\n-  updatedData.forEach(function(d, idx){d.idx = idx});\n-  displayData = updatedData.filter(function(d, index) {\n-    if ($.inArray(index,pCoordApp.selectedLines) > -1) {\n-      return d;\n-    }\n-  });\n-\n-  targetCol = pCoordApp.headers.length - 2;\n-  pCoordApp.headers.forEach(function(d,i){\n-    colTable.push("<th>" + d + "</th>");\n-    colNames.push({"data":d});\n- '..b'rag()\n-      .origin(function(d) { return {x: x(d)}; })\n-      .on("dragstart", function(d) {\n-        dragging[d] = x(d);\n-        pCoordApp.background.attr("visibility", "hidden");\n-      })\n-      .on("drag", function(d) {\n-        dragging[d] = Math.min(width, Math.max(0, d3.event.x));\n-        pCoordApp.foreground.attr("d", path);\n-        dimensions.sort(function(a, b) {\n-          return position(a) - position(b);\n-        });\n-        x.domain(dimensions);\n-        g.attr("transform", function(d) {\n-          return "translate(" + position(d) + ")";\n-        });\n-      })\n-      .on("dragend", function(d) {\n-        delete dragging[d];\n-        transition(d3.select(this))\n-            .attr("transform", "translate(" + x(d) + ")");\n-        transition(pCoordApp.foreground)\n-            .attr("d", path);\n-        pCoordApp.background.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) {\n-        d3.select(this).call(axis.scale(y[d]));\n-      });\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-    $(\'#plotDiv .foreground path\').css(\'stroke-opacity\', val.toString());\n-    $(\'#pcopacity\').html((Math.round(val*10000)/100) + "%");\n-  }));\n-};\n-\n-var updateParallelForeground = function() {\n-  pCoordApp.foreground[0].map(function(d) {\n-    var ln = parseInt(d[\'__data__\'][\'idx\']);\n-    if ($.inArray(ln, pCoordApp.selectedLines) < 0){\n-      d.style.display = "none";\n-    } else {\n-      d.style.display = null;\n-    }\n-  });\n-};\n-\n-/*\n- * Retrieve the data, then call display functions\n-*/\n-var displayParallelCoordinates = function() {\n-  pCoordApp.origData = $.extend(true,[], tableContent);\n-  pCoordApp.headers = Object.keys(pCoordApp.origData[0]);\n-  pCoordApp.origData.forEach(function(d,idx) {\n-    d.idx = idx;\n-    pCoordApp.selectedLines.push(idx);\n-    pCoordApp.lines.push(idx);\n-    if (!pCoordApp.populations.includes(d.Population)){\n-      pCoordApp.populations.push(d.Population);\n-    }\n-  });\n-  /*\n-   * For the plot use only the MFI information\n-   * for each populations. Store in flowData\n-  */\n-  pCoordApp.flowData = $.extend(true,[],tableContent);\n-  pCoordApp.flowData.forEach(function(d, idx) {\n-    delete d[\'Population\'];\n-    delete d[\'Count\'];\n-    delete d[\'Percentage\'];\n-    delete d.Comment;\n-    pCoordApp.allPopulations.push(idx);\n-    pCoordApp.selectedPopulations.push(idx);\n-    pCoordApp.selectedLines.push(idx);\n-    pCoordApp.lines.push(idx);\n-  });\n-\n-  pCoordApp.allLines = pCoordApp.flowData.length;\n-  displayPopTable();\n-  displayTableGrid();\n-  displayParallelPlot();\n-\n-  $("#resetPCoordDisplay").on("click",function() {\n-    for (var i = 0; i < pCoordApp.allLines; i++) {\n-      pCoordApp.allPopulations.push(i);\n-      pCoordApp.selectedPopulations.push(i);\n-      pCoordApp.selectedLines.push(i);\n-      pCoordApp.lines.push(i);\n-    }\n-    $("#popSelectAll").prop(\'checked\',true);\n-    $(".popSelect").prop("checked",true);\n-\n-    var opcty = ".8";\n-    $(\'#plotDiv .foreground path\').css(\'stroke-opacity\', opcty);\n-    $(\'#pcopacity\').html("80%");\n-    $(\'#pcline_opacity\').val(0.8);\n-\n-    displayPopTable();\n-    displayTableGrid();\n-    displayParallelPlot();\n-  });\n-\n-  $(window).on(\'resize\',function() {\n-    waitForFinalEvent(function() {\n-      displayAll();\n-    }, 500, "resizeParallelCoordinates");\n-  });\n-}\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/static/flowtools/js/profileCLs.js
--- a/flow_overview/static/flowtools/js/profileCLs.js Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,85 +0,0 @@
-// Copyright (c) 2016 Northrop Grumman.
-// All rights reserved.
-
-var cl_table = './CLprofiles.txt';
-var scores_table = './scores.txt';
-
-var displayCLTable = function(){
-  d3.text(cl_table, function(error, data){
-    var clHdgs = [],
-        clHTML = '<table id="cltable" class="display compact" cellspacing="0" width="100%"/>',
-        clTableData = [],
-        clHeadings = [];
-
-    if (error){
-      alert("Problem retrieving data");
-      return;
-    }
-    clHdgs = data.split("\n")[0].split("\t");
-    data = d3.tsv.parse(data);
-    clTableData = $.extend(true, [], data);
-
-    clHdgs.forEach(function(d,i){
-      clHeadings.push({"data" : d, "title" : d});
-    });
-
-    $('#clprofiles').html(clHTML);
-    var clTable = $('#cltable').DataTable({
-      columns: clHeadings,
-      dom: '<"top"Bi>t<"bottom"lp><"clear">',
-      pageLength: 25,
-      order: [[ 0, "asc" ]],
-      data: clTableData,
-      buttons: [
-        'copy', 'pdfHtml5','csvHtml5'
-      ],
-      columnDefs: [
-        {
-          targets: [0,2,3],
-          className: "smallcols"
-        },
-        {
-          targets: 4,
-          className: "dt-body-left"
-        },
-        {
-          targets: [5,6],
-          className: "firstcol"
-      }]
-    });
-  });
-};
-
-var displayScoresTable = function(){
-  d3.text(scores_table, function(error, data){
-    var scoreHTML = '<table id="scoretable" class="display compact" cellspacing="0" width="100%"/>',
-        scoreHdgs = [],
-        scoreTableData = [],
-        scoreHeadings = [];
-    if (error){
-      alert("Problem retrieving data");
-      return;
-    }
-    scoreHdgs = data.split("\n")[0].split("\t");
-    data = d3.tsv.parse(data);
-
-    $('#scores').html(scoreHTML);
-
-    scoreTableData = $.extend(true, [], data);
-
-    scoreHdgs.forEach(function(d,i){
-      scoreHeadings.push({"data" : d, "title" : d});
-    });
-
-    var scoreTable = $('#scoretable').DataTable({
-      columns: scoreHeadings,
-      pageLength: 25,
-      order: [[ 0, "asc" ]],
-      dom: '<"top"Bi>t<"bottom"lp><"clear">',
-      data: scoreTableData,
-      buttons: [
-        'copy', 'pdfHtml5','csvHtml5'
-      ],
-    });
-  });
-};
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/static/flowtools/js/scatter2D.js
--- a/flow_overview/static/flowtools/js/scatter2D.js Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,208 +0,0 @@
-// Copyright (c) 2016 Northrop Grumman.
-// All rights reserved.
-
-var updateScatter2D = function(){
-  scatterData2D['selectedPopulations'] = [];
-  scatterDataMFI['selectedPopulations'] = [];
-  $('.pop2D').each(function() {
-    if (this.checked) {
-      scatterData2D['selectedPopulations'].push(parseInt(this.value));
-      scatterDataMFI['selectedPopulations'].push(parseInt(this.value));
-    }
-  });
-  processScatterData2D();
-  processScatterDataMFI2D();
-  displayScatterPlot2D();
-};
-
-var processScatterData2D = function() {
-  var xData = [],
-      yData = [],
-      popData = [],
-      col1 = [],
-      col2 = [],
-      pop = [],
-      min = Number.MAX_VALUE,
-      max = Number.MIN_VALUE;
-
-  min = d3.min(scatterData2D['data'], function(array) {
-    return d3.min(array);
-  });
-  max = d3.max(scatterData2D['data'], function(array) {
-    return d3.max(array);
-  });
-  scatterData2D['min'] = 0;
-  scatterData2D['max'] = max;
-
-  col1 = scatterData2D['data'].map(function(value,index) {
-    return value[scatterData2D['m1']];
-  });
-  col2 = scatterData2D['data'].map(function(value,index) {
-    return value[scatterData2D['m2']];
-  });
-  pop = scatterData2D['data'].map(function(value,index) {
-    return value[scatterData2D['popCol']];
-  });
-
-  for (var i = 0, j = col1.length; i < j; i++) {
-    if (scatterData2D['selectedPopulations'].indexOf(pop[i]) >= 0) {
-      xData.push(col1[i]);
-      yData.push(col2[i]);
-      popData.push(pop[i]);
-    }
-  }
-
-  scatterData2D['popColors'] = popData.map(function(value,index) {
-      return color_palette[0][value][0];
-  });
-  scatterData2D['xData'] = xData;
-  scatterData2D['yData'] = yData;
-  scatterData2D['popData'] = popData;
-  return scatterData2D;
-};
-
-var displayScatterToolbar2D = function() {
-  $("#xAxisMarker2D").select2();
-  $("#yAxisMarker2D").select2();
-  $("#view2D").select2();
-
-  scatterData2D['columnHeadings'].map(function(value,index) {
-    $('#xAxisMarker2D')
-        .append($("<option></option>")
-        .attr("value",index)
-        .text(value));
-
-    $('#yAxisMarker2D')
-        .append($("<option></option>")
-        .attr("value",index)
-        .text(value));
-  });
-
-  $('#xAxisMarker2D').select2("val",0);
-  $('#yAxisMarker2D').select2("val",1);
-
-  $("#xAxisMarker2D").on("change",function(e) {
-    var m1 = $("#xAxisMarker2D").select2("val");
-    scatterData2D['m1'] = m1;
-    scatterDataMFI['m1'] = m1;
-    updateScatter2D();
-  });
-  $("#yAxisMarker2D").on("change",function(e) {
-    var m2 = $("#yAxisMarker2D").select2("val");
-    scatterData2D['m2'] = m2;
-    scatterDataMFI['m2'] = m2;
-    updateScatter2D();
-  });
-  $("#view2D").on("change",function(e) {
-    var view = $("#view2D").select2("val");
-    scatterData2D['view'] = view;
-    updateScatter2D();
-  });
-
-  $("#updateDisplay2D").on("click",function() {
-    $(".pop2D").prop("checked", true);
-    $("#selectall2D").prop('checked', true);
-    updateScatter2D();
-  });
-};
-
-var displayScatterPopulation2D = function() {
-  $('#populationTable2D tbody').empty();
-  scatterData2D['populations'].map(function(value,index) {
-    $('#populationTable2D tbody')
-        .append('<tr><td align="center">'
-            + '<input type="checkbox" checked class="pop2D" value='
-            + value + '/></td><td title="' + newNames[value]
-            + '">' + newNames[value] + '</td>'
-            + '<td><span style="background-color:'
-            + color_palette[0][value][0] + '">&nbsp;&nbsp;&nbsp</span></td>'
-            + '<td>' + scatterData2D['percent'][value - 1] + '</td></tr>');
-  });
-
-  $('#selectall2D').click(function() {
-    var checkAll = $("#selectall2D").prop('checked');
-    if (checkAll) {
-      $(".pop2D").prop("checked", true);
-    } else {
-      $(".pop2D").prop("checked", false);
-    }
-    updateScatter2D();
-  });
-
-  $('.pop2D').click(function() {
-    if ($('.pop2D').length == $(".pop2D:checked").length) {
-      $('#selectall2D').prop("checked",true);
-    } else {
-      $('#selectall2D').prop("checked",false);
-    }
-    updateScatter2D();
-  });
-
-  $('.pop2D').each(function() {
-    var selectedpop2D = parseInt(this.value);
-    if ($.inArray(selectedpop2D,scatterData2D['selectedPopulations']) > -1) {
-      this.checked = true;
-    } else {
-      this.checked = false;
-    }
-  });
-};
-
-var displayScatterPlot2D = function() {
-  var h = $(window).height() - 200,
-      w = $("#scatterPlotDiv2D").width(),
-      xtitle = scatterData2D['columnHeadings'][scatterData2D['m1']],
-      ytitle = scatterData2D['columnHeadings'][scatterData2D['m2']],
-      view = scatterData2D['view'],
-      layout = {},
-      traces = [];
-
-  $("#scatterPlotDiv2D").empty();
-  $("#scatterPlotDiv2D").height(h);
-  if ( view == 1 || view == 2) {
-    var trace1 = {
-        x: scatterData2D['xData'],
-        y: scatterData2D['yData'],
-        mode: 'markers',
-        opacity: .75,
-        hoverinfo: 'none',
-        marker: {
-          size: 2,
-          color: scatterData2D['popColors']
-        },
-        type: 'scatter'
-    };
-    traces.push(trace1);
-  }
-  if ( view == 1 || view == 3) {
-    var trace2 = {
-        x: scatterDataMFI['xData'],
-        y: scatterDataMFI['yData'],
-        mode: 'markers',
-        opacity: 1.0,
-        hoverinfo: "x+y",
-        marker: {
-          symbol: 128,
-          size: 8,
-          color: scatterDataMFI['popColors']
-        },
-        type: 'scatter'
-    };
-    traces.push(trace2);
-  }
-
-  layout = {
-      title: '',
-      showlegend: false,
-      xaxis: {
-          range: [0,scatterData2D['max']],
-          title: xtitle
-      },
-      yaxis: {
-          range: [0,scatterData2D['max']],
-          title: ytitle
-      }
-  };
-
-  Plotly.newPlot('scatterPlotDiv2D', traces, layout);
-};
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/static/flowtools/js/scatter3D.js
--- a/flow_overview/static/flowtools/js/scatter3D.js Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,267 +0,0 @@
-// Copyright (c) 2016 Northrop Grumman.
-// All rights reserved.
-
-var updateScatter3D = function(){
-  scatterData3D['selectedPopulations'] = [];
-  scatterData3DMFI['selectedPopulations'] = [];
-  $('.pop3D').each(function() {
-    if (this.checked) {
-      scatterData3D['selectedPopulations'].push(parseInt(this.value));
-      scatterData3DMFI['selectedPopulations'].push(parseInt(this.value));
-    }
-  });
-  processScatterData3D();
-  processScatterData3DMFI();
-  displayScatterPlot3D();
-};
-
-var processScatterData3D = function() {
-  var xData = [],
-      yData = [],
-      zData = [],
-      popData = [],
-      pop = [],
-      col1 = [],
-      col2 = [],
-      col3 = [],
-      min = Number.MAX_VALUE,
-      max = Number.MIN_VALUE;
-
-  min = d3.min(scatterData3D['data'], function(array) {
-    return d3.min(array);
-  });
-  max = d3.max(scatterData3D['data'], function(array) {
-    return d3.max(array);
-  });
-  scatterData3D['min'] = 0;
-  scatterData3D['max'] = max;
-
-  col1 = scatterData3D['data'].map(function(value,index) {
-    return value[scatterData3D['m1']];
-  });
-  col2 = scatterData3D['data'].map(function(value,index) {
-    return value[scatterData3D['m2']];
-  });
-  col3 = scatterData3D['data'].map(function(value,index) {
-    return value[scatterData3D['m3']];
-  });
-  pop = scatterData3D['data'].map(function(value,index) {
-    return value[scatterData3D['popCol']];
-  });
-
-  for (var i = 0, j = col1.length; i < j; i++) {
-    if (scatterData3D['selectedPopulations'].indexOf(pop[i]) >= 0) {
-      xData.push(col1[i]);
-      yData.push(col2[i]);
-      zData.push(col3[i]);
-      popData.push(pop[i]);
-    }
-  }
-
-  scatterData3D['popColors'] = popData.map(function(value,index) {
-    return color_palette[0][value][0];
-  });
-  scatterData3D['xData'] = xData;
-  scatterData3D['yData'] = yData;
-  scatterData3D['zData'] = zData;
-  scatterData3D['popData'] = popData;
-  return scatterData3D;
-};
-
-var displayScatterToolbar3D = function() {
-  $("#xAxisMarker3D").select2();
-  $("#yAxisMarker3D").select2();
-  $("#zAxisMarker3D").select2();
-  $("#view3D").select2();
-
-  scatterData3D['columnHeadings'].map(function(value,index) {
-    $('#xAxisMarker3D')
-        .append($("<option></option>")
-        .attr("value",index)
-        .text(value));
-
-    $('#yAxisMarker3D')
-        .append($("<option></option>")
-        .attr("value",index)
-        .text(value));
-
-    $('#zAxisMarker3D')
-        .append($("<option></option>")
-        .attr("value",index)
-        .text(value));
-  });
-
-  $('#xAxisMarker3D').select2("val",0);
-  $('#yAxisMarker3D').select2("val",1);
-  $('#zAxisMarker3D').select2("val",2);
-
-  $("#xAxisMarker3D").on("change",function(e) {
-    var m1 = $("#xAxisMarker3D").select2("val");
-    scatterData3D['m1'] = m1;
-    scatterData3DMFI['m1'] = m1;
-    updateScatter3D();
-  });
-  $("#yAxisMarker3D").on("change",function(e) {
-    var m2 = $("#yAxisMarker3D").select2("val");
-    scatterData3D['m2'] = m2;
-    scatterData3DMFI['m2'] = m2;
-    updateScatter3D();
-  });
-  $("#zAxisMarker3D").on("change",function(e) {
-    var m3 = $("#zAxisMarker3D").select2("val");
-    scatterData3D['m3'] = m3;
-    scatterData3DMFI['m3'] = m3;
-    updateScatter3D();
-  });
-
-  $("#view3D").on("change",function(e) {
-    var view = $("#view3D").select2("val");
-    scatterData3D['view'] = view;
-    updateScatter3D();
-  });
-
-  $("#updateDisplay3D").on("click",function() {
-    $(".pop3D").prop("checked", true);
-    $("#selectall3D").prop('checked', true);
-    updateScatter3D();
-  });
-};
-
-var displayScatterPopulation3D = function() {
-  $("#populationTable3D tbody").empty();
-  scatterData3D['populations'].map(function(value) {
-    $('#populationTable3D tbody')
-        .append('<tr><td align="center">'
-                + '<input type="checkbox" checked class="pop3D" value='
-                + value + '/></td><td title="'+ newNames[value]
-                + '">'+ newNames[value] + '</td>'
-                + '<td><span style="background-color:'
-                + color_palette[0][value][0] + '">&nbsp;&nbsp;&nbsp</span></td>'
-                + '<td>' + scatterData3D['percent'][value - 1] + '</td></tr>');
-  });
-
-  $('#selectall3D').click(function() {
-    var checkAll = $("#selectall3D").prop('checked');
-    if (checkAll) {
-      $(".pop3D").prop("checked", true);
-    } else {
-      $(".pop3D").prop("checked", false);
-    }
-    updateScatter3D();
-  });
-  $('.pop3D').click(function() {
-    if ($('.pop3D').length == $(".pop3D:checked").length) {
-      $('#selectall3D').prop("checked",true);
-    } else {
-      $('#selectall3D').prop("checked",false);
-    }
-    updateScatter3D();
-  });
-
-  $('.pop3D').each(function() {
-    var selectedpop3D = parseInt(this.value);
-    if ($.inArray(selectedpop3D,scatterData3D['selectedPopulations']) > -1) {
-      this.checked = true;
-    } else {
-      this.checked = false;
-    }
-  });
-};
-
-var displayScatterPlot3D = function() {
-  var h = $(window).height() - 200,
-      w = $("#scatterPlotDiv3D").width(),
-      xtitle = scatterData3D['columnHeadings'][scatterData3D['m1']],
-      ytitle = scatterData3D['columnHeadings'][scatterData3D['m2']],
-      ztitle = scatterData3D['columnHeadings'][scatterData3D['m3']],
-      view = scatterData3D['view'],
-      traces = [],
-      layout = {};
-
-  $("#scatterPlotDiv3D").empty();
-  $("#scatterPlotDiv3D").height(h);
-
-  if ( view == 1 || view == 2 ) {
-    var trace1 = {
-        x: scatterData3D['xData'],
-        y: scatterData3D['yData'],
-        z: scatterData3D['zData'],
-        mode: 'markers',
-        opacity: .75,
-        hoverinfo: "none",
-        marker: {
-          size: 2,
-          color: scatterData3D['popColors']
-        },
-        type: 'scatter3d'
-    };
-    traces.push(trace1);
-  };
-
-  if ( view == 1 || view == 3) {
-    var trace2 = {
-        x: scatterData3DMFI['xData'],
-        y: scatterData3DMFI['yData'],
-        z: scatterData3DMFI['zData'],
-        mode: 'markers',
-        opacity: 1.0,
-        hoverinfo: "x+y+z",
-        marker: {
-          symbol: "circle-open",
-          size: 8,
-          color: scatterData3DMFI['popColors']
-        },
-        type: 'scatter3d'
-    };
-    traces.push(trace2);
-  }
-
-  layout = {
-      title: '',
-      showlegend: false,
-      scene: {
-        aspectratio: {
-          x: 1,
-          y: 1,
-          z: 1
-        },
-        camera: {
-          center: {
-            x: 0,
-            y: 0,
-            z: 0
-          },
-          eye: {
-            x: 1.25,
-            y: 1.25,
-            z: 1.25
-          },
-          up: {
-            x: 0,
-            y: 0,
-            z: 1
-          }
-        },
-        xaxis: {
-          type: 'linear',
-          title: xtitle,
-          range: [0, scatterData3D['max']],
-          zeroline: false
-        },
-        yaxis: {
-          type: 'linear',
-          title: ytitle,
-          range: [0, scatterData3D['max']],
-          zeroline: false
-        },
-        zaxis: {
-          type: 'linear',
-          title: ztitle,
-          range: [0, scatterData3D['max']],
-          zeroline: false
-        }
-      }
-  };
-
-  Plotly.newPlot('scatterPlotDiv3D', traces, layout);
-};
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/static/flowtools/js/scatterMFI.js
--- a/flow_overview/static/flowtools/js/scatterMFI.js Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,83 +0,0 @@
-// Copyright (c) 2016 Northrop Grumman.
-// All rights reserved.
-
-var processScatterDataMFI2D = function() {
-  var xData = [],
-      yData = [],
-      popData = [],
-      col1 = [],
-      col2 = [],
-      pop = scatterDataMFI['poplist'];
-
-  col1 = scatterDataMFI['data'].map(function(value,index) {
-    return value[scatterDataMFI['m1']];
-  });
-  col2 = scatterDataMFI['data'].map(function(value,index) {
-    return value[scatterDataMFI['m2']];
-  });
-  for (var i = 0, j=col1.length; i < j; i++) {
-    if (scatterDataMFI['selectedPopulations'].indexOf(pop[i]) >= 0) {
-      xData.push(col1[i]);
-      yData.push(col2[i]);
-      popData.push(pop[i]);
-    }
-  }
-  scatterDataMFI['popColors'] = popData.map(function(value,index) {
-    return color_palette[0][value][0];
-  });
-  scatterDataMFI['xData'] = xData;
-  scatterDataMFI['yData'] = yData;
-  scatterDataMFI['popData'] = popData;
-  return scatterDataMFI;
-};
-
-var processScatterData3DMFI = function() {
-  var xData = [],
-      yData = [],
-      zData = [],
-      col1 = [],
-      col2 = [],
-      col3 = [],
-      pop = [],
-      min = Number.MAX_VALUE,
-      max = Number.MIN_VALUE,
-      popData = [];
-
-  min = d3.min(scatterData3DMFI['data'], function(array) {
-    return d3.min(array);
-  });
-  max = d3.max(scatterData3DMFI['data'], function(array) {
-    return d3.max(array);
-  });
-  scatterData3DMFI['min'] = 0;
-  scatterData3DMFI['max'] = max;
-
-  col1 = scatterData3DMFI['data'].map(function(value,index) {
-    return value[scatterData3DMFI['m1']];
-  });
-  col2 = scatterData3DMFI['data'].map(function(value,index) {
-    return value[scatterData3DMFI['m2']];
-  });
-  col3 = scatterData3DMFI['data'].map(function(value,index) {
-    return value[scatterData3DMFI['m3']];
-  });
-  pop = scatterData3DMFI['poplist'];
-
-  for (var i = 0, j = col1.length; i < j; i++) {
-    if (scatterData3DMFI['selectedPopulations'].indexOf(pop[i]) >= 0) {
-      xData.push(col1[i]);
-      yData.push(col2[i]);
-      zData.push(col3[i]);
-      popData.push(pop[i]);
-    }
-  }
-
-  scatterData3DMFI['popColors'] = popData.map(function(value,index) {
-    return color_palette[0][value][0];
-  });
-  scatterData3DMFI['xData'] = xData;
-  scatterData3DMFI['yData'] = yData;
-  scatterData3DMFI['zData'] = zData;
-  scatterData3DMFI['popData'] = popData;
-  return scatterData3DMFI;
-};
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/static/images/flowtools/bpflock.png
b
Binary file flow_overview/static/images/flowtools/bpflock.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/static/images/flowtools/edit_summary.png
b
Binary file flow_overview/static/images/flowtools/edit_summary.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/static/images/flowtools/overview.png
b
Binary file flow_overview/static/images/flowtools/overview.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/static/images/flowtools/pcflock.png
b
Binary file flow_overview/static/images/flowtools/pcflock.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/static/images/flowtools/profileCL_go.png
b
Binary file flow_overview/static/images/flowtools/profileCL_go.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/static/images/flowtools/scatter2D.png
b
Binary file flow_overview/static/images/flowtools/scatter2D.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/static/images/flowtools/scatter3D.png
b
Binary file flow_overview/static/images/flowtools/scatter3D.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/static/images/flowtools/summary.png
b
Binary file flow_overview/static/images/flowtools/summary.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/templates/genOverview.template
--- a/flow_overview/templates/genOverview.template Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,281 +0,0 @@\n-<html>\n-<head>\n-<title>Flow Overview</title>\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/color_palette.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/overview.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/scatter2D.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/scatter3D.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/scatterMFI.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/parallelCoordinates.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/boxplotsFlow.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-\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="mfi"><a href="#mfi" data-toggle="tab">MFI/Pop</a></li>\n-                <li class="homeTab" data-value="overviewPlot"><a href="#overviewPlot" data-toggle="tab">Overview Plot</a></li>\n-                <li class="homeTab" data-value="scatter2D"><a href="#scatter2D" data-toggle="tab">Scatter 2D</a></li>\n-                <li class="homeTab" data-value="scatter3D"><a href="#scatter3D" data-toggle="tab">Scatter 3D</a></li>\n-                <li class="homeTab" data-value="parallelCoordinates"><a href="#parallelCoordinates" data-toggle="tab">Parallel Coordinates</a></li>\n-                <li class="homeTab" data-value="stats"><a href="#boxplots" data-toggle="tab">Summary Statistics Boxplots</a></li>\n-            </ul>\n-\n-            <div class="tab-content">\n-                <div class="tab-pane active" id="mfi" style="min-height:500px;">\n-                    <div id="mfiDiv"></div>\n-                </div>\n-\n-                <div class="tab-pane" id="overviewPlot" style="min-height:500px;">\n-                    <div id="overviewPlotDiv">Overview</div>\n-                </div>\n-\n-                <div class="tab-pane" id="scatter2D" style="min-height:500px;">\n-                    <div id="toolbarDiv2D" class="col-md-12 chartDiv">\n-                    X Axis: <select id="xAxisMarker2D" style="width:150px;">\n-                            </select>\n-                    Y Axis: <select id="yAxisMarker2D" style="width:150px;">\n-                            </select>\n-               '..b'id="changeDisplay" 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="plotDivbp" class="col-md-8" style="height:100%;"></div>\n-\n-                        <div id="popDivbp" class="col-md-2" style="height:100%;">\n-                            <button id="updateDisplaybp" class="igbtn">Reset Display</button>\n-                            <table id="popTablebp" class="table table-condensed table-bordered igtable">\n-                                <thead>\n-                                    <tr>\n-                                        <th><input type="checkbox" checked id="popSelectAllbp"/></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-<script>\n-var mfiLoaded = false;\n-var populationLoaded = false;\n-var overviewPlotLoaded = false;\n-var scatter2DLoaded = false;\n-var scatter3DLoaded = false;\n-var parallelCoordinatesLoaded = false;\n-var bpLoaded = 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 == \'#mfi\') {\n-        if (mfiLoaded) {\n-            return true;\n-        }\n-        mfiLoaded = true;\n-        displayMFI();\n-      }\n-      if (tab == \'#overviewPlot\') {\n-        if (overviewPlotLoaded) {\n-            return true;\n-        }\n-        overviewPlotLoaded = true;\n-        displayOverviewPlot();\n-      }\n-      if (tab == \'#scatter2D\') {\n-        if (scatter2DLoaded) {\n-            displayScatterPopulation2D();\n-            return true;\n-        }\n-        scatter2DLoaded = true;\n-        displayScatter2D();\n-      }\n-      if (tab == \'#scatter3D\') {\n-        if (scatter3DLoaded) {\n-            displayScatterPopulation3D();\n-            return true;\n-        }\n-        scatter3DLoaded = true;\n-        displayScatter3D();\n-      }\n-      if (tab == \'#parallelCoordinates\') {\n-        if (parallelCoordinatesLoaded) {\n-            displayPopTable();\n-            displayTableGrid();\n-            return true;\n-        }\n-        parallelCoordinatesLoaded = true;\n-        displayParallelCoordinates();\n-      }\n-      if (tab == \'#boxplots\') {\n-        if (bpLoaded) {\n-            displayPopulationLegend(configbp);\n-            displayMarkerTable(configbp);\n-            updateBoxplot(configbp);\n-            return true;\n-        }\n-        bpLoaded = true;\n-        displayMFIBoxplot();\n-      }\n-    });\n-\n-    mfiLoaded = true;\n-    displayMFI();\n-});\n-</script>\n-</body>\n-</html>\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/templates/genOverviewCL.template
--- a/flow_overview/templates/genOverviewCL.template Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,299 +0,0 @@\n-<html>\n-<head>\n-<title>Flow Overview</title>\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/css/flowCL.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/color_palette.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/overview.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/scatter2D.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/scatter3D.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/scatterMFI.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/parallelCoordinates.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/profileCLs.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/boxplotsFlow.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-\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="mfi"><a href="#mfi" data-toggle="tab">MFI/Pop</a></li>\n-                <li class="homeTab" data-value="overviewPlot"><a href="#overviewPlot" data-toggle="tab">Overview Plot</a></li>\n-                <li class="homeTab" data-value="scatter2D"><a href="#scatter2D" data-toggle="tab">Scatter 2D</a></li>\n-                <li class="homeTab" data-value="scatter3D"><a href="#scatter3D" data-toggle="tab">Scatter 3D</a></li>\n-                <li class="homeTab" data-value="parallelCoordinates"><a href="#parallelCoordinates" data-toggle="tab">Parallel Coordinates</a></li>\n-                <li class="homeTab" data-value="stats"><a href="#boxplots" data-toggle="tab">Summary Statistics Boxplots</a></li>\n-                <li class="homeTab" data-value="clprofiles"><a href="#clprofiles" data-toggle="tab">Populations Cell Ontologies</a></li>\n-            </ul>\n-\n-            <div class="tab-content">\n-                <div class="tab-pane active" id="mfi" style="min-height:500px;">\n-                    <div id="mfiDiv"></div>\n-                </div>\n-\n-                <div class="tab-pane" id="overviewPlot" style="min-height:500px;">\n-                    <div id="overviewPlotDiv">Overview</div>\n-                </div>\n-\n-                <div class="tab-pane" id="scatter2D" style="min-height:500px;">\n-                    <div i'..b'    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="plotDivbp" class="col-md-8" style="height:100%;"></div>\n-\n-                        <div id="popDivbp" class="col-md-2" style="height:100%;">\n-                            &nbsp;&nbsp;<button id="updateDisplaybp" class="igbtn">Reset Display</button>\n-                            <table id="popTablebp" class="table table-condensed table-bordered igtable">\n-                                <thead>\n-                                    <tr>\n-                                        <th><input type="checkbox" checked id="popSelectAllbp"/></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-\n-                <div class="tab-pane" id="clprofiles" style="min-height:500px;">\n-                    <div class="row">\n-                        <div id="clprof"/>\n-                    </div>\n-                </div>\n-                </div>\n-            </div>\n-  \t    </div>\n-    </div>\n-</div>\n-\n-<script>\n-var mfiLoaded = false;\n-var populationLoaded = false;\n-var overviewPlotLoaded = false;\n-var scatter2DLoaded = false;\n-var scatter3DLoaded = false;\n-var parallelCoordinatesLoaded = false;\n-var clprofilesLoaded = false;\n-var bpLoaded = 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 == \'#mfi\') {\n-        if (mfiLoaded) {\n-            return true;\n-        }\n-        mfiLoaded = true;\n-        displayMFI();\n-      }\n-      if (tab == \'#overviewPlot\') {\n-        if (overviewPlotLoaded) {\n-            return true;\n-        }\n-        overviewPlotLoaded = true;\n-        displayOverviewPlot();\n-      }\n-      if (tab == \'#scatter2D\') {\n-        if (scatter2DLoaded) {\n-            displayScatterPopulation2D();\n-            return true;\n-        }\n-        scatter2DLoaded = true;\n-        displayScatter2D();\n-      }\n-      if (tab == \'#scatter3D\') {\n-        if (scatter3DLoaded) {\n-            displayScatterPopulation3D();\n-            return true;\n-        }\n-        scatter3DLoaded = true;\n-        displayScatter3D();\n-      }\n-      if (tab == \'#parallelCoordinates\') {\n-        if (parallelCoordinatesLoaded) {\n-            displayPopTable();\n-            displayTableGrid();\n-            return true;\n-        }\n-        parallelCoordinatesLoaded = true;\n-        displayParallelCoordinates();\n-      }\n-      if (tab == \'#boxplots\') {\n-        if (bpLoaded) {\n-            displayPopulationLegend(configbp);\n-            displayMarkerTable(configbp);\n-            updateBoxplot(configbp);\n-            return true;\n-        }\n-        bpLoaded = true;\n-        displayMFIBoxplot();\n-      }\n-      if (tab == \'#clprofiles\') {\n-        if (clprofilesLoaded) {\n-            return true;\n-        }\n-        clprofilesLoaded = true;\n-        displayCLTable();\n-      }\n-    });\n-\n-    mfiLoaded = true;\n-    displayMFI();\n-});\n-</script>\n-</body>\n-</html>\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/input.flowclr
--- a/flow_overview/test-data/input.flowclr Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
b'@@ -1,59998 +0,0 @@\n-CD4\tCCR7\tPopulation\n-392\t178\t24\n-560\t9\t10\n-345\t166\t15\n-180\t225\t21\n-123\t280\t25\n-555\t186\t1\n-521\t217\t1\n-98\t47\t6\n-182\t117\t12\n-251\t179\t26\n-160\t0\t6\n-85\t127\t6\n-0\t62\t5\n-146\t7\t6\n-446\t0\t10\n-556\t139\t18\n-138\t201\t21\n-556\t0\t10\n-96\t166\t6\n-141\t0\t5\n-525\t239\t18\n-64\t90\t6\n-551\t202\t18\n-507\t171\t1\n-106\t118\t6\n-14\t181\t6\n-181\t124\t6\n-467\t137\t1\n-200\t285\t25\n-143\t239\t21\n-506\t128\t1\n-496\t67\t10\n-157\t257\t25\n-57\t73\t5\n-511\t133\t18\n-519\t276\t1\n-160\t265\t25\n-170\t104\t12\n-470\t127\t1\n-214\t300\t25\n-535\t0\t2\n-78\t0\t6\n-135\t0\t5\n-70\t230\t21\n-32\t0\t6\n-205\t296\t25\n-28\t145\t6\n-520\t145\t1\n-533\t39\t10\n-0\t0\t5\n-495\t0\t2\n-497\t185\t18\n-147\t347\t21\n-87\t0\t6\n-30\t0\t6\n-543\t0\t10\n-92\t139\t5\n-0\t0\t6\n-567\t221\t18\n-151\t276\t21\n-518\t141\t18\n-213\t197\t22\n-549\t61\t2\n-562\t207\t18\n-5\t28\t5\n-63\t79\t6\n-120\t80\t21\n-21\t133\t5\n-141\t326\t25\n-180\t271\t21\n-114\t155\t21\n-216\t262\t25\n-0\t36\t5\n-459\t35\t2\n-85\t45\t6\n-534\t136\t1\n-24\t0\t5\n-227\t330\t25\n-554\t136\t1\n-127\t164\t21\n-201\t210\t25\n-429\t148\t18\n-160\t125\t21\n-153\t47\t5\n-76\t145\t6\n-545\t57\t10\n-134\t233\t21\n-481\t141\t1\n-516\t168\t1\n-174\t231\t21\n-470\t158\t1\n-128\t121\t12\n-467\t147\t1\n-133\t200\t12\n-318\t0\t15\n-181\t273\t25\n-526\t254\t1\n-223\t121\t15\n-121\t124\t21\n-57\t171\t6\n-164\t302\t21\n-382\t286\t22\n-71\t237\t21\n-500\t137\t1\n-501\t0\t2\n-519\t190\t18\n-488\t165\t1\n-523\t42\t2\n-475\t86\t2\n-538\t0\t2\n-26\t22\t6\n-157\t174\t21\n-548\t21\t10\n-203\t234\t25\n-161\t283\t25\n-60\t127\t6\n-522\t0\t2\n-69\t235\t21\n-63\t142\t6\n-171\t277\t25\n-177\t252\t21\n-138\t0\t5\n-73\t226\t21\n-529\t194\t1\n-99\t0\t6\n-0\t192\t5\n-145\t243\t21\n-579\t0\t2\n-555\t216\t1\n-525\t132\t18\n-213\t204\t21\n-202\t253\t25\n-53\t0\t6\n-0\t77\t6\n-58\t247\t21\n-546\t0\t10\n-144\t286\t25\n-84\t0\t5\n-101\t120\t5\n-564\t148\t18\n-498\t0\t10\n-576\t280\t1\n-217\t280\t21\n-0\t16\t5\n-111\t135\t6\n-514\t13\t2\n-287\t135\t15\n-330\t440\t23\n-398\t471\t23\n-567\t109\t1\n-0\t242\t6\n-215\t178\t21\n-586\t0\t2\n-56\t261\t21\n-93\t233\t25\n-128\t140\t12\n-550\t129\t1\n-105\t0\t5\n-493\t138\t18\n-112\t88\t12\n-518\t178\t18\n-510\t220\t1\n-491\t0\t10\n-552\t117\t3\n-459\t156\t22\n-87\t87\t6\n-55\t135\t6\n-148\t117\t6\n-174\t237\t25\n-237\t264\t25\n-169\t195\t12\n-119\t204\t25\n-43\t0\t6\n-558\t190\t1\n-581\t66\t2\n-180\t265\t25\n-118\t199\t21\n-155\t229\t21\n-494\t0\t2\n-400\t236\t22\n-264\t150\t21\n-37\t0\t6\n-538\t79\t10\n-226\t218\t25\n-538\t90\t2\n-544\t146\t1\n-330\t451\t17\n-547\t108\t1\n-166\t236\t21\n-126\t0\t6\n-519\t107\t10\n-520\t0\t2\n-81\t82\t5\n-222\t231\t25\n-495\t45\t2\n-277\t300\t25\n-554\t224\t18\n-558\t144\t1\n-112\t134\t6\n-512\t206\t1\n-407\t178\t24\n-516\t166\t18\n-283\t377\t16\n-528\t147\t1\n-501\t24\t2\n-140\t113\t6\n-555\t0\t2\n-470\t0\t2\n-46\t37\t6\n-562\t222\t18\n-7\t18\t6\n-24\t102\t6\n-227\t331\t25\n-155\t74\t5\n-538\t0\t10\n-542\t177\t1\n-12\t160\t6\n-180\t305\t21\n-0\t149\t6\n-541\t10\t10\n-120\t227\t21\n-504\t81\t2\n-535\t196\t18\n-536\t243\t18\n-503\t45\t2\n-112\t205\t12\n-212\t203\t12\n-542\t174\t18\n-287\t237\t24\n-75\t98\t6\n-161\t247\t21\n-167\t301\t25\n-164\t531\t9\n-524\t58\t2\n-564\t267\t1\n-500\t81\t2\n-538\t187\t1\n-555\t129\t18\n-61\t39\t6\n-524\t136\t1\n-492\t144\t18\n-105\t263\t21\n-539\t287\t1\n-538\t0\t10\n-135\t174\t21\n-527\t170\t1\n-529\t86\t10\n-196\t278\t25\n-201\t295\t25\n-232\t258\t21\n-165\t3\t6\n-173\t154\t21\n-588\t148\t1\n-79\t263\t21\n-501\t70\t10\n-132\t184\t21\n-518\t173\t18\n-486\t0\t10\n-460\t0\t2\n-535\t216\t18\n-197\t303\t25\n-158\t180\t21\n-159\t117\t21\n-541\t158\t1\n-552\t217\t18\n-0\t88\t5\n-164\t272\t21\n-286\t12\t15\n-578\t0\t2\n-538\t0\t2\n-13\t0\t6\n-91\t75\t6\n-78\t212\t21\n-532\t190\t1\n-62\t0\t6\n-540\t173\t18\n-511\t190\t18\n-551\t44\t10\n-420\t152\t22\n-226\t306\t25\n-88\t119\t4\n-180\t258\t21\n-79\t305\t21\n-84\t0\t6\n-493\t0\t10\n-78\t156\t6\n-162\t210\t25\n-155\t0\t6\n-512\t275\t18\n-33\t195\t21\n-549\t46\t2\n-74\t280\t21\n-13\t126\t6\n-467\t263\t18\n-424\t254\t24\n-188\t308\t25\n-19\t167\t6\n-185\t189\t25\n-188\t267\t25\n-18\t80\t6\n-132\t265\t21\n-441\t143\t1\n-153\t255\t7\n-526\t105\t2\n-72\t109\t6\n-524\t213\t1\n-511\t226\t1\n-31\t0\t5\n-0\t36\t5\n-496\t0\t2\n-134\t245\t21\n-532\t141\t18\n-83\t230\t12\n-505\t26\t2\n-550\t204\t18\n-244\t348\t25\n-36\t0\t6\n-0\t81\t6\n-540\t7\t2\n-522\t152\t1\n-111\t158\t6\n-450\t116\t1\n-545\t0\t2\n-214\t230\t25\n-538\t0\t10\n-538\t44\t2\n-16\t0\t6\n-0\t14\t5\n-137\t227\t21\n-480\t165\t18\n-528\t188\t1\n-112\t169\t21\n-492\t8\t2\n-495\t0\t2\n-157\t205\t25\n-508\t0\t10\n-495\t136\t1\n-12\t240\t21\n-525\t108\t1\n-593\t20\t2\n-485\t0\t2\n-196\t167\t21\n-488\t169\t18\n-107\t277\t21\n-139\t265\t21\n-77\t200\t21\n-565\t136\t1\n-185\t263\t21\n-51\t0\t5\n-281\t349\t26\n-520\t0\t10\n-557\t160\t18\n-537\t0\t2\n-109\t255\t21\n-501\t0\t10\n-497\t22\t2\n-128\t261\t25\n-558\t10\t10\n-548\t0\t2\n-570\t76\t10\n-390\t296\t22\n-0\t0\t5\n-122\t51\t5\n-508\t145\t18\n-114\t258\t21\n-552\t201\t18\n-145\t0\t6\n-36\t262\t21\n-192\t291'..b'7\n-81\t420\t7\n-248\t374\t23\n-116\t303\t25\n-170\t280\t21\n-385\t152\t24\n-556\t523\t14\n-148\t290\t21\n-109\t190\t12\n-44\t418\t7\n-108\t428\t20\n-183\t282\t25\n-445\t358\t26\n-477\t0\t10\n-156\t498\t20\n-109\t430\t20\n-131\t221\t12\n-82\t346\t7\n-387\t260\t24\n-34\t56\t5\n-452\t0\t2\n-499\t474\t14\n-99\t277\t25\n-139\t243\t25\n-365\t453\t23\n-60\t435\t7\n-130\t77\t6\n-509\t294\t1\n-89\t159\t25\n-120\t176\t21\n-510\t83\t2\n-97\t345\t7\n-102\t486\t20\n-561\t139\t18\n-72\t502\t20\n-71\t631\t16\n-11\t279\t7\n-20\t280\t21\n-76\t448\t20\n-163\t323\t25\n-513\t341\t1\n-165\t201\t21\n-104\t466\t20\n-318\t268\t22\n-525\t581\t14\n-184\t438\t20\n-115\t251\t25\n-377\t308\t24\n-549\t174\t1\n-294\t443\t26\n-32\t281\t21\n-161\t264\t21\n-471\t0\t10\n-36\t0\t5\n-145\t291\t25\n-456\t181\t1\n-421\t522\t14\n-356\t455\t23\n-270\t272\t15\n-523\t230\t18\n-550\t0\t2\n-547\t156\t1\n-185\t273\t21\n-512\t144\t1\n-320\t177\t15\n-586\t722\t17\n-523\t0\t2\n-161\t212\t21\n-383\t232\t22\n-491\t161\t1\n-545\t80\t10\n-515\t278\t18\n-365\t449\t23\n-0\t530\t20\n-74\t342\t7\n-0\t65\t5\n-558\t0\t2\n-532\t170\t18\n-55\t0\t5\n-124\t244\t12\n-492\t0\t2\n-496\t456\t14\n-542\t1\t2\n-336\t467\t23\n-177\t274\t25\n-350\t249\t24\n-530\t0\t10\n-576\t639\t17\n-26\t389\t7\n-523\t186\t1\n-166\t256\t25\n-537\t125\t1\n-16\t373\t7\n-370\t461\t23\n-248\t342\t26\n-102\t71\t5\n-540\t180\t18\n-97\t229\t12\n-168\t294\t25\n-545\t70\t10\n-130\t322\t21\n-498\t560\t14\n-1\t412\t7\n-558\t174\t18\n-551\t155\t1\n-123\t269\t21\n-0\t619\t20\n-171\t323\t25\n-513\t297\t1\n-180\t610\t16\n-532\t4\t10\n-74\t279\t7\n-86\t505\t20\n-123\t500\t20\n-73\t92\t5\n-0\t272\t7\n-533\t448\t14\n-0\t35\t5\n-65\t183\t6\n-319\t91\t15\n-313\t388\t25\n-522\t0\t10\n-50\t342\t12\n-72\t447\t20\n-203\t320\t25\n-516\t180\t18\n-70\t293\t7\n-75\t662\t20\n-90\t0\t5\n-341\t150\t15\n-78\t550\t20\n-91\t548\t20\n-203\t299\t21\n-557\t44\t10\n-543\t57\t10\n-526\t158\t1\n-96\t135\t21\n-510\t91\t10\n-44\t0\t5\n-146\t674\t16\n-501\t21\t10\n-102\t195\t21\n-40\t99\t5\n-543\t519\t14\n-510\t546\t14\n-122\t229\t21\n-559\t660\t14\n-545\t651\t17\n-482\t127\t1\n-331\t129\t15\n-537\t267\t1\n-507\t0\t10\n-260\t253\t21\n-0\t23\t6\n-162\t250\t25\n-52\t644\t20\n-403\t661\t13\n-523\t55\t2\n-517\t21\t10\n-513\t603\t14\n-213\t263\t25\n-234\t301\t12\n-165\t451\t20\n-63\t545\t20\n-534\t99\t2\n-197\t332\t26\n-119\t238\t21\n-121\t302\t7\n-287\t560\t26\n-207\t265\t25\n-266\t296\t25\n-278\t288\t25\n-381\t285\t24\n-513\t234\t18\n-176\t117\t6\n-585\t648\t17\n-499\t135\t18\n-493\t0\t2\n-90\t138\t12\n-555\t140\t1\n-182\t294\t25\n-130\t266\t21\n-527\t0\t10\n-208\t258\t25\n-522\t643\t14\n-126\t219\t21\n-487\t169\t1\n-524\t0\t10\n-144\t250\t21\n-486\t574\t14\n-531\t0\t10\n-129\t324\t25\n-202\t288\t21\n-531\t186\t18\n-537\t265\t1\n-144\t274\t12\n-9\t220\t12\n-529\t123\t1\n-101\t276\t21\n-227\t99\t21\n-203\t281\t25\n-48\t491\t20\n-129\t324\t21\n-161\t310\t25\n-520\t160\t1\n-92\t234\t12\n-54\t240\t21\n-154\t248\t21\n-358\t289\t18\n-121\t454\t20\n-212\t166\t21\n-458\t0\t2\n-0\t90\t5\n-411\t133\t24\n-256\t430\t16\n-489\t574\t14\n-249\t216\t25\n-231\t304\t25\n-155\t275\t25\n-170\t261\t21\n-210\t251\t25\n-78\t426\t20\n-0\t555\t16\n-0\t556\t20\n-513\t636\t14\n-217\t284\t25\n-169\t284\t21\n-509\t0\t10\n-558\t200\t1\n-180\t66\t6\n-487\t207\t18\n-168\t238\t21\n-505\t344\t1\n-39\t0\t5\n-206\t283\t21\n-524\t495\t14\n-123\t717\t20\n-572\t48\t2\n-178\t218\t12\n-482\t322\t26\n-551\t11\t10\n-502\t194\t1\n-196\t309\t25\n-547\t265\t18\n-42\t442\t20\n-106\t620\t16\n-130\t548\t20\n-566\t275\t18\n-523\t0\t2\n-398\t521\t14\n-93\t317\t25\n-554\t87\t10\n-174\t282\t25\n-77\t99\t5\n-136\t483\t20\n-138\t315\t25\n-168\t289\t25\n-42\t89\t6\n-219\t280\t25\n-549\t59\t10\n-97\t142\t25\n-0\t502\t20\n-149\t626\t20\n-180\t282\t25\n-0\t449\t20\n-541\t0\t10\n-528\t0\t2\n-26\t332\t7\n-81\t460\t20\n-134\t268\t25\n-431\t413\t14\n-129\t436\t20\n-345\t440\t26\n-573\t0\t10\n-154\t309\t25\n-419\t447\t13\n-564\t547\t14\n-16\t266\t7\n-262\t325\t26\n-169\t235\t25\n-42\t121\t5\n-204\t293\t25\n-302\t360\t26\n-112\t348\t12\n-534\t0\t2\n-0\t235\t12\n-517\t82\t10\n-69\t162\t21\n-83\t493\t20\n-73\t239\t21\n-488\t167\t1\n-341\t417\t26\n-163\t251\t21\n-0\t0\t6\n-549\t4\t10\n-202\t338\t25\n-546\t232\t18\n-39\t483\t16\n-183\t284\t25\n-0\t49\t5\n-232\t304\t25\n-195\t220\t25\n-0\t313\t7\n-522\t446\t14\n-231\t499\t24\n-185\t158\t21\n-146\t268\t21\n-127\t446\t20\n-103\t200\t21\n-120\t326\t7\n-560\t941\t19\n-124\t245\t21\n-112\t537\t16\n-121\t577\t20\n-173\t209\t21\n-417\t275\t22\n-25\t467\t20\n-475\t194\t1\n-144\t238\t12\n-128\t249\t21\n-81\t248\t7\n-145\t241\t21\n-216\t247\t25\n-465\t3\t10\n-389\t445\t23\n-569\t50\t2\n-160\t239\t25\n-519\t149\t1\n-552\t496\t14\n-129\t131\t6\n-439\t0\t10\n-195\t44\t21\n-568\t647\t14\n-342\t638\t23\n-145\t229\t21\n-348\t422\t23\n-406\t271\t24\n-548\t203\t1\n-102\t319\t12\n-333\t0\t15\n-510\t77\t2\n-544\t190\t18\n-54\t239\t7\n-431\t508\t26\n-543\t582\t14\n-74\t259\t21\n-143\t286\t21\n-467\t305\t26\n-504\t178\t1\n-0\t154\t5\n-169\t312\t25\n-185\t203\t21\n-521\t15\t2\n-553\t220\t18\n-44\t467\t20\n-470\t183\t1\n-58\t265\t25\n-523\t287\t18\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out1/boxplotData.json
--- a/flow_overview/test-data/out1/boxplotData.json Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,1 +0,0 @@\n-{"lower": {"CCR7":{"1":38.5,"2":-109.5,"3":-183.0,"4":-117.0,"5":-175.5,"6":-157.5,"7":68.5,"8":73.0,"9":140.375,"10":-94.5,"11":-128.0,"12":27.5,"13":137.875,"14":344.5,"15":-182.5,"16":264.5,"17":405.125,"18":40.5,"19":207.5,"20":254.0,"21":97.0,"22":11.5,"23":370.375,"24":21.5,"25":172.5,"26":201.375},"CD4":{"1":444.5,"2":443.5,"3":435.25,"4":-102.5,"5":-106.5,"6":-76.0,"7":-68.5,"8":449.5,"9":-68.0,"10":444.5,"11":-65.5,"12":-25.25,"13":415.0,"14":433.5,"15":195.75,"16":-57.375,"17":377.5,"18":447.0,"19":237.0,"20":-68.0,"21":24.5,"22":252.5,"23":272.5,"24":276.375,"25":72.5,"26":-10.5}}, "mfi": {"CCR7":{"1":188,"2":37,"3":69,"4":141,"5":68,"6":90,"7":318,"8":258,"9":420,"10":31,"11":111,"12":213,"13":424,"14":566,"15":84,"16":510,"17":598,"18":199,"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}}, "outliers": {"CCR7":{"1":[340,373,371,379,355,373,331,340,346,334,348,334,346,341,358,356,370,338,359,336,354,333,353,342,367,345,341,338,341,344],"2":[],"3":[],"4":[],"5":[],"6":[],"7":[],"8":[525,460,426,426,512,579,504,554,437,647,463,499,492,520,505,441,468,430,515,563,436,430,459,577,450,458,474,449,444,513,477,501,444,438,431,441,577,486,447,497,599,443,439,426,474,448,438,508,444,437,521,432,516,428,443,511,530,541,469,507,432,452,454,427,488,436,507],"9":[711,706,725,761,693,768,676,699,817,855,679,714,771,780,825,829],"10":[],"11":[],"12":[0,13,0,26,399],"13":[750,120,727,753,711,735,724,711,735,714,710,768,780],"14":[],"15":[],"16":[743,815,836,817,784,822,741,761,850,771,817,772,750],"17":[851,797,897,867,823,811,893,786,393,811,398],"18":[365,351,372,351,378,372,367,353,361,355,365,371,384,377,349,388,367,380,401,378,379,371,371,375,358,355],"19":[],"20":[],"21":[49,61,22,0,53,73,71,364,37,91,88,0,87,87,62,35,0,34,39,93,88,90,58,39,56,362,0,85,96,393,0,87,0,81,49,15,89,71,32,0,1,29,40,30,90,71,80,40,35,0,2,49,51,76,0,362,51,6,83,69,80,83,0,66,35,60,0,94,72,85,370,74,0,62,45,84,72,25,0,88,68,65,10,90,77,92,71,89,70,41,54,67,0,62,74,83,58,86,77,74],"22":[7,0,0,0,0,422,0,0,5,6,0,0,0,0,0,0,0,0,0,412,0,0,0,0,0,0,0,0,0,1,0,0,0,6,0,0,0,0,0,0,0,0,0,430,446,0,0,421],"23":[368,685,615,588,747,874,798,677,635,637,578,849,856,725,952,647,822,578,738,250,677,615,742,615,603,256,236,574,657,675,661,584,299,327,638,340,599,271,321,332,332,607,355,570,607,572,328,589,584,311,312,700,590,659,613,361,356,253,292,347,707,654,360,771,684,342,640,608,837,920,579,907,835,569,594,667,800,597,786,731,595,890,800,637,692,727,643,685,358,710,587,609,978,750,335,753,638],"24":[0,0,0,5,0,0,0,15,0,6,0,4,0,0,7,0,4,0,0,18,0,4,0,0,0,0,0,0,21,0,0,0,407,0,4,0,494,0,2,19,7,496,0,468,0,0,499],"25":[395,378,140,152,424,487,423,169,142,129,162,119,166,139,162,150,404,158,163,162,117,161,165,168,159,101,170,448,159,158,161,139,131,402,82,98,98,401,456,388,155,400,163,158,157,416,394,165,167,172,156,166,407,418,134,168,149,397,430,151,150,160,114,143,385,169,156,381,128,164,159,141,428,169,145,96,165,401,171,165,164,114,154,397,147,114,412,107,469,168,417,161,168,160,169,147,117,169,166,148],"26":[179,138,193,500,496,475,478,521,164,479,478,183,560,483,503,485,479,160,513,175,482,523,199,184,189,512,535,499,603,161,482,515,521,526,546,482,531,506,543,507,479,495,617,526,482,501,622,479,478,492,489,484,534,495,492,476,560,487,560,508]},"CD4":{"1":[609,371,433,393,359,430,409,393,425,368,398,381,421,398,413,444,383,405,432,423,361,443,441,405,323,404,429,415,430,350,405,414,421,440,434,361,434,332,440,410,418,397,421,441,349,441,416,406,441,377,369,417,379,399,413,380,439,357,406,384,338,421,354,423,439,437,419,343,440,371,403,444,348,444,354,427,427,443,389,393,439,355,443,436,350,438,626,441,434,439,413,439,418,354,442,304,367,408,433,382],"2":[428,409,398,414,392,439,416,613,422,437,442,420,'..b'0,385,430,384,443,418,414,337,320,446,358],"19":[764,768,775,235,216,208,210,1023,193],"20":[304,302,313,363,346,261,305,249,299,235,260],"21":[299,1,0,22,10,290,0,329,0,24,14,7,279,0,11,15,17,394,357,19,21,12,0,8,0,0,7,0,280,23,18,0,13,10,301,0,0,305,276,0,0,0,8,21,24,293,10,0,13,21,8,282,7,8,0,357,8,23,17,24,6,24,17,9,24,335,0,0,11,281,0,7,0,12,23,0,283,0,10,0,0,20,6,346,22,24,18,0,12,273,0,10,274,282,322,0,12,307,12,271],"22":[213,83,561,93,204,194,247,588,242,136,113,219,228,170,215,177,579,163,136,220,197,573,252,235,578,95,623,246,177,251,209,633,203,161,550,185,250,579,89,169,139,214,240,151,246,126,178,97,241,250,150,244,190,576,221,226,243,205,214,223,176,188,242,229,191,134,540,249,237,242,171,195,178,169,214,223,208],"23":[248,503,179,240,259,505,536,269,499,517,196,628,270,268,231,494,575,548,529,211,505,580,505,181,262,229,211,517,525,216,189,512,196,492,267,178,189,591,238,499,225,252,494,493,260,484,548,540,249,239,177,205,465,224,536,479,231,697,465,255,237,180,262,269,488,521,187,249,549,272,216,538,248],"24":[528,115,273,573,262,220,90,215,271,195,215,200,247,569,585,181,528,226,234,517,554,269,263,611,263,519,110,247,252,255,547,546,271,269,574,262,213,578,232,203,258,264,174,537,611,559,260,253,255,267,274,253,186,206,618,162,248,271,578,251,181,273,236,521,245,179,618,231],"25":[48,65,69,68,72,27,68,67,52,67,3,372,321,327,71,311,50,320,38,56,39,46,356,332,313,47,58,61,294,56,297,66,406,0,65,320,357,67,297,335,40,64,344,332,63,309,318,341,50,28,53,296,307,0,65,41,44,43,36,65,71,6,401,330,0,293,71,293,44,35,59,304,37,305,72,69,45,72,68,56,66,48,298,321,0,38,72,63,29,62,38,25,302,294,32,0,39,303,347,69],"26":[]}}, "q1": {"CCR7":{"1":148.0,"2":0.0,"3":0.0,"4":75.0,"5":0.0,"6":24.0,"7":256.0,"8":205.0,"9":339.5,"10":0.0,"11":49.0,"12":164.0,"13":352.0,"14":514.0,"15":8.0,"16":443.0,"17":547.25,"18":156.0,"19":515.0,"20":464.0,"21":196.0,"22":160.0,"23":442.0,"24":164.0,"25":246.0,"26":303.75},"CD4":{"1":503.0,"2":505.0,"3":494.5,"4":31.0,"5":12.0,"6":35.0,"7":44.0,"8":502.0,"9":79.0,"10":503.0,"11":47.0,"12":80.5,"13":493.0,"14":504.0,"15":291.0,"16":60.0,"17":484.0,"18":507.0,"19":426.0,"20":43.0,"21":116.0,"22":359.0,"23":343.0,"24":366.0,"25":155.0,"26":246.0}}, "q2": {"CCR7":{"1":182.0,"2":21.0,"3":68.0,"4":147.0,"5":61.0,"6":95.0,"7":323.0,"8":244.0,"9":404.5,"10":11.0,"11":114.0,"12":210.0,"13":426.0,"14":580.5,"15":88.0,"16":502.0,"17":603.0,"18":193.0,"19":593.0,"20":515.0,"21":234.0,"22":215.0,"23":465.0,"24":217.0,"25":272.0,"26":334.0},"CD4":{"1":524.0,"2":526.0,"3":516.0,"4":77.0,"5":52.0,"6":72.0,"7":85.0,"8":520.0,"9":125.5,"10":524.0,"11":86.0,"12":115.0,"13":521.0,"14":530.0,"15":324.0,"16":101.5,"17":529.5,"18":528.0,"19":480.0,"20":84.0,"21":147.0,"22":398.0,"23":365.0,"24":400.0,"25":184.0,"26":296.0}}, "q3": {"CCR7":{"1":221.0,"2":73.0,"3":122.0,"4":203.0,"5":117.0,"6":145.0,"7":381.0,"8":293.0,"9":472.25,"10":63.0,"11":167.0,"12":255.0,"13":494.75,"14":627.0,"15":135.0,"16":562.0,"17":642.0,"18":233.0,"19":720.0,"20":604.0,"21":262.0,"22":259.0,"23":489.75,"24":259.0,"25":295.0,"26":372.0},"CD4":{"1":542.0,"2":546.0,"3":534.0,"4":120.0,"5":91.0,"6":109.0,"7":119.0,"8":537.0,"9":177.0,"10":542.0,"11":122.0,"12":151.0,"13":545.0,"14":551.0,"15":354.5,"16":138.25,"17":555.0,"18":547.0,"19":552.0,"20":117.0,"21":177.0,"22":430.0,"23":390.0,"24":425.75,"25":210.0,"26":417.0}}, "upper": {"CCR7":{"1":330.5,"2":182.5,"3":305.0,"4":395.0,"5":292.5,"6":326.5,"7":568.5,"8":425.0,"9":671.375,"10":157.5,"11":344.0,"12":391.5,"13":708.875,"14":796.5,"15":325.5,"16":740.5,"17":784.125,"18":348.5,"19":1027.5,"20":814.0,"21":361.0,"22":407.5,"23":561.375,"24":401.5,"25":368.5,"26":474.375},"CD4":{"1":600.5,"2":607.5,"3":593.25,"4":253.5,"5":209.5,"6":220.0,"7":231.5,"8":589.5,"9":324.0,"10":600.5,"11":234.5,"12":256.75,"13":623.0,"14":621.5,"15":449.75,"16":255.625,"17":661.5,"18":607.0,"19":741.0,"20":228.0,"21":268.5,"22":536.5,"23":460.5,"24":515.375,"25":292.5,"26":673.5}}}\n\\ No newline at end of file\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out1/flow.mfi
--- a/flow_overview/test-data/out1/flow.mfi Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
@@ -1,27 +0,0 @@
-Population CD4 CCR7
-1 520 188
-2 523 37
-3 512 69
-4 84 141
-5 56 68
-6 75 90
-7 83 318
-8 517 258
-9 138 420
-10 521 31
-11 85 111
-12 119 213
-13 516 424
-14 526 566
-15 322 84
-16 104 510
-17 509 598
-18 524 199
-19 490 629
-20 82 534
-21 145 224
-22 389 204
-23 366 476
-24 392 204
-25 182 269
-26 325 343
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out1/flow.mfi_pop
--- a/flow_overview/test-data/out1/flow.mfi_pop Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
@@ -1,27 +0,0 @@
-CD4 CCR7 Count Percentage Population
-519.72 187.88 3842 6.40 1
-522.94 37.10 2765 4.61 2
-512.11 68.72 2163 3.61 3
-83.54 141.19 1207 2.01 4
-55.56 67.51 2332 3.89 5
-75.33 90.47 3969 6.62 6
-82.72 318.03 1809 3.02 7
-517.07 257.64 2260 3.77 8
-138.25 419.51 342 0.57 9
-520.67 31.29 3497 5.83 10
-85.41 110.92 1903 3.17 11
-119.09 212.60 1599 2.67 12
-515.81 423.78 2238 3.73 13
-525.80 565.61 930 1.55 14
-322.30 84.31 555 0.93 15
-103.98 509.50 872 1.45 16
-509.05 597.98 362 0.60 17
-524.02 198.53 2601 4.34 18
-489.73 629.26 341 0.57 19
-81.83 534.25 1750 2.92 20
-144.71 224.04 9174 15.29 21
-388.94 203.73 1401 2.34 22
-365.75 476.01 1058 1.76 23
-392.21 204.17 1166 1.94 24
-181.69 268.60 8725 14.54 25
-325.42 342.86 1136 1.89 26
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out1/flow.overview
--- a/flow_overview/test-data/out1/flow.overview Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
@@ -1,13 +0,0 @@
-<table>
-<tr><td>&nbsp;</td>
-<td>CD4</td>
-<td>CCR7</td>
-<tr>
-<td>CD4</td>
-<td><img src="m0_m0_90X90.png"/></td><td><img src="m1_m0_90X90.png"/></td></tr>
-<tr>
-<td>CCR7</td>
-<td><img src="m0_m1_90X90.png"/></td><td><img src="m1_m1_90X90.png"/></td></tr>
-</table>
-</body>
-<html>
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out1/flow.sample
--- a/flow_overview/test-data/out1/flow.sample Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
b'@@ -1,20001 +0,0 @@\n-CD4\tCCR7\tPopulation\n-392\t178\t24\n-560\t9\t10\n-345\t166\t15\n-180\t225\t21\n-123\t280\t25\n-555\t186\t1\n-521\t217\t1\n-98\t47\t6\n-182\t117\t12\n-251\t179\t26\n-160\t0\t6\n-85\t127\t6\n-0\t62\t5\n-146\t7\t6\n-446\t0\t10\n-556\t139\t18\n-138\t201\t21\n-556\t0\t10\n-96\t166\t6\n-141\t0\t5\n-525\t239\t18\n-64\t90\t6\n-551\t202\t18\n-507\t171\t1\n-106\t118\t6\n-14\t181\t6\n-181\t124\t6\n-467\t137\t1\n-200\t285\t25\n-143\t239\t21\n-506\t128\t1\n-496\t67\t10\n-157\t257\t25\n-57\t73\t5\n-511\t133\t18\n-519\t276\t1\n-160\t265\t25\n-170\t104\t12\n-470\t127\t1\n-214\t300\t25\n-535\t0\t2\n-78\t0\t6\n-135\t0\t5\n-70\t230\t21\n-32\t0\t6\n-205\t296\t25\n-28\t145\t6\n-520\t145\t1\n-533\t39\t10\n-0\t0\t5\n-495\t0\t2\n-497\t185\t18\n-147\t347\t21\n-87\t0\t6\n-30\t0\t6\n-543\t0\t10\n-92\t139\t5\n-0\t0\t6\n-567\t221\t18\n-151\t276\t21\n-518\t141\t18\n-213\t197\t22\n-549\t61\t2\n-562\t207\t18\n-5\t28\t5\n-63\t79\t6\n-120\t80\t21\n-21\t133\t5\n-141\t326\t25\n-180\t271\t21\n-114\t155\t21\n-216\t262\t25\n-0\t36\t5\n-459\t35\t2\n-85\t45\t6\n-534\t136\t1\n-24\t0\t5\n-227\t330\t25\n-554\t136\t1\n-127\t164\t21\n-201\t210\t25\n-429\t148\t18\n-160\t125\t21\n-153\t47\t5\n-76\t145\t6\n-545\t57\t10\n-134\t233\t21\n-481\t141\t1\n-516\t168\t1\n-174\t231\t21\n-470\t158\t1\n-128\t121\t12\n-467\t147\t1\n-133\t200\t12\n-318\t0\t15\n-181\t273\t25\n-526\t254\t1\n-223\t121\t15\n-121\t124\t21\n-57\t171\t6\n-164\t302\t21\n-382\t286\t22\n-71\t237\t21\n-500\t137\t1\n-501\t0\t2\n-519\t190\t18\n-488\t165\t1\n-523\t42\t2\n-475\t86\t2\n-538\t0\t2\n-26\t22\t6\n-157\t174\t21\n-548\t21\t10\n-203\t234\t25\n-161\t283\t25\n-60\t127\t6\n-522\t0\t2\n-69\t235\t21\n-63\t142\t6\n-171\t277\t25\n-177\t252\t21\n-138\t0\t5\n-73\t226\t21\n-529\t194\t1\n-99\t0\t6\n-0\t192\t5\n-145\t243\t21\n-579\t0\t2\n-555\t216\t1\n-525\t132\t18\n-213\t204\t21\n-202\t253\t25\n-53\t0\t6\n-0\t77\t6\n-58\t247\t21\n-546\t0\t10\n-144\t286\t25\n-84\t0\t5\n-101\t120\t5\n-564\t148\t18\n-498\t0\t10\n-576\t280\t1\n-217\t280\t21\n-0\t16\t5\n-111\t135\t6\n-514\t13\t2\n-287\t135\t15\n-330\t440\t23\n-398\t471\t23\n-567\t109\t1\n-0\t242\t6\n-215\t178\t21\n-586\t0\t2\n-56\t261\t21\n-93\t233\t25\n-128\t140\t12\n-550\t129\t1\n-105\t0\t5\n-493\t138\t18\n-112\t88\t12\n-518\t178\t18\n-510\t220\t1\n-491\t0\t10\n-552\t117\t3\n-459\t156\t22\n-87\t87\t6\n-55\t135\t6\n-148\t117\t6\n-174\t237\t25\n-237\t264\t25\n-169\t195\t12\n-119\t204\t25\n-43\t0\t6\n-558\t190\t1\n-581\t66\t2\n-180\t265\t25\n-118\t199\t21\n-155\t229\t21\n-494\t0\t2\n-400\t236\t22\n-264\t150\t21\n-37\t0\t6\n-538\t79\t10\n-226\t218\t25\n-538\t90\t2\n-544\t146\t1\n-330\t451\t17\n-547\t108\t1\n-166\t236\t21\n-126\t0\t6\n-519\t107\t10\n-520\t0\t2\n-81\t82\t5\n-222\t231\t25\n-495\t45\t2\n-277\t300\t25\n-554\t224\t18\n-558\t144\t1\n-112\t134\t6\n-512\t206\t1\n-407\t178\t24\n-516\t166\t18\n-283\t377\t16\n-528\t147\t1\n-501\t24\t2\n-140\t113\t6\n-555\t0\t2\n-470\t0\t2\n-46\t37\t6\n-562\t222\t18\n-7\t18\t6\n-24\t102\t6\n-227\t331\t25\n-155\t74\t5\n-538\t0\t10\n-542\t177\t1\n-12\t160\t6\n-180\t305\t21\n-0\t149\t6\n-541\t10\t10\n-120\t227\t21\n-504\t81\t2\n-535\t196\t18\n-536\t243\t18\n-503\t45\t2\n-112\t205\t12\n-212\t203\t12\n-542\t174\t18\n-287\t237\t24\n-75\t98\t6\n-161\t247\t21\n-167\t301\t25\n-164\t531\t9\n-524\t58\t2\n-564\t267\t1\n-500\t81\t2\n-538\t187\t1\n-555\t129\t18\n-61\t39\t6\n-524\t136\t1\n-492\t144\t18\n-105\t263\t21\n-539\t287\t1\n-538\t0\t10\n-135\t174\t21\n-527\t170\t1\n-529\t86\t10\n-196\t278\t25\n-201\t295\t25\n-232\t258\t21\n-165\t3\t6\n-173\t154\t21\n-588\t148\t1\n-79\t263\t21\n-501\t70\t10\n-132\t184\t21\n-518\t173\t18\n-486\t0\t10\n-460\t0\t2\n-535\t216\t18\n-197\t303\t25\n-158\t180\t21\n-159\t117\t21\n-541\t158\t1\n-552\t217\t18\n-0\t88\t5\n-164\t272\t21\n-286\t12\t15\n-578\t0\t2\n-538\t0\t2\n-13\t0\t6\n-91\t75\t6\n-78\t212\t21\n-532\t190\t1\n-62\t0\t6\n-540\t173\t18\n-511\t190\t18\n-551\t44\t10\n-420\t152\t22\n-226\t306\t25\n-88\t119\t4\n-180\t258\t21\n-79\t305\t21\n-84\t0\t6\n-493\t0\t10\n-78\t156\t6\n-162\t210\t25\n-155\t0\t6\n-512\t275\t18\n-33\t195\t21\n-549\t46\t2\n-74\t280\t21\n-13\t126\t6\n-467\t263\t18\n-424\t254\t24\n-188\t308\t25\n-19\t167\t6\n-185\t189\t25\n-188\t267\t25\n-18\t80\t6\n-132\t265\t21\n-441\t143\t1\n-153\t255\t7\n-526\t105\t2\n-72\t109\t6\n-524\t213\t1\n-511\t226\t1\n-31\t0\t5\n-0\t36\t5\n-496\t0\t2\n-134\t245\t21\n-532\t141\t18\n-83\t230\t12\n-505\t26\t2\n-550\t204\t18\n-244\t348\t25\n-36\t0\t6\n-0\t81\t6\n-540\t7\t2\n-522\t152\t1\n-111\t158\t6\n-450\t116\t1\n-545\t0\t2\n-214\t230\t25\n-538\t0\t10\n-538\t44\t2\n-16\t0\t6\n-0\t14\t5\n-137\t227\t21\n-480\t165\t18\n-528\t188\t1\n-112\t169\t21\n-492\t8\t2\n-495\t0\t2\n-157\t205\t25\n-508\t0\t10\n-495\t136\t1\n-12\t240\t21\n-525\t108\t1\n-593\t20\t2\n-485\t0\t2\n-196\t167\t21\n-488\t169\t18\n-107\t277\t21\n-139\t265\t21\n-77\t200\t21\n-565\t136\t1\n-185\t263\t21\n-51\t0\t5\n-281\t349\t26\n-520\t0\t10\n-557\t160\t18\n-537\t0\t2\n-109\t255\t21\n-501\t0\t10\n-497\t22\t2\n-128\t261\t25\n-558\t10\t10\n-548\t0\t2\n-570\t76\t10\n-390\t296\t22\n-0\t0\t5\n-122\t51\t5\n-508\t145\t18\n-114\t258\t21\n-552\t201\t18\n-145\t0\t6\n-36\t262\t21\n-192\t291'..b'\n-487\t608\t17\n-67\t615\t20\n-129\t640\t20\n-533\t602\t17\n-555\t574\t14\n-46\t635\t20\n-566\t720\t14\n-42\t481\t20\n-0\t490\t20\n-0\t488\t20\n-540\t612\t17\n-84\t527\t20\n-132\t434\t20\n-573\t687\t17\n-532\t587\t17\n-0\t431\t20\n-125\t664\t20\n-528\t634\t14\n-552\t614\t17\n-556\t604\t14\n-549\t472\t14\n-584\t461\t14\n-492\t483\t14\n-551\t531\t14\n-533\t692\t14\n-552\t605\t17\n-487\t516\t14\n-502\t617\t14\n-56\t529\t20\n-577\t489\t14\n-106\t629\t20\n-101\t619\t20\n-140\t453\t20\n-530\t528\t14\n-477\t467\t14\n-128\t499\t20\n-97\t531\t20\n-536\t485\t14\n-143\t644\t20\n-0\t587\t20\n-569\t659\t17\n-26\t539\t20\n-569\t631\t17\n-574\t597\t17\n-151\t475\t20\n-0\t713\t20\n-150\t459\t20\n-533\t626\t14\n-147\t641\t20\n-473\t583\t14\n-562\t667\t14\n-80\t474\t20\n-78\t432\t20\n-502\t587\t17\n-0\t529\t20\n-0\t613\t20\n-78\t446\t20\n-117\t414\t20\n-73\t575\t20\n-392\t645\t17\n-132\t445\t20\n-500\t594\t14\n-533\t531\t14\n-48\t665\t20\n-153\t617\t20\n-95\t456\t20\n-528\t456\t14\n-53\t456\t20\n-76\t498\t20\n-501\t487\t17\n-103\t485\t20\n-501\t614\t17\n-505\t600\t17\n-520\t602\t14\n-82\t472\t20\n-99\t470\t20\n-561\t435\t14\n-71\t475\t20\n-552\t559\t17\n-560\t408\t14\n-503\t595\t14\n-484\t557\t14\n-71\t496\t20\n-49\t521\t20\n-505\t647\t14\n-88\t589\t20\n-531\t477\t14\n-624\t620\t14\n-540\t580\t17\n-97\t595\t20\n-78\t552\t20\n-136\t479\t20\n-507\t377\t14\n-126\t566\t20\n-97\t512\t20\n-0\t595\t20\n-485\t517\t14\n-424\t422\t17\n-487\t591\t14\n-43\t476\t20\n-58\t453\t20\n-444\t615\t17\n-48\t669\t20\n-508\t633\t14\n-91\t472\t20\n-567\t650\t14\n-129\t507\t20\n-69\t537\t20\n-569\t395\t14\n-4\t568\t20\n-11\t585\t20\n-0\t426\t20\n-574\t561\t14\n-527\t601\t17\n-98\t590\t20\n-528\t456\t14\n-563\t600\t17\n-67\t464\t20\n-75\t599\t20\n-148\t559\t20\n-19\t523\t20\n-558\t636\t14\n-0\t515\t20\n-97\t431\t20\n-509\t626\t14\n-85\t475\t20\n-139\t592\t20\n-541\t706\t17\n-0\t438\t20\n-0\t503\t20\n-96\t612\t20\n-96\t426\t20\n-155\t678\t20\n-116\t475\t20\n-39\t455\t20\n-69\t447\t20\n-91\t476\t20\n-575\t641\t14\n-127\t465\t20\n-6\t438\t20\n-94\t471\t20\n-525\t653\t17\n-100\t602\t20\n-113\t621\t20\n-165\t514\t20\n-14\t575\t20\n-577\t535\t14\n-566\t441\t14\n-148\t583\t20\n-114\t441\t20\n-57\t506\t20\n-580\t565\t14\n-60\t565\t20\n-99\t466\t20\n-70\t446\t20\n-474\t580\t17\n-545\t546\t14\n-73\t435\t20\n-16\t431\t20\n-24\t486\t20\n-1\t634\t20\n-180\t590\t20\n-60\t422\t20\n-609\t636\t14\n-515\t455\t14\n-114\t570\t20\n-110\t503\t20\n-0\t599\t20\n-43\t589\t20\n-550\t622\t14\n-494\t451\t14\n-108\t508\t20\n-576\t673\t14\n-28\t541\t20\n-0\t456\t20\n-572\t580\t14\n-0\t459\t20\n-0\t471\t20\n-299\t521\t17\n-71\t635\t20\n-83\t648\t20\n-479\t692\t17\n-108\t438\t20\n-85\t550\t20\n-140\t739\t20\n-191\t543\t20\n-123\t477\t20\n-66\t679\t20\n-24\t520\t20\n-67\t653\t20\n-83\t560\t20\n-545\t680\t17\n-500\t488\t14\n-576\t423\t14\n-70\t471\t20\n-35\t681\t20\n-540\t607\t14\n-575\t602\t14\n-6\t519\t20\n-514\t462\t17\n-106\t631\t20\n-76\t639\t20\n-562\t625\t14\n-111\t627\t20\n-517\t538\t14\n-0\t502\t20\n-149\t468\t20\n-560\t537\t14\n-497\t541\t14\n-83\t514\t20\n-86\t524\t20\n-556\t611\t14\n-545\t698\t14\n-100\t658\t20\n-90\t587\t20\n-560\t631\t14\n-575\t628\t14\n-0\t507\t20\n-117\t499\t20\n-120\t693\t20\n-568\t539\t14\n-111\t451\t20\n-525\t514\t14\n-522\t511\t14\n-20\t587\t20\n-98\t500\t20\n-141\t463\t20\n-527\t522\t14\n-41\t424\t20\n-494\t595\t14\n-87\t495\t20\n-18\t477\t20\n-531\t443\t14\n-98\t571\t20\n-542\t568\t14\n-106\t445\t20\n-0\t436\t20\n-547\t658\t14\n-0\t545\t20\n-470\t455\t14\n-562\t632\t14\n-550\t498\t14\n-128\t600\t20\n-72\t586\t20\n-78\t552\t20\n-122\t498\t20\n-75\t663\t20\n-457\t416\t14\n-99\t484\t20\n-168\t470\t20\n-495\t408\t14\n-109\t473\t20\n-92\t583\t20\n-99\t481\t20\n-530\t540\t14\n-0\t514\t20\n-58\t634\t20\n-153\t528\t20\n-570\t468\t14\n-452\t433\t14\n-141\t432\t20\n-479\t517\t14\n-20\t438\t20\n-116\t449\t20\n-451\t493\t14\n-79\t483\t20\n-0\t448\t20\n-440\t598\t14\n-0\t498\t20\n-13\t499\t20\n-568\t646\t14\n-68\t616\t20\n-31\t646\t20\n-511\t617\t14\n-511\t645\t14\n-54\t591\t20\n-82\t503\t20\n-66\t703\t20\n-82\t573\t20\n-453\t418\t14\n-56\t505\t20\n-19\t578\t20\n-8\t610\t20\n-549\t681\t14\n-572\t637\t14\n-96\t483\t20\n-0\t674\t20\n-78\t545\t20\n-97\t677\t20\n-503\t625\t14\n-466\t509\t14\n-491\t601\t14\n-501\t501\t14\n-21\t570\t20\n-36\t585\t20\n-493\t576\t14\n-503\t426\t14\n-122\t569\t20\n-528\t566\t14\n-83\t640\t20\n-129\t432\t20\n-478\t413\t14\n-163\t423\t20\n-0\t636\t20\n-565\t599\t14\n-540\t659\t14\n-0\t582\t20\n-40\t643\t20\n-0\t447\t20\n-61\t549\t20\n-584\t609\t14\n-542\t425\t14\n-38\t425\t20\n-498\t408\t14\n-0\t615\t20\n-83\t452\t20\n-508\t623\t14\n-80\t516\t20\n-92\t464\t20\n-346\t632\t20\n-9\t623\t20\n-123\t502\t20\n-133\t538\t20\n-525\t436\t14\n-33\t536\t20\n-524\t608\t14\n-0\t529\t20\n-0\t705\t20\n-87\t620\t20\n-87\t424\t20\n-17\t506\t20\n-549\t537\t14\n-79\t445\t20\n-89\t499\t20\n-0\t575\t20\n-124\t598\t20\n-78\t455\t20\n-101\t485\t20\n-139\t494\t20\n-113\t502\t20\n-103\t622\t20\n-49\t458\t20\n-61\t551\t20\n-0\t576\t20\n-123\t643\t20\n-105\t550\t20\n-86\t534\t20\n-69\t454\t20\n-74\t735\t20\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out1/m0_m0_90X90.png
b
Binary file flow_overview/test-data/out1/m0_m0_90X90.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out1/m0_m1_90X90.png
b
Binary file flow_overview/test-data/out1/m0_m1_90X90.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out1/m1_m0_90X90.png
b
Binary file flow_overview/test-data/out1/m1_m0_90X90.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out1/m1_m1_90X90.png
b
Binary file flow_overview/test-data/out1/m1_m1_90X90.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out1/out.html
--- a/flow_overview/test-data/out1/out.html Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,281 +0,0 @@\n-<html>\n-<head>\n-<title>Flow Overview</title>\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/color_palette.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/overview.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/scatter2D.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/scatter3D.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/scatterMFI.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/parallelCoordinates.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/boxplotsFlow.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-\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="mfi"><a href="#mfi" data-toggle="tab">MFI/Pop</a></li>\n-                <li class="homeTab" data-value="overviewPlot"><a href="#overviewPlot" data-toggle="tab">Overview Plot</a></li>\n-                <li class="homeTab" data-value="scatter2D"><a href="#scatter2D" data-toggle="tab">Scatter 2D</a></li>\n-                <li class="homeTab" data-value="scatter3D"><a href="#scatter3D" data-toggle="tab">Scatter 3D</a></li>\n-                <li class="homeTab" data-value="parallelCoordinates"><a href="#parallelCoordinates" data-toggle="tab">Parallel Coordinates</a></li>\n-                <li class="homeTab" data-value="stats"><a href="#boxplots" data-toggle="tab">Summary Statistics Boxplots</a></li>\n-            </ul>\n-\n-            <div class="tab-content">\n-                <div class="tab-pane active" id="mfi" style="min-height:500px;">\n-                    <div id="mfiDiv"></div>\n-                </div>\n-\n-                <div class="tab-pane" id="overviewPlot" style="min-height:500px;">\n-                    <div id="overviewPlotDiv">Overview</div>\n-                </div>\n-\n-                <div class="tab-pane" id="scatter2D" style="min-height:500px;">\n-                    <div id="toolbarDiv2D" class="col-md-12 chartDiv">\n-                    X Axis: <select id="xAxisMarker2D" style="width:150px;">\n-                            </select>\n-                    Y Axis: <select id="yAxisMarker2D" style="width:150px;">\n-                            </select>\n-               '..b'              <button id="changeDisplay" 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="plotDivbp" class="col-md-8" style="height:100%;"></div>\n-\n-                        <div id="popDivbp" class="col-md-2" style="height:100%;">\n-                            <button id="updateDisplaybp" class="igbtn">Reset Display</button>\n-                            <table id="popTablebp" class="table table-condensed table-bordered igtable">\n-                                <thead>\n-                                    <tr>\n-                                        <th><input type="checkbox" checked id="popSelectAllbp"/></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-<script>\n-var mfiLoaded = false;\n-var populationLoaded = false;\n-var overviewPlotLoaded = false;\n-var scatter2DLoaded = false;\n-var scatter3DLoaded = false;\n-var parallelCoordinatesLoaded = false;\n-var bpLoaded = 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 == \'#mfi\') {\n-        if (mfiLoaded) {\n-            return true;\n-        }\n-        mfiLoaded = true;\n-        displayMFI();\n-      }\n-      if (tab == \'#overviewPlot\') {\n-        if (overviewPlotLoaded) {\n-            return true;\n-        }\n-        overviewPlotLoaded = true;\n-        displayOverviewPlot();\n-      }\n-      if (tab == \'#scatter2D\') {\n-        if (scatter2DLoaded) {\n-            displayScatterPopulation2D();\n-            return true;\n-        }\n-        scatter2DLoaded = true;\n-        displayScatter2D();\n-      }\n-      if (tab == \'#scatter3D\') {\n-        if (scatter3DLoaded) {\n-            displayScatterPopulation3D();\n-            return true;\n-        }\n-        scatter3DLoaded = true;\n-        displayScatter3D();\n-      }\n-      if (tab == \'#parallelCoordinates\') {\n-        if (parallelCoordinatesLoaded) {\n-            displayPopTable();\n-            displayTableGrid();\n-            return true;\n-        }\n-        parallelCoordinatesLoaded = true;\n-        displayParallelCoordinates();\n-      }\n-      if (tab == \'#boxplots\') {\n-        if (bpLoaded) {\n-            displayPopulationLegend(configbp);\n-            displayMarkerTable(configbp);\n-            updateBoxplot(configbp);\n-            return true;\n-        }\n-        bpLoaded = true;\n-        displayMFIBoxplot();\n-      }\n-    });\n-\n-    mfiLoaded = true;\n-    displayMFI();\n-});\n-</script>\n-</body>\n-</html>\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/CLprofiles.txt
--- a/flow_overview/test-data/out2/CLprofiles.txt Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
@@ -1,27 +0,0 @@
-Population FlowCL Query Nb Results Link to PDF Top Result Label Top Result Score Top Result CL
-1 <a href="flowcl_pop01.txt" target="_blank">CD4+CCR7-</a> 3 <a href="flowcl_pop01.pdf" target="_blank">PDF</a> effector CD4-positive, alpha-beta T cell 0.333 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0001044" target="_blank">CL_0001044</a>
-2 <a href="flowcl_pop01.txt" target="_blank">CD4+CCR7-</a> 3 <a href="flowcl_pop01.pdf" target="_blank">PDF</a> effector CD4-positive, alpha-beta T cell 0.333 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0001044" target="_blank">CL_0001044</a>
-3 <a href="flowcl_pop01.txt" target="_blank">CD4+CCR7-</a> 3 <a href="flowcl_pop01.pdf" target="_blank">PDF</a> effector CD4-positive, alpha-beta T cell 0.333 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0001044" target="_blank">CL_0001044</a>
-4 <a href="flowcl_pop04.txt" target="_blank">CD4-CCR7-</a> 5 <a href="flowcl_pop04.pdf" target="_blank">PDF</a> effector CD8-positive, alpha-beta T cell 0.333 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0001050" target="_blank">CL_0001050</a>
-5 <a href="flowcl_pop04.txt" target="_blank">CD4-CCR7-</a> 5 <a href="flowcl_pop04.pdf" target="_blank">PDF</a> effector CD8-positive, alpha-beta T cell 0.333 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0001050" target="_blank">CL_0001050</a>
-6 <a href="flowcl_pop04.txt" target="_blank">CD4-CCR7-</a> 5 <a href="flowcl_pop04.pdf" target="_blank">PDF</a> effector CD8-positive, alpha-beta T cell 0.333 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0001050" target="_blank">CL_0001050</a>
-7 <a href="flowcl_pop07.txt" target="_blank">CD4-CCR7lo</a> 5+ <a href="flowcl_pop07.pdf" target="_blank">PDF</a> long term hematopoietic stem cell -0.043 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0002034" target="_blank">CL_0002034</a>
-8 <a href="flowcl_pop01.txt" target="_blank">CD4+CCR7-</a> 3 <a href="flowcl_pop01.pdf" target="_blank">PDF</a> effector CD4-positive, alpha-beta T cell 0.333 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0001044" target="_blank">CL_0001044</a>
-9 <a href="flowcl_pop07.txt" target="_blank">CD4-CCR7lo</a> 5+ <a href="flowcl_pop07.pdf" target="_blank">PDF</a> long term hematopoietic stem cell -0.043 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0002034" target="_blank">CL_0002034</a>
-10 <a href="flowcl_pop01.txt" target="_blank">CD4+CCR7-</a> 3 <a href="flowcl_pop01.pdf" target="_blank">PDF</a> effector CD4-positive, alpha-beta T cell 0.333 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0001044" target="_blank">CL_0001044</a>
-11 <a href="flowcl_pop04.txt" target="_blank">CD4-CCR7-</a> 5 <a href="flowcl_pop04.pdf" target="_blank">PDF</a> effector CD8-positive, alpha-beta T cell 0.333 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0001050" target="_blank">CL_0001050</a>
-12 <a href="flowcl_pop04.txt" target="_blank">CD4-CCR7-</a> 5 <a href="flowcl_pop04.pdf" target="_blank">PDF</a> effector CD8-positive, alpha-beta T cell 0.333 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0001050" target="_blank">CL_0001050</a>
-13 <a href="flowcl_pop13.txt" target="_blank">CD4+CCR7lo</a> 5+ <a href="flowcl_pop13.pdf" target="_blank">PDF</a> mature CD8_alpha-negative CD11b-positive dendritic cell 2)"        -0.071 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0001003" target="_blank">CL_0001003</a>
-14 <a href="flowcl_pop14.txt" target="_blank">CD4+CCR7+</a> 4 <a href="flowcl_pop14.pdf" target="_blank">PDF</a> naive thymus-derived CD4-positive, alpha-beta T cell 0.2 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0000895" target="_blank">CL_0000895</a>
-15 <a href="flowcl_pop15.txt" target="_blank">CD4loCCR7-</a> 5 <a href="flowcl_pop15.pdf" target="_blank">PDF</a> effector memory CD4-positive, alpha-beta T cell -0.091 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0000905" target="_blank">CL_0000905</a>
-16 <a href="flowcl_pop07.txt" target="_blank">CD4-CCR7lo</a> 5+ <a href="flowcl_pop07.pdf" target="_blank">PDF</a> long term hematopoietic stem cell -0.043 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0002034" target="_blank">CL_0002034</a>
-17 <a href="flowcl_pop14.txt" target="_blank">CD4+CCR7+</a> 4 <a href="flowcl_pop14.pdf" target="_blank">PDF</a> naive thymus-derived CD4-positive, alpha-beta T cell 0.2 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0000895" target="_blank">CL_0000895</a>
-18 <a href="flowcl_pop01.txt" target="_blank">CD4+CCR7-</a> 3 <a href="flowcl_pop01.pdf" target="_blank">PDF</a> effector CD4-positive, alpha-beta T cell 0.333 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0001044" target="_blank">CL_0001044</a>
-19 <a href="flowcl_pop19.txt" target="_blank">CD4loCCR7+</a> 5+ <a href="flowcl_pop19.pdf" target="_blank">PDF</a> naive CCR4-positive regulatory T cell -0.083 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0001045" target="_blank">CL_0001045</a>
-20 <a href="flowcl_pop20.txt" target="_blank">CD4-CCR7+</a> 2 <a href="flowcl_pop20.pdf" target="_blank">PDF</a> naive thymus-derived CD8-positive, alpha-beta T cell 0.2 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0000900" target="_blank">CL_0000900</a>
-21 <a href="flowcl_pop04.txt" target="_blank">CD4-CCR7-</a> 5 <a href="flowcl_pop04.pdf" target="_blank">PDF</a> effector CD8-positive, alpha-beta T cell 0.333 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0001050" target="_blank">CL_0001050</a>
-22 <a href="flowcl_pop15.txt" target="_blank">CD4loCCR7-</a> 5 <a href="flowcl_pop15.pdf" target="_blank">PDF</a> effector memory CD4-positive, alpha-beta T cell -0.091 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0000905" target="_blank">CL_0000905</a>
-23 <a href="flowcl_pop23.txt" target="_blank">CD4loCCR7lo</a> 2 <a href="flowcl_pop23.pdf" target="_blank">PDF</a> immature NK T cell stage I -0.167 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0002039" target="_blank">CL_0002039</a>
-24 <a href="flowcl_pop15.txt" target="_blank">CD4loCCR7-</a> 5 <a href="flowcl_pop15.pdf" target="_blank">PDF</a> effector memory CD4-positive, alpha-beta T cell -0.091 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0000905" target="_blank">CL_0000905</a>
-25 <a href="flowcl_pop07.txt" target="_blank">CD4-CCR7lo</a> 5+ <a href="flowcl_pop07.pdf" target="_blank">PDF</a> long term hematopoietic stem cell -0.043 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0002034" target="_blank">CL_0002034</a>
-26 <a href="flowcl_pop23.txt" target="_blank">CD4loCCR7lo</a> 2 <a href="flowcl_pop23.pdf" target="_blank">PDF</a> immature NK T cell stage I -0.167 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0002039" target="_blank">CL_0002039</a>
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/boxplotData.json
--- a/flow_overview/test-data/out2/boxplotData.json Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,1 +0,0 @@\n-{"lower": {"CCR7":{"1":38.5,"2":-109.5,"3":-183.0,"4":-117.0,"5":-175.5,"6":-157.5,"7":68.5,"8":73.0,"9":140.375,"10":-94.5,"11":-128.0,"12":27.5,"13":137.875,"14":344.5,"15":-182.5,"16":264.5,"17":405.125,"18":40.5,"19":207.5,"20":254.0,"21":97.0,"22":11.5,"23":370.375,"24":21.5,"25":172.5,"26":201.375},"CD4":{"1":444.5,"2":443.5,"3":435.25,"4":-102.5,"5":-106.5,"6":-76.0,"7":-68.5,"8":449.5,"9":-68.0,"10":444.5,"11":-65.5,"12":-25.25,"13":415.0,"14":433.5,"15":195.75,"16":-57.375,"17":377.5,"18":447.0,"19":237.0,"20":-68.0,"21":24.5,"22":252.5,"23":272.5,"24":276.375,"25":72.5,"26":-10.5}}, "mfi": {"CCR7":{"1":188,"2":37,"3":69,"4":141,"5":68,"6":90,"7":318,"8":258,"9":420,"10":31,"11":111,"12":213,"13":424,"14":566,"15":84,"16":510,"17":598,"18":199,"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}}, "outliers": {"CCR7":{"1":[340,373,371,379,355,373,331,340,346,334,348,334,346,341,358,356,370,338,359,336,354,333,353,342,367,345,341,338,341,344],"2":[],"3":[],"4":[],"5":[],"6":[],"7":[],"8":[525,460,426,426,512,579,504,554,437,647,463,499,492,520,505,441,468,430,515,563,436,430,459,577,450,458,474,449,444,513,477,501,444,438,431,441,577,486,447,497,599,443,439,426,474,448,438,508,444,437,521,432,516,428,443,511,530,541,469,507,432,452,454,427,488,436,507],"9":[711,706,725,761,693,768,676,699,817,855,679,714,771,780,825,829],"10":[],"11":[],"12":[0,13,0,26,399],"13":[750,120,727,753,711,735,724,711,735,714,710,768,780],"14":[],"15":[],"16":[743,815,836,817,784,822,741,761,850,771,817,772,750],"17":[851,797,897,867,823,811,893,786,393,811,398],"18":[365,351,372,351,378,372,367,353,361,355,365,371,384,377,349,388,367,380,401,378,379,371,371,375,358,355],"19":[],"20":[],"21":[28,83,74,22,26,67,49,82,90,0,0,56,15,85,80,32,87,19,61,35,96,16,70,90,81,66,59,74,54,87,63,77,94,36,96,73,81,53,32,20,32,81,51,54,51,1,69,94,72,77,31,91,71,70,35,0,89,67,0,70,79,77,43,93,0,0,381,12,61,0,62,76,372,70,92,95,92,93,56,74,82,67,66,53,77,71,0,49,71,96,93,0,88,61,64,96,78,74,34,91],"22":[7,0,0,0,0,422,0,0,5,6,0,0,0,0,0,0,0,0,0,412,0,0,0,0,0,0,0,0,0,1,0,0,0,6,0,0,0,0,0,0,0,0,0,430,446,0,0,421],"23":[368,685,615,588,747,874,798,677,635,637,578,849,856,725,952,647,822,578,738,250,677,615,742,615,603,256,236,574,657,675,661,584,299,327,638,340,599,271,321,332,332,607,355,570,607,572,328,589,584,311,312,700,590,659,613,361,356,253,292,347,707,654,360,771,684,342,640,608,837,920,579,907,835,569,594,667,800,597,786,731,595,890,800,637,692,727,643,685,358,710,587,609,978,750,335,753,638],"24":[0,0,0,5,0,0,0,15,0,6,0,4,0,0,7,0,4,0,0,18,0,4,0,0,0,0,0,0,21,0,0,0,407,0,4,0,494,0,2,19,7,496,0,468,0,0,499],"25":[170,450,171,150,161,469,158,168,163,151,117,142,98,395,371,156,84,160,430,171,156,156,169,166,141,114,170,161,430,137,170,145,373,423,114,158,6,134,166,400,146,148,67,397,453,448,101,159,412,147,149,171,162,157,155,159,164,126,167,479,131,150,99,142,126,167,379,139,167,428,438,445,107,169,164,158,463,101,155,96,375,424,98,131,397,123,373,152,157,131,372,131,407,169,169,171,129,169,404,377],"26":[179,138,193,500,496,475,478,521,164,479,478,183,560,483,503,485,479,160,513,175,482,523,199,184,189,512,535,499,603,161,482,515,521,526,546,482,531,506,543,507,479,495,617,526,482,501,622,479,478,492,489,484,534,495,492,476,560,487,560,508]},"CD4":{"1":[423,415,350,432,355,405,439,427,349,408,350,439,416,332,410,377,626,436,393,417,371,421,419,434,439,381,440,348,361,444,393,354,418,379,389,361,421,439,359,413,433,418,444,368,338,354,383,323,397,404,441,425,357,406,354,429,434,427,382,430,414,338,384,442,430,413,367,413,398,441,403,437,441,440,409,434,377,440,421,371,380,441,393,398,405,443,405,441,343,443,444,399,406,433,609,439,443,438,369,423],"2":[428,409,398,414,392,439,416,613,422,437,442,420,'..b'3,418,414,337,320,446,358],"19":[764,768,775,235,216,208,210,1023,193],"20":[304,302,313,363,346,261,305,249,299,235,260],"21":[271,11,22,278,10,0,300,0,280,275,287,276,328,23,269,363,0,13,10,282,0,22,6,0,311,12,0,11,3,12,306,0,0,0,0,12,290,0,21,0,21,11,23,293,0,0,6,324,24,0,24,357,10,273,0,7,0,18,12,20,18,0,8,8,10,357,281,0,24,20,0,0,0,8,274,1,323,307,0,394,18,277,280,299,0,0,0,0,0,17,10,0,21,283,5,10,24,0,269,0],"22":[213,83,561,93,204,194,247,588,242,136,113,219,228,170,215,177,579,163,136,220,197,573,252,235,578,95,623,246,177,251,209,633,203,161,550,185,250,579,89,169,139,214,240,151,246,126,178,97,241,250,150,244,190,576,221,226,243,205,214,223,176,188,242,229,191,134,540,249,237,242,171,195,178,169,214,223,208],"23":[248,503,179,240,259,505,536,269,499,517,196,628,270,268,231,494,575,548,529,211,505,580,505,181,262,229,211,517,525,216,189,512,196,492,267,178,189,591,238,499,225,252,494,493,260,484,548,540,249,239,177,205,465,224,536,479,231,697,465,255,237,180,262,269,488,521,187,249,549,272,216,538,248],"24":[528,115,273,573,262,220,90,215,271,195,215,200,247,569,585,181,528,226,234,517,554,269,263,611,263,519,110,247,252,255,547,546,271,269,574,262,213,578,232,203,258,264,174,537,611,559,260,253,255,267,274,253,186,206,618,162,248,271,578,251,181,273,236,521,245,179,618,231],"25":[69,293,298,387,52,3,68,18,320,0,65,71,18,66,296,43,39,62,44,41,68,71,305,318,59,301,69,47,40,72,313,483,23,63,35,56,387,36,55,45,52,304,382,357,327,43,53,307,61,315,67,316,31,63,293,406,332,39,341,293,72,296,335,39,24,311,318,357,34,68,317,65,41,11,390,47,307,53,330,71,48,65,372,293,58,50,347,309,65,308,298,66,64,61,294,30,37,0,35,299],"26":[]}}, "q1": {"CCR7":{"1":148.0,"2":0.0,"3":0.0,"4":75.0,"5":0.0,"6":24.0,"7":256.0,"8":205.0,"9":339.5,"10":0.0,"11":49.0,"12":164.0,"13":352.0,"14":514.0,"15":8.0,"16":443.0,"17":547.25,"18":156.0,"19":515.0,"20":464.0,"21":196.0,"22":160.0,"23":442.0,"24":164.0,"25":246.0,"26":303.75},"CD4":{"1":503.0,"2":505.0,"3":494.5,"4":31.0,"5":12.0,"6":35.0,"7":44.0,"8":502.0,"9":79.0,"10":503.0,"11":47.0,"12":80.5,"13":493.0,"14":504.0,"15":291.0,"16":60.0,"17":484.0,"18":507.0,"19":426.0,"20":43.0,"21":116.0,"22":359.0,"23":343.0,"24":366.0,"25":155.0,"26":246.0}}, "q2": {"CCR7":{"1":182.0,"2":21.0,"3":68.0,"4":147.0,"5":61.0,"6":95.0,"7":323.0,"8":244.0,"9":404.5,"10":11.0,"11":114.0,"12":210.0,"13":426.0,"14":580.5,"15":88.0,"16":502.0,"17":603.0,"18":193.0,"19":593.0,"20":515.0,"21":234.0,"22":215.0,"23":465.0,"24":217.0,"25":272.0,"26":334.0},"CD4":{"1":524.0,"2":526.0,"3":516.0,"4":77.0,"5":52.0,"6":72.0,"7":85.0,"8":520.0,"9":125.5,"10":524.0,"11":86.0,"12":115.0,"13":521.0,"14":530.0,"15":324.0,"16":101.5,"17":529.5,"18":528.0,"19":480.0,"20":84.0,"21":147.0,"22":398.0,"23":365.0,"24":400.0,"25":184.0,"26":296.0}}, "q3": {"CCR7":{"1":221.0,"2":73.0,"3":122.0,"4":203.0,"5":117.0,"6":145.0,"7":381.0,"8":293.0,"9":472.25,"10":63.0,"11":167.0,"12":255.0,"13":494.75,"14":627.0,"15":135.0,"16":562.0,"17":642.0,"18":233.0,"19":720.0,"20":604.0,"21":262.0,"22":259.0,"23":489.75,"24":259.0,"25":295.0,"26":372.0},"CD4":{"1":542.0,"2":546.0,"3":534.0,"4":120.0,"5":91.0,"6":109.0,"7":119.0,"8":537.0,"9":177.0,"10":542.0,"11":122.0,"12":151.0,"13":545.0,"14":551.0,"15":354.5,"16":138.25,"17":555.0,"18":547.0,"19":552.0,"20":117.0,"21":177.0,"22":430.0,"23":390.0,"24":425.75,"25":210.0,"26":417.0}}, "upper": {"CCR7":{"1":330.5,"2":182.5,"3":305.0,"4":395.0,"5":292.5,"6":326.5,"7":568.5,"8":425.0,"9":671.375,"10":157.5,"11":344.0,"12":391.5,"13":708.875,"14":796.5,"15":325.5,"16":740.5,"17":784.125,"18":348.5,"19":1027.5,"20":814.0,"21":361.0,"22":407.5,"23":561.375,"24":401.5,"25":368.5,"26":474.375},"CD4":{"1":600.5,"2":607.5,"3":593.25,"4":253.5,"5":209.5,"6":220.0,"7":231.5,"8":589.5,"9":324.0,"10":600.5,"11":234.5,"12":256.75,"13":623.0,"14":621.5,"15":449.75,"16":255.625,"17":661.5,"18":607.0,"19":741.0,"20":228.0,"21":268.5,"22":536.5,"23":460.5,"24":515.375,"25":292.5,"26":673.5}}}\n\\ No newline at end of file\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/flow.mfi
--- a/flow_overview/test-data/out2/flow.mfi Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
@@ -1,27 +0,0 @@
-Population CD4 CCR7
-1 520 188
-2 523 37
-3 512 69
-4 84 141
-5 56 68
-6 75 90
-7 83 318
-8 517 258
-9 138 420
-10 521 31
-11 85 111
-12 119 213
-13 516 424
-14 526 566
-15 322 84
-16 104 510
-17 509 598
-18 524 199
-19 490 629
-20 82 534
-21 145 224
-22 389 204
-23 366 476
-24 392 204
-25 182 269
-26 325 343
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/flow.mfi_pop
--- a/flow_overview/test-data/out2/flow.mfi_pop Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
@@ -1,27 +0,0 @@
-CD4 CCR7 Count Percentage Population
-519.72 187.88 3842 6.40 1
-522.94 37.10 2765 4.61 2
-512.11 68.72 2163 3.61 3
-83.54 141.19 1207 2.01 4
-55.56 67.51 2332 3.89 5
-75.33 90.47 3969 6.62 6
-82.72 318.03 1809 3.02 7
-517.07 257.64 2260 3.77 8
-138.25 419.51 342 0.57 9
-520.67 31.29 3497 5.83 10
-85.41 110.92 1903 3.17 11
-119.09 212.60 1599 2.67 12
-515.81 423.78 2238 3.73 13
-525.80 565.61 930 1.55 14
-322.30 84.31 555 0.93 15
-103.98 509.50 872 1.45 16
-509.05 597.98 362 0.60 17
-524.02 198.53 2601 4.34 18
-489.73 629.26 341 0.57 19
-81.83 534.25 1750 2.92 20
-144.71 224.04 9174 15.29 21
-388.94 203.73 1401 2.34 22
-365.75 476.01 1058 1.76 23
-392.21 204.17 1166 1.94 24
-181.69 268.60 8725 14.54 25
-325.42 342.86 1136 1.89 26
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/flow.overview
--- a/flow_overview/test-data/out2/flow.overview Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
@@ -1,13 +0,0 @@
-<table>
-<tr><td>&nbsp;</td>
-<td>CD4</td>
-<td>CCR7</td>
-<tr>
-<td>CD4</td>
-<td><img src="m0_m0_90X90.png"/></td><td><img src="m1_m0_90X90.png"/></td></tr>
-<tr>
-<td>CCR7</td>
-<td><img src="m0_m1_90X90.png"/></td><td><img src="m1_m1_90X90.png"/></td></tr>
-</table>
-</body>
-<html>
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/flow.sample
--- a/flow_overview/test-data/out2/flow.sample Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
b'@@ -1,20001 +0,0 @@\n-CD4\tCCR7\tPopulation\n-392\t178\t24\n-560\t9\t10\n-345\t166\t15\n-180\t225\t21\n-123\t280\t25\n-555\t186\t1\n-521\t217\t1\n-98\t47\t6\n-182\t117\t12\n-251\t179\t26\n-160\t0\t6\n-85\t127\t6\n-0\t62\t5\n-146\t7\t6\n-446\t0\t10\n-556\t139\t18\n-138\t201\t21\n-556\t0\t10\n-96\t166\t6\n-141\t0\t5\n-525\t239\t18\n-64\t90\t6\n-551\t202\t18\n-507\t171\t1\n-106\t118\t6\n-14\t181\t6\n-181\t124\t6\n-467\t137\t1\n-200\t285\t25\n-143\t239\t21\n-506\t128\t1\n-496\t67\t10\n-157\t257\t25\n-57\t73\t5\n-511\t133\t18\n-519\t276\t1\n-160\t265\t25\n-170\t104\t12\n-470\t127\t1\n-214\t300\t25\n-535\t0\t2\n-78\t0\t6\n-135\t0\t5\n-70\t230\t21\n-32\t0\t6\n-205\t296\t25\n-28\t145\t6\n-520\t145\t1\n-533\t39\t10\n-0\t0\t5\n-495\t0\t2\n-497\t185\t18\n-147\t347\t21\n-87\t0\t6\n-30\t0\t6\n-543\t0\t10\n-92\t139\t5\n-0\t0\t6\n-567\t221\t18\n-151\t276\t21\n-518\t141\t18\n-213\t197\t22\n-549\t61\t2\n-562\t207\t18\n-5\t28\t5\n-63\t79\t6\n-120\t80\t21\n-21\t133\t5\n-141\t326\t25\n-180\t271\t21\n-114\t155\t21\n-216\t262\t25\n-0\t36\t5\n-459\t35\t2\n-85\t45\t6\n-534\t136\t1\n-24\t0\t5\n-227\t330\t25\n-554\t136\t1\n-127\t164\t21\n-201\t210\t25\n-429\t148\t18\n-160\t125\t21\n-153\t47\t5\n-76\t145\t6\n-545\t57\t10\n-134\t233\t21\n-481\t141\t1\n-516\t168\t1\n-174\t231\t21\n-470\t158\t1\n-128\t121\t12\n-467\t147\t1\n-133\t200\t12\n-318\t0\t15\n-181\t273\t25\n-526\t254\t1\n-223\t121\t15\n-121\t124\t21\n-57\t171\t6\n-164\t302\t21\n-382\t286\t22\n-71\t237\t21\n-500\t137\t1\n-501\t0\t2\n-519\t190\t18\n-488\t165\t1\n-523\t42\t2\n-475\t86\t2\n-538\t0\t2\n-26\t22\t6\n-157\t174\t21\n-548\t21\t10\n-203\t234\t25\n-161\t283\t25\n-60\t127\t6\n-522\t0\t2\n-69\t235\t21\n-63\t142\t6\n-171\t277\t25\n-177\t252\t21\n-138\t0\t5\n-73\t226\t21\n-529\t194\t1\n-99\t0\t6\n-0\t192\t5\n-145\t243\t21\n-579\t0\t2\n-555\t216\t1\n-525\t132\t18\n-213\t204\t21\n-202\t253\t25\n-53\t0\t6\n-0\t77\t6\n-58\t247\t21\n-546\t0\t10\n-144\t286\t25\n-84\t0\t5\n-101\t120\t5\n-564\t148\t18\n-498\t0\t10\n-576\t280\t1\n-217\t280\t21\n-0\t16\t5\n-111\t135\t6\n-514\t13\t2\n-287\t135\t15\n-330\t440\t23\n-398\t471\t23\n-567\t109\t1\n-0\t242\t6\n-215\t178\t21\n-586\t0\t2\n-56\t261\t21\n-93\t233\t25\n-128\t140\t12\n-550\t129\t1\n-105\t0\t5\n-493\t138\t18\n-112\t88\t12\n-518\t178\t18\n-510\t220\t1\n-491\t0\t10\n-552\t117\t3\n-459\t156\t22\n-87\t87\t6\n-55\t135\t6\n-148\t117\t6\n-174\t237\t25\n-237\t264\t25\n-169\t195\t12\n-119\t204\t25\n-43\t0\t6\n-558\t190\t1\n-581\t66\t2\n-180\t265\t25\n-118\t199\t21\n-155\t229\t21\n-494\t0\t2\n-400\t236\t22\n-264\t150\t21\n-37\t0\t6\n-538\t79\t10\n-226\t218\t25\n-538\t90\t2\n-544\t146\t1\n-330\t451\t17\n-547\t108\t1\n-166\t236\t21\n-126\t0\t6\n-519\t107\t10\n-520\t0\t2\n-81\t82\t5\n-222\t231\t25\n-495\t45\t2\n-277\t300\t25\n-554\t224\t18\n-558\t144\t1\n-112\t134\t6\n-512\t206\t1\n-407\t178\t24\n-516\t166\t18\n-283\t377\t16\n-528\t147\t1\n-501\t24\t2\n-140\t113\t6\n-555\t0\t2\n-470\t0\t2\n-46\t37\t6\n-562\t222\t18\n-7\t18\t6\n-24\t102\t6\n-227\t331\t25\n-155\t74\t5\n-538\t0\t10\n-542\t177\t1\n-12\t160\t6\n-180\t305\t21\n-0\t149\t6\n-541\t10\t10\n-120\t227\t21\n-504\t81\t2\n-535\t196\t18\n-536\t243\t18\n-503\t45\t2\n-112\t205\t12\n-212\t203\t12\n-542\t174\t18\n-287\t237\t24\n-75\t98\t6\n-161\t247\t21\n-167\t301\t25\n-164\t531\t9\n-524\t58\t2\n-564\t267\t1\n-500\t81\t2\n-538\t187\t1\n-555\t129\t18\n-61\t39\t6\n-524\t136\t1\n-492\t144\t18\n-105\t263\t21\n-539\t287\t1\n-538\t0\t10\n-135\t174\t21\n-527\t170\t1\n-529\t86\t10\n-196\t278\t25\n-201\t295\t25\n-232\t258\t21\n-165\t3\t6\n-173\t154\t21\n-588\t148\t1\n-79\t263\t21\n-501\t70\t10\n-132\t184\t21\n-518\t173\t18\n-486\t0\t10\n-460\t0\t2\n-535\t216\t18\n-197\t303\t25\n-158\t180\t21\n-159\t117\t21\n-541\t158\t1\n-552\t217\t18\n-0\t88\t5\n-164\t272\t21\n-286\t12\t15\n-578\t0\t2\n-538\t0\t2\n-13\t0\t6\n-91\t75\t6\n-78\t212\t21\n-532\t190\t1\n-62\t0\t6\n-540\t173\t18\n-511\t190\t18\n-551\t44\t10\n-420\t152\t22\n-226\t306\t25\n-88\t119\t4\n-180\t258\t21\n-79\t305\t21\n-84\t0\t6\n-493\t0\t10\n-78\t156\t6\n-162\t210\t25\n-155\t0\t6\n-512\t275\t18\n-33\t195\t21\n-549\t46\t2\n-74\t280\t21\n-13\t126\t6\n-467\t263\t18\n-424\t254\t24\n-188\t308\t25\n-19\t167\t6\n-185\t189\t25\n-188\t267\t25\n-18\t80\t6\n-132\t265\t21\n-441\t143\t1\n-153\t255\t7\n-526\t105\t2\n-72\t109\t6\n-524\t213\t1\n-511\t226\t1\n-31\t0\t5\n-0\t36\t5\n-496\t0\t2\n-134\t245\t21\n-532\t141\t18\n-83\t230\t12\n-505\t26\t2\n-550\t204\t18\n-244\t348\t25\n-36\t0\t6\n-0\t81\t6\n-540\t7\t2\n-522\t152\t1\n-111\t158\t6\n-450\t116\t1\n-545\t0\t2\n-214\t230\t25\n-538\t0\t10\n-538\t44\t2\n-16\t0\t6\n-0\t14\t5\n-137\t227\t21\n-480\t165\t18\n-528\t188\t1\n-112\t169\t21\n-492\t8\t2\n-495\t0\t2\n-157\t205\t25\n-508\t0\t10\n-495\t136\t1\n-12\t240\t21\n-525\t108\t1\n-593\t20\t2\n-485\t0\t2\n-196\t167\t21\n-488\t169\t18\n-107\t277\t21\n-139\t265\t21\n-77\t200\t21\n-565\t136\t1\n-185\t263\t21\n-51\t0\t5\n-281\t349\t26\n-520\t0\t10\n-557\t160\t18\n-537\t0\t2\n-109\t255\t21\n-501\t0\t10\n-497\t22\t2\n-128\t261\t25\n-558\t10\t10\n-548\t0\t2\n-570\t76\t10\n-390\t296\t22\n-0\t0\t5\n-122\t51\t5\n-508\t145\t18\n-114\t258\t21\n-552\t201\t18\n-145\t0\t6\n-36\t262\t21\n-192\t291'..b'\n-487\t608\t17\n-67\t615\t20\n-129\t640\t20\n-533\t602\t17\n-555\t574\t14\n-46\t635\t20\n-566\t720\t14\n-42\t481\t20\n-0\t490\t20\n-0\t488\t20\n-540\t612\t17\n-84\t527\t20\n-132\t434\t20\n-573\t687\t17\n-532\t587\t17\n-0\t431\t20\n-125\t664\t20\n-528\t634\t14\n-552\t614\t17\n-556\t604\t14\n-549\t472\t14\n-584\t461\t14\n-492\t483\t14\n-551\t531\t14\n-533\t692\t14\n-552\t605\t17\n-487\t516\t14\n-502\t617\t14\n-56\t529\t20\n-577\t489\t14\n-106\t629\t20\n-101\t619\t20\n-140\t453\t20\n-530\t528\t14\n-477\t467\t14\n-128\t499\t20\n-97\t531\t20\n-536\t485\t14\n-143\t644\t20\n-0\t587\t20\n-569\t659\t17\n-26\t539\t20\n-569\t631\t17\n-574\t597\t17\n-151\t475\t20\n-0\t713\t20\n-150\t459\t20\n-533\t626\t14\n-147\t641\t20\n-473\t583\t14\n-562\t667\t14\n-80\t474\t20\n-78\t432\t20\n-502\t587\t17\n-0\t529\t20\n-0\t613\t20\n-78\t446\t20\n-117\t414\t20\n-73\t575\t20\n-392\t645\t17\n-132\t445\t20\n-500\t594\t14\n-533\t531\t14\n-48\t665\t20\n-153\t617\t20\n-95\t456\t20\n-528\t456\t14\n-53\t456\t20\n-76\t498\t20\n-501\t487\t17\n-103\t485\t20\n-501\t614\t17\n-505\t600\t17\n-520\t602\t14\n-82\t472\t20\n-99\t470\t20\n-561\t435\t14\n-71\t475\t20\n-552\t559\t17\n-560\t408\t14\n-503\t595\t14\n-484\t557\t14\n-71\t496\t20\n-49\t521\t20\n-505\t647\t14\n-88\t589\t20\n-531\t477\t14\n-624\t620\t14\n-540\t580\t17\n-97\t595\t20\n-78\t552\t20\n-136\t479\t20\n-507\t377\t14\n-126\t566\t20\n-97\t512\t20\n-0\t595\t20\n-485\t517\t14\n-424\t422\t17\n-487\t591\t14\n-43\t476\t20\n-58\t453\t20\n-444\t615\t17\n-48\t669\t20\n-508\t633\t14\n-91\t472\t20\n-567\t650\t14\n-129\t507\t20\n-69\t537\t20\n-569\t395\t14\n-4\t568\t20\n-11\t585\t20\n-0\t426\t20\n-574\t561\t14\n-527\t601\t17\n-98\t590\t20\n-528\t456\t14\n-563\t600\t17\n-67\t464\t20\n-75\t599\t20\n-148\t559\t20\n-19\t523\t20\n-558\t636\t14\n-0\t515\t20\n-97\t431\t20\n-509\t626\t14\n-85\t475\t20\n-139\t592\t20\n-541\t706\t17\n-0\t438\t20\n-0\t503\t20\n-96\t612\t20\n-96\t426\t20\n-155\t678\t20\n-116\t475\t20\n-39\t455\t20\n-69\t447\t20\n-91\t476\t20\n-575\t641\t14\n-127\t465\t20\n-6\t438\t20\n-94\t471\t20\n-525\t653\t17\n-100\t602\t20\n-113\t621\t20\n-165\t514\t20\n-14\t575\t20\n-577\t535\t14\n-566\t441\t14\n-148\t583\t20\n-114\t441\t20\n-57\t506\t20\n-580\t565\t14\n-60\t565\t20\n-99\t466\t20\n-70\t446\t20\n-474\t580\t17\n-545\t546\t14\n-73\t435\t20\n-16\t431\t20\n-24\t486\t20\n-1\t634\t20\n-180\t590\t20\n-60\t422\t20\n-609\t636\t14\n-515\t455\t14\n-114\t570\t20\n-110\t503\t20\n-0\t599\t20\n-43\t589\t20\n-550\t622\t14\n-494\t451\t14\n-108\t508\t20\n-576\t673\t14\n-28\t541\t20\n-0\t456\t20\n-572\t580\t14\n-0\t459\t20\n-0\t471\t20\n-299\t521\t17\n-71\t635\t20\n-83\t648\t20\n-479\t692\t17\n-108\t438\t20\n-85\t550\t20\n-140\t739\t20\n-191\t543\t20\n-123\t477\t20\n-66\t679\t20\n-24\t520\t20\n-67\t653\t20\n-83\t560\t20\n-545\t680\t17\n-500\t488\t14\n-576\t423\t14\n-70\t471\t20\n-35\t681\t20\n-540\t607\t14\n-575\t602\t14\n-6\t519\t20\n-514\t462\t17\n-106\t631\t20\n-76\t639\t20\n-562\t625\t14\n-111\t627\t20\n-517\t538\t14\n-0\t502\t20\n-149\t468\t20\n-560\t537\t14\n-497\t541\t14\n-83\t514\t20\n-86\t524\t20\n-556\t611\t14\n-545\t698\t14\n-100\t658\t20\n-90\t587\t20\n-560\t631\t14\n-575\t628\t14\n-0\t507\t20\n-117\t499\t20\n-120\t693\t20\n-568\t539\t14\n-111\t451\t20\n-525\t514\t14\n-522\t511\t14\n-20\t587\t20\n-98\t500\t20\n-141\t463\t20\n-527\t522\t14\n-41\t424\t20\n-494\t595\t14\n-87\t495\t20\n-18\t477\t20\n-531\t443\t14\n-98\t571\t20\n-542\t568\t14\n-106\t445\t20\n-0\t436\t20\n-547\t658\t14\n-0\t545\t20\n-470\t455\t14\n-562\t632\t14\n-550\t498\t14\n-128\t600\t20\n-72\t586\t20\n-78\t552\t20\n-122\t498\t20\n-75\t663\t20\n-457\t416\t14\n-99\t484\t20\n-168\t470\t20\n-495\t408\t14\n-109\t473\t20\n-92\t583\t20\n-99\t481\t20\n-530\t540\t14\n-0\t514\t20\n-58\t634\t20\n-153\t528\t20\n-570\t468\t14\n-452\t433\t14\n-141\t432\t20\n-479\t517\t14\n-20\t438\t20\n-116\t449\t20\n-451\t493\t14\n-79\t483\t20\n-0\t448\t20\n-440\t598\t14\n-0\t498\t20\n-13\t499\t20\n-568\t646\t14\n-68\t616\t20\n-31\t646\t20\n-511\t617\t14\n-511\t645\t14\n-54\t591\t20\n-82\t503\t20\n-66\t703\t20\n-82\t573\t20\n-453\t418\t14\n-56\t505\t20\n-19\t578\t20\n-8\t610\t20\n-549\t681\t14\n-572\t637\t14\n-96\t483\t20\n-0\t674\t20\n-78\t545\t20\n-97\t677\t20\n-503\t625\t14\n-466\t509\t14\n-491\t601\t14\n-501\t501\t14\n-21\t570\t20\n-36\t585\t20\n-493\t576\t14\n-503\t426\t14\n-122\t569\t20\n-528\t566\t14\n-83\t640\t20\n-129\t432\t20\n-478\t413\t14\n-163\t423\t20\n-0\t636\t20\n-565\t599\t14\n-540\t659\t14\n-0\t582\t20\n-40\t643\t20\n-0\t447\t20\n-61\t549\t20\n-584\t609\t14\n-542\t425\t14\n-38\t425\t20\n-498\t408\t14\n-0\t615\t20\n-83\t452\t20\n-508\t623\t14\n-80\t516\t20\n-92\t464\t20\n-346\t632\t20\n-9\t623\t20\n-123\t502\t20\n-133\t538\t20\n-525\t436\t14\n-33\t536\t20\n-524\t608\t14\n-0\t529\t20\n-0\t705\t20\n-87\t620\t20\n-87\t424\t20\n-17\t506\t20\n-549\t537\t14\n-79\t445\t20\n-89\t499\t20\n-0\t575\t20\n-124\t598\t20\n-78\t455\t20\n-101\t485\t20\n-139\t494\t20\n-113\t502\t20\n-103\t622\t20\n-49\t458\t20\n-61\t551\t20\n-0\t576\t20\n-123\t643\t20\n-105\t550\t20\n-86\t534\t20\n-69\t454\t20\n-74\t735\t20\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/flowcl_pop01.pdf
b
Binary file flow_overview/test-data/out2/flowcl_pop01.pdf has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/flowcl_pop01.txt
--- a/flow_overview/test-data/out2/flowcl_pop01.txt Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,26 +0,0 @@
-                      [,1]                                                                   
-Short marker names    "CD4+CCR7-"                                                            
-Ontology marker names "CD4 molecule, C-C chemokine receptor type 7"                          
-Experiment markers    "CD4,CCR7"                                                             
-Ontology exper. names "CD4 molecule, C-C chemokine receptor type 7"                          
-Successful Match?     "No"                                                                   
-Marker ID             "1) PR_000001004, PR_000001203 2) PR_000001004, PR_000001203 3)"       
-                      "PR_000001004, PR_000001203"                                           
-Marker Label          "1) CD4 molecule, C-C chemokine receptor type 7 2) CD4 molecule, C-C"  
-                      "chemokine receptor type 7 3) CD4 molecule, C-C chemokine receptor"    
-                      "type 7"                                                               
-Marker Key            "1) { } CCR7-, CD4+ ( ) [ T cell receptor co-receptor CD8-, alpha-beta"
-                      "T cell receptor complex+, receptor-type tyrosine-protein phosphatase" 
-                      "C isoform CD45RA+, CD3+ ] 2) { } CCR7-, CD4+ ( ) [ T cell receptor"   
-                      "co-receptor CD8-, alpha-beta T cell receptor complex+, C-X-C"         
-                      "chemokine receptor type 5+, inducible T-cell costimulator+,"          
-                      "programmed cell death protein 1+, CD3+ ] 3) { } CCR7-, CD4+ ( ) [ T"  
-                      "cell receptor co-receptor CD8-, interleukin-2 receptor subunit"       
-                      "alpha-, receptor-type tyrosine-protein phosphatase C isoform CD45RA-,"
-                      "alpha-beta T cell receptor complex+, receptor-type tyrosine-protein"  
-                      "phosphatase C isoform CD45RO+, interleukin-7 receptor subunit alpha+,"
-                      "CD3+, CD44 moleculehi, interleukin-2 receptor subunit betahi ]"       
-Score (Out of 1)      "1) 0.333 2) 0.25 3) 0.182"                                            
-Cell ID               "1) CL_0001044 2) CL_0002038 3) CL_0000905"                            
-Cell Label            "1) effector CD4-positive, alpha-beta T cell 2) T follicular helper"   
-                      "cell 3) effector memory CD4-positive, alpha-beta T cell"              
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/flowcl_pop04.pdf
b
Binary file flow_overview/test-data/out2/flowcl_pop04.pdf has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/flowcl_pop04.txt
--- a/flow_overview/test-data/out2/flowcl_pop04.txt Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,40 +0,0 @@
-                      [,1]                                                                   
-Short marker names    "CD4-CCR7-"                                                            
-Ontology marker names "CD4 molecule, C-C chemokine receptor type 7"                          
-Experiment markers    "CD4,CCR7"                                                             
-Ontology exper. names "CD4 molecule, C-C chemokine receptor type 7"                          
-Successful Match?     "No"                                                                   
-Marker ID             "1) PR_000001004, PR_000001203 2) PR_000001004, PR_000001203 3)"       
-                      "PR_000001004, PR_000001203 4) PR_000001004, PR_000001203 5)"          
-                      "PR_000001004, PR_000001203"                                           
-Marker Label          "1) CD4 molecule, C-C chemokine receptor type 7 2) CD4 molecule, C-C"  
-                      "chemokine receptor type 7 3) CD4 molecule, C-C chemokine receptor"    
-                      "type 7 4) CD4 molecule, C-C chemokine receptor type 7 5) CD4"         
-                      "molecule, C-C chemokine receptor type 7"                              
-Marker Key            "1) { } CD4-, CCR7- ( ) [ T cell receptor co-receptor CD8+, alpha-beta"
-                      "T cell receptor complex+, receptor-type tyrosine-protein phosphatase" 
-                      "C isoform CD45RA+, CD3+ ] 2) { } CD4-, CCR7- ( ) [ receptor-type"     
-                      "tyrosine-protein phosphatase C isoform CD45RO-, T cell receptor"      
-                      "co-receptor CD8+, alpha-beta T cell receptor complex+, receptor-type" 
-                      "tyrosine-protein phosphatase C isoform CD45RA+, CD3+ ] 3) { } CD4-,"  
-                      "CCR7- ( ) [ L-selectin-, interleukin-7 receptor subunit alpha-, T"    
-                      "cell receptor co-receptor CD8+, alpha-beta T cell receptor complex+," 
-                      "CD69 molecule+, interleukin-2 receptor subunit alpha+, CD3+ ] 4) { }" 
-                      "CD4-, CCR7- ( ) [ interleukin-2 receptor subunit alpha-,"             
-                      "receptor-type tyrosine-protein phosphatase C isoform CD45RA-, T cell" 
-                      "receptor co-receptor CD8+, alpha-beta T cell receptor complex+,"      
-                      "receptor-type tyrosine-protein phosphatase C isoform CD45RO+,"        
-                      "interleukin-7 receptor subunit alpha+, CD3+, CD44 moleculehi,"        
-                      "interleukin-2 receptor subunit betahi ] 5) { } CD4-, CCR7- ( ) ["     
-                      "L-selectin-, interleukin-7 receptor subunit alpha-, T cell receptor"  
-                      "co-receptor CD8+, alpha-beta T cell receptor complex+, CD69"          
-                      "molecule+, interleukin-2 receptor subunit alpha+, ADP-ribosyl cyclase"
-                      "1+, MHC class II histocompatibility antigen alpha chain HLA-DRA+,"    
-                      "CD3+ ]"                                                               
-Score (Out of 1)      "1) 0.333 2) 0.286 3) 0.222 4) 0.182 5) 0.182"                         
-Cell ID               "1) CL_0001050 2) CL_0001062 3) CL_0000906 4) CL_0000913 5) CL_0001049"
-Cell Label            "1) effector CD8-positive, alpha-beta T cell 2) effector memory"       
-                      "CD8-positive, alpha-beta T cell, terminally differentiated 3)"        
-                      "activated CD8-positive, alpha-beta T cell 4) effector memory"         
-                      "CD8-positive, alpha-beta T cell 5) activated CD8-positive, alpha-beta"
-                      "T cell, human"                                                        
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/flowcl_pop07.pdf
b
Binary file flow_overview/test-data/out2/flowcl_pop07.pdf has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/flowcl_pop07.txt
--- a/flow_overview/test-data/out2/flowcl_pop07.txt Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,66 +0,0 @@
-                      [,1]                                                                   
-Short marker names    "CD4-CCR7lo"                                                           
-Ontology marker names "CD4 molecule, C-C chemokine receptor type 7"                          
-Experiment markers    "CD4,CCR7"                                                             
-Ontology exper. names "CD4 molecule, C-C chemokine receptor type 7"                          
-Successful Match?     "No"                                                                   
-Marker ID             "1) PR_000001004 2) PR_000001004 3) PR_000001004 4) PR_000001004 5)"   
-                      "PR_000001004 + more"                                                  
-Marker Label          "1) CD4 molecule 2) CD4 molecule 3) CD4 molecule 4) CD4 molecule 5)"   
-                      "CD4 molecule + more"                                                  
-Marker Key            "1) { CCR7lo } CD4- ( ) [ CD19 molecule-, integrin alpha-M-, CD3-,"    
-                      "neural cell adhesion molecule 1-, CD2 molecule-, T-cell surface"      
-                      "glycoprotein CD8 alpha chain-, membrane-spanning 4-domains subfamily" 
-                      "A member 1-, T-cell surface glycoprotein CD5-, CD14 molecule-,"       
-                      "lymphocyte antigen 6G-, lymphocyte antigen 76-, receptor-type"        
-                      "tyrosine-protein phosphatase C isoform CD45R-, CD48 molecule-,"       
-                      "interleukin-7 receptor subunit alpha-, natural killer cell receptor"  
-                      "2B4-, killer cell lectin-like receptor subfamily B member 1C-, CD34"  
-                      "molecule-, receptor-type tyrosine-protein kinase FLT3-, SLAM family"  
-                      "member 1+, mast/stem cell growth factor receptor+, lymphocyte antigen"
-                      "6A-2/6E-1+, Thy-1 membrane glycoproteinlo ] 2) { CCR7lo } CD4- ( ) [" 
-                      "CD19 molecule-, integrin alpha-M-, CD3-, neural cell adhesion"        
-                      "molecule 1-, CD2 molecule-, T-cell surface glycoprotein CD8 alpha"    
-                      "chain-, membrane-spanning 4-domains subfamily A member 1-, T-cell"    
-                      "surface glycoprotein CD5-, CD14 molecule-, lymphocyte antigen 6G-,"   
-                      "lymphocyte antigen 76-, receptor-type tyrosine-protein phosphatase C" 
-                      "isoform CD45R-, CD48 molecule-, interleukin-7 receptor subunit"       
-                      "alpha-, natural killer cell receptor 2B4-, killer cell lectin-like"   
-                      "receptor subfamily B member 1C-, receptor-type tyrosine-protein"      
-                      "kinase FLT3-, SLAM family member 1+, mast/stem cell growth factor"    
-                      "receptor+, lymphocyte antigen 6A-2/6E-1+, CD34 molecule+ ] 3) {"      
-                      "CCR7lo } CD4- ( ) [ CD19 molecule-, integrin alpha-M-, CD3-, neural"  
-                      "cell adhesion molecule 1-, CD2 molecule-, T-cell surface glycoprotein"
-                      "CD8 alpha chain-, membrane-spanning 4-domains subfamily A member 1-," 
-                      "T-cell surface glycoprotein CD5-, CD14 molecule-, CD27 molecule-,"    
-                      "lymphocyte antigen 6G-, lymphocyte antigen 6A-2/6E-1-, lymphocyte"    
-                      "antigen 6C2-, lymphocyte antigen 76-, CD9 molecule+, transmembrane"   
-                      "emp24 domain-containing protein 1+, receptor-type tyrosine-protein"   
-                      "phosphatase C+, mast/stem cell growth factor receptorlo, integrin"    
-                      "beta-7hi, high affinity immunoglobulin epsilon receptor subunit"      
-                      "alphalo ] 4) { CCR7lo } CD4- ( ) [ CD19 molecule-, integrin alpha-M-,"
-                      "CD3-, neural cell adhesion molecule 1-, CD2 molecule-, T-cell surface"
-                      "glycoprotein CD8 alpha chain-, membrane-spanning 4-domains subfamily" 
-                      "A member 1-, T-cell surface glycoprotein CD5-, CD14 molecule-,"       
-                      "lymphocyte antigen 6G-, lymphocyte antigen 76-, CX3C chemokine"       
-                      "receptor 1-, Thy-1 membrane glycoprotein-, interleukin-7 receptor"    
-                      "subunit alpha-, lymphocyte antigen 6A-2/6E-1-, interleukin-3 receptor"
-                      "class 2 alpha chain+, CD34 molecule+, mast/stem cell growth factor"   
-                      "receptor+, Fc-gamma receptor III complexhi, low affinity"             
-                      "immunoglobulin gamma Fc region receptor IIhi ] 5) { CCR7lo } CD4- ( )"
-                      "[ CD19 molecule-, integrin alpha-M-, CD3-, neural cell adhesion"      
-                      "molecule 1-, CD2 molecule-, T-cell surface glycoprotein CD8 alpha"    
-                      "chain-, membrane-spanning 4-domains subfamily A member 1-, T-cell"    
-                      "surface glycoprotein CD5-, CD14 molecule-, lymphocyte antigen 6G-,"   
-                      "lymphocyte antigen 76-, receptor-type tyrosine-protein phosphatase C" 
-                      "isoform CD45R-, CD48 molecule-, interleukin-7 receptor subunit"       
-                      "alpha-, natural killer cell receptor 2B4-, killer cell lectin-like"   
-                      "receptor subfamily B member 1C-, SLAM family member 1+, mast/stem"    
-                      "cell growth factor receptor+, lymphocyte antigen 6A-2/6E-1+ ] + more" 
-Score (Out of 1)      "1) -0.043 2) -0.045 3) -0.048 4) -0.048 5) -0.05 + more"              
-Cell ID               "1) CL_0002034 2) CL_0002033 3) CL_0002029 4) CL_0002002 5) CL_0001008"
-                      "+ more"                                                               
-Cell Label            "1) long term hematopoietic stem cell 2) short term hematopoietic stem"
-                      "cell 3) Fc-epsilon RIalpha-low mast cell progenitor 4) Kit-positive"  
-                      "granulocyte monocyte progenitor 5) Kit and Sca1-positive"             
-                      "hematopoietic stem cell + more"                                       
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/flowcl_pop13.pdf
b
Binary file flow_overview/test-data/out2/flowcl_pop13.pdf has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/flowcl_pop13.txt
--- a/flow_overview/test-data/out2/flowcl_pop13.txt Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,45 +0,0 @@
-                      [,1]                                                                   
-Short marker names    "CD4+CCR7lo"                                                           
-Ontology marker names "CD4 molecule, C-C chemokine receptor type 7"                          
-Experiment markers    "CD4,CCR7"                                                             
-Ontology exper. names "CD4 molecule, C-C chemokine receptor type 7"                          
-Successful Match?     "No"                                                                   
-Marker ID             "1) PR_000001004 2) PR_000001004 3) PR_000001004 4) PR_000001004 5)"   
-                      "PR_000001004 + more"                                                  
-Marker Label          "1) CD4 molecule 2) CD4 molecule 3) CD4 molecule 4) CD4 molecule 5)"   
-                      "CD4 molecule + more"                                                  
-Marker Key            "1) { CCR7lo } CD4+ ( ) [ CD19 molecule-, CD34 molecule-, CD34"        
-                      "molecule-, neural cell adhesion molecule 1-, membrane-spanning"       
-                      "4-domains subfamily A member 1-, lymphocyte antigen 75-, T-cell"      
-                      "surface glycoprotein CD8 alpha chain-, CD83 molecule+, integrin"      
-                      "alpha-M+, MHC class II protein complexhi, CD86 moleculehi, CD80"      
-                      "moleculehi, integrin alpha-Xhi ] 2) { CCR7lo } CD4+ ( ) [ CD19"       
-                      "molecule-, CD34 molecule-, CD34 molecule-, neural cell adhesion"      
-                      "molecule 1-, membrane-spanning 4-domains subfamily A member 1-,"      
-                      "lymphocyte antigen 75-, T-cell surface glycoprotein CD8 alpha chain-,"
-                      "integrin alpha-M+, MHC class II protein complexlo, CD86 moleculelo,"  
-                      "CD80 moleculelo, integrin alpha-Xhi ] 3) { CCR7lo } CD4+ ( CCR7+ ) [" 
-                      "T cell receptor co-receptor CD8-, receptor-type tyrosine-protein"     
-                      "phosphatase C isoform CD45RO-, alpha-beta T cell receptor complex+,"  
-                      "interleukin-2 receptor subunit alpha+, receptor-type tyrosine-protein"
-                      "phosphatase C isoform CD45RA+, interleukin-7 receptor subunit"        
-                      "alphalo, C-C chemokine receptor type 4+, CD3+, CD44 moleculelo,"      
-                      "L-selectinhi ] 4) { CCR7lo } CD4+ ( CCR7+ ) [ T cell receptor"        
-                      "co-receptor CD8-, interleukin-2 receptor subunit alpha-,"             
-                      "receptor-type tyrosine-protein phosphatase C isoform CD45RA-,"        
-                      "alpha-beta T cell receptor complex+, receptor-type tyrosine-protein"  
-                      "phosphatase C isoform CD45RO+, interleukin-7 receptor subunit alpha+,"
-                      "CD3+, CD44 moleculehi, interleukin-2 receptor subunit betahi ] 5) {"  
-                      "CCR7lo } CD4+ ( ) [ CD19 molecule-, CD34 molecule-, CD34 molecule-,"  
-                      "neural cell adhesion molecule 1-, membrane-spanning 4-domains"        
-                      "subfamily A member 1-, integrin alpha-M-, T-cell surface glycoprotein"
-                      "CD8 alpha chain-, receptor-type tyrosine-protein phosphatase C"       
-                      "isoform CD45R+, lymphocyte antigen 6G+, integrin alpha-Xlo ] + more"  
-Score (Out of 1)      "1) -0.071 2) -0.077 3) -0.083 4) -0.091 5) -0.091 + more"             
-Cell ID               "1) CL_0001003 2) CL_0000997 3) CL_0001045 4) CL_0000904 5) CL_0002455"
-                      "+ more"                                                               
-Cell Label            "1) mature CD8_alpha-negative CD11b-positive dendritic cell 2)"        
-                      "immature CD8_alpha-negative CD11b-positive dendritic cell 3) naive"   
-                      "CCR4-positive regulatory T cell 4) central memory CD4-positive,"      
-                      "alpha-beta T cell 5) CD8_alpha-negative plasmactyoid dendritic cell +"
-                      "more"                                                                 
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/flowcl_pop14.pdf
b
Binary file flow_overview/test-data/out2/flowcl_pop14.pdf has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/flowcl_pop14.txt
--- a/flow_overview/test-data/out2/flowcl_pop14.txt Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,36 +0,0 @@
-                      [,1]                                                                   
-Short marker names    "CD4+CCR7+"                                                            
-Ontology marker names "CD4 molecule, C-C chemokine receptor type 7"                          
-Experiment markers    "CD4,CCR7"                                                             
-Ontology exper. names "CD4 molecule, C-C chemokine receptor type 7"                          
-Successful Match?     "No"                                                                   
-Marker ID             "1) PR_000001004, PR_000001203 2) PR_000001004, PR_000001203 3)"       
-                      "PR_000001004, PR_000001203 4) PR_000001004, PR_000001203"             
-Marker Label          "1) CD4 molecule, C-C chemokine receptor type 7 2) CD4 molecule, C-C"  
-                      "chemokine receptor type 7 3) CD4 molecule, C-C chemokine receptor"    
-                      "type 7 4) CD4 molecule, C-C chemokine receptor type 7"                
-Marker Key            "1) { } CD4+, CCR7+ ( ) [ T cell receptor co-receptor CD8-,"           
-                      "interleukin-2 receptor subunit alpha-, alpha-beta T cell receptor"    
-                      "complex+, receptor-type tyrosine-protein phosphatase C isoform"       
-                      "CD45RA+, interleukin-7 receptor subunit alpha+, CD3+, CD44"           
-                      "moleculelo, L-selectinhi ] 2) { } CD4+, CCR7+ ( ) [ T cell receptor"  
-                      "co-receptor CD8-, alpha-beta T cell receptor complex+, interleukin-2" 
-                      "receptor subunit alpha+, receptor-type tyrosine-protein phosphatase C"
-                      "isoform CD45RA+, interleukin-7 receptor subunit alphalo, CD3+, CD44"  
-                      "moleculelo, L-selectinhi ] 3) { } CD4+, CCR7+ ( ) [ T cell receptor"  
-                      "co-receptor CD8-, interleukin-2 receptor subunit alpha-,"             
-                      "receptor-type tyrosine-protein phosphatase C isoform CD45RA-,"        
-                      "alpha-beta T cell receptor complex+, receptor-type tyrosine-protein"  
-                      "phosphatase C isoform CD45RO+, interleukin-7 receptor subunit alpha+,"
-                      "CD3+, CD44 moleculehi, interleukin-2 receptor subunit betahi ] 4) { }"
-                      "CD4+, CCR7+ ( ) [ T cell receptor co-receptor CD8-, receptor-type"    
-                      "tyrosine-protein phosphatase C isoform CD45RO-, alpha-beta T cell"    
-                      "receptor complex+, interleukin-2 receptor subunit alpha+,"            
-                      "receptor-type tyrosine-protein phosphatase C isoform CD45RA+,"        
-                      "interleukin-7 receptor subunit alphalo, C-C chemokine receptor type"  
-                      "4+, CD3+, CD44 moleculelo, L-selectinhi ]"                            
-Score (Out of 1)      "1) 0.2 2) 0.2 3) 0.182 4) 0.167"                                      
-Cell ID               "1) CL_0000895 2) CL_0002677 3) CL_0000904 4) CL_0001045"              
-Cell Label            "1) naive thymus-derived CD4-positive, alpha-beta T cell 2) naive"     
-                      "regulatory T cell 3) central memory CD4-positive, alpha-beta T cell"  
-                      "4) naive CCR4-positive regulatory T cell"                             
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/flowcl_pop15.pdf
b
Binary file flow_overview/test-data/out2/flowcl_pop15.pdf has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/flowcl_pop15.txt
--- a/flow_overview/test-data/out2/flowcl_pop15.txt Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,34 +0,0 @@
-                      [,1]                                                                   
-Short marker names    "CD4loCCR7-"                                                           
-Ontology marker names "CD4 molecule, C-C chemokine receptor type 7"                          
-Experiment markers    "CD4,CCR7"                                                             
-Ontology exper. names "CD4 molecule, C-C chemokine receptor type 7"                          
-Successful Match?     "No"                                                                   
-Marker ID             "1) PR_000001203 2) PR_000001203 3) PR_000001203 4) PR_000001004 5)"   
-                      "PR_000001004"                                                         
-Marker Label          "1) C-C chemokine receptor type 7 2) C-C chemokine receptor type 7 3)" 
-                      "C-C chemokine receptor type 7 4) CD4 molecule 5) CD4 molecule"        
-Marker Key            "1) { CD4lo } CCR7- ( receptor-type tyrosine-protein phosphatase C"    
-                      "isoform CD45RA- ) [ T cell receptor co-receptor CD8-, interleukin-2"  
-                      "receptor subunit alpha-, receptor-type tyrosine-protein phosphatase C"
-                      "isoform CD45RA-, alpha-beta T cell receptor complex+, receptor-type"  
-                      "tyrosine-protein phosphatase C isoform CD45RO+, interleukin-7"        
-                      "receptor subunit alpha+, CD3+, CD44 moleculehi, interleukin-2"        
-                      "receptor subunit betahi ] 2) { CD4lo } CCR7- ( CD4+ ) [ T cell"       
-                      "receptor co-receptor CD8-, alpha-beta T cell receptor complex+, C-X-C"
-                      "chemokine receptor type 5+, inducible T-cell costimulator+,"          
-                      "programmed cell death protein 1+, CD3+ ] 3) { CD4lo } CCR7- ("        
-                      "receptor-type tyrosine-protein phosphatase C isoform CD45RA+ ) [ T"   
-                      "cell receptor co-receptor CD8-, alpha-beta T cell receptor complex+," 
-                      "receptor-type tyrosine-protein phosphatase C isoform CD45RA+, CD3+ ]" 
-                      "4) { CCR7- } CD4lo ( ) [ CD44 molecule-, KLRB1-like protein-,"        
-                      "alpha-beta T cell receptor complex+, T cell receptor co-receptor"     
-                      "CD8lo, signal transducer CD24hi ] 5) { CCR7- } CD4lo ( ) [ alpha-beta"
-                      "T cell receptor complexhi, T cell receptor co-receptor CD8+, CD69"    
-                      "molecule+ ]"                                                          
-Score (Out of 1)      "1) -0.091 2) -0.125 3) -0.167 4) -0.167 5) -0.25"                     
-Cell ID               "1) CL_0000905 2) CL_0002038 3) CL_0001044 4) CL_0002039 5) CL_0002430"
-Cell Label            "1) effector memory CD4-positive, alpha-beta T cell 2) T follicular"   
-                      "helper cell 3) effector CD4-positive, alpha-beta T cell 4) immature"  
-                      "NK T cell stage I 5) CD4-intermediate, CD8-positive double-positive"  
-                      "thymocyte"                                                            
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/flowcl_pop19.pdf
b
Binary file flow_overview/test-data/out2/flowcl_pop19.pdf has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/flowcl_pop19.txt
--- a/flow_overview/test-data/out2/flowcl_pop19.txt Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,43 +0,0 @@
-                      [,1]                                                                   
-Short marker names    "CD4loCCR7+"                                                           
-Ontology marker names "CD4 molecule, C-C chemokine receptor type 7"                          
-Experiment markers    "CD4,CCR7"                                                             
-Ontology exper. names "CD4 molecule, C-C chemokine receptor type 7"                          
-Successful Match?     "No"                                                                   
-Marker ID             "1) PR_000001203 2) PR_000001203 3) PR_000001203 4) PR_000001203 5)"   
-                      "PR_000001203 + more"                                                  
-Marker Label          "1) C-C chemokine receptor type 7 2) C-C chemokine receptor type 7 3)" 
-                      "C-C chemokine receptor type 7 4) C-C chemokine receptor type 7 5) C-C"
-                      "chemokine receptor type 7 + more"                                     
-Marker Key            "1) { CD4lo } CCR7+ ( receptor-type tyrosine-protein phosphatase C"    
-                      "isoform CD45RO- ) [ T cell receptor co-receptor CD8-, receptor-type"  
-                      "tyrosine-protein phosphatase C isoform CD45RO-, alpha-beta T cell"    
-                      "receptor complex+, interleukin-2 receptor subunit alpha+,"            
-                      "receptor-type tyrosine-protein phosphatase C isoform CD45RA+,"        
-                      "interleukin-7 receptor subunit alphalo, C-C chemokine receptor type"  
-                      "4+, CD3+, CD44 moleculelo, L-selectinhi ] 2) { CD4lo } CCR7+ ("       
-                      "receptor-type tyrosine-protein phosphatase C isoform CD45RA- ) [ T"   
-                      "cell receptor co-receptor CD8-, interleukin-2 receptor subunit"       
-                      "alpha-, receptor-type tyrosine-protein phosphatase C isoform CD45RA-,"
-                      "alpha-beta T cell receptor complex+, receptor-type tyrosine-protein"  
-                      "phosphatase C isoform CD45RO+, interleukin-7 receptor subunit alpha+,"
-                      "CD3+, CD44 moleculehi, interleukin-2 receptor subunit betahi ] 3) {"  
-                      "CD4lo } CCR7+ ( receptor-type tyrosine-protein phosphatase C isoform" 
-                      "CD45RA+ ) [ T cell receptor co-receptor CD8-, interleukin-2 receptor" 
-                      "subunit alpha-, alpha-beta T cell receptor complex+, receptor-type"   
-                      "tyrosine-protein phosphatase C isoform CD45RA+, interleukin-7"        
-                      "receptor subunit alpha+, CD3+, CD44 moleculelo, L-selectinhi ] 4) {"  
-                      "CD4lo } CCR7+ ( receptor-type tyrosine-protein phosphatase C isoform" 
-                      "CD45RA+ ) [ T cell receptor co-receptor CD8-, alpha-beta T cell"      
-                      "receptor complex+, interleukin-2 receptor subunit alpha+,"            
-                      "receptor-type tyrosine-protein phosphatase C isoform CD45RA+,"        
-                      "interleukin-7 receptor subunit alphalo, CD3+, CD44 moleculelo,"       
-                      "L-selectinhi ] 5) { CD4lo } CCR7+ ( ) [ receptor-type"                
-                      "tyrosine-protein phosphatase C isoform CD45RA+, interleukin-7"        
-                      "receptor subunit alpha+, CD3+, CD44 moleculelo, L-selectinhi ] + more"
-Score (Out of 1)      "1) -0.083 2) -0.091 3) -0.1 4) -0.1 5) -0.167 + more"                 
-Cell ID               "1) CL_0001045 2) CL_0000904 3) CL_0000895 4) CL_0002677 5) CL_0000898"
-                      "+ more"                                                               
-Cell Label            "1) naive CCR4-positive regulatory T cell 2) central memory"           
-                      "CD4-positive, alpha-beta T cell 3) naive thymus-derived CD4-positive,"
-                      "alpha-beta T cell 4) naive regulatory T cell 5) naive T cell + more"  
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/flowcl_pop20.pdf
b
Binary file flow_overview/test-data/out2/flowcl_pop20.pdf has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/flowcl_pop20.txt
--- a/flow_overview/test-data/out2/flowcl_pop20.txt Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,23 +0,0 @@
-                      [,1]                                                                   
-Short marker names    "CD4-CCR7+"                                                            
-Ontology marker names "CD4 molecule, C-C chemokine receptor type 7"                          
-Experiment markers    "CD4,CCR7"                                                             
-Ontology exper. names "CD4 molecule, C-C chemokine receptor type 7"                          
-Successful Match?     "No"                                                                   
-Marker ID             "1) PR_000001203, PR_000001004 2) PR_000001203, PR_000001004"          
-Marker Label          "1) C-C chemokine receptor type 7, CD4 molecule 2) C-C chemokine"      
-                      "receptor type 7, CD4 molecule"                                        
-Marker Key            "1) { } CD4-, CCR7+ ( ) [ interleukin-2 receptor subunit alpha-, T"    
-                      "cell receptor co-receptor CD8+, alpha-beta T cell receptor complex+," 
-                      "receptor-type tyrosine-protein phosphatase C isoform CD45RA+,"        
-                      "interleukin-7 receptor subunit alpha+, CD3+, CD44 moleculelo,"        
-                      "L-selectinhi ] 2) { } CD4-, CCR7+ ( ) [ receptor-type"                
-                      "tyrosine-protein phosphatase C isoform CD45RA-, interleukin-2"        
-                      "receptor subunit alpha-, T cell receptor co-receptor CD8+, alpha-beta"
-                      "T cell receptor complex+, receptor-type tyrosine-protein phosphatase" 
-                      "C isoform CD45RO+, interleukin-7 receptor subunit alpha+, CD3+, CD44" 
-                      "moleculehi, interleukin-2 receptor subunit betahi ]"                  
-Score (Out of 1)      "1) 0.2 2) 0.182"                                                      
-Cell ID               "1) CL_0000900 2) CL_0000907"                                          
-Cell Label            "1) naive thymus-derived CD8-positive, alpha-beta T cell 2) central"   
-                      "memory CD8-positive, alpha-beta T cell"                               
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/flowcl_pop23.pdf
b
Binary file flow_overview/test-data/out2/flowcl_pop23.pdf has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/flowcl_pop23.txt
--- a/flow_overview/test-data/out2/flowcl_pop23.txt Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,17 +0,0 @@
-                      [,1]                                                               
-Short marker names    "CD4loCCR7lo"                                                      
-Ontology marker names "CD4 molecule, C-C chemokine receptor type 7"                      
-Experiment markers    "CD4,CCR7"                                                         
-Ontology exper. names "CD4 molecule, C-C chemokine receptor type 7"                      
-Successful Match?     "No"                                                               
-Marker ID             "1) PR_000001004 2) PR_000001004"                                  
-Marker Label          "1) CD4 molecule 2) CD4 molecule"                                  
-Marker Key            "1) { CCR7lo } CD4lo ( ) [ CD44 molecule-, KLRB1-like protein-,"   
-                      "alpha-beta T cell receptor complex+, T cell receptor co-receptor" 
-                      "CD8lo, signal transducer CD24hi ] 2) { CCR7lo } CD4lo ( ) ["      
-                      "alpha-beta T cell receptor complexhi, T cell receptor co-receptor"
-                      "CD8+, CD69 molecule+ ]"                                           
-Score (Out of 1)      "1) -0.167 2) -0.25"                                               
-Cell ID               "1) CL_0002039 2) CL_0002430"                                      
-Cell Label            "1) immature NK T cell stage I 2) CD4-intermediate, CD8-positive"  
-                      "double-positive thymocyte"                                        
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/m0_m0_90X90.png
b
Binary file flow_overview/test-data/out2/m0_m0_90X90.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/m0_m1_90X90.png
b
Binary file flow_overview/test-data/out2/m0_m1_90X90.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/m1_m0_90X90.png
b
Binary file flow_overview/test-data/out2/m1_m0_90X90.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/m1_m1_90X90.png
b
Binary file flow_overview/test-data/out2/m1_m1_90X90.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/out.html
--- a/flow_overview/test-data/out2/out.html Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,300 +0,0 @@\n-<html>\n-<head>\n-<title>Flow Overview</title>\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/css/flowCL.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/color_palette.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/overview.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/scatter2D.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/scatter3D.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/scatterMFI.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/parallelCoordinates.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/profileCLs.js" type="text/javascript"></script>\n-<script src="/static/flowtools/js/boxplotsFlow.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-\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="mfi"><a href="#mfi" data-toggle="tab">MFI/Pop</a></li>\n-                <li class="homeTab" data-value="overviewPlot"><a href="#overviewPlot" data-toggle="tab">Overview Plot</a></li>\n-                <li class="homeTab" data-value="scatter2D"><a href="#scatter2D" data-toggle="tab">Scatter 2D</a></li>\n-                <li class="homeTab" data-value="scatter3D"><a href="#scatter3D" data-toggle="tab">Scatter 3D</a></li>\n-                <li class="homeTab" data-value="parallelCoordinates"><a href="#parallelCoordinates" data-toggle="tab">Parallel Coordinates</a></li>\n-                <li class="homeTab" data-value="stats"><a href="#boxplots" data-toggle="tab">Summary Statistics Boxplots</a></li>\n-                <li class="homeTab" data-value="clprofiles"><a href="#clprofiles" data-toggle="tab">Populations Cell Ontologies</a></li>\n-            </ul>\n-\n-            <div class="tab-content">\n-                <div class="tab-pane active" id="mfi" style="min-height:500px;">\n-                    <div id="mfiDiv"></div>\n-                </div>\n-\n-                <div class="tab-pane" id="overviewPlot" style="min-height:500px;">\n-                    <div id="overviewPlotDiv">Overview</div>\n-                </div>\n-\n-                <div class="tab-pane" id="scatter2D" style="min-height:500px;">\n-                    <div i'..b'\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="plotDivbp" class="col-md-8" style="height:100%;"></div>\n-\n-                        <div id="popDivbp" class="col-md-2" style="height:100%;">\n-                            <button id="updateDisplaybp" class="igbtn">Reset Display</button>\n-                            <table id="popTablebp" class="table table-condensed table-bordered igtable">\n-                                <thead>\n-                                    <tr>\n-                                        <th><input type="checkbox" checked id="popSelectAllbp"/></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-\n-                <div class="tab-pane" id="clprofiles" style="min-height:500px;">\n-                    <div class="row">\n-                        <div id="clprof"/>\n-                    </div>\n-                </div>\n-                </div>\n-            </div>\n-  \t    </div>\n-    </div>\n-</div>\n-\n-\n-<script>\n-var mfiLoaded = false;\n-var populationLoaded = false;\n-var overviewPlotLoaded = false;\n-var scatter2DLoaded = false;\n-var scatter3DLoaded = false;\n-var parallelCoordinatesLoaded = false;\n-var clprofilesLoaded = false;\n-var bpLoaded = 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 == \'#mfi\') {\n-        if (mfiLoaded) {\n-            return true;\n-        }\n-        mfiLoaded = true;\n-        displayMFI();\n-      }\n-      if (tab == \'#overviewPlot\') {\n-        if (overviewPlotLoaded) {\n-            return true;\n-        }\n-        overviewPlotLoaded = true;\n-        displayOverviewPlot();\n-      }\n-      if (tab == \'#scatter2D\') {\n-        if (scatter2DLoaded) {\n-            displayScatterPopulation2D();\n-            return true;\n-        }\n-        scatter2DLoaded = true;\n-        displayScatter2D();\n-      }\n-      if (tab == \'#scatter3D\') {\n-        if (scatter3DLoaded) {\n-            displayScatterPopulation3D();\n-            return true;\n-        }\n-        scatter3DLoaded = true;\n-        displayScatter3D();\n-      }\n-      if (tab == \'#parallelCoordinates\') {\n-        if (parallelCoordinatesLoaded) {\n-            displayPopTable();\n-            displayTableGrid();\n-            return true;\n-        }\n-        parallelCoordinatesLoaded = true;\n-        displayParallelCoordinates();\n-      }\n-      if (tab == \'#boxplots\') {\n-        if (bpLoaded) {\n-            displayPopulationLegend(configbp);\n-            displayMarkerTable(configbp);\n-            updateBoxplot(configbp);\n-            return true;\n-        }\n-        bpLoaded = true;\n-        displayMFIBoxplot();\n-      }\n-      if (tab == \'#clprofiles\') {\n-        if (clprofilesLoaded) {\n-            return true;\n-        }\n-        clprofilesLoaded = true;\n-        displayCLTable();\n-      }\n-    });\n-\n-    mfiLoaded = true;\n-    displayMFI();\n-});\n-</script>\n-</body>\n-</html>\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/out2/scores.txt
--- a/flow_overview/test-data/out2/scores.txt Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
@@ -1,27 +0,0 @@
-Population_ID CD4 CCR7 Count Percentage
-1 3 1 1000 5
-2 3 1 1000 5
-3 3 1 1000 5
-4 1 1 1000 5
-5 1 1 1000 5
-6 1 1 1000 5
-7 1 2 1000 5
-8 3 1 1000 5
-9 1 2 1000 5
-10 3 1 1000 5
-11 1 1 1000 5
-12 1 1 1000 5
-13 3 2 1000 5
-14 3 3 1000 5
-15 2 1 1000 5
-16 1 2 1000 5
-17 3 3 1000 5
-18 3 1 1000 5
-19 2 3 1000 5
-20 1 3 1000 5
-21 1 1 1000 5
-22 2 1 1000 5
-23 2 2 1000 5
-24 2 1 1000 5
-25 1 2 1000 5
-26 2 2 1000 5
b
diff -r 8283ff163ba6 -r b5453d07f740 flow_overview/test-data/profile.flowscore
--- a/flow_overview/test-data/profile.flowscore Mon Feb 27 12:54:37 2017 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
@@ -1,27 +0,0 @@
-Population_ID CD4 CCR7 Count Percentage
-1 3 1 1000 5
-2 3 1 1000 5
-3 3 1 1000 5
-4 1 1 1000 5
-5 1 1 1000 5
-6 1 1 1000 5
-7 1 2 1000 5
-8 3 1 1000 5
-9 1 2 1000 5
-10 3 1 1000 5
-11 1 1 1000 5
-12 1 1 1000 5
-13 3 2 1000 5
-14 3 3 1000 5
-15 2 1 1000 5
-16 1 2 1000 5
-17 3 3 1000 5
-18 3 1 1000 5
-19 2 3 1000 5
-20 1 3 1000 5
-21 1 1 1000 5
-22 2 1 1000 5
-23 2 2 1000 5
-24 2 1 1000 5
-25 1 2 1000 5
-26 2 2 1000 5
b
diff -r 8283ff163ba6 -r b5453d07f740 flowstatlib.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/flowstatlib.py Wed Jul 29 17:03:53 2020 -0400
[
@@ -0,0 +1,97 @@
+######################################################################
+#                  Copyright (c) 2016 Northrop Grumman.
+#                          All rights reserved.
+######################################################################
+import pandas as pd
+from scipy.stats import gmean
+from argparse import ArgumentParser
+
+
+def gen_overview_stats(file_name):
+    flow_stats = {}
+    fcs = pd.read_table(file_name)
+    (events, columns) = fcs.shape
+    flow_stats['fcs'] = fcs
+    flow_stats['events'] = events
+    flow_stats['columns'] = columns - 1
+    flow_stats['data'] = fcs.iloc[:, :-1]
+    flow_stats['population'] = fcs.iloc[:, -1:].iloc[:, 0]
+    flow_stats['population_freq'] = flow_stats['population'].value_counts()
+    flow_stats['population_sample'] = (flow_stats['population_freq'] * (20000/float(events))).round(decimals=0)
+    flow_stats['population_freq_sort'] = flow_stats['population_freq'].sort_index()
+    flow_stats['population_per'] = (flow_stats['population'].value_counts(normalize=True) * 100).round(decimals=2)
+    flow_stats['population_per_sort'] = flow_stats['population_per'].sort_index()
+    flow_stats['population_all'] = pd.concat([flow_stats['population_freq_sort'], flow_stats['population_per_sort']], axis=1)
+    flow_stats['population_all'].columns = ['Count', 'Percentage']
+    flow_stats['min'] = flow_stats['data'].values.min()
+    flow_stats['max'] = flow_stats['data'].values.max()
+    flow_stats['markers'] = list(flow_stats['data'].columns)
+    flow_stats['mfi'] = fcs.groupby('Population').mean().round(decimals=2)
+    flow_stats['mfi_pop'] = pd.merge(flow_stats['mfi'], flow_stats['population_all'], left_index=True, right_index=True)
+    flow_stats['mfi_pop']['Population'] = flow_stats['mfi_pop'].index
+    flow_stats['gmfi'] = fcs.groupby('Population').agg(lambda x: gmean(list(x))).round(decimals=2)
+    flow_stats['gmfi_pop'] = pd.merge(flow_stats['gmfi'], flow_stats['population_all'], left_index=True, right_index=True)
+    flow_stats['gmfi_pop']['Population'] = flow_stats['gmfi_pop'].index
+    flow_stats['mdfi'] = fcs.groupby('Population').median().round(decimals=2)
+    flow_stats['mdfi_pop'] = pd.merge(flow_stats['mdfi'], flow_stats['population_all'], left_index=True, right_index=True)
+    flow_stats['mdfi_pop']['Population'] = flow_stats['mdfi_pop'].index
+
+    #
+    # If the number of events is less than 20000, then return
+    # the complete data set,
+    # Otherwise sample the data to only return 20000 events.
+    if events <= 20000:
+        flow_stats['sample'] = fcs
+    else:
+        fcs_np = fcs.values
+        sample_data = []
+        pop_found = {}
+        for i in range(0, events):
+            population_number = fcs_np[i][columns-1]
+            if population_number in pop_found:
+                if pop_found[population_number] < flow_stats['population_sample'][population_number]:
+                    pop_found[population_number] += 1
+                    sample_data.append(fcs_np[i])
+            else:
+                pop_found[population_number] = 1
+                sample_data.append(fcs_np[i])
+        flow_stats['sample'] = pd.DataFrame(sample_data)
+        flow_stats['sample'].columns = fcs.columns
+
+    flow_stats['sample_data'] = flow_stats['sample'].iloc[:, :-1]
+    flow_stats['sample_population'] = flow_stats['sample'].iloc[:, -1:].iloc[:, 0]
+
+    return flow_stats
+
+
+if __name__ == '__main__':
+    parser = ArgumentParser(
+             prog="flowstats",
+             description="Gets statistics on FLOCK run")
+
+    parser.add_argument(
+            '-i',
+            dest="input_file",
+            required=True,
+            help="File locations for flow clr file.")
+
+    parser.add_argument(
+            '-o',
+            dest="out_file",
+            required=True,
+            help="Path to the directory for the output file.")
+    args = parser.parse_args()
+
+    flow_stats = gen_overview_stats(args.input_file)
+    with open(args.out_file, "w") as outf:
+        outf.write("Events: ", flow_stats['events'])
+        outf.write("Min: ", flow_stats['min'])
+        outf.write("Max: ", flow_stats['max'])
+        outf.write("Columns: ", flow_stats['columns'])
+        outf.write("Markers: ", flow_stats['markers'])
+        outf.write("Population: ", flow_stats['population'])
+        outf.write("Population Freq: ", flow_stats['population_freq'])
+        outf.write("Population Sample: ", flow_stats['population_sample'])
+        outf.write("Population Per: ", flow_stats['population_per'])
+        outf.write("Sample Data contains ", len(flow_stats['sample']), " events")
+        outf.write("MIF_POP ", flow_stats['mfi_pop'])
b
diff -r 8283ff163ba6 -r b5453d07f740 genFlowOverview.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/genFlowOverview.py Wed Jul 29 17:03:53 2020 -0400
[
b'@@ -0,0 +1,353 @@\n+\n+#!/usr/bin/env python\n+######################################################################\n+#                  Copyright (c) 2016 Northrop Grumman.\n+#                          All rights reserved.\n+######################################################################\n+\n+# version 1.1 - August 2017\n+# added upper limit to nb of clusters (40)\n+#\n+import sys\n+import os\n+import pandas as pd\n+import logging\n+import fileinput\n+\n+from argparse import ArgumentParser\n+from jinja2 import Environment, FileSystemLoader\n+from collections import defaultdict\n+\n+from color_palette import color_palette\n+from flowstatlib import gen_overview_stats\n+import matplotlib as mpl\n+mpl.use(\'Agg\')\n+import matplotlib.pyplot as plt\n+\n+\n+profile_key = {\n+    "1": "-",\n+    "2": "lo",\n+    "3": "+",\n+    "4": "hi"\n+}\n+\n+\n+# flow CL functions\n+def run_flowCL(phenotype, output_txt, output_pdf, tool):\n+    run_command = " ". join(["Rscript --slave --vanilla", tool, output_txt,\n+                             phenotype])\n+    os.system(run_command)\n+\n+    get_graph = " ".join(["mv flowCL_results/*.pdf", output_pdf])\n+    os.system(get_graph)\n+    return\n+\n+\n+def generate_flowCL_query(list_markers, list_types):\n+    if (len(list_markers) != len(list_types)):\n+        return("pb with headers")\n+    query = []\n+    # go through both lists, remove fsc/ssc\n+    for i in range(1, len(list_markers)):\n+        if not list_markers[i].startswith("FSC") and not list_markers[i].startswith("SSC"):\n+            query.append(list_markers[i].upper())\n+            query.append(profile_key[list_types[i]])\n+    # return concatenated string\n+    return("".join(query))\n+\n+\n+def translate_profiles(input_file, tool_dir, html_dir):\n+    tool = "/".join([tool_dir, "getOntology.R"])\n+    html_table = "".join([html_dir, "/CLprofiles.txt"])\n+    score_table = "".join(["cp ", input_file, " ", html_dir, "/scores.txt"])\n+    os.system(score_table)\n+\n+    # read profile\n+    with open(input_file, "r") as flock_profiles, open(html_table, "w") as out:\n+        headers = flock_profiles.readline()\n+        headers = headers.strip()\n+        markers = headers.split("\\t")[:-2]\n+        counter = 0\n+\n+        out.write("Population\\tFlowCL Query\\tNb Results\\tLink to PDF\\t")\n+        out.write("Top Result Label\\tTop Result Score\\tTop Result CL\\n")\n+        queries = {}\n+        # create marker query for each population\n+        for lines in flock_profiles:\n+            lines = lines.strip("\\n")\n+            pop_profile = lines.split("\\t")[:-2]\n+            flowcl_query = generate_flowCL_query(markers, pop_profile)\n+            counter += 1\n+            nb_results = "0"\n+            top_label = "no_match"\n+            top_score = "NA"\n+            top_CL = "NA"\n+            pdf_link = "NA"\n+\n+            # check if query was run before\n+            if flowcl_query not in queries:\n+                # create filenames for results & graphs\n+                txt = "".join(["flowcl_pop", str(counter).zfill(2), ".txt"])\n+                text_result = "/".join([html_dir, txt])\n+                graph = "".join(["flowcl_pop", str(counter).zfill(2), ".pdf"])\n+                graph_output = "/".join([html_dir, graph])\n+                # run flowCL for each marker profile\n+                run_flowCL(flowcl_query, text_result, graph_output, tool)\n+\n+                # test that text file exists if not results are all NAs:\n+                if os.path.isfile(text_result):\n+                    with open(text_result, "r") as res:\n+                        for line in res:\n+                            if line.startswith("Score"):\n+                                data = line.split(") ")\n+                                top_score = data[2][:-2]\n+                                tot_results = len(data) - 2\n+                                nb_results = str(tot_results)\n+                                if tot_results == 5:\n+                                    if len(data[6].split("+")) > 1:\n+               '..b'w_mfi_file_name, "w") as flow_mfi_file:\n+        flow_stats[args.mfi_calc].to_csv(flow_mfi_file, sep="\\t", float_format=\'%.0f\')\n+\n+    mpop = "_".join([args.mfi_calc, "pop"])\n+    flow_mfi_pop_file_name = args.output_directory + "/flow.mfi_pop"\n+    with open(flow_mfi_pop_file_name, "w") as flow_mfi_pop_file:\n+        flow_stats[mpop].to_csv(flow_mfi_pop_file, sep="\\t", index=False, float_format="%.2f")\n+\n+    # box plot data\n+    boxplot_data = args.output_directory + "/boxplotData.json"\n+    resampled = get_boxplot_stats(args.input_file, flow_mfi_file_name, boxplot_data)\n+\n+    # Generate the Images  -- eventually we should change that over to D3\n+    fcm = flow_stats[\'sample_data\'].values\n+    colors = []\n+    for i, j in enumerate(flow_stats[\'sample_population\']):\n+        colors.append(color_palette[j])\n+\n+    for i in range(flow_stats[\'columns\']):\n+        for j in range(flow_stats[\'columns\']):\n+            file_name = "m" + str(i) + "_m" + str(j)\n+            ax = plt.subplot(1, 1, 1)\n+            plt.subplots_adjust(left=0.0, bottom=0.0, right=1.0, top=1.0, wspace=0.0, hspace=0.0)\n+            plt.scatter(fcm[:, i], fcm[:, j], s=1, c=colors, edgecolors=\'none\')\n+            plt.axis([0, 1024, 0, 1024])\n+            plt.xticks([])\n+            plt.yticks([])\n+            F = plt.gcf()\n+            F.set_size_inches(1, 1)\n+            F.set_dpi(90)\n+            png_file = file_name + "_90X90.png"\n+            F.savefig(args.output_directory + "/" + png_file)\n+            plt.clf()\n+\n+    flow_overview_file_name = args.output_directory + "/flow.overview"\n+    with open(flow_overview_file_name, "w") as flow_overview_file:\n+        flow_overview_file.write("<table>\\n")\n+        flow_overview_file.write("<tr><td>&nbsp;</td>\\n")\n+        for i in range(flow_stats[\'columns\']):\n+            flow_overview_file.write("<td>" + flow_stats[\'markers\'][i] + "</td>\\n")\n+\n+        for i in range(flow_stats[\'columns\']):\n+            flow_overview_file.write("<tr>\\n")\n+            flow_overview_file.write("<td>" + flow_stats[\'markers\'][i] + "</td>\\n")\n+            for j in range(flow_stats[\'columns\']):\n+                file_name = "m" + str(j) + "_m" + str(i)\n+                image_file = file_name + "_90X90.png"\n+                flow_overview_file.write(\'<td><img src="\' + image_file + \'"/></td>\')\n+            flow_overview_file.write("</tr>\\n")\n+\n+        flow_overview_file.write("</table>\\n</body>\\n<html>\\n")\n+\n+    if resampled:\n+        to_find = \'<div id="outlierWarning" style="display:none;">\'\n+        to_replace = \'<div id="outlierWarning">\'\n+        ## yay python 2.7\n+        ro = fileinput.input(args.output_file, inplace=True, backup=".bak")\n+        for roline in ro:\n+            print(roline.replace(to_find, to_replace), end=\'\')\n+        ro.close()\n+\n+\n+if __name__ == "__main__":\n+    parser = ArgumentParser(\n+             prog="genOverview",\n+             description="Generate an overview plot of Flow results.")\n+\n+    parser.add_argument(\n+            \'-i\',\n+            dest="input_file",\n+            required=True,\n+            help="File location for the Flow Text file.")\n+\n+    parser.add_argument(\n+            \'-o\',\n+            dest="output_file",\n+            required=True,\n+            help="File location for the HTML output file.")\n+\n+    parser.add_argument(\n+            \'-d\',\n+            dest="output_directory",\n+            required=True,\n+            help="Directory location for the Flow Plot.")\n+\n+    parser.add_argument(\n+            \'-M\',\n+            dest="mfi_calc",\n+            required=True,\n+            help="what to calculate for centroids.")\n+\n+    parser.add_argument(\n+            \'-p\',\n+            dest="scores",\n+            help="File location for FLOCK population scores.")\n+\n+    parser.add_argument(\n+            \'-t\',\n+            dest="tool_directory",\n+            required=True,\n+            help="Location of the Tool Directory.")\n+\n+    args = parser.parse_args()\n+\n+    gen_flow_overview(args)\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 genFlowOverview.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/genFlowOverview.xml Wed Jul 29 17:03:53 2020 -0400
[
b'@@ -0,0 +1,155 @@\n+<tool id="gen_flow_overview" name="Generate overview information" version="1.2+galaxy0" profile="18.01">\n+  <description>of reference set of clusters or populations.</description>\n+  <requirements>\n+    <requirement type="package" version="3.3.0">matplotlib</requirement>\n+    <requirement type="package" version="1.5.1">scipy</requirement>\n+    <requirement type="package" version="1.0.5">pandas</requirement>\n+    <requirement type="package" version="2.11.2">jinja2</requirement>\n+    <requirement type="package" version="1.26.0">bioconductor-flowcl</requirement>\n+  </requirements>\n+  <stdio>\n+    <exit_code range="2" level="fatal" description="There was a problem running flowCL. You might want to check your marker names - See stderr for more details." />\n+    <exit_code range="3" level="fatal" description="There are too many populations in the input file. The maximum number of populations is 40." />\n+    <exit_code range="4:" level="fatal" description="See stderr for more details." />\n+  </stdio>\n+  <command><![CDATA[\n+   #if $ontology.runcl == "no"\n+    python \'$__tool_directory__/genFlowOverview.py\' -i \'${input}\' -o \'${html_file}\' -M \'${mfi}\' -d \'${html_file.files_path}\' -t \'$__tool_directory__\';\n+   #else\n+    python \'$__tool_directory__/genFlowOverview.py\' -i \'${input}\' -o \'${html_file}\' -M \'${mfi}\' -d \'${html_file.files_path}\' -t \'$__tool_directory__\' -p \'${scores}\';\n+   #end if\n+\n+   cp -r \'$__tool_directory__\'/js \'${html_file.files_path}\';\n+   cp -r \'$__tool_directory__\'/css \'${html_file.files_path}\';\n+  ]]>\n+  </command>\n+  <inputs>\n+    <param format="flowclr" name="input" type="data" label="Flow Result File"/>\n+    <param name="mfi" type="select" label="Calculate centroids using:">\n+      <option value="mfi" selected="true">Mean Fluorescence Intensity</option>\n+      <option value="mdfi">Median Fluorescence Intensity</option>\n+      <option value="gmfi">Geometric Mean Fluorescence Intensity</option>\n+    </param>\n+    <conditional name="ontology">\n+      <param name="runcl" type="select" label="Associate FLOCK population score profiles with Cell Ontology?" help="using FlowCL">\n+        <option value="no">No, thank you</option>\n+        <option value="yes">Yes, pretty please, even though it will take 10 more minutes to run</option>\n+      </param>\n+      <when value="yes">\n+        <param format="flowscore" name="scores" type="data" label="Population score profiles from FLOCK"/>\n+      </when>\n+    </conditional>\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.flowclr"/>\n+      <param name="mfi" value="mfi"/>\n+      <param name="runcl" value="no"/>\n+      <output name="html_file" file="out1/out.html">\n+        <extra_files type="file" name="flow.mfi" value="out1/flow.mfi"/>\n+        <extra_files type="file" name="flow.mfi_pop" value="out1/flow.mfi_pop"/>\n+        <extra_files type="file" name="flow.overview" value="out1/flow.overview"/>\n+        <extra_files type="file" name="flow.sample" value="out1/flow.sample"/>\n+        <extra_files type="file" name="boxplotData.json" value="out1/boxplotData.json" compare="sim_size"/>\n+        <extra_files type="file" name="m0_m0_90X90.png" value="out1/m0_m0_90X90.png" compare="sim_size"/>\n+        <extra_files type="file" name="m0_m1_90X90.png" value="out1/m0_m1_90X90.png" compare="sim_size"/>\n+        <extra_files type="file" name="m1_m0_90X90.png" value="out1/m1_m0_90X90.png" compare="sim_size"/>\n+        <extra_files type="file" name="m1_m1_90X90.png" value="out1/m1_m1_90X90.png" compare="sim_size"/>\n+      </output>\n+    </test>\n+    <test>\n+      <param name="input" value="input.flowclr"/>\n+      <param name="mfi" value="mfi"/>\n+      <param name="runcl" value="yes"/>\n+      <param name="scores" value="profile.flowscore"/>\n+      <output name="html_file" file="out2/out.html">\n+        <extra_files type="file" name="'..b'y FLOCK to a Cell Ontology term. This option is not available for FlowSOM runs.\n+.. class:: infomark\n+Tip: Marker names need to be in the Cell Ontology for flowCL to run.\n+.. class:: warningmark\n+The number of populations or clusters this tool can handle is limited to 40.\n+**Output**\n+The output is a page with multiple tabs that allows visualization of the data.\n+.. class: warningmark\n+The input table is proportionally downsampled to 20K events for the visualization.\n+.. class:: warningmark\n+*The output of this tool is interactive. However, comments or any other modifications made are not saved when exiting the view.*\n+-----\n+**Example**\n+*Input* - fluorescence intensities per marker and population ID per event::\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+   ...     ...     ...     ... ...\n+*Output*\n+Summary of the data:\n+The comment field of this table is editable, and can be used to name the populations. 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+.. image:: ../../static/images/flowtools/summary.png\n+.. image:: ../../static/images/flowtools/edit_summary.png\n+Scatterplots overview:\n+.. image:: ../../static/images/flowtools/overview.png\n+2D Scatterplot:\n+The user can choose which populations and markers to display. 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+.. image:: ../../static/images/flowtools/scatter2D.png\n+3D Scatterplot:\n+The user can choose which populations and markers to display. 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+.. class:: warningmark\n+Unfortunately Chrome stopped supporting the plugin enabling this visualization. If you get an error message stating that WebGL is not supported, try switching to Firefox.\n+.. image:: ../../static/images/flowtools/scatter3D.png\n+Parallel Coordinates:\n+The user can reorder the markers, and choose which 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+.. image:: ../../static/images/flowtools/pcflock.png\n+Summary Statistics Boxplots:\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+.. image:: ../../static/images/flowtools/bpflock.png\n+If the ontology option was selected, the following tab is displayed.\n+The CL terms hyperlink to their representation in the Immport Cell Ontology browser. The full flowCL run summary is accessible by clicking on the phenotype.\n+.. image:: ../../static/images/flowtools/profileCL_go.png\n+  ]]>\n+  </help>\n+  <citations>\n+    <citation type="doi">10.1093/bioinformatics/btu807</citation>\n+  </citations>\n+</tool>\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 getOntology.R
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/getOntology.R Wed Jul 29 17:03:53 2020 -0400
[
@@ -0,0 +1,29 @@
+#!/usr/bin/Rscript --vanilla
+# Cell Ontology Module for Galaxy
+# FlowCL
+######################################################################
+#                  Copyright (c) 2016 Northrop Grumman.
+#                          All rights reserved.
+######################################################################
+#
+# Version 1
+# Cristel Thomas
+#
+#
+
+suppressWarnings(suppressMessages(library(flowCL)))
+suppressWarnings(suppressMessages(library(base)))
+
+getOntology <- function(output_file, markers) {
+  res <- flowCL(markers, ResetArch = TRUE)
+  if (length(res) == 6) {
+    report <- capture.output(res$Table)
+    sink(output_file)
+    cat(report, sep = "\n")
+    sink()
+  }
+}
+
+args <- commandArgs(trailingOnly = TRUE)
+markers <- paste(args[2:length(args)], collapse="")
+getOntology(args[1], markers)
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/css/editor.bootstrap.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/editor.bootstrap.css Wed Jul 29 17:03:53 2020 -0400
[
b'@@ -0,0 +1,590 @@\n+div.DTE div.DTE_Form_Error {\n+  display: none;\n+  color: #b11f1f;\n+}\n+\n+div.DTE_Field div.multi-value,\n+div.DTE_Field div.multi-restore {\n+  display: none;\n+  cursor: pointer;\n+}\n+div.DTE_Field div.multi-value span,\n+div.DTE_Field div.multi-restore span {\n+  display: block;\n+  color: #666;\n+}\n+div.DTE_Field div.multi-value:hover,\n+div.DTE_Field div.multi-restore:hover {\n+  background-color: #f1f1f1;\n+}\n+div.DTE_Field div.multi-restore {\n+  margin-top: 0.5em;\n+  font-size: 0.8em;\n+  line-height: 1.25em;\n+}\n+div.DTE_Field:after {\n+  display: block;\n+  content: ".";\n+  height: 0;\n+  line-height: 0;\n+  clear: both;\n+  visibility: hidden;\n+}\n+\n+div.DTE_Inline {\n+  position: relative;\n+  display: table;\n+  width: 100%;\n+}\n+div.DTE_Inline div.DTE_Inline_Field,\n+div.DTE_Inline div.DTE_Inline_Buttons {\n+  display: table-cell;\n+  vertical-align: middle;\n+}\n+div.DTE_Inline div.DTE_Inline_Field div.DTE_Field,\n+div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field {\n+  padding: 0;\n+}\n+div.DTE_Inline div.DTE_Inline_Field div.DTE_Field > label,\n+div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field > label {\n+  display: none;\n+}\n+div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input,\n+div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input {\n+  width: 100%;\n+}\n+div.DTE_Inline div.DTE_Inline_Field div.DTE_Form_Buttons button,\n+div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Form_Buttons button {\n+  margin: -6px 0 -6px 4px;\n+  padding: 5px;\n+}\n+div.DTE_Inline div.DTE_Field input[type="color"],\n+div.DTE_Inline div.DTE_Field input[type="date"],\n+div.DTE_Inline div.DTE_Field input[type="datetime"],\n+div.DTE_Inline div.DTE_Field input[type="datetime-local"],\n+div.DTE_Inline div.DTE_Field input[type="email"],\n+div.DTE_Inline div.DTE_Field input[type="month"],\n+div.DTE_Inline div.DTE_Field input[type="number"],\n+div.DTE_Inline div.DTE_Field input[type="password"],\n+div.DTE_Inline div.DTE_Field input[type="search"],\n+div.DTE_Inline div.DTE_Field input[type="tel"],\n+div.DTE_Inline div.DTE_Field input[type="text"],\n+div.DTE_Inline div.DTE_Field input[type="time"],\n+div.DTE_Inline div.DTE_Field input[type="url"],\n+div.DTE_Inline div.DTE_Field input[type="week"] {\n+  margin: -6px 0;\n+}\n+div.DTE_Inline.DTE_Processing:after {\n+  position: absolute;\n+  content: \' \';\n+  display: block;\n+  top: 4px;\n+  right: 10px;\n+  height: 12px;\n+  width: 17px;\n+  background: url("../images/ajax-loader-small.gif") no-repeat top left;\n+}\n+\n+span.dtr-data div.DTE_Inline {\n+  display: inline-table;\n+}\n+\n+div.DTE_Inline div.DTE_Field {\n+  width: 100%;\n+}\n+div.DTE_Inline div.DTE_Field > div {\n+  width: 100%;\n+  padding: 0;\n+}\n+div.DTE_Inline div.DTE_Field input.form-control {\n+  height: 30px;\n+}\n+div.DTE_Inline div.DTE_Field div.help-block {\n+  display: none;\n+}\n+div.DTE_Inline.DTE_Processing:after {\n+  top: 5px;\n+}\n+\n+div.DTE_Field_Type_checkbox div.controls,\n+div.DTE_Field_Type_radio div.controls {\n+  margin-top: 0.4em;\n+}\n+div.DTE_Field_Type_checkbox div.controls label,\n+div.DTE_Field_Type_radio div.controls label {\n+  margin-left: 0.75em;\n+  margin-bottom: 0;\n+  vertical-align: middle;\n+  font-weight: normal;\n+}\n+\n+div.DTE_Bubble {\n+  position: absolute;\n+  z-index: 11;\n+  margin-top: -6px;\n+  opacity: 0;\n+}\n+div.DTE_Bubble div.DTE_Bubble_Liner {\n+  position: absolute;\n+  bottom: 0;\n+  border: 1px solid black;\n+  width: 300px;\n+  margin-left: -150px;\n+  background-color: white;\n+  box-shadow: 2px 2px 7px #555;\n+  border-radius: 5px;\n+  border: 2px solid #444;\n+  padding: 1em;\n+  -webkit-box-sizing: border-box;\n+  -moz-box-sizing: border-box;\n+  box-sizing: border-box;\n+}\n+div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table {\n+  display: table;\n+  width: 100%;\n+}\n+div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form {\n+  display: table-cell;\n+}\n+div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content {\n+  padding: 0;\n+}\n+div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table > form div.DTE_Form_Content div.DTE_'..b'editor-datetime table td.day.today {\n+  background-color: #ddd;\n+}\n+div.editor-datetime table td.day.today button {\n+  font-weight: bold;\n+}\n+div.editor-datetime table td.day.selected button {\n+  background: #337ab7;\n+  color: white;\n+  border-radius: 2px;\n+}\n+div.editor-datetime table td.day button:hover {\n+  background: #ff8000;\n+  color: white;\n+  border-radius: 2px;\n+}\n+div.editor-datetime table td.editor-datetime-week {\n+  font-size: 0.7em;\n+}\n+div.editor-datetime table button {\n+  width: 100%;\n+  box-sizing: border-box;\n+  border: none;\n+  background: transparent;\n+  font-size: inherit;\n+  color: inherit;\n+  text-align: inherit;\n+  padding: 5px 9px;\n+  cursor: pointer;\n+  margin: 0;\n+}\n+div.editor-datetime table.weekNumber th {\n+  width: 12.5%;\n+}\n+div.editor-datetime div.editor-datetime-label {\n+  position: relative;\n+  display: inline-block;\n+  height: 30px;\n+  padding: 5px 6px;\n+  border: 1px solid transparent;\n+  box-sizing: border-box;\n+  cursor: pointer;\n+}\n+div.editor-datetime div.editor-datetime-label:hover {\n+  border: 1px solid #ddd;\n+  border-radius: 2px;\n+  background-color: #f5f5f5;\n+}\n+div.editor-datetime div.editor-datetime-label select {\n+  position: absolute;\n+  top: 6px;\n+  left: 0;\n+  cursor: pointer;\n+  opacity: 0;\n+  -ms-filter: "alpha(opacity=0)";\n+}\n+div.editor-datetime div.editor-datetime-time {\n+  text-align: center;\n+}\n+div.editor-datetime div.editor-datetime-time > span {\n+  vertical-align: middle;\n+}\n+div.editor-datetime div.editor-datetime-time div.editor-datetime-timeblock {\n+  display: inline-block;\n+  vertical-align: middle;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft,\n+div.editor-datetime div.editor-datetime-iconRight,\n+div.editor-datetime div.editor-datetime-iconUp,\n+div.editor-datetime div.editor-datetime-iconDown {\n+  width: 30px;\n+  height: 30px;\n+  background-position: center;\n+  background-repeat: no-repeat;\n+  opacity: 0.3;\n+  overflow: hidden;\n+  box-sizing: border-box;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft:hover,\n+div.editor-datetime div.editor-datetime-iconRight:hover,\n+div.editor-datetime div.editor-datetime-iconUp:hover,\n+div.editor-datetime div.editor-datetime-iconDown:hover {\n+  border: 1px solid #ccc;\n+  border-radius: 2px;\n+  background-color: #f0f0f0;\n+  opacity: 0.6;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft button,\n+div.editor-datetime div.editor-datetime-iconRight button,\n+div.editor-datetime div.editor-datetime-iconUp button,\n+div.editor-datetime div.editor-datetime-iconDown button {\n+  border: none;\n+  background: transparent;\n+  text-indent: 30px;\n+  height: 100%;\n+  width: 100%;\n+  cursor: pointer;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft {\n+  position: absolute;\n+  top: 5px;\n+  left: 5px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==");\n+}\n+div.editor-datetime div.editor-datetime-iconRight {\n+  position: absolute;\n+  top: 5px;\n+  right: 5px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=");\n+}\n+div.editor-datetime div.editor-datetime-iconUp {\n+  height: 20px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAL0lEQVR4AWOgJmBhxCvLyopHnpmVjY2VCadeoCxIHrcsWJ4RlyxCHlMWCTBRJxwAjrIBDMWSiM0AAAAASUVORK5CYII=");\n+}\n+div.editor-datetime div.editor-datetime-iconDown {\n+  height: 20px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAMElEQVR4AWOgDmBiRQIsmPKMrGxQgJDFlEfIYpoPk8Utz8qM232MYFfhkQfKUg8AANefAQxecJ58AAAAAElFTkSuQmCC");\n+}\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/css/editor.bootstrap.min.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/editor.bootstrap.min.css Wed Jul 29 17:03:53 2020 -0400
[
b'@@ -0,0 +1,1 @@\n+div.DTE div.DTE_Form_Error{display:none;color:#b11f1f}div.DTE_Field div.multi-value,div.DTE_Field div.multi-restore{display:none;cursor:pointer}div.DTE_Field div.multi-value span,div.DTE_Field div.multi-restore span{display:block;color:#666}div.DTE_Field div.multi-value:hover,div.DTE_Field div.multi-restore:hover{background-color:#f1f1f1}div.DTE_Field div.multi-restore{margin-top:0.5em;font-size:0.8em;line-height:1.25em}div.DTE_Field:after{display:block;content:".";height:0;line-height:0;clear:both;visibility:hidden}div.DTE_Inline{position:relative;display:table;width:100%}div.DTE_Inline div.DTE_Inline_Field,div.DTE_Inline div.DTE_Inline_Buttons{display:table-cell;vertical-align:middle}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field{padding:0}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field>label,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field>label{display:none}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input{width:100%}div.DTE_Inline div.DTE_Inline_Field div.DTE_Form_Buttons button,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Form_Buttons button{margin:-6px 0 -6px 4px;padding:5px}div.DTE_Inline div.DTE_Field input[type="color"],div.DTE_Inline div.DTE_Field input[type="date"],div.DTE_Inline div.DTE_Field input[type="datetime"],div.DTE_Inline div.DTE_Field input[type="datetime-local"],div.DTE_Inline div.DTE_Field input[type="email"],div.DTE_Inline div.DTE_Field input[type="month"],div.DTE_Inline div.DTE_Field input[type="number"],div.DTE_Inline div.DTE_Field input[type="password"],div.DTE_Inline div.DTE_Field input[type="search"],div.DTE_Inline div.DTE_Field input[type="tel"],div.DTE_Inline div.DTE_Field input[type="text"],div.DTE_Inline div.DTE_Field input[type="time"],div.DTE_Inline div.DTE_Field input[type="url"],div.DTE_Inline div.DTE_Field input[type="week"]{margin:-6px 0}div.DTE_Inline.DTE_Processing:after{position:absolute;content:\' \';display:block;top:4px;right:10px;height:12px;width:17px;background:url("../images/ajax-loader-small.gif") no-repeat top left}span.dtr-data div.DTE_Inline{display:inline-table}div.DTE_Inline div.DTE_Field{width:100%}div.DTE_Inline div.DTE_Field>div{width:100%;padding:0}div.DTE_Inline div.DTE_Field input.form-control{height:30px}div.DTE_Inline div.DTE_Field div.help-block{display:none}div.DTE_Inline.DTE_Processing:after{top:5px}div.DTE_Field_Type_checkbox div.controls,div.DTE_Field_Type_radio div.controls{margin-top:0.4em}div.DTE_Field_Type_checkbox div.controls label,div.DTE_Field_Type_radio div.controls label{margin-left:0.75em;margin-bottom:0;vertical-align:middle;font-weight:normal}div.DTE_Bubble{position:absolute;z-index:11;margin-top:-6px;opacity:0}div.DTE_Bubble div.DTE_Bubble_Liner{position:absolute;bottom:0;border:1px solid black;width:300px;margin-left:-150px;background-color:white;box-shadow:2px 2px 7px #555;border-radius:5px;border:2px solid #444;padding:1em;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table{display:table;width:100%}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form{display:table-cell}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content{padding:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field{position:relative;zoom:1;margin-bottom:0.5em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field:last-child{margin-bottom:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons{display:table-cell;vertical-align:bottom;padding:0 0 0 0.75em;width:1%}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header{border-top-left-radius:5px;border-top-right-radius:5px}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header+div.DTE_Form_Info,div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Header+div.DTE_Bubble_Table{pad'..b'div.editor-datetime div.editor-datetime-title{text-align:center;padding:5px 0px 3px}div.editor-datetime table{border-spacing:0;margin:6px 13px}div.editor-datetime table th{font-size:0.8em;color:#777;font-weight:normal;width:14.285714286%;padding:0 0 4px 0;text-align:center}div.editor-datetime table td{font-size:0.9em;color:#444;padding:0}div.editor-datetime table td.day{text-align:right;background:#f5f5f5}div.editor-datetime table td.day.disabled{color:#aaa;background:white}div.editor-datetime table td.day.today{background-color:#ddd}div.editor-datetime table td.day.today button{font-weight:bold}div.editor-datetime table td.day.selected button{background:#337ab7;color:white;border-radius:2px}div.editor-datetime table td.day button:hover{background:#ff8000;color:white;border-radius:2px}div.editor-datetime table td.editor-datetime-week{font-size:0.7em}div.editor-datetime table button{width:100%;box-sizing:border-box;border:none;background:transparent;font-size:inherit;color:inherit;text-align:inherit;padding:5px 9px;cursor:pointer;margin:0}div.editor-datetime table.weekNumber th{width:12.5%}div.editor-datetime div.editor-datetime-label{position:relative;display:inline-block;height:30px;padding:5px 6px;border:1px solid transparent;box-sizing:border-box;cursor:pointer}div.editor-datetime div.editor-datetime-label:hover{border:1px solid #ddd;border-radius:2px;background-color:#f5f5f5}div.editor-datetime div.editor-datetime-label select{position:absolute;top:6px;left:0;cursor:pointer;opacity:0;-ms-filter:"alpha(opacity=0)"}div.editor-datetime div.editor-datetime-time{text-align:center}div.editor-datetime div.editor-datetime-time>span{vertical-align:middle}div.editor-datetime div.editor-datetime-time div.editor-datetime-timeblock{display:inline-block;vertical-align:middle}div.editor-datetime div.editor-datetime-iconLeft,div.editor-datetime div.editor-datetime-iconRight,div.editor-datetime div.editor-datetime-iconUp,div.editor-datetime div.editor-datetime-iconDown{width:30px;height:30px;background-position:center;background-repeat:no-repeat;opacity:0.3;overflow:hidden;box-sizing:border-box}div.editor-datetime div.editor-datetime-iconLeft:hover,div.editor-datetime div.editor-datetime-iconRight:hover,div.editor-datetime div.editor-datetime-iconUp:hover,div.editor-datetime div.editor-datetime-iconDown:hover{border:1px solid #ccc;border-radius:2px;background-color:#f0f0f0;opacity:0.6}div.editor-datetime div.editor-datetime-iconLeft button,div.editor-datetime div.editor-datetime-iconRight button,div.editor-datetime div.editor-datetime-iconUp button,div.editor-datetime div.editor-datetime-iconDown button{border:none;background:transparent;text-indent:30px;height:100%;width:100%;cursor:pointer}div.editor-datetime div.editor-datetime-iconLeft{position:absolute;top:5px;left:5px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==")}div.editor-datetime div.editor-datetime-iconRight{position:absolute;top:5px;right:5px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=")}div.editor-datetime div.editor-datetime-iconUp{height:20px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAL0lEQVR4AWOgJmBhxCvLyopHnpmVjY2VCadeoCxIHrcsWJ4RlyxCHlMWCTBRJxwAjrIBDMWSiM0AAAAASUVORK5CYII=")}div.editor-datetime div.editor-datetime-iconDown{height:20px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAMElEQVR4AWOgDmBiRQIsmPKMrGxQgJDFlEfIYpoPk8Utz8qM232MYFfhkQfKUg8AANefAQxecJ58AAAAAElFTkSuQmCC")}\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/css/editor.dataTables.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/editor.dataTables.css Wed Jul 29 17:03:53 2020 -0400
b
b'@@ -0,0 +1,1266 @@\n+div.DTE {\n+  position: relative;\n+}\n+div.DTE div.DTE_Processing_Indicator {\n+  position: absolute;\n+  top: 10px;\n+  right: 13px;\n+  height: 32px;\n+  width: 32px;\n+  background: url("../images/ajax-loader.gif") no-repeat top left;\n+  display: none;\n+  z-index: 20;\n+}\n+div.DTE div.DTE_Header {\n+  position: absolute;\n+  top: 0;\n+  left: 0;\n+  height: 50px;\n+  width: 100%;\n+  background-color: #f3f3f3;\n+  border-bottom: 1px solid #ddd;\n+  padding: 16px 10px 2px 16px;\n+  font-size: 1.3em;\n+  -webkit-box-sizing: border-box;\n+  -moz-box-sizing: border-box;\n+  box-sizing: border-box;\n+}\n+div.DTE div.DTE_Footer {\n+  position: absolute;\n+  bottom: 0;\n+  left: 0;\n+  height: 50px;\n+  width: 100%;\n+  background-color: #f3f3f3;\n+  border-top: 1px solid #ddd;\n+  padding: 10px;\n+  -webkit-box-sizing: border-box;\n+  -moz-box-sizing: border-box;\n+  box-sizing: border-box;\n+}\n+div.DTE div.DTE_Form_Info {\n+  margin-bottom: 0.5em;\n+  display: none;\n+}\n+div.DTE div.DTE_Form_Content {\n+  position: relative;\n+  padding: 10px;\n+}\n+div.DTE div.DTE_Form_Error {\n+  float: left;\n+  padding: 5px;\n+  display: none;\n+  color: #b11f1f;\n+}\n+div.DTE button.btn,\n+div.DTE div.DTE_Form_Buttons button {\n+  position: relative;\n+  text-align: center;\n+  display: block;\n+  margin-top: 0;\n+  padding: 5px 15px;\n+  cursor: pointer;\n+  float: right;\n+  margin-left: 0.75em;\n+  font-size: 14px;\n+  text-shadow: 0 1px 0 white;\n+  border: 1px solid #999;\n+  -webkit-border-radius: 4px;\n+  -moz-border-radius: 4px;\n+  -ms-border-radius: 4px;\n+  -o-border-radius: 4px;\n+  border-radius: 4px;\n+  -webkit-box-shadow: 1px 1px 3px #ccc;\n+  -moz-box-shadow: 1px 1px 3px #ccc;\n+  box-shadow: 1px 1px 3px #ccc;\n+  background-color: #f9f9f9 100%;\n+  /* Fallback */\n+  background-image: -webkit-linear-gradient(top, #ffffff 0%, #eee 65%, #f9f9f9 100%);\n+  /* Chrome 10+, Saf5.1+, iOS 5+ */\n+  background-image: -moz-linear-gradient(top, #ffffff 0%, #eee 65%, #f9f9f9 100%);\n+  /* FF3.6 */\n+  background-image: -ms-linear-gradient(top, #ffffff 0%, #eee 65%, #f9f9f9 100%);\n+  /* IE10 */\n+  background-image: -o-linear-gradient(top, #ffffff 0%, #eee 65%, #f9f9f9 100%);\n+  /* Opera 11.10+ */\n+  background-image: linear-gradient(to bottom, #ffffff 0%, #eee 65%, #f9f9f9 100%);\n+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr=\'#ffffff\', EndColorStr=\'#f9f9f9\');\n+}\n+div.DTE button.btn:hover,\n+div.DTE div.DTE_Form_Buttons button:hover {\n+  border: 1px solid #666;\n+  -webkit-box-shadow: 1px 1px 3px #999;\n+  -moz-box-shadow: 1px 1px 3px #999;\n+  box-shadow: 1px 1px 3px #999;\n+  background-color: #f4f4f4 100%;\n+  /* Fallback */\n+  background-image: -webkit-linear-gradient(top, #f3f3f3 0%, #dbdbdb 65%, #f4f4f4 100%);\n+  /* Chrome 10+, Saf5.1+, iOS 5+ */\n+  background-image: -moz-linear-gradient(top, #f3f3f3 0%, #dbdbdb 65%, #f4f4f4 100%);\n+  /* FF3.6 */\n+  background-image: -ms-linear-gradient(top, #f3f3f3 0%, #dbdbdb 65%, #f4f4f4 100%);\n+  /* IE10 */\n+  background-image: -o-linear-gradient(top, #f3f3f3 0%, #dbdbdb 65%, #f4f4f4 100%);\n+  /* Opera 11.10+ */\n+  background-image: linear-gradient(to bottom, #f3f3f3 0%, #dbdbdb 65%, #f4f4f4 100%);\n+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr=\'#f3f3f3\', EndColorStr=\'#f4f4f4\');\n+}\n+div.DTE button.btn:active,\n+div.DTE div.DTE_Form_Buttons button:active {\n+  -webkit-box-shadow: inset 1px 1px 3px #999;\n+  -moz-box-shadow: inset 1px 1px 3px #999;\n+  box-shadow: inset 1px 1px 3px #999;\n+}\n+div.DTE button.btn:focus,\n+div.DTE div.DTE_Form_Buttons button:focus {\n+  border: 1px solid #426c9e;\n+  text-shadow: 0 1px 0 #c4def1;\n+  background-color: #a3d0ef 100%;\n+  /* Fallback */\n+  background-image: -webkit-linear-gradient(top, #a3d0ef 0%, #79ace9 65%, #a3d0ef 100%);\n+  /* Chrome 10+, Saf5.1+, iOS 5+ */\n+  background-image: -moz-linear-gradient(top, #a3d0ef 0%, #79ace9 65%, #a3d0ef 100%);\n+  /* FF3.6 */\n+  background-image: -ms-linear-gradient(top, #a3d0ef 0%, #79ace9 65%, #a3d0ef 100%);\n+ '..b'editor-datetime table td.day.today {\n+  background-color: #ddd;\n+}\n+div.editor-datetime table td.day.today button {\n+  font-weight: bold;\n+}\n+div.editor-datetime table td.day.selected button {\n+  background: #4E6CA3;\n+  color: white;\n+  border-radius: 2px;\n+}\n+div.editor-datetime table td.day button:hover {\n+  background: #ff8000;\n+  color: white;\n+  border-radius: 2px;\n+}\n+div.editor-datetime table td.editor-datetime-week {\n+  font-size: 0.7em;\n+}\n+div.editor-datetime table button {\n+  width: 100%;\n+  box-sizing: border-box;\n+  border: none;\n+  background: transparent;\n+  font-size: inherit;\n+  color: inherit;\n+  text-align: inherit;\n+  padding: 5px 9px;\n+  cursor: pointer;\n+  margin: 0;\n+}\n+div.editor-datetime table.weekNumber th {\n+  width: 12.5%;\n+}\n+div.editor-datetime div.editor-datetime-label {\n+  position: relative;\n+  display: inline-block;\n+  height: 30px;\n+  padding: 5px 6px;\n+  border: 1px solid transparent;\n+  box-sizing: border-box;\n+  cursor: pointer;\n+}\n+div.editor-datetime div.editor-datetime-label:hover {\n+  border: 1px solid #ddd;\n+  border-radius: 2px;\n+  background-color: #f5f5f5;\n+}\n+div.editor-datetime div.editor-datetime-label select {\n+  position: absolute;\n+  top: 6px;\n+  left: 0;\n+  cursor: pointer;\n+  opacity: 0;\n+  -ms-filter: "alpha(opacity=0)";\n+}\n+div.editor-datetime div.editor-datetime-time {\n+  text-align: center;\n+}\n+div.editor-datetime div.editor-datetime-time > span {\n+  vertical-align: middle;\n+}\n+div.editor-datetime div.editor-datetime-time div.editor-datetime-timeblock {\n+  display: inline-block;\n+  vertical-align: middle;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft,\n+div.editor-datetime div.editor-datetime-iconRight,\n+div.editor-datetime div.editor-datetime-iconUp,\n+div.editor-datetime div.editor-datetime-iconDown {\n+  width: 30px;\n+  height: 30px;\n+  background-position: center;\n+  background-repeat: no-repeat;\n+  opacity: 0.3;\n+  overflow: hidden;\n+  box-sizing: border-box;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft:hover,\n+div.editor-datetime div.editor-datetime-iconRight:hover,\n+div.editor-datetime div.editor-datetime-iconUp:hover,\n+div.editor-datetime div.editor-datetime-iconDown:hover {\n+  border: 1px solid #ccc;\n+  border-radius: 2px;\n+  background-color: #f0f0f0;\n+  opacity: 0.6;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft button,\n+div.editor-datetime div.editor-datetime-iconRight button,\n+div.editor-datetime div.editor-datetime-iconUp button,\n+div.editor-datetime div.editor-datetime-iconDown button {\n+  border: none;\n+  background: transparent;\n+  text-indent: 30px;\n+  height: 100%;\n+  width: 100%;\n+  cursor: pointer;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft {\n+  position: absolute;\n+  top: 5px;\n+  left: 5px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==");\n+}\n+div.editor-datetime div.editor-datetime-iconRight {\n+  position: absolute;\n+  top: 5px;\n+  right: 5px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=");\n+}\n+div.editor-datetime div.editor-datetime-iconUp {\n+  height: 20px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAL0lEQVR4AWOgJmBhxCvLyopHnpmVjY2VCadeoCxIHrcsWJ4RlyxCHlMWCTBRJxwAjrIBDMWSiM0AAAAASUVORK5CYII=");\n+}\n+div.editor-datetime div.editor-datetime-iconDown {\n+  height: 20px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAMElEQVR4AWOgDmBiRQIsmPKMrGxQgJDFlEfIYpoPk8Utz8qM232MYFfhkQfKUg8AANefAQxecJ58AAAAAElFTkSuQmCC");\n+}\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/css/editor.dataTables.min.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/editor.dataTables.min.css Wed Jul 29 17:03:53 2020 -0400
b
b'@@ -0,0 +1,1 @@\n+div.DTE{position:relative}div.DTE div.DTE_Processing_Indicator{position:absolute;top:10px;right:13px;height:32px;width:32px;background:url("../images/ajax-loader.gif") no-repeat top left;display:none;z-index:20}div.DTE div.DTE_Header{position:absolute;top:0;left:0;height:50px;width:100%;background-color:#f3f3f3;border-bottom:1px solid #ddd;padding:16px 10px 2px 16px;font-size:1.3em;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}div.DTE div.DTE_Footer{position:absolute;bottom:0;left:0;height:50px;width:100%;background-color:#f3f3f3;border-top:1px solid #ddd;padding:10px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}div.DTE div.DTE_Form_Info{margin-bottom:0.5em;display:none}div.DTE div.DTE_Form_Content{position:relative;padding:10px}div.DTE div.DTE_Form_Error{float:left;padding:5px;display:none;color:#b11f1f}div.DTE button.btn,div.DTE div.DTE_Form_Buttons button{position:relative;text-align:center;display:block;margin-top:0;padding:5px 15px;cursor:pointer;float:right;margin-left:0.75em;font-size:14px;text-shadow:0 1px 0 white;border:1px solid #999;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;-webkit-box-shadow:1px 1px 3px #ccc;-moz-box-shadow:1px 1px 3px #ccc;box-shadow:1px 1px 3px #ccc;background-color:#f9f9f9 100%;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 65%, #f9f9f9 100%);background-image:-moz-linear-gradient(top, #fff 0%, #eee 65%, #f9f9f9 100%);background-image:-ms-linear-gradient(top, #fff 0%, #eee 65%, #f9f9f9 100%);background-image:-o-linear-gradient(top, #fff 0%, #eee 65%, #f9f9f9 100%);background-image:linear-gradient(to bottom, #fff 0%, #eee 65%, #f9f9f9 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr=\'#ffffff\', EndColorStr=\'#f9f9f9\')}div.DTE button.btn:hover,div.DTE div.DTE_Form_Buttons button:hover{border:1px solid #666;-webkit-box-shadow:1px 1px 3px #999;-moz-box-shadow:1px 1px 3px #999;box-shadow:1px 1px 3px #999;background-color:#f4f4f4 100%;background-image:-webkit-linear-gradient(top, #f3f3f3 0%, #dbdbdb 65%, #f4f4f4 100%);background-image:-moz-linear-gradient(top, #f3f3f3 0%, #dbdbdb 65%, #f4f4f4 100%);background-image:-ms-linear-gradient(top, #f3f3f3 0%, #dbdbdb 65%, #f4f4f4 100%);background-image:-o-linear-gradient(top, #f3f3f3 0%, #dbdbdb 65%, #f4f4f4 100%);background-image:linear-gradient(to bottom, #f3f3f3 0%, #dbdbdb 65%, #f4f4f4 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr=\'#f3f3f3\', EndColorStr=\'#f4f4f4\')}div.DTE button.btn:active,div.DTE div.DTE_Form_Buttons button:active{-webkit-box-shadow:inset 1px 1px 3px #999;-moz-box-shadow:inset 1px 1px 3px #999;box-shadow:inset 1px 1px 3px #999}div.DTE button.btn:focus,div.DTE div.DTE_Form_Buttons button:focus{border:1px solid #426c9e;text-shadow:0 1px 0 #c4def1;background-color:#a3d0ef 100%;background-image:-webkit-linear-gradient(top, #a3d0ef 0%, #79ace9 65%, #a3d0ef 100%);background-image:-moz-linear-gradient(top, #a3d0ef 0%, #79ace9 65%, #a3d0ef 100%);background-image:-ms-linear-gradient(top, #a3d0ef 0%, #79ace9 65%, #a3d0ef 100%);background-image:-o-linear-gradient(top, #a3d0ef 0%, #79ace9 65%, #a3d0ef 100%);background-image:linear-gradient(to bottom, #a3d0ef 0%, #79ace9 65%, #a3d0ef 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr=\'#a3d0ef\', EndColorStr=\'#a3d0ef\');outline:none}div.DTE button.btn:focus:after,div.DTE div.DTE_Form_Buttons button:focus:after{position:absolute;top:0;left:0;right:0;bottom:0;background:white;display:block;content:" ";-webkit-animation-duration:1s;-webkit-animation-name:buttonPulse;-webkit-animation-fill-mode:forwards;-webkit-animation-iteration-count:infinite;-webkit-animation-timing-function:linear;-webkit-animation-direction:alternate;-moz-animation-duration:1s;-moz-animation-name:buttonPulse;-moz-animation-fill-mode:forwards;-moz-animation-iteration-c'..b'div.editor-datetime div.editor-datetime-title{text-align:center;padding:5px 0px 3px}div.editor-datetime table{border-spacing:0;margin:6px 13px}div.editor-datetime table th{font-size:0.8em;color:#777;font-weight:normal;width:14.285714286%;padding:0 0 4px 0;text-align:center}div.editor-datetime table td{font-size:0.9em;color:#444;padding:0}div.editor-datetime table td.day{text-align:right;background:#f5f5f5}div.editor-datetime table td.day.disabled{color:#aaa;background:white}div.editor-datetime table td.day.today{background-color:#ddd}div.editor-datetime table td.day.today button{font-weight:bold}div.editor-datetime table td.day.selected button{background:#4E6CA3;color:white;border-radius:2px}div.editor-datetime table td.day button:hover{background:#ff8000;color:white;border-radius:2px}div.editor-datetime table td.editor-datetime-week{font-size:0.7em}div.editor-datetime table button{width:100%;box-sizing:border-box;border:none;background:transparent;font-size:inherit;color:inherit;text-align:inherit;padding:5px 9px;cursor:pointer;margin:0}div.editor-datetime table.weekNumber th{width:12.5%}div.editor-datetime div.editor-datetime-label{position:relative;display:inline-block;height:30px;padding:5px 6px;border:1px solid transparent;box-sizing:border-box;cursor:pointer}div.editor-datetime div.editor-datetime-label:hover{border:1px solid #ddd;border-radius:2px;background-color:#f5f5f5}div.editor-datetime div.editor-datetime-label select{position:absolute;top:6px;left:0;cursor:pointer;opacity:0;-ms-filter:"alpha(opacity=0)"}div.editor-datetime div.editor-datetime-time{text-align:center}div.editor-datetime div.editor-datetime-time>span{vertical-align:middle}div.editor-datetime div.editor-datetime-time div.editor-datetime-timeblock{display:inline-block;vertical-align:middle}div.editor-datetime div.editor-datetime-iconLeft,div.editor-datetime div.editor-datetime-iconRight,div.editor-datetime div.editor-datetime-iconUp,div.editor-datetime div.editor-datetime-iconDown{width:30px;height:30px;background-position:center;background-repeat:no-repeat;opacity:0.3;overflow:hidden;box-sizing:border-box}div.editor-datetime div.editor-datetime-iconLeft:hover,div.editor-datetime div.editor-datetime-iconRight:hover,div.editor-datetime div.editor-datetime-iconUp:hover,div.editor-datetime div.editor-datetime-iconDown:hover{border:1px solid #ccc;border-radius:2px;background-color:#f0f0f0;opacity:0.6}div.editor-datetime div.editor-datetime-iconLeft button,div.editor-datetime div.editor-datetime-iconRight button,div.editor-datetime div.editor-datetime-iconUp button,div.editor-datetime div.editor-datetime-iconDown button{border:none;background:transparent;text-indent:30px;height:100%;width:100%;cursor:pointer}div.editor-datetime div.editor-datetime-iconLeft{position:absolute;top:5px;left:5px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==")}div.editor-datetime div.editor-datetime-iconRight{position:absolute;top:5px;right:5px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=")}div.editor-datetime div.editor-datetime-iconUp{height:20px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAL0lEQVR4AWOgJmBhxCvLyopHnpmVjY2VCadeoCxIHrcsWJ4RlyxCHlMWCTBRJxwAjrIBDMWSiM0AAAAASUVORK5CYII=")}div.editor-datetime div.editor-datetime-iconDown{height:20px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAMElEQVR4AWOgDmBiRQIsmPKMrGxQgJDFlEfIYpoPk8Utz8qM232MYFfhkQfKUg8AANefAQxecJ58AAAAAElFTkSuQmCC")}\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/css/editor.foundation.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/editor.foundation.css Wed Jul 29 17:03:53 2020 -0400
[
b'@@ -0,0 +1,612 @@\n+div.DTE div.DTE_Form_Error {\n+  display: none;\n+  color: #b11f1f;\n+}\n+\n+div.DTE_Field div.multi-value,\n+div.DTE_Field div.multi-restore {\n+  display: none;\n+  cursor: pointer;\n+  padding: 0.75rem;\n+}\n+div.DTE_Field div.multi-value span,\n+div.DTE_Field div.multi-restore span {\n+  display: block;\n+  color: #666;\n+  font-size: 0.8em;\n+  line-height: 1.25em;\n+}\n+div.DTE_Field div.multi-value:hover,\n+div.DTE_Field div.multi-restore:hover {\n+  background-color: #e5e5e5;\n+}\n+div.DTE_Field div.multi-restore {\n+  margin-top: 0.5em;\n+  font-size: 0.8em;\n+  line-height: 1.25em;\n+  padding: 0.5rem 0.75rem;\n+}\n+div.DTE_Field div.label {\n+  margin-top: 0.5rem;\n+  margin-bottom: 0.5rem;\n+}\n+div.DTE_Field div.label:empty {\n+  padding: 0;\n+  margin: 0;\n+}\n+div.DTE_Field:after {\n+  display: block;\n+  content: ".";\n+  height: 0;\n+  line-height: 0;\n+  clear: both;\n+  visibility: hidden;\n+}\n+\n+div.reveal-modal button.close {\n+  position: absolute;\n+  top: -1.5em;\n+  right: -2.5em;\n+}\n+div.reveal-modal button.close.close-button {\n+  right: 1rem;\n+  top: .5rem;\n+  z-index: 100;\n+}\n+div.reveal-modal div.DTE_Header {\n+  position: relative;\n+  top: -0.5em;\n+  font-size: 2.05556rem;\n+  line-height: 1.4;\n+}\n+div.reveal-modal div.DTE_Form_Content {\n+  width: 75%;\n+  margin: 0 auto;\n+}\n+div.reveal-modal div.DTE_Footer {\n+  position: relative;\n+  bottom: -0.5em;\n+  float: right;\n+}\n+div.reveal-modal div.DTE_Footer button {\n+  margin-bottom: 0;\n+}\n+\n+div.DTE_Inline {\n+  position: relative;\n+  display: table;\n+  width: 100%;\n+}\n+div.DTE_Inline div.DTE_Inline_Field,\n+div.DTE_Inline div.DTE_Inline_Buttons {\n+  display: table-cell;\n+  vertical-align: middle;\n+}\n+div.DTE_Inline div.DTE_Inline_Field div.DTE_Field,\n+div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field {\n+  padding: 0;\n+}\n+div.DTE_Inline div.DTE_Inline_Field div.DTE_Field > label,\n+div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field > label {\n+  display: none;\n+}\n+div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input,\n+div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input {\n+  width: 100%;\n+}\n+div.DTE_Inline div.DTE_Inline_Field div.DTE_Form_Buttons button,\n+div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Form_Buttons button {\n+  margin: -6px 0 -6px 4px;\n+  padding: 5px;\n+}\n+div.DTE_Inline div.DTE_Field input[type="color"],\n+div.DTE_Inline div.DTE_Field input[type="date"],\n+div.DTE_Inline div.DTE_Field input[type="datetime"],\n+div.DTE_Inline div.DTE_Field input[type="datetime-local"],\n+div.DTE_Inline div.DTE_Field input[type="email"],\n+div.DTE_Inline div.DTE_Field input[type="month"],\n+div.DTE_Inline div.DTE_Field input[type="number"],\n+div.DTE_Inline div.DTE_Field input[type="password"],\n+div.DTE_Inline div.DTE_Field input[type="search"],\n+div.DTE_Inline div.DTE_Field input[type="tel"],\n+div.DTE_Inline div.DTE_Field input[type="text"],\n+div.DTE_Inline div.DTE_Field input[type="time"],\n+div.DTE_Inline div.DTE_Field input[type="url"],\n+div.DTE_Inline div.DTE_Field input[type="week"] {\n+  margin: -6px 0;\n+}\n+div.DTE_Inline.DTE_Processing:after {\n+  position: absolute;\n+  content: \' \';\n+  display: block;\n+  top: 4px;\n+  right: 10px;\n+  height: 12px;\n+  width: 17px;\n+  background: url("../images/ajax-loader-small.gif") no-repeat top left;\n+}\n+\n+span.dtr-data div.DTE_Inline {\n+  display: inline-table;\n+}\n+\n+div.DTE_Inline div.DTE_Field > div {\n+  width: 100%;\n+  padding: 0;\n+}\n+div.DTE_Inline div.DTE_Field input {\n+  height: 30px;\n+  margin-bottom: 0;\n+}\n+div.DTE_Inline div.DTE_Field div.label:empty {\n+  display: none;\n+}\n+\n+div.DTE_Bubble {\n+  position: absolute;\n+  z-index: 11;\n+  margin-top: -6px;\n+  opacity: 0;\n+}\n+div.DTE_Bubble div.DTE_Bubble_Liner {\n+  position: absolute;\n+  bottom: 0;\n+  border: 1px solid black;\n+  width: 300px;\n+  margin-left: -150px;\n+  background-color: white;\n+  box-shadow: 2px 2px 7px #555;\n+  border-radius: 5px;\n+  border: 2px solid #444;\n+  padding: 1em;\n+  -webkit-box-sizing: border-box;\n+  -moz-box-sizing: border-box;\n+  box-sizing: border-box;\n+}\n'..b'editor-datetime table td.day.today {\n+  background-color: #ddd;\n+}\n+div.editor-datetime table td.day.today button {\n+  font-weight: bold;\n+}\n+div.editor-datetime table td.day.selected button {\n+  background: #008CBA;\n+  color: white;\n+  border-radius: 2px;\n+}\n+div.editor-datetime table td.day button:hover {\n+  background: #ff8000;\n+  color: white;\n+  border-radius: 2px;\n+}\n+div.editor-datetime table td.editor-datetime-week {\n+  font-size: 0.7em;\n+}\n+div.editor-datetime table button {\n+  width: 100%;\n+  box-sizing: border-box;\n+  border: none;\n+  background: transparent;\n+  font-size: inherit;\n+  color: inherit;\n+  text-align: inherit;\n+  padding: 5px 9px;\n+  cursor: pointer;\n+  margin: 0;\n+}\n+div.editor-datetime table.weekNumber th {\n+  width: 12.5%;\n+}\n+div.editor-datetime div.editor-datetime-label {\n+  position: relative;\n+  display: inline-block;\n+  height: 30px;\n+  padding: 5px 6px;\n+  border: 1px solid transparent;\n+  box-sizing: border-box;\n+  cursor: pointer;\n+}\n+div.editor-datetime div.editor-datetime-label:hover {\n+  border: 1px solid #ddd;\n+  border-radius: 2px;\n+  background-color: #f5f5f5;\n+}\n+div.editor-datetime div.editor-datetime-label select {\n+  position: absolute;\n+  top: 6px;\n+  left: 0;\n+  cursor: pointer;\n+  opacity: 0;\n+  -ms-filter: "alpha(opacity=0)";\n+}\n+div.editor-datetime div.editor-datetime-time {\n+  text-align: center;\n+}\n+div.editor-datetime div.editor-datetime-time > span {\n+  vertical-align: middle;\n+}\n+div.editor-datetime div.editor-datetime-time div.editor-datetime-timeblock {\n+  display: inline-block;\n+  vertical-align: middle;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft,\n+div.editor-datetime div.editor-datetime-iconRight,\n+div.editor-datetime div.editor-datetime-iconUp,\n+div.editor-datetime div.editor-datetime-iconDown {\n+  width: 30px;\n+  height: 30px;\n+  background-position: center;\n+  background-repeat: no-repeat;\n+  opacity: 0.3;\n+  overflow: hidden;\n+  box-sizing: border-box;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft:hover,\n+div.editor-datetime div.editor-datetime-iconRight:hover,\n+div.editor-datetime div.editor-datetime-iconUp:hover,\n+div.editor-datetime div.editor-datetime-iconDown:hover {\n+  border: 1px solid #ccc;\n+  border-radius: 2px;\n+  background-color: #f0f0f0;\n+  opacity: 0.6;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft button,\n+div.editor-datetime div.editor-datetime-iconRight button,\n+div.editor-datetime div.editor-datetime-iconUp button,\n+div.editor-datetime div.editor-datetime-iconDown button {\n+  border: none;\n+  background: transparent;\n+  text-indent: 30px;\n+  height: 100%;\n+  width: 100%;\n+  cursor: pointer;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft {\n+  position: absolute;\n+  top: 5px;\n+  left: 5px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==");\n+}\n+div.editor-datetime div.editor-datetime-iconRight {\n+  position: absolute;\n+  top: 5px;\n+  right: 5px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=");\n+}\n+div.editor-datetime div.editor-datetime-iconUp {\n+  height: 20px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAL0lEQVR4AWOgJmBhxCvLyopHnpmVjY2VCadeoCxIHrcsWJ4RlyxCHlMWCTBRJxwAjrIBDMWSiM0AAAAASUVORK5CYII=");\n+}\n+div.editor-datetime div.editor-datetime-iconDown {\n+  height: 20px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAMElEQVR4AWOgDmBiRQIsmPKMrGxQgJDFlEfIYpoPk8Utz8qM232MYFfhkQfKUg8AANefAQxecJ58AAAAAElFTkSuQmCC");\n+}\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/css/editor.foundation.min.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/editor.foundation.min.css Wed Jul 29 17:03:53 2020 -0400
[
b'@@ -0,0 +1,1 @@\n+div.DTE div.DTE_Form_Error{display:none;color:#b11f1f}div.DTE_Field div.multi-value,div.DTE_Field div.multi-restore{display:none;cursor:pointer;padding:0.75rem}div.DTE_Field div.multi-value span,div.DTE_Field div.multi-restore span{display:block;color:#666;font-size:0.8em;line-height:1.25em}div.DTE_Field div.multi-value:hover,div.DTE_Field div.multi-restore:hover{background-color:#e5e5e5}div.DTE_Field div.multi-restore{margin-top:0.5em;font-size:0.8em;line-height:1.25em;padding:0.5rem 0.75rem}div.DTE_Field div.label{margin-top:0.5rem;margin-bottom:0.5rem}div.DTE_Field div.label:empty{padding:0;margin:0}div.DTE_Field:after{display:block;content:".";height:0;line-height:0;clear:both;visibility:hidden}div.reveal-modal button.close{position:absolute;top:-1.5em;right:-2.5em}div.reveal-modal button.close.close-button{right:1rem;top:.5rem;z-index:100}div.reveal-modal div.DTE_Header{position:relative;top:-0.5em;font-size:2.05556rem;line-height:1.4}div.reveal-modal div.DTE_Form_Content{width:75%;margin:0 auto}div.reveal-modal div.DTE_Footer{position:relative;bottom:-0.5em;float:right}div.reveal-modal div.DTE_Footer button{margin-bottom:0}div.DTE_Inline{position:relative;display:table;width:100%}div.DTE_Inline div.DTE_Inline_Field,div.DTE_Inline div.DTE_Inline_Buttons{display:table-cell;vertical-align:middle}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field{padding:0}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field>label,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field>label{display:none}div.DTE_Inline div.DTE_Inline_Field div.DTE_Field input,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Field input{width:100%}div.DTE_Inline div.DTE_Inline_Field div.DTE_Form_Buttons button,div.DTE_Inline div.DTE_Inline_Buttons div.DTE_Form_Buttons button{margin:-6px 0 -6px 4px;padding:5px}div.DTE_Inline div.DTE_Field input[type="color"],div.DTE_Inline div.DTE_Field input[type="date"],div.DTE_Inline div.DTE_Field input[type="datetime"],div.DTE_Inline div.DTE_Field input[type="datetime-local"],div.DTE_Inline div.DTE_Field input[type="email"],div.DTE_Inline div.DTE_Field input[type="month"],div.DTE_Inline div.DTE_Field input[type="number"],div.DTE_Inline div.DTE_Field input[type="password"],div.DTE_Inline div.DTE_Field input[type="search"],div.DTE_Inline div.DTE_Field input[type="tel"],div.DTE_Inline div.DTE_Field input[type="text"],div.DTE_Inline div.DTE_Field input[type="time"],div.DTE_Inline div.DTE_Field input[type="url"],div.DTE_Inline div.DTE_Field input[type="week"]{margin:-6px 0}div.DTE_Inline.DTE_Processing:after{position:absolute;content:\' \';display:block;top:4px;right:10px;height:12px;width:17px;background:url("../images/ajax-loader-small.gif") no-repeat top left}span.dtr-data div.DTE_Inline{display:inline-table}div.DTE_Inline div.DTE_Field>div{width:100%;padding:0}div.DTE_Inline div.DTE_Field input{height:30px;margin-bottom:0}div.DTE_Inline div.DTE_Field div.label:empty{display:none}div.DTE_Bubble{position:absolute;z-index:11;margin-top:-6px;opacity:0}div.DTE_Bubble div.DTE_Bubble_Liner{position:absolute;bottom:0;border:1px solid black;width:300px;margin-left:-150px;background-color:white;box-shadow:2px 2px 7px #555;border-radius:5px;border:2px solid #444;padding:1em;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table{display:table;width:100%}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form{display:table-cell}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content{padding:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field{position:relative;zoom:1;margin-bottom:0.5em}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table>form div.DTE_Form_Content div.DTE_Field:last-child{margin-bottom:0}div.DTE_Bubble div.DTE_Bubble_Liner div.DTE_Bubble_Table div.DTE_Form_Buttons{display:table-cell;vertical-align:botto'..b'div.editor-datetime div.editor-datetime-title{text-align:center;padding:5px 0px 3px}div.editor-datetime table{border-spacing:0;margin:6px 13px}div.editor-datetime table th{font-size:0.8em;color:#777;font-weight:normal;width:14.285714286%;padding:0 0 4px 0;text-align:center}div.editor-datetime table td{font-size:0.9em;color:#444;padding:0}div.editor-datetime table td.day{text-align:right;background:#f5f5f5}div.editor-datetime table td.day.disabled{color:#aaa;background:white}div.editor-datetime table td.day.today{background-color:#ddd}div.editor-datetime table td.day.today button{font-weight:bold}div.editor-datetime table td.day.selected button{background:#008CBA;color:white;border-radius:2px}div.editor-datetime table td.day button:hover{background:#ff8000;color:white;border-radius:2px}div.editor-datetime table td.editor-datetime-week{font-size:0.7em}div.editor-datetime table button{width:100%;box-sizing:border-box;border:none;background:transparent;font-size:inherit;color:inherit;text-align:inherit;padding:5px 9px;cursor:pointer;margin:0}div.editor-datetime table.weekNumber th{width:12.5%}div.editor-datetime div.editor-datetime-label{position:relative;display:inline-block;height:30px;padding:5px 6px;border:1px solid transparent;box-sizing:border-box;cursor:pointer}div.editor-datetime div.editor-datetime-label:hover{border:1px solid #ddd;border-radius:2px;background-color:#f5f5f5}div.editor-datetime div.editor-datetime-label select{position:absolute;top:6px;left:0;cursor:pointer;opacity:0;-ms-filter:"alpha(opacity=0)"}div.editor-datetime div.editor-datetime-time{text-align:center}div.editor-datetime div.editor-datetime-time>span{vertical-align:middle}div.editor-datetime div.editor-datetime-time div.editor-datetime-timeblock{display:inline-block;vertical-align:middle}div.editor-datetime div.editor-datetime-iconLeft,div.editor-datetime div.editor-datetime-iconRight,div.editor-datetime div.editor-datetime-iconUp,div.editor-datetime div.editor-datetime-iconDown{width:30px;height:30px;background-position:center;background-repeat:no-repeat;opacity:0.3;overflow:hidden;box-sizing:border-box}div.editor-datetime div.editor-datetime-iconLeft:hover,div.editor-datetime div.editor-datetime-iconRight:hover,div.editor-datetime div.editor-datetime-iconUp:hover,div.editor-datetime div.editor-datetime-iconDown:hover{border:1px solid #ccc;border-radius:2px;background-color:#f0f0f0;opacity:0.6}div.editor-datetime div.editor-datetime-iconLeft button,div.editor-datetime div.editor-datetime-iconRight button,div.editor-datetime div.editor-datetime-iconUp button,div.editor-datetime div.editor-datetime-iconDown button{border:none;background:transparent;text-indent:30px;height:100%;width:100%;cursor:pointer}div.editor-datetime div.editor-datetime-iconLeft{position:absolute;top:5px;left:5px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==")}div.editor-datetime div.editor-datetime-iconRight{position:absolute;top:5px;right:5px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=")}div.editor-datetime div.editor-datetime-iconUp{height:20px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAL0lEQVR4AWOgJmBhxCvLyopHnpmVjY2VCadeoCxIHrcsWJ4RlyxCHlMWCTBRJxwAjrIBDMWSiM0AAAAASUVORK5CYII=")}div.editor-datetime div.editor-datetime-iconDown{height:20px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAMElEQVR4AWOgDmBiRQIsmPKMrGxQgJDFlEfIYpoPk8Utz8qM232MYFfhkQfKUg8AANefAQxecJ58AAAAAElFTkSuQmCC")}\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/css/editor.jqueryui.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/editor.jqueryui.css Wed Jul 29 17:03:53 2020 -0400
[
b'@@ -0,0 +1,801 @@\n+div.DTE_Field input,\n+div.DTE_Field textarea {\n+  box-sizing: border-box;\n+  background-color: white;\n+  -webkit-transition: background-color ease-in-out .15s;\n+  transition: background-color ease-in-out .15s;\n+}\n+div.DTE_Field input:focus,\n+div.DTE_Field textarea:focus {\n+  background-color: #ffffee;\n+}\n+div.DTE_Field input[type="color"],\n+div.DTE_Field input[type="date"],\n+div.DTE_Field input[type="datetime"],\n+div.DTE_Field input[type="datetime-local"],\n+div.DTE_Field input[type="email"],\n+div.DTE_Field input[type="month"],\n+div.DTE_Field input[type="number"],\n+div.DTE_Field input[type="password"],\n+div.DTE_Field input[type="search"],\n+div.DTE_Field input[type="tel"],\n+div.DTE_Field input[type="text"],\n+div.DTE_Field input[type="time"],\n+div.DTE_Field input[type="url"],\n+div.DTE_Field input[type="week"] {\n+  padding: 6px 4px;\n+  width: 100%;\n+}\n+div.DTE_Field div.DTE_Field_Info,\n+div.DTE_Field div.DTE_Field_Message {\n+  font-size: 11px;\n+  line-height: 1em;\n+}\n+div.DTE_Field div.DTE_Field_Error {\n+  font-size: 11px;\n+  line-height: 1em;\n+  display: none;\n+  color: red;\n+  margin-top: 5px;\n+}\n+div.DTE_Field div.multi-value {\n+  display: none;\n+  border: 1px dotted #666;\n+  border-radius: 3px;\n+  padding: 5px;\n+  background-color: #fafafa;\n+  cursor: pointer;\n+}\n+div.DTE_Field div.multi-value span {\n+  font-size: 0.8em;\n+  line-height: 1.25em;\n+  display: block;\n+  color: #666;\n+}\n+div.DTE_Field div.multi-value:hover {\n+  background-color: #f1f1f1;\n+}\n+div.DTE_Field div.multi-restore {\n+  display: none;\n+  margin-top: 0.5em;\n+  font-size: 0.8em;\n+  line-height: 1.25em;\n+  color: #3879d9;\n+}\n+div.DTE_Field div.multi-restore:hover {\n+  text-decoration: underline;\n+  cursor: pointer;\n+}\n+\n+div.DTE_Field_Type_textarea textarea {\n+  padding: 3px;\n+  width: 100%;\n+  height: 80px;\n+}\n+\n+div.DTE_Field.DTE_Field_Type_date img {\n+  vertical-align: middle;\n+  cursor: pointer;\n+  *cursor: hand;\n+}\n+div.DTE_Field.DTE_Field_Type_date input.jqueryui {\n+  width: 87%;\n+  margin-right: 6px;\n+}\n+\n+div.DTE_Field_Type_checkbox div.DTE_Field_Input > div > div,\n+div.DTE_Field_Type_radio div.DTE_Field_Input > div > div {\n+  margin-bottom: 0.25em;\n+}\n+div.DTE_Field_Type_checkbox div.DTE_Field_Input > div > div:last-child,\n+div.DTE_Field_Type_radio div.DTE_Field_Input > div > div:last-child {\n+  margin-bottom: 0;\n+}\n+div.DTE_Field_Type_checkbox div.DTE_Field_Input > div > div label,\n+div.DTE_Field_Type_radio div.DTE_Field_Input > div > div label {\n+  margin-left: 0.75em;\n+  vertical-align: middle;\n+}\n+\n+div.DTE_Field_Type_select div.DTE_Field_Input {\n+  padding-top: 4px;\n+}\n+\n+div.DTE_Body {\n+  padding: 50px 0;\n+}\n+div.DTE_Body div.DTE_Body_Content {\n+  position: relative;\n+  overflow: auto;\n+}\n+div.DTE_Body div.DTE_Body_Content div.DTE_Form_Info {\n+  padding: 1em 1em 0 1em;\n+  margin: 0;\n+}\n+div.DTE_Body div.DTE_Body_Content div.DTE_Field {\n+  position: relative;\n+  zoom: 1;\n+  clear: both;\n+  padding: 5px 20%;\n+  border: 1px solid transparent;\n+}\n+div.DTE_Body div.DTE_Body_Content div.DTE_Field:after {\n+  display: block;\n+  content: ".";\n+  height: 0;\n+  line-height: 0;\n+  clear: both;\n+  visibility: hidden;\n+}\n+div.DTE_Body div.DTE_Body_Content div.DTE_Field:hover {\n+  background-color: #f9f9f9;\n+  border: 1px solid #f3f3f3;\n+}\n+div.DTE_Body div.DTE_Body_Content div.DTE_Field > label {\n+  float: left;\n+  width: 40%;\n+  padding-top: 6px;\n+}\n+div.DTE_Body div.DTE_Body_Content div.DTE_Field > div.DTE_Field_Input {\n+  float: right;\n+  width: 60%;\n+}\n+div.DTE_Body div.DTE_Body_Content div.DTE_Field.full {\n+  padding: 5px 0 5px 20%;\n+}\n+div.DTE_Body div.DTE_Body_Content div.DTE_Field.full > label {\n+  width: 30%;\n+}\n+div.DTE_Body div.DTE_Body_Content div.DTE_Field.full > div.DTE_Field_Input {\n+  width: 70%;\n+}\n+div.DTE_Body div.DTE_Body_Content div.DTE_Field.block > div.DTE_Field_Input {\n+  float: none;\n+  clear: both;\n+  width: 100%;\n+}\n+\n+html[dir="rtl"] div.DTE_Body div.DTE_Body_Content div.DTE_Field > label {\n+  float: right;\n+}\n+'..b' font-size: 0.7em;\n+}\n+div.editor-datetime table button {\n+  width: 100%;\n+  box-sizing: border-box;\n+  border: none;\n+  background: transparent;\n+  font-size: inherit;\n+  color: inherit;\n+  text-align: inherit;\n+  padding: 5px 9px;\n+  cursor: pointer;\n+  margin: 0;\n+}\n+div.editor-datetime table.weekNumber th {\n+  width: 12.5%;\n+}\n+div.editor-datetime div.editor-datetime-label {\n+  position: relative;\n+  display: inline-block;\n+  height: 30px;\n+  padding: 5px 6px;\n+  border: 1px solid transparent;\n+  box-sizing: border-box;\n+  cursor: pointer;\n+}\n+div.editor-datetime div.editor-datetime-label:hover {\n+  border: 1px solid #ddd;\n+  border-radius: 2px;\n+  background-color: #f5f5f5;\n+}\n+div.editor-datetime div.editor-datetime-label select {\n+  position: absolute;\n+  top: 6px;\n+  left: 0;\n+  cursor: pointer;\n+  opacity: 0;\n+  -ms-filter: "alpha(opacity=0)";\n+}\n+div.editor-datetime div.editor-datetime-time {\n+  text-align: center;\n+}\n+div.editor-datetime div.editor-datetime-time > span {\n+  vertical-align: middle;\n+}\n+div.editor-datetime div.editor-datetime-time div.editor-datetime-timeblock {\n+  display: inline-block;\n+  vertical-align: middle;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft,\n+div.editor-datetime div.editor-datetime-iconRight,\n+div.editor-datetime div.editor-datetime-iconUp,\n+div.editor-datetime div.editor-datetime-iconDown {\n+  width: 30px;\n+  height: 30px;\n+  background-position: center;\n+  background-repeat: no-repeat;\n+  opacity: 0.3;\n+  overflow: hidden;\n+  box-sizing: border-box;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft:hover,\n+div.editor-datetime div.editor-datetime-iconRight:hover,\n+div.editor-datetime div.editor-datetime-iconUp:hover,\n+div.editor-datetime div.editor-datetime-iconDown:hover {\n+  border: 1px solid #ccc;\n+  border-radius: 2px;\n+  background-color: #f0f0f0;\n+  opacity: 0.6;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft button,\n+div.editor-datetime div.editor-datetime-iconRight button,\n+div.editor-datetime div.editor-datetime-iconUp button,\n+div.editor-datetime div.editor-datetime-iconDown button {\n+  border: none;\n+  background: transparent;\n+  text-indent: 30px;\n+  height: 100%;\n+  width: 100%;\n+  cursor: pointer;\n+}\n+div.editor-datetime div.editor-datetime-iconLeft {\n+  position: absolute;\n+  top: 5px;\n+  left: 5px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==");\n+}\n+div.editor-datetime div.editor-datetime-iconRight {\n+  position: absolute;\n+  top: 5px;\n+  right: 5px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=");\n+}\n+div.editor-datetime div.editor-datetime-iconUp {\n+  height: 20px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAL0lEQVR4AWOgJmBhxCvLyopHnpmVjY2VCadeoCxIHrcsWJ4RlyxCHlMWCTBRJxwAjrIBDMWSiM0AAAAASUVORK5CYII=");\n+}\n+div.editor-datetime div.editor-datetime-iconDown {\n+  height: 20px;\n+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAMElEQVR4AWOgDmBiRQIsmPKMrGxQgJDFlEfIYpoPk8Utz8qM232MYFfhkQfKUg8AANefAQxecJ58AAAAAElFTkSuQmCC");\n+}\n+\n+div.DTE {\n+  font-size: 0.91em;\n+}\n+div.DTE div.DTE_Header {\n+  display: none;\n+}\n+div.DTE div.DTE_Body {\n+  padding: 0;\n+}\n+div.DTE div.DTE_Body div.DTE_Body_Content {\n+  overflow: hidden;\n+}\n+div.DTE div.DTE_Body div.DTE_Body_Content div.DTE_Field {\n+  padding: 5px 5%;\n+}\n+div.DTE div.DTE_Footer {\n+  display: none;\n+}\n+div.DTE div.DTE_Form_Error {\n+  padding-top: 1em;\n+  color: red;\n+  display: none;\n+  color: #b11f1f;\n+}\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/css/editor.jqueryui.min.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/editor.jqueryui.min.css Wed Jul 29 17:03:53 2020 -0400
[
b'@@ -0,0 +1,1 @@\n+div.DTE_Field input,div.DTE_Field textarea{box-sizing:border-box;background-color:white;-webkit-transition:background-color ease-in-out .15s;transition:background-color ease-in-out .15s}div.DTE_Field input:focus,div.DTE_Field textarea:focus{background-color:#ffffee}div.DTE_Field input[type="color"],div.DTE_Field input[type="date"],div.DTE_Field input[type="datetime"],div.DTE_Field input[type="datetime-local"],div.DTE_Field input[type="email"],div.DTE_Field input[type="month"],div.DTE_Field input[type="number"],div.DTE_Field input[type="password"],div.DTE_Field input[type="search"],div.DTE_Field input[type="tel"],div.DTE_Field input[type="text"],div.DTE_Field input[type="time"],div.DTE_Field input[type="url"],div.DTE_Field input[type="week"]{padding:6px 4px;width:100%}div.DTE_Field div.DTE_Field_Info,div.DTE_Field div.DTE_Field_Message{font-size:11px;line-height:1em}div.DTE_Field div.DTE_Field_Error{font-size:11px;line-height:1em;display:none;color:red;margin-top:5px}div.DTE_Field div.multi-value{display:none;border:1px dotted #666;border-radius:3px;padding:5px;background-color:#fafafa;cursor:pointer}div.DTE_Field div.multi-value span{font-size:0.8em;line-height:1.25em;display:block;color:#666}div.DTE_Field div.multi-value:hover{background-color:#f1f1f1}div.DTE_Field div.multi-restore{display:none;margin-top:0.5em;font-size:0.8em;line-height:1.25em;color:#3879d9}div.DTE_Field div.multi-restore:hover{text-decoration:underline;cursor:pointer}div.DTE_Field_Type_textarea textarea{padding:3px;width:100%;height:80px}div.DTE_Field.DTE_Field_Type_date img{vertical-align:middle;cursor:pointer;*cursor:hand}div.DTE_Field.DTE_Field_Type_date input.jqueryui{width:87%;margin-right:6px}div.DTE_Field_Type_checkbox div.DTE_Field_Input>div>div,div.DTE_Field_Type_radio div.DTE_Field_Input>div>div{margin-bottom:0.25em}div.DTE_Field_Type_checkbox div.DTE_Field_Input>div>div:last-child,div.DTE_Field_Type_radio div.DTE_Field_Input>div>div:last-child{margin-bottom:0}div.DTE_Field_Type_checkbox div.DTE_Field_Input>div>div label,div.DTE_Field_Type_radio div.DTE_Field_Input>div>div label{margin-left:0.75em;vertical-align:middle}div.DTE_Field_Type_select div.DTE_Field_Input{padding-top:4px}div.DTE_Body{padding:50px 0}div.DTE_Body div.DTE_Body_Content{position:relative;overflow:auto}div.DTE_Body div.DTE_Body_Content div.DTE_Form_Info{padding:1em 1em 0 1em;margin:0}div.DTE_Body div.DTE_Body_Content div.DTE_Field{position:relative;zoom:1;clear:both;padding:5px 20%;border:1px solid transparent}div.DTE_Body div.DTE_Body_Content div.DTE_Field:after{display:block;content:".";height:0;line-height:0;clear:both;visibility:hidden}div.DTE_Body div.DTE_Body_Content div.DTE_Field:hover{background-color:#f9f9f9;border:1px solid #f3f3f3}div.DTE_Body div.DTE_Body_Content div.DTE_Field>label{float:left;width:40%;padding-top:6px}div.DTE_Body div.DTE_Body_Content div.DTE_Field>div.DTE_Field_Input{float:right;width:60%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full{padding:5px 0 5px 20%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full>label{width:30%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full>div.DTE_Field_Input{width:70%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.block>div.DTE_Field_Input{float:none;clear:both;width:100%}html[dir="rtl"] div.DTE_Body div.DTE_Body_Content div.DTE_Field>label{float:right}html[dir="rtl"] div.DTE_Body div.DTE_Body_Content div.DTE_Field>div.DTE_Field_Input{float:left}html[dir="rtl"] div.DTE div.DTE_Form_Buttons button{float:left}@media only screen and (max-width: 768px){div.DTE_Body div.DTE_Body_Content div.DTE_Field{padding:5px 10%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full{padding:5px 0 5px 10%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full>label{width:35.5%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.full>div.DTE_Field_Input{width:64.5%}div.DTE_Body div.DTE_Body_Content div.DTE_Field.block>div.DTE_Field_Input{width:100%}}@media only screen and (max-width: 640px){div.DTE_Body div.DTE'..b':0}div.editor-datetime table td.day{text-align:right;background:#f5f5f5}div.editor-datetime table td.day.disabled{color:#aaa;background:white}div.editor-datetime table td.day.today{background-color:#ddd}div.editor-datetime table td.day.today button{font-weight:bold}div.editor-datetime table td.day.selected button{background:#4E6CA3;color:white;border-radius:2px}div.editor-datetime table td.day button:hover{background:#ff8000;color:white;border-radius:2px}div.editor-datetime table td.editor-datetime-week{font-size:0.7em}div.editor-datetime table button{width:100%;box-sizing:border-box;border:none;background:transparent;font-size:inherit;color:inherit;text-align:inherit;padding:5px 9px;cursor:pointer;margin:0}div.editor-datetime table.weekNumber th{width:12.5%}div.editor-datetime div.editor-datetime-label{position:relative;display:inline-block;height:30px;padding:5px 6px;border:1px solid transparent;box-sizing:border-box;cursor:pointer}div.editor-datetime div.editor-datetime-label:hover{border:1px solid #ddd;border-radius:2px;background-color:#f5f5f5}div.editor-datetime div.editor-datetime-label select{position:absolute;top:6px;left:0;cursor:pointer;opacity:0;-ms-filter:"alpha(opacity=0)"}div.editor-datetime div.editor-datetime-time{text-align:center}div.editor-datetime div.editor-datetime-time>span{vertical-align:middle}div.editor-datetime div.editor-datetime-time div.editor-datetime-timeblock{display:inline-block;vertical-align:middle}div.editor-datetime div.editor-datetime-iconLeft,div.editor-datetime div.editor-datetime-iconRight,div.editor-datetime div.editor-datetime-iconUp,div.editor-datetime div.editor-datetime-iconDown{width:30px;height:30px;background-position:center;background-repeat:no-repeat;opacity:0.3;overflow:hidden;box-sizing:border-box}div.editor-datetime div.editor-datetime-iconLeft:hover,div.editor-datetime div.editor-datetime-iconRight:hover,div.editor-datetime div.editor-datetime-iconUp:hover,div.editor-datetime div.editor-datetime-iconDown:hover{border:1px solid #ccc;border-radius:2px;background-color:#f0f0f0;opacity:0.6}div.editor-datetime div.editor-datetime-iconLeft button,div.editor-datetime div.editor-datetime-iconRight button,div.editor-datetime div.editor-datetime-iconUp button,div.editor-datetime div.editor-datetime-iconDown button{border:none;background:transparent;text-indent:30px;height:100%;width:100%;cursor:pointer}div.editor-datetime div.editor-datetime-iconLeft{position:absolute;top:5px;left:5px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==")}div.editor-datetime div.editor-datetime-iconRight{position:absolute;top:5px;right:5px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=")}div.editor-datetime div.editor-datetime-iconUp{height:20px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAL0lEQVR4AWOgJmBhxCvLyopHnpmVjY2VCadeoCxIHrcsWJ4RlyxCHlMWCTBRJxwAjrIBDMWSiM0AAAAASUVORK5CYII=")}div.editor-datetime div.editor-datetime-iconDown{height:20px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAMElEQVR4AWOgDmBiRQIsmPKMrGxQgJDFlEfIYpoPk8Utz8qM232MYFfhkQfKUg8AANefAQxecJ58AAAAAElFTkSuQmCC")}div.DTE{font-size:0.91em}div.DTE div.DTE_Header{display:none}div.DTE div.DTE_Body{padding:0}div.DTE div.DTE_Body div.DTE_Body_Content{overflow:hidden}div.DTE div.DTE_Body div.DTE_Body_Content div.DTE_Field{padding:5px 5%}div.DTE div.DTE_Footer{display:none}div.DTE div.DTE_Form_Error{padding-top:1em;color:red;display:none;color:#b11f1f}\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/css/scss/bubble.scss
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/scss/bubble.scss Wed Jul 29 17:03:53 2020 -0400
b
@@ -0,0 +1,130 @@
+
+// Bubble form editing
+// Very similar to the main form, but attached to a particular node and the
+// form layout is slightly different with the fields container and buttons
+// making up a table of a single row and two columns. This allows the buttons
+// to be removed from the display and under this condition the fields will
+// take up the full width available.
+div.DTE_Bubble {
+ position: absolute;
+ z-index: 11;
+ margin-top: -6px;
+ opacity: 0;
+
+ div.DTE_Bubble_Liner {
+ position: absolute;
+ bottom: 0;
+ border: 1px solid black;
+ width: 300px;
+ margin-left: -150px;
+ background-color: white;
+ box-shadow: 2px 2px 7px #555;
+ border-radius: 5px;
+ border: 2px solid #444;
+ padding: 1em;
+ @include box-sizing(border-box);
+
+ div.DTE_Bubble_Table {
+ display: table;
+ width: 100%;
+
+ > form {
+ display: table-cell;
+
+ div.DTE_Form_Content {
+ padding: 0;
+
+ div.DTE_Field {
+ position: relative;
+ zoom: 1;
+ margin-bottom: 0.5em;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+ }
+ }
+
+ div.DTE_Form_Buttons {
+ display: table-cell;
+ vertical-align: bottom;
+ padding: 0 0 0 0.75em;
+ width: 1%; // browser will resize to a min width
+ }
+ }
+
+ div.DTE_Header {
+ border-top-left-radius: 5px;
+ border-top-right-radius: 5px;
+ }
+
+ div.DTE_Header + div.DTE_Form_Info,
+ div.DTE_Header + div.DTE_Bubble_Table {
+ padding-top: 42px;
+ }
+
+
+ div.DTE_Form_Error {
+ float: none;
+ display: none;
+ padding: 0;
+ margin-bottom: 0.5em;
+ }
+
+ div.DTE_Bubble_Close {
+ @include close-icon();
+ }
+ }
+
+ div.DTE_Bubble_Triangle {
+ position: absolute;
+ height: 10px;
+ width: 10px;
+ top: -6px;
+ background-color: white;
+ border: 2px solid #444;
+ border-top: none;
+ border-right: none;
+
+ -webkit-transform: rotate(-45deg);
+    -moz-transform: rotate(-45deg);
+     -ms-transform: rotate(-45deg);
+      -o-transform: rotate(-45deg);
+         transform: rotate(-45deg);
+ }
+
+ &.DTE_Processing {
+ div.DTE_Bubble_Liner:after {
+ position: absolute;
+ content: ' ';
+ display: block;
+ top: 12px;
+ right: 18px;
+ height: 12px;
+ width: 17px;
+ background: url('../images/ajax-loader-small.gif') no-repeat top left;
+ }
+ }
+
+ &.below {
+ div.DTE_Bubble_Liner {
+ top: 10px;
+ bottom: auto;
+ }
+
+ div.DTE_Bubble_Triangle {
+ top: 4px;
+ -webkit-transform: rotate(135deg);
+    -moz-transform: rotate(135deg);
+     -ms-transform: rotate(135deg);
+      -o-transform: rotate(135deg);
+         transform: rotate(135deg);
+ }
+ }
+}
+
+div.DTE_Bubble_Background {
+ @include overlay-background();
+}
+
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/css/scss/datatable.scss
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/scss/datatable.scss Wed Jul 29 17:03:53 2020 -0400
b
@@ -0,0 +1,93 @@
+
+// Row highlighting on edit styles
+//
+// To change the colour of the highlight, simply modify the variable below and
+// recompile the SCSS stylesheet (if you don't have SASS installed, you can use
+// the online service at http://sassmeister.com/ .
+//
+// The DataTables styles below match the default DataTables stylesheet:
+// http://next.datatables.net/manual/styling/classes so you can retain the full
+// benefits of the DataTables styling options.
+
+$table-row-highlight: #FFFBCC;
+
+table.dataTable {
+ tbody {
+ tr.highlight {
+ background-color: $table-row-highlight !important;
+ }
+
+ tr.highlight,
+ tr.noHighlight,
+ tr.highlight td,
+ tr.noHighlight td {
+ @include background-transision();
+ }
+ }
+
+ &.stripe tbody,
+ &.display tbody {
+ tr.odd {
+ &.highlight {
+ background-color: shade($table-row-highlight, 2.35%);
+ }
+ }
+ }
+
+ // Hover classes - add "hover" class to the table to activate
+ &.hover tbody,
+ &.display tbody {
+ tr:hover,
+ tr.odd:hover,
+ tr.even:hover {
+ &.highlight {
+ background-color: shade($table-row-highlight, 3.6%);
+ }
+ }
+ }
+
+
+ // Sort column highlighting - add "hover" class to the table to activate
+ &.order-column,
+ &.display {
+ tbody {
+ tr.highlight>.sorting_1,
+ tr.highlight>.sorting_2,
+ tr.highlight>.sorting_3 {
+ background-color: shade($table-row-highlight, 2%);
+ }
+ }
+ }
+
+ &.display tbody,
+ &.order-column.stripe tbody {
+ tr.odd {
+ &.highlight {
+ >.sorting_1 { background-color: shade($table-row-highlight, 5.4%);}
+ >.sorting_2 { background-color: shade($table-row-highlight, 4.7%);}
+ >.sorting_3 { background-color: shade($table-row-highlight, 3.9%);}
+ }
+ }
+
+ tr.even {
+ &.highlight {
+ >.sorting_1 { background-color: shade($table-row-highlight, 2%); }
+ >.sorting_2 { background-color: shade($table-row-highlight, 1.2%); }
+ >.sorting_3 { background-color: shade($table-row-highlight, 0.4%); }
+ }
+ }
+ }
+
+ &.display tbody,
+ &.order-column.hover tbody {
+ tr:hover,
+ tr.odd:hover,
+ tr.even:hover {
+ &.highlight {
+ >.sorting_1 { background-color: shade($table-row-highlight, 8.2%); }
+ >.sorting_2 { background-color: shade($table-row-highlight, 7.5%); }
+ >.sorting_3 { background-color: shade($table-row-highlight, 6.3%); }
+ }
+ }
+ }
+}
\ No newline at end of file
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/css/scss/datetime.scss
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/scss/datetime.scss Wed Jul 29 17:03:53 2020 -0400
b
@@ -0,0 +1,184 @@
+
+$editor-datetime-selected: #4E6CA3 !default;
+
+div.editor-datetime {
+ position: absolute;
+ background-color: white;
+ z-index: 2050;
+    border: 1px solid #ccc;
+ box-shadow: 0 5px 15px -5px rgba(0,0,0,.5);
+ padding-bottom: 5px;
+
+ div.editor-datetime-title {
+ text-align: center;
+     padding: 5px 0px 3px;
+ }
+
+ table {
+ border-spacing: 0;
+ margin: 6px 13px;
+
+ th {
+ font-size: 0.8em;
+ color: #777;
+ font-weight: normal;
+ width: 14.285714286%;
+ padding: 0 0 4px 0;
+ text-align: center;
+ }
+
+ td {
+ font-size: 0.9em;
+ color: #444;
+ padding: 0;
+ }
+
+ td.day {
+ text-align: right;
+ background: #f5f5f5;
+
+ &.disabled {
+ color: #aaa;
+ background: white;
+ }
+
+ &.today {
+ background-color: #ddd;
+
+ button {
+ font-weight: bold;
+ }
+ }
+
+ &.selected button {
+ background: $editor-datetime-selected;
+ color: white;
+ border-radius: 2px;
+ }
+
+ button:hover {
+ background: #ff8000;
+ color: white;
+ border-radius: 2px;
+ }
+ }
+
+ td.editor-datetime-week {
+ font-size: 0.7em;
+ }
+
+ button {
+ width: 100%;
+ box-sizing: border-box;
+ border: none;
+ background: transparent;
+ font-size: inherit;
+ color: inherit;
+ text-align: inherit;
+ padding: 5px 9px;
+ cursor: pointer;
+ margin: 0;
+ }
+
+ &.weekNumber th {
+ width: 12.5%;
+ }
+ }
+
+ div.editor-datetime-label {
+ position: relative;
+ display: inline-block;
+ height: 30px;
+ padding: 5px 6px;
+ border: 1px solid transparent;
+ box-sizing: border-box;
+ cursor: pointer;
+
+ &:hover {
+ border: 1px solid #ddd;
+ border-radius: 2px;
+ background-color: #f5f5f5;
+ }
+
+ span {
+
+ }
+
+ select {
+ position: absolute;
+ top: 6px;
+ left: 0;
+ cursor: pointer;
+ opacity: 0;
+ -ms-filter: "alpha(opacity=0)";
+ }
+ }
+
+ div.editor-datetime-time {
+ text-align: center;
+
+ > span {
+ vertical-align: middle;
+ }
+
+ div.editor-datetime-timeblock {
+ display: inline-block;
+ vertical-align: middle;
+ }
+ }
+
+
+ div.editor-datetime-iconLeft,
+ div.editor-datetime-iconRight,
+ div.editor-datetime-iconUp,
+ div.editor-datetime-iconDown {
+ width: 30px;
+ height: 30px;
+ background-position: center;
+ background-repeat: no-repeat;
+ opacity: 0.3;
+ overflow: hidden;
+ box-sizing: border-box;
+
+ &:hover {
+ border: 1px solid #ccc;
+ border-radius: 2px;
+ background-color: #f0f0f0;
+ opacity: 0.6;
+ }
+
+ button {
+ border: none;
+ background: transparent;
+ text-indent: 30px;
+ height: 100%;
+ width: 100%;
+ cursor: pointer;
+ }
+ }
+
+ div.editor-datetime-iconLeft {
+ position: absolute;
+ top: 5px;
+ left: 5px;
+ background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==');
+ }
+
+ div.editor-datetime-iconRight {
+ position: absolute;
+ top: 5px;
+ right: 5px;
+ background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=');
+ }
+
+ div.editor-datetime-iconUp {
+ height: 20px;
+ background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAL0lEQVR4AWOgJmBhxCvLyopHnpmVjY2VCadeoCxIHrcsWJ4RlyxCHlMWCTBRJxwAjrIBDMWSiM0AAAAASUVORK5CYII=');
+ }
+
+ div.editor-datetime-iconDown {
+ height: 20px;
+ background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAALCAMAAABf9c24AAAAFVBMVEX///99fX1+fn57e3t6enoAAAAAAAC73bqPAAAABnRSTlMAYmJkZt92bnysAAAAMElEQVR4AWOgDmBiRQIsmPKMrGxQgJDFlEfIYpoPk8Utz8qM232MYFfhkQfKUg8AANefAQxecJ58AAAAAElFTkSuQmCC');
+ }
+}
+
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/css/scss/envelope.scss
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/scss/envelope.scss Wed Jul 29 17:03:53 2020 -0400
b
@@ -0,0 +1,102 @@
+
+/*
+ * Namespace: DTED - DataTables Editor Display - Envelope
+ */
+
+div.DTED_Envelope_Wrapper {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 50%;
+ height: 100%;
+ z-index: 11;
+ display: none;
+ overflow: hidden;
+
+ // Create a shadow display at the top of the evelope to make it look like it has
+ // come from under the element that it is attached to/ Left and right to give a
+ // slight fade and the two ends
+ div.DTED_Envelope_ShadowLeft {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 50%;
+ height: 9px;
+ background: url('../images/shadow_left.png') no-repeat top left;
+ z-index: 10;
+ }
+
+ div.DTED_Envelope_ShadowRight {
+ position: absolute;
+ top: 0;
+ right: 0;
+ width: 50%;
+ height: 9px;
+ background: url('../images/shadow_right.png') no-repeat top right;
+ z-index: 10;
+ }
+
+
+ div.DTED_Envelope_Container {
+ position: absolute;
+ top: 0;
+ left: 5%;
+ width: 90%;
+
+ border-left: 1px solid #777;
+ border-right: 1px solid #777;
+ border-bottom: 1px solid #777;
+ box-shadow: 3px 3px 10px #555;
+ border-bottom-left-radius: 5px;
+ border-bottom-right-radius: 5px;
+ background-color: white;
+
+ div.DTE_Processing_Indicator {
+ right: 36px;
+ }
+
+ div.DTE_Footer {
+ border-bottom-left-radius: 5px;
+ border-bottom-right-radius: 5px;
+ }
+
+ div.DTED_Envelope_Close {
+ position: absolute;
+ top: 16px;
+ right: 10px;
+ width: 18px;
+ height: 18px;
+ cursor: pointer;
+ *cursor: hand;
+ z-index: 12;
+ text-align: center;
+ font-size: 12px;
+
+ background: #F8F8F8;
+ background: -webkit-gradient(linear, center bottom, center top, from(#CCC), to(white));
+ background: -moz-linear-gradient(top, white, #CCC);
+ background: linear-gradient(to bottom, white, #CCC);
+ text-shadow: 0 1px 0 white;
+ border: 1px solid #999;
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ box-shadow: 0px 0px 1px #999;
+ -moz-box-shadow: 0px 0px 1px #999;
+ -webkit-box-shadow: 0px 0px 1px #999;
+ }
+ }
+}
+
+
+div.DTED_Envelope_Background {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 10;
+ @include radial-gradient( rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.4) );
+}
+
+
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/css/scss/fields.scss
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/scss/fields.scss Wed Jul 29 17:03:53 2020 -0400
[
@@ -0,0 +1,128 @@
+
+
+// Generic field styling
+div.DTE_Field {
+ input,
+ textarea {
+ box-sizing: border-box;
+ background-color: white;
+ -webkit-transition: background-color ease-in-out .15s;
+         transition: background-color ease-in-out .15s;
+ }
+
+ input:focus,
+ textarea:focus {
+ background-color: #ffffee; 
+ }
+
+ input[type="color"],
+ input[type="date"],
+ input[type="datetime"],
+ input[type="datetime-local"],
+ input[type="email"],
+ input[type="month"],
+ input[type="number"],
+ input[type="password"],
+ input[type="search"],
+ input[type="tel"],
+ input[type="text"],
+ input[type="time"],
+ input[type="url"],
+ input[type="week"] {
+ padding: 6px 4px;
+ width: 100%;
+ }
+
+
+ div.DTE_Field_Info,
+ div.DTE_Field_Message {
+ font-size: 11px;
+ line-height: 1em;
+ }
+
+ div.DTE_Field_Error {
+ font-size: 11px;
+ line-height: 1em;
+ display: none;
+ color: red;
+ margin-top: 5px;
+ }
+
+ div.multi-value {
+ display: none;
+ border: 1px dotted #666;
+ border-radius: 3px;
+ padding: 5px;
+ background-color: #fafafa;
+ cursor: pointer;
+
+ span {
+ font-size: 0.8em;
+ line-height: 1.25em;
+ display: block;
+ color: #666;
+ }
+
+ &:hover {
+ background-color: #f1f1f1;
+ }
+ }
+
+ div.multi-restore {
+ display: none;
+ margin-top: 0.5em;
+ font-size: 0.8em;
+ line-height: 1.25em;
+ color: #3879d9;
+
+ &:hover {
+ text-decoration: underline;
+ cursor: pointer;
+ }
+ }
+}
+
+// Specific field type styling
+div.DTE_Field_Type_textarea {
+ textarea {
+ padding: 3px;
+ width: 100%;
+ height: 80px;
+ }
+}
+
+div.DTE_Field.DTE_Field_Type_date {
+ img {
+ vertical-align: middle;
+ cursor: pointer;
+ *cursor: hand;
+ }
+
+ input.jqueryui {
+ width: 87%;
+ margin-right: 6px;
+ }
+}
+
+div.DTE_Field_Type_checkbox,
+div.DTE_Field_Type_radio {
+ div.DTE_Field_Input > div > div {
+ margin-bottom: 0.25em;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+
+ input {
+ }
+
+ label {
+ margin-left: 0.75em;
+ vertical-align: middle;
+ }
+ }
+}
+
+div.DTE_Field_Type_select div.DTE_Field_Input {
+ padding-top: 4px;
+}
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/css/scss/inline.scss
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/scss/inline.scss Wed Jul 29 17:03:53 2020 -0400
[
@@ -0,0 +1,65 @@
+
+// Inline form editing
+// Hide the label and allow the field to take the full width
+div.DTE_Inline {
+ position: relative;
+ display: table;
+ width: 100%;
+
+ div.DTE_Inline_Field,
+ div.DTE_Inline_Buttons {
+ display: table-cell;
+ vertical-align: middle;
+
+ div.DTE_Field {
+ padding: 0;
+
+ >label {
+ display: none;
+ }
+
+ input {
+ width: 100%;
+ }
+ }
+
+ div.DTE_Form_Buttons button {
+ margin: -6px 0 -6px 4px;
+ padding: 5px;
+ }
+ }
+
+ // Have the input types take up full space, taking into account the cell padding
+ div.DTE_Field input[type="color"],
+ div.DTE_Field input[type="date"],
+ div.DTE_Field input[type="datetime"],
+ div.DTE_Field input[type="datetime-local"],
+ div.DTE_Field input[type="email"],
+ div.DTE_Field input[type="month"],
+ div.DTE_Field input[type="number"],
+ div.DTE_Field input[type="password"],
+ div.DTE_Field input[type="search"],
+ div.DTE_Field input[type="tel"],
+ div.DTE_Field input[type="text"],
+ div.DTE_Field input[type="time"],
+ div.DTE_Field input[type="url"],
+ div.DTE_Field input[type="week"] {
+ margin: -6px 0;
+ }
+
+ &.DTE_Processing:after {
+ position: absolute;
+ content: ' ';
+ display: block;
+ top: 4px;
+ right: 10px;
+ height: 12px;
+ width: 17px;
+ background: url('../images/ajax-loader-small.gif') no-repeat top left;
+ }
+}
+
+// Responsive integration
+span.dtr-data div.DTE_Inline {
+ display: inline-table;
+}
\ No newline at end of file
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/css/scss/lightbox.scss
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/scss/lightbox.scss Wed Jul 29 17:03:53 2020 -0400
b
@@ -0,0 +1,147 @@
+
+
+div.DTED_Lightbox_Wrapper {
+ position: fixed;
+ top: 0;
+ left: 50%;
+ margin-left: -390px;
+ width: 780px;
+ height: 100%;
+ z-index: 11;
+
+ div.DTED_Lightbox_Container {
+ *position: absolute; /* IE6 */
+ *top: 50%;
+ #position: absolute; /* IE7 */
+ #top: 50%;
+ display: table;
+ height: 100%;
+ width: 100%;
+
+ div.DTED_Lightbox_Content_Wrapper {
+ *position: relative; /* IE6 */
+ #position: relative; /* IE7 */
+ display: table-cell;
+ vertical-align: middle;
+ width: 100%;
+
+ div.DTED_Lightbox_Content {
+ *top: -50%; /* IE6 */
+ #top: -50%; /* IE7 */
+ position: relative;
+ border: 7px solid rgba(220, 220, 220, 0.5);
+ box-shadow: 2px 2px 10px #555;
+ border-radius: 10px;
+ @include box-sizing(border-box);
+
+ div.DTE {
+ background: white;
+ border-radius: 6px;
+ box-shadow: 0 0 5px #555;
+ border: 2px solid #444;
+ @include box-sizing(border-box);
+
+ div.DTE_Header {
+ top: 2px;
+ left: 2px;
+ right: 2px;
+ width: auto;
+ border-top-left-radius: 5px;
+ border-top-right-radius: 5px;
+ }
+
+ div.DTE_Footer {
+ bottom: 2px;
+ left: 2px;
+ right: 2px;
+ width: auto;
+ border-bottom-left-radius: 5px;
+ border-bottom-right-radius: 5px;
+ }
+ }
+
+ div.DTED_Lightbox_Close {
+ @include close-icon();
+ }
+ }
+ }
+ }
+}
+
+
+div.DTED_Lightbox_Background {
+ @include overlay-background();
+}
+
+
+body.DTED_Lightbox_Mobile {
+ div.DTED_Lightbox_Background {
+ height: 0;
+ }
+
+ div.DTED_Lightbox_Shown {
+ display: none;
+ }
+
+ div.DTED_Lightbox_Wrapper {
+ position: absolute;
+ top: 0px;
+ left: 0px;
+ right: 0px;
+ bottom: 0px;
+ width: auto;
+ height: auto;
+ margin-left: 0;
+ -webkit-overflow-scrolling: touch;
+
+ div.DTED_Lightbox_Container {
+ display: block;
+
+ div.DTED_Lightbox_Content_Wrapper {
+ display: block;
+
+ div.DTED_Lightbox_Content {
+ border: 4px solid rgba(220, 220, 220, 0.5);
+ border-radius: 0;
+
+ div.DTE {
+ border-radius: 0;
+ box-shadow: 0 0 5px #555;
+ border: 2px solid #444;
+
+ div.DTE_Header {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ }
+
+ div.DTE_Footer {
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+ }
+ }
+
+ div.DTED_Lightbox_Close {
+ top: 11px;
+ right: 15px;
+ }
+ }
+ }
+ }
+ }
+}
+
+@media only screen 
+and (max-width: 780px) {
+ div.DTED_Lightbox_Wrapper {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ margin-left: 0;
+ }
+}
+
+
+
+
+
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/css/scss/main.scss
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/scss/main.scss Wed Jul 29 17:03:53 2020 -0400
[
@@ -0,0 +1,188 @@
+
+
+// The main form.
+// Most of the styles for display of the main form come from the display
+// controller (lightbox and envelope are the two built in options).
+div.DTE_Body {
+ padding: 50px 0; // space for hte header and footer which are position: absolute
+
+ div.DTE_Body_Content {
+ position: relative;
+ overflow: auto;
+
+ div.DTE_Form_Info {
+ padding: 1em 1em 0 1em;
+ margin: 0;
+ }
+
+ div.DTE_Field {
+ position: relative;
+ zoom: 1;
+
+ clear: both;
+ padding: 5px 20%;
+ border: 1px solid transparent;
+
+ &:after {
+ display: block;
+ content: ".";
+ height: 0;
+ line-height: 0;
+ clear: both;
+ visibility: hidden;
+ }
+
+ &:hover {
+ background-color: #f9f9f9;
+ border: 1px solid #f3f3f3;
+ }
+
+ >label {
+ float: left;
+ width: 40%;
+ padding-top: 6px;
+ }
+
+ >div.DTE_Field_Input {
+ float: right;
+ width: 60%;
+ }
+
+ // Field in error state
+ &.DTE_Field_StateError { }
+
+ &.full {
+ padding: 5px 0 5px 20%;
+
+ >label {
+ width: 30%;
+ }
+
+ >div.DTE_Field_Input {
+ width: 70%;
+ }
+ }
+
+ &.block {
+ >div.DTE_Field_Input {
+ float: none;
+ clear: both;
+ width: 100%;
+ }
+ }
+ }
+ }
+}
+
+html[dir="rtl"] {
+ div.DTE_Body div.DTE_Body_Content div.DTE_Field {
+ > label {
+ float: right;
+ }
+
+ >div.DTE_Field_Input {
+ float: left;
+ }
+ }
+
+ div.DTE div.DTE_Form_Buttons button {
+ float: left;
+ }
+}
+
+// iPad in portrait 
+@media only screen 
+and (max-width : 768px) {
+ div.DTE_Body {
+ div.DTE_Body_Content {
+ div.DTE_Field {
+ padding: 5px 10%;
+
+ &.full {
+ padding: 5px 0 5px 10%;
+
+ >label {
+ width: 35.5%;
+ }
+
+ >div.DTE_Field_Input {
+ width: 64.5%;
+ }
+ }
+
+ &.block {
+ >div.DTE_Field_Input {
+ width: 100%;
+ }
+ }
+ }
+ }
+ }
+}
+
+@media only screen 
+and (max-width : 640px) {
+ div.DTE_Body {
+ div.DTE_Body_Content {
+ div.DTE_Field {
+ padding: 5px 0;
+
+ &.full {
+ padding: 5px 0%;
+
+ >label {
+ width: 40%;
+ }
+
+ >div.DTE_Field_Input {
+ width: 60%;
+ }
+ }
+
+ &.block {
+ >div.DTE_Field_Input {
+ width: 100%;
+ }
+ }
+ }
+ }
+ }
+}
+
+// For devices with smaller screens, the fields should be shown stacked
+@media only screen 
+and (max-width : 580px) {
+ div.DTE_Body {
+ div.DTE_Body_Content {
+ div.DTE_Field {
+ position: relative;
+ zoom: 1;
+
+ clear: both;
+ padding: 5px 0;
+
+ >label {
+ float: none;
+ width: auto;
+ padding-top: 0;
+ }
+
+ >div.DTE_Field_Input {
+ float: none;
+ width: auto;
+ }
+
+ &.full,
+ &.block {
+ padding: 5px 0;
+
+ >label,
+ >div.DTE_Field_Input {
+ width: 100%;
+ }
+ }
+ }
+ }
+ }
+}
+
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/css/scss/mixins.scss
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/scss/mixins.scss Wed Jul 29 17:03:53 2020 -0400
[
@@ -0,0 +1,176 @@
+
+
+@function tint( $color, $percent ) {
+ @return mix(white, $color, $percent);
+}
+
+@function shade( $color, $percent ) {
+ @return mix(black, $color, $percent);
+}
+
+
+@mixin border-radius ( $radius ) {
+ -webkit-border-radius: $radius;
+    -moz-border-radius: $radius;
+     -ms-border-radius: $radius;
+      -o-border-radius: $radius;
+         border-radius: $radius;
+}
+
+@mixin box-sizing($box-model) {
+  -webkit-box-sizing: $box-model; // Safari <= 5
+     -moz-box-sizing: $box-model; // Firefox <= 19
+          box-sizing: $box-model;
+}
+
+@mixin box-shadow($top, $left, $blur, $color, $inset: false) {
+  @if $inset {
+    -webkit-box-shadow:inset $top $left $blur $color;
+    -moz-box-shadow:inset $top $left $blur $color;
+    box-shadow:inset $top $left $blur $color;
+  } @else {
+    -webkit-box-shadow: $top $left $blur $color;
+    -moz-box-shadow: $top $left $blur $color;
+    box-shadow: $top $left $blur $color;
+  }
+}
+
+@mixin three-stop-gradient($fromColor, $middleColor, $toColor) {
+ background-color: $toColor; /* Fallback */
+ background-image: -webkit-linear-gradient(top, $fromColor, $middleColor, $toColor); /* Chrome 10+, Saf5.1+, iOS 5+ */
+ background-image:    -moz-linear-gradient(top, $fromColor, $middleColor, $toColor); /* FF3.6 */
+ background-image:     -ms-linear-gradient(top, $fromColor, $middleColor, $toColor); /* IE10 */
+ background-image:      -o-linear-gradient(top, $fromColor, $middleColor, $toColor); /* Opera 11.10+ */
+ background-image:         linear-gradient(to bottom, $fromColor, $middleColor, $toColor);
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#{nth( $fromColor, 1 )}', EndColorStr='#{nth( $toColor, 1 )}');
+}
+
+@mixin radial-gradient ($fromColor, $toColor ) {
+ background: $toColor; /* Fallback */
+ background:     -ms-radial-gradient(center, ellipse farthest-corner, $fromColor 0%, $toColor 100%); /* IE10 Consumer Preview */ 
+ background:    -moz-radial-gradient(center, ellipse farthest-corner, $fromColor 0%, $toColor 100%); /* Firefox */ 
+ background:      -o-radial-gradient(center, ellipse farthest-corner, $fromColor 0%, $toColor 100%); /* Opera */ 
+ background: -webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, $fromColor), color-stop(1, $toColor)); /* Webkit (Safari/Chrome 10) */ 
+ background: -webkit-radial-gradient(center, ellipse farthest-corner, $fromColor 0%, $toColor 100%); /* Webkit (Chrome 11+) */ 
+ background: radial-gradient(ellipse farthest-corner at center, $fromColor 0%, $toColor 100%); /* W3C Markup, IE10 Release Preview */ 
+}
+
+@mixin keyframe ($animation_name) {
+    @-webkit-keyframes #{$animation_name} {
+        @content;
+    }

+    @-moz-keyframes #{$animation_name} {
+        @content;
+    }

+    @-o-keyframes #{$animation_name} {
+        @content;
+    }

+    @keyframes #{$animation_name} {
+        @content;
+    }
+}
+
+@mixin animation ($duration, $animation) {
+ -webkit-animation-duration: $duration;
+ -webkit-animation-name: $animation;
+ -webkit-animation-fill-mode: forwards;
+ -webkit-animation-iteration-count: infinite;
+ -webkit-animation-timing-function: linear;
+ -webkit-animation-direction: alternate;
+
+ -moz-animation-duration: $duration;
+ -moz-animation-name: $animation;
+ -moz-animation-fill-mode: forwards;
+ -moz-animation-iteration-count: infinite;
+ -moz-animation-timing-function: linear;
+ -moz-animation-direction: alternate;
+
+ -o-animation-duration: $duration;
+ -o-animation-name: $animation;
+ -o-animation-fill-mode: forwards;
+ -o-animation-iteration-count: infinite;
+ -o-animation-timing-function: linear;
+ -o-animation-direction: alternate;
+
+ animation-duration: $duration;
+ animation-name: $animation;
+ animation-fill-mode: forwards;
+ animation-iteration-count: infinite;
+ animation-timing-function: linear;
+ animation-direction: alternate;
+}
+
+@mixin close-icon () {
+ position: absolute;
+ top: -11px;
+ right: -11px;
+ width: 22px;
+ height: 22px;
+ border: 2px solid white;
+ background-color: black;
+ text-align: center;
+ border-radius: 15px;
+ cursor: pointer;
+ z-index: 12;
+ box-shadow: 2px 2px 6px #111;
+
+ &:after {
+ content: '\00d7';
+ color: white;
+ font-weight: bold;
+ font-size: 18px;
+ line-height: 22px;
+ font-family: 'Courier New', Courier, monospace;
+ padding-left: 1px;
+ }
+
+ &:hover {
+ background-color: #092079;
+ box-shadow: 2px 2px 9px #111;
+ }
+}
+
+@mixin overlay-background () {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+
+ @include radial-gradient( rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0.7) );
+
+ z-index: 10;
+
+ // IE8- doesn't support RGBA and jQuery uses `filter:` for the fade-in
+ // animation, so we need a child element that is used just for the display
+ >div {
+ position: absolute;
+ top: 0;
+ right: 0;
+ left: 0;
+ bottom: 0;
+
+ // IE7-
+ filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);
+
+ // IE8
+ -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";
+ }
+
+ // IE9 has both filter and rgba support, so we need a hack to disable the filter
+ >div:not([dummy]) {
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled='false');
+ }
+}
+
+@mixin background-transision () {
+ -webkit-transition: background-color 500ms linear;
+    -moz-transition: background-color 500ms linear;
+     -ms-transition: background-color 500ms linear;
+      -o-transition: background-color 500ms linear;
+ transition: background-color 500ms linear;
+}
+
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/css/scss/upload.scss
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/css/scss/upload.scss Wed Jul 29 17:03:53 2020 -0400
[
@@ -0,0 +1,142 @@
+
+div.DTE div.editor_upload {
+ padding-top: 4px;
+
+ div.eu_table {
+ display: table;
+ width: 100%;
+ }
+
+ div.row {
+ display: table-row;
+ }
+
+ div.cell {
+ display: table-cell;
+ position: relative;
+ width: 50%;
+ vertical-align: top;
+ }
+
+ div.cell + div.cell {
+ padding-left: 10px;
+ }
+
+ div.row + div.row {
+ div.cell {
+ padding-top: 10px;
+ }
+ }
+
+ button.btn,
+ input[type=file] {
+ width: 100%;
+ height: 2.3em;
+ font-size: 0.8em;
+ text-align: center;
+ line-height: 1em;
+ }
+
+ input[type=file] {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ opacity: 0;
+ }
+
+ div.drop {
+ position: relative;
+ box-sizing: border-box;
+ width: 100%;
+ height: 100%;
+ border: 3px dashed #ccc;
+ border-radius: 6px;
+ min-height: 4em;
+ color: #999;
+ padding-top: 3px;
+ text-align: center;
+
+ &.over {
+ border: 3px dashed #111;
+ color: #111;
+ }
+
+ span {
+ max-width: 75%;
+ font-size: 0.85em;
+ line-height: 1em;
+ }
+ }
+
+ div.rendered {
+ img {
+ max-width: 8em;
+ margin: 0 auto;
+ }
+ }
+
+ &.noDrop {
+ div.drop {
+ display: none;
+ }
+
+ div.row.second {
+ display: none;
+ }
+
+ div.rendered {
+ margin-top: 10px;
+ }
+ }
+
+ &.noClear {
+ div.clearValue button {
+ display: none;
+ }
+ }
+
+ &.multi {
+ div.cell {
+ display: block;
+ width: 100%;
+
+ div.drop {
+ min-height: 0;
+ padding-bottom: 5px;
+ }
+ }
+
+ div.clearValue {
+ display: none;
+ }
+
+ ul {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+
+ li {
+ position: relative;
+ margin-top: 0.5em;
+
+ &:first-child {
+ margin-top: 0;
+ }
+
+ img {
+ vertical-align: middle;
+ }
+
+ button {
+ position: absolute;
+ width: 40px;
+ right: 0;
+ top: 50%;
+ margin-top: -1.5em;
+ }
+ }
+ }
+ }
+}
+
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/images/ajax-loader-small.gif
b
Binary file js/Editor-1.5.6/images/ajax-loader-small.gif has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/images/ajax-loader.gif
b
Binary file js/Editor-1.5.6/images/ajax-loader.gif has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/images/calender.png
b
Binary file js/Editor-1.5.6/images/calender.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/images/close.png
b
Binary file js/Editor-1.5.6/images/close.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/images/shadow_left.png
b
Binary file js/Editor-1.5.6/images/shadow_left.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/images/shadow_right.png
b
Binary file js/Editor-1.5.6/images/shadow_right.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/js/dataTables.editor.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/js/dataTables.editor.js Wed Jul 29 17:03:53 2020 -0400
[
b'@@ -0,0 +1,8844 @@\n+/*! DataTables Editor v1.5.6\n+ *\n+ * \xc2\xa92012-2016 SpryMedia Ltd, all rights reserved.\n+ * License: editor.datatables.net/license\n+ */\n+\n+/**\n+ * @summary     DataTables Editor\n+ * @description Table editing library for DataTables\n+ * @version     1.5.6\n+ * @file        dataTables.editor.js\n+ * @author      SpryMedia Ltd\n+ * @contact     www.datatables.net/contact\n+ */\n+\n+/*jslint evil: true, undef: true, browser: true */\n+/*globals jQuery,alert,console */\n+\n+(function( factory ){\n+\tif ( typeof define === \'function\' && define.amd ) {\n+\t\t// AMD\n+\t\tdefine( [\'jquery\', \'datatables.net\'], function ( $ ) {\n+\t\t\treturn factory( $, window, document );\n+\t\t} );\n+\t}\n+\telse if ( typeof exports === \'object\' ) {\n+\t\t// CommonJS\n+\t\tmodule.exports = function (root, $) {\n+\t\t\tif ( ! root ) {\n+\t\t\t\troot = window;\n+\t\t\t}\n+\n+\t\t\tif ( ! $ || ! $.fn.dataTable ) {\n+\t\t\t\t$ = require(\'datatables.net\')(root, $).$;\n+\t\t\t}\n+\n+\t\t\treturn factory( $, root, root.document );\n+\t\t};\n+\t}\n+\telse {\n+\t\t// Browser\n+\t\tfactory( jQuery, window, document );\n+\t}\n+}(function( $, window, document, undefined ) {\n+\'use strict\';\n+var DataTable = $.fn.dataTable;\n+\n+\n+if ( ! DataTable || ! DataTable.versionCheck || ! DataTable.versionCheck(\'1.10.7\') ) {\n+\tthrow \'Editor requires DataTables 1.10.7 or newer\';\n+}\n+\n+/**\n+ * Editor is a plug-in for <a href="http://datatables.net">DataTables</a> which\n+ * provides an interface for creating, reading, editing and deleting and entries\n+ * (a CRUD interface) in a DataTable. The documentation presented here is\n+ * primarily focused on presenting the API for Editor. For a full list of\n+ * features, examples and the server interface protocol, please refer to the <a\n+ * href="http://editor.datatables.net">Editor web-site</a>.\n+ *\n+ * Note that in this documentation, for brevity, the `DataTable` refers to the\n+ * jQuery parameter `jQuery.fn.dataTable` through which it may be  accessed.\n+ * Therefore, when creating a new Editor instance, use `jQuery.fn.Editor` as\n+ * shown in the examples below.\n+ *\n+ *  @class\n+ *  @param {object} [oInit={}] Configuration object for Editor. Options\n+ *    are defined by {@link Editor.defaults}.\n+ *  @requires jQuery 1.7+\n+ *  @requires DataTables 1.10+\n+ */\n+var Editor = function ( opts )\n+{\n+\tif ( ! this instanceof Editor ) {\n+\t\talert( "DataTables Editor must be initialised as a \'new\' instance\'" );\n+\t}\n+\n+\tthis._constructor( opts );\n+};\n+\n+// Export Editor as a DataTables property\n+DataTable.Editor = Editor;\n+$.fn.DataTable.Editor = Editor;\n+\n+// Internal methods\n+\n+\n+/**\n+ * Get an Editor node based on the data-dte-e (element) attribute and return it\n+ * as a jQuery object.\n+ *  @param {string} dis The data-dte-e attribute name to match for the element\n+ *  @param {node} [ctx=document] The context for the search - recommended this\n+ *    parameter is included for performance.\n+ *  @returns {jQuery} jQuery object of found node(s).\n+ *  @private\n+ */\n+var _editor_el = function ( dis, ctx )\n+{\n+\tif ( ctx === undefined ) {\n+\t\tctx = document;\n+\t}\n+\n+\treturn $(\'*[data-dte-e="\'+dis+\'"]\', ctx);\n+};\n+\n+\n+/** @internal Counter for unique event namespaces in the inline control */\n+var __inlineCounter = 0;\n+\n+var _pluck = function ( a, prop )\n+{\n+\tvar out = [];\n+\n+\t$.each( a, function ( idx, el ) {\n+\t\tout.push( el[ prop ] );\n+\t} );\n+\n+\treturn out;\n+};\n+\n+// Field class\n+\n+\n+Editor.Field = function ( opts, classes, host ) {\n+\tvar that = this;\n+\tvar multiI18n = host.i18n.multi;\n+\n+\topts = $.extend( true, {}, Editor.Field.defaults, opts );\n+\t\n+\tif ( ! Editor.fieldTypes[ opts.type ] ) {\n+\t\tthrow "Error adding field - unknown field type "+opts.type;\n+\t}\n+\n+\tthis.s = $.extend( {}, Editor.Field.settings, { // has to be a shallow copy!\n+\t\ttype:       Editor.fieldTypes[ opts.type ],\n+\t\tname:       opts.name,\n+\t\tclasses:    classes,\n+\t\thost:       host,\n+\t\topts:       opts,\n+\t\tmultiValue: false\n+\t} );\n+\n+\t// No id, so assign one to have the label reference work\n+\tif ( ! opts.id ) {\n+\t\topts.id = \'DTE_Field_\'+opts.name;'..b' - included for naming consistency.\n+ *  @name Editor#postCreate\n+ *  @event\n+ *  @param {event} e jQuery event object\n+ *  @param {object} json The JSON object returned from the server\n+ *  @param {object} data The data that was used to update the DataTable\n+ */\n+\n+/**\n+ * Edit method activated event, fired when the edit API method has been called,\n+ * just prior to the form being shown. Useful for manipulating the form specifically\n+ * for the edit state.\n+ *  @name Editor#initEdit\n+ *  @event\n+ *  @param {event} e jQuery event object\n+ *  @param {node} tr TR element of the row to be edited\n+ *  @param {array|object} data Data source array / object for the row to be\n+ *    edited\n+ */\n+\n+/**\n+ * Pre-edit row event, fired just before DataTables calls the fnUpdate method\n+ * to edit data in a DataTables row, allowing modification of the data that will be\n+ * used to update the table.\n+ *  @name Editor#preEdit\n+ *  @event\n+ *  @param {event} e jQuery event object\n+ *  @param {object} json The JSON object returned from the server\n+ *  @param {object} data The data that will be used to update the DataTable\n+ */\n+\n+/**\n+ * Edit row event, fired when a row has been edited in the DataTable by a form\n+ * submission. This is called just after the fnUpdate call to the DataTable.\n+ *  @name Editor#edit\n+ *  @event\n+ *  @param {event} e jQuery event object\n+ *  @param {object} json The JSON object returned from the server\n+ *  @param {object} data The data that was used to update the DataTable\n+ */\n+\n+/**\n+ * As per the `edit` event - included for naming consistency.\n+ *  @name Editor#postEdit\n+ *  @event\n+ *  @param {event} e jQuery event object\n+ *  @param {object} json The JSON object returned from the server\n+ *  @param {object} data The data that was used to update the DataTable\n+ */\n+\n+/**\n+ * Remove method activated event, fired when the remove API method has been\n+ * called, just prior to the form being shown. Useful for manipulating the form\n+ * specifically for the remove state.\n+ *  @name Editor#initRemove\n+ *  @event\n+ *  @param {event} e jQuery event object\n+ *  @param {array} trs Array of the TR elements for the removed to be deleted\n+ *  @param {array} data Array of the data source array / objects for the rows to\n+ *    be deleted. This is in the same index order as the TR nodes in the second\n+ *    parameter.\n+ */\n+\n+/**\n+ * Pre-remove row event, fired just before DataTables calls the fnDeleteRow method\n+ * to delete a DataTables row.\n+ *  @name Editor#preRemove\n+ *  @event\n+ *  @param {event} e jQuery event object\n+ *  @param {object} json The JSON object returned from the server\n+ */\n+\n+/**\n+ * Row removed event, fired when a row has been removed in the DataTable by a form\n+ * submission. This is called just after the fnDeleteRow call to the DataTable.\n+ *  @name Editor#remove\n+ *  @event\n+ *  @param {event} e jQuery event object\n+ *  @param {object} json The JSON object returned from the server\n+ */\n+\n+/**\n+ * As per the `postRemove` event - included for naming consistency.\n+ *  @name Editor#postRemove\n+ *  @event\n+ *  @param {event} e jQuery event object\n+ *  @param {object} json The JSON object returned from the server\n+ */\n+\n+/**\n+ * Set data event, fired when the data is gathered from the form to be used\n+ * to update the DataTable. This is a "global" version of `preCreate`, `preEdit`\n+ * and `preRemove` and can be used to manipulate the data that will be added\n+ * to the DataTable for all three actions\n+ *  @name Editor#setData\n+ *  @event\n+ *  @param {event} e jQuery event object\n+ *  @param {object} json The JSON object returned from the server\n+ *  @param {object} data The data that will be used to update the DataTable\n+ *  @param {string} action The action being performed by the form - \'create\',\n+ *    \'edit\' or \'remove\'.\n+ */\n+\n+/**\n+ * Initialisation of the Editor instance has been completed.\n+ *  @name Editor#initComplete\n+ *  @event\n+ *  @param {event} e jQuery event object\n+ */\n+\n+\n+return Editor;\n+}));\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/js/dataTables.editor.min.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/js/dataTables.editor.min.js Wed Jul 29 17:03:53 2020 -0400
[
b'@@ -0,0 +1,140 @@\n+/*!\n+ DataTables Editor v1.5.6\n+\n+ \xc2\xa92012-2016 SpryMedia Ltd, all rights reserved.\n+ License: editor.datatables.net/license\n+*/\n+(function(d){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(j){return d(j,window,document)}):"object"===typeof exports?module.exports=function(j,q){j||(j=window);if(!q||!q.fn.dataTable)q=require("datatables.net")(j,q).$;return d(q,j,j.document)}:d(jQuery,window,document)})(function(d,j,q,h){function v(a){a=a.context[0];return a.oInit.editor||a._editor}function B(a,b,c,e){b||(b={});b.buttons===h&&(b.buttons="_basic");b.title===h&&(b.title=a.i18n[c].title);b.message===\n+h&&("remove"===c?(a=a.i18n[c].confirm,b.message=1!==e?a._.replace(/%d/,e):a["1"]):b.message="");return b}var r=d.fn.dataTable;if(!r||!r.versionCheck||!r.versionCheck("1.10.7"))throw"Editor requires DataTables 1.10.7 or newer";var f=function(a){!this instanceof f&&alert("DataTables Editor must be initialised as a \'new\' instance\'");this._constructor(a)};r.Editor=f;d.fn.DataTable.Editor=f;var t=function(a,b){b===h&&(b=q);return d(\'*[data-dte-e="\'+a+\'"]\',b)},N=0,y=function(a,b){var c=[];d.each(a,function(a,\n+d){c.push(d[b])});return c};f.Field=function(a,b,c){var e=this,l=c.i18n.multi,a=d.extend(!0,{},f.Field.defaults,a);if(!f.fieldTypes[a.type])throw"Error adding field - unknown field type "+a.type;this.s=d.extend({},f.Field.settings,{type:f.fieldTypes[a.type],name:a.name,classes:b,host:c,opts:a,multiValue:!1});a.id||(a.id="DTE_Field_"+a.name);a.dataProp&&(a.data=a.dataProp);""===a.data&&(a.data=a.name);var k=r.ext.oApi;this.valFromData=function(b){return k._fnGetObjectDataFn(a.data)(b,"editor")};this.valToData=\n+k._fnSetObjectDataFn(a.data);b=d(\'<div class="\'+b.wrapper+" "+b.typePrefix+a.type+" "+b.namePrefix+a.name+" "+a.className+\'"><label data-dte-e="label" class="\'+b.label+\'" for="\'+a.id+\'">\'+a.label+\'<div data-dte-e="msg-label" class="\'+b["msg-label"]+\'">\'+a.labelInfo+\'</div></label><div data-dte-e="input" class="\'+b.input+\'"><div data-dte-e="input-control" class="\'+b.inputControl+\'"/><div data-dte-e="multi-value" class="\'+b.multiValue+\'">\'+l.title+\'<span data-dte-e="multi-info" class="\'+b.multiInfo+\n+\'">\'+l.info+\'</span></div><div data-dte-e="msg-multi" class="\'+b.multiRestore+\'">\'+l.restore+\'</div><div data-dte-e="msg-error" class="\'+b["msg-error"]+\'"></div><div data-dte-e="msg-message" class="\'+b["msg-message"]+\'"></div><div data-dte-e="msg-info" class="\'+b["msg-info"]+\'">\'+a.fieldInfo+"</div></div></div>");c=this._typeFn("create",a);null!==c?t("input-control",b).prepend(c):b.css("display","none");this.dom=d.extend(!0,{},f.Field.models.dom,{container:b,inputControl:t("input-control",b),label:t("label",\n+b),fieldInfo:t("msg-info",b),labelInfo:t("msg-label",b),fieldError:t("msg-error",b),fieldMessage:t("msg-message",b),multi:t("multi-value",b),multiReturn:t("msg-multi",b),multiInfo:t("multi-info",b)});this.dom.multi.on("click",function(){e.val("")});this.dom.multiReturn.on("click",function(){e.s.multiValue=true;e._multiValueCheck()});d.each(this.s.type,function(a,b){typeof b==="function"&&e[a]===h&&(e[a]=function(){var b=Array.prototype.slice.call(arguments);b.unshift(a);b=e._typeFn.apply(e,b);return b===\n+h?e:b})})};f.Field.prototype={def:function(a){var b=this.s.opts;if(a===h)return a=b["default"]!==h?b["default"]:b.def,d.isFunction(a)?a():a;b.def=a;return this},disable:function(){this._typeFn("disable");return this},displayed:function(){var a=this.dom.container;return a.parents("body").length&&"none"!=a.css("display")?!0:!1},enable:function(){this._typeFn("enable");return this},error:function(a,b){var c=this.s.classes;a?this.dom.container.addClass(c.error):this.dom.container.removeClass(c.error);\n+return this._msg(this.dom.fieldError,a,b)},isMultiValue:function(){return this.s.multiValue},inError:function(){return this.dom.container.hasClass(this.s.classes.error)},input:function(){return this.s.type.input?this._typeFn("input"):d("input, select, textarea",this.dom.container)}'..b's._preChecked)this.checked=true})});return a._input[0]},get:function(a){a=a._input.find("input:checked");return a.length?a[0]._editor_val:h},set:function(a,b){a._input.find("input").each(function(){this._preChecked=false;\n+if(this._editor_val==b)this._preChecked=this.checked=true;else this._preChecked=this.checked=false});A(a._input.find("input:checked"))},enable:function(a){a._input.find("input").prop("disabled",false)},disable:function(a){a._input.find("input").prop("disabled",true)},update:function(a,b){var c=s.radio,d=c.get(a);c._addOptions(a,b);var f=a._input.find("input");c.set(a,f.filter(\'[value="\'+d+\'"]\').length?d:f.eq(0).attr("value"))}});s.date=d.extend(!0,{},p,{create:function(a){a._input=d("<input />").attr(d.extend({id:f.safeId(a.id),\n+type:"text"},a.attr));if(d.datepicker){a._input.addClass("jqueryui");if(!a.dateFormat)a.dateFormat=d.datepicker.RFC_2822;if(a.dateImage===h)a.dateImage="../../images/calender.png";setTimeout(function(){d(a._input).datepicker(d.extend({showOn:"both",dateFormat:a.dateFormat,buttonImage:a.dateImage,buttonImageOnly:true},a.opts));d("#ui-datepicker-div").css("display","none")},10)}else a._input.attr("type","date");return a._input[0]},set:function(a,b){d.datepicker&&a._input.hasClass("hasDatepicker")?a._input.datepicker("setDate",\n+b).change():d(a._input).val(b)},enable:function(a){d.datepicker?a._input.datepicker("enable"):d(a._input).prop("disabled",false)},disable:function(a){d.datepicker?a._input.datepicker("disable"):d(a._input).prop("disabled",true)},owns:function(a,b){return d(b).parents("div.ui-datepicker").length||d(b).parents("div.ui-datepicker-header").length?true:false}});s.datetime=d.extend(!0,{},p,{create:function(a){a._input=d("<input />").attr(d.extend(true,{id:f.safeId(a.id),type:"text"},a.attr));a._picker=\n+new f.DateTime(a._input,d.extend({format:a.format,i18n:this.i18n.datetime},a.opts));return a._input[0]},set:function(a,b){a._picker.val(b);A(a._input)},owns:function(a,b){return a._picker.owns(b)},destroy:function(a){a._picker.destroy()},minDate:function(a,b){a._picker.min(b)},maxDate:function(a,b){a._picker.max(b)}});s.upload=d.extend(!0,{},p,{create:function(a){var b=this;return M(b,a,function(c){f.fieldTypes.upload.set.call(b,a,c[0])})},get:function(a){return a._val},set:function(a,b){a._val=b;\n+var c=a._input;if(a.display){var d=c.find("div.rendered");a._val?d.html(a.display(a._val)):d.empty().append("<span>"+(a.noFileText||"No file")+"</span>")}d=c.find("div.clearValue button");if(b&&a.clearText){d.html(a.clearText);c.removeClass("noClear")}else c.addClass("noClear");a._input.find("input").triggerHandler("upload.editor",[a._val])},enable:function(a){a._input.find("input").prop("disabled",false);a._enabled=true},disable:function(a){a._input.find("input").prop("disabled",true);a._enabled=\n+false}});s.uploadMany=d.extend(!0,{},p,{create:function(a){var b=this,c=M(b,a,function(c){a._val=a._val.concat(c);f.fieldTypes.uploadMany.set.call(b,a,a._val)});c.addClass("multi").on("click","button.remove",function(c){c.stopPropagation();c=d(this).data("idx");a._val.splice(c,1);f.fieldTypes.uploadMany.set.call(b,a,a._val)});return c},get:function(a){return a._val},set:function(a,b){b||(b=[]);if(!d.isArray(b))throw"Upload collections must have an array as a value";a._val=b;var c=this,e=a._input;\n+if(a.display){e=e.find("div.rendered").empty();if(b.length){var f=d("<ul/>").appendTo(e);d.each(b,function(b,d){f.append("<li>"+a.display(d,b)+\' <button class="\'+c.classes.form.button+\' remove" data-idx="\'+b+\'">&times;</button></li>\')})}else e.append("<span>"+(a.noFileText||"No files")+"</span>")}a._input.find("input").triggerHandler("upload.editor",[a._val])},enable:function(a){a._input.find("input").prop("disabled",false);a._enabled=true},disable:function(a){a._input.find("input").prop("disabled",\n+true);a._enabled=false}});r.ext.editorFields&&d.extend(f.fieldTypes,r.ext.editorFields);r.ext.editorFields=f.fieldTypes;f.files={};f.prototype.CLASS="Editor";f.version="1.5.6";return f});\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/js/editor.bootstrap.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/js/editor.bootstrap.js Wed Jul 29 17:03:53 2020 -0400
[
@@ -0,0 +1,220 @@
+/*! Bootstrap integration for DataTables' Editor
+ * Â©2015 SpryMedia Ltd - datatables.net/license
+ */
+
+(function( factory ){
+ if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( ['jquery', 'datatables.net-bs', 'datatables.net-editor'], function ( $ ) {
+ return factory( $, window, document );
+ } );
+ }
+ else if ( typeof exports === 'object' ) {
+ // CommonJS
+ module.exports = function (root, $) {
+ if ( ! root ) {
+ root = window;
+ }
+
+ if ( ! $ || ! $.fn.dataTable ) {
+ $ = require('datatables.net-bs')(root, $).$;
+ }
+
+ if ( ! $.fn.dataTable.Editor ) {
+ require('datatables.net-editor')(root, $);
+ }
+
+ return factory( $, root, root.document );
+ };
+ }
+ else {
+ // Browser
+ factory( jQuery, window, document );
+ }
+}(function( $, window, document, undefined ) {
+'use strict';
+var DataTable = $.fn.dataTable;
+
+
+/*
+ * Set the default display controller to be our bootstrap control 
+ */
+DataTable.Editor.defaults.display = "bootstrap";
+
+
+/*
+ * Alter the buttons that Editor adds to TableTools so they are suitable for bootstrap
+ */
+var i18nDefaults = DataTable.Editor.defaults.i18n;
+i18nDefaults.create.title = "<h3>"+i18nDefaults.create.title+"</h3>";
+i18nDefaults.edit.title = "<h3>"+i18nDefaults.edit.title+"</h3>";
+i18nDefaults.remove.title = "<h3>"+i18nDefaults.remove.title+"</h3>";
+
+var tt = DataTable.TableTools;
+if ( tt ) {
+ tt.BUTTONS.editor_create.formButtons[0].className = "btn btn-primary";
+ tt.BUTTONS.editor_edit.formButtons[0].className = "btn btn-primary";
+ tt.BUTTONS.editor_remove.formButtons[0].className = "btn btn-danger";
+}
+
+
+/*
+ * Change the default classes from Editor to be classes for Bootstrap
+ */
+$.extend( true, $.fn.dataTable.Editor.classes, {
+ "header": {
+ "wrapper": "DTE_Header modal-header"
+ },
+ "body": {
+ "wrapper": "DTE_Body modal-body"
+ },
+ "footer": {
+ "wrapper": "DTE_Footer modal-footer"
+ },
+ "form": {
+ "tag": "form-horizontal",
+ "button": "btn btn-default"
+ },
+ "field": {
+ "wrapper": "DTE_Field",
+ "label":   "col-lg-4 control-label",
+ "input":   "col-lg-8 controls",
+ "error":   "error has-error",
+ "msg-labelInfo": "help-block",
+ "msg-info":      "help-block",
+ "msg-message":   "help-block",
+ "msg-error":     "help-block",
+ "multiValue":    "well well-sm multi-value",
+ "multiInfo":     "small",
+ "multiRestore":  "well well-sm multi-restore"
+ }
+} );
+
+
+/*
+ * Bootstrap display controller - this is effectively a proxy to the Bootstrap
+ * modal control.
+ */
+
+var self;
+
+DataTable.Editor.display.bootstrap = $.extend( true, {}, DataTable.Editor.models.displayController, {
+ /*
+  * API methods
+  */
+ "init": function ( dte ) {
+ // init can be called multiple times (one for each Editor instance), but
+ // we only support a single construct here (shared between all Editor
+ // instances)
+ if ( ! self._dom.content ) {
+ self._dom.content = $(
+ '<div class="modal fade">'+
+ '<div class="modal-dialog">'+
+ '<div class="modal-content"/>'+
+ '</div>'+
+ '</div>'
+ );
+
+ self._dom.close = $('<button class="close">&times;</div>');
+
+ self._dom.close.click( function () {
+ self._dte.close('icon');
+ } );
+
+ $(document).on('click', 'div.modal', function (e) {
+ if ( $(e.target).hasClass('modal') && self._shown ) {
+ self._dte.background();
+ }
+ } );
+
+ dte.on( 'open.dtebs', function ( e, type ) {
+ if ( type === 'inline' || type === 'bubble' ) {
+ $('div.DTE input[type=text], div.DTE select, div.DTE textarea').addClass( 'form-control' );
+ }
+ } );
+ }
+
+ return self;
+ },
+
+ "open": function ( dte, append, callback ) {
+ if ( self._shown ) {
+ if ( callback ) {
+ callback();
+ }
+ return;
+ }
+
+ self._dte = dte;
+ self._shown = true;
+
+ var content = self._dom.content.find('div.modal-content');
+ content.children().detach();
+ content.append( append );
+
+ $('div.modal-header', append).prepend( self._dom.close );
+
+ $(self._dom.content)
+ .one('shown.bs.modal', function () {
+ // Can only give elements focus when shown
+ if ( self._dte.s.setFocus ) {
+ self._dte.s.setFocus.focus();
+ }
+
+ if ( callback ) {
+ callback();
+ }
+ })
+ .one('hidden', function () {
+ self._shown = false;
+ })
+ .appendTo( 'body' )
+ .modal( {
+ backdrop: "static",
+ keyboard: false
+ } );
+
+ $('input:not([type=checkbox]):not([type=radio]), select, textarea', self._dom.content)
+ .addClass( 'form-control' );
+ },
+
+ "close": function ( dte, callback ) {
+ if ( !self._shown ) {
+ if ( callback ) {
+ callback();
+ }
+ return;
+ }
+
+ $(self._dom.content)
+ .one( 'hidden.bs.modal', function () {
+ $(this).detach();
+ } )
+ .modal('hide');
+
+ self._dte = dte;
+ self._shown = false;
+
+ if ( callback ) {
+ callback();
+ }
+ },
+
+ node: function ( dte ) {
+ return self._dom.content[0];
+ },
+
+
+ /*
+  * Private properties
+  */
+  "_shown": false,
+ "_dte": null,
+ "_dom": {}
+} );
+
+self = DataTable.Editor.display.bootstrap;
+
+
+return DataTable.Editor;
+}));
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/js/editor.bootstrap.min.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/js/editor.bootstrap.min.js Wed Jul 29 17:03:53 2020 -0400
[
@@ -0,0 +1,10 @@
+/*!
+ Bootstrap integration for DataTables' Editor
+ Â©2015 SpryMedia Ltd - datatables.net/license
+*/
+(function(c){"function"===typeof define&&define.amd?define(["jquery","datatables.net-bs","datatables.net-editor"],function(a){return c(a,window,document)}):"object"===typeof exports?module.exports=function(a,d){a||(a=window);if(!d||!d.fn.dataTable)d=require("datatables.net-bs")(a,d).$;d.fn.dataTable.Editor||require("datatables.net-editor")(a,d);return c(d,a,a.document)}:c(jQuery,window,document)})(function(c,a,d){a=c.fn.dataTable;a.Editor.defaults.display="bootstrap";var e=a.Editor.defaults.i18n;
+e.create.title="<h3>"+e.create.title+"</h3>";e.edit.title="<h3>"+e.edit.title+"</h3>";e.remove.title="<h3>"+e.remove.title+"</h3>";if(e=a.TableTools)e.BUTTONS.editor_create.formButtons[0].className="btn btn-primary",e.BUTTONS.editor_edit.formButtons[0].className="btn btn-primary",e.BUTTONS.editor_remove.formButtons[0].className="btn btn-danger";c.extend(!0,c.fn.dataTable.Editor.classes,{header:{wrapper:"DTE_Header modal-header"},body:{wrapper:"DTE_Body modal-body"},footer:{wrapper:"DTE_Footer modal-footer"},
+form:{tag:"form-horizontal",button:"btn btn-default"},field:{wrapper:"DTE_Field",label:"col-lg-4 control-label",input:"col-lg-8 controls",error:"error has-error","msg-labelInfo":"help-block","msg-info":"help-block","msg-message":"help-block","msg-error":"help-block",multiValue:"well well-sm multi-value",multiInfo:"small",multiRestore:"well well-sm multi-restore"}});var b;a.Editor.display.bootstrap=c.extend(!0,{},a.Editor.models.displayController,{init:function(a){if(!b._dom.content){b._dom.content=
+c('<div class="modal fade"><div class="modal-dialog"><div class="modal-content"/></div></div>');b._dom.close=c('<button class="close">&times;</div>');b._dom.close.click(function(){b._dte.close("icon")});c(d).on("click","div.modal",function(a){c(a.target).hasClass("modal")&&b._shown&&b._dte.background()});a.on("open.dtebs",function(b,a){(a==="inline"||a==="bubble")&&c("div.DTE input[type=text], div.DTE select, div.DTE textarea").addClass("form-control")})}return b},open:function(a,e,d){if(b._shown)d&&
+d();else{b._dte=a;b._shown=true;a=b._dom.content.find("div.modal-content");a.children().detach();a.append(e);c("div.modal-header",e).prepend(b._dom.close);c(b._dom.content).one("shown.bs.modal",function(){b._dte.s.setFocus&&b._dte.s.setFocus.focus();d&&d()}).one("hidden",function(){b._shown=false}).appendTo("body").modal({backdrop:"static",keyboard:false});c("input:not([type=checkbox]):not([type=radio]), select, textarea",b._dom.content).addClass("form-control")}},close:function(a,d){if(b._shown){c(b._dom.content).one("hidden.bs.modal",
+function(){c(this).detach()}).modal("hide");b._dte=a;b._shown=false}d&&d()},node:function(){return b._dom.content[0]},_shown:!1,_dte:null,_dom:{}});b=a.Editor.display.bootstrap;return a.Editor});
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/js/editor.foundation.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/js/editor.foundation.js Wed Jul 29 17:03:53 2020 -0400
[
@@ -0,0 +1,180 @@
+/*! Foundation integration for DataTables' Editor
+ * Â©2015 SpryMedia Ltd - datatables.net/license
+ */
+
+(function( factory ){
+ if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( ['jquery', 'datatables.net-zf', 'datatables.net-editor'], function ( $ ) {
+ return factory( $, window, document );
+ } );
+ }
+ else if ( typeof exports === 'object' ) {
+ // CommonJS
+ module.exports = function (root, $) {
+ if ( ! root ) {
+ root = window;
+ }
+
+ if ( ! $ || ! $.fn.dataTable ) {
+ $ = require('datatables.net-zf')(root, $).$;
+ }
+
+ if ( ! $.fn.dataTable.Editor ) {
+ require('datatables.net-editor')(root, $);
+ }
+
+ return factory( $, root, root.document );
+ };
+ }
+ else {
+ // Browser
+ factory( jQuery, window, document );
+ }
+}(function( $, window, document, undefined ) {
+'use strict';
+var DataTable = $.fn.dataTable;
+
+
+/*
+ * Set the default display controller to be our foundation control 
+ */
+DataTable.Editor.defaults.display = "foundation";
+
+
+/*
+ * Change the default classes from Editor to be classes for Foundation
+ */
+$.extend( true, $.fn.dataTable.Editor.classes, {
+ field: {
+ wrapper:         "DTE_Field row",
+ label:           "small-4 columns inline",
+ input:           "small-8 columns",
+ error:           "error",
+ multiValue:      "panel radius multi-value",
+ multiInfo:       "small",
+ multiRestore:    "panel radius multi-restore",
+ "msg-labelInfo": "label secondary",
+ "msg-info":      "label secondary",
+ "msg-message":   "label secondary",
+ "msg-error":     "label alert"
+ },
+ form: {
+ button:  "button small"
+ }
+} );
+
+
+/*
+ * Foundation display controller - this is effectively a proxy to the Foundation
+ * modal control.
+ */
+var self;
+
+DataTable.Editor.display.foundation = $.extend( true, {}, DataTable.Editor.models.displayController, {
+ /*
+  * API methods
+  */
+ "init": function ( dte ) {
+ self._dom.content = $(
+ '<div class="reveal reveal-modal" data-reveal />'
+ );
+ self._dom.close = $('<button class="close close-button">&times;</div>');
+
+ self._dom.close.click( function () {
+ self._dte.close('icon');
+ } );
+
+ return self;
+ },
+
+ "open": function ( dte, append, callback ) {
+ if ( self._shown ) {
+ if ( callback ) {
+ callback();
+ }
+ return;
+ }
+
+ self._dte = dte;
+ self._shown = true;
+
+ var content = self._dom.content;
+ content.children().detach();
+ content.append( append );
+ content.prepend( self._dom.close );
+
+ $(self._dom.content)
+ .one('opened.fndtn.reveal', function () {
+ if ( callback ) {
+ callback();
+ }
+ })
+ .one('closed.fndtn.reveal', function () {
+ self._shown = false;
+ });
+
+ if ( window.Foundation && window.Foundation.Reveal ) {
+ // Foundation 6
+ if ( ! self._reveal ) {
+ self._reveal = new window.Foundation.Reveal( self._dom.content, {
+ closeOnClick: false
+ } );
+ }
+
+ $(self._dom.content).appendTo('body');
+ self._reveal.open();
+ }
+ else {
+ // Foundation 5
+ $(self._dom.content).foundation( 'reveal','open' );
+ }
+
+ $(document).on('click.dte-zf', 'div.reveal-modal-bg, div.reveal-overlay', function () {
+ self._dte.background();
+ } );
+ },
+
+ "close": function ( dte, callback ) {
+ if ( !self._shown ) {
+ if ( callback ) {
+ callback();
+ }
+ return;
+ }
+
+ if ( self._reveal ) {
+ self._reveal.close();
+ }
+ else {
+ $(self._dom.content).foundation( 'reveal', 'close' );
+ }
+
+ $(document).off( 'click.dte-zf' );
+
+ self._dte = dte;
+ self._shown = false;
+
+ if ( callback ) {
+ callback();
+ }
+ },
+
+ node: function ( dte ) {
+ return self._dom.content[0];
+ },
+
+
+ /*
+  * Private properties
+  */
+  "_shown": false,
+ "_dte": null,
+ "_dom": {}
+} );
+
+self = DataTable.Editor.display.foundation;
+
+
+return DataTable.Editor;
+}));
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/js/editor.foundation.min.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/js/editor.foundation.min.js Wed Jul 29 17:03:53 2020 -0400
[
@@ -0,0 +1,8 @@
+/*!
+ Foundation integration for DataTables' Editor
+ Â©2015 SpryMedia Ltd - datatables.net/license
+*/
+(function(b){"function"===typeof define&&define.amd?define(["jquery","datatables.net-zf","datatables.net-editor"],function(c){return b(c,window,document)}):"object"===typeof exports?module.exports=function(c,d){c||(c=window);if(!d||!d.fn.dataTable)d=require("datatables.net-zf")(c,d).$;d.fn.dataTable.Editor||require("datatables.net-editor")(c,d);return b(d,c,c.document)}:b(jQuery,window,document)})(function(b,c,d){var e=b.fn.dataTable;e.Editor.defaults.display="foundation";b.extend(!0,b.fn.dataTable.Editor.classes,
+{field:{wrapper:"DTE_Field row",label:"small-4 columns inline",input:"small-8 columns",error:"error",multiValue:"panel radius multi-value",multiInfo:"small",multiRestore:"panel radius multi-restore","msg-labelInfo":"label secondary","msg-info":"label secondary","msg-message":"label secondary","msg-error":"label alert"},form:{button:"button small"}});var a;e.Editor.display.foundation=b.extend(!0,{},e.Editor.models.displayController,{init:function(){a._dom.content=b('<div class="reveal reveal-modal" data-reveal />');
+a._dom.close=b('<button class="close close-button">&times;</div>');a._dom.close.click(function(){a._dte.close("icon")});return a},open:function(f,e,g){if(a._shown)g&&g();else{a._dte=f;a._shown=true;f=a._dom.content;f.children().detach();f.append(e);f.prepend(a._dom.close);b(a._dom.content).one("opened.fndtn.reveal",function(){g&&g()}).one("closed.fndtn.reveal",function(){a._shown=false});if(c.Foundation&&c.Foundation.Reveal){if(!a._reveal)a._reveal=new c.Foundation.Reveal(a._dom.content,{closeOnClick:false});
+b(a._dom.content).appendTo("body");a._reveal.open()}else b(a._dom.content).foundation("reveal","open");b(d).on("click.dte-zf","div.reveal-modal-bg, div.reveal-overlay",function(){a._dte.background()})}},close:function(c,e){if(a._shown){a._reveal?a._reveal.close():b(a._dom.content).foundation("reveal","close");b(d).off("click.dte-zf");a._dte=c;a._shown=false}e&&e()},node:function(){return a._dom.content[0]},_shown:!1,_dte:null,_dom:{}});a=e.Editor.display.foundation;return e.Editor});
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/js/editor.jqueryui.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/js/editor.jqueryui.js Wed Jul 29 17:03:53 2020 -0400
[
@@ -0,0 +1,141 @@
+/*! jQuery UI integration for DataTables' Editor
+ * Â©2015 SpryMedia Ltd - datatables.net/license
+ */
+
+(function( factory ){
+ if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( ['jquery', 'datatables.net-jqui', 'datatables.net-editor'], function ( $ ) {
+ return factory( $, window, document );
+ } );
+ }
+ else if ( typeof exports === 'object' ) {
+ // CommonJS
+ module.exports = function (root, $) {
+ if ( ! root ) {
+ root = window;
+ }
+
+ if ( ! $ || ! $.fn.dataTable ) {
+ $ = require('datatables.net-jqui')(root, $).$;
+ }
+
+ if ( ! $.fn.dataTable.Editor ) {
+ require('datatables.net-editor')(root, $);
+ }
+
+ return factory( $, root, root.document );
+ };
+ }
+ else {
+ // Browser
+ factory( jQuery, window, document );
+ }
+}(function( $, window, document, undefined ) {
+'use strict';
+var DataTable = $.fn.dataTable;
+
+
+var Editor = DataTable.Editor;
+var doingClose = false;
+
+/*
+ * Set the default display controller to be our foundation control 
+ */
+Editor.defaults.display = "jqueryui";
+
+/*
+ * Change the default classes from Editor to be classes for Bootstrap
+ */
+$.extend( true, $.fn.dataTable.Editor.classes, {
+ form: {
+ button:  "btn ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"
+ }
+} );
+
+/*
+ * jQuery UI display controller - this is effectively a proxy to the jQuery UI
+ * modal control.
+ */
+Editor.display.jqueryui = $.extend( true, {}, Editor.models.displayController, {
+ init: function ( dte ) {
+ dte.__dialouge = $('<div/>')
+ .css('display', 'none')
+ .appendTo('body')
+ .dialog( $.extend( true, Editor.display.jqueryui.modalOptions, {
+ autoOpen: false,
+ buttons: { "A": function () {} }, // fake button so the button container is created
+ closeOnEscape: false // allow editor's escape function to run
+ } ) );
+
+ // Need to know when the dialogue is closed using its own trigger
+ // so we can reset the form
+ $(dte.__dialouge).on( 'dialogclose', function (e) {
+ if ( ! doingClose ) {
+ dte.close();
+ }
+ } );
+
+ return Editor.display.jqueryui;
+ },
+
+ open: function ( dte, append, callback ) {
+ dte.__dialouge
+ .append( append )
+ .dialog( 'open' );
+
+ $(dte.dom.formError).appendTo(
+ dte.__dialouge.parent().find('div.ui-dialog-buttonpane')
+ );
+
+ dte.__dialouge.parent().find('.ui-dialog-title').html( dte.dom.header.innerHTML );
+ dte.__dialouge.parent().addClass('DTED');
+
+ // Modify the Editor buttons to be jQuery UI suitable
+ var buttons = $(dte.dom.buttons)
+ .children()
+ .addClass( 'ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only' )
+ .each( function () {
+ $(this).wrapInner( '<span class="ui-button-text" />' );
+ } );
+
+ // Move the buttons into the jQuery UI button set
+ dte.__dialouge.parent().find('div.ui-dialog-buttonset')
+ .empty()
+ .append( buttons.parent() );
+
+ if ( callback ) {
+ callback();
+ }
+ },
+
+ close: function ( dte, callback ) {
+ if ( dte.__dialouge ) {
+ // Don't want to trigger a close() call from dialogclose!
+ doingClose = true;
+ dte.__dialouge.dialog( 'close' );
+ doingClose = false;
+ }
+
+ if ( callback ) {
+ callback();
+ }
+ },
+
+ node: function ( dte ) {
+ return dte.__dialouge[0];
+ },
+
+ // jQuery UI dialogues perform their own focus capture
+ captureFocus: false
+} );
+
+
+Editor.display.jqueryui.modalOptions = {
+ width: 600,
+ modal: true
+};
+
+
+return DataTable.Editor;
+}));
b
diff -r 8283ff163ba6 -r b5453d07f740 js/Editor-1.5.6/js/editor.jqueryui.min.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/Editor-1.5.6/js/editor.jqueryui.min.js Wed Jul 29 17:03:53 2020 -0400
[
@@ -0,0 +1,8 @@
+/*!
+ jQuery UI integration for DataTables' Editor
+ Â©2015 SpryMedia Ltd - datatables.net/license
+*/
+(function(b){"function"===typeof define&&define.amd?define(["jquery","datatables.net-jqui","datatables.net-editor"],function(c){return b(c,window,document)}):"object"===typeof exports?module.exports=function(c,a){c||(c=window);if(!a||!a.fn.dataTable)a=require("datatables.net-jqui")(c,a).$;a.fn.dataTable.Editor||require("datatables.net-editor")(c,a);return b(a,c,c.document)}:b(jQuery,window,document)})(function(b){var c=b.fn.dataTable,a=c.Editor,e=!1;a.defaults.display="jqueryui";b.extend(!0,b.fn.dataTable.Editor.classes,
+{form:{button:"btn ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"}});a.display.jqueryui=b.extend(!0,{},a.models.displayController,{init:function(d){d.__dialouge=b("<div/>").css("display","none").appendTo("body").dialog(b.extend(true,a.display.jqueryui.modalOptions,{autoOpen:false,buttons:{A:function(){}},closeOnEscape:false}));b(d.__dialouge).on("dialogclose",function(){e||d.close()});return a.display.jqueryui},open:function(d,a,c){d.__dialouge.append(a).dialog("open");b(d.dom.formError).appendTo(d.__dialouge.parent().find("div.ui-dialog-buttonpane"));
+d.__dialouge.parent().find(".ui-dialog-title").html(d.dom.header.innerHTML);d.__dialouge.parent().addClass("DTED");a=b(d.dom.buttons).children().addClass("ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only").each(function(){b(this).wrapInner('<span class="ui-button-text" />')});d.__dialouge.parent().find("div.ui-dialog-buttonset").empty().append(a.parent());c&&c()},close:function(a,b){if(a.__dialouge){e=true;a.__dialouge.dialog("close");e=false}b&&b()},node:function(a){return a.__dialouge[0]},
+captureFocus:!1});a.display.jqueryui.modalOptions={width:600,modal:!0};return c.Editor});
b
diff -r 8283ff163ba6 -r b5453d07f740 js/boxplotsFlow.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/boxplotsFlow.js Wed Jul 29 17:03:53 2020 -0400
[
b'@@ -0,0 +1,724 @@\n+// Copyright (c) 2016 Northrop Grumman.\n+// All rights reserved.\n+var updateBPmfi = function(plotconfig){\n+  plotconfig.selectedPopulations = [];\n+  $(plotconfig.popSelectj).each(function() {\n+    if (this.checked) {\n+      plotconfig.selectedPopulations.push(parseInt(this.value));\n+    }\n+  });\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+  updateBoxplotMFI(plotconfig);\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="\' + newNames[value] + \'">\'\n+        + newNames[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+    updateBPmfi(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+    updateBPmfi(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.popSelectAll).prop("checked",true);\n+    $(plotconfig.popSelectj).prop("checked", true);\n+    $(plotconfig.mrkrSelectj).prop("checked", true);\n+    $(plotconfig.mrkrSelectAll).prop("checked",true);\n+    $(plotconfig.displayMFI).prop("checked", false);\n+    $(plotconfig.displayvalues).prop("checked", false);\n+    updateBPmfi(plotconfig);\n+  });\n+\n+  $(plotconfig.toggledisplayj).on("click",function() {\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+    updateBPmfi(plotconfig);\n+  });\n+\n+  $(plotconfig.displayMFI).on("click", function(){\n+    updateBPmfi(plotconfig);\n+  });\n+\n+  $(plotconfig.displayvalues).on("click", function(){\n+    updateBPmfi(plotconfig);\n+  });\n+\n+  displayPlot(plotconfig);\n+};\n+\n+var displayPlot = function(plotconfig) {\n+  var h = $(window).height() - 200,\n+      nbPop = Object.keys(plotconfig.csdata.mfi[plotconfig.mrkrNames[0]]).length + 2;\n+\n+  $(plotconfig.plotdivj).empty();\n+  $(plotconfig.plotdivj).height(h);\n+\n+  // Get Markers too\n+  for (var i = 0, nbMarkers = plotconfig.mrkrNames.length; i < nbMarkers; i++){\n+    plotconfig.allMarkers.push(i);\n+    plotconfig.selectedMarkers.push(i);\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+      updateBoxplotMFI(plotconfig);\n+    }, 500, "resizePlot");\n+  });\n+\n+  displayPopulationLegend(plotconfig);\n+  displayMarkerTable(plotconfig);\n+  updateBoxplotMFI(plotconfig);\n+};\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).app'..b'onfig[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+          // Update box ticks.\n+        var boxTick = g.selectAll("text.box")\n+            .data(quartileData);\n+\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+              .style("stroke", function(d) { return color_palette[0][data.config[1]][3]; })\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 8283ff163ba6 -r b5453d07f740 js/color_palette.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/color_palette.js Wed Jul 29 17:03:53 2020 -0400
[
b"@@ -0,0 +1,226 @@\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 8283ff163ba6 -r b5453d07f740 js/overview.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/overview.js Wed Jul 29 17:03:53 2020 -0400
[
b'@@ -0,0 +1,325 @@\n+// Copyright (c) 2016 Northrop Grumman.\n+// All rights reserved.\n+\n+var scatterData2D = {};\n+var scatterData3D = {};\n+var scatterData3DMFI = {};\n+var scatterDataMFI = {};\n+var tableContent;\n+var newNames ={};\n+var configbp = {};\n+var bpurl = "./boxplotData.json";\n+\n+var waitForFinalEvent = (function () {\n+  var timers = {};\n+  return function (callback, ms, uniqueId) {\n+    if (!uniqueId) {\n+      uniqueId = "Don\'t call this twice without a uniqueId";\n+    }\n+    if (timers[uniqueId]) {\n+      clearTimeout (timers[uniqueId]);\n+    }\n+    timers[uniqueId] = setTimeout(callback, ms);\n+  };\n+})();\n+\n+var updateOverviewPlotDisplay = function(data) {\n+  $(\'#overviewPlotDiv\').empty();\n+  $(\'#overviewPlotDiv\').html(data);\n+};\n+\n+var displayMFI = function() {\n+  var url = "flow.mfi_pop";\n+  d3.text(url, function(error, data){\n+    var mfiHdgs = [],\n+        pp = [],\n+        mfiTableData = [],\n+        mfiTableHeadings = [],\n+        mfiTargets = [],\n+        mfiTableHTML = \'<table id="mfitable" class="dtable display compact" cellspacing="0" width="100%"/>\',\n+        popcol = 1,\n+        mfiEditorData =[];\n+\n+    if (error){\n+      alert("Problem retrieving data");\n+      return;\n+    }\n+    mfiHdgs = data.split("\\n")[0].split("\\t");\n+    pp = mfiHdgs.pop();\n+    mfiHdgs.unshift(pp);\n+    mfiHdgs.unshift("Comment");\n+    data = d3.tsv.parse(data);\n+    function handleSubmit(method, url, d, successCallBack, errorCallBack) {\n+      var output = {data : mfiTableData};\n+      successCallBack(output);\n+    }\n+\n+    $(\'#mfiDiv\').empty();\n+    mfiTableData = $.extend(true,[],data);\n+    mfiTableData.forEach(function(d){\n+      d.Comment = d.Population;\n+      newNames[parseInt(d.Population)] = d.Comment;\n+    });\n+    //var mfiData = mfiTableData.filter(function(d){return d});\n+    tableContent = $.extend(true, [], mfiTableData);\n+    mfiHdgs.forEach(function(d,i) {\n+      mfiTableHeadings.push({"data": d, "title": d});\n+      mfiEditorData.push({"label" : d, "name" : d});\n+    });\n+\n+    for (var i = 2, j = mfiHdgs.length - 2; i<j; i++){\n+      mfiTargets.push(i);\n+    }\n+\n+    $(\'#mfiDiv\').html(mfiTableHTML);\n+    var editor = new $.fn.dataTable.Editor({\n+        ajax: handleSubmit,\n+        table: \'#mfitable\',\n+        fields: mfiEditorData,\n+        idSrc: \'Population\'\n+    });\n+    $(\'#mfitable\').on(\'click\', \'tbody td:first-child\', function (e) {\n+      editor.bubble(this);\n+    });\n+    var mfiTable = $(\'#mfitable\').DataTable({\n+        columns: mfiTableHeadings,\n+        data: mfiTableData,\n+        order: [[ popcol, "asc" ]],\n+        pageLength: 25,\n+        dom: \'<"top"Bi>t<"bottom"lp><"clear">\',\n+        columnDefs: [{\n+            targets: mfiTargets,\n+            className: "dt-body-right",\n+            render: function(data, type, row){\n+              return parseFloat(data).toFixed(2);\n+            }\n+          }, {\n+            targets: [mfiHdgs.length - 2],\n+            className: "dt-body-right"\n+          }, {\n+            targets: [mfiHdgs.length-1],\n+            className: "dt-body-right",\n+            render: function(data, type, row){\n+                    return parseFloat(data).toFixed(2) + \'%\';\n+            }\n+          }\n+        ],\n+        buttons: [\n+            \'copy\', \'pdfHtml5\',\'csvHtml5\', \'colvis\'\n+        ],\n+        colReorder: {fixedColumnsLeft:1},\n+        select: true\n+    });\n+    editor.on(\'preSubmit\', function(e, object, action){\n+      var data = object.data;\n+      var key = Object.keys(data)[0];\n+      var count = object.data[key][\'Comment\'];\n+      mfiTableData.forEach(function(d) {\n+        if (d.Population === key) {\n+          d.Comment = count;\n+          newNames[parseInt(d.Population)] = count;\n+        }\n+      });\n+      tableContent = $.extend(true, [], mfiTableData);\n+    });\n+  });\n+};\n+\n+var displayOverviewPlot = function() {\n+  var url = "flow.overview";\n+  $.ajax({\n+    url: url,\n+    dataType: "text",\n+    success: function(data) {\n+      updateOverviewPlotDispla'..b'l: mfi_url,\n+        dataType: "text",\n+        success: function(mfi_text) {\n+          scatterData3DMFI = new processMFI(mfi_text);\n+          scatterData3D = new processData(text);\n+          displayScatterToolbar3D();\n+          displayScatterPopulation3D();\n+          processScatterData3D();\n+          processScatterData3DMFI();\n+          displayScatterPlot3D();\n+          $(window).on(\'resize\',function() {\n+            waitForFinalEvent(function() {\n+              processScatterData3D();\n+              displayScatterPlot3D();\n+            }, 500, "resize3D");\n+          });\n+        }\n+      });\n+    }\n+  });\n+};\n+\n+var displayMFIBoxplot = function() {\n+  $.ajax({\n+    url: bpurl,\n+    dataType: "json",\n+    success: function(data) {\n+      configbp = {\n+        displaybutton : \'#updateDisplaybp\',\n+        toggledisplayj : \'#changeDisplay\',\n+        toggledisplay : \'changeDisplay\',\n+        popSelectj : \'.popSelectbp\',\n+        plotdivj : \'#plotDivbp\',\n+        csdata : data,\n+        plotdiv : \'plotDivbp\',\n+        type : \'boxplot\',\n+        table : \'#popTablebp tbody\',\n+        popSelect : \'popSelectbp\',\n+        allMarkers : [],\n+        selectedMarkers: [],\n+        allPopulations : [],\n+        selectedPopulations : [],\n+        popSelectAll : \'#popSelectAllbp\',\n+        popSelectCheck: \'.popSelectbp:checked\',\n+        mrkrSelectAll : \'#mrkrSelectAll\',\n+        mrkrSelectCheck: \'.mrkrSelect:checked\',\n+        mrkrSelect : \'mrkrSelect\',\n+        mtable : \'#mrkrTable tbody\',\n+        mrkrSelectj: \'.mrkrSelect\',\n+        displayvalues: \'#displayLabels\',\n+        displayMFI: \'#displayMFI\',\n+        view: \'p\',\n+        mrkrNames :  Object.keys(data.mfi)\n+      };\n+      displayToolbar(configbp);\n+    }\n+  });\n+};\n+\n+function processData(text) {\n+  var data = d3.tsv.parseRows(text).map(function(row) {\n+    return row.map(function(value) {\n+      if (isNaN(value)) {\n+        return value;\n+      }\n+      return +value;\n+    });\n+  });\n+\n+  this.columnHeadings = data.shift();\n+  this.columnHeadings.pop();\n+  var popCol = data[0].length - 1;\n+  var p = data.map(function(value,index) {\n+    return parseInt(value[popCol]);\n+  });\n+\n+  var populations = {};\n+  for (var i = 0; i < p.length; i++) {\n+    if (populations[p[i]] === undefined) {\n+      populations[p[i]] = 1;\n+    } else {\n+      populations[p[i]] = populations[p[i]] + 1;\n+    }\n+  }\n+\n+  this.popCol = popCol;\n+  this.populations = d3.set(p).values();\n+  this.populations = this.populations.map(function(value,index) {\n+    return parseInt(value);\n+  });\n+  this.selectedPopulations = this.populations;\n+  this.percent = this.populations.map(function(value,index) {\n+    return Math.floor(populations[value] * 10000.0 / data.length) / 100.0;\n+  });\n+\n+  this.data = data;\n+  this.m1 = 0;\n+  this.m2 = 1;\n+  this.m3 = 2;\n+  this.view = 1;\n+};\n+\n+function processMFI(text) {\n+  data = d3.tsv.parseRows(text).map(function(row) {\n+    return row.map(function(value) {\n+      if (isNaN(value)) {\n+        return value;\n+      }\n+      return +value;\n+    });\n+  });\n+\n+  // Get the Headings Row, then remove the Count, Percentage and\n+  // Population headings\n+  this.columnHeadings = data.shift();\n+  this.columnHeadings.pop();\n+  this.columnHeadings.pop();\n+  this.columnHeadings.pop();\n+\n+  var popCol = data[0].length -1;\n+  var pop = data.map(function(value,index) {\n+    return parseInt(value[popCol]);\n+  });\n+\n+  var perCol = data[0].length -2;\n+  var per = data.map(function(value,index) {\n+    return parseFloat(value[perCol]);\n+  });\n+\n+  var countCol = data[0].length -3;\n+  var count = data.map(function(value,index) {\n+    return parseInt(value[countCol]);\n+  });\n+\n+  this.popCol = popCol;\n+  this.populations = pop;\n+  this.selectedPopulations = pop;\n+  this.percent = per;\n+  this.counts = count;\n+\n+  var l = data[0].length;\n+  this.data = data.map(function(row) {\n+    return row.splice(0,countCol);\n+  });\n+  this.poplist = pop;\n+  this.m1 = 0;\n+  this.m2 = 1;\n+  this.m3 = 2;\n+};\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 js/parallelCoordinates.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/parallelCoordinates.js Wed Jul 29 17:03:53 2020 -0400
[
b'@@ -0,0 +1,455 @@\n+// Copyright (c) 2016 Northrop Grumman.\n+// All rights reserved.\n+/*\n+ * Initialize variables for parallelCoordinates display\n+*/\n+var pCoordApp = pCoordApp || {};\n+pCoordApp.allPopulations = [];\n+pCoordApp.selectedPopulations = [];\n+pCoordApp.origData;\n+pCoordApp.flowData;\n+pCoordApp.headers = [];\n+pCoordApp.foreground;\n+pCoordApp.background;\n+pCoordApp.populations = [];\n+pCoordApp.allLines;\n+pCoordApp.lines = [];\n+pCoordApp.selectedLines = [];\n+\n+var displayAll = function() {\n+  displayParallelPlot();\n+}\n+/*\n+ * Display the Population Legend\n+*/\n+var displayPopTable = function() {\n+  $(\'#popTable tbody\').empty();\n+  pCoordApp.origData.map(function(d,index) {\n+    $(\'#popTable tbody\')\n+        .append(\'<tr><td align="center"><input type="checkbox" \'\n+            + \'id="pop\' + d.Population + \'" \'\n+            + \'checked class="popSelect" value=\' + index + \'/></td>\'\n+            + \'<td title="\' + newNames[d.Population] + \'">\'\n+            + newNames[d.Population]\n+            + \'</td><td><span style="background-color:\'\n+            + color_palette[0][index + 1][0]\n+            + \'">&nbsp;&nbsp;&nbsp;</span></td>\'\n+            + \'<td>\' + d.Percentage + \'</td></tr>\');\n+  });\n+\n+  $(\'#popSelectAll\').click(function() {\n+    var checkAll = $("#popSelectAll").prop(\'checked\');\n+    if (checkAll) {\n+      $(".popSelect").prop("checked", true);\n+      for (var i = 0; i < pCoordApp.allLines; i ++){\n+        pCoordApp.selectedLines.push(i);\n+        pCoordApp.lines.push(i);\n+      }\n+    } else {\n+      $(".popSelect").prop("checked", false);\n+      pCoordApp.selectedLines = [];\n+      pCoordApp.lines = [];\n+    }\n+\n+    pCoordApp.selectedPopulations = [];\n+    $(\'.popSelect\').each(function() {\n+      if (this.checked) {\n+        pCoordApp.selectedPopulations.push(parseInt(this.value));\n+      }\n+    });\n+    displayTableGrid();\n+    if (checkAll) {\n+      displayParallelPlot();\n+    } else {\n+      updateParallelForeground();\n+    }\n+  });\n+\n+  $(\'.popSelect\').click(function() {\n+    if ($(\'.popSelect\').length == $(".popSelect:checked").length) {\n+        $(\'#popSelectAll\').prop("checked",true);\n+    } else {\n+        $(\'#popSelectAll\').prop("checked",false);\n+    }\n+\n+    pCoordApp.selectedPopulations = [];\n+    $(\'.popSelect\').each(function() {\n+      if (this.checked) {\n+        pCoordApp.selectedPopulations.push(parseInt(this.value));\n+      }\n+    });\n+\n+    pCoordApp.selectedLines = [];\n+    pCoordApp.lines = [];\n+\n+    pCoordApp.origData.forEach(function(d,idx){\n+      if ($.inArray(pCoordApp.populations.indexOf(d.Population), pCoordApp.selectedPopulations) > -1) {\n+        pCoordApp.selectedLines.push(idx);\n+        pCoordApp.lines.push(idx);\n+      }\n+    });\n+\n+    displayTableGrid();\n+    updateParallelForeground();\n+  });\n+  updatePopTable();\n+};\n+\n+var updatePopTable = function() {\n+  $(\'.popSelect\').each(function() {\n+    var pop = parseInt(this.value),\n+        selectedPops = pCoordApp.origData.map(function(d){\n+      if ($.inArray(d.idx, pCoordApp.selectedLines) > -1){\n+        return pCoordApp.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+/*\n+ * Display the table under the graph\n+*/\n+var displayTableGrid = function() {\n+  var updatedData = [],\n+      displayData = [],\n+      colNames = [],\n+      pctargets = [],\n+      colTable = [],\n+      tableHTML = [],\n+      textCol = [],\n+      colOrder = [],\n+      targetCol = 0;\n+\n+  $("#tableDiv").empty();\n+  updatedData = $.extend(true, [], tableContent);\n+  updatedData.forEach(function(d, idx){d.idx = idx});\n+  displayData = updatedData.filter(function(d, index) {\n+    if ($.inArray(index,pCoordApp.selectedLines) > -1) {\n+      return d;\n+    }\n+  });\n+\n+  targetCol = pCoordApp.headers.length - 2;\n+  pCoordApp.headers.forEach(function(d,i){\n+    colTable.push("<th>" + d + "</th>");\n+    colNames.push({"data":d});\n+ '..b'rag()\n+      .origin(function(d) { return {x: x(d)}; })\n+      .on("dragstart", function(d) {\n+        dragging[d] = x(d);\n+        pCoordApp.background.attr("visibility", "hidden");\n+      })\n+      .on("drag", function(d) {\n+        dragging[d] = Math.min(width, Math.max(0, d3.event.x));\n+        pCoordApp.foreground.attr("d", path);\n+        dimensions.sort(function(a, b) {\n+          return position(a) - position(b);\n+        });\n+        x.domain(dimensions);\n+        g.attr("transform", function(d) {\n+          return "translate(" + position(d) + ")";\n+        });\n+      })\n+      .on("dragend", function(d) {\n+        delete dragging[d];\n+        transition(d3.select(this))\n+            .attr("transform", "translate(" + x(d) + ")");\n+        transition(pCoordApp.foreground)\n+            .attr("d", path);\n+        pCoordApp.background.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) {\n+        d3.select(this).call(axis.scale(y[d]));\n+      });\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+    $(\'#plotDiv .foreground path\').css(\'stroke-opacity\', val.toString());\n+    $(\'#pcopacity\').html((Math.round(val*10000)/100) + "%");\n+  }));\n+};\n+\n+var updateParallelForeground = function() {\n+  pCoordApp.foreground[0].map(function(d) {\n+    var ln = parseInt(d[\'__data__\'][\'idx\']);\n+    if ($.inArray(ln, pCoordApp.selectedLines) < 0){\n+      d.style.display = "none";\n+    } else {\n+      d.style.display = null;\n+    }\n+  });\n+};\n+\n+/*\n+ * Retrieve the data, then call display functions\n+*/\n+var displayParallelCoordinates = function() {\n+  pCoordApp.origData = $.extend(true,[], tableContent);\n+  pCoordApp.headers = Object.keys(pCoordApp.origData[0]);\n+  pCoordApp.origData.forEach(function(d,idx) {\n+    d.idx = idx;\n+    pCoordApp.selectedLines.push(idx);\n+    pCoordApp.lines.push(idx);\n+    if (!pCoordApp.populations.includes(d.Population)){\n+      pCoordApp.populations.push(d.Population);\n+    }\n+  });\n+  /*\n+   * For the plot use only the MFI information\n+   * for each populations. Store in flowData\n+  */\n+  pCoordApp.flowData = $.extend(true,[],tableContent);\n+  pCoordApp.flowData.forEach(function(d, idx) {\n+    delete d[\'Population\'];\n+    delete d[\'Count\'];\n+    delete d[\'Percentage\'];\n+    delete d.Comment;\n+    pCoordApp.allPopulations.push(idx);\n+    pCoordApp.selectedPopulations.push(idx);\n+    pCoordApp.selectedLines.push(idx);\n+    pCoordApp.lines.push(idx);\n+  });\n+\n+  pCoordApp.allLines = pCoordApp.flowData.length;\n+  displayPopTable();\n+  displayTableGrid();\n+  displayParallelPlot();\n+\n+  $("#resetPCoordDisplay").on("click",function() {\n+    for (var i = 0; i < pCoordApp.allLines; i++) {\n+      pCoordApp.allPopulations.push(i);\n+      pCoordApp.selectedPopulations.push(i);\n+      pCoordApp.selectedLines.push(i);\n+      pCoordApp.lines.push(i);\n+    }\n+    $("#popSelectAll").prop(\'checked\',true);\n+    $(".popSelect").prop("checked",true);\n+\n+    var opcty = ".8";\n+    $(\'#plotDiv .foreground path\').css(\'stroke-opacity\', opcty);\n+    $(\'#pcopacity\').html("80%");\n+    $(\'#pcline_opacity\').val(0.8);\n+\n+    displayPopTable();\n+    displayTableGrid();\n+    displayParallelPlot();\n+  });\n+\n+  $(window).on(\'resize\',function() {\n+    waitForFinalEvent(function() {\n+      displayAll();\n+    }, 500, "resizeParallelCoordinates");\n+  });\n+}\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 js/profileCLs.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/profileCLs.js Wed Jul 29 17:03:53 2020 -0400
[
@@ -0,0 +1,85 @@
+// Copyright (c) 2016 Northrop Grumman.
+// All rights reserved.
+
+var cl_table = './CLprofiles.txt';
+var scores_table = './scores.txt';
+
+var displayCLTable = function(){
+  d3.text(cl_table, function(error, data){
+    var clHdgs = [],
+        clHTML = '<table id="cltable" class="display compact" cellspacing="0" width="100%"/>',
+        clTableData = [],
+        clHeadings = [];
+
+    if (error){
+      alert("Problem retrieving data");
+      return;
+    }
+    clHdgs = data.split("\n")[0].split("\t");
+    data = d3.tsv.parse(data);
+    clTableData = $.extend(true, [], data);
+
+    clHdgs.forEach(function(d,i){
+      clHeadings.push({"data" : d, "title" : d});
+    });
+
+    $('#clprofiles').html(clHTML);
+    var clTable = $('#cltable').DataTable({
+      columns: clHeadings,
+      dom: '<"top"Bi>t<"bottom"lp><"clear">',
+      pageLength: 25,
+      order: [[ 0, "asc" ]],
+      data: clTableData,
+      buttons: [
+        'copy', 'pdfHtml5','csvHtml5'
+      ],
+      columnDefs: [
+        {
+          targets: [0,2,3],
+          className: "smallcols"
+        },
+        {
+          targets: 4,
+          className: "dt-body-left"
+        },
+        {
+          targets: [5,6],
+          className: "firstcol"
+      }]
+    });
+  });
+};
+
+var displayScoresTable = function(){
+  d3.text(scores_table, function(error, data){
+    var scoreHTML = '<table id="scoretable" class="display compact" cellspacing="0" width="100%"/>',
+        scoreHdgs = [],
+        scoreTableData = [],
+        scoreHeadings = [];
+    if (error){
+      alert("Problem retrieving data");
+      return;
+    }
+    scoreHdgs = data.split("\n")[0].split("\t");
+    data = d3.tsv.parse(data);
+
+    $('#scores').html(scoreHTML);
+
+    scoreTableData = $.extend(true, [], data);
+
+    scoreHdgs.forEach(function(d,i){
+      scoreHeadings.push({"data" : d, "title" : d});
+    });
+
+    var scoreTable = $('#scoretable').DataTable({
+      columns: scoreHeadings,
+      pageLength: 25,
+      order: [[ 0, "asc" ]],
+      dom: '<"top"Bi>t<"bottom"lp><"clear">',
+      data: scoreTableData,
+      buttons: [
+        'copy', 'pdfHtml5','csvHtml5'
+      ],
+    });
+  });
+};
b
diff -r 8283ff163ba6 -r b5453d07f740 js/scatter2D.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/scatter2D.js Wed Jul 29 17:03:53 2020 -0400
[
@@ -0,0 +1,208 @@
+// Copyright (c) 2016 Northrop Grumman.
+// All rights reserved.
+
+var updateScatter2D = function(){
+  scatterData2D['selectedPopulations'] = [];
+  scatterDataMFI['selectedPopulations'] = [];
+  $('.pop2D').each(function() {
+    if (this.checked) {
+      scatterData2D['selectedPopulations'].push(parseInt(this.value));
+      scatterDataMFI['selectedPopulations'].push(parseInt(this.value));
+    }
+  });
+  processScatterData2D();
+  processScatterDataMFI2D();
+  displayScatterPlot2D();
+};
+
+var processScatterData2D = function() {
+  var xData = [],
+      yData = [],
+      popData = [],
+      col1 = [],
+      col2 = [],
+      pop = [],
+      min = Number.MAX_VALUE,
+      max = Number.MIN_VALUE;
+
+  min = d3.min(scatterData2D['data'], function(array) {
+    return d3.min(array);
+  });
+  max = d3.max(scatterData2D['data'], function(array) {
+    return d3.max(array);
+  });
+  scatterData2D['min'] = 0;
+  scatterData2D['max'] = max;
+
+  col1 = scatterData2D['data'].map(function(value,index) {
+    return value[scatterData2D['m1']];
+  });
+  col2 = scatterData2D['data'].map(function(value,index) {
+    return value[scatterData2D['m2']];
+  });
+  pop = scatterData2D['data'].map(function(value,index) {
+    return value[scatterData2D['popCol']];
+  });
+
+  for (var i = 0, j = col1.length; i < j; i++) {
+    if (scatterData2D['selectedPopulations'].indexOf(pop[i]) >= 0) {
+      xData.push(col1[i]);
+      yData.push(col2[i]);
+      popData.push(pop[i]);
+    }
+  }
+
+  scatterData2D['popColors'] = popData.map(function(value,index) {
+      return color_palette[0][value][0];
+  });
+  scatterData2D['xData'] = xData;
+  scatterData2D['yData'] = yData;
+  scatterData2D['popData'] = popData;
+  return scatterData2D;
+};
+
+var displayScatterToolbar2D = function() {
+  $("#xAxisMarker2D").select2();
+  $("#yAxisMarker2D").select2();
+  $("#view2D").select2();
+
+  scatterData2D['columnHeadings'].map(function(value,index) {
+    $('#xAxisMarker2D')
+        .append($("<option></option>")
+        .attr("value",index)
+        .text(value));
+
+    $('#yAxisMarker2D')
+        .append($("<option></option>")
+        .attr("value",index)
+        .text(value));
+  });
+
+  $('#xAxisMarker2D').select2("val",0);
+  $('#yAxisMarker2D').select2("val",1);
+
+  $("#xAxisMarker2D").on("change",function(e) {
+    var m1 = $("#xAxisMarker2D").select2("val");
+    scatterData2D['m1'] = m1;
+    scatterDataMFI['m1'] = m1;
+    updateScatter2D();
+  });
+  $("#yAxisMarker2D").on("change",function(e) {
+    var m2 = $("#yAxisMarker2D").select2("val");
+    scatterData2D['m2'] = m2;
+    scatterDataMFI['m2'] = m2;
+    updateScatter2D();
+  });
+  $("#view2D").on("change",function(e) {
+    var view = $("#view2D").select2("val");
+    scatterData2D['view'] = view;
+    updateScatter2D();
+  });
+
+  $("#updateDisplay2D").on("click",function() {
+    $(".pop2D").prop("checked", true);
+    $("#selectall2D").prop('checked', true);
+    updateScatter2D();
+  });
+};
+
+var displayScatterPopulation2D = function() {
+  $('#populationTable2D tbody').empty();
+  scatterData2D['populations'].map(function(value,index) {
+    $('#populationTable2D tbody')
+        .append('<tr><td align="center">'
+            + '<input type="checkbox" checked class="pop2D" value='
+            + value + '/></td><td title="' + newNames[value]
+            + '">' + newNames[value] + '</td>'
+            + '<td><span style="background-color:'
+            + color_palette[0][value][0] + '">&nbsp;&nbsp;&nbsp</span></td>'
+            + '<td>' + scatterData2D['percent'][value - 1] + '</td></tr>');
+  });
+
+  $('#selectall2D').click(function() {
+    var checkAll = $("#selectall2D").prop('checked');
+    if (checkAll) {
+      $(".pop2D").prop("checked", true);
+    } else {
+      $(".pop2D").prop("checked", false);
+    }
+    updateScatter2D();
+  });
+
+  $('.pop2D').click(function() {
+    if ($('.pop2D').length == $(".pop2D:checked").length) {
+      $('#selectall2D').prop("checked",true);
+    } else {
+      $('#selectall2D').prop("checked",false);
+    }
+    updateScatter2D();
+  });
+
+  $('.pop2D').each(function() {
+    var selectedpop2D = parseInt(this.value);
+    if ($.inArray(selectedpop2D,scatterData2D['selectedPopulations']) > -1) {
+      this.checked = true;
+    } else {
+      this.checked = false;
+    }
+  });
+};
+
+var displayScatterPlot2D = function() {
+  var h = $(window).height() - 200,
+      w = $("#scatterPlotDiv2D").width(),
+      xtitle = scatterData2D['columnHeadings'][scatterData2D['m1']],
+      ytitle = scatterData2D['columnHeadings'][scatterData2D['m2']],
+      view = scatterData2D['view'],
+      layout = {},
+      traces = [];
+
+  $("#scatterPlotDiv2D").empty();
+  $("#scatterPlotDiv2D").height(h);
+  if ( view == 1 || view == 2) {
+    var trace1 = {
+        x: scatterData2D['xData'],
+        y: scatterData2D['yData'],
+        mode: 'markers',
+        opacity: .75,
+        hoverinfo: 'none',
+        marker: {
+          size: 2,
+          color: scatterData2D['popColors']
+        },
+        type: 'scatter'
+    };
+    traces.push(trace1);
+  }
+  if ( view == 1 || view == 3) {
+    var trace2 = {
+        x: scatterDataMFI['xData'],
+        y: scatterDataMFI['yData'],
+        mode: 'markers',
+        opacity: 1.0,
+        hoverinfo: "x+y",
+        marker: {
+          symbol: 128,
+          size: 8,
+          color: scatterDataMFI['popColors']
+        },
+        type: 'scatter'
+    };
+    traces.push(trace2);
+  }
+
+  layout = {
+      title: '',
+      showlegend: false,
+      xaxis: {
+          range: [0,scatterData2D['max']],
+          title: xtitle
+      },
+      yaxis: {
+          range: [0,scatterData2D['max']],
+          title: ytitle
+      }
+  };
+
+  Plotly.newPlot('scatterPlotDiv2D', traces, layout);
+};
b
diff -r 8283ff163ba6 -r b5453d07f740 js/scatter3D.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/scatter3D.js Wed Jul 29 17:03:53 2020 -0400
[
@@ -0,0 +1,267 @@
+// Copyright (c) 2016 Northrop Grumman.
+// All rights reserved.
+
+var updateScatter3D = function(){
+  scatterData3D['selectedPopulations'] = [];
+  scatterData3DMFI['selectedPopulations'] = [];
+  $('.pop3D').each(function() {
+    if (this.checked) {
+      scatterData3D['selectedPopulations'].push(parseInt(this.value));
+      scatterData3DMFI['selectedPopulations'].push(parseInt(this.value));
+    }
+  });
+  processScatterData3D();
+  processScatterData3DMFI();
+  displayScatterPlot3D();
+};
+
+var processScatterData3D = function() {
+  var xData = [],
+      yData = [],
+      zData = [],
+      popData = [],
+      pop = [],
+      col1 = [],
+      col2 = [],
+      col3 = [],
+      min = Number.MAX_VALUE,
+      max = Number.MIN_VALUE;
+
+  min = d3.min(scatterData3D['data'], function(array) {
+    return d3.min(array);
+  });
+  max = d3.max(scatterData3D['data'], function(array) {
+    return d3.max(array);
+  });
+  scatterData3D['min'] = 0;
+  scatterData3D['max'] = max;
+
+  col1 = scatterData3D['data'].map(function(value,index) {
+    return value[scatterData3D['m1']];
+  });
+  col2 = scatterData3D['data'].map(function(value,index) {
+    return value[scatterData3D['m2']];
+  });
+  col3 = scatterData3D['data'].map(function(value,index) {
+    return value[scatterData3D['m3']];
+  });
+  pop = scatterData3D['data'].map(function(value,index) {
+    return value[scatterData3D['popCol']];
+  });
+
+  for (var i = 0, j = col1.length; i < j; i++) {
+    if (scatterData3D['selectedPopulations'].indexOf(pop[i]) >= 0) {
+      xData.push(col1[i]);
+      yData.push(col2[i]);
+      zData.push(col3[i]);
+      popData.push(pop[i]);
+    }
+  }
+
+  scatterData3D['popColors'] = popData.map(function(value,index) {
+    return color_palette[0][value][0];
+  });
+  scatterData3D['xData'] = xData;
+  scatterData3D['yData'] = yData;
+  scatterData3D['zData'] = zData;
+  scatterData3D['popData'] = popData;
+  return scatterData3D;
+};
+
+var displayScatterToolbar3D = function() {
+  $("#xAxisMarker3D").select2();
+  $("#yAxisMarker3D").select2();
+  $("#zAxisMarker3D").select2();
+  $("#view3D").select2();
+
+  scatterData3D['columnHeadings'].map(function(value,index) {
+    $('#xAxisMarker3D')
+        .append($("<option></option>")
+        .attr("value",index)
+        .text(value));
+
+    $('#yAxisMarker3D')
+        .append($("<option></option>")
+        .attr("value",index)
+        .text(value));
+
+    $('#zAxisMarker3D')
+        .append($("<option></option>")
+        .attr("value",index)
+        .text(value));
+  });
+
+  $('#xAxisMarker3D').select2("val",0);
+  $('#yAxisMarker3D').select2("val",1);
+  $('#zAxisMarker3D').select2("val",2);
+
+  $("#xAxisMarker3D").on("change",function(e) {
+    var m1 = $("#xAxisMarker3D").select2("val");
+    scatterData3D['m1'] = m1;
+    scatterData3DMFI['m1'] = m1;
+    updateScatter3D();
+  });
+  $("#yAxisMarker3D").on("change",function(e) {
+    var m2 = $("#yAxisMarker3D").select2("val");
+    scatterData3D['m2'] = m2;
+    scatterData3DMFI['m2'] = m2;
+    updateScatter3D();
+  });
+  $("#zAxisMarker3D").on("change",function(e) {
+    var m3 = $("#zAxisMarker3D").select2("val");
+    scatterData3D['m3'] = m3;
+    scatterData3DMFI['m3'] = m3;
+    updateScatter3D();
+  });
+
+  $("#view3D").on("change",function(e) {
+    var view = $("#view3D").select2("val");
+    scatterData3D['view'] = view;
+    updateScatter3D();
+  });
+
+  $("#updateDisplay3D").on("click",function() {
+    $(".pop3D").prop("checked", true);
+    $("#selectall3D").prop('checked', true);
+    updateScatter3D();
+  });
+};
+
+var displayScatterPopulation3D = function() {
+  $("#populationTable3D tbody").empty();
+  scatterData3D['populations'].map(function(value) {
+    $('#populationTable3D tbody')
+        .append('<tr><td align="center">'
+                + '<input type="checkbox" checked class="pop3D" value='
+                + value + '/></td><td title="'+ newNames[value]
+                + '">'+ newNames[value] + '</td>'
+                + '<td><span style="background-color:'
+                + color_palette[0][value][0] + '">&nbsp;&nbsp;&nbsp</span></td>'
+                + '<td>' + scatterData3D['percent'][value - 1] + '</td></tr>');
+  });
+
+  $('#selectall3D').click(function() {
+    var checkAll = $("#selectall3D").prop('checked');
+    if (checkAll) {
+      $(".pop3D").prop("checked", true);
+    } else {
+      $(".pop3D").prop("checked", false);
+    }
+    updateScatter3D();
+  });
+  $('.pop3D').click(function() {
+    if ($('.pop3D').length == $(".pop3D:checked").length) {
+      $('#selectall3D').prop("checked",true);
+    } else {
+      $('#selectall3D').prop("checked",false);
+    }
+    updateScatter3D();
+  });
+
+  $('.pop3D').each(function() {
+    var selectedpop3D = parseInt(this.value);
+    if ($.inArray(selectedpop3D,scatterData3D['selectedPopulations']) > -1) {
+      this.checked = true;
+    } else {
+      this.checked = false;
+    }
+  });
+};
+
+var displayScatterPlot3D = function() {
+  var h = $(window).height() - 200,
+      w = $("#scatterPlotDiv3D").width(),
+      xtitle = scatterData3D['columnHeadings'][scatterData3D['m1']],
+      ytitle = scatterData3D['columnHeadings'][scatterData3D['m2']],
+      ztitle = scatterData3D['columnHeadings'][scatterData3D['m3']],
+      view = scatterData3D['view'],
+      traces = [],
+      layout = {};
+
+  $("#scatterPlotDiv3D").empty();
+  $("#scatterPlotDiv3D").height(h);
+
+  if ( view == 1 || view == 2 ) {
+    var trace1 = {
+        x: scatterData3D['xData'],
+        y: scatterData3D['yData'],
+        z: scatterData3D['zData'],
+        mode: 'markers',
+        opacity: .75,
+        hoverinfo: "none",
+        marker: {
+          size: 2,
+          color: scatterData3D['popColors']
+        },
+        type: 'scatter3d'
+    };
+    traces.push(trace1);
+  };
+
+  if ( view == 1 || view == 3) {
+    var trace2 = {
+        x: scatterData3DMFI['xData'],
+        y: scatterData3DMFI['yData'],
+        z: scatterData3DMFI['zData'],
+        mode: 'markers',
+        opacity: 1.0,
+        hoverinfo: "x+y+z",
+        marker: {
+          symbol: "circle-open",
+          size: 8,
+          color: scatterData3DMFI['popColors']
+        },
+        type: 'scatter3d'
+    };
+    traces.push(trace2);
+  }
+
+  layout = {
+      title: '',
+      showlegend: false,
+      scene: {
+        aspectratio: {
+          x: 1,
+          y: 1,
+          z: 1
+        },
+        camera: {
+          center: {
+            x: 0,
+            y: 0,
+            z: 0
+          },
+          eye: {
+            x: 1.25,
+            y: 1.25,
+            z: 1.25
+          },
+          up: {
+            x: 0,
+            y: 0,
+            z: 1
+          }
+        },
+        xaxis: {
+          type: 'linear',
+          title: xtitle,
+          range: [0, scatterData3D['max']],
+          zeroline: false
+        },
+        yaxis: {
+          type: 'linear',
+          title: ytitle,
+          range: [0, scatterData3D['max']],
+          zeroline: false
+        },
+        zaxis: {
+          type: 'linear',
+          title: ztitle,
+          range: [0, scatterData3D['max']],
+          zeroline: false
+        }
+      }
+  };
+
+  Plotly.newPlot('scatterPlotDiv3D', traces, layout);
+};
b
diff -r 8283ff163ba6 -r b5453d07f740 js/scatterMFI.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/scatterMFI.js Wed Jul 29 17:03:53 2020 -0400
[
@@ -0,0 +1,83 @@
+// Copyright (c) 2016 Northrop Grumman.
+// All rights reserved.
+
+var processScatterDataMFI2D = function() {
+  var xData = [],
+      yData = [],
+      popData = [],
+      col1 = [],
+      col2 = [],
+      pop = scatterDataMFI['poplist'];
+
+  col1 = scatterDataMFI['data'].map(function(value,index) {
+    return value[scatterDataMFI['m1']];
+  });
+  col2 = scatterDataMFI['data'].map(function(value,index) {
+    return value[scatterDataMFI['m2']];
+  });
+  for (var i = 0, j=col1.length; i < j; i++) {
+    if (scatterDataMFI['selectedPopulations'].indexOf(pop[i]) >= 0) {
+      xData.push(col1[i]);
+      yData.push(col2[i]);
+      popData.push(pop[i]);
+    }
+  }
+  scatterDataMFI['popColors'] = popData.map(function(value,index) {
+    return color_palette[0][value][0];
+  });
+  scatterDataMFI['xData'] = xData;
+  scatterDataMFI['yData'] = yData;
+  scatterDataMFI['popData'] = popData;
+  return scatterDataMFI;
+};
+
+var processScatterData3DMFI = function() {
+  var xData = [],
+      yData = [],
+      zData = [],
+      col1 = [],
+      col2 = [],
+      col3 = [],
+      pop = [],
+      min = Number.MAX_VALUE,
+      max = Number.MIN_VALUE,
+      popData = [];
+
+  min = d3.min(scatterData3DMFI['data'], function(array) {
+    return d3.min(array);
+  });
+  max = d3.max(scatterData3DMFI['data'], function(array) {
+    return d3.max(array);
+  });
+  scatterData3DMFI['min'] = 0;
+  scatterData3DMFI['max'] = max;
+
+  col1 = scatterData3DMFI['data'].map(function(value,index) {
+    return value[scatterData3DMFI['m1']];
+  });
+  col2 = scatterData3DMFI['data'].map(function(value,index) {
+    return value[scatterData3DMFI['m2']];
+  });
+  col3 = scatterData3DMFI['data'].map(function(value,index) {
+    return value[scatterData3DMFI['m3']];
+  });
+  pop = scatterData3DMFI['poplist'];
+
+  for (var i = 0, j = col1.length; i < j; i++) {
+    if (scatterData3DMFI['selectedPopulations'].indexOf(pop[i]) >= 0) {
+      xData.push(col1[i]);
+      yData.push(col2[i]);
+      zData.push(col3[i]);
+      popData.push(pop[i]);
+    }
+  }
+
+  scatterData3DMFI['popColors'] = popData.map(function(value,index) {
+    return color_palette[0][value][0];
+  });
+  scatterData3DMFI['xData'] = xData;
+  scatterData3DMFI['yData'] = yData;
+  scatterData3DMFI['zData'] = zData;
+  scatterData3DMFI['popData'] = popData;
+  return scatterData3DMFI;
+};
b
diff -r 8283ff163ba6 -r b5453d07f740 static/images/flowtools/bpflock.png
b
Binary file static/images/flowtools/bpflock.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 static/images/flowtools/edit_summary.png
b
Binary file static/images/flowtools/edit_summary.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 static/images/flowtools/overview.png
b
Binary file static/images/flowtools/overview.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 static/images/flowtools/pcflock.png
b
Binary file static/images/flowtools/pcflock.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 static/images/flowtools/profileCL_go.png
b
Binary file static/images/flowtools/profileCL_go.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 static/images/flowtools/scatter2D.png
b
Binary file static/images/flowtools/scatter2D.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 static/images/flowtools/scatter3D.png
b
Binary file static/images/flowtools/scatter3D.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 static/images/flowtools/summary.png
b
Binary file static/images/flowtools/summary.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 templates/genOverview.template
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/genOverview.template Wed Jul 29 17:03:53 2020 -0400
[
b'@@ -0,0 +1,280 @@\n+<html>\n+<head>\n+<title>Flow Overview</title>\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" type="text/css" href="js/Editor-1.5.6/css/editor.dataTables.css">\n+<link rel="stylesheet" href="css/parallelCoordinates.css"/>\n+\n+<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>\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="js/Editor-1.5.6/js/dataTables.editor.js" type="text/javascript"></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="js/color_palette.js" type="text/javascript"></script>\n+<script src="js/overview.js" type="text/javascript"></script>\n+<script src="js/scatter2D.js" type="text/javascript"></script>\n+<script src="js/scatter3D.js" type="text/javascript"></script>\n+<script src="js/scatterMFI.js" type="text/javascript"></script>\n+<script src="js/parallelCoordinates.js" type="text/javascript"></script>\n+<script src="js/boxplotsFlow.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+\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="mfi"><a href="#mfi" data-toggle="tab">MFI/Pop</a></li>\n+                <li class="homeTab" data-value="overviewPlot"><a href="#overviewPlot" data-toggle="tab">Overview Plot</a></li>\n+                <li class="homeTab" data-value="scatter2D"><a href="#scatter2D" data-toggle="tab">Scatter 2D</a></li>\n+                <li class="homeTab" data-value="scatter3D"><a href="#scatter3D" data-toggle="tab">Scatter 3D</a></li>\n+                <li class="homeTab" data-value="parallelCoordinates"><a href="#parallelCoordinates" data-toggle="tab">Parallel Coordinates</a></li>\n+                <li class="homeTab" data-value="stats"><a href="#boxplots" data-toggle="tab">Summary Statistics Boxplots</a></li>\n+            </ul>\n+\n+            <div class="tab-content">\n+                <div class="tab-pane active" id="mfi" style="min-height:500px;">\n+                    <div id="mfiDiv"></div>\n+                </div>\n+\n+                <div class="tab-pane" id="overviewPlot" style="min-height:500px;">\n+                    <div id="overviewPlotDiv">Overview</div>\n+                </div>\n+\n+                <div class="tab-pane" id="scatter2D" style="min-height:500px;">\n+                    <div id="toolbarDiv2D" class="col-md-12 chartDiv">\n+                    X Axis: <select id="xAxisMarker2D" style="width:150px;">\n+                            </select>\n+                    Y Axis: <select id="yAxisMarker2D" style="width:150px;">\n+                            </select>\n+ '..b'id="changeDisplay" 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="plotDivbp" class="col-md-8" style="height:100%;"></div>\n+\n+                        <div id="popDivbp" class="col-md-2" style="height:100%;">\n+                            <button id="updateDisplaybp" class="igbtn">Reset Display</button>\n+                            <table id="popTablebp" class="table table-condensed table-bordered igtable">\n+                                <thead>\n+                                    <tr>\n+                                        <th><input type="checkbox" checked id="popSelectAllbp"/></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+<script>\n+var mfiLoaded = false;\n+var populationLoaded = false;\n+var overviewPlotLoaded = false;\n+var scatter2DLoaded = false;\n+var scatter3DLoaded = false;\n+var parallelCoordinatesLoaded = false;\n+var bpLoaded = 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 == \'#mfi\') {\n+        if (mfiLoaded) {\n+            return true;\n+        }\n+        mfiLoaded = true;\n+        displayMFI();\n+      }\n+      if (tab == \'#overviewPlot\') {\n+        if (overviewPlotLoaded) {\n+            return true;\n+        }\n+        overviewPlotLoaded = true;\n+        displayOverviewPlot();\n+      }\n+      if (tab == \'#scatter2D\') {\n+        if (scatter2DLoaded) {\n+            displayScatterPopulation2D();\n+            return true;\n+        }\n+        scatter2DLoaded = true;\n+        displayScatter2D();\n+      }\n+      if (tab == \'#scatter3D\') {\n+        if (scatter3DLoaded) {\n+            displayScatterPopulation3D();\n+            return true;\n+        }\n+        scatter3DLoaded = true;\n+        displayScatter3D();\n+      }\n+      if (tab == \'#parallelCoordinates\') {\n+        if (parallelCoordinatesLoaded) {\n+            displayPopTable();\n+            displayTableGrid();\n+            return true;\n+        }\n+        parallelCoordinatesLoaded = true;\n+        displayParallelCoordinates();\n+      }\n+      if (tab == \'#boxplots\') {\n+        if (bpLoaded) {\n+            displayPopulationLegend(configbp);\n+            displayMarkerTable(configbp);\n+            updateBoxplot(configbp);\n+            return true;\n+        }\n+        bpLoaded = true;\n+        displayMFIBoxplot();\n+      }\n+    });\n+\n+    mfiLoaded = true;\n+    displayMFI();\n+});\n+</script>\n+</body>\n+</html>\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 templates/genOverviewCL.template
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/genOverviewCL.template Wed Jul 29 17:03:53 2020 -0400
[
b'@@ -0,0 +1,298 @@\n+<html>\n+<head>\n+<title>Flow Overview</title>\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" type="text/css" href="js/Editor-1.5.6/css/editor.dataTables.css">\n+<link rel="stylesheet" href="css/parallelCoordinates.css"/>\n+\n+<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>\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="js/Editor-1.5.6/js/dataTables.editor.js" type="text/javascript"></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="js/color_palette.js" type="text/javascript"></script>\n+<script src="js/overview.js" type="text/javascript"></script>\n+<script src="js/scatter2D.js" type="text/javascript"></script>\n+<script src="js/scatter3D.js" type="text/javascript"></script>\n+<script src="js/scatterMFI.js" type="text/javascript"></script>\n+<script src="js/parallelCoordinates.js" type="text/javascript"></script>\n+<script src="js/boxplotsFlow.js" type="text/javascript"></script>\n+<script src="js/profileCLs.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+\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="mfi"><a href="#mfi" data-toggle="tab">MFI/Pop</a></li>\n+                <li class="homeTab" data-value="overviewPlot"><a href="#overviewPlot" data-toggle="tab">Overview Plot</a></li>\n+                <li class="homeTab" data-value="scatter2D"><a href="#scatter2D" data-toggle="tab">Scatter 2D</a></li>\n+                <li class="homeTab" data-value="scatter3D"><a href="#scatter3D" data-toggle="tab">Scatter 3D</a></li>\n+                <li class="homeTab" data-value="parallelCoordinates"><a href="#parallelCoordinates" data-toggle="tab">Parallel Coordinates</a></li>\n+                <li class="homeTab" data-value="stats"><a href="#boxplots" data-toggle="tab">Summary Statistics Boxplots</a></li>\n+                <li class="homeTab" data-value="clprofiles"><a href="#clprofiles" data-toggle="tab">Populations Cell Ontologies</a></li>\n+            </ul>\n+\n+            <div class="tab-content">\n+                <div class="tab-pane active" id="mfi" style="min-height:500px;">\n+                    <div id="mfiDiv"></div>\n+                </div>\n+\n+                <div class="tab-pane" id="overviewPlot" style="min-height:500px;">\n+                    <div id="overviewPlotDiv">Overview</div>\n+                </div>\n+\n+                <div class="tab-pane" id="scatter2D" style="min-height:500px;">\n+                    <div id="toolbarDiv2D" class="col-md-12 chartDiv">\n+                    X Ax'..b'   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="plotDivbp" class="col-md-8" style="height:100%;"></div>\n+\n+                        <div id="popDivbp" class="col-md-2" style="height:100%;">\n+                            &nbsp;&nbsp<button id="updateDisplaybp" class="igbtn">Reset Display</button>\n+                            <table id="popTablebp" class="table table-condensed table-bordered igtable">\n+                                <thead>\n+                                    <tr>\n+                                        <th><input type="checkbox" checked id="popSelectAllbp"/></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+\n+                <div class="tab-pane" id="clprofiles" style="min-height:500px;">\n+                    <div class="row">\n+                        <div id="clprof"/>\n+                    </div>\n+                </div>\n+                </div>\n+            </div>\n+  \t    </div>\n+    </div>\n+</div>\n+\n+\n+<script>\n+var mfiLoaded = false;\n+var populationLoaded = false;\n+var overviewPlotLoaded = false;\n+var scatter2DLoaded = false;\n+var scatter3DLoaded = false;\n+var parallelCoordinatesLoaded = false;\n+var clprofilesLoaded = false;\n+var bpLoaded = 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 == \'#mfi\') {\n+        if (mfiLoaded) {\n+            return true;\n+        }\n+        mfiLoaded = true;\n+        displayMFI();\n+      }\n+      if (tab == \'#overviewPlot\') {\n+        if (overviewPlotLoaded) {\n+            return true;\n+        }\n+        overviewPlotLoaded = true;\n+        displayOverviewPlot();\n+      }\n+      if (tab == \'#scatter2D\') {\n+        if (scatter2DLoaded) {\n+            displayScatterPopulation2D();\n+            return true;\n+        }\n+        scatter2DLoaded = true;\n+        displayScatter2D();\n+      }\n+      if (tab == \'#scatter3D\') {\n+        if (scatter3DLoaded) {\n+            displayScatterPopulation3D();\n+            return true;\n+        }\n+        scatter3DLoaded = true;\n+        displayScatter3D();\n+      }\n+      if (tab == \'#parallelCoordinates\') {\n+        if (parallelCoordinatesLoaded) {\n+            displayPopTable();\n+            displayTableGrid();\n+            return true;\n+        }\n+        parallelCoordinatesLoaded = true;\n+        displayParallelCoordinates();\n+      }\n+      if (tab == \'#boxplots\') {\n+        if (bpLoaded) {\n+            displayPopulationLegend(configbp);\n+            displayMarkerTable(configbp);\n+            updateBoxplot(configbp);\n+            return true;\n+        }\n+        bpLoaded = true;\n+        displayMFIBoxplot();\n+      }\n+      if (tab == \'#clprofiles\') {\n+        if (clprofilesLoaded) {\n+            return true;\n+        }\n+        clprofilesLoaded = true;\n+        displayCLTable();\n+      }\n+    });\n+\n+    mfiLoaded = true;\n+    displayMFI();\n+});\n+</script>\n+</body>\n+</html>\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/input.flowclr
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/input.flowclr Wed Jul 29 17:03:53 2020 -0400
b
b'@@ -0,0 +1,59998 @@\n+CD4\tCCR7\tPopulation\n+392\t178\t24\n+560\t9\t10\n+345\t166\t15\n+180\t225\t21\n+123\t280\t25\n+555\t186\t1\n+521\t217\t1\n+98\t47\t6\n+182\t117\t12\n+251\t179\t26\n+160\t0\t6\n+85\t127\t6\n+0\t62\t5\n+146\t7\t6\n+446\t0\t10\n+556\t139\t18\n+138\t201\t21\n+556\t0\t10\n+96\t166\t6\n+141\t0\t5\n+525\t239\t18\n+64\t90\t6\n+551\t202\t18\n+507\t171\t1\n+106\t118\t6\n+14\t181\t6\n+181\t124\t6\n+467\t137\t1\n+200\t285\t25\n+143\t239\t21\n+506\t128\t1\n+496\t67\t10\n+157\t257\t25\n+57\t73\t5\n+511\t133\t18\n+519\t276\t1\n+160\t265\t25\n+170\t104\t12\n+470\t127\t1\n+214\t300\t25\n+535\t0\t2\n+78\t0\t6\n+135\t0\t5\n+70\t230\t21\n+32\t0\t6\n+205\t296\t25\n+28\t145\t6\n+520\t145\t1\n+533\t39\t10\n+0\t0\t5\n+495\t0\t2\n+497\t185\t18\n+147\t347\t21\n+87\t0\t6\n+30\t0\t6\n+543\t0\t10\n+92\t139\t5\n+0\t0\t6\n+567\t221\t18\n+151\t276\t21\n+518\t141\t18\n+213\t197\t22\n+549\t61\t2\n+562\t207\t18\n+5\t28\t5\n+63\t79\t6\n+120\t80\t21\n+21\t133\t5\n+141\t326\t25\n+180\t271\t21\n+114\t155\t21\n+216\t262\t25\n+0\t36\t5\n+459\t35\t2\n+85\t45\t6\n+534\t136\t1\n+24\t0\t5\n+227\t330\t25\n+554\t136\t1\n+127\t164\t21\n+201\t210\t25\n+429\t148\t18\n+160\t125\t21\n+153\t47\t5\n+76\t145\t6\n+545\t57\t10\n+134\t233\t21\n+481\t141\t1\n+516\t168\t1\n+174\t231\t21\n+470\t158\t1\n+128\t121\t12\n+467\t147\t1\n+133\t200\t12\n+318\t0\t15\n+181\t273\t25\n+526\t254\t1\n+223\t121\t15\n+121\t124\t21\n+57\t171\t6\n+164\t302\t21\n+382\t286\t22\n+71\t237\t21\n+500\t137\t1\n+501\t0\t2\n+519\t190\t18\n+488\t165\t1\n+523\t42\t2\n+475\t86\t2\n+538\t0\t2\n+26\t22\t6\n+157\t174\t21\n+548\t21\t10\n+203\t234\t25\n+161\t283\t25\n+60\t127\t6\n+522\t0\t2\n+69\t235\t21\n+63\t142\t6\n+171\t277\t25\n+177\t252\t21\n+138\t0\t5\n+73\t226\t21\n+529\t194\t1\n+99\t0\t6\n+0\t192\t5\n+145\t243\t21\n+579\t0\t2\n+555\t216\t1\n+525\t132\t18\n+213\t204\t21\n+202\t253\t25\n+53\t0\t6\n+0\t77\t6\n+58\t247\t21\n+546\t0\t10\n+144\t286\t25\n+84\t0\t5\n+101\t120\t5\n+564\t148\t18\n+498\t0\t10\n+576\t280\t1\n+217\t280\t21\n+0\t16\t5\n+111\t135\t6\n+514\t13\t2\n+287\t135\t15\n+330\t440\t23\n+398\t471\t23\n+567\t109\t1\n+0\t242\t6\n+215\t178\t21\n+586\t0\t2\n+56\t261\t21\n+93\t233\t25\n+128\t140\t12\n+550\t129\t1\n+105\t0\t5\n+493\t138\t18\n+112\t88\t12\n+518\t178\t18\n+510\t220\t1\n+491\t0\t10\n+552\t117\t3\n+459\t156\t22\n+87\t87\t6\n+55\t135\t6\n+148\t117\t6\n+174\t237\t25\n+237\t264\t25\n+169\t195\t12\n+119\t204\t25\n+43\t0\t6\n+558\t190\t1\n+581\t66\t2\n+180\t265\t25\n+118\t199\t21\n+155\t229\t21\n+494\t0\t2\n+400\t236\t22\n+264\t150\t21\n+37\t0\t6\n+538\t79\t10\n+226\t218\t25\n+538\t90\t2\n+544\t146\t1\n+330\t451\t17\n+547\t108\t1\n+166\t236\t21\n+126\t0\t6\n+519\t107\t10\n+520\t0\t2\n+81\t82\t5\n+222\t231\t25\n+495\t45\t2\n+277\t300\t25\n+554\t224\t18\n+558\t144\t1\n+112\t134\t6\n+512\t206\t1\n+407\t178\t24\n+516\t166\t18\n+283\t377\t16\n+528\t147\t1\n+501\t24\t2\n+140\t113\t6\n+555\t0\t2\n+470\t0\t2\n+46\t37\t6\n+562\t222\t18\n+7\t18\t6\n+24\t102\t6\n+227\t331\t25\n+155\t74\t5\n+538\t0\t10\n+542\t177\t1\n+12\t160\t6\n+180\t305\t21\n+0\t149\t6\n+541\t10\t10\n+120\t227\t21\n+504\t81\t2\n+535\t196\t18\n+536\t243\t18\n+503\t45\t2\n+112\t205\t12\n+212\t203\t12\n+542\t174\t18\n+287\t237\t24\n+75\t98\t6\n+161\t247\t21\n+167\t301\t25\n+164\t531\t9\n+524\t58\t2\n+564\t267\t1\n+500\t81\t2\n+538\t187\t1\n+555\t129\t18\n+61\t39\t6\n+524\t136\t1\n+492\t144\t18\n+105\t263\t21\n+539\t287\t1\n+538\t0\t10\n+135\t174\t21\n+527\t170\t1\n+529\t86\t10\n+196\t278\t25\n+201\t295\t25\n+232\t258\t21\n+165\t3\t6\n+173\t154\t21\n+588\t148\t1\n+79\t263\t21\n+501\t70\t10\n+132\t184\t21\n+518\t173\t18\n+486\t0\t10\n+460\t0\t2\n+535\t216\t18\n+197\t303\t25\n+158\t180\t21\n+159\t117\t21\n+541\t158\t1\n+552\t217\t18\n+0\t88\t5\n+164\t272\t21\n+286\t12\t15\n+578\t0\t2\n+538\t0\t2\n+13\t0\t6\n+91\t75\t6\n+78\t212\t21\n+532\t190\t1\n+62\t0\t6\n+540\t173\t18\n+511\t190\t18\n+551\t44\t10\n+420\t152\t22\n+226\t306\t25\n+88\t119\t4\n+180\t258\t21\n+79\t305\t21\n+84\t0\t6\n+493\t0\t10\n+78\t156\t6\n+162\t210\t25\n+155\t0\t6\n+512\t275\t18\n+33\t195\t21\n+549\t46\t2\n+74\t280\t21\n+13\t126\t6\n+467\t263\t18\n+424\t254\t24\n+188\t308\t25\n+19\t167\t6\n+185\t189\t25\n+188\t267\t25\n+18\t80\t6\n+132\t265\t21\n+441\t143\t1\n+153\t255\t7\n+526\t105\t2\n+72\t109\t6\n+524\t213\t1\n+511\t226\t1\n+31\t0\t5\n+0\t36\t5\n+496\t0\t2\n+134\t245\t21\n+532\t141\t18\n+83\t230\t12\n+505\t26\t2\n+550\t204\t18\n+244\t348\t25\n+36\t0\t6\n+0\t81\t6\n+540\t7\t2\n+522\t152\t1\n+111\t158\t6\n+450\t116\t1\n+545\t0\t2\n+214\t230\t25\n+538\t0\t10\n+538\t44\t2\n+16\t0\t6\n+0\t14\t5\n+137\t227\t21\n+480\t165\t18\n+528\t188\t1\n+112\t169\t21\n+492\t8\t2\n+495\t0\t2\n+157\t205\t25\n+508\t0\t10\n+495\t136\t1\n+12\t240\t21\n+525\t108\t1\n+593\t20\t2\n+485\t0\t2\n+196\t167\t21\n+488\t169\t18\n+107\t277\t21\n+139\t265\t21\n+77\t200\t21\n+565\t136\t1\n+185\t263\t21\n+51\t0\t5\n+281\t349\t26\n+520\t0\t10\n+557\t160\t18\n+537\t0\t2\n+109\t255\t21\n+501\t0\t10\n+497\t22\t2\n+128\t261\t25\n+558\t10\t10\n+548\t0\t2\n+570\t76\t10\n+390\t296\t22\n+0\t0\t5\n+122\t51\t5\n+508\t145\t18\n+114\t258\t21\n+552\t201\t18\n+145\t0\t6\n+36\t262\t21\n+192\t291'..b'7\n+81\t420\t7\n+248\t374\t23\n+116\t303\t25\n+170\t280\t21\n+385\t152\t24\n+556\t523\t14\n+148\t290\t21\n+109\t190\t12\n+44\t418\t7\n+108\t428\t20\n+183\t282\t25\n+445\t358\t26\n+477\t0\t10\n+156\t498\t20\n+109\t430\t20\n+131\t221\t12\n+82\t346\t7\n+387\t260\t24\n+34\t56\t5\n+452\t0\t2\n+499\t474\t14\n+99\t277\t25\n+139\t243\t25\n+365\t453\t23\n+60\t435\t7\n+130\t77\t6\n+509\t294\t1\n+89\t159\t25\n+120\t176\t21\n+510\t83\t2\n+97\t345\t7\n+102\t486\t20\n+561\t139\t18\n+72\t502\t20\n+71\t631\t16\n+11\t279\t7\n+20\t280\t21\n+76\t448\t20\n+163\t323\t25\n+513\t341\t1\n+165\t201\t21\n+104\t466\t20\n+318\t268\t22\n+525\t581\t14\n+184\t438\t20\n+115\t251\t25\n+377\t308\t24\n+549\t174\t1\n+294\t443\t26\n+32\t281\t21\n+161\t264\t21\n+471\t0\t10\n+36\t0\t5\n+145\t291\t25\n+456\t181\t1\n+421\t522\t14\n+356\t455\t23\n+270\t272\t15\n+523\t230\t18\n+550\t0\t2\n+547\t156\t1\n+185\t273\t21\n+512\t144\t1\n+320\t177\t15\n+586\t722\t17\n+523\t0\t2\n+161\t212\t21\n+383\t232\t22\n+491\t161\t1\n+545\t80\t10\n+515\t278\t18\n+365\t449\t23\n+0\t530\t20\n+74\t342\t7\n+0\t65\t5\n+558\t0\t2\n+532\t170\t18\n+55\t0\t5\n+124\t244\t12\n+492\t0\t2\n+496\t456\t14\n+542\t1\t2\n+336\t467\t23\n+177\t274\t25\n+350\t249\t24\n+530\t0\t10\n+576\t639\t17\n+26\t389\t7\n+523\t186\t1\n+166\t256\t25\n+537\t125\t1\n+16\t373\t7\n+370\t461\t23\n+248\t342\t26\n+102\t71\t5\n+540\t180\t18\n+97\t229\t12\n+168\t294\t25\n+545\t70\t10\n+130\t322\t21\n+498\t560\t14\n+1\t412\t7\n+558\t174\t18\n+551\t155\t1\n+123\t269\t21\n+0\t619\t20\n+171\t323\t25\n+513\t297\t1\n+180\t610\t16\n+532\t4\t10\n+74\t279\t7\n+86\t505\t20\n+123\t500\t20\n+73\t92\t5\n+0\t272\t7\n+533\t448\t14\n+0\t35\t5\n+65\t183\t6\n+319\t91\t15\n+313\t388\t25\n+522\t0\t10\n+50\t342\t12\n+72\t447\t20\n+203\t320\t25\n+516\t180\t18\n+70\t293\t7\n+75\t662\t20\n+90\t0\t5\n+341\t150\t15\n+78\t550\t20\n+91\t548\t20\n+203\t299\t21\n+557\t44\t10\n+543\t57\t10\n+526\t158\t1\n+96\t135\t21\n+510\t91\t10\n+44\t0\t5\n+146\t674\t16\n+501\t21\t10\n+102\t195\t21\n+40\t99\t5\n+543\t519\t14\n+510\t546\t14\n+122\t229\t21\n+559\t660\t14\n+545\t651\t17\n+482\t127\t1\n+331\t129\t15\n+537\t267\t1\n+507\t0\t10\n+260\t253\t21\n+0\t23\t6\n+162\t250\t25\n+52\t644\t20\n+403\t661\t13\n+523\t55\t2\n+517\t21\t10\n+513\t603\t14\n+213\t263\t25\n+234\t301\t12\n+165\t451\t20\n+63\t545\t20\n+534\t99\t2\n+197\t332\t26\n+119\t238\t21\n+121\t302\t7\n+287\t560\t26\n+207\t265\t25\n+266\t296\t25\n+278\t288\t25\n+381\t285\t24\n+513\t234\t18\n+176\t117\t6\n+585\t648\t17\n+499\t135\t18\n+493\t0\t2\n+90\t138\t12\n+555\t140\t1\n+182\t294\t25\n+130\t266\t21\n+527\t0\t10\n+208\t258\t25\n+522\t643\t14\n+126\t219\t21\n+487\t169\t1\n+524\t0\t10\n+144\t250\t21\n+486\t574\t14\n+531\t0\t10\n+129\t324\t25\n+202\t288\t21\n+531\t186\t18\n+537\t265\t1\n+144\t274\t12\n+9\t220\t12\n+529\t123\t1\n+101\t276\t21\n+227\t99\t21\n+203\t281\t25\n+48\t491\t20\n+129\t324\t21\n+161\t310\t25\n+520\t160\t1\n+92\t234\t12\n+54\t240\t21\n+154\t248\t21\n+358\t289\t18\n+121\t454\t20\n+212\t166\t21\n+458\t0\t2\n+0\t90\t5\n+411\t133\t24\n+256\t430\t16\n+489\t574\t14\n+249\t216\t25\n+231\t304\t25\n+155\t275\t25\n+170\t261\t21\n+210\t251\t25\n+78\t426\t20\n+0\t555\t16\n+0\t556\t20\n+513\t636\t14\n+217\t284\t25\n+169\t284\t21\n+509\t0\t10\n+558\t200\t1\n+180\t66\t6\n+487\t207\t18\n+168\t238\t21\n+505\t344\t1\n+39\t0\t5\n+206\t283\t21\n+524\t495\t14\n+123\t717\t20\n+572\t48\t2\n+178\t218\t12\n+482\t322\t26\n+551\t11\t10\n+502\t194\t1\n+196\t309\t25\n+547\t265\t18\n+42\t442\t20\n+106\t620\t16\n+130\t548\t20\n+566\t275\t18\n+523\t0\t2\n+398\t521\t14\n+93\t317\t25\n+554\t87\t10\n+174\t282\t25\n+77\t99\t5\n+136\t483\t20\n+138\t315\t25\n+168\t289\t25\n+42\t89\t6\n+219\t280\t25\n+549\t59\t10\n+97\t142\t25\n+0\t502\t20\n+149\t626\t20\n+180\t282\t25\n+0\t449\t20\n+541\t0\t10\n+528\t0\t2\n+26\t332\t7\n+81\t460\t20\n+134\t268\t25\n+431\t413\t14\n+129\t436\t20\n+345\t440\t26\n+573\t0\t10\n+154\t309\t25\n+419\t447\t13\n+564\t547\t14\n+16\t266\t7\n+262\t325\t26\n+169\t235\t25\n+42\t121\t5\n+204\t293\t25\n+302\t360\t26\n+112\t348\t12\n+534\t0\t2\n+0\t235\t12\n+517\t82\t10\n+69\t162\t21\n+83\t493\t20\n+73\t239\t21\n+488\t167\t1\n+341\t417\t26\n+163\t251\t21\n+0\t0\t6\n+549\t4\t10\n+202\t338\t25\n+546\t232\t18\n+39\t483\t16\n+183\t284\t25\n+0\t49\t5\n+232\t304\t25\n+195\t220\t25\n+0\t313\t7\n+522\t446\t14\n+231\t499\t24\n+185\t158\t21\n+146\t268\t21\n+127\t446\t20\n+103\t200\t21\n+120\t326\t7\n+560\t941\t19\n+124\t245\t21\n+112\t537\t16\n+121\t577\t20\n+173\t209\t21\n+417\t275\t22\n+25\t467\t20\n+475\t194\t1\n+144\t238\t12\n+128\t249\t21\n+81\t248\t7\n+145\t241\t21\n+216\t247\t25\n+465\t3\t10\n+389\t445\t23\n+569\t50\t2\n+160\t239\t25\n+519\t149\t1\n+552\t496\t14\n+129\t131\t6\n+439\t0\t10\n+195\t44\t21\n+568\t647\t14\n+342\t638\t23\n+145\t229\t21\n+348\t422\t23\n+406\t271\t24\n+548\t203\t1\n+102\t319\t12\n+333\t0\t15\n+510\t77\t2\n+544\t190\t18\n+54\t239\t7\n+431\t508\t26\n+543\t582\t14\n+74\t259\t21\n+143\t286\t21\n+467\t305\t26\n+504\t178\t1\n+0\t154\t5\n+169\t312\t25\n+185\t203\t21\n+521\t15\t2\n+553\t220\t18\n+44\t467\t20\n+470\t183\t1\n+58\t265\t25\n+523\t287\t18\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out1/boxplotData.json
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out1/boxplotData.json Wed Jul 29 17:03:53 2020 -0400
[
b'@@ -0,0 +1,1 @@\n+{"lower": {"CD4":{"1":444.5,"2":443.5,"3":435.25,"4":-102.5,"5":-106.5,"6":-76.0,"7":-68.5,"8":449.5,"9":-68.0,"10":444.5,"11":-65.5,"12":-25.25,"13":415.0,"14":433.5,"15":195.75,"16":-57.375,"17":377.5,"18":447.0,"19":237.0,"20":-68.0,"21":24.5,"22":252.5,"23":272.5,"24":276.375,"25":72.5,"26":-10.5},"CCR7":{"1":38.5,"2":-109.5,"3":-183.0,"4":-117.0,"5":-175.5,"6":-157.5,"7":68.5,"8":73.0,"9":140.375,"10":-94.5,"11":-128.0,"12":27.5,"13":137.875,"14":344.5,"15":-182.5,"16":264.5,"17":405.125,"18":40.5,"19":207.5,"20":254.0,"21":97.0,"22":11.5,"23":370.375,"24":21.5,"25":172.5,"26":201.375}}, "mfi": {"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},"CCR7":{"1":188,"2":37,"3":69,"4":141,"5":68,"6":90,"7":318,"8":258,"9":420,"10":31,"11":111,"12":213,"13":424,"14":566,"15":84,"16":510,"17":598,"18":199,"19":629,"20":534,"21":224,"22":204,"23":476,"24":204,"25":269,"26":343}}, "outliers": {"CD4":{"1":[357,418,338,436,398,348,418,434,384,441,423,423,367,349,427,434,397,413,409,438,343,437,354,440,421,350,382,443,406,368,444,421,379,405,421,441,377,380,354,413,442,434,371,377,443,403,381,361,361,405,421,441,433,359,354,417,323,350,332,338,439,425,408,414,355,439,430,404,440,444,410,399,609,441,439,419,433,443,371,304,405,389,440,439,432,439,444,441,415,393,430,626,413,383,393,427,416,393,429,406],"2":[428,409,398,414,392,439,416,613,422,437,442,420,441,424,429,424,418,428,433,400,443,354,395,637,417,608,611,439,408,440,434,396,613,385,432,440,378,424,440,609,377,412,422,407,359,377,418,417,623,428,421,418,413,360,431,385,369,424,417,441],"3":[406,428,364,342,413,403,432,426,435,306,365,430,374,391,389,400,423,339,426,397,309,368,413,435,434,428,388,432,396,428,409,344,429,377,424,433,604,594,422,357,420,319,432,434,432,419,427,435,429,371,431,599,324,435,599,358,419,434,433,337,405],"4":[356,389,342,344,281,428,428,265,365,436,303,295,385,314,315,342,391,332,420,374,434,288,281,414,337,337,404,432,344,469,305],"5":[],"6":[281,223,349,356,256,241,327,344,357,252,303,296,249,276,238,261,296,253,305,259,259,251,237,305,330,392,279,451,409,305,435,278,299,322,369,311,298,297,265,221,243,244,303,405],"7":[321,235,234,349,242,248,292,317,252,277,241,232,237],"8":[381,444,426,424,449,447,415,437,378,441,433,446,447,613,394,338,426,428,431,426,420,384,438,640,411,447,419,322,606,356,412,439,618,607,426,447,437,433,415,413,386,440,345,436,439,445,341,441,590,447,378,402,446,448,447,439,447,618,644,285,443,445,424,442,423,405,391,381,448,440,429,417,400,389,443,393,429],"9":[340,353,359,458,350,563,349,375,363,330,348,326,509,427,352,385,406,389,401],"10":[442,433,435,422,425,434,423,401,394,412,426,393,434,621,395,438,444,432,416,443,424,427,433,444,441,645,432,419,372,430,440,424,615,425,441,423,429,438,443,429,418,433,425,414,393,408,420,399,422,415,393,437,443,412,432,439,412,417,439,437,415,422,440,434,444,434,436,399,386,436,434,439],"11":[258,242,251,313,256,242,271,244,247,252],"12":[263,293,257,315,314,273,303,266,305,265,258,267,271,295,276,281,273,301,323,312,331,353,308,281,296,359,275,273,289,286,309,291,323,305,271,272,301,282,293,307,330,265,277,270,292,321,314,277,316,319,272,276,280,270,264,257,292,340,318,292],"13":[348,407,398,384,381,352,300,414,339,400,396,359,409,312,388,399,375,377,360,401,406,366,409,387,394,367,404,403,392,304,394,349,639,357,367,411,312,407,377,358,411,354,346,312,387,319,367,365,403],"14":[359,406,386,432,390,624,388,426,377,390,431,416,421,398,431],"15":[189],"16":[283,290,261,348,290,365,266,318,259,298,260,282,271,291,277,313,299,263,264,319,262,278,256],"17":[330,369,331,261,330,295,368,313,373,326,263,223,299,376,215,359,368,363,305,248,343,352,364,327,304,370,368,344],"18":[429,436,374,427,610,357,351,419,393,336,405,434,375,431,380,611,445,410,435,441,429,334,444,638,410,444,403,335,443,433,446,374,'..b'1,355,365,371,384,377,349,388,367,380,401,378,379,371,371,375,358,355],"19":[],"20":[],"21":[0,0,27,18,96,367,56,40,86,89,14,67,70,60,62,67,63,0,74,84,0,381,51,32,84,94,6,58,76,82,372,42,59,54,90,83,77,86,82,26,0,10,368,66,30,15,362,71,26,0,93,58,80,22,63,84,368,83,96,15,90,68,0,12,69,12,0,0,0,43,0,44,20,76,80,85,74,74,32,383,78,40,66,86,0,81,0,17,56,70,73,61,60,381,89,63,6,73,49,90],"22":[7,0,0,0,0,422,0,0,5,6,0,0,0,0,0,0,0,0,0,412,0,0,0,0,0,0,0,0,0,1,0,0,0,6,0,0,0,0,0,0,0,0,0,430,446,0,0,421],"23":[368,685,615,588,747,874,798,677,635,637,578,849,856,725,952,647,822,578,738,250,677,615,742,615,603,256,236,574,657,675,661,584,299,327,638,340,599,271,321,332,332,607,355,570,607,572,328,589,584,311,312,700,590,659,613,361,356,253,292,347,707,654,360,771,684,342,640,608,837,920,579,907,835,569,594,667,800,597,786,731,595,890,800,637,692,727,643,685,358,710,587,609,978,750,335,753,638],"24":[0,0,0,5,0,0,0,15,0,6,0,4,0,0,7,0,4,0,0,18,0,4,0,0,0,0,0,0,21,0,0,0,407,0,4,0,494,0,2,19,7,496,0,468,0,0,499],"25":[148,150,142,114,117,168,145,463,172,385,378,170,143,166,430,150,88,418,416,397,131,453,165,171,158,82,395,166,163,392,152,126,163,161,165,167,142,375,168,161,147,157,120,166,110,117,412,165,148,379,162,160,98,160,163,133,169,156,162,445,399,156,168,164,169,129,6,381,446,159,479,141,156,404,149,159,122,155,131,128,164,169,379,429,164,135,372,164,170,171,157,487,396,140,417,171,134,136,98,67],"26":[179,138,193,500,496,475,478,521,164,479,478,183,560,483,503,485,479,160,513,175,482,523,199,184,189,512,535,499,603,161,482,515,521,526,546,482,531,506,543,507,479,495,617,526,482,501,622,479,478,492,489,484,534,495,492,476,560,487,560,508]}}, "q1": {"CD4":{"1":503.0,"2":505.0,"3":494.5,"4":31.0,"5":12.0,"6":35.0,"7":44.0,"8":502.0,"9":79.0,"10":503.0,"11":47.0,"12":80.5,"13":493.0,"14":504.0,"15":291.0,"16":60.0,"17":484.0,"18":507.0,"19":426.0,"20":43.0,"21":116.0,"22":359.0,"23":343.0,"24":366.0,"25":155.0,"26":246.0},"CCR7":{"1":148.0,"2":0.0,"3":0.0,"4":75.0,"5":0.0,"6":24.0,"7":256.0,"8":205.0,"9":339.5,"10":0.0,"11":49.0,"12":164.0,"13":352.0,"14":514.0,"15":8.0,"16":443.0,"17":547.25,"18":156.0,"19":515.0,"20":464.0,"21":196.0,"22":160.0,"23":442.0,"24":164.0,"25":246.0,"26":303.75}}, "q2": {"CD4":{"1":524.0,"2":526.0,"3":516.0,"4":77.0,"5":52.0,"6":72.0,"7":85.0,"8":520.0,"9":125.5,"10":524.0,"11":86.0,"12":115.0,"13":521.0,"14":530.0,"15":324.0,"16":101.5,"17":529.5,"18":528.0,"19":480.0,"20":84.0,"21":147.0,"22":398.0,"23":365.0,"24":400.0,"25":184.0,"26":296.0},"CCR7":{"1":182.0,"2":21.0,"3":68.0,"4":147.0,"5":61.0,"6":95.0,"7":323.0,"8":244.0,"9":404.5,"10":11.0,"11":114.0,"12":210.0,"13":426.0,"14":580.5,"15":88.0,"16":502.0,"17":603.0,"18":193.0,"19":593.0,"20":515.0,"21":234.0,"22":215.0,"23":465.0,"24":217.0,"25":272.0,"26":334.0}}, "q3": {"CD4":{"1":542.0,"2":546.0,"3":534.0,"4":120.0,"5":91.0,"6":109.0,"7":119.0,"8":537.0,"9":177.0,"10":542.0,"11":122.0,"12":151.0,"13":545.0,"14":551.0,"15":354.5,"16":138.25,"17":555.0,"18":547.0,"19":552.0,"20":117.0,"21":177.0,"22":430.0,"23":390.0,"24":425.75,"25":210.0,"26":417.0},"CCR7":{"1":221.0,"2":73.0,"3":122.0,"4":203.0,"5":117.0,"6":145.0,"7":381.0,"8":293.0,"9":472.25,"10":63.0,"11":167.0,"12":255.0,"13":494.75,"14":627.0,"15":135.0,"16":562.0,"17":642.0,"18":233.0,"19":720.0,"20":604.0,"21":262.0,"22":259.0,"23":489.75,"24":259.0,"25":295.0,"26":372.0}}, "upper": {"CD4":{"1":600.5,"2":607.5,"3":593.25,"4":253.5,"5":209.5,"6":220.0,"7":231.5,"8":589.5,"9":324.0,"10":600.5,"11":234.5,"12":256.75,"13":623.0,"14":621.5,"15":449.75,"16":255.625,"17":661.5,"18":607.0,"19":741.0,"20":228.0,"21":268.5,"22":536.5,"23":460.5,"24":515.375,"25":292.5,"26":673.5},"CCR7":{"1":330.5,"2":182.5,"3":305.0,"4":395.0,"5":292.5,"6":326.5,"7":568.5,"8":425.0,"9":671.375,"10":157.5,"11":344.0,"12":391.5,"13":708.875,"14":796.5,"15":325.5,"16":740.5,"17":784.125,"18":348.5,"19":1027.5,"20":814.0,"21":361.0,"22":407.5,"23":561.375,"24":401.5,"25":368.5,"26":474.375}}}\n\\ No newline at end of file\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out1/flow.mfi
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out1/flow.mfi Wed Jul 29 17:03:53 2020 -0400
b
@@ -0,0 +1,27 @@
+Population CD4 CCR7
+1 520 188
+2 523 37
+3 512 69
+4 84 141
+5 56 68
+6 75 90
+7 83 318
+8 517 258
+9 138 420
+10 521 31
+11 85 111
+12 119 213
+13 516 424
+14 526 566
+15 322 84
+16 104 510
+17 509 598
+18 524 199
+19 490 629
+20 82 534
+21 145 224
+22 389 204
+23 366 476
+24 392 204
+25 182 269
+26 325 343
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out1/flow.mfi_pop
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out1/flow.mfi_pop Wed Jul 29 17:03:53 2020 -0400
b
@@ -0,0 +1,27 @@
+CD4 CCR7 Count Percentage Population
+519.72 187.88 3842 6.40 1
+522.94 37.10 2765 4.61 2
+512.11 68.72 2163 3.61 3
+83.54 141.19 1207 2.01 4
+55.56 67.51 2332 3.89 5
+75.33 90.47 3969 6.62 6
+82.72 318.03 1809 3.02 7
+517.07 257.64 2260 3.77 8
+138.25 419.51 342 0.57 9
+520.67 31.29 3497 5.83 10
+85.41 110.92 1903 3.17 11
+119.09 212.60 1599 2.67 12
+515.81 423.78 2238 3.73 13
+525.80 565.61 930 1.55 14
+322.30 84.31 555 0.93 15
+103.98 509.50 872 1.45 16
+509.05 597.98 362 0.60 17
+524.02 198.53 2601 4.34 18
+489.73 629.26 341 0.57 19
+81.83 534.25 1750 2.92 20
+144.71 224.04 9174 15.29 21
+388.94 203.73 1401 2.34 22
+365.75 476.01 1058 1.76 23
+392.21 204.17 1166 1.94 24
+181.69 268.60 8725 14.54 25
+325.42 342.86 1136 1.89 26
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out1/flow.overview
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out1/flow.overview Wed Jul 29 17:03:53 2020 -0400
b
@@ -0,0 +1,13 @@
+<table>
+<tr><td>&nbsp;</td>
+<td>CD4</td>
+<td>CCR7</td>
+<tr>
+<td>CD4</td>
+<td><img src="m0_m0_90X90.png"/></td><td><img src="m1_m0_90X90.png"/></td></tr>
+<tr>
+<td>CCR7</td>
+<td><img src="m0_m1_90X90.png"/></td><td><img src="m1_m1_90X90.png"/></td></tr>
+</table>
+</body>
+<html>
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out1/flow.sample
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out1/flow.sample Wed Jul 29 17:03:53 2020 -0400
b
b'@@ -0,0 +1,20001 @@\n+CD4\tCCR7\tPopulation\n+392\t178\t24\n+560\t9\t10\n+345\t166\t15\n+180\t225\t21\n+123\t280\t25\n+555\t186\t1\n+521\t217\t1\n+98\t47\t6\n+182\t117\t12\n+251\t179\t26\n+160\t0\t6\n+85\t127\t6\n+0\t62\t5\n+146\t7\t6\n+446\t0\t10\n+556\t139\t18\n+138\t201\t21\n+556\t0\t10\n+96\t166\t6\n+141\t0\t5\n+525\t239\t18\n+64\t90\t6\n+551\t202\t18\n+507\t171\t1\n+106\t118\t6\n+14\t181\t6\n+181\t124\t6\n+467\t137\t1\n+200\t285\t25\n+143\t239\t21\n+506\t128\t1\n+496\t67\t10\n+157\t257\t25\n+57\t73\t5\n+511\t133\t18\n+519\t276\t1\n+160\t265\t25\n+170\t104\t12\n+470\t127\t1\n+214\t300\t25\n+535\t0\t2\n+78\t0\t6\n+135\t0\t5\n+70\t230\t21\n+32\t0\t6\n+205\t296\t25\n+28\t145\t6\n+520\t145\t1\n+533\t39\t10\n+0\t0\t5\n+495\t0\t2\n+497\t185\t18\n+147\t347\t21\n+87\t0\t6\n+30\t0\t6\n+543\t0\t10\n+92\t139\t5\n+0\t0\t6\n+567\t221\t18\n+151\t276\t21\n+518\t141\t18\n+213\t197\t22\n+549\t61\t2\n+562\t207\t18\n+5\t28\t5\n+63\t79\t6\n+120\t80\t21\n+21\t133\t5\n+141\t326\t25\n+180\t271\t21\n+114\t155\t21\n+216\t262\t25\n+0\t36\t5\n+459\t35\t2\n+85\t45\t6\n+534\t136\t1\n+24\t0\t5\n+227\t330\t25\n+554\t136\t1\n+127\t164\t21\n+201\t210\t25\n+429\t148\t18\n+160\t125\t21\n+153\t47\t5\n+76\t145\t6\n+545\t57\t10\n+134\t233\t21\n+481\t141\t1\n+516\t168\t1\n+174\t231\t21\n+470\t158\t1\n+128\t121\t12\n+467\t147\t1\n+133\t200\t12\n+318\t0\t15\n+181\t273\t25\n+526\t254\t1\n+223\t121\t15\n+121\t124\t21\n+57\t171\t6\n+164\t302\t21\n+382\t286\t22\n+71\t237\t21\n+500\t137\t1\n+501\t0\t2\n+519\t190\t18\n+488\t165\t1\n+523\t42\t2\n+475\t86\t2\n+538\t0\t2\n+26\t22\t6\n+157\t174\t21\n+548\t21\t10\n+203\t234\t25\n+161\t283\t25\n+60\t127\t6\n+522\t0\t2\n+69\t235\t21\n+63\t142\t6\n+171\t277\t25\n+177\t252\t21\n+138\t0\t5\n+73\t226\t21\n+529\t194\t1\n+99\t0\t6\n+0\t192\t5\n+145\t243\t21\n+579\t0\t2\n+555\t216\t1\n+525\t132\t18\n+213\t204\t21\n+202\t253\t25\n+53\t0\t6\n+0\t77\t6\n+58\t247\t21\n+546\t0\t10\n+144\t286\t25\n+84\t0\t5\n+101\t120\t5\n+564\t148\t18\n+498\t0\t10\n+576\t280\t1\n+217\t280\t21\n+0\t16\t5\n+111\t135\t6\n+514\t13\t2\n+287\t135\t15\n+330\t440\t23\n+398\t471\t23\n+567\t109\t1\n+0\t242\t6\n+215\t178\t21\n+586\t0\t2\n+56\t261\t21\n+93\t233\t25\n+128\t140\t12\n+550\t129\t1\n+105\t0\t5\n+493\t138\t18\n+112\t88\t12\n+518\t178\t18\n+510\t220\t1\n+491\t0\t10\n+552\t117\t3\n+459\t156\t22\n+87\t87\t6\n+55\t135\t6\n+148\t117\t6\n+174\t237\t25\n+237\t264\t25\n+169\t195\t12\n+119\t204\t25\n+43\t0\t6\n+558\t190\t1\n+581\t66\t2\n+180\t265\t25\n+118\t199\t21\n+155\t229\t21\n+494\t0\t2\n+400\t236\t22\n+264\t150\t21\n+37\t0\t6\n+538\t79\t10\n+226\t218\t25\n+538\t90\t2\n+544\t146\t1\n+330\t451\t17\n+547\t108\t1\n+166\t236\t21\n+126\t0\t6\n+519\t107\t10\n+520\t0\t2\n+81\t82\t5\n+222\t231\t25\n+495\t45\t2\n+277\t300\t25\n+554\t224\t18\n+558\t144\t1\n+112\t134\t6\n+512\t206\t1\n+407\t178\t24\n+516\t166\t18\n+283\t377\t16\n+528\t147\t1\n+501\t24\t2\n+140\t113\t6\n+555\t0\t2\n+470\t0\t2\n+46\t37\t6\n+562\t222\t18\n+7\t18\t6\n+24\t102\t6\n+227\t331\t25\n+155\t74\t5\n+538\t0\t10\n+542\t177\t1\n+12\t160\t6\n+180\t305\t21\n+0\t149\t6\n+541\t10\t10\n+120\t227\t21\n+504\t81\t2\n+535\t196\t18\n+536\t243\t18\n+503\t45\t2\n+112\t205\t12\n+212\t203\t12\n+542\t174\t18\n+287\t237\t24\n+75\t98\t6\n+161\t247\t21\n+167\t301\t25\n+164\t531\t9\n+524\t58\t2\n+564\t267\t1\n+500\t81\t2\n+538\t187\t1\n+555\t129\t18\n+61\t39\t6\n+524\t136\t1\n+492\t144\t18\n+105\t263\t21\n+539\t287\t1\n+538\t0\t10\n+135\t174\t21\n+527\t170\t1\n+529\t86\t10\n+196\t278\t25\n+201\t295\t25\n+232\t258\t21\n+165\t3\t6\n+173\t154\t21\n+588\t148\t1\n+79\t263\t21\n+501\t70\t10\n+132\t184\t21\n+518\t173\t18\n+486\t0\t10\n+460\t0\t2\n+535\t216\t18\n+197\t303\t25\n+158\t180\t21\n+159\t117\t21\n+541\t158\t1\n+552\t217\t18\n+0\t88\t5\n+164\t272\t21\n+286\t12\t15\n+578\t0\t2\n+538\t0\t2\n+13\t0\t6\n+91\t75\t6\n+78\t212\t21\n+532\t190\t1\n+62\t0\t6\n+540\t173\t18\n+511\t190\t18\n+551\t44\t10\n+420\t152\t22\n+226\t306\t25\n+88\t119\t4\n+180\t258\t21\n+79\t305\t21\n+84\t0\t6\n+493\t0\t10\n+78\t156\t6\n+162\t210\t25\n+155\t0\t6\n+512\t275\t18\n+33\t195\t21\n+549\t46\t2\n+74\t280\t21\n+13\t126\t6\n+467\t263\t18\n+424\t254\t24\n+188\t308\t25\n+19\t167\t6\n+185\t189\t25\n+188\t267\t25\n+18\t80\t6\n+132\t265\t21\n+441\t143\t1\n+153\t255\t7\n+526\t105\t2\n+72\t109\t6\n+524\t213\t1\n+511\t226\t1\n+31\t0\t5\n+0\t36\t5\n+496\t0\t2\n+134\t245\t21\n+532\t141\t18\n+83\t230\t12\n+505\t26\t2\n+550\t204\t18\n+244\t348\t25\n+36\t0\t6\n+0\t81\t6\n+540\t7\t2\n+522\t152\t1\n+111\t158\t6\n+450\t116\t1\n+545\t0\t2\n+214\t230\t25\n+538\t0\t10\n+538\t44\t2\n+16\t0\t6\n+0\t14\t5\n+137\t227\t21\n+480\t165\t18\n+528\t188\t1\n+112\t169\t21\n+492\t8\t2\n+495\t0\t2\n+157\t205\t25\n+508\t0\t10\n+495\t136\t1\n+12\t240\t21\n+525\t108\t1\n+593\t20\t2\n+485\t0\t2\n+196\t167\t21\n+488\t169\t18\n+107\t277\t21\n+139\t265\t21\n+77\t200\t21\n+565\t136\t1\n+185\t263\t21\n+51\t0\t5\n+281\t349\t26\n+520\t0\t10\n+557\t160\t18\n+537\t0\t2\n+109\t255\t21\n+501\t0\t10\n+497\t22\t2\n+128\t261\t25\n+558\t10\t10\n+548\t0\t2\n+570\t76\t10\n+390\t296\t22\n+0\t0\t5\n+122\t51\t5\n+508\t145\t18\n+114\t258\t21\n+552\t201\t18\n+145\t0\t6\n+36\t262\t21\n+192\t291'..b'\n+487\t608\t17\n+67\t615\t20\n+129\t640\t20\n+533\t602\t17\n+555\t574\t14\n+46\t635\t20\n+566\t720\t14\n+42\t481\t20\n+0\t490\t20\n+0\t488\t20\n+540\t612\t17\n+84\t527\t20\n+132\t434\t20\n+573\t687\t17\n+532\t587\t17\n+0\t431\t20\n+125\t664\t20\n+528\t634\t14\n+552\t614\t17\n+556\t604\t14\n+549\t472\t14\n+584\t461\t14\n+492\t483\t14\n+551\t531\t14\n+533\t692\t14\n+552\t605\t17\n+487\t516\t14\n+502\t617\t14\n+56\t529\t20\n+577\t489\t14\n+106\t629\t20\n+101\t619\t20\n+140\t453\t20\n+530\t528\t14\n+477\t467\t14\n+128\t499\t20\n+97\t531\t20\n+536\t485\t14\n+143\t644\t20\n+0\t587\t20\n+569\t659\t17\n+26\t539\t20\n+569\t631\t17\n+574\t597\t17\n+151\t475\t20\n+0\t713\t20\n+150\t459\t20\n+533\t626\t14\n+147\t641\t20\n+473\t583\t14\n+562\t667\t14\n+80\t474\t20\n+78\t432\t20\n+502\t587\t17\n+0\t529\t20\n+0\t613\t20\n+78\t446\t20\n+117\t414\t20\n+73\t575\t20\n+392\t645\t17\n+132\t445\t20\n+500\t594\t14\n+533\t531\t14\n+48\t665\t20\n+153\t617\t20\n+95\t456\t20\n+528\t456\t14\n+53\t456\t20\n+76\t498\t20\n+501\t487\t17\n+103\t485\t20\n+501\t614\t17\n+505\t600\t17\n+520\t602\t14\n+82\t472\t20\n+99\t470\t20\n+561\t435\t14\n+71\t475\t20\n+552\t559\t17\n+560\t408\t14\n+503\t595\t14\n+484\t557\t14\n+71\t496\t20\n+49\t521\t20\n+505\t647\t14\n+88\t589\t20\n+531\t477\t14\n+624\t620\t14\n+540\t580\t17\n+97\t595\t20\n+78\t552\t20\n+136\t479\t20\n+507\t377\t14\n+126\t566\t20\n+97\t512\t20\n+0\t595\t20\n+485\t517\t14\n+424\t422\t17\n+487\t591\t14\n+43\t476\t20\n+58\t453\t20\n+444\t615\t17\n+48\t669\t20\n+508\t633\t14\n+91\t472\t20\n+567\t650\t14\n+129\t507\t20\n+69\t537\t20\n+569\t395\t14\n+4\t568\t20\n+11\t585\t20\n+0\t426\t20\n+574\t561\t14\n+527\t601\t17\n+98\t590\t20\n+528\t456\t14\n+563\t600\t17\n+67\t464\t20\n+75\t599\t20\n+148\t559\t20\n+19\t523\t20\n+558\t636\t14\n+0\t515\t20\n+97\t431\t20\n+509\t626\t14\n+85\t475\t20\n+139\t592\t20\n+541\t706\t17\n+0\t438\t20\n+0\t503\t20\n+96\t612\t20\n+96\t426\t20\n+155\t678\t20\n+116\t475\t20\n+39\t455\t20\n+69\t447\t20\n+91\t476\t20\n+575\t641\t14\n+127\t465\t20\n+6\t438\t20\n+94\t471\t20\n+525\t653\t17\n+100\t602\t20\n+113\t621\t20\n+165\t514\t20\n+14\t575\t20\n+577\t535\t14\n+566\t441\t14\n+148\t583\t20\n+114\t441\t20\n+57\t506\t20\n+580\t565\t14\n+60\t565\t20\n+99\t466\t20\n+70\t446\t20\n+474\t580\t17\n+545\t546\t14\n+73\t435\t20\n+16\t431\t20\n+24\t486\t20\n+1\t634\t20\n+180\t590\t20\n+60\t422\t20\n+609\t636\t14\n+515\t455\t14\n+114\t570\t20\n+110\t503\t20\n+0\t599\t20\n+43\t589\t20\n+550\t622\t14\n+494\t451\t14\n+108\t508\t20\n+576\t673\t14\n+28\t541\t20\n+0\t456\t20\n+572\t580\t14\n+0\t459\t20\n+0\t471\t20\n+299\t521\t17\n+71\t635\t20\n+83\t648\t20\n+479\t692\t17\n+108\t438\t20\n+85\t550\t20\n+140\t739\t20\n+191\t543\t20\n+123\t477\t20\n+66\t679\t20\n+24\t520\t20\n+67\t653\t20\n+83\t560\t20\n+545\t680\t17\n+500\t488\t14\n+576\t423\t14\n+70\t471\t20\n+35\t681\t20\n+540\t607\t14\n+575\t602\t14\n+6\t519\t20\n+514\t462\t17\n+106\t631\t20\n+76\t639\t20\n+562\t625\t14\n+111\t627\t20\n+517\t538\t14\n+0\t502\t20\n+149\t468\t20\n+560\t537\t14\n+497\t541\t14\n+83\t514\t20\n+86\t524\t20\n+556\t611\t14\n+545\t698\t14\n+100\t658\t20\n+90\t587\t20\n+560\t631\t14\n+575\t628\t14\n+0\t507\t20\n+117\t499\t20\n+120\t693\t20\n+568\t539\t14\n+111\t451\t20\n+525\t514\t14\n+522\t511\t14\n+20\t587\t20\n+98\t500\t20\n+141\t463\t20\n+527\t522\t14\n+41\t424\t20\n+494\t595\t14\n+87\t495\t20\n+18\t477\t20\n+531\t443\t14\n+98\t571\t20\n+542\t568\t14\n+106\t445\t20\n+0\t436\t20\n+547\t658\t14\n+0\t545\t20\n+470\t455\t14\n+562\t632\t14\n+550\t498\t14\n+128\t600\t20\n+72\t586\t20\n+78\t552\t20\n+122\t498\t20\n+75\t663\t20\n+457\t416\t14\n+99\t484\t20\n+168\t470\t20\n+495\t408\t14\n+109\t473\t20\n+92\t583\t20\n+99\t481\t20\n+530\t540\t14\n+0\t514\t20\n+58\t634\t20\n+153\t528\t20\n+570\t468\t14\n+452\t433\t14\n+141\t432\t20\n+479\t517\t14\n+20\t438\t20\n+116\t449\t20\n+451\t493\t14\n+79\t483\t20\n+0\t448\t20\n+440\t598\t14\n+0\t498\t20\n+13\t499\t20\n+568\t646\t14\n+68\t616\t20\n+31\t646\t20\n+511\t617\t14\n+511\t645\t14\n+54\t591\t20\n+82\t503\t20\n+66\t703\t20\n+82\t573\t20\n+453\t418\t14\n+56\t505\t20\n+19\t578\t20\n+8\t610\t20\n+549\t681\t14\n+572\t637\t14\n+96\t483\t20\n+0\t674\t20\n+78\t545\t20\n+97\t677\t20\n+503\t625\t14\n+466\t509\t14\n+491\t601\t14\n+501\t501\t14\n+21\t570\t20\n+36\t585\t20\n+493\t576\t14\n+503\t426\t14\n+122\t569\t20\n+528\t566\t14\n+83\t640\t20\n+129\t432\t20\n+478\t413\t14\n+163\t423\t20\n+0\t636\t20\n+565\t599\t14\n+540\t659\t14\n+0\t582\t20\n+40\t643\t20\n+0\t447\t20\n+61\t549\t20\n+584\t609\t14\n+542\t425\t14\n+38\t425\t20\n+498\t408\t14\n+0\t615\t20\n+83\t452\t20\n+508\t623\t14\n+80\t516\t20\n+92\t464\t20\n+346\t632\t20\n+9\t623\t20\n+123\t502\t20\n+133\t538\t20\n+525\t436\t14\n+33\t536\t20\n+524\t608\t14\n+0\t529\t20\n+0\t705\t20\n+87\t620\t20\n+87\t424\t20\n+17\t506\t20\n+549\t537\t14\n+79\t445\t20\n+89\t499\t20\n+0\t575\t20\n+124\t598\t20\n+78\t455\t20\n+101\t485\t20\n+139\t494\t20\n+113\t502\t20\n+103\t622\t20\n+49\t458\t20\n+61\t551\t20\n+0\t576\t20\n+123\t643\t20\n+105\t550\t20\n+86\t534\t20\n+69\t454\t20\n+74\t735\t20\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out1/m0_m0_90X90.png
b
Binary file test-data/out1/m0_m0_90X90.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out1/m0_m1_90X90.png
b
Binary file test-data/out1/m0_m1_90X90.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out1/m1_m0_90X90.png
b
Binary file test-data/out1/m1_m0_90X90.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out1/m1_m1_90X90.png
b
Binary file test-data/out1/m1_m1_90X90.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out1/out.html
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out1/out.html Wed Jul 29 17:03:53 2020 -0400
[
b'@@ -0,0 +1,280 @@\n+<html>\n+<head>\n+<title>Flow Overview</title>\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" type="text/css" href="js/Editor-1.5.6/css/editor.dataTables.css">\n+<link rel="stylesheet" href="css/parallelCoordinates.css"/>\n+\n+<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>\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="js/Editor-1.5.6/js/dataTables.editor.js" type="text/javascript"></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="js/color_palette.js" type="text/javascript"></script>\n+<script src="js/overview.js" type="text/javascript"></script>\n+<script src="js/scatter2D.js" type="text/javascript"></script>\n+<script src="js/scatter3D.js" type="text/javascript"></script>\n+<script src="js/scatterMFI.js" type="text/javascript"></script>\n+<script src="js/parallelCoordinates.js" type="text/javascript"></script>\n+<script src="js/boxplotsFlow.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+\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="mfi"><a href="#mfi" data-toggle="tab">MFI/Pop</a></li>\n+                <li class="homeTab" data-value="overviewPlot"><a href="#overviewPlot" data-toggle="tab">Overview Plot</a></li>\n+                <li class="homeTab" data-value="scatter2D"><a href="#scatter2D" data-toggle="tab">Scatter 2D</a></li>\n+                <li class="homeTab" data-value="scatter3D"><a href="#scatter3D" data-toggle="tab">Scatter 3D</a></li>\n+                <li class="homeTab" data-value="parallelCoordinates"><a href="#parallelCoordinates" data-toggle="tab">Parallel Coordinates</a></li>\n+                <li class="homeTab" data-value="stats"><a href="#boxplots" data-toggle="tab">Summary Statistics Boxplots</a></li>\n+            </ul>\n+\n+            <div class="tab-content">\n+                <div class="tab-pane active" id="mfi" style="min-height:500px;">\n+                    <div id="mfiDiv"></div>\n+                </div>\n+\n+                <div class="tab-pane" id="overviewPlot" style="min-height:500px;">\n+                    <div id="overviewPlotDiv">Overview</div>\n+                </div>\n+\n+                <div class="tab-pane" id="scatter2D" style="min-height:500px;">\n+                    <div id="toolbarDiv2D" class="col-md-12 chartDiv">\n+                    X Axis: <select id="xAxisMarker2D" style="width:150px;">\n+                            </select>\n+                    Y Axis: <select id="yAxisMarker2D" style="width:150px;">\n+                            </select>\n+ '..b'angeDisplay" 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="plotDivbp" class="col-md-8" style="height:100%;"></div>\n+\n+                        <div id="popDivbp" class="col-md-2" style="height:100%;">\n+                            <button id="updateDisplaybp" class="igbtn">Reset Display</button>\n+                            <table id="popTablebp" class="table table-condensed table-bordered igtable">\n+                                <thead>\n+                                    <tr>\n+                                        <th><input type="checkbox" checked id="popSelectAllbp"/></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+<script>\n+var mfiLoaded = false;\n+var populationLoaded = false;\n+var overviewPlotLoaded = false;\n+var scatter2DLoaded = false;\n+var scatter3DLoaded = false;\n+var parallelCoordinatesLoaded = false;\n+var bpLoaded = 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 == \'#mfi\') {\n+        if (mfiLoaded) {\n+            return true;\n+        }\n+        mfiLoaded = true;\n+        displayMFI();\n+      }\n+      if (tab == \'#overviewPlot\') {\n+        if (overviewPlotLoaded) {\n+            return true;\n+        }\n+        overviewPlotLoaded = true;\n+        displayOverviewPlot();\n+      }\n+      if (tab == \'#scatter2D\') {\n+        if (scatter2DLoaded) {\n+            displayScatterPopulation2D();\n+            return true;\n+        }\n+        scatter2DLoaded = true;\n+        displayScatter2D();\n+      }\n+      if (tab == \'#scatter3D\') {\n+        if (scatter3DLoaded) {\n+            displayScatterPopulation3D();\n+            return true;\n+        }\n+        scatter3DLoaded = true;\n+        displayScatter3D();\n+      }\n+      if (tab == \'#parallelCoordinates\') {\n+        if (parallelCoordinatesLoaded) {\n+            displayPopTable();\n+            displayTableGrid();\n+            return true;\n+        }\n+        parallelCoordinatesLoaded = true;\n+        displayParallelCoordinates();\n+      }\n+      if (tab == \'#boxplots\') {\n+        if (bpLoaded) {\n+            displayPopulationLegend(configbp);\n+            displayMarkerTable(configbp);\n+            updateBoxplot(configbp);\n+            return true;\n+        }\n+        bpLoaded = true;\n+        displayMFIBoxplot();\n+      }\n+    });\n+\n+    mfiLoaded = true;\n+    displayMFI();\n+});\n+</script>\n+</body>\n+</html>\n\\ No newline at end of file\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/CLprofiles.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out2/CLprofiles.txt Wed Jul 29 17:03:53 2020 -0400
b
@@ -0,0 +1,27 @@
+Population FlowCL Query Nb Results Link to PDF Top Result Label Top Result Score Top Result CL
+1 <a href="flowcl_pop01.txt" target="_blank">CD4+CCR7-</a> 3 <a href="flowcl_pop01.pdf" target="_blank">PDF</a> effector CD4-positive, alpha-beta T cell 0.333 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0001044" target="_blank">CL_0001044</a>
+2 <a href="flowcl_pop01.txt" target="_blank">CD4+CCR7-</a> 3 <a href="flowcl_pop01.pdf" target="_blank">PDF</a> effector CD4-positive, alpha-beta T cell 0.333 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0001044" target="_blank">CL_0001044</a>
+3 <a href="flowcl_pop01.txt" target="_blank">CD4+CCR7-</a> 3 <a href="flowcl_pop01.pdf" target="_blank">PDF</a> effector CD4-positive, alpha-beta T cell 0.333 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0001044" target="_blank">CL_0001044</a>
+4 <a href="flowcl_pop04.txt" target="_blank">CD4-CCR7-</a> 5 <a href="flowcl_pop04.pdf" target="_blank">PDF</a> effector CD8-positive, alpha-beta T cell 0.333 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0001050" target="_blank">CL_0001050</a>
+5 <a href="flowcl_pop04.txt" target="_blank">CD4-CCR7-</a> 5 <a href="flowcl_pop04.pdf" target="_blank">PDF</a> effector CD8-positive, alpha-beta T cell 0.333 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0001050" target="_blank">CL_0001050</a>
+6 <a href="flowcl_pop04.txt" target="_blank">CD4-CCR7-</a> 5 <a href="flowcl_pop04.pdf" target="_blank">PDF</a> effector CD8-positive, alpha-beta T cell 0.333 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0001050" target="_blank">CL_0001050</a>
+7 <a href="flowcl_pop07.txt" target="_blank">CD4-CCR7lo</a> 5+ <a href="flowcl_pop07.pdf" target="_blank">PDF</a> long term hematopoietic stem cell -0.043 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0002034" target="_blank">CL_0002034</a>
+8 <a href="flowcl_pop01.txt" target="_blank">CD4+CCR7-</a> 3 <a href="flowcl_pop01.pdf" target="_blank">PDF</a> effector CD4-positive, alpha-beta T cell 0.333 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0001044" target="_blank">CL_0001044</a>
+9 <a href="flowcl_pop07.txt" target="_blank">CD4-CCR7lo</a> 5+ <a href="flowcl_pop07.pdf" target="_blank">PDF</a> long term hematopoietic stem cell -0.043 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0002034" target="_blank">CL_0002034</a>
+10 <a href="flowcl_pop01.txt" target="_blank">CD4+CCR7-</a> 3 <a href="flowcl_pop01.pdf" target="_blank">PDF</a> effector CD4-positive, alpha-beta T cell 0.333 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0001044" target="_blank">CL_0001044</a>
+11 <a href="flowcl_pop04.txt" target="_blank">CD4-CCR7-</a> 5 <a href="flowcl_pop04.pdf" target="_blank">PDF</a> effector CD8-positive, alpha-beta T cell 0.333 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0001050" target="_blank">CL_0001050</a>
+12 <a href="flowcl_pop04.txt" target="_blank">CD4-CCR7-</a> 5 <a href="flowcl_pop04.pdf" target="_blank">PDF</a> effector CD8-positive, alpha-beta T cell 0.333 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0001050" target="_blank">CL_0001050</a>
+13 <a href="flowcl_pop13.txt" target="_blank">CD4+CCR7lo</a> 5+ <a href="flowcl_pop13.pdf" target="_blank">PDF</a> mature CD8_alpha-negative CD11b-positive dendritic cell 2)"        -0.071 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0001003" target="_blank">CL_0001003</a>
+14 <a href="flowcl_pop14.txt" target="_blank">CD4+CCR7+</a> 4 <a href="flowcl_pop14.pdf" target="_blank">PDF</a> naive thymus-derived CD4-positive, alpha-beta T cell 0.2 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0000895" target="_blank">CL_0000895</a>
+15 <a href="flowcl_pop15.txt" target="_blank">CD4loCCR7-</a> 5 <a href="flowcl_pop15.pdf" target="_blank">PDF</a> effector memory CD4-positive, alpha-beta T cell -0.091 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0000905" target="_blank">CL_0000905</a>
+16 <a href="flowcl_pop07.txt" target="_blank">CD4-CCR7lo</a> 5+ <a href="flowcl_pop07.pdf" target="_blank">PDF</a> long term hematopoietic stem cell -0.043 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0002034" target="_blank">CL_0002034</a>
+17 <a href="flowcl_pop14.txt" target="_blank">CD4+CCR7+</a> 4 <a href="flowcl_pop14.pdf" target="_blank">PDF</a> naive thymus-derived CD4-positive, alpha-beta T cell 0.2 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0000895" target="_blank">CL_0000895</a>
+18 <a href="flowcl_pop01.txt" target="_blank">CD4+CCR7-</a> 3 <a href="flowcl_pop01.pdf" target="_blank">PDF</a> effector CD4-positive, alpha-beta T cell 0.333 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0001044" target="_blank">CL_0001044</a>
+19 <a href="flowcl_pop19.txt" target="_blank">CD4loCCR7+</a> 5+ <a href="flowcl_pop19.pdf" target="_blank">PDF</a> naive CCR4-positive regulatory T cell -0.083 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0001045" target="_blank">CL_0001045</a>
+20 <a href="flowcl_pop20.txt" target="_blank">CD4-CCR7+</a> 2 <a href="flowcl_pop20.pdf" target="_blank">PDF</a> naive thymus-derived CD8-positive, alpha-beta T cell 0.2 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0000900" target="_blank">CL_0000900</a>
+21 <a href="flowcl_pop04.txt" target="_blank">CD4-CCR7-</a> 5 <a href="flowcl_pop04.pdf" target="_blank">PDF</a> effector CD8-positive, alpha-beta T cell 0.333 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0001050" target="_blank">CL_0001050</a>
+22 <a href="flowcl_pop15.txt" target="_blank">CD4loCCR7-</a> 5 <a href="flowcl_pop15.pdf" target="_blank">PDF</a> effector memory CD4-positive, alpha-beta T cell -0.091 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0000905" target="_blank">CL_0000905</a>
+23 <a href="flowcl_pop23.txt" target="_blank">CD4loCCR7lo</a> 2 <a href="flowcl_pop23.pdf" target="_blank">PDF</a> immature NK T cell stage I -0.167 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0002039" target="_blank">CL_0002039</a>
+24 <a href="flowcl_pop15.txt" target="_blank">CD4loCCR7-</a> 5 <a href="flowcl_pop15.pdf" target="_blank">PDF</a> effector memory CD4-positive, alpha-beta T cell -0.091 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0000905" target="_blank">CL_0000905</a>
+25 <a href="flowcl_pop07.txt" target="_blank">CD4-CCR7lo</a> 5+ <a href="flowcl_pop07.pdf" target="_blank">PDF</a> long term hematopoietic stem cell -0.043 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0002034" target="_blank">CL_0002034</a>
+26 <a href="flowcl_pop23.txt" target="_blank">CD4loCCR7lo</a> 2 <a href="flowcl_pop23.pdf" target="_blank">PDF</a> immature NK T cell stage I -0.167 <a href="http://www.immport-labs.org/immport-ontology/public/home/home/CL:0002039" target="_blank">CL_0002039</a>
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/boxplotData.json
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out2/boxplotData.json Wed Jul 29 17:03:53 2020 -0400
[
b'@@ -0,0 +1,1 @@\n+{"lower": {"CD4":{"1":444.5,"2":443.5,"3":435.25,"4":-102.5,"5":-106.5,"6":-76.0,"7":-68.5,"8":449.5,"9":-68.0,"10":444.5,"11":-65.5,"12":-25.25,"13":415.0,"14":433.5,"15":195.75,"16":-57.375,"17":377.5,"18":447.0,"19":237.0,"20":-68.0,"21":24.5,"22":252.5,"23":272.5,"24":276.375,"25":72.5,"26":-10.5},"CCR7":{"1":38.5,"2":-109.5,"3":-183.0,"4":-117.0,"5":-175.5,"6":-157.5,"7":68.5,"8":73.0,"9":140.375,"10":-94.5,"11":-128.0,"12":27.5,"13":137.875,"14":344.5,"15":-182.5,"16":264.5,"17":405.125,"18":40.5,"19":207.5,"20":254.0,"21":97.0,"22":11.5,"23":370.375,"24":21.5,"25":172.5,"26":201.375}}, "mfi": {"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},"CCR7":{"1":188,"2":37,"3":69,"4":141,"5":68,"6":90,"7":318,"8":258,"9":420,"10":31,"11":111,"12":213,"13":424,"14":566,"15":84,"16":510,"17":598,"18":199,"19":629,"20":534,"21":224,"22":204,"23":476,"24":204,"25":269,"26":343}}, "outliers": {"CD4":{"1":[427,440,348,429,444,408,371,432,398,425,441,404,382,399,410,416,350,441,304,423,369,443,413,393,421,377,441,398,332,343,434,443,441,403,418,438,409,609,384,415,441,371,418,433,377,444,354,354,439,367,439,433,434,443,354,361,421,350,442,423,361,379,381,421,405,413,626,430,355,406,419,357,380,439,444,383,393,406,414,439,405,434,436,405,421,440,427,440,430,417,349,338,393,368,397,413,437,338,359,439],"2":[428,409,398,414,392,439,416,613,422,437,442,420,441,424,429,424,418,428,433,400,443,354,395,637,417,608,611,439,408,440,434,396,613,385,432,440,378,424,440,609,377,412,422,407,359,377,418,417,623,428,421,418,413,360,431,385,369,424,417,441],"3":[406,428,364,342,413,403,432,426,435,306,365,430,374,391,389,400,423,339,426,397,309,368,413,435,434,428,388,432,396,428,409,344,429,377,424,433,604,594,422,357,420,319,432,434,432,419,427,435,429,371,431,599,324,435,599,358,419,434,433,337,405],"4":[356,389,342,344,281,428,428,265,365,436,303,295,385,314,315,342,391,332,420,374,434,288,281,414,337,337,404,432,344,469,305],"5":[],"6":[281,223,349,356,256,241,327,344,357,252,303,296,249,276,238,261,296,253,305,259,259,251,237,305,330,392,279,451,409,305,435,278,299,322,369,311,298,297,265,221,243,244,303,405],"7":[321,235,234,349,242,248,292,317,252,277,241,232,237],"8":[381,444,426,424,449,447,415,437,378,441,433,446,447,613,394,338,426,428,431,426,420,384,438,640,411,447,419,322,606,356,412,439,618,607,426,447,437,433,415,413,386,440,345,436,439,445,341,441,590,447,378,402,446,448,447,439,447,618,644,285,443,445,424,442,423,405,391,381,448,440,429,417,400,389,443,393,429],"9":[340,353,359,458,350,563,349,375,363,330,348,326,509,427,352,385,406,389,401],"10":[442,433,435,422,425,434,423,401,394,412,426,393,434,621,395,438,444,432,416,443,424,427,433,444,441,645,432,419,372,430,440,424,615,425,441,423,429,438,443,429,418,433,425,414,393,408,420,399,422,415,393,437,443,412,432,439,412,417,439,437,415,422,440,434,444,434,436,399,386,436,434,439],"11":[258,242,251,313,256,242,271,244,247,252],"12":[263,293,257,315,314,273,303,266,305,265,258,267,271,295,276,281,273,301,323,312,331,353,308,281,296,359,275,273,289,286,309,291,323,305,271,272,301,282,293,307,330,265,277,270,292,321,314,277,316,319,272,276,280,270,264,257,292,340,318,292],"13":[348,407,398,384,381,352,300,414,339,400,396,359,409,312,388,399,375,377,360,401,406,366,409,387,394,367,404,403,392,304,394,349,639,357,367,411,312,407,377,358,411,354,346,312,387,319,367,365,403],"14":[359,406,386,432,390,624,388,426,377,390,431,416,421,398,431],"15":[189],"16":[283,290,261,348,290,365,266,318,259,298,260,282,271,291,277,313,299,263,264,319,262,278,256],"17":[330,369,331,261,330,295,368,313,373,326,263,223,299,376,215,359,368,363,305,248,343,352,364,327,304,370,368,344],"18":[429,436,374,427,610,357,351,419,393,336,405,434,375,431,380,611,445,410,435,441,429,334,444,638,410,444,403,335,443,433,446,374,'..b'361,355,365,371,384,377,349,388,367,380,401,378,379,371,371,375,358,355],"19":[],"20":[],"21":[0,69,84,0,88,0,84,0,96,62,78,15,89,14,92,94,90,380,92,96,72,96,57,34,80,27,63,0,82,53,0,77,30,76,77,93,362,12,82,36,28,81,70,72,72,94,26,67,77,53,62,70,392,95,26,15,82,0,381,83,88,381,0,0,2,15,1,16,80,93,0,60,84,71,92,73,70,39,15,77,71,75,59,16,85,93,74,463,0,0,56,93,84,0,35,49,49,0,87,14],"22":[7,0,0,0,0,422,0,0,5,6,0,0,0,0,0,0,0,0,0,412,0,0,0,0,0,0,0,0,0,1,0,0,0,6,0,0,0,0,0,0,0,0,0,430,446,0,0,421],"23":[368,685,615,588,747,874,798,677,635,637,578,849,856,725,952,647,822,578,738,250,677,615,742,615,603,256,236,574,657,675,661,584,299,327,638,340,599,271,321,332,332,607,355,570,607,572,328,589,584,311,312,700,590,659,613,361,356,253,292,347,707,654,360,771,684,342,640,608,837,920,579,907,835,569,594,667,800,597,786,731,595,890,800,637,692,727,643,685,358,710,587,609,978,750,335,753,638],"24":[0,0,0,5,0,0,0,15,0,6,0,4,0,0,7,0,4,0,0,18,0,4,0,0,0,0,0,0,21,0,0,0,407,0,4,0,494,0,2,19,7,496,0,468,0,0,499],"25":[157,172,163,172,172,139,168,163,412,372,98,150,140,163,386,372,147,418,168,164,162,157,435,166,126,168,168,157,397,380,463,166,110,84,55,391,161,428,446,172,135,150,170,120,132,150,146,445,107,171,150,170,169,417,375,157,141,131,169,430,142,424,121,120,75,159,165,150,147,162,131,141,423,106,122,169,407,162,401,137,101,417,446,159,172,148,161,377,82,388,411,99,131,172,148,115,400,159,416,169],"26":[179,138,193,500,496,475,478,521,164,479,478,183,560,483,503,485,479,160,513,175,482,523,199,184,189,512,535,499,603,161,482,515,521,526,546,482,531,506,543,507,479,495,617,526,482,501,622,479,478,492,489,484,534,495,492,476,560,487,560,508]}}, "q1": {"CD4":{"1":503.0,"2":505.0,"3":494.5,"4":31.0,"5":12.0,"6":35.0,"7":44.0,"8":502.0,"9":79.0,"10":503.0,"11":47.0,"12":80.5,"13":493.0,"14":504.0,"15":291.0,"16":60.0,"17":484.0,"18":507.0,"19":426.0,"20":43.0,"21":116.0,"22":359.0,"23":343.0,"24":366.0,"25":155.0,"26":246.0},"CCR7":{"1":148.0,"2":0.0,"3":0.0,"4":75.0,"5":0.0,"6":24.0,"7":256.0,"8":205.0,"9":339.5,"10":0.0,"11":49.0,"12":164.0,"13":352.0,"14":514.0,"15":8.0,"16":443.0,"17":547.25,"18":156.0,"19":515.0,"20":464.0,"21":196.0,"22":160.0,"23":442.0,"24":164.0,"25":246.0,"26":303.75}}, "q2": {"CD4":{"1":524.0,"2":526.0,"3":516.0,"4":77.0,"5":52.0,"6":72.0,"7":85.0,"8":520.0,"9":125.5,"10":524.0,"11":86.0,"12":115.0,"13":521.0,"14":530.0,"15":324.0,"16":101.5,"17":529.5,"18":528.0,"19":480.0,"20":84.0,"21":147.0,"22":398.0,"23":365.0,"24":400.0,"25":184.0,"26":296.0},"CCR7":{"1":182.0,"2":21.0,"3":68.0,"4":147.0,"5":61.0,"6":95.0,"7":323.0,"8":244.0,"9":404.5,"10":11.0,"11":114.0,"12":210.0,"13":426.0,"14":580.5,"15":88.0,"16":502.0,"17":603.0,"18":193.0,"19":593.0,"20":515.0,"21":234.0,"22":215.0,"23":465.0,"24":217.0,"25":272.0,"26":334.0}}, "q3": {"CD4":{"1":542.0,"2":546.0,"3":534.0,"4":120.0,"5":91.0,"6":109.0,"7":119.0,"8":537.0,"9":177.0,"10":542.0,"11":122.0,"12":151.0,"13":545.0,"14":551.0,"15":354.5,"16":138.25,"17":555.0,"18":547.0,"19":552.0,"20":117.0,"21":177.0,"22":430.0,"23":390.0,"24":425.75,"25":210.0,"26":417.0},"CCR7":{"1":221.0,"2":73.0,"3":122.0,"4":203.0,"5":117.0,"6":145.0,"7":381.0,"8":293.0,"9":472.25,"10":63.0,"11":167.0,"12":255.0,"13":494.75,"14":627.0,"15":135.0,"16":562.0,"17":642.0,"18":233.0,"19":720.0,"20":604.0,"21":262.0,"22":259.0,"23":489.75,"24":259.0,"25":295.0,"26":372.0}}, "upper": {"CD4":{"1":600.5,"2":607.5,"3":593.25,"4":253.5,"5":209.5,"6":220.0,"7":231.5,"8":589.5,"9":324.0,"10":600.5,"11":234.5,"12":256.75,"13":623.0,"14":621.5,"15":449.75,"16":255.625,"17":661.5,"18":607.0,"19":741.0,"20":228.0,"21":268.5,"22":536.5,"23":460.5,"24":515.375,"25":292.5,"26":673.5},"CCR7":{"1":330.5,"2":182.5,"3":305.0,"4":395.0,"5":292.5,"6":326.5,"7":568.5,"8":425.0,"9":671.375,"10":157.5,"11":344.0,"12":391.5,"13":708.875,"14":796.5,"15":325.5,"16":740.5,"17":784.125,"18":348.5,"19":1027.5,"20":814.0,"21":361.0,"22":407.5,"23":561.375,"24":401.5,"25":368.5,"26":474.375}}}\n\\ No newline at end of file\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/flow.mfi
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out2/flow.mfi Wed Jul 29 17:03:53 2020 -0400
b
@@ -0,0 +1,27 @@
+Population CD4 CCR7
+1 520 188
+2 523 37
+3 512 69
+4 84 141
+5 56 68
+6 75 90
+7 83 318
+8 517 258
+9 138 420
+10 521 31
+11 85 111
+12 119 213
+13 516 424
+14 526 566
+15 322 84
+16 104 510
+17 509 598
+18 524 199
+19 490 629
+20 82 534
+21 145 224
+22 389 204
+23 366 476
+24 392 204
+25 182 269
+26 325 343
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/flow.mfi_pop
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out2/flow.mfi_pop Wed Jul 29 17:03:53 2020 -0400
b
@@ -0,0 +1,27 @@
+CD4 CCR7 Count Percentage Population
+519.72 187.88 3842 6.40 1
+522.94 37.10 2765 4.61 2
+512.11 68.72 2163 3.61 3
+83.54 141.19 1207 2.01 4
+55.56 67.51 2332 3.89 5
+75.33 90.47 3969 6.62 6
+82.72 318.03 1809 3.02 7
+517.07 257.64 2260 3.77 8
+138.25 419.51 342 0.57 9
+520.67 31.29 3497 5.83 10
+85.41 110.92 1903 3.17 11
+119.09 212.60 1599 2.67 12
+515.81 423.78 2238 3.73 13
+525.80 565.61 930 1.55 14
+322.30 84.31 555 0.93 15
+103.98 509.50 872 1.45 16
+509.05 597.98 362 0.60 17
+524.02 198.53 2601 4.34 18
+489.73 629.26 341 0.57 19
+81.83 534.25 1750 2.92 20
+144.71 224.04 9174 15.29 21
+388.94 203.73 1401 2.34 22
+365.75 476.01 1058 1.76 23
+392.21 204.17 1166 1.94 24
+181.69 268.60 8725 14.54 25
+325.42 342.86 1136 1.89 26
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/flow.overview
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out2/flow.overview Wed Jul 29 17:03:53 2020 -0400
b
@@ -0,0 +1,13 @@
+<table>
+<tr><td>&nbsp;</td>
+<td>CD4</td>
+<td>CCR7</td>
+<tr>
+<td>CD4</td>
+<td><img src="m0_m0_90X90.png"/></td><td><img src="m1_m0_90X90.png"/></td></tr>
+<tr>
+<td>CCR7</td>
+<td><img src="m0_m1_90X90.png"/></td><td><img src="m1_m1_90X90.png"/></td></tr>
+</table>
+</body>
+<html>
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/flow.sample
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out2/flow.sample Wed Jul 29 17:03:53 2020 -0400
b
b'@@ -0,0 +1,20001 @@\n+CD4\tCCR7\tPopulation\n+392\t178\t24\n+560\t9\t10\n+345\t166\t15\n+180\t225\t21\n+123\t280\t25\n+555\t186\t1\n+521\t217\t1\n+98\t47\t6\n+182\t117\t12\n+251\t179\t26\n+160\t0\t6\n+85\t127\t6\n+0\t62\t5\n+146\t7\t6\n+446\t0\t10\n+556\t139\t18\n+138\t201\t21\n+556\t0\t10\n+96\t166\t6\n+141\t0\t5\n+525\t239\t18\n+64\t90\t6\n+551\t202\t18\n+507\t171\t1\n+106\t118\t6\n+14\t181\t6\n+181\t124\t6\n+467\t137\t1\n+200\t285\t25\n+143\t239\t21\n+506\t128\t1\n+496\t67\t10\n+157\t257\t25\n+57\t73\t5\n+511\t133\t18\n+519\t276\t1\n+160\t265\t25\n+170\t104\t12\n+470\t127\t1\n+214\t300\t25\n+535\t0\t2\n+78\t0\t6\n+135\t0\t5\n+70\t230\t21\n+32\t0\t6\n+205\t296\t25\n+28\t145\t6\n+520\t145\t1\n+533\t39\t10\n+0\t0\t5\n+495\t0\t2\n+497\t185\t18\n+147\t347\t21\n+87\t0\t6\n+30\t0\t6\n+543\t0\t10\n+92\t139\t5\n+0\t0\t6\n+567\t221\t18\n+151\t276\t21\n+518\t141\t18\n+213\t197\t22\n+549\t61\t2\n+562\t207\t18\n+5\t28\t5\n+63\t79\t6\n+120\t80\t21\n+21\t133\t5\n+141\t326\t25\n+180\t271\t21\n+114\t155\t21\n+216\t262\t25\n+0\t36\t5\n+459\t35\t2\n+85\t45\t6\n+534\t136\t1\n+24\t0\t5\n+227\t330\t25\n+554\t136\t1\n+127\t164\t21\n+201\t210\t25\n+429\t148\t18\n+160\t125\t21\n+153\t47\t5\n+76\t145\t6\n+545\t57\t10\n+134\t233\t21\n+481\t141\t1\n+516\t168\t1\n+174\t231\t21\n+470\t158\t1\n+128\t121\t12\n+467\t147\t1\n+133\t200\t12\n+318\t0\t15\n+181\t273\t25\n+526\t254\t1\n+223\t121\t15\n+121\t124\t21\n+57\t171\t6\n+164\t302\t21\n+382\t286\t22\n+71\t237\t21\n+500\t137\t1\n+501\t0\t2\n+519\t190\t18\n+488\t165\t1\n+523\t42\t2\n+475\t86\t2\n+538\t0\t2\n+26\t22\t6\n+157\t174\t21\n+548\t21\t10\n+203\t234\t25\n+161\t283\t25\n+60\t127\t6\n+522\t0\t2\n+69\t235\t21\n+63\t142\t6\n+171\t277\t25\n+177\t252\t21\n+138\t0\t5\n+73\t226\t21\n+529\t194\t1\n+99\t0\t6\n+0\t192\t5\n+145\t243\t21\n+579\t0\t2\n+555\t216\t1\n+525\t132\t18\n+213\t204\t21\n+202\t253\t25\n+53\t0\t6\n+0\t77\t6\n+58\t247\t21\n+546\t0\t10\n+144\t286\t25\n+84\t0\t5\n+101\t120\t5\n+564\t148\t18\n+498\t0\t10\n+576\t280\t1\n+217\t280\t21\n+0\t16\t5\n+111\t135\t6\n+514\t13\t2\n+287\t135\t15\n+330\t440\t23\n+398\t471\t23\n+567\t109\t1\n+0\t242\t6\n+215\t178\t21\n+586\t0\t2\n+56\t261\t21\n+93\t233\t25\n+128\t140\t12\n+550\t129\t1\n+105\t0\t5\n+493\t138\t18\n+112\t88\t12\n+518\t178\t18\n+510\t220\t1\n+491\t0\t10\n+552\t117\t3\n+459\t156\t22\n+87\t87\t6\n+55\t135\t6\n+148\t117\t6\n+174\t237\t25\n+237\t264\t25\n+169\t195\t12\n+119\t204\t25\n+43\t0\t6\n+558\t190\t1\n+581\t66\t2\n+180\t265\t25\n+118\t199\t21\n+155\t229\t21\n+494\t0\t2\n+400\t236\t22\n+264\t150\t21\n+37\t0\t6\n+538\t79\t10\n+226\t218\t25\n+538\t90\t2\n+544\t146\t1\n+330\t451\t17\n+547\t108\t1\n+166\t236\t21\n+126\t0\t6\n+519\t107\t10\n+520\t0\t2\n+81\t82\t5\n+222\t231\t25\n+495\t45\t2\n+277\t300\t25\n+554\t224\t18\n+558\t144\t1\n+112\t134\t6\n+512\t206\t1\n+407\t178\t24\n+516\t166\t18\n+283\t377\t16\n+528\t147\t1\n+501\t24\t2\n+140\t113\t6\n+555\t0\t2\n+470\t0\t2\n+46\t37\t6\n+562\t222\t18\n+7\t18\t6\n+24\t102\t6\n+227\t331\t25\n+155\t74\t5\n+538\t0\t10\n+542\t177\t1\n+12\t160\t6\n+180\t305\t21\n+0\t149\t6\n+541\t10\t10\n+120\t227\t21\n+504\t81\t2\n+535\t196\t18\n+536\t243\t18\n+503\t45\t2\n+112\t205\t12\n+212\t203\t12\n+542\t174\t18\n+287\t237\t24\n+75\t98\t6\n+161\t247\t21\n+167\t301\t25\n+164\t531\t9\n+524\t58\t2\n+564\t267\t1\n+500\t81\t2\n+538\t187\t1\n+555\t129\t18\n+61\t39\t6\n+524\t136\t1\n+492\t144\t18\n+105\t263\t21\n+539\t287\t1\n+538\t0\t10\n+135\t174\t21\n+527\t170\t1\n+529\t86\t10\n+196\t278\t25\n+201\t295\t25\n+232\t258\t21\n+165\t3\t6\n+173\t154\t21\n+588\t148\t1\n+79\t263\t21\n+501\t70\t10\n+132\t184\t21\n+518\t173\t18\n+486\t0\t10\n+460\t0\t2\n+535\t216\t18\n+197\t303\t25\n+158\t180\t21\n+159\t117\t21\n+541\t158\t1\n+552\t217\t18\n+0\t88\t5\n+164\t272\t21\n+286\t12\t15\n+578\t0\t2\n+538\t0\t2\n+13\t0\t6\n+91\t75\t6\n+78\t212\t21\n+532\t190\t1\n+62\t0\t6\n+540\t173\t18\n+511\t190\t18\n+551\t44\t10\n+420\t152\t22\n+226\t306\t25\n+88\t119\t4\n+180\t258\t21\n+79\t305\t21\n+84\t0\t6\n+493\t0\t10\n+78\t156\t6\n+162\t210\t25\n+155\t0\t6\n+512\t275\t18\n+33\t195\t21\n+549\t46\t2\n+74\t280\t21\n+13\t126\t6\n+467\t263\t18\n+424\t254\t24\n+188\t308\t25\n+19\t167\t6\n+185\t189\t25\n+188\t267\t25\n+18\t80\t6\n+132\t265\t21\n+441\t143\t1\n+153\t255\t7\n+526\t105\t2\n+72\t109\t6\n+524\t213\t1\n+511\t226\t1\n+31\t0\t5\n+0\t36\t5\n+496\t0\t2\n+134\t245\t21\n+532\t141\t18\n+83\t230\t12\n+505\t26\t2\n+550\t204\t18\n+244\t348\t25\n+36\t0\t6\n+0\t81\t6\n+540\t7\t2\n+522\t152\t1\n+111\t158\t6\n+450\t116\t1\n+545\t0\t2\n+214\t230\t25\n+538\t0\t10\n+538\t44\t2\n+16\t0\t6\n+0\t14\t5\n+137\t227\t21\n+480\t165\t18\n+528\t188\t1\n+112\t169\t21\n+492\t8\t2\n+495\t0\t2\n+157\t205\t25\n+508\t0\t10\n+495\t136\t1\n+12\t240\t21\n+525\t108\t1\n+593\t20\t2\n+485\t0\t2\n+196\t167\t21\n+488\t169\t18\n+107\t277\t21\n+139\t265\t21\n+77\t200\t21\n+565\t136\t1\n+185\t263\t21\n+51\t0\t5\n+281\t349\t26\n+520\t0\t10\n+557\t160\t18\n+537\t0\t2\n+109\t255\t21\n+501\t0\t10\n+497\t22\t2\n+128\t261\t25\n+558\t10\t10\n+548\t0\t2\n+570\t76\t10\n+390\t296\t22\n+0\t0\t5\n+122\t51\t5\n+508\t145\t18\n+114\t258\t21\n+552\t201\t18\n+145\t0\t6\n+36\t262\t21\n+192\t291'..b'\n+487\t608\t17\n+67\t615\t20\n+129\t640\t20\n+533\t602\t17\n+555\t574\t14\n+46\t635\t20\n+566\t720\t14\n+42\t481\t20\n+0\t490\t20\n+0\t488\t20\n+540\t612\t17\n+84\t527\t20\n+132\t434\t20\n+573\t687\t17\n+532\t587\t17\n+0\t431\t20\n+125\t664\t20\n+528\t634\t14\n+552\t614\t17\n+556\t604\t14\n+549\t472\t14\n+584\t461\t14\n+492\t483\t14\n+551\t531\t14\n+533\t692\t14\n+552\t605\t17\n+487\t516\t14\n+502\t617\t14\n+56\t529\t20\n+577\t489\t14\n+106\t629\t20\n+101\t619\t20\n+140\t453\t20\n+530\t528\t14\n+477\t467\t14\n+128\t499\t20\n+97\t531\t20\n+536\t485\t14\n+143\t644\t20\n+0\t587\t20\n+569\t659\t17\n+26\t539\t20\n+569\t631\t17\n+574\t597\t17\n+151\t475\t20\n+0\t713\t20\n+150\t459\t20\n+533\t626\t14\n+147\t641\t20\n+473\t583\t14\n+562\t667\t14\n+80\t474\t20\n+78\t432\t20\n+502\t587\t17\n+0\t529\t20\n+0\t613\t20\n+78\t446\t20\n+117\t414\t20\n+73\t575\t20\n+392\t645\t17\n+132\t445\t20\n+500\t594\t14\n+533\t531\t14\n+48\t665\t20\n+153\t617\t20\n+95\t456\t20\n+528\t456\t14\n+53\t456\t20\n+76\t498\t20\n+501\t487\t17\n+103\t485\t20\n+501\t614\t17\n+505\t600\t17\n+520\t602\t14\n+82\t472\t20\n+99\t470\t20\n+561\t435\t14\n+71\t475\t20\n+552\t559\t17\n+560\t408\t14\n+503\t595\t14\n+484\t557\t14\n+71\t496\t20\n+49\t521\t20\n+505\t647\t14\n+88\t589\t20\n+531\t477\t14\n+624\t620\t14\n+540\t580\t17\n+97\t595\t20\n+78\t552\t20\n+136\t479\t20\n+507\t377\t14\n+126\t566\t20\n+97\t512\t20\n+0\t595\t20\n+485\t517\t14\n+424\t422\t17\n+487\t591\t14\n+43\t476\t20\n+58\t453\t20\n+444\t615\t17\n+48\t669\t20\n+508\t633\t14\n+91\t472\t20\n+567\t650\t14\n+129\t507\t20\n+69\t537\t20\n+569\t395\t14\n+4\t568\t20\n+11\t585\t20\n+0\t426\t20\n+574\t561\t14\n+527\t601\t17\n+98\t590\t20\n+528\t456\t14\n+563\t600\t17\n+67\t464\t20\n+75\t599\t20\n+148\t559\t20\n+19\t523\t20\n+558\t636\t14\n+0\t515\t20\n+97\t431\t20\n+509\t626\t14\n+85\t475\t20\n+139\t592\t20\n+541\t706\t17\n+0\t438\t20\n+0\t503\t20\n+96\t612\t20\n+96\t426\t20\n+155\t678\t20\n+116\t475\t20\n+39\t455\t20\n+69\t447\t20\n+91\t476\t20\n+575\t641\t14\n+127\t465\t20\n+6\t438\t20\n+94\t471\t20\n+525\t653\t17\n+100\t602\t20\n+113\t621\t20\n+165\t514\t20\n+14\t575\t20\n+577\t535\t14\n+566\t441\t14\n+148\t583\t20\n+114\t441\t20\n+57\t506\t20\n+580\t565\t14\n+60\t565\t20\n+99\t466\t20\n+70\t446\t20\n+474\t580\t17\n+545\t546\t14\n+73\t435\t20\n+16\t431\t20\n+24\t486\t20\n+1\t634\t20\n+180\t590\t20\n+60\t422\t20\n+609\t636\t14\n+515\t455\t14\n+114\t570\t20\n+110\t503\t20\n+0\t599\t20\n+43\t589\t20\n+550\t622\t14\n+494\t451\t14\n+108\t508\t20\n+576\t673\t14\n+28\t541\t20\n+0\t456\t20\n+572\t580\t14\n+0\t459\t20\n+0\t471\t20\n+299\t521\t17\n+71\t635\t20\n+83\t648\t20\n+479\t692\t17\n+108\t438\t20\n+85\t550\t20\n+140\t739\t20\n+191\t543\t20\n+123\t477\t20\n+66\t679\t20\n+24\t520\t20\n+67\t653\t20\n+83\t560\t20\n+545\t680\t17\n+500\t488\t14\n+576\t423\t14\n+70\t471\t20\n+35\t681\t20\n+540\t607\t14\n+575\t602\t14\n+6\t519\t20\n+514\t462\t17\n+106\t631\t20\n+76\t639\t20\n+562\t625\t14\n+111\t627\t20\n+517\t538\t14\n+0\t502\t20\n+149\t468\t20\n+560\t537\t14\n+497\t541\t14\n+83\t514\t20\n+86\t524\t20\n+556\t611\t14\n+545\t698\t14\n+100\t658\t20\n+90\t587\t20\n+560\t631\t14\n+575\t628\t14\n+0\t507\t20\n+117\t499\t20\n+120\t693\t20\n+568\t539\t14\n+111\t451\t20\n+525\t514\t14\n+522\t511\t14\n+20\t587\t20\n+98\t500\t20\n+141\t463\t20\n+527\t522\t14\n+41\t424\t20\n+494\t595\t14\n+87\t495\t20\n+18\t477\t20\n+531\t443\t14\n+98\t571\t20\n+542\t568\t14\n+106\t445\t20\n+0\t436\t20\n+547\t658\t14\n+0\t545\t20\n+470\t455\t14\n+562\t632\t14\n+550\t498\t14\n+128\t600\t20\n+72\t586\t20\n+78\t552\t20\n+122\t498\t20\n+75\t663\t20\n+457\t416\t14\n+99\t484\t20\n+168\t470\t20\n+495\t408\t14\n+109\t473\t20\n+92\t583\t20\n+99\t481\t20\n+530\t540\t14\n+0\t514\t20\n+58\t634\t20\n+153\t528\t20\n+570\t468\t14\n+452\t433\t14\n+141\t432\t20\n+479\t517\t14\n+20\t438\t20\n+116\t449\t20\n+451\t493\t14\n+79\t483\t20\n+0\t448\t20\n+440\t598\t14\n+0\t498\t20\n+13\t499\t20\n+568\t646\t14\n+68\t616\t20\n+31\t646\t20\n+511\t617\t14\n+511\t645\t14\n+54\t591\t20\n+82\t503\t20\n+66\t703\t20\n+82\t573\t20\n+453\t418\t14\n+56\t505\t20\n+19\t578\t20\n+8\t610\t20\n+549\t681\t14\n+572\t637\t14\n+96\t483\t20\n+0\t674\t20\n+78\t545\t20\n+97\t677\t20\n+503\t625\t14\n+466\t509\t14\n+491\t601\t14\n+501\t501\t14\n+21\t570\t20\n+36\t585\t20\n+493\t576\t14\n+503\t426\t14\n+122\t569\t20\n+528\t566\t14\n+83\t640\t20\n+129\t432\t20\n+478\t413\t14\n+163\t423\t20\n+0\t636\t20\n+565\t599\t14\n+540\t659\t14\n+0\t582\t20\n+40\t643\t20\n+0\t447\t20\n+61\t549\t20\n+584\t609\t14\n+542\t425\t14\n+38\t425\t20\n+498\t408\t14\n+0\t615\t20\n+83\t452\t20\n+508\t623\t14\n+80\t516\t20\n+92\t464\t20\n+346\t632\t20\n+9\t623\t20\n+123\t502\t20\n+133\t538\t20\n+525\t436\t14\n+33\t536\t20\n+524\t608\t14\n+0\t529\t20\n+0\t705\t20\n+87\t620\t20\n+87\t424\t20\n+17\t506\t20\n+549\t537\t14\n+79\t445\t20\n+89\t499\t20\n+0\t575\t20\n+124\t598\t20\n+78\t455\t20\n+101\t485\t20\n+139\t494\t20\n+113\t502\t20\n+103\t622\t20\n+49\t458\t20\n+61\t551\t20\n+0\t576\t20\n+123\t643\t20\n+105\t550\t20\n+86\t534\t20\n+69\t454\t20\n+74\t735\t20\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/flowcl_pop01.pdf
b
Binary file test-data/out2/flowcl_pop01.pdf has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/flowcl_pop01.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out2/flowcl_pop01.txt Wed Jul 29 17:03:53 2020 -0400
[
@@ -0,0 +1,26 @@
+                      [,1]                                                                   
+Short marker names    "CD4+CCR7-"                                                            
+Ontology marker names "CD4 molecule, C-C chemokine receptor type 7"                          
+Experiment markers    "CD4,CCR7"                                                             
+Ontology exper. names "CD4 molecule, C-C chemokine receptor type 7"                          
+Successful Match?     "No"                                                                   
+Marker ID             "1) PR_000001004, PR_000001203 2) PR_000001004, PR_000001203 3)"       
+                      "PR_000001004, PR_000001203"                                           
+Marker Label          "1) CD4 molecule, C-C chemokine receptor type 7 2) CD4 molecule, C-C"  
+                      "chemokine receptor type 7 3) CD4 molecule, C-C chemokine receptor"    
+                      "type 7"                                                               
+Marker Key            "1) { } CCR7-, CD4+ ( ) [ T cell receptor co-receptor CD8-, alpha-beta"
+                      "T cell receptor complex+, receptor-type tyrosine-protein phosphatase" 
+                      "C isoform CD45RA+, CD3+ ] 2) { } CCR7-, CD4+ ( ) [ T cell receptor"   
+                      "co-receptor CD8-, alpha-beta T cell receptor complex+, C-X-C"         
+                      "chemokine receptor type 5+, inducible T-cell costimulator+,"          
+                      "programmed cell death protein 1+, CD3+ ] 3) { } CCR7-, CD4+ ( ) [ T"  
+                      "cell receptor co-receptor CD8-, interleukin-2 receptor subunit"       
+                      "alpha-, receptor-type tyrosine-protein phosphatase C isoform CD45RA-,"
+                      "alpha-beta T cell receptor complex+, receptor-type tyrosine-protein"  
+                      "phosphatase C isoform CD45RO+, interleukin-7 receptor subunit alpha+,"
+                      "CD3+, CD44 moleculehi, interleukin-2 receptor subunit betahi ]"       
+Score (Out of 1)      "1) 0.333 2) 0.25 3) 0.182"                                            
+Cell ID               "1) CL_0001044 2) CL_0002038 3) CL_0000905"                            
+Cell Label            "1) effector CD4-positive, alpha-beta T cell 2) T follicular helper"   
+                      "cell 3) effector memory CD4-positive, alpha-beta T cell"              
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/flowcl_pop04.pdf
b
Binary file test-data/out2/flowcl_pop04.pdf has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/flowcl_pop04.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out2/flowcl_pop04.txt Wed Jul 29 17:03:53 2020 -0400
[
@@ -0,0 +1,40 @@
+                      [,1]                                                                   
+Short marker names    "CD4-CCR7-"                                                            
+Ontology marker names "CD4 molecule, C-C chemokine receptor type 7"                          
+Experiment markers    "CD4,CCR7"                                                             
+Ontology exper. names "CD4 molecule, C-C chemokine receptor type 7"                          
+Successful Match?     "No"                                                                   
+Marker ID             "1) PR_000001004, PR_000001203 2) PR_000001004, PR_000001203 3)"       
+                      "PR_000001004, PR_000001203 4) PR_000001004, PR_000001203 5)"          
+                      "PR_000001004, PR_000001203"                                           
+Marker Label          "1) CD4 molecule, C-C chemokine receptor type 7 2) CD4 molecule, C-C"  
+                      "chemokine receptor type 7 3) CD4 molecule, C-C chemokine receptor"    
+                      "type 7 4) CD4 molecule, C-C chemokine receptor type 7 5) CD4"         
+                      "molecule, C-C chemokine receptor type 7"                              
+Marker Key            "1) { } CD4-, CCR7- ( ) [ T cell receptor co-receptor CD8+, alpha-beta"
+                      "T cell receptor complex+, receptor-type tyrosine-protein phosphatase" 
+                      "C isoform CD45RA+, CD3+ ] 2) { } CD4-, CCR7- ( ) [ receptor-type"     
+                      "tyrosine-protein phosphatase C isoform CD45RO-, T cell receptor"      
+                      "co-receptor CD8+, alpha-beta T cell receptor complex+, receptor-type" 
+                      "tyrosine-protein phosphatase C isoform CD45RA+, CD3+ ] 3) { } CD4-,"  
+                      "CCR7- ( ) [ L-selectin-, interleukin-7 receptor subunit alpha-, T"    
+                      "cell receptor co-receptor CD8+, alpha-beta T cell receptor complex+," 
+                      "CD69 molecule+, interleukin-2 receptor subunit alpha+, CD3+ ] 4) { }" 
+                      "CD4-, CCR7- ( ) [ interleukin-2 receptor subunit alpha-,"             
+                      "receptor-type tyrosine-protein phosphatase C isoform CD45RA-, T cell" 
+                      "receptor co-receptor CD8+, alpha-beta T cell receptor complex+,"      
+                      "receptor-type tyrosine-protein phosphatase C isoform CD45RO+,"        
+                      "interleukin-7 receptor subunit alpha+, CD3+, CD44 moleculehi,"        
+                      "interleukin-2 receptor subunit betahi ] 5) { } CD4-, CCR7- ( ) ["     
+                      "L-selectin-, interleukin-7 receptor subunit alpha-, T cell receptor"  
+                      "co-receptor CD8+, alpha-beta T cell receptor complex+, CD69"          
+                      "molecule+, interleukin-2 receptor subunit alpha+, ADP-ribosyl cyclase"
+                      "1+, MHC class II histocompatibility antigen alpha chain HLA-DRA+,"    
+                      "CD3+ ]"                                                               
+Score (Out of 1)      "1) 0.333 2) 0.286 3) 0.222 4) 0.182 5) 0.182"                         
+Cell ID               "1) CL_0001050 2) CL_0001062 3) CL_0000906 4) CL_0000913 5) CL_0001049"
+Cell Label            "1) effector CD8-positive, alpha-beta T cell 2) effector memory"       
+                      "CD8-positive, alpha-beta T cell, terminally differentiated 3)"        
+                      "activated CD8-positive, alpha-beta T cell 4) effector memory"         
+                      "CD8-positive, alpha-beta T cell 5) activated CD8-positive, alpha-beta"
+                      "T cell, human"                                                        
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/flowcl_pop07.pdf
b
Binary file test-data/out2/flowcl_pop07.pdf has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/flowcl_pop07.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out2/flowcl_pop07.txt Wed Jul 29 17:03:53 2020 -0400
[
@@ -0,0 +1,66 @@
+                      [,1]                                                                   
+Short marker names    "CD4-CCR7lo"                                                           
+Ontology marker names "CD4 molecule, C-C chemokine receptor type 7"                          
+Experiment markers    "CD4,CCR7"                                                             
+Ontology exper. names "CD4 molecule, C-C chemokine receptor type 7"                          
+Successful Match?     "No"                                                                   
+Marker ID             "1) PR_000001004 2) PR_000001004 3) PR_000001004 4) PR_000001004 5)"   
+                      "PR_000001004 + more"                                                  
+Marker Label          "1) CD4 molecule 2) CD4 molecule 3) CD4 molecule 4) CD4 molecule 5)"   
+                      "CD4 molecule + more"                                                  
+Marker Key            "1) { CCR7lo } CD4- ( ) [ CD19 molecule-, integrin alpha-M-, CD3-,"    
+                      "neural cell adhesion molecule 1-, CD2 molecule-, T-cell surface"      
+                      "glycoprotein CD8 alpha chain-, membrane-spanning 4-domains subfamily" 
+                      "A member 1-, T-cell surface glycoprotein CD5-, CD14 molecule-,"       
+                      "lymphocyte antigen 6G-, lymphocyte antigen 76-, receptor-type"        
+                      "tyrosine-protein phosphatase C isoform CD45R-, CD48 molecule-,"       
+                      "interleukin-7 receptor subunit alpha-, natural killer cell receptor"  
+                      "2B4-, killer cell lectin-like receptor subfamily B member 1C-, CD34"  
+                      "molecule-, receptor-type tyrosine-protein kinase FLT3-, SLAM family"  
+                      "member 1+, mast/stem cell growth factor receptor+, lymphocyte antigen"
+                      "6A-2/6E-1+, Thy-1 membrane glycoproteinlo ] 2) { CCR7lo } CD4- ( ) [" 
+                      "CD19 molecule-, integrin alpha-M-, CD3-, neural cell adhesion"        
+                      "molecule 1-, CD2 molecule-, T-cell surface glycoprotein CD8 alpha"    
+                      "chain-, membrane-spanning 4-domains subfamily A member 1-, T-cell"    
+                      "surface glycoprotein CD5-, CD14 molecule-, lymphocyte antigen 6G-,"   
+                      "lymphocyte antigen 76-, receptor-type tyrosine-protein phosphatase C" 
+                      "isoform CD45R-, CD48 molecule-, interleukin-7 receptor subunit"       
+                      "alpha-, natural killer cell receptor 2B4-, killer cell lectin-like"   
+                      "receptor subfamily B member 1C-, receptor-type tyrosine-protein"      
+                      "kinase FLT3-, SLAM family member 1+, mast/stem cell growth factor"    
+                      "receptor+, lymphocyte antigen 6A-2/6E-1+, CD34 molecule+ ] 3) {"      
+                      "CCR7lo } CD4- ( ) [ CD19 molecule-, integrin alpha-M-, CD3-, neural"  
+                      "cell adhesion molecule 1-, CD2 molecule-, T-cell surface glycoprotein"
+                      "CD8 alpha chain-, membrane-spanning 4-domains subfamily A member 1-," 
+                      "T-cell surface glycoprotein CD5-, CD14 molecule-, CD27 molecule-,"    
+                      "lymphocyte antigen 6G-, lymphocyte antigen 6A-2/6E-1-, lymphocyte"    
+                      "antigen 6C2-, lymphocyte antigen 76-, CD9 molecule+, transmembrane"   
+                      "emp24 domain-containing protein 1+, receptor-type tyrosine-protein"   
+                      "phosphatase C+, mast/stem cell growth factor receptorlo, integrin"    
+                      "beta-7hi, high affinity immunoglobulin epsilon receptor subunit"      
+                      "alphalo ] 4) { CCR7lo } CD4- ( ) [ CD19 molecule-, integrin alpha-M-,"
+                      "CD3-, neural cell adhesion molecule 1-, CD2 molecule-, T-cell surface"
+                      "glycoprotein CD8 alpha chain-, membrane-spanning 4-domains subfamily" 
+                      "A member 1-, T-cell surface glycoprotein CD5-, CD14 molecule-,"       
+                      "lymphocyte antigen 6G-, lymphocyte antigen 76-, CX3C chemokine"       
+                      "receptor 1-, Thy-1 membrane glycoprotein-, interleukin-7 receptor"    
+                      "subunit alpha-, lymphocyte antigen 6A-2/6E-1-, interleukin-3 receptor"
+                      "class 2 alpha chain+, CD34 molecule+, mast/stem cell growth factor"   
+                      "receptor+, Fc-gamma receptor III complexhi, low affinity"             
+                      "immunoglobulin gamma Fc region receptor IIhi ] 5) { CCR7lo } CD4- ( )"
+                      "[ CD19 molecule-, integrin alpha-M-, CD3-, neural cell adhesion"      
+                      "molecule 1-, CD2 molecule-, T-cell surface glycoprotein CD8 alpha"    
+                      "chain-, membrane-spanning 4-domains subfamily A member 1-, T-cell"    
+                      "surface glycoprotein CD5-, CD14 molecule-, lymphocyte antigen 6G-,"   
+                      "lymphocyte antigen 76-, receptor-type tyrosine-protein phosphatase C" 
+                      "isoform CD45R-, CD48 molecule-, interleukin-7 receptor subunit"       
+                      "alpha-, natural killer cell receptor 2B4-, killer cell lectin-like"   
+                      "receptor subfamily B member 1C-, SLAM family member 1+, mast/stem"    
+                      "cell growth factor receptor+, lymphocyte antigen 6A-2/6E-1+ ] + more" 
+Score (Out of 1)      "1) -0.043 2) -0.045 3) -0.048 4) -0.048 5) -0.05 + more"              
+Cell ID               "1) CL_0002034 2) CL_0002033 3) CL_0002029 4) CL_0002002 5) CL_0001008"
+                      "+ more"                                                               
+Cell Label            "1) long term hematopoietic stem cell 2) short term hematopoietic stem"
+                      "cell 3) Fc-epsilon RIalpha-low mast cell progenitor 4) Kit-positive"  
+                      "granulocyte monocyte progenitor 5) Kit and Sca1-positive"             
+                      "hematopoietic stem cell + more"                                       
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/flowcl_pop13.pdf
b
Binary file test-data/out2/flowcl_pop13.pdf has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/flowcl_pop13.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out2/flowcl_pop13.txt Wed Jul 29 17:03:53 2020 -0400
[
@@ -0,0 +1,45 @@
+                      [,1]                                                                   
+Short marker names    "CD4+CCR7lo"                                                           
+Ontology marker names "CD4 molecule, C-C chemokine receptor type 7"                          
+Experiment markers    "CD4,CCR7"                                                             
+Ontology exper. names "CD4 molecule, C-C chemokine receptor type 7"                          
+Successful Match?     "No"                                                                   
+Marker ID             "1) PR_000001004 2) PR_000001004 3) PR_000001004 4) PR_000001004 5)"   
+                      "PR_000001004 + more"                                                  
+Marker Label          "1) CD4 molecule 2) CD4 molecule 3) CD4 molecule 4) CD4 molecule 5)"   
+                      "CD4 molecule + more"                                                  
+Marker Key            "1) { CCR7lo } CD4+ ( ) [ CD19 molecule-, CD34 molecule-, CD34"        
+                      "molecule-, neural cell adhesion molecule 1-, membrane-spanning"       
+                      "4-domains subfamily A member 1-, lymphocyte antigen 75-, T-cell"      
+                      "surface glycoprotein CD8 alpha chain-, CD83 molecule+, integrin"      
+                      "alpha-M+, MHC class II protein complexhi, CD86 moleculehi, CD80"      
+                      "moleculehi, integrin alpha-Xhi ] 2) { CCR7lo } CD4+ ( ) [ CD19"       
+                      "molecule-, CD34 molecule-, CD34 molecule-, neural cell adhesion"      
+                      "molecule 1-, membrane-spanning 4-domains subfamily A member 1-,"      
+                      "lymphocyte antigen 75-, T-cell surface glycoprotein CD8 alpha chain-,"
+                      "integrin alpha-M+, MHC class II protein complexlo, CD86 moleculelo,"  
+                      "CD80 moleculelo, integrin alpha-Xhi ] 3) { CCR7lo } CD4+ ( CCR7+ ) [" 
+                      "T cell receptor co-receptor CD8-, receptor-type tyrosine-protein"     
+                      "phosphatase C isoform CD45RO-, alpha-beta T cell receptor complex+,"  
+                      "interleukin-2 receptor subunit alpha+, receptor-type tyrosine-protein"
+                      "phosphatase C isoform CD45RA+, interleukin-7 receptor subunit"        
+                      "alphalo, C-C chemokine receptor type 4+, CD3+, CD44 moleculelo,"      
+                      "L-selectinhi ] 4) { CCR7lo } CD4+ ( CCR7+ ) [ T cell receptor"        
+                      "co-receptor CD8-, interleukin-2 receptor subunit alpha-,"             
+                      "receptor-type tyrosine-protein phosphatase C isoform CD45RA-,"        
+                      "alpha-beta T cell receptor complex+, receptor-type tyrosine-protein"  
+                      "phosphatase C isoform CD45RO+, interleukin-7 receptor subunit alpha+,"
+                      "CD3+, CD44 moleculehi, interleukin-2 receptor subunit betahi ] 5) {"  
+                      "CCR7lo } CD4+ ( ) [ CD19 molecule-, CD34 molecule-, CD34 molecule-,"  
+                      "neural cell adhesion molecule 1-, membrane-spanning 4-domains"        
+                      "subfamily A member 1-, integrin alpha-M-, T-cell surface glycoprotein"
+                      "CD8 alpha chain-, receptor-type tyrosine-protein phosphatase C"       
+                      "isoform CD45R+, lymphocyte antigen 6G+, integrin alpha-Xlo ] + more"  
+Score (Out of 1)      "1) -0.071 2) -0.077 3) -0.083 4) -0.091 5) -0.091 + more"             
+Cell ID               "1) CL_0001003 2) CL_0000997 3) CL_0001045 4) CL_0000904 5) CL_0002455"
+                      "+ more"                                                               
+Cell Label            "1) mature CD8_alpha-negative CD11b-positive dendritic cell 2)"        
+                      "immature CD8_alpha-negative CD11b-positive dendritic cell 3) naive"   
+                      "CCR4-positive regulatory T cell 4) central memory CD4-positive,"      
+                      "alpha-beta T cell 5) CD8_alpha-negative plasmactyoid dendritic cell +"
+                      "more"                                                                 
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/flowcl_pop14.pdf
b
Binary file test-data/out2/flowcl_pop14.pdf has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/flowcl_pop14.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out2/flowcl_pop14.txt Wed Jul 29 17:03:53 2020 -0400
[
@@ -0,0 +1,36 @@
+                      [,1]                                                                   
+Short marker names    "CD4+CCR7+"                                                            
+Ontology marker names "CD4 molecule, C-C chemokine receptor type 7"                          
+Experiment markers    "CD4,CCR7"                                                             
+Ontology exper. names "CD4 molecule, C-C chemokine receptor type 7"                          
+Successful Match?     "No"                                                                   
+Marker ID             "1) PR_000001004, PR_000001203 2) PR_000001004, PR_000001203 3)"       
+                      "PR_000001004, PR_000001203 4) PR_000001004, PR_000001203"             
+Marker Label          "1) CD4 molecule, C-C chemokine receptor type 7 2) CD4 molecule, C-C"  
+                      "chemokine receptor type 7 3) CD4 molecule, C-C chemokine receptor"    
+                      "type 7 4) CD4 molecule, C-C chemokine receptor type 7"                
+Marker Key            "1) { } CD4+, CCR7+ ( ) [ T cell receptor co-receptor CD8-,"           
+                      "interleukin-2 receptor subunit alpha-, alpha-beta T cell receptor"    
+                      "complex+, receptor-type tyrosine-protein phosphatase C isoform"       
+                      "CD45RA+, interleukin-7 receptor subunit alpha+, CD3+, CD44"           
+                      "moleculelo, L-selectinhi ] 2) { } CD4+, CCR7+ ( ) [ T cell receptor"  
+                      "co-receptor CD8-, alpha-beta T cell receptor complex+, interleukin-2" 
+                      "receptor subunit alpha+, receptor-type tyrosine-protein phosphatase C"
+                      "isoform CD45RA+, interleukin-7 receptor subunit alphalo, CD3+, CD44"  
+                      "moleculelo, L-selectinhi ] 3) { } CD4+, CCR7+ ( ) [ T cell receptor"  
+                      "co-receptor CD8-, interleukin-2 receptor subunit alpha-,"             
+                      "receptor-type tyrosine-protein phosphatase C isoform CD45RA-,"        
+                      "alpha-beta T cell receptor complex+, receptor-type tyrosine-protein"  
+                      "phosphatase C isoform CD45RO+, interleukin-7 receptor subunit alpha+,"
+                      "CD3+, CD44 moleculehi, interleukin-2 receptor subunit betahi ] 4) { }"
+                      "CD4+, CCR7+ ( ) [ T cell receptor co-receptor CD8-, receptor-type"    
+                      "tyrosine-protein phosphatase C isoform CD45RO-, alpha-beta T cell"    
+                      "receptor complex+, interleukin-2 receptor subunit alpha+,"            
+                      "receptor-type tyrosine-protein phosphatase C isoform CD45RA+,"        
+                      "interleukin-7 receptor subunit alphalo, C-C chemokine receptor type"  
+                      "4+, CD3+, CD44 moleculelo, L-selectinhi ]"                            
+Score (Out of 1)      "1) 0.2 2) 0.2 3) 0.182 4) 0.167"                                      
+Cell ID               "1) CL_0000895 2) CL_0002677 3) CL_0000904 4) CL_0001045"              
+Cell Label            "1) naive thymus-derived CD4-positive, alpha-beta T cell 2) naive"     
+                      "regulatory T cell 3) central memory CD4-positive, alpha-beta T cell"  
+                      "4) naive CCR4-positive regulatory T cell"                             
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/flowcl_pop15.pdf
b
Binary file test-data/out2/flowcl_pop15.pdf has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/flowcl_pop15.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out2/flowcl_pop15.txt Wed Jul 29 17:03:53 2020 -0400
[
@@ -0,0 +1,34 @@
+                      [,1]                                                                   
+Short marker names    "CD4loCCR7-"                                                           
+Ontology marker names "CD4 molecule, C-C chemokine receptor type 7"                          
+Experiment markers    "CD4,CCR7"                                                             
+Ontology exper. names "CD4 molecule, C-C chemokine receptor type 7"                          
+Successful Match?     "No"                                                                   
+Marker ID             "1) PR_000001203 2) PR_000001203 3) PR_000001203 4) PR_000001004 5)"   
+                      "PR_000001004"                                                         
+Marker Label          "1) C-C chemokine receptor type 7 2) C-C chemokine receptor type 7 3)" 
+                      "C-C chemokine receptor type 7 4) CD4 molecule 5) CD4 molecule"        
+Marker Key            "1) { CD4lo } CCR7- ( receptor-type tyrosine-protein phosphatase C"    
+                      "isoform CD45RA- ) [ T cell receptor co-receptor CD8-, interleukin-2"  
+                      "receptor subunit alpha-, receptor-type tyrosine-protein phosphatase C"
+                      "isoform CD45RA-, alpha-beta T cell receptor complex+, receptor-type"  
+                      "tyrosine-protein phosphatase C isoform CD45RO+, interleukin-7"        
+                      "receptor subunit alpha+, CD3+, CD44 moleculehi, interleukin-2"        
+                      "receptor subunit betahi ] 2) { CD4lo } CCR7- ( CD4+ ) [ T cell"       
+                      "receptor co-receptor CD8-, alpha-beta T cell receptor complex+, C-X-C"
+                      "chemokine receptor type 5+, inducible T-cell costimulator+,"          
+                      "programmed cell death protein 1+, CD3+ ] 3) { CD4lo } CCR7- ("        
+                      "receptor-type tyrosine-protein phosphatase C isoform CD45RA+ ) [ T"   
+                      "cell receptor co-receptor CD8-, alpha-beta T cell receptor complex+," 
+                      "receptor-type tyrosine-protein phosphatase C isoform CD45RA+, CD3+ ]" 
+                      "4) { CCR7- } CD4lo ( ) [ CD44 molecule-, KLRB1-like protein-,"        
+                      "alpha-beta T cell receptor complex+, T cell receptor co-receptor"     
+                      "CD8lo, signal transducer CD24hi ] 5) { CCR7- } CD4lo ( ) [ alpha-beta"
+                      "T cell receptor complexhi, T cell receptor co-receptor CD8+, CD69"    
+                      "molecule+ ]"                                                          
+Score (Out of 1)      "1) -0.091 2) -0.125 3) -0.167 4) -0.167 5) -0.25"                     
+Cell ID               "1) CL_0000905 2) CL_0002038 3) CL_0001044 4) CL_0002039 5) CL_0002430"
+Cell Label            "1) effector memory CD4-positive, alpha-beta T cell 2) T follicular"   
+                      "helper cell 3) effector CD4-positive, alpha-beta T cell 4) immature"  
+                      "NK T cell stage I 5) CD4-intermediate, CD8-positive double-positive"  
+                      "thymocyte"                                                            
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/flowcl_pop19.pdf
b
Binary file test-data/out2/flowcl_pop19.pdf has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/flowcl_pop19.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out2/flowcl_pop19.txt Wed Jul 29 17:03:53 2020 -0400
[
@@ -0,0 +1,43 @@
+                      [,1]                                                                   
+Short marker names    "CD4loCCR7+"                                                           
+Ontology marker names "CD4 molecule, C-C chemokine receptor type 7"                          
+Experiment markers    "CD4,CCR7"                                                             
+Ontology exper. names "CD4 molecule, C-C chemokine receptor type 7"                          
+Successful Match?     "No"                                                                   
+Marker ID             "1) PR_000001203 2) PR_000001203 3) PR_000001203 4) PR_000001203 5)"   
+                      "PR_000001203 + more"                                                  
+Marker Label          "1) C-C chemokine receptor type 7 2) C-C chemokine receptor type 7 3)" 
+                      "C-C chemokine receptor type 7 4) C-C chemokine receptor type 7 5) C-C"
+                      "chemokine receptor type 7 + more"                                     
+Marker Key            "1) { CD4lo } CCR7+ ( receptor-type tyrosine-protein phosphatase C"    
+                      "isoform CD45RO- ) [ T cell receptor co-receptor CD8-, receptor-type"  
+                      "tyrosine-protein phosphatase C isoform CD45RO-, alpha-beta T cell"    
+                      "receptor complex+, interleukin-2 receptor subunit alpha+,"            
+                      "receptor-type tyrosine-protein phosphatase C isoform CD45RA+,"        
+                      "interleukin-7 receptor subunit alphalo, C-C chemokine receptor type"  
+                      "4+, CD3+, CD44 moleculelo, L-selectinhi ] 2) { CD4lo } CCR7+ ("       
+                      "receptor-type tyrosine-protein phosphatase C isoform CD45RA- ) [ T"   
+                      "cell receptor co-receptor CD8-, interleukin-2 receptor subunit"       
+                      "alpha-, receptor-type tyrosine-protein phosphatase C isoform CD45RA-,"
+                      "alpha-beta T cell receptor complex+, receptor-type tyrosine-protein"  
+                      "phosphatase C isoform CD45RO+, interleukin-7 receptor subunit alpha+,"
+                      "CD3+, CD44 moleculehi, interleukin-2 receptor subunit betahi ] 3) {"  
+                      "CD4lo } CCR7+ ( receptor-type tyrosine-protein phosphatase C isoform" 
+                      "CD45RA+ ) [ T cell receptor co-receptor CD8-, interleukin-2 receptor" 
+                      "subunit alpha-, alpha-beta T cell receptor complex+, receptor-type"   
+                      "tyrosine-protein phosphatase C isoform CD45RA+, interleukin-7"        
+                      "receptor subunit alpha+, CD3+, CD44 moleculelo, L-selectinhi ] 4) {"  
+                      "CD4lo } CCR7+ ( receptor-type tyrosine-protein phosphatase C isoform" 
+                      "CD45RA+ ) [ T cell receptor co-receptor CD8-, alpha-beta T cell"      
+                      "receptor complex+, interleukin-2 receptor subunit alpha+,"            
+                      "receptor-type tyrosine-protein phosphatase C isoform CD45RA+,"        
+                      "interleukin-7 receptor subunit alphalo, CD3+, CD44 moleculelo,"       
+                      "L-selectinhi ] 5) { CD4lo } CCR7+ ( ) [ receptor-type"                
+                      "tyrosine-protein phosphatase C isoform CD45RA+, interleukin-7"        
+                      "receptor subunit alpha+, CD3+, CD44 moleculelo, L-selectinhi ] + more"
+Score (Out of 1)      "1) -0.083 2) -0.091 3) -0.1 4) -0.1 5) -0.167 + more"                 
+Cell ID               "1) CL_0001045 2) CL_0000904 3) CL_0000895 4) CL_0002677 5) CL_0000898"
+                      "+ more"                                                               
+Cell Label            "1) naive CCR4-positive regulatory T cell 2) central memory"           
+                      "CD4-positive, alpha-beta T cell 3) naive thymus-derived CD4-positive,"
+                      "alpha-beta T cell 4) naive regulatory T cell 5) naive T cell + more"  
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/flowcl_pop20.pdf
b
Binary file test-data/out2/flowcl_pop20.pdf has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/flowcl_pop20.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out2/flowcl_pop20.txt Wed Jul 29 17:03:53 2020 -0400
[
@@ -0,0 +1,23 @@
+                      [,1]                                                                   
+Short marker names    "CD4-CCR7+"                                                            
+Ontology marker names "CD4 molecule, C-C chemokine receptor type 7"                          
+Experiment markers    "CD4,CCR7"                                                             
+Ontology exper. names "CD4 molecule, C-C chemokine receptor type 7"                          
+Successful Match?     "No"                                                                   
+Marker ID             "1) PR_000001203, PR_000001004 2) PR_000001203, PR_000001004"          
+Marker Label          "1) C-C chemokine receptor type 7, CD4 molecule 2) C-C chemokine"      
+                      "receptor type 7, CD4 molecule"                                        
+Marker Key            "1) { } CD4-, CCR7+ ( ) [ interleukin-2 receptor subunit alpha-, T"    
+                      "cell receptor co-receptor CD8+, alpha-beta T cell receptor complex+," 
+                      "receptor-type tyrosine-protein phosphatase C isoform CD45RA+,"        
+                      "interleukin-7 receptor subunit alpha+, CD3+, CD44 moleculelo,"        
+                      "L-selectinhi ] 2) { } CD4-, CCR7+ ( ) [ receptor-type"                
+                      "tyrosine-protein phosphatase C isoform CD45RA-, interleukin-2"        
+                      "receptor subunit alpha-, T cell receptor co-receptor CD8+, alpha-beta"
+                      "T cell receptor complex+, receptor-type tyrosine-protein phosphatase" 
+                      "C isoform CD45RO+, interleukin-7 receptor subunit alpha+, CD3+, CD44" 
+                      "moleculehi, interleukin-2 receptor subunit betahi ]"                  
+Score (Out of 1)      "1) 0.2 2) 0.182"                                                      
+Cell ID               "1) CL_0000900 2) CL_0000907"                                          
+Cell Label            "1) naive thymus-derived CD8-positive, alpha-beta T cell 2) central"   
+                      "memory CD8-positive, alpha-beta T cell"                               
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/flowcl_pop23.pdf
b
Binary file test-data/out2/flowcl_pop23.pdf has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/flowcl_pop23.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out2/flowcl_pop23.txt Wed Jul 29 17:03:53 2020 -0400
[
@@ -0,0 +1,17 @@
+                      [,1]                                                               
+Short marker names    "CD4loCCR7lo"                                                      
+Ontology marker names "CD4 molecule, C-C chemokine receptor type 7"                      
+Experiment markers    "CD4,CCR7"                                                         
+Ontology exper. names "CD4 molecule, C-C chemokine receptor type 7"                      
+Successful Match?     "No"                                                               
+Marker ID             "1) PR_000001004 2) PR_000001004"                                  
+Marker Label          "1) CD4 molecule 2) CD4 molecule"                                  
+Marker Key            "1) { CCR7lo } CD4lo ( ) [ CD44 molecule-, KLRB1-like protein-,"   
+                      "alpha-beta T cell receptor complex+, T cell receptor co-receptor" 
+                      "CD8lo, signal transducer CD24hi ] 2) { CCR7lo } CD4lo ( ) ["      
+                      "alpha-beta T cell receptor complexhi, T cell receptor co-receptor"
+                      "CD8+, CD69 molecule+ ]"                                           
+Score (Out of 1)      "1) -0.167 2) -0.25"                                               
+Cell ID               "1) CL_0002039 2) CL_0002430"                                      
+Cell Label            "1) immature NK T cell stage I 2) CD4-intermediate, CD8-positive"  
+                      "double-positive thymocyte"                                        
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/m0_m0_90X90.png
b
Binary file test-data/out2/m0_m0_90X90.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/m0_m1_90X90.png
b
Binary file test-data/out2/m0_m1_90X90.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/m1_m0_90X90.png
b
Binary file test-data/out2/m1_m0_90X90.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/m1_m1_90X90.png
b
Binary file test-data/out2/m1_m1_90X90.png has changed
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/out.html
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out2/out.html Wed Jul 29 17:03:53 2020 -0400
[
b'@@ -0,0 +1,298 @@\n+<html>\n+<head>\n+<title>Flow Overview</title>\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" type="text/css" href="js/Editor-1.5.6/css/editor.dataTables.css">\n+<link rel="stylesheet" href="css/parallelCoordinates.css"/>\n+\n+<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>\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="js/Editor-1.5.6/js/dataTables.editor.js" type="text/javascript"></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="js/color_palette.js" type="text/javascript"></script>\n+<script src="js/overview.js" type="text/javascript"></script>\n+<script src="js/scatter2D.js" type="text/javascript"></script>\n+<script src="js/scatter3D.js" type="text/javascript"></script>\n+<script src="js/scatterMFI.js" type="text/javascript"></script>\n+<script src="js/parallelCoordinates.js" type="text/javascript"></script>\n+<script src="js/boxplotsFlow.js" type="text/javascript"></script>\n+<script src="js/profileCLs.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+\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="mfi"><a href="#mfi" data-toggle="tab">MFI/Pop</a></li>\n+                <li class="homeTab" data-value="overviewPlot"><a href="#overviewPlot" data-toggle="tab">Overview Plot</a></li>\n+                <li class="homeTab" data-value="scatter2D"><a href="#scatter2D" data-toggle="tab">Scatter 2D</a></li>\n+                <li class="homeTab" data-value="scatter3D"><a href="#scatter3D" data-toggle="tab">Scatter 3D</a></li>\n+                <li class="homeTab" data-value="parallelCoordinates"><a href="#parallelCoordinates" data-toggle="tab">Parallel Coordinates</a></li>\n+                <li class="homeTab" data-value="stats"><a href="#boxplots" data-toggle="tab">Summary Statistics Boxplots</a></li>\n+                <li class="homeTab" data-value="clprofiles"><a href="#clprofiles" data-toggle="tab">Populations Cell Ontologies</a></li>\n+            </ul>\n+\n+            <div class="tab-content">\n+                <div class="tab-pane active" id="mfi" style="min-height:500px;">\n+                    <div id="mfiDiv"></div>\n+                </div>\n+\n+                <div class="tab-pane" id="overviewPlot" style="min-height:500px;">\n+                    <div id="overviewPlotDiv">Overview</div>\n+                </div>\n+\n+                <div class="tab-pane" id="scatter2D" style="min-height:500px;">\n+                    <div id="toolbarDiv2D" class="col-md-12 chartDiv">\n+                    X Ax'..b'y 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="plotDivbp" class="col-md-8" style="height:100%;"></div>\n+\n+                        <div id="popDivbp" class="col-md-2" style="height:100%;">\n+                            &nbsp;&nbsp<button id="updateDisplaybp" class="igbtn">Reset Display</button>\n+                            <table id="popTablebp" class="table table-condensed table-bordered igtable">\n+                                <thead>\n+                                    <tr>\n+                                        <th><input type="checkbox" checked id="popSelectAllbp"/></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+\n+                <div class="tab-pane" id="clprofiles" style="min-height:500px;">\n+                    <div class="row">\n+                        <div id="clprof"/>\n+                    </div>\n+                </div>\n+                </div>\n+            </div>\n+  \t    </div>\n+    </div>\n+</div>\n+\n+\n+<script>\n+var mfiLoaded = false;\n+var populationLoaded = false;\n+var overviewPlotLoaded = false;\n+var scatter2DLoaded = false;\n+var scatter3DLoaded = false;\n+var parallelCoordinatesLoaded = false;\n+var clprofilesLoaded = false;\n+var bpLoaded = 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 == \'#mfi\') {\n+        if (mfiLoaded) {\n+            return true;\n+        }\n+        mfiLoaded = true;\n+        displayMFI();\n+      }\n+      if (tab == \'#overviewPlot\') {\n+        if (overviewPlotLoaded) {\n+            return true;\n+        }\n+        overviewPlotLoaded = true;\n+        displayOverviewPlot();\n+      }\n+      if (tab == \'#scatter2D\') {\n+        if (scatter2DLoaded) {\n+            displayScatterPopulation2D();\n+            return true;\n+        }\n+        scatter2DLoaded = true;\n+        displayScatter2D();\n+      }\n+      if (tab == \'#scatter3D\') {\n+        if (scatter3DLoaded) {\n+            displayScatterPopulation3D();\n+            return true;\n+        }\n+        scatter3DLoaded = true;\n+        displayScatter3D();\n+      }\n+      if (tab == \'#parallelCoordinates\') {\n+        if (parallelCoordinatesLoaded) {\n+            displayPopTable();\n+            displayTableGrid();\n+            return true;\n+        }\n+        parallelCoordinatesLoaded = true;\n+        displayParallelCoordinates();\n+      }\n+      if (tab == \'#boxplots\') {\n+        if (bpLoaded) {\n+            displayPopulationLegend(configbp);\n+            displayMarkerTable(configbp);\n+            updateBoxplot(configbp);\n+            return true;\n+        }\n+        bpLoaded = true;\n+        displayMFIBoxplot();\n+      }\n+      if (tab == \'#clprofiles\') {\n+        if (clprofilesLoaded) {\n+            return true;\n+        }\n+        clprofilesLoaded = true;\n+        displayCLTable();\n+      }\n+    });\n+\n+    mfiLoaded = true;\n+    displayMFI();\n+});\n+</script>\n+</body>\n+</html>\n\\ No newline at end of file\n'
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/out2/scores.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out2/scores.txt Wed Jul 29 17:03:53 2020 -0400
b
@@ -0,0 +1,27 @@
+Population_ID CD4 CCR7 Count Percentage
+1 3 1 1000 5
+2 3 1 1000 5
+3 3 1 1000 5
+4 1 1 1000 5
+5 1 1 1000 5
+6 1 1 1000 5
+7 1 2 1000 5
+8 3 1 1000 5
+9 1 2 1000 5
+10 3 1 1000 5
+11 1 1 1000 5
+12 1 1 1000 5
+13 3 2 1000 5
+14 3 3 1000 5
+15 2 1 1000 5
+16 1 2 1000 5
+17 3 3 1000 5
+18 3 1 1000 5
+19 2 3 1000 5
+20 1 3 1000 5
+21 1 1 1000 5
+22 2 1 1000 5
+23 2 2 1000 5
+24 2 1 1000 5
+25 1 2 1000 5
+26 2 2 1000 5
b
diff -r 8283ff163ba6 -r b5453d07f740 test-data/profile.flowscore
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/profile.flowscore Wed Jul 29 17:03:53 2020 -0400
b
@@ -0,0 +1,27 @@
+Population_ID CD4 CCR7 Count Percentage
+1 3 1 1000 5
+2 3 1 1000 5
+3 3 1 1000 5
+4 1 1 1000 5
+5 1 1 1000 5
+6 1 1 1000 5
+7 1 2 1000 5
+8 3 1 1000 5
+9 1 2 1000 5
+10 3 1 1000 5
+11 1 1 1000 5
+12 1 1 1000 5
+13 3 2 1000 5
+14 3 3 1000 5
+15 2 1 1000 5
+16 1 2 1000 5
+17 3 3 1000 5
+18 3 1 1000 5
+19 2 3 1000 5
+20 1 3 1000 5
+21 1 1 1000 5
+22 2 1 1000 5
+23 2 2 1000 5
+24 2 1 1000 5
+25 1 2 1000 5
+26 2 2 1000 5