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

Changeset 0:60aa5e56531a (2017-02-27)
Next changeset 1:34397a84faf1 (2020-06-23)
Commit message:
Uploaded
added:
flowai/FCSflowAI.R
flowai/FCSflowAI.xml
flowai/static/images/flowtools/autoflowrate.png
flowai/static/images/flowtools/autosignal.png
flowai/static/images/flowtools/margins.png
flowai/test-data/input.fcs
flowai/test-data/nooutliers/QCreport_nooutliers.html
flowai/test-data/nooutliers/hqdata_nooutliers.fcs
flowai/test-data/std/QCreport.html
flowai/test-data/std/alldata.fcs
flowai/test-data/std/hqdata.fcs
flowai/test-data/std/lqdata.fcs
flowai/test-data/withsfsc/QCreport_sfsc.html
flowai/test-data/withsfsc/hqdata_sfsc.fcs
b
diff -r 000000000000 -r 60aa5e56531a flowai/FCSflowAI.R
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/flowai/FCSflowAI.R Mon Feb 27 12:55:30 2017 -0500
[
@@ -0,0 +1,41 @@
+#
+#
+# Authors: Gianni Monaco
+# 
+# Reference: flowAI: automatic and interactive anomaly discerning 
+#            tools for flow cytometry data.
+#            Gianni Monaco, Hao Chen, Michael Poidinger, Jinmiao Chen, 
+#            Joao Pedro de Magalhaes and Anis Larbi
+#            Bioinformatics (2016)
+#            doi: 10.1093/bioinformatics/btw191
+#
+
+library(flowAI)
+library(methods)
+
+# parse arguments
+
+args <- commandArgs(trailingOnly = TRUE)
+
+remFS <- if(args[5]) c("FSC", "SSC") else NULL
+
+flow_auto_qc(
+    fcsfiles = args[2], 
+    remove_from = args[3], 
+    alphaFR = as.numeric(args[4]), 
+    ChRemoveFS = remFS, 
+    outlierFS = args[6], 
+    pen_valueFS = as.numeric(args[7]), 
+    sideFM = args[8], 
+    fcs_QC = ifelse(args[10] == "None", FALSE, "_QC"),
+    fcs_highQ = ifelse(args[11] == "None", FALSE, "_highQ"), 
+    fcs_lowQ = ifelse(args[12] == "None", FALSE, "_lowQ"), 
+    folder_results = FALSE)
+
+try(file.rename(dir(".", pattern = ".*_QC.html"), args[9]), silent =TRUE)
+try(file.rename(dir(".", pattern = ".*_QC.fcs"), args[10]), silent =TRUE)
+try(file.rename(dir(".", pattern = ".*_highQ.fcs"), args[11]), silent =TRUE)
+try(file.rename(dir(".", pattern = ".*_lowQ.fcs"), args[12]), silent =TRUE)
+
+
+
b
diff -r 000000000000 -r 60aa5e56531a flowai/FCSflowAI.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/flowai/FCSflowAI.xml Mon Feb 27 12:55:30 2017 -0500
[
b'@@ -0,0 +1,178 @@\n+<tool id="flowAI" name="flowAI" version="1.0">\n+  <description> automatic quality control </description>\n+  <requirements>\n+    <requirement type="package" version="3.3.0">r</requirement>\n+    <requirement type="package" version="1.38.2">bioconductor-flowcore</requirement>\n+    <requirement type="package" version="1.2.9">bioconductor-flowai</requirement>\n+  </requirements>\n+  <stdio>\n+    <exit_code range="2:" level="fatal" description="See stderr for more details." />\n+  </stdio>\n+  <command><![CDATA[\n+      Rscript --slave --vanilla $GALAXY_ROOT_DIR/tools/flowtools/FCSflowAI.R --args "${input}" "${remove}" $alphaFR $chremFS $outFS $penFS "${sideFM}" "${full_rep}" $highfcs $lowfcs $qcfcs\n+  ]]>\n+  </command>\n+  <inputs>\n+    <param format="fcs" name="input" type="data" label="FCS file"/>\n+    <param name="remove" type="select" label="Remove low quality cells from:">\n+      <option value="all">Flow rate, Signal acquisition and Dynamic range</option>\n+      <option value="FR_FS">Flow rate and Signal acquisition</option>\n+      <option value="FR_FM">Flow rate and Dynamic range</option>\n+      <option value="FS_FM">Signal acquisition and Dynamic range</option>\n+      <option value="FR">Flow rate</option>\n+      <option value="FS">Signal acquisition</option>\n+      <option value="FM">Dynamic range</option>\n+    </param>\n+    <param name="alphaFR" type="float" label="Significance threshold for flow rate check:" value="0.01"/>\n+    <param name="chremFS" type="boolean" checked="true" truevalue="TRUE" falsevalue="FALSE" label="Do you want to exclude the FSC and SSC parameters from the signal acquisition check?" help="The FSC and SSC parameters will not be taken into account for analysis but will not be removed."/>\n+    <param name="outFS" type="boolean" checked="false" truevalue="TRUE" falsevalue="FALSE" label="Do you want to remove outliers before the signal acquisition check?"/>\n+    <param name="penFS" type="integer" label="Stringency of signal acquisition check (higher tolerance with higher values):" value="200"/>\n+    <param name="sideFM" type="select" label="Include in dynamic range check:">\n+      <option value="both">Both limits</option>\n+      <option value="upper">Upper limit only</option>\n+      <option value="lower">Lower limit only</option>\n+    </param>\n+    <param name="highQ_FCS" type="boolean" checked="true" truevalue="TRUE" falsevalue="FALSE" label="Create FCS file with only high quality events?"/>\n+    <param name="lowQ_FCS" type="boolean" checked="false" truevalue="TRUE" falsevalue="FALSE" label="Create FCS file with only low quality events?"/>\n+    <param name="QC_FCS" type="boolean" checked="false" truevalue="TRUE" falsevalue="FALSE" label="Create FCS file with an additional parameter where low quality events have values higher than 10,000?"/>\n+  </inputs>\n+  <outputs>\n+    <data format="html" name="full_rep" label="QC of ${input.name}">\n+    </data>\n+    <data format="fcs" name="highfcs" label="High quality events only from ${input.name}">\n+      <filter>(highQ_FCS)</filter>\n+    </data>\n+    <data format="fcs" name="lowfcs" label="Low quality events only from ${input.name}">\n+      <filter>(lowQ_FCS)</filter>\n+    </data>\n+    <data format="fcs" name="qcfcs" label="All events (low quality event marked up) from ${input.name}">\n+      <filter>(QC_FCS)</filter>\n+    </data>\n+  </outputs>\n+  <tests>\n+    <test>\n+      <param name="input" value="input.fcs"/>\n+      <param name="remove" value="all"/>\n+      <param name="alphaFR" value="0.01"/>\n+      <param name="chremFS" value="TRUE"/>\n+      <param name="outFS" value="FALSE"/>\n+      <param name="penFS" value="200"/>\n+      <param name="sideFM" value="both"/>\n+      <param name="highQ_FCS" value="TRUE"/>\n+      <param name="lowQ_FCS" value="FALSE"/>\n+      <param name="QC_FCS" value="FALSE"/>\n+      <output name="full_rep" file="std/QCreport.html" lines_diff="2"/>\n+      <output name="highfcs" file="std/hqdata.fcs" compare="sim_size"/>\n+    </te'..b'sim_size"/>\n+      <output name="qcfcs" file="std/alldata.fcs" compare="sim_size"/>\n+    </test>\n+    <test>\n+      <param name="input" value="input.fcs"/>\n+      <param name="remove" value="all"/>\n+      <param name="alphaFR" value="0.01"/>\n+      <param name="chremFS" value="TRUE"/>\n+      <param name="outFS" value="TRUE"/>\n+      <param name="penFS" value="200"/>\n+      <param name="sideFM" value="both"/>\n+      <param name="highQ_FCS" value="TRUE"/>\n+      <param name="lowQ_FCS" value="FALSE"/>\n+      <param name="QC_FCS" value="FALSE"/>\n+      <output name="full_rep" file="nooutliers/QCreport_nooutliers.html" lines_diff="2"/>\n+      <output name="highfcs" file="nooutliers/hqdata_nooutliers.fcs" compare="sim_size"/>\n+    </test>\n+    <test>\n+      <param name="input" value="input.fcs"/>\n+      <param name="remove" value="all"/>\n+      <param name="alphaFR" value="0.01"/>\n+      <param name="chremFS" value="FALSE"/>\n+      <param name="outFS" value="FALSE"/>\n+      <param name="penFS" value="200"/>\n+      <param name="sideFM" value="both"/>\n+      <param name="highQ_FCS" value="TRUE"/>\n+      <param name="lowQ_FCS" value="FALSE"/>\n+      <param name="QC_FCS" value="FALSE"/>\n+      <output name="full_rep" file="withsfsc/QCreport_sfsc.html" lines_diff="2"/>\n+      <output name="highfcs" file="withsfsc/hqdata_sfsc.fcs" compare="sim_size"/>\n+    </test>\n+  </tests>\n+  <help><![CDATA[\n+   This tool automatically performs quality control of flow cytometry data.\n+\n+-----\n+\n+**Input files**\n+\n+  \xe2\x80\xa2 One or more FCS files.\n+\n+**Output files**\n+\n+  \xe2\x80\xa2 full HTML report\n+  \xe2\x80\xa2 new FCS file containing only high quality events (default)\n+  \xe2\x80\xa2 new FCS file containing only low quality events (optional)\n+  \xe2\x80\xa2 original FCS file containing an additional parameter where the low quality events have a value higher than 10,000 (optional)\n+\n+\n+The files generated will be FCS 3.0.\n+\n+----\n+\n+Description of the approach\n+\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\n+This tool identifies anomalies from three fundamental properties of flow cytometry data:\n+\n+  - *Flow rate*. Surges and substantial shifts of the rate of the cells passing through the capillary tube are detected.\n+\n+  - *Signal acquisition*. Instability in the signal acquired for each channel are detected. In most cases it corresponds to flow rate surges and shifts.\n+\n+  - *Dynamic range*. Values recorded in the upper limit (margin events) and negative outliers are removed.\n+\n+.. class:: infomark\n+\n+An HTML report with informative plots is generated. Users are advised to review the report and also::\n+\n+  1. Eventually adjust the quality control parameters\n+  2. Discard the entire FCS file because of an unacceptable number of anomalies\n+  3. Program a flow cytometry maintenance because of recurrent issues\n+\n+\n+Parameters\n+\'\'\'\'\'\'\'\'\'\'\n+Default settings work well in the majority of cases. Setting customization may be needed to address properties of unique datasets. For example, high-dimensional FCS files may perform best with more tolerant setttings for signal acquisition checks.\n+\n+Example\n+\'\'\'\'\'\'\'\n+This section provides an example of a flowAI quality control html report with plots:\n+\n+\n+Flow rate check: anomalies are flagged with a green circle. In this instance a surge was detected and discarded as well as a shift from the median value later in the experiment.\n+\n+.. image:: static/images/autoflowrate.png\n+\n+Signal acquistion check: Orange background (or yellow depending on the user\'s computer) highlights the stable region. Signal acquistion shifts are identified on a per channel basis and the largest region containing no anomalies is retained.\n+\n+.. image:: static/images/autosignal.png\n+\n+Dynamic range check: red and blue lines reflect the detected number of events over time. The x-axis corresponds to that of the signal acquisition plot.\n+\n+.. image:: static/images/margins.png\n+\n+ ]]>\n+  </help>\n+  <citations>\n+    <citation type="doi">10.1093/bioinformatics/btw191</citation>\n+  </citations>\n+</tool>\n'
b
diff -r 000000000000 -r 60aa5e56531a flowai/static/images/flowtools/autoflowrate.png
b
Binary file flowai/static/images/flowtools/autoflowrate.png has changed
b
diff -r 000000000000 -r 60aa5e56531a flowai/static/images/flowtools/autosignal.png
b
Binary file flowai/static/images/flowtools/autosignal.png has changed
b
diff -r 000000000000 -r 60aa5e56531a flowai/static/images/flowtools/margins.png
b
Binary file flowai/static/images/flowtools/margins.png has changed
b
diff -r 000000000000 -r 60aa5e56531a flowai/test-data/input.fcs
b
Binary file flowai/test-data/input.fcs has changed
b
diff -r 000000000000 -r 60aa5e56531a flowai/test-data/nooutliers/QCreport_nooutliers.html
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/flowai/test-data/nooutliers/QCreport_nooutliers.html Mon Feb 27 12:55:30 2017 -0500
[
b'@@ -0,0 +1,240 @@\n+<!DOCTYPE html>\n+<html>\n+<head>\n+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>\n+\n+<title>FCS file information</title>\n+\n+<script type="text/javascript">\n+window.onload = function() {\n+  var imgs = document.getElementsByTagName(\'img\'), i, img;\n+  for (i = 0; i < imgs.length; i++) {\n+    img = imgs[i];\n+    // center an image if it is the only element of its parent\n+    if (img.parentElement.childElementCount === 1)\n+      img.parentElement.style.textAlign = \'center\';\n+  }\n+};\n+</script>\n+\n+\n+\n+\n+\n+<style type="text/css">\n+body, td {\n+   font-family: sans-serif;\n+   background-color: white;\n+   font-size: 13px;\n+}\n+\n+body {\n+  max-width: 800px;\n+  margin: auto;\n+  padding: 1em;\n+  line-height: 20px;\n+}\n+\n+tt, code, pre {\n+   font-family: \'DejaVu Sans Mono\', \'Droid Sans Mono\', \'Lucida Console\', Consolas, Monaco, monospace;\n+}\n+\n+h1 {\n+   font-size:2.2em;\n+}\n+\n+h2 {\n+   font-size:1.8em;\n+}\n+\n+h3 {\n+   font-size:1.4em;\n+}\n+\n+h4 {\n+   font-size:1.0em;\n+}\n+\n+h5 {\n+   font-size:0.9em;\n+}\n+\n+h6 {\n+   font-size:0.8em;\n+}\n+\n+a:visited {\n+   color: rgb(50%, 0%, 50%);\n+}\n+\n+pre, img {\n+  max-width: 100%;\n+}\n+pre {\n+  overflow-x: auto;\n+}\n+pre code {\n+   display: block; padding: 0.5em;\n+}\n+\n+code {\n+  font-size: 92%;\n+  border: 1px solid #ccc;\n+}\n+\n+code[class] {\n+  background-color: #F8F8F8;\n+}\n+\n+table, td, th {\n+  border: none;\n+}\n+\n+blockquote {\n+   color:#666666;\n+   margin:0;\n+   padding-left: 1em;\n+   border-left: 0.5em #EEE solid;\n+}\n+\n+hr {\n+   height: 0px;\n+   border-bottom: none;\n+   border-top-width: thin;\n+   border-top-style: dotted;\n+   border-top-color: #999999;\n+}\n+\n+@media print {\n+   * {\n+      background: transparent !important;\n+      color: black !important;\n+      filter:none !important;\n+      -ms-filter: none !important;\n+   }\n+\n+   body {\n+      font-size:12pt;\n+      max-width:100%;\n+   }\n+\n+   a, a:visited {\n+      text-decoration: underline;\n+   }\n+\n+   hr {\n+      visibility: hidden;\n+      page-break-before: always;\n+   }\n+\n+   pre, blockquote {\n+      padding-right: 1em;\n+      page-break-inside: avoid;\n+   }\n+\n+   tr, img {\n+      page-break-inside: avoid;\n+   }\n+\n+   img {\n+      max-width: 100% !important;\n+   }\n+\n+   @page :left {\n+      margin: 15mm 20mm 15mm 10mm;\n+   }\n+\n+   @page :right {\n+      margin: 15mm 10mm 15mm 20mm;\n+   }\n+\n+   p, h2, h3 {\n+      orphans: 3; widows: 3;\n+   }\n+\n+   h2, h3 {\n+      page-break-after: avoid;\n+   }\n+}\n+</style>\n+\n+\n+\n+</head>\n+\n+<body>\n+<h2>FCS file information</h2>\n+\n+<blockquote>\n+<p>Input file name: dataset_934<br/>\n+Number of events: 20000</p>\n+</blockquote>\n+\n+<h2>Quality control analysis</h2>\n+\n+<h3>Summary</h3>\n+\n+<blockquote>\n+<p>The anomalies were removed from:  Flow Rate, Flow Signal and Flow Margin<br/>\n+Anomalies detected in total: <strong>25.11</strong> %<br/>\n+Number of high quality events: 14978  </p>\n+</blockquote>\n+\n+<h3>Flow rate check</h3>\n+\n+<blockquote>\n+<p><strong>0</strong> % anomalies detected in the flow rate check.</p>\n+</blockquote>\n+\n+<p>It was not possible to analyze the flow rate since the time channel is missing. </p>\n+\n+<h3>Signals acquisition check</h3>\n+\n+<blockquote>\n+<p><strong>0</strong> % anomalies detected in the signal aquisition check. </p>\n+</blockquote>\n+\n+<p>Outliers were removed before the changepoint analysis.0% of anomalies were detected as outliers and 0 of anomalies were detected in the changepoint analysis. </p>\n+\n+<p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABXgAAAHgCAIAAACQE5JdAAAACXBIWXMAAB7CAAAewgFu0HU+AAAgAElEQVR4nOy9e5QjZZ3//36eqkpSne5Od/reE4EdYbg4HIHBFRhvKF5QERRFzoGZFRDX488bHjjrlzkisCoXXfHuKrrrwhyXRY+IIIoKCpwBhosgAoM63NOX9CWddLpTSaqe5/n9UUl1Op1OJ91JJz18XmfOnHSlUvnkU/XcPs/nwpRSIAiCIAiCIAiCIAiCqAe82QIQBEEQBEEQBEEQBHHgQIYGgiAIgiAIgiAIgiDqBhkaCIIgCIIgCIIgCIKoG2RoIAiCIAiCIAiCIAiibpChgSAIgiAIgiAIgiCIukGGBoIgCIIgCIIgCIIg6gYZGgiCIAiCIAiCIAiCqBtkaCAIgiAIgiAIgiAIom6QoYEgCIIgCIIgCIIgiLpBhgaCIAiCIAiCIAiCIOoGGRoIgiAIgiAIgiAIgqgbZGggCIIgCIIgCIIgCKJukKGBIAiCIAiCIAiCII'..b'gI3AEAAAAAIAYCdwAAAAAAiIHAHQAAAAAAYiBwBwAAAACAGAjcAQAAAAAgBgJ3AAAAAACIgcAdAAAAAABiIHAHAAAAAIAYCNwBAAAAACAGAncAAAAAAIiBwB0AAAAAAGIgcAcAAAAAgBgI3AEAAAAAIAYCdwAAAAAAiIHAHQAAAAAAYiBwBwAAAACAGAjcAQAAAAAgBgJ3AAAAAACIgcAdAAAAAABiIHAHAAAAAIAYCNwBAAAAACAGAncAAAAAAIiBwB0AAAAAAGIgcAcAAAAAgBgI3AEAIHONGTMmq3DZ2dm1a9fu1KnTD3/4w7lz5x7wFbp27RpNLoVqBw4cGL3Xgw8+WPD6jh07ivhT5ObmNmnSpFevXvfff/+CBQtKoU4AACghAncAACirEonEhg0bZs+e/fjjj7dv3/6ee+5JJBLpLuqQ7dmzZ+nSpVOmTLnrrruOP/74m2++efPmzekuCgAAUlEh3QUAAAAHV6tWrY4dOxa8kkgk1q1bt3LlyjVr1kRf3nfffbm5uXfffXeaaiyWk08+uUKF//4zJPrMYMmSJevXrw8h7N279ze/+c2UKVPeeuutOnXqpK9MAABIhcAdAADKgC5duvzzn//c/3oikZg8efLw4cNnzpwZQrjvvvuGDBnSrFmz5IRrrrmmb9++pVfowYwbN65WrVr7XMzPz582bdqvfvWr//3f/w0hTJs2rV+/fhMnTszJyUlHjQAAkCJHygAAQBmWlZXVu3fvcePGHXXUUSGE3bt3v/TSSwUn3HjjjT//+c9//vOfp6nAYsnOzj7xxBNfeuml5557Ljs7O4Tw3nvv/fa3v013XQAAcGgE7gAAUOY1bNiwX79+0XjOnDkpvMKCBQv+9Kc/Pfjgg88888zkyZN37doVa4HFdeWVVyaPxBk5cuSOHTvSUgYAAKRG4A4AAOVBq1atosE+z03t1atXVlZWVlZWwYsDBw7MysqqX79+CGH16tUXXHBBy5Ytv/e97915553XXHNN796927Zt+/rrr5da8QXdcccdDRs2DCGsXbt27NixaakBAABSI3AHAIDy4LPPPosGzZs3L/6qFStWdOvW7Y033gghFDwwfeHChQMGDBg/fny8RRZHpUqVLr/88micrtAfAABSI3AHAIAyb+XKlePGjYvGl112WTFX7d27d/DgwYsXL77wwgsnTZq0adOmTZs2vfbaa9EzVxOJxNChQ0uq4iIln/I6derUtBQAAACpEbgDAEDZ9v777/fr12/VqlUhhFtuueX4448v5sI1a9ZMmDDhlltueeWVV3r16lWlSpXq1av379//rbfeqly5cghhwYIFa9asKcHSC9GxY8dosHjx4g0bNpR+AQAAkJoK6S4AAAA4uBkzZvTp06fglUQisX79+hUrVqxcuTKEkJOT86Mf/ej+++8/pJdt0KDByJEjs7O/sRGnRYsWZ511VnScy/z584844ojDLv/Q1KlTp1KlStETU9euXVurVq1SLgAAAFIjcAcAgDJg/fr177zzThETevTocdVVV+0TnR/UjTfeGG1m38dxxx0XDfLz8w/pBeNSs2bNKHBfv359WgoAAIAUOFIGAADKgylTprRt2/a22247pIi8ffv2B7xeoUKmbM3JyspKdwkAAFBcAncAACgDzjzzzMSBbN26ddasWSNGjMjNzc3Pz//lL385bNiw4r9s9HzUDLRp06ZoULt27fRWAgAAxSdwBwCAMqxKlSodO3a8995733jjjejK6NGjZ8+eXczl1atXL7HSUrd+/frt27dH47p166a3GAAAKD6BOwAAlAdnnXXWhRdeGI2ff/759BZzmGbNmhUNmjZtWrNmzfQWAwAAxSdwBwCAcqJnz57RYNGiRemt5DC99dZb0aB79+7prQQAAA6JwB0AAMqJ5PkwmzdvTm8lh2Pnzp3JHfr9+/dPbzEAAHBIBO4AAFBOJE9iadKkSXorORwPPvjg8uXLQwh169a95JJL0l0OAAAcAoE7AACUB1988UVyY3ifPn3SW0zKxowZ87Of/Swa33333RUrVkxvPQAAcEgE7gAAUOa99957ffv23b59ewihUaNGF198cborOjSJRGLmzJlDhgy54oor8vPzQwi9evX6wQ9+kO66AADg0FRIdwEAAMDBzZgx44D71rdt27Zw4cKvv/46+jIrK+sPf/hDpUqVSre6Q3DhhRfm5uYmv0wkEps2bVq8ePHq1auTF0888cTXX389JycnHQUCAEDqBO4AAFAGrF+//p133il6TpUqVZ577rlzzjmndEpKzcSJE4u4m5OT84Mf/OC+++5LPgAWAADKEIE7AACUbTVr1mzWrFnfvn1/+MMfNmjQYJ+711xzzf5b4wcNGtSuXbsQQq1atQ74mn369Im2yR999NElUPI3VKhQoV69esccc8y555773e9+97jjjivpdwQAgBKSlUgk0l0DAABQHkyePHnp0qUhhA4dOrRp0ybd5QAAQGkTuAMAAAAAQAyy010AAAAAAACUBwJ3AAAAAACIgcAdAAAAAABiIHAHAAAAAIAYCNwBAAAAACAGAncAAAAAAIiBwB0AAAAAAGIgcAcAAAAAgBgI3AEAAAAAIAYCdwAAAAAAiIHAHQAAAAAAYiBwBwAAAACAGAjcAQAAAAAgBgJ3AAAAAACIgcAdAAAAAABiIHAHAAAAAIAYCNwBAAAAACAGAncAAAAAAIiBwB0AAAAAAGIgcAcAAAAAgBgI3AEAAAAAIAYCdwAAAAAAiIHAHQAAAAAAYiBwBwAAAACAGAjcAQAAAAAgBgJ3AAAAAACIgcAdAAAAAABiIHAHAAAAAIAYCNwBAAAAACAGAncAAAAAAIiBwB0AAAAAAGIgcAcAAAAAgBgI3AEAAAAAIAYCdwAAAAAAiIHAHQAAAAAAYiBwBwAAAACAGAjcAQAAAAAgBgJ3AAAAAACIgcAdAAAAAABiIHAHAAAAAIAYCNwBAAAAACAGAncAAAAAAIiBwB0AAAAAAGIgcAcAAAAAgBgI3AEAAAAAIAYCdwAAAAAAiIHAHQAAAAAAYiBwBwAAAACAGAjcAQAAAAAgBgJ3AAAAAACIwf8HUOoHNKnhlKkAAAAASUVORK5CYII=" title="plot of chunk unnamed-chunk-11" alt="plot of chunk unnamed-chunk-11" width="750px" style="display: block; margin: auto;" /></p>\n+\n+<p>The plot shows where the anomalies occured the most. The x-axis scale is complementary to the one of the signal acquisition plot. </p>\n+\n+<h5>More info on the anomalies detected in the dynamic range check:</h5>\n+\n+<p>for each channel, The table shows the number of events that did not pass the dynamic range check:</p>\n+\n+<pre><code>##              lower_range upper_range\n+## FSC-H                  0         217\n+## SSC-H                  0        4990\n+## FL1-H                  0           0\n+## FL2-H                  0           0\n+## FL3-H                  0           0\n+## FL4-H                  0           0\n+## total_SUM              0        5207\n+## total_UNIQUE           0        5022\n+</code></pre>\n+\n+</body>\n+\n+</html>\n'
b
diff -r 000000000000 -r 60aa5e56531a flowai/test-data/nooutliers/hqdata_nooutliers.fcs
b
Binary file flowai/test-data/nooutliers/hqdata_nooutliers.fcs has changed
b
diff -r 000000000000 -r 60aa5e56531a flowai/test-data/std/QCreport.html
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/flowai/test-data/std/QCreport.html Mon Feb 27 12:55:30 2017 -0500
[
b'@@ -0,0 +1,238 @@\n+<!DOCTYPE html>\n+<html>\n+<head>\n+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>\n+\n+<title>FCS file information</title>\n+\n+<script type="text/javascript">\n+window.onload = function() {\n+  var imgs = document.getElementsByTagName(\'img\'), i, img;\n+  for (i = 0; i < imgs.length; i++) {\n+    img = imgs[i];\n+    // center an image if it is the only element of its parent\n+    if (img.parentElement.childElementCount === 1)\n+      img.parentElement.style.textAlign = \'center\';\n+  }\n+};\n+</script>\n+\n+\n+\n+\n+\n+<style type="text/css">\n+body, td {\n+   font-family: sans-serif;\n+   background-color: white;\n+   font-size: 13px;\n+}\n+\n+body {\n+  max-width: 800px;\n+  margin: auto;\n+  padding: 1em;\n+  line-height: 20px;\n+}\n+\n+tt, code, pre {\n+   font-family: \'DejaVu Sans Mono\', \'Droid Sans Mono\', \'Lucida Console\', Consolas, Monaco, monospace;\n+}\n+\n+h1 {\n+   font-size:2.2em;\n+}\n+\n+h2 {\n+   font-size:1.8em;\n+}\n+\n+h3 {\n+   font-size:1.4em;\n+}\n+\n+h4 {\n+   font-size:1.0em;\n+}\n+\n+h5 {\n+   font-size:0.9em;\n+}\n+\n+h6 {\n+   font-size:0.8em;\n+}\n+\n+a:visited {\n+   color: rgb(50%, 0%, 50%);\n+}\n+\n+pre, img {\n+  max-width: 100%;\n+}\n+pre {\n+  overflow-x: auto;\n+}\n+pre code {\n+   display: block; padding: 0.5em;\n+}\n+\n+code {\n+  font-size: 92%;\n+  border: 1px solid #ccc;\n+}\n+\n+code[class] {\n+  background-color: #F8F8F8;\n+}\n+\n+table, td, th {\n+  border: none;\n+}\n+\n+blockquote {\n+   color:#666666;\n+   margin:0;\n+   padding-left: 1em;\n+   border-left: 0.5em #EEE solid;\n+}\n+\n+hr {\n+   height: 0px;\n+   border-bottom: none;\n+   border-top-width: thin;\n+   border-top-style: dotted;\n+   border-top-color: #999999;\n+}\n+\n+@media print {\n+   * {\n+      background: transparent !important;\n+      color: black !important;\n+      filter:none !important;\n+      -ms-filter: none !important;\n+   }\n+\n+   body {\n+      font-size:12pt;\n+      max-width:100%;\n+   }\n+\n+   a, a:visited {\n+      text-decoration: underline;\n+   }\n+\n+   hr {\n+      visibility: hidden;\n+      page-break-before: always;\n+   }\n+\n+   pre, blockquote {\n+      padding-right: 1em;\n+      page-break-inside: avoid;\n+   }\n+\n+   tr, img {\n+      page-break-inside: avoid;\n+   }\n+\n+   img {\n+      max-width: 100% !important;\n+   }\n+\n+   @page :left {\n+      margin: 15mm 20mm 15mm 10mm;\n+   }\n+\n+   @page :right {\n+      margin: 15mm 10mm 15mm 20mm;\n+   }\n+\n+   p, h2, h3 {\n+      orphans: 3; widows: 3;\n+   }\n+\n+   h2, h3 {\n+      page-break-after: avoid;\n+   }\n+}\n+</style>\n+\n+\n+\n+</head>\n+\n+<body>\n+<h2>FCS file information</h2>\n+\n+<blockquote>\n+<p>Input file name: dataset_934<br/>\n+Number of events: 20000</p>\n+</blockquote>\n+\n+<h2>Quality control analysis</h2>\n+\n+<h3>Summary</h3>\n+\n+<blockquote>\n+<p>The anomalies were removed from:  Flow Rate, Flow Signal and Flow Margin<br/>\n+Anomalies detected in total: <strong>25.11</strong> %<br/>\n+Number of high quality events: 14978  </p>\n+</blockquote>\n+\n+<h3>Flow rate check</h3>\n+\n+<blockquote>\n+<p><strong>0</strong> % anomalies detected in the flow rate check.</p>\n+</blockquote>\n+\n+<p>It was not possible to analyze the flow rate since the time channel is missing. </p>\n+\n+<h3>Signals acquisition check</h3>\n+\n+<blockquote>\n+<p><strong>0</strong> % anomalies detected in the signal aquisition check. </p>\n+</blockquote>\n+\n+<p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABXgAAAHgCAIAAACQE5JdAAAACXBIWXMAAB7CAAAewgFu0HU+AAAgAElEQVR4nOy9e5QjZZ3//36eqkpSne5Od/reE4EdYbg4HIHBFRhvKF5QERRFzoGZFRDX488bHjjrlzkisCoXXfHuKrrrwhyXRY+IIIoKCpwBhosgAoM63NOX9CWddLpTSaqe5/n9UUl1Op1OJ91JJz18XmfOnHSlUvnkU/XcPs/nwpRSIAiCIAiCIAiCIAiCqAe82QIQBEEQBEEQBEEQBHHgQIYGgiAIgiAIgiAIgiDqBhkaCIIgCIIgCIIgCIKoG2RoIAiCIAiCIAiCIAiibpChgSAIgiAIgiAIgiCIukGGBoIgCIIgCIIgCIIg6gYZGgiCIAiCIAiCIAiCqBtkaCAIgiAIgiAIgiAIom6QoYEgCIIgCIIgCIIgiLpBhgaCIAiCIAiCIAiCIOoGGRoIgiAIgiAIgiAIgqgbZGggCIIgCIIgCIIgCKJukKGBIAiCIAiCIAiCIIi6QYYGgiAIgiAIgiAIgiDqBhkaCIIgCIIgCIIgCIKoG3qzBdh4jIyMjI+PN+vbbdvWNI3zVrQQKaW814yxJkpSgVwup+s6KXDV5HI5wzBaUzxS4BppfQUqpWzbJgWuGlLgGnEV6PP5mi1IeUiBa6T1FSildByHFLhqpJRCCMM'..b'gI3AEAAAAAIAYCdwAAAAAAiIHAHQAAAAAAYiBwBwAAAACAGAjcAQAAAAAgBgJ3AAAAAACIgcAdAAAAAABiIHAHAAAAAIAYCNwBAAAAACAGAncAAAAAAIiBwB0AAAAAAGIgcAcAAAAAgBgI3AEAAAAAIAYCdwAAAAAAiIHAHQAAAAAAYiBwBwAAAACAGAjcAQAAAAAgBgJ3AAAAAACIgcAdAAAAAABiIHAHAAAAAIAYCNwBAAAAACAGAncAAAAAAIiBwB0AAAAAAGIgcAcAAAAAgBgI3AEAIHONGTMmq3DZ2dm1a9fu1KnTD3/4w7lz5x7wFbp27RpNLoVqBw4cGL3Xgw8+WPD6jh07ivhT5ObmNmnSpFevXvfff/+CBQtKoU4AACghAncAACirEonEhg0bZs+e/fjjj7dv3/6ee+5JJBLpLuqQ7dmzZ+nSpVOmTLnrrruOP/74m2++efPmzekuCgAAUlEh3QUAAAAHV6tWrY4dOxa8kkgk1q1bt3LlyjVr1kRf3nfffbm5uXfffXeaaiyWk08+uUKF//4zJPrMYMmSJevXrw8h7N279ze/+c2UKVPeeuutOnXqpK9MAABIhcAdAADKgC5duvzzn//c/3oikZg8efLw4cNnzpwZQrjvvvuGDBnSrFmz5IRrrrmmb9++pVfowYwbN65WrVr7XMzPz582bdqvfvWr//3f/w0hTJs2rV+/fhMnTszJyUlHjQAAkCJHygAAQBmWlZXVu3fvcePGHXXUUSGE3bt3v/TSSwUn3HjjjT//+c9//vOfp6nAYsnOzj7xxBNfeuml5557Ljs7O4Tw3nvv/fa3v013XQAAcGgE7gAAUOY1bNiwX79+0XjOnDkpvMKCBQv+9Kc/Pfjgg88888zkyZN37doVa4HFdeWVVyaPxBk5cuSOHTvSUgYAAKRG4A4AAOVBq1atosE+z03t1atXVlZWVlZWwYsDBw7MysqqX79+CGH16tUXXHBBy5Ytv/e97915553XXHNN796927Zt+/rrr5da8QXdcccdDRs2DCGsXbt27NixaakBAABSI3AHAIDy4LPPPosGzZs3L/6qFStWdOvW7Y033gghFDwwfeHChQMGDBg/fny8RRZHpUqVLr/88micrtAfAABSI3AHAIAyb+XKlePGjYvGl112WTFX7d27d/DgwYsXL77wwgsnTZq0adOmTZs2vfbaa9EzVxOJxNChQ0uq4iIln/I6derUtBQAAACpEbgDAEDZ9v777/fr12/VqlUhhFtuueX4448v5sI1a9ZMmDDhlltueeWVV3r16lWlSpXq1av379//rbfeqly5cghhwYIFa9asKcHSC9GxY8dosHjx4g0bNpR+AQAAkJoK6S4AAAA4uBkzZvTp06fglUQisX79+hUrVqxcuTKEkJOT86Mf/ej+++8/pJdt0KDByJEjs7O/sRGnRYsWZ511VnScy/z584844ojDLv/Q1KlTp1KlStETU9euXVurVq1SLgAAAFIjcAcAgDJg/fr177zzThETevTocdVVV+0TnR/UjTfeGG1m38dxxx0XDfLz8w/pBeNSs2bNKHBfv359WgoAAIAUOFIGAADKgylTprRt2/a22247pIi8ffv2B7xeoUKmbM3JyspKdwkAAFBcAncAACgDzjzzzMSBbN26ddasWSNGjMjNzc3Pz//lL385bNiw4r9s9HzUDLRp06ZoULt27fRWAgAAxSdwBwCAMqxKlSodO3a8995733jjjejK6NGjZ8+eXczl1atXL7HSUrd+/frt27dH47p166a3GAAAKD6BOwAAlAdnnXXWhRdeGI2ff/759BZzmGbNmhUNmjZtWrNmzfQWAwAAxSdwBwCAcqJnz57RYNGiRemt5DC99dZb0aB79+7prQQAAA6JwB0AAMqJ5PkwmzdvTm8lh2Pnzp3JHfr9+/dPbzEAAHBIBO4AAFBOJE9iadKkSXorORwPPvjg8uXLQwh169a95JJL0l0OAAAcAoE7AACUB1988UVyY3ifPn3SW0zKxowZ87Of/Swa33333RUrVkxvPQAAcEgE7gAAUOa99957ffv23b59ewihUaNGF198cborOjSJRGLmzJlDhgy54oor8vPzQwi9evX6wQ9+kO66AADg0FRIdwEAAMDBzZgx44D71rdt27Zw4cKvv/46+jIrK+sPf/hDpUqVSre6Q3DhhRfm5uYmv0wkEps2bVq8ePHq1auTF0888cTXX389JycnHQUCAEDqBO4AAFAGrF+//p133il6TpUqVZ577rlzzjmndEpKzcSJE4u4m5OT84Mf/OC+++5LPgAWAADKEIE7AACUbTVr1mzWrFnfvn1/+MMfNmjQYJ+711xzzf5b4wcNGtSuXbsQQq1atQ74mn369Im2yR999NElUPI3VKhQoV69esccc8y555773e9+97jjjivpdwQAgBKSlUgk0l0DAABQHkyePHnp0qUhhA4dOrRp0ybd5QAAQGkTuAMAAAAAQAyy010AAAAAAACUBwJ3AAAAAACIgcAdAAAAAABiIHAHAAAAAIAYCNwBAAAAACAGAncAAAAAAIiBwB0AAAAAAGIgcAcAAAAAgBgI3AEAAAAAIAYCdwAAAAAAiIHAHQAAAAAAYiBwBwAAAACAGAjcAQAAAAAgBgJ3AAAAAACIgcAdAAAAAABiIHAHAAAAAIAYCNwBAAAAACAGAncAAAAAAIiBwB0AAAAAAGIgcAcAAAAAgBgI3AEAAAAAIAYCdwAAAAAAiIHAHQAAAAAAYiBwBwAAAACAGAjcAQAAAAAgBgJ3AAAAAACIgcAdAAAAAABiIHAHAAAAAIAYCNwBAAAAACAGAncAAAAAAIiBwB0AAAAAAGIgcAcAAAAAgBgI3AEAAAAAIAYCdwAAAAAAiIHAHQAAAAAAYiBwBwAAAACAGAjcAQAAAAAgBgJ3AAAAAACIgcAdAAAAAABiIHAHAAAAAIAYCNwBAAAAACAGAncAAAAAAIiBwB0AAAAAAGIgcAcAAAAAgBgI3AEAAAAAIAYCdwAAAAAAiIHAHQAAAAAAYiBwBwAAAACAGAjcAQAAAAAgBgJ3AAAAAACIwf8HUOoHNKnhlKkAAAAASUVORK5CYII=" title="plot of chunk unnamed-chunk-11" alt="plot of chunk unnamed-chunk-11" width="750px" style="display: block; margin: auto;" /></p>\n+\n+<p>The plot shows where the anomalies occured the most. The x-axis scale is complementary to the one of the signal acquisition plot. </p>\n+\n+<h5>More info on the anomalies detected in the dynamic range check:</h5>\n+\n+<p>for each channel, The table shows the number of events that did not pass the dynamic range check:</p>\n+\n+<pre><code>##              lower_range upper_range\n+## FSC-H                  0         217\n+## SSC-H                  0        4990\n+## FL1-H                  0           0\n+## FL2-H                  0           0\n+## FL3-H                  0           0\n+## FL4-H                  0           0\n+## total_SUM              0        5207\n+## total_UNIQUE           0        5022\n+</code></pre>\n+\n+</body>\n+\n+</html>\n'
b
diff -r 000000000000 -r 60aa5e56531a flowai/test-data/std/alldata.fcs
b
Binary file flowai/test-data/std/alldata.fcs has changed
b
diff -r 000000000000 -r 60aa5e56531a flowai/test-data/std/hqdata.fcs
b
Binary file flowai/test-data/std/hqdata.fcs has changed
b
diff -r 000000000000 -r 60aa5e56531a flowai/test-data/std/lqdata.fcs
b
Binary file flowai/test-data/std/lqdata.fcs has changed
b
diff -r 000000000000 -r 60aa5e56531a flowai/test-data/withsfsc/QCreport_sfsc.html
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/flowai/test-data/withsfsc/QCreport_sfsc.html Mon Feb 27 12:55:30 2017 -0500
[
b'@@ -0,0 +1,236 @@\n+<!DOCTYPE html>\n+<html>\n+<head>\n+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>\n+\n+<title>FCS file information</title>\n+\n+<script type="text/javascript">\n+window.onload = function() {\n+  var imgs = document.getElementsByTagName(\'img\'), i, img;\n+  for (i = 0; i < imgs.length; i++) {\n+    img = imgs[i];\n+    // center an image if it is the only element of its parent\n+    if (img.parentElement.childElementCount === 1)\n+      img.parentElement.style.textAlign = \'center\';\n+  }\n+};\n+</script>\n+\n+\n+\n+\n+\n+<style type="text/css">\n+body, td {\n+   font-family: sans-serif;\n+   background-color: white;\n+   font-size: 13px;\n+}\n+\n+body {\n+  max-width: 800px;\n+  margin: auto;\n+  padding: 1em;\n+  line-height: 20px;\n+}\n+\n+tt, code, pre {\n+   font-family: \'DejaVu Sans Mono\', \'Droid Sans Mono\', \'Lucida Console\', Consolas, Monaco, monospace;\n+}\n+\n+h1 {\n+   font-size:2.2em;\n+}\n+\n+h2 {\n+   font-size:1.8em;\n+}\n+\n+h3 {\n+   font-size:1.4em;\n+}\n+\n+h4 {\n+   font-size:1.0em;\n+}\n+\n+h5 {\n+   font-size:0.9em;\n+}\n+\n+h6 {\n+   font-size:0.8em;\n+}\n+\n+a:visited {\n+   color: rgb(50%, 0%, 50%);\n+}\n+\n+pre, img {\n+  max-width: 100%;\n+}\n+pre {\n+  overflow-x: auto;\n+}\n+pre code {\n+   display: block; padding: 0.5em;\n+}\n+\n+code {\n+  font-size: 92%;\n+  border: 1px solid #ccc;\n+}\n+\n+code[class] {\n+  background-color: #F8F8F8;\n+}\n+\n+table, td, th {\n+  border: none;\n+}\n+\n+blockquote {\n+   color:#666666;\n+   margin:0;\n+   padding-left: 1em;\n+   border-left: 0.5em #EEE solid;\n+}\n+\n+hr {\n+   height: 0px;\n+   border-bottom: none;\n+   border-top-width: thin;\n+   border-top-style: dotted;\n+   border-top-color: #999999;\n+}\n+\n+@media print {\n+   * {\n+      background: transparent !important;\n+      color: black !important;\n+      filter:none !important;\n+      -ms-filter: none !important;\n+   }\n+\n+   body {\n+      font-size:12pt;\n+      max-width:100%;\n+   }\n+\n+   a, a:visited {\n+      text-decoration: underline;\n+   }\n+\n+   hr {\n+      visibility: hidden;\n+      page-break-before: always;\n+   }\n+\n+   pre, blockquote {\n+      padding-right: 1em;\n+      page-break-inside: avoid;\n+   }\n+\n+   tr, img {\n+      page-break-inside: avoid;\n+   }\n+\n+   img {\n+      max-width: 100% !important;\n+   }\n+\n+   @page :left {\n+      margin: 15mm 20mm 15mm 10mm;\n+   }\n+\n+   @page :right {\n+      margin: 15mm 10mm 15mm 20mm;\n+   }\n+\n+   p, h2, h3 {\n+      orphans: 3; widows: 3;\n+   }\n+\n+   h2, h3 {\n+      page-break-after: avoid;\n+   }\n+}\n+</style>\n+\n+\n+\n+</head>\n+\n+<body>\n+<h2>FCS file information</h2>\n+\n+<blockquote>\n+<p>Input file name: dataset_934<br/>\n+Number of events: 20000</p>\n+</blockquote>\n+\n+<h2>Quality control analysis</h2>\n+\n+<h3>Summary</h3>\n+\n+<blockquote>\n+<p>The anomalies were removed from:  Flow Rate, Flow Signal and Flow Margin<br/>\n+Anomalies detected in total: <strong>25.11</strong> %<br/>\n+Number of high quality events: 14978  </p>\n+</blockquote>\n+\n+<h3>Flow rate check</h3>\n+\n+<blockquote>\n+<p><strong>0</strong> % anomalies detected in the flow rate check.</p>\n+</blockquote>\n+\n+<p>It was not possible to analyze the flow rate since the time channel is missing. </p>\n+\n+<h3>Signals acquisition check</h3>\n+\n+<blockquote>\n+<p><strong>0</strong> % anomalies detected in the signal aquisition check. </p>\n+</blockquote>\n+\n+<p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABXgAAAHgCAIAAACQE5JdAAAACXBIWXMAAB7CAAAewgFu0HU+AAAgAElEQVR4nOy9e5QjZZ3//36eqkpSne5Od/reE4EdYbg4HIHBFRhvKF5QERRFzoGZFRDX488bHjjrlzkisCoXXfHuKrrrwhyXRY+IIIoKCpwBhosgAoM63NOX9CWddLpTSaqe5/n9UUl1Op1OJ91JJz18XmfOnHSlUvnkU/XcPs/nwpRSIAiCIAiCIAiCIAiCqAe82QIQBEEQBEEQBEEQBHHgQIYGgiAIgiAIgiAIgiDqBhkaCIIgCIIgCIIgCIKoG2RoIAiCIAiCIAiCIAiibpChgSAIgiAIgiAIgiCIukGGBoIgCIIgCIIgCIIg6gYZGgiCIAiCIAiCIAiCqBtkaCAIgiAIgiAIgiAIom6QoYEgCIIgCIIgCIIgiLpBhgaCIAiCIAiCIAiCIOoGGRoIgiAIgiAIgiAIgqgbZGggCIIgCIIgCIIgCKJukKGBIAiCIAiCIAiCIIi6QYYGgiAIgiAIgiAIgiDqBhkaCIIgCIIgCIIgCIKoG3qzBdh4jIyMjI+PN+vbbdvWNI3zVrQQKaW814yxJkpSgVwup+s6KXDV5HI5wzBaUzxS4BppfQUqpWzbJgWuGlLgGnEV6PP5mi1IeUiBa6T1FSildByHFLhqpJRCCMM'..b'gI3AEAAAAAIAYCdwAAAAAAiIHAHQAAAAAAYiBwBwAAAACAGAjcAQAAAAAgBgJ3AAAAAACIgcAdAAAAAABiIHAHAAAAAIAYCNwBAAAAACAGAncAAAAAAIiBwB0AAAAAAGIgcAcAAAAAgBgI3AEAAAAAIAYCdwAAAAAAiIHAHQAAAAAAYiBwBwAAAACAGAjcAQAAAAAgBgJ3AAAAAACIgcAdAAAAAABiIHAHAAAAAIAYCNwBAAAAACAGAncAAAAAAIiBwB0AAAAAAGIgcAcAAAAAgBgI3AEAIHONGTMmq3DZ2dm1a9fu1KnTD3/4w7lz5x7wFbp27RpNLoVqBw4cGL3Xgw8+WPD6jh07ivhT5ObmNmnSpFevXvfff/+CBQtKoU4AACghAncAACirEonEhg0bZs+e/fjjj7dv3/6ee+5JJBLpLuqQ7dmzZ+nSpVOmTLnrrruOP/74m2++efPmzekuCgAAUlEh3QUAAAAHV6tWrY4dOxa8kkgk1q1bt3LlyjVr1kRf3nfffbm5uXfffXeaaiyWk08+uUKF//4zJPrMYMmSJevXrw8h7N279ze/+c2UKVPeeuutOnXqpK9MAABIhcAdAADKgC5duvzzn//c/3oikZg8efLw4cNnzpwZQrjvvvuGDBnSrFmz5IRrrrmmb9++pVfowYwbN65WrVr7XMzPz582bdqvfvWr//3f/w0hTJs2rV+/fhMnTszJyUlHjQAAkCJHygAAQBmWlZXVu3fvcePGHXXUUSGE3bt3v/TSSwUn3HjjjT//+c9//vOfp6nAYsnOzj7xxBNfeuml5557Ljs7O4Tw3nvv/fa3v013XQAAcGgE7gAAUOY1bNiwX79+0XjOnDkpvMKCBQv+9Kc/Pfjgg88888zkyZN37doVa4HFdeWVVyaPxBk5cuSOHTvSUgYAAKRG4A4AAOVBq1atosE+z03t1atXVlZWVlZWwYsDBw7MysqqX79+CGH16tUXXHBBy5Ytv/e97915553XXHNN796927Zt+/rrr5da8QXdcccdDRs2DCGsXbt27NixaakBAABSI3AHAIDy4LPPPosGzZs3L/6qFStWdOvW7Y033gghFDwwfeHChQMGDBg/fny8RRZHpUqVLr/88micrtAfAABSI3AHAIAyb+XKlePGjYvGl112WTFX7d27d/DgwYsXL77wwgsnTZq0adOmTZs2vfbaa9EzVxOJxNChQ0uq4iIln/I6derUtBQAAACpEbgDAEDZ9v777/fr12/VqlUhhFtuueX4448v5sI1a9ZMmDDhlltueeWVV3r16lWlSpXq1av379//rbfeqly5cghhwYIFa9asKcHSC9GxY8dosHjx4g0bNpR+AQAAkJoK6S4AAAA4uBkzZvTp06fglUQisX79+hUrVqxcuTKEkJOT86Mf/ej+++8/pJdt0KDByJEjs7O/sRGnRYsWZ511VnScy/z584844ojDLv/Q1KlTp1KlStETU9euXVurVq1SLgAAAFIjcAcAgDJg/fr177zzThETevTocdVVV+0TnR/UjTfeGG1m38dxxx0XDfLz8w/pBeNSs2bNKHBfv359WgoAAIAUOFIGAADKgylTprRt2/a22247pIi8ffv2B7xeoUKmbM3JyspKdwkAAFBcAncAACgDzjzzzMSBbN26ddasWSNGjMjNzc3Pz//lL385bNiw4r9s9HzUDLRp06ZoULt27fRWAgAAxSdwBwCAMqxKlSodO3a8995733jjjejK6NGjZ8+eXczl1atXL7HSUrd+/frt27dH47p166a3GAAAKD6BOwAAlAdnnXXWhRdeGI2ff/759BZzmGbNmhUNmjZtWrNmzfQWAwAAxSdwBwCAcqJnz57RYNGiRemt5DC99dZb0aB79+7prQQAAA6JwB0AAMqJ5PkwmzdvTm8lh2Pnzp3JHfr9+/dPbzEAAHBIBO4AAFBOJE9iadKkSXorORwPPvjg8uXLQwh169a95JJL0l0OAAAcAoE7AACUB1988UVyY3ifPn3SW0zKxowZ87Of/Swa33333RUrVkxvPQAAcEgE7gAAUOa99957ffv23b59ewihUaNGF198cborOjSJRGLmzJlDhgy54oor8vPzQwi9evX6wQ9+kO66AADg0FRIdwEAAMDBzZgx44D71rdt27Zw4cKvv/46+jIrK+sPf/hDpUqVSre6Q3DhhRfm5uYmv0wkEps2bVq8ePHq1auTF0888cTXX389JycnHQUCAEDqBO4AAFAGrF+//p133il6TpUqVZ577rlzzjmndEpKzcSJE4u4m5OT84Mf/OC+++5LPgAWAADKEIE7AACUbTVr1mzWrFnfvn1/+MMfNmjQYJ+711xzzf5b4wcNGtSuXbsQQq1atQ74mn369Im2yR999NElUPI3VKhQoV69esccc8y555773e9+97jjjivpdwQAgBKSlUgk0l0DAABQHkyePHnp0qUhhA4dOrRp0ybd5QAAQGkTuAMAAAAAQAyy010AAAAAAACUBwJ3AAAAAACIgcAdAAAAAABiIHAHAAAAAIAYCNwBAAAAACAGAncAAAAAAIiBwB0AAAAAAGIgcAcAAAAAgBgI3AEAAAAAIAYCdwAAAAAAiIHAHQAAAAAAYiBwBwAAAACAGAjcAQAAAAAgBgJ3AAAAAACIgcAdAAAAAABiIHAHAAAAAIAYCNwBAAAAACAGAncAAAAAAIiBwB0AAAAAAGIgcAcAAAAAgBgI3AEAAAAAIAYCdwAAAAAAiIHAHQAAAAAAYiBwBwAAAACAGAjcAQAAAAAgBgJ3AAAAAACIgcAdAAAAAABiIHAHAAAAAIAYCNwBAAAAACAGAncAAAAAAIiBwB0AAAAAAGIgcAcAAAAAgBgI3AEAAAAAIAYCdwAAAAAAiIHAHQAAAAAAYiBwBwAAAACAGAjcAQAAAAAgBgJ3AAAAAACIgcAdAAAAAABiIHAHAAAAAIAYCNwBAAAAACAGAncAAAAAAIiBwB0AAAAAAGIgcAcAAAAAgBgI3AEAAAAAIAYCdwAAAAAAiIHAHQAAAAAAYiBwBwAAAACAGAjcAQAAAAAgBgJ3AAAAAACIwf8HUOoHNKnhlKkAAAAASUVORK5CYII=" title="plot of chunk unnamed-chunk-11" alt="plot of chunk unnamed-chunk-11" width="750px" style="display: block; margin: auto;" /></p>\n+\n+<p>The plot shows where the anomalies occured the most. The x-axis scale is complementary to the one of the signal acquisition plot. </p>\n+\n+<h5>More info on the anomalies detected in the dynamic range check:</h5>\n+\n+<p>for each channel, The table shows the number of events that did not pass the dynamic range check:</p>\n+\n+<pre><code>##              lower_range upper_range\n+## FSC-H                  0         217\n+## SSC-H                  0        4990\n+## FL1-H                  0           0\n+## FL2-H                  0           0\n+## FL3-H                  0           0\n+## FL4-H                  0           0\n+## total_SUM              0        5207\n+## total_UNIQUE           0        5022\n+</code></pre>\n+\n+</body>\n+\n+</html>\n'
b
diff -r 000000000000 -r 60aa5e56531a flowai/test-data/withsfsc/hqdata_sfsc.fcs
b
Binary file flowai/test-data/withsfsc/hqdata_sfsc.fcs has changed