Repository: B-UMMI/chewBBACA (language: python)

Issue:
Dev SchemaEvaluator 2
This PR is to updated the dev branch with the most recent changes. 


Discussion / hints:

Fix patch:
diff --git a/.gitignore b/.gitignore
index 7b5c703d..f4d7aa2c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,6 +9,7 @@ __pycache__/
 *.so
 *~
 .idea/*
+.vscode/
 # due to using tox and pytest
 .tox
 .cache
diff --git a/CHEWBBACA/SchemaEvaluator/resources/main.js b/CHEWBBACA/SchemaEvaluator/resources/main.js
index 76f5def8..23a329a1 100644
--- a/CHEWBBACA/SchemaEvaluator/resources/main.js
+++ b/CHEWBBACA/SchemaEvaluator/resources/main.js
@@ -6684,7 +6684,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
 
 "use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => /* binding */ Header\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react_markdown__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-markdown */ \"./node_modules/react-markdown/lib/react-markdown.js\");\n/* harmony import */ var react_markdown__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_markdown__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var remark_gfm__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! remark-gfm */ \"./node_modules/remark-gfm/index.js\");\n/* harmony import */ var remark_gfm__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(remark_gfm__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _Header_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Header.css */ \"./src/components/Header.css\");\n/* harmony import */ var _material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @material-ui/core/Accordion */ \"./node_modules/@material-ui/core/esm/Accordion/Accordion.js\");\n/* harmony import */ var _material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/core/AccordionDetails */ \"./node_modules/@material-ui/core/esm/AccordionDetails/AccordionDetails.js\");\n;\n\n\n // Material-UI ExpansionPanel components\n\n\n\nfunction Header() {\n  var markdown = \"\\n  # Schema Evaluator\\n\\n  Provides summary charts that allows users to explore:\\n  - The diversity (number of alleles) at each locus (**Panel A**);\\n  - The variation of allele mode sizes per locus (**Panel B**);\\n  - Summary statistics (minimum allele size in blue, minimum allele size in orange and median allele size in green) for each locus (**Panel C**);\\n  - The loci size distribution (**Panel D**);\\n  - The presence of alleles that are not CDSs (when evaluating schemas called by other algorithms) (**Panel E**).\\n\\n  Users are able to select an **individual locus** to be analysed, by clicking on:\\n  - each **point (locus)** of the **Locus Statistics** and **Locus Size Variation charts**;\\n  - the **locus name** on the **Locus** column of the **CDS Analysis** table.\\n\\n  By selecting a locus the following will be displayed:\\n  - 2 charts (histogram and scatterplot) containing an **analysis of the allele sizes**;\\n  - a table with **summary statistics** of the alleles;\\n  - a **Neighbor Joining tree** built by clustal based on the mafft alignment;\\n  - a **multiple sequence alignment** of the alleles produced by mafft.\\n  \";\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_4__.default, {\n    defaultExpanded: true\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_5__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n    className: _Header_css__WEBPACK_IMPORTED_MODULE_3__.default.mainPaper,\n    style: {\n      width: \"100%\",\n      height: \"100%\"\n    }\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement((react_markdown__WEBPACK_IMPORTED_MODULE_1___default()), {\n    plugins: [(remark_gfm__WEBPACK_IMPORTED_MODULE_2___default())],\n    children: markdown\n  })))));\n}\n\n//# sourceURL=webpack://test_react/./src/components/Header.js?");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => /* binding */ Header\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react_markdown__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-markdown */ \"./node_modules/react-markdown/lib/react-markdown.js\");\n/* harmony import */ var react_markdown__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_markdown__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var remark_gfm__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! remark-gfm */ \"./node_modules/remark-gfm/index.js\");\n/* harmony import */ var remark_gfm__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(remark_gfm__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _Header_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Header.css */ \"./src/components/Header.css\");\n/* harmony import */ var _material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @material-ui/core/Accordion */ \"./node_modules/@material-ui/core/esm/Accordion/Accordion.js\");\n/* harmony import */ var _material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/core/AccordionDetails */ \"./node_modules/@material-ui/core/esm/AccordionDetails/AccordionDetails.js\");\n;\n\n\n // Material-UI ExpansionPanel components\n\n\n\nfunction Header() {\n  var markdown = \"\\n  # Schema Evaluator\\n\\n  Provides summary charts that allows users to explore:\\n  - The diversity (number of alleles) at each locus (**Panel A**);\\n  - The variation of allele mode sizes per locus (**Panel B**);\\n  - Summary statistics (minimum allele size in blue, minimum allele size in orange and median allele size in green) for each locus (**Panel C**);\\n  - The loci size distribution (**Panel D**);\\n  - The presence of alleles that are not CDSs (when evaluating schemas called by other algorithms) (**Panel E**).\\n\\n  Users are able to select an **individual locus** to be analysed, by clicking on:\\n  - each **point (locus)** of the **Locus Statistics** and **Locus Size Variation charts**;\\n  - the **locus name** on the **Locus** column of the **CDS Analysis** table, the **Loci with high variability** table or the **Loci with only 1 allele** table.\\n\\n  By selecting a locus the following will be displayed:\\n  - 2 charts (histogram and scatterplot) containing an **analysis of the allele sizes**;\\n  - a table with **summary statistics** of the alleles;\\n  - a **Neighbor Joining tree** built by clustal based on the mafft alignment;\\n  - a **multiple sequence alignment** of the alleles produced by mafft.\\n  \";\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_4__.default, {\n    defaultExpanded: true\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_5__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n    className: _Header_css__WEBPACK_IMPORTED_MODULE_3__.default.mainPaper,\n    style: {\n      width: \"100%\",\n      height: \"100%\"\n    }\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement((react_markdown__WEBPACK_IMPORTED_MODULE_1___default()), {\n    plugins: [(remark_gfm__WEBPACK_IMPORTED_MODULE_2___default())],\n    children: markdown\n  })))));\n}\n\n//# sourceURL=webpack://test_react/./src/components/Header.js?");
 
 /***/ }),
 
@@ -6699,7 +6699,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
 
 "use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var _hoc_Aux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../hoc/Aux */ \"./src/hoc/Aux.js\");\n/* harmony import */ var _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./SchemaEvaluator.css */ \"./src/components/SchemaEvaluator.css\");\n/* harmony import */ var _material_ui_core_Button__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @material-ui/core/Button */ \"./node_modules/@material-ui/core/esm/Button/Button.js\");\n/* harmony import */ var _material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @material-ui/core/Typography */ \"./node_modules/@material-ui/core/esm/Typography/Typography.js\");\n/* harmony import */ var _material_ui_core_styles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/core/styles */ \"./node_modules/@material-ui/core/esm/styles/createMuiTheme.js\");\n/* harmony import */ var _material_ui_core_styles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @material-ui/core/styles */ \"./node_modules/@material-ui/styles/esm/ThemeProvider/ThemeProvider.js\");\n/* harmony import */ var _material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @material-ui/core/Accordion */ \"./node_modules/@material-ui/core/esm/Accordion/Accordion.js\");\n/* harmony import */ var _material_ui_icons_ExpandMore__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @material-ui/icons/ExpandMore */ \"./node_modules/@material-ui/icons/ExpandMore.js\");\n/* harmony import */ var _material_ui_core_AccordionSummary__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @material-ui/core/AccordionSummary */ \"./node_modules/@material-ui/core/esm/AccordionSummary/AccordionSummary.js\");\n/* harmony import */ var _material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @material-ui/core/AccordionDetails */ \"./node_modules/@material-ui/core/esm/AccordionDetails/AccordionDetails.js\");\n/* harmony import */ var _material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @material-ui/lab/Alert */ \"./node_modules/@material-ui/lab/esm/Alert/Alert.js\");\n/* harmony import */ var mui_datatables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! mui-datatables */ \"./node_modules/mui-datatables/dist/index.js\");\n/* harmony import */ var react_plotly_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-plotly.js */ \"./node_modules/react-plotly.js/react-plotly.js\");\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n // Material-UI components\n\n\n\n // Material-UI ExpansionPanel components\n\n\n\n\n // Material-UI Lab components\n\n // Material-UI Datatables\n\n // Plotly.js\n\n\n\nvar SchemaEvaluator = /*#__PURE__*/function (_Component) {\n  _inherits(SchemaEvaluator, _Component);\n\n  var _super = _createSuper(SchemaEvaluator);\n\n  function SchemaEvaluator() {\n    var _this;\n\n    _classCallCheck(this, SchemaEvaluator);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      pre_computed_data: _preComputedData,\n      locus_ind_data: _preComputedDataInd,\n      pre_computed_data_boxplot: _preComputedDataBoxplot,\n      cds_df_data: _cdsDf,\n      cds_scatter_data: _cdsScatter,\n      total_data: _totalData,\n      message: _message,\n      tabValue: 0\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"getMuiTheme\", function () {\n      return (0,_material_ui_core_styles__WEBPACK_IMPORTED_MODULE_5__.default)({\n        overrides: {\n          MUIDataTableToolbar: {\n            titleText: {\n              color: \"#bb7944\"\n            }\n          }\n        }\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"plotChangeHandler\", function (value) {\n      _this.setState({\n        tabValue: value\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"clickScatterPlotHandler\", function (event) {\n      var locus_id = event.points[0].text;\n      console.log(locus_id);\n      var anchor = document.createElement(\"a\");\n      anchor.href = \"../html_files/\".concat(locus_id.split(\".\")[0], \"_individual_report.html\");\n      anchor.target = \"_blank\";\n      anchor.rel = \"noopener noreferrer\";\n      anchor.click();\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"clickBoxPlotHandler\", function (event) {\n      var locus_id = event.points[0].x;\n      console.log(locus_id);\n      var anchor = document.createElement(\"a\");\n      anchor.href = \"../html_files/\".concat(locus_id.split(\".\")[0], \"_individual_report.html\");\n      anchor.target = \"_blank\";\n      anchor.rel = \"noopener noreferrer\";\n      anchor.click();\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"clickCdsTableHandler\", function (cellData) {\n      var locus_id = cellData;\n      console.log(locus_id);\n      var anchor = document.createElement(\"a\");\n      anchor.href = \"../html_files/\".concat(locus_id.split(\".\")[0], \"_individual_report.html\");\n      anchor.target = \"_blank\";\n      anchor.rel = \"noopener noreferrer\";\n      anchor.click();\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"totalDataColumnsHandler\", function (columnData, alleleShorterColumn) {\n      if (\"chewBBACA_version\" in columnData[0]) {\n        var totalDataColumns = [{\n          name: \"chewBBACA_version\",\n          label: \"chewBBACA Version\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"bsr\",\n          label: \"Blast Score Ratio\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_loci\",\n          label: \"Total Loci\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles\",\n          label: \"Total Alleles\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_mult3\",\n          label: \"Total Alleles not multiple of 3\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_stopC\",\n          label: \"Total Alleles w/ >1 stop codons\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_notStart\",\n          label: \"Total Alleles wo/ Start/Stop Codon\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_shorter\",\n          label: \"Total \".concat(alleleShorterColumn),\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_invalid_alleles\",\n          label: \"Total Invalid Alleles\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }];\n        return totalDataColumns;\n      } else {\n        var _totalDataColumns = [{\n          name: \"total_loci\",\n          label: \"Total Loci\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles\",\n          label: \"Total Alleles\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_mult3\",\n          label: \"Total Alleles not multiple of 3\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_stopC\",\n          label: \"Total Alleles w/ >1 stop codons\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_notStart\",\n          label: \"Total Alleles wo/ Start/Stop Codon\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_shorter\",\n          label: \"Total \".concat(alleleShorterColumn),\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_invalid_alleles\",\n          label: \"Total Invalid Alleles\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }];\n        return _totalDataColumns;\n      }\n    });\n\n    return _this;\n  }\n\n  _createClass(SchemaEvaluator, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var style = {\n        buttonBar: {\n          overflowX: \"auto\",\n          display: \"flex\",\n          justifyContent: \"center\",\n          marginBottom: \"20px\"\n        },\n        button: {\n          minWidth: \"150px\"\n        },\n        formControl: {\n          margin: 0,\n          display: \"flex\",\n          wrap: \"nowrap\"\n        },\n        root: {\n          width: \"100%\"\n        },\n        toolbar: {\n          display: \"flex\"\n        }\n      }; // Create panel A\n\n      var locus_name2 = [];\n      var nr_alleles = [];\n      var total_al_data = [];\n\n      for (var key in this.state.pre_computed_data.total_alleles) {\n        locus_name2.push(this.state.pre_computed_data.total_alleles[key].locus_name);\n        nr_alleles.push(this.state.pre_computed_data.total_alleles[key].nr_alleles);\n      }\n\n      total_al_data.push({\n        x: nr_alleles,\n        y: locus_name2,\n        type: \"histogram\",\n        name: \"Total alleles\"\n      });\n      var total_allele_plot = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_plotly_js__WEBPACK_IMPORTED_MODULE_4__.default, {\n        data: total_al_data,\n        layout: {\n          title: {\n            text: \"Number of Loci with given Number of Alleles\"\n          },\n          xaxis: {\n            title: {\n              text: \"Number of Different Alleles\"\n            },\n            showgrid: true\n          },\n          yaxis: {\n            title: {\n              text: \"Number of Loci\"\n            }\n          }\n        },\n        useResizeHandler: true,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        },\n        line: {\n          width: 1\n        }\n      }); // Create panel B\n\n      var mode_data_arr = [];\n      var allele_mode = [];\n      var locus_name = [];\n\n      for (var _key2 in this.state.pre_computed_data.mode) {\n        allele_mode.push(this.state.pre_computed_data.mode[_key2].alleles_mode);\n        locus_name.push(this.state.pre_computed_data.mode[_key2].locus_name);\n      }\n\n      mode_data_arr.push({\n        x: allele_mode,\n        y: locus_name,\n        type: \"histogram\",\n        name: \"Distribution of allele mode sizes per gene\"\n      });\n      var mode_data_plot = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_plotly_js__WEBPACK_IMPORTED_MODULE_4__.default, {\n        data: mode_data_arr,\n        layout: {\n          title: {\n            text: \"Distribution of allele mode sizes\"\n          },\n          xaxis: {\n            title: {\n              text: \"Allele Mode Size\"\n            },\n            showgrid: true\n          },\n          yaxis: {\n            title: {\n              text: \"Number of Loci\"\n            }\n          }\n        },\n        useResizeHandler: true,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        },\n        line: {\n          width: 1\n        }\n      }); // Create panel C\n\n      var locus_id = [];\n      var nr_alleles_scatter = [];\n      var scatter_data = [];\n      var scatter_data_median = [];\n      var scatter_data_min = [];\n      var scatter_data_max = [];\n\n      for (var _key3 in this.state.pre_computed_data.scatter_data) {\n        locus_id.push(this.state.pre_computed_data.scatter_data[_key3].locus_id);\n        nr_alleles_scatter.push(this.state.pre_computed_data.scatter_data[_key3].nr_alleles);\n        scatter_data_median.push(this.state.pre_computed_data.scatter_data[_key3].alleles_median);\n        scatter_data_min.push(this.state.pre_computed_data.scatter_data[_key3].alleles_min);\n        scatter_data_max.push(this.state.pre_computed_data.scatter_data[_key3].alleles_max);\n      }\n\n      scatter_data.push({\n        x: scatter_data_min,\n        y: nr_alleles_scatter,\n        type: \"scatter\",\n        name: \"Min\",\n        mode: \"markers\",\n        marker: {\n          opacity: 0.7,\n          size: 4\n        },\n        hovertemplate: \"<b>ID</b>: %{text}\",\n        text: locus_id\n      }, {\n        x: scatter_data_max,\n        y: nr_alleles_scatter,\n        type: \"scatter\",\n        name: \"Max\",\n        mode: \"markers\",\n        marker: {\n          opacity: 0.7,\n          size: 4\n        },\n        hovertemplate: \"<b>ID</b>: %{text}\",\n        text: locus_id\n      }, {\n        x: scatter_data_median,\n        y: nr_alleles_scatter,\n        type: \"scatter\",\n        name: \"Median\",\n        mode: \"markers\",\n        marker: {\n          opacity: 0.7,\n          size: 4\n        },\n        hovertemplate: \"<b>ID</b>: %{text}\",\n        text: locus_id\n      });\n      var scatter_plot = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_plotly_js__WEBPACK_IMPORTED_MODULE_4__.default, {\n        data: scatter_data,\n        layout: {\n          title: {\n            text: \"Locus Statistics\"\n          },\n          xaxis: {\n            title: {\n              text: \"Allele size in bp\"\n            },\n            showgrid: true,\n            zeroline: false\n          },\n          yaxis: {\n            title: {\n              text: \"Number of alleles\"\n            },\n            zeroline: false\n          },\n          hovermode: \"closest\"\n        },\n        useResizeHandler: true,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        },\n        line: {\n          width: 1\n        },\n        onClick: function onClick(e) {\n          return _this2.clickScatterPlotHandler(e);\n        }\n      }); // Panel D\n\n      var boxLoci = [];\n      var boxQ1 = [];\n      var boxMedian = [];\n      var boxQ3 = [];\n      var boxLowerfence = [];\n      var boxUpperfence = [];\n\n      for (var boxKey in this.state.pre_computed_data_boxplot[\"boxplot_data\"]) {\n        boxLoci.push(this.state.pre_computed_data_boxplot[\"boxplot_data\"][boxKey].locus_name);\n        boxQ1.push(this.state.pre_computed_data_boxplot[\"boxplot_data\"][boxKey].q1);\n        boxMedian.push(this.state.pre_computed_data_boxplot[\"boxplot_data\"][boxKey].median);\n        boxQ3.push(this.state.pre_computed_data_boxplot[\"boxplot_data\"][boxKey].q3);\n        boxLowerfence.push(this.state.pre_computed_data_boxplot[\"boxplot_data\"][boxKey].min);\n        boxUpperfence.push(this.state.pre_computed_data_boxplot[\"boxplot_data\"][boxKey].max);\n      }\n\n      var boxplotData = [];\n      boxplotData.push({\n        type: \"box\",\n        name: \"Locus Size Variation\",\n        x: boxLoci,\n        q1: boxQ1,\n        median: boxMedian,\n        q3: boxQ3,\n        lowerfence: boxLowerfence,\n        upperfence: boxUpperfence,\n        showlegend: false\n      });\n      var boxplot = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_plotly_js__WEBPACK_IMPORTED_MODULE_4__.default, {\n        data: boxplotData,\n        layout: {\n          title: {\n            text: \"Locus Size Variation\"\n          },\n          xaxis: {\n            title: {\n              text: \"Loci\"\n            },\n            showticklabels: false\n          },\n          yaxis: {\n            title: {\n              text: \"Allele size variation\"\n            }\n          },\n          boxgap: 0.05,\n          boxgapgroup: 0.05\n        },\n        useResizeHandler: true,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        },\n        onClick: function onClick(e) {\n          return _this2.clickBoxPlotHandler(e);\n        }\n      }); // CDS Analysis\n\n      var alleleShorterColumn = Object.keys(this.state.cds_df_data[0]).find(function (k) {\n        return k.includes(\"Alleles shorter\");\n      });\n      var columns = [{\n        name: \"Gene\",\n        label: \"Locus\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Alleles not multiple of 3\",\n        label: \"Alleles not multiple of 3\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Alleles w/ >1 stop codons\",\n        label: \"Alleles w/ >1 stop codons\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Alleles wo/ Start/Stop Codon\",\n        label: \"Alleles wo/ Start/Stop Codon\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: alleleShorterColumn,\n        label: alleleShorterColumn,\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Total Invalid Alleles\",\n        label: \"Total Invalid Alleles\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Missing Allele IDs\",\n        label: \"Missing Allele IDs\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          },\n          customBodyRender: function customBodyRender(value, tableMeta, updateValue) {\n            return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null, value.join(\", \"));\n          }\n        }\n      }, {\n        name: \"CDS\",\n        label: \"Valid Alleles\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }];\n      var options = {\n        responsive: \"vertical\",\n        selectableRowsHeader: false,\n        selectableRows: \"none\",\n        selectableRowsOnClick: false,\n        print: false,\n        download: true,\n        filter: true,\n        search: true,\n        viewColumns: true,\n        pagination: true,\n        onCellClick: function onCellClick(cellData, cellMeta) {\n          console.log(cellData, cellMeta);\n\n          if (cellData.includes(\".fasta\")) {\n            _this2.clickCdsTableHandler(cellData);\n          }\n        }\n      };\n      var cds_data = this.state.cds_df_data;\n      var cds_analysis_table = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_styles__WEBPACK_IMPORTED_MODULE_6__.default, {\n        theme: this.getMuiTheme()\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(mui_datatables__WEBPACK_IMPORTED_MODULE_3__.default, {\n        title: \"Loci Analysis\",\n        data: cds_data,\n        columns: columns,\n        options: options\n      })); // CDS scatter\n\n      var scatterCDS = [];\n      var barWidth = Array(this.state.cds_scatter_data[\"CDS_Alleles\"].length).fill(0.2);\n      scatterCDS.push({\n        type: \"bar\",\n        name: \"CDS Alleles\",\n        x: this.state.cds_scatter_data[\"CDS_Alleles\"],\n        orientation: \"h\",\n        text: this.state.cds_scatter_data[\"genes\"],\n        marker_color: \"#045a8d\",\n        width: barWidth\n      }, {\n        type: \"bar\",\n        name: \"Non multiple 3\",\n        x: this.state.cds_scatter_data[\"mult3\"],\n        orientation: \"h\",\n        text: this.state.cds_scatter_data[\"genes\"],\n        marker_color: \"#006d2c\",\n        width: barWidth\n      }, {\n        type: \"bar\",\n        name: \"> 1 stop codon\",\n        x: this.state.cds_scatter_data[\"stopC\"],\n        orientation: \"h\",\n        text: this.state.cds_scatter_data[\"genes\"],\n        marker_color: \"#7b3294\",\n        width: barWidth\n      }, {\n        type: \"bar\",\n        name: \"No Start/Stop codon\",\n        x: this.state.cds_scatter_data[\"notStart\"],\n        orientation: \"h\",\n        text: this.state.cds_scatter_data[\"genes\"],\n        marker_color: \"#ec7014\",\n        width: barWidth\n      }, {\n        type: \"bar\",\n        name: alleleShorterColumn,\n        x: this.state.cds_scatter_data[\"shorter\"],\n        orientation: \"h\",\n        text: this.state.cds_scatter_data[\"genes\"],\n        marker_color: \"#6a3d9a\",\n        width: barWidth\n      });\n      var cds_scatter_plot = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_plotly_js__WEBPACK_IMPORTED_MODULE_4__.default, {\n        data: scatterCDS,\n        layout: {\n          autosize: true,\n          barmode: \"stack\",\n          bargap: 0.5,\n          bargroupgap: 0.0,\n          title: {\n            text: \"Summary of problematic alleles per locus\"\n          },\n          xaxis: {\n            title: {\n              text: \"Number of occurrences\"\n            },\n            gridcolor: \"#eee\",\n            type: \"log\"\n          },\n          yaxis: {\n            showgrid: false,\n            showticklabels: false\n          },\n          plot_bgcolor: \"rgba(0,0,0,0)\",\n          hovermode: \"closest\"\n        },\n        useResizeHandler: true,\n        style: {\n          width: \"100%\",\n          height: \"700px\"\n        }\n      }); // Schema Summary Statistics table\n\n      var totalDataColumns = this.totalDataColumnsHandler(this.state.total_data, alleleShorterColumn);\n      var totalDataOptions = {\n        responsive: \"vertical\",\n        selectableRowsHeader: false,\n        selectableRows: \"none\",\n        selectableRowsOnClick: false,\n        print: false,\n        download: false,\n        filter: false,\n        search: false,\n        viewColumns: true,\n        pagination: false\n      };\n      var total_data = this.state.total_data;\n      var total_data_table = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_styles__WEBPACK_IMPORTED_MODULE_6__.default, {\n        theme: this.getMuiTheme()\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(mui_datatables__WEBPACK_IMPORTED_MODULE_3__.default, {\n        title: \"Schema Summary Statistics\",\n        data: total_data,\n        columns: totalDataColumns,\n        options: totalDataOptions\n      }));\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_hoc_Aux__WEBPACK_IMPORTED_MODULE_1__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"40px\",\n          width: \"100%\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__.default, {\n        variant: \"outlined\",\n        severity: \"info\"\n      }, this.state.message)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"40px\"\n        }\n      }, total_data_table), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"40px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_8__.default, {\n        defaultExpanded: true\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionSummary__WEBPACK_IMPORTED_MODULE_9__.default, {\n        expandIcon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_icons_ExpandMore__WEBPACK_IMPORTED_MODULE_10__.default, null)\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_11__.default, {\n        variant: \"h5\",\n        className: _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__.default.title\n      }, \"Schema Evaluation\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_12__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        className: _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__.default.mainPaper,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginBottom: \"10px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_11__.default, {\n        variant: \"subtitle1\"\n      }, \"In the Locus Statistics and Locus Size Variation graphs, each point (locus) is clickable and will open a page with more details about it.\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: style.buttonBar\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Button__WEBPACK_IMPORTED_MODULE_13__.default, {\n        style: style.button,\n        className: \"\".concat(this.state.tabValue === 0 && _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__.default.tabButton),\n        onClick: function onClick() {\n          _this2.plotChangeHandler(0);\n        }\n      }, \"Allele Numbers Analysis\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Button__WEBPACK_IMPORTED_MODULE_13__.default, {\n        style: style.button,\n        className: \"\".concat(this.state.tabValue === 1 && _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__.default.tabButton),\n        onClick: function onClick() {\n          _this2.plotChangeHandler(1);\n        }\n      }, \"Allele Length Analysis\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Button__WEBPACK_IMPORTED_MODULE_13__.default, {\n        style: style.button,\n        className: \"\".concat(this.state.tabValue === 2 && _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__.default.tabButton),\n        onClick: function onClick() {\n          _this2.plotChangeHandler(2);\n        }\n      }, \"Locus Statistics\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Button__WEBPACK_IMPORTED_MODULE_13__.default, {\n        style: style.button,\n        className: \"\".concat(this.state.tabValue === 3 && _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__.default.tabButton),\n        onClick: function onClick() {\n          _this2.plotChangeHandler(3);\n        }\n      }, \"Locus Size Variation\")), this.state.tabValue === 0 && total_allele_plot, this.state.tabValue === 1 && mode_data_plot, this.state.tabValue === 2 && scatter_plot, this.state.tabValue === 3 && boxplot)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        id: \"cds-analysis\",\n        style: {\n          marginTop: \"40px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_11__.default, {\n        variant: \"h5\",\n        className: _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__.default.title\n      }, \"Loci Analysis\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"20px\"\n        }\n      }, cds_analysis_table), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"20px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_hoc_Aux__WEBPACK_IMPORTED_MODULE_1__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"20px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__.default, {\n        variant: \"outlined\",\n        severity: \"info\"\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_11__.default, {\n        variant: \"subtitle1\"\n      }, \"The x-axis of the following plot is in logarithmic scale for a more compact visualization.\"))), cds_scatter_plot)))));\n    }\n  }]);\n\n  return SchemaEvaluator;\n}(react__WEBPACK_IMPORTED_MODULE_0__.Component);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SchemaEvaluator);\n\n//# sourceURL=webpack://test_react/./src/components/SchemaEvaluator.js?");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var _hoc_Aux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../hoc/Aux */ \"./src/hoc/Aux.js\");\n/* harmony import */ var _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./SchemaEvaluator.css */ \"./src/components/SchemaEvaluator.css\");\n/* harmony import */ var _material_ui_core_Button__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @material-ui/core/Button */ \"./node_modules/@material-ui/core/esm/Button/Button.js\");\n/* harmony import */ var _material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @material-ui/core/Typography */ \"./node_modules/@material-ui/core/esm/Typography/Typography.js\");\n/* harmony import */ var _material_ui_core_styles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/core/styles */ \"./node_modules/@material-ui/core/esm/styles/createMuiTheme.js\");\n/* harmony import */ var _material_ui_core_styles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @material-ui/core/styles */ \"./node_modules/@material-ui/styles/esm/ThemeProvider/ThemeProvider.js\");\n/* harmony import */ var _material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @material-ui/core/Accordion */ \"./node_modules/@material-ui/core/esm/Accordion/Accordion.js\");\n/* harmony import */ var _material_ui_icons_ExpandMore__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @material-ui/icons/ExpandMore */ \"./node_modules/@material-ui/icons/ExpandMore.js\");\n/* harmony import */ var _material_ui_core_AccordionSummary__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @material-ui/core/AccordionSummary */ \"./node_modules/@material-ui/core/esm/AccordionSummary/AccordionSummary.js\");\n/* harmony import */ var _material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @material-ui/core/AccordionDetails */ \"./node_modules/@material-ui/core/esm/AccordionDetails/AccordionDetails.js\");\n/* harmony import */ var _material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @material-ui/lab/Alert */ \"./node_modules/@material-ui/lab/esm/Alert/Alert.js\");\n/* harmony import */ var mui_datatables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! mui-datatables */ \"./node_modules/mui-datatables/dist/index.js\");\n/* harmony import */ var react_plotly_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-plotly.js */ \"./node_modules/react-plotly.js/react-plotly.js\");\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n // Material-UI components\n\n\n\n // Material-UI ExpansionPanel components\n\n\n\n\n // Material-UI Lab components\n\n // Material-UI Datatables\n\n // Plotly.js\n\n\n\nvar SchemaEvaluator = /*#__PURE__*/function (_Component) {\n  _inherits(SchemaEvaluator, _Component);\n\n  var _super = _createSuper(SchemaEvaluator);\n\n  function SchemaEvaluator() {\n    var _this;\n\n    _classCallCheck(this, SchemaEvaluator);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      pre_computed_data: _preComputedData,\n      locus_ind_data: _preComputedDataInd,\n      pre_computed_data_boxplot: _preComputedDataBoxplot,\n      cds_df_data: _cdsDf,\n      cds_scatter_data: _cdsScatter,\n      total_data: _totalData,\n      notConserved: _notConserved,\n      notConservedMessage: _notConservedMessage,\n      oneAlleleOnly: _oneAlleleOnly,\n      message: _message,\n      tabValue: 0\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"getMuiTheme\", function () {\n      return (0,_material_ui_core_styles__WEBPACK_IMPORTED_MODULE_5__.default)({\n        overrides: {\n          MUIDataTableToolbar: {\n            titleText: {\n              color: \"#bb7944\"\n            }\n          }\n        }\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"plotChangeHandler\", function (value) {\n      _this.setState({\n        tabValue: value\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"clickScatterPlotHandler\", function (event) {\n      var locus_id = event.points[0].text;\n      console.log(locus_id);\n      var anchor = document.createElement(\"a\");\n      anchor.href = \"../html_files/\".concat(locus_id.split(\".\")[0], \"_individual_report.html\");\n      anchor.target = \"_blank\";\n      anchor.rel = \"noopener noreferrer\";\n      anchor.click();\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"clickBoxPlotHandler\", function (event) {\n      var locus_id = event.points[0].x;\n      console.log(locus_id);\n      var anchor = document.createElement(\"a\");\n      anchor.href = \"../html_files/\".concat(locus_id.split(\".\")[0], \"_individual_report.html\");\n      anchor.target = \"_blank\";\n      anchor.rel = \"noopener noreferrer\";\n      anchor.click();\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"clickCdsTableHandler\", function (cellData) {\n      var locus_id = cellData;\n      console.log(locus_id);\n      var anchor = document.createElement(\"a\");\n      anchor.href = \"../html_files/\".concat(locus_id.split(\".\")[0], \"_individual_report.html\");\n      anchor.target = \"_blank\";\n      anchor.rel = \"noopener noreferrer\";\n      anchor.click();\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"totalDataColumnsHandler\", function (columnData, alleleShorterColumn) {\n      if (\"chewBBACA_version\" in columnData[0]) {\n        var totalDataColumns = [{\n          name: \"chewBBACA_version\",\n          label: \"chewBBACA Version\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"bsr\",\n          label: \"Blast Score Ratio\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_loci\",\n          label: \"Total Loci\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles\",\n          label: \"Total Alleles\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_mult3\",\n          label: \"Total Alleles not multiple of 3\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_stopC\",\n          label: \"Total Alleles w/ >1 stop codons\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_notStart\",\n          label: \"Total Alleles wo/ Start/Stop Codon\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_shorter\",\n          label: \"Total \".concat(alleleShorterColumn),\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_invalid_alleles\",\n          label: \"Total Invalid Alleles\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }];\n        return totalDataColumns;\n      } else {\n        var _totalDataColumns = [{\n          name: \"total_loci\",\n          label: \"Total Loci\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles\",\n          label: \"Total Alleles\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_mult3\",\n          label: \"Total Alleles not multiple of 3\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_stopC\",\n          label: \"Total Alleles w/ >1 stop codons\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_notStart\",\n          label: \"Total Alleles wo/ Start/Stop Codon\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_shorter\",\n          label: \"Total \".concat(alleleShorterColumn),\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_invalid_alleles\",\n          label: \"Total Invalid Alleles\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }];\n        return _totalDataColumns;\n      }\n    });\n\n    return _this;\n  }\n\n  _createClass(SchemaEvaluator, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var style = {\n        buttonBar: {\n          overflowX: \"auto\",\n          display: \"flex\",\n          justifyContent: \"center\",\n          marginBottom: \"20px\"\n        },\n        button: {\n          minWidth: \"150px\"\n        },\n        formControl: {\n          margin: 0,\n          display: \"flex\",\n          wrap: \"nowrap\"\n        },\n        root: {\n          width: \"100%\"\n        },\n        toolbar: {\n          display: \"flex\"\n        }\n      }; // Create panel A\n\n      var locus_name2 = [];\n      var nr_alleles = [];\n      var total_al_data = [];\n\n      for (var key in this.state.pre_computed_data.total_alleles) {\n        locus_name2.push(this.state.pre_computed_data.total_alleles[key].locus_name);\n        nr_alleles.push(this.state.pre_computed_data.total_alleles[key].nr_alleles);\n      }\n\n      total_al_data.push({\n        x: nr_alleles,\n        y: locus_name2,\n        type: \"histogram\",\n        name: \"Total alleles\"\n      });\n      var total_allele_plot = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_plotly_js__WEBPACK_IMPORTED_MODULE_4__.default, {\n        data: total_al_data,\n        layout: {\n          title: {\n            text: \"Number of Loci with given Number of Alleles\"\n          },\n          xaxis: {\n            title: {\n              text: \"Number of Different Alleles\"\n            },\n            showgrid: true\n          },\n          yaxis: {\n            title: {\n              text: \"Number of Loci\"\n            }\n          }\n        },\n        useResizeHandler: true,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        },\n        line: {\n          width: 1\n        }\n      }); // Create panel B\n\n      var mode_data_arr = [];\n      var allele_mode = [];\n      var locus_name = [];\n\n      for (var _key2 in this.state.pre_computed_data.mode) {\n        allele_mode.push(this.state.pre_computed_data.mode[_key2].alleles_mode);\n        locus_name.push(this.state.pre_computed_data.mode[_key2].locus_name);\n      }\n\n      mode_data_arr.push({\n        x: allele_mode,\n        y: locus_name,\n        type: \"histogram\",\n        name: \"Distribution of allele mode sizes per gene\"\n      });\n      var mode_data_plot = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_plotly_js__WEBPACK_IMPORTED_MODULE_4__.default, {\n        data: mode_data_arr,\n        layout: {\n          title: {\n            text: \"Distribution of allele mode sizes\"\n          },\n          xaxis: {\n            title: {\n              text: \"Allele Mode Size\"\n            },\n            showgrid: true\n          },\n          yaxis: {\n            title: {\n              text: \"Number of Loci\"\n            }\n          }\n        },\n        useResizeHandler: true,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        },\n        line: {\n          width: 1\n        }\n      }); // Create panel C\n\n      var locus_id = [];\n      var nr_alleles_scatter = [];\n      var scatter_data = [];\n      var scatter_data_median = [];\n      var scatter_data_min = [];\n      var scatter_data_max = [];\n\n      for (var _key3 in this.state.pre_computed_data.scatter_data) {\n        locus_id.push(this.state.pre_computed_data.scatter_data[_key3].locus_id);\n        nr_alleles_scatter.push(this.state.pre_computed_data.scatter_data[_key3].nr_alleles);\n        scatter_data_median.push(this.state.pre_computed_data.scatter_data[_key3].alleles_median);\n        scatter_data_min.push(this.state.pre_computed_data.scatter_data[_key3].alleles_min);\n        scatter_data_max.push(this.state.pre_computed_data.scatter_data[_key3].alleles_max);\n      }\n\n      scatter_data.push({\n        x: scatter_data_min,\n        y: nr_alleles_scatter,\n        type: \"scatter\",\n        name: \"Min\",\n        mode: \"markers\",\n        marker: {\n          opacity: 0.7,\n          size: 4\n        },\n        hovertemplate: \"<b>ID</b>: %{text}\",\n        text: locus_id\n      }, {\n        x: scatter_data_max,\n        y: nr_alleles_scatter,\n        type: \"scatter\",\n        name: \"Max\",\n        mode: \"markers\",\n        marker: {\n          opacity: 0.7,\n          size: 4\n        },\n        hovertemplate: \"<b>ID</b>: %{text}\",\n        text: locus_id\n      }, {\n        x: scatter_data_median,\n        y: nr_alleles_scatter,\n        type: \"scatter\",\n        name: \"Median\",\n        mode: \"markers\",\n        marker: {\n          opacity: 0.7,\n          size: 4\n        },\n        hovertemplate: \"<b>ID</b>: %{text}\",\n        text: locus_id\n      });\n      var scatter_plot = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_plotly_js__WEBPACK_IMPORTED_MODULE_4__.default, {\n        data: scatter_data,\n        layout: {\n          title: {\n            text: \"Locus Statistics\"\n          },\n          xaxis: {\n            title: {\n              text: \"Allele size in bp\"\n            },\n            showgrid: true,\n            zeroline: false\n          },\n          yaxis: {\n            title: {\n              text: \"Number of alleles\"\n            },\n            zeroline: false\n          },\n          hovermode: \"closest\"\n        },\n        useResizeHandler: true,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        },\n        line: {\n          width: 1\n        },\n        onClick: function onClick(e) {\n          return _this2.clickScatterPlotHandler(e);\n        }\n      }); // Panel D\n\n      var boxLoci = [];\n      var boxQ1 = [];\n      var boxMedian = [];\n      var boxQ3 = [];\n      var boxLowerfence = [];\n      var boxUpperfence = [];\n\n      for (var boxKey in this.state.pre_computed_data_boxplot[\"boxplot_data\"]) {\n        boxLoci.push(this.state.pre_computed_data_boxplot[\"boxplot_data\"][boxKey].locus_name);\n        boxQ1.push(this.state.pre_computed_data_boxplot[\"boxplot_data\"][boxKey].q1);\n        boxMedian.push(this.state.pre_computed_data_boxplot[\"boxplot_data\"][boxKey].median);\n        boxQ3.push(this.state.pre_computed_data_boxplot[\"boxplot_data\"][boxKey].q3);\n        boxLowerfence.push(this.state.pre_computed_data_boxplot[\"boxplot_data\"][boxKey].min);\n        boxUpperfence.push(this.state.pre_computed_data_boxplot[\"boxplot_data\"][boxKey].max);\n      }\n\n      var boxplotData = [];\n      boxplotData.push({\n        type: \"box\",\n        name: \"Locus Size Variation\",\n        x: boxLoci,\n        q1: boxQ1,\n        median: boxMedian,\n        q3: boxQ3,\n        lowerfence: boxLowerfence,\n        upperfence: boxUpperfence,\n        showlegend: false\n      });\n      var boxplot = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_plotly_js__WEBPACK_IMPORTED_MODULE_4__.default, {\n        data: boxplotData,\n        layout: {\n          title: {\n            text: \"Locus Size Variation\"\n          },\n          xaxis: {\n            title: {\n              text: \"Loci\"\n            },\n            showticklabels: false\n          },\n          yaxis: {\n            title: {\n              text: \"Allele size variation\"\n            }\n          },\n          boxgap: 0.05,\n          boxgapgroup: 0.05\n        },\n        useResizeHandler: true,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        },\n        onClick: function onClick(e) {\n          return _this2.clickBoxPlotHandler(e);\n        }\n      }); // CDS Analysis\n\n      var alleleShorterColumn = Object.keys(this.state.cds_df_data[0]).find(function (k) {\n        return k.includes(\"Alleles shorter\");\n      });\n      var columns = [{\n        name: \"Gene\",\n        label: \"Locus\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Alleles not multiple of 3\",\n        label: \"Alleles not multiple of 3\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Alleles w/ >1 stop codons\",\n        label: \"Alleles w/ >1 stop codons\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Alleles wo/ Start/Stop Codon\",\n        label: \"Alleles wo/ Start/Stop Codon\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: alleleShorterColumn,\n        label: alleleShorterColumn,\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Total Invalid Alleles\",\n        label: \"Total Invalid Alleles\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Missing Allele IDs\",\n        label: \"Missing Allele IDs\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          },\n          customBodyRender: function customBodyRender(value, tableMeta, updateValue) {\n            return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null, value.join(\", \"));\n          }\n        }\n      }, {\n        name: \"CDS\",\n        label: \"Valid Alleles\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }];\n      var options = {\n        responsive: \"vertical\",\n        selectableRowsHeader: false,\n        selectableRows: \"none\",\n        selectableRowsOnClick: false,\n        print: false,\n        download: true,\n        filter: true,\n        search: true,\n        viewColumns: true,\n        pagination: true,\n        onCellClick: function onCellClick(cellData, cellMeta) {\n          if (cellData.includes(\".fasta\")) {\n            _this2.clickCdsTableHandler(cellData);\n          }\n        }\n      };\n      var cds_data = this.state.cds_df_data;\n      var cds_analysis_table = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_styles__WEBPACK_IMPORTED_MODULE_6__.default, {\n        theme: this.getMuiTheme()\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(mui_datatables__WEBPACK_IMPORTED_MODULE_3__.default, {\n        title: \"Loci Analysis\",\n        data: cds_data,\n        columns: columns,\n        options: options\n      })); // CDS scatter\n\n      var scatterCDS = [];\n      var barWidth = Array(this.state.cds_scatter_data[\"CDS_Alleles\"].length).fill(0.2);\n      scatterCDS.push({\n        type: \"bar\",\n        name: \"CDS Alleles\",\n        x: this.state.cds_scatter_data[\"CDS_Alleles\"],\n        orientation: \"h\",\n        text: this.state.cds_scatter_data[\"genes\"],\n        marker_color: \"#045a8d\",\n        width: barWidth\n      }, {\n        type: \"bar\",\n        name: \"Non multiple 3\",\n        x: this.state.cds_scatter_data[\"mult3\"],\n        orientation: \"h\",\n        text: this.state.cds_scatter_data[\"genes\"],\n        marker_color: \"#006d2c\",\n        width: barWidth\n      }, {\n        type: \"bar\",\n        name: \"> 1 stop codon\",\n        x: this.state.cds_scatter_data[\"stopC\"],\n        orientation: \"h\",\n        text: this.state.cds_scatter_data[\"genes\"],\n        marker_color: \"#7b3294\",\n        width: barWidth\n      }, {\n        type: \"bar\",\n        name: \"No Start/Stop codon\",\n        x: this.state.cds_scatter_data[\"notStart\"],\n        orientation: \"h\",\n        text: this.state.cds_scatter_data[\"genes\"],\n        marker_color: \"#ec7014\",\n        width: barWidth\n      }, {\n        type: \"bar\",\n        name: alleleShorterColumn,\n        x: this.state.cds_scatter_data[\"shorter\"],\n        orientation: \"h\",\n        text: this.state.cds_scatter_data[\"genes\"],\n        marker_color: \"#6a3d9a\",\n        width: barWidth\n      });\n      var cds_scatter_plot = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_plotly_js__WEBPACK_IMPORTED_MODULE_4__.default, {\n        data: scatterCDS,\n        layout: {\n          autosize: true,\n          barmode: \"stack\",\n          bargap: 0.5,\n          bargroupgap: 0.0,\n          title: {\n            text: \"Summary of problematic alleles per locus\"\n          },\n          xaxis: {\n            title: {\n              text: \"Number of occurrences\"\n            },\n            gridcolor: \"#eee\",\n            type: \"log\"\n          },\n          yaxis: {\n            showgrid: false,\n            showticklabels: false\n          },\n          plot_bgcolor: \"rgba(0,0,0,0)\",\n          hovermode: \"closest\"\n        },\n        useResizeHandler: true,\n        style: {\n          width: \"100%\",\n          height: \"700px\"\n        }\n      }); // Schema Summary Statistics table\n\n      var totalDataColumns = this.totalDataColumnsHandler(this.state.total_data, alleleShorterColumn);\n      var totalDataOptions = {\n        responsive: \"vertical\",\n        selectableRowsHeader: false,\n        selectableRows: \"none\",\n        selectableRowsOnClick: false,\n        print: false,\n        download: false,\n        filter: false,\n        search: false,\n        viewColumns: true,\n        pagination: false\n      };\n      var total_data = this.state.total_data;\n      var total_data_table = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_styles__WEBPACK_IMPORTED_MODULE_6__.default, {\n        theme: this.getMuiTheme()\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(mui_datatables__WEBPACK_IMPORTED_MODULE_3__.default, {\n        title: \"Schema Summary Statistics\",\n        data: total_data,\n        columns: totalDataColumns,\n        options: totalDataOptions\n      }));\n      var notConservedList = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null);\n\n      if (this.state.notConserved === \"undefined\") {\n        notConservedList = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__.default, {\n          variant: \"outlined\",\n          severity: \"info\"\n        }, \"No loci with high length variability detected.\");\n      } else {\n        var notConservedColumns = [{\n          name: \"gene\",\n          label: \"Locus\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }];\n        var notConservedOptions = {\n          responsive: \"vertical\",\n          selectableRowsHeader: false,\n          selectableRows: \"none\",\n          selectableRowsOnClick: false,\n          print: false,\n          download: false,\n          filter: false,\n          search: false,\n          viewColumns: true,\n          pagination: true,\n          onCellClick: function onCellClick(cellData, cellMeta) {\n            if (cellData.includes(\".fasta\")) {\n              _this2.clickCdsTableHandler(cellData);\n            }\n          }\n        };\n        notConservedList = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_hoc_Aux__WEBPACK_IMPORTED_MODULE_1__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n          style: {\n            marginTop: \"40px\",\n            width: \"100%\"\n          }\n        }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__.default, {\n          variant: \"outlined\",\n          severity: \"info\"\n        }, this.state.notConservedMessage)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n          style: {\n            marginTop: \"20px\"\n          }\n        }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_styles__WEBPACK_IMPORTED_MODULE_6__.default, {\n          theme: this.getMuiTheme()\n        }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(mui_datatables__WEBPACK_IMPORTED_MODULE_3__.default, {\n          title: \"Loci with high variability\",\n          data: this.state.notConserved,\n          columns: notConservedColumns,\n          options: notConservedOptions\n        }))));\n      }\n\n      var oneAlleleOnlyList = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null);\n\n      if (this.state.oneAlleleOnly === \"undefined\") {\n        oneAlleleOnlyList = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__.default, {\n          variant: \"outlined\",\n          severity: \"info\"\n        }, \"No loci with only 1 allele were detected.\");\n      } else {\n        var oneAlleleOnlyColumns = [{\n          name: \"gene\",\n          label: \"Locus\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }];\n        var oneAlleleOnlyOptions = {\n          responsive: \"vertical\",\n          selectableRowsHeader: false,\n          selectableRows: \"none\",\n          selectableRowsOnClick: false,\n          print: false,\n          download: false,\n          filter: false,\n          search: false,\n          viewColumns: true,\n          pagination: true,\n          onCellClick: function onCellClick(cellData, cellMeta) {\n            if (cellData.includes(\".fasta\")) {\n              _this2.clickCdsTableHandler(cellData);\n            }\n          }\n        };\n        oneAlleleOnlyList = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_hoc_Aux__WEBPACK_IMPORTED_MODULE_1__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_styles__WEBPACK_IMPORTED_MODULE_6__.default, {\n          theme: this.getMuiTheme()\n        }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(mui_datatables__WEBPACK_IMPORTED_MODULE_3__.default, {\n          title: \"Loci with only 1 allele\",\n          data: this.state.oneAlleleOnly,\n          columns: oneAlleleOnlyColumns,\n          options: oneAlleleOnlyOptions\n        }))));\n      }\n\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_hoc_Aux__WEBPACK_IMPORTED_MODULE_1__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"40px\",\n          width: \"100%\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__.default, {\n        variant: \"outlined\",\n        severity: \"info\"\n      }, this.state.message)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"40px\"\n        }\n      }, total_data_table), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"40px\"\n        }\n      }, notConservedList), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"40px\"\n        }\n      }, oneAlleleOnlyList), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"40px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_8__.default, {\n        defaultExpanded: true\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionSummary__WEBPACK_IMPORTED_MODULE_9__.default, {\n        expandIcon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_icons_ExpandMore__WEBPACK_IMPORTED_MODULE_10__.default, null)\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_11__.default, {\n        variant: \"h5\",\n        className: _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__.default.title\n      }, \"Schema Evaluation\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_12__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        className: _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__.default.mainPaper,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginBottom: \"10px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_11__.default, {\n        variant: \"subtitle1\"\n      }, \"In the Locus Statistics and Locus Size Variation graphs, each point (locus) is clickable and will open a page with more details about it.\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: style.buttonBar\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Button__WEBPACK_IMPORTED_MODULE_13__.default, {\n        style: style.button,\n        className: \"\".concat(this.state.tabValue === 0 && _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__.default.tabButton),\n        onClick: function onClick() {\n          _this2.plotChangeHandler(0);\n        }\n      }, \"Allele Numbers Analysis\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Button__WEBPACK_IMPORTED_MODULE_13__.default, {\n        style: style.button,\n        className: \"\".concat(this.state.tabValue === 1 && _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__.default.tabButton),\n        onClick: function onClick() {\n          _this2.plotChangeHandler(1);\n        }\n      }, \"Allele Length Analysis\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Button__WEBPACK_IMPORTED_MODULE_13__.default, {\n        style: style.button,\n        className: \"\".concat(this.state.tabValue === 2 && _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__.default.tabButton),\n        onClick: function onClick() {\n          _this2.plotChangeHandler(2);\n        }\n      }, \"Locus Statistics\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Button__WEBPACK_IMPORTED_MODULE_13__.default, {\n        style: style.button,\n        className: \"\".concat(this.state.tabValue === 3 && _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__.default.tabButton),\n        onClick: function onClick() {\n          _this2.plotChangeHandler(3);\n        }\n      }, \"Locus Size Variation\")), this.state.tabValue === 0 && total_allele_plot, this.state.tabValue === 1 && mode_data_plot, this.state.tabValue === 2 && scatter_plot, this.state.tabValue === 3 && boxplot)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        id: \"cds-analysis\",\n        style: {\n          marginTop: \"40px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_11__.default, {\n        variant: \"h5\",\n        className: _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__.default.title\n      }, \"Loci Analysis\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"20px\"\n        }\n      }, cds_analysis_table), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"20px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_hoc_Aux__WEBPACK_IMPORTED_MODULE_1__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"20px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__.default, {\n        variant: \"outlined\",\n        severity: \"info\"\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_11__.default, {\n        variant: \"subtitle1\"\n      }, \"The x-axis of the following plot is in logarithmic scale for a more compact visualization.\"))), cds_scatter_plot)))));\n    }\n  }]);\n\n  return SchemaEvaluator;\n}(react__WEBPACK_IMPORTED_MODULE_0__.Component);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SchemaEvaluator);\n\n//# sourceURL=webpack://test_react/./src/components/SchemaEvaluator.js?");
 
 /***/ }),
 
diff --git a/CHEWBBACA/SchemaEvaluator/resources/main_ind.js b/CHEWBBACA/SchemaEvaluator/resources/main_ind.js
index d263d2e8..f5d55dc4 100644
--- a/CHEWBBACA/SchemaEvaluator/resources/main_ind.js
+++ b/CHEWBBACA/SchemaEvaluator/resources/main_ind.js
@@ -7115,7 +7115,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
 
 "use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var _hoc_Aux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../hoc/Aux */ \"./src/hoc/Aux.js\");\n/* harmony import */ var _SchemaEvaluatorIndividual_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./SchemaEvaluatorIndividual.css */ \"./src/components/SchemaEvaluatorIndividual.css\");\n/* harmony import */ var _material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @material-ui/core/Grid */ \"./node_modules/@material-ui/core/esm/Grid/Grid.js\");\n/* harmony import */ var _material_ui_core_Switch__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @material-ui/core/Switch */ \"./node_modules/@material-ui/core/esm/Switch/Switch.js\");\n/* harmony import */ var _material_ui_core_Button__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @material-ui/core/Button */ \"./node_modules/@material-ui/core/esm/Button/Button.js\");\n/* harmony import */ var _material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @material-ui/core/Typography */ \"./node_modules/@material-ui/core/esm/Typography/Typography.js\");\n/* harmony import */ var _material_ui_core_FormControlLabel__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @material-ui/core/FormControlLabel */ \"./node_modules/@material-ui/core/esm/FormControlLabel/FormControlLabel.js\");\n/* harmony import */ var _material_ui_core_styles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @material-ui/core/styles */ \"./node_modules/@material-ui/core/esm/styles/createMuiTheme.js\");\n/* harmony import */ var _material_ui_core_styles__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @material-ui/core/styles */ \"./node_modules/@material-ui/styles/esm/ThemeProvider/ThemeProvider.js\");\n/* harmony import */ var _material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @material-ui/core/Accordion */ \"./node_modules/@material-ui/core/esm/Accordion/Accordion.js\");\n/* harmony import */ var _material_ui_core_AccordionSummary__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @material-ui/core/AccordionSummary */ \"./node_modules/@material-ui/core/esm/AccordionSummary/AccordionSummary.js\");\n/* harmony import */ var _material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @material-ui/core/AccordionDetails */ \"./node_modules/@material-ui/core/esm/AccordionDetails/AccordionDetails.js\");\n/* harmony import */ var _material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @material-ui/lab/Alert */ \"./node_modules/@material-ui/lab/esm/Alert/Alert.js\");\n/* harmony import */ var react_select__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! react-select */ \"./node_modules/react-select/dist/react-select.browser.esm.js\");\n/* harmony import */ var mui_datatables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! mui-datatables */ \"./node_modules/mui-datatables/dist/index.js\");\n/* harmony import */ var react_plotly_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-plotly.js */ \"./node_modules/react-plotly.js/react-plotly.js\");\n/* harmony import */ var react_msa_viewer__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! react-msa-viewer */ \"./node_modules/react-msa-viewer/dist/index.esm.min.js\");\n/* harmony import */ var _Phylocanvas__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Phylocanvas */ \"./src/components/Phylocanvas.js\");\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n // Material-UI components\n\n\n\n\n\n\n // Material-UI ExpansionPanel components\n\n\n\n // Material-UI Lab components\n\n // react-select import\n\n // Material-UI Datatables\n\n // Plotly.js\n\n // MSAViewer\n\n // Phylocanvas\n\n\n\nvar SchemaEvaluator = /*#__PURE__*/function (_Component) {\n  _inherits(SchemaEvaluator, _Component);\n\n  var _super = _createSuper(SchemaEvaluator);\n\n  function SchemaEvaluator() {\n    var _this;\n\n    _classCallCheck(this, SchemaEvaluator);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      locus_ind_data: _preComputedDataInd,\n      cds_df_data: _cdsDf,\n      exceptions: _exceptions,\n      testMSA: _msaData,\n      phyloData: _phyloData,\n      indTabValue: 0,\n      treeType: 0,\n      zoom: false\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"getMuiTheme\", function () {\n      return (0,_material_ui_core_styles__WEBPACK_IMPORTED_MODULE_6__.default)({\n        overrides: {\n          MUIDataTableToolbar: {\n            titleText: {\n              color: \"#bb7944\"\n            }\n          }\n        }\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"indPlotChangeHandler\", function (value) {\n      _this.setState({\n        indTabValue: value\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleSelectChange\", function (selectType, val) {\n      var newState = {};\n      newState[selectType] = val.value;\n\n      _this.setState(newState);\n    });\n\n    return _this;\n  }\n\n  _createClass(SchemaEvaluator, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      // Tree type options for Phylocanvas\n      var treeTypeOption = [\"circular\", \"rectangular\", \"diagonal\", \"hierarchical\", \"radial\"].map(function (v, i) {\n        return {\n          label: v,\n          value: i\n        };\n      });\n      var style = {\n        buttonBar: {\n          overflowX: \"auto\",\n          display: \"flex\",\n          justifyContent: \"center\",\n          marginBottom: \"20px\"\n        },\n        button: {\n          minWidth: \"150px\"\n        },\n        formControl: {\n          margin: 0,\n          display: \"flex\",\n          wrap: \"nowrap\"\n        },\n        root: {\n          width: \"100%\"\n        },\n        toolbar: {\n          display: \"flex\"\n        },\n        select: {\n          width: \"170px\",\n          marginRight: \"10px\",\n          zIndex: 100\n        },\n        zoom: {\n          marginLeft: \"auto\"\n        }\n      };\n      var phylocanvasComponent = this.state.phyloData === \"undefined\" ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"20px\",\n          width: \"100%\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__.default, {\n        variant: \"outlined\",\n        severity: \"warning\"\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"subtitle1\"\n      }, \"The NJ tree and MSA were not generated because chewBBACA determined that this locus does not have valid alleles or has only one valid allele.\"))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_hoc_Aux__WEBPACK_IMPORTED_MODULE_1__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"40px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          width: \"100%\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__.default, {\n        variant: \"outlined\",\n        severity: \"info\"\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"subtitle1\"\n      }, \"Note: the first number of the name of each leaf corresponds to the order the sequence appears in the input sequence file. For example: '1_5' means that the first sequence of the input file is named '5'.\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"10px\",\n          width: \"100%\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__.default, {\n        variant: \"outlined\",\n        severity: \"info\"\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"subtitle1\"\n      }, \"If a tree is not being displayed it means that the distance between alleles is 0 and Phyloncavas won't render the tree.\")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"40px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_9__.default, {\n        defaultExpanded: true\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionSummary__WEBPACK_IMPORTED_MODULE_10__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"h5\",\n        className: _SchemaEvaluatorIndividual_css__WEBPACK_IMPORTED_MODULE_2__.default.title\n      }, \"NJ tree\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_11__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: style.root\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_12__.default, {\n        container: true,\n        style: style.toolbar\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: style.select\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, null, \"Tree type:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_select__WEBPACK_IMPORTED_MODULE_13__.default, {\n        closeMenuOnSelect: false,\n        options: treeTypeOption,\n        onChange: function onChange(val) {\n          _this2.handleSelectChange(\"treeType\", val);\n        },\n        value: treeTypeOption[this.state.treeType]\n      })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_FormControlLabel__WEBPACK_IMPORTED_MODULE_14__.default, {\n        control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Switch__WEBPACK_IMPORTED_MODULE_15__.default, {\n          color: \"primary\",\n          onChange: function onChange() {\n            _this2.setState({\n              zoom: !_this2.state.zoom\n            });\n          },\n          checked: this.state.zoom\n        }),\n        label: \"Zoom is \".concat(this.state.zoom ? \"enabled\" : \"disabled\"),\n        style: style.zoom\n      })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_Phylocanvas__WEBPACK_IMPORTED_MODULE_5__.PhylogeneticTree, {\n        zoom: this.state.zoom,\n        treeType: treeTypeOption[this.state.treeType].label,\n        newickString: this.state.phyloData.phylo_data\n      }))))));\n      var hist_allele_sizes_x = this.state.locus_ind_data.data.allele_sizes;\n      var hist_allele_ids_y = this.state.locus_ind_data.data.locus_ids;\n      var ind_hist_data = [];\n      ind_hist_data.push({\n        x: hist_allele_sizes_x,\n        y: hist_allele_ids_y,\n        type: \"histogram\",\n        name: \"Locus Details\"\n      });\n      var ind_hist = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_plotly_js__WEBPACK_IMPORTED_MODULE_4__.default, {\n        data: ind_hist_data,\n        layout: {\n          title: {\n            text: this.state.locus_ind_data.locus_name\n          },\n          xaxis: {\n            title: {\n              text: \"Sequence size in bp\"\n            }\n          },\n          yaxis: {\n            title: {\n              text: \"Number of Alleles\"\n            }\n          }\n        },\n        useResizeHandler: true,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        },\n        line: {\n          width: 1\n        }\n      }); // Build scatter\n\n      var scatter_allele_ids_x = this.state.locus_ind_data.data.locus_ids.map(function (id) {\n        return id.split(\"_\")[id.split(\"_\").length - 1];\n      });\n      var scatter_allele_sizes_y = this.state.locus_ind_data.data.allele_sizes;\n      var ind_scatter_data = [];\n      ind_scatter_data.push({\n        x: scatter_allele_ids_x,\n        y: scatter_allele_sizes_y,\n        type: \"scatter\",\n        name: \"Locus Details\",\n        mode: \"markers\"\n      });\n      var ind_scatter = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_plotly_js__WEBPACK_IMPORTED_MODULE_4__.default, {\n        data: ind_scatter_data,\n        layout: {\n          title: {\n            text: this.state.locus_ind_data.locus_name\n          },\n          xaxis: {\n            title: {\n              text: \"Allele ID\",\n              tick0: 0,\n              dtick: 1\n            }\n          },\n          yaxis: {\n            title: {\n              text: \"Sequence size in bp\",\n              tick0: 0,\n              dtick: 1\n            }\n          },\n          hovermode: \"closest\"\n        },\n        useResizeHandler: true,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        },\n        line: {\n          width: 1\n        }\n      }); // Build table with additional information\n\n      var cdsTableInfo = this.state.cds_df_data;\n      var alleleShorterColumn = Object.keys(this.state.cds_df_data).find(function (k) {\n        return k.includes(\"Alleles shorter\");\n      });\n      var indData = {\n        size_range: this.state.locus_ind_data.data.size_range,\n        alleles_median: this.state.locus_ind_data.data.alleles_median,\n        alleles_mode: this.state.locus_ind_data.data.alleles_mode\n      };\n      var indTableData = [_objectSpread(_objectSpread({}, cdsTableInfo), indData)];\n      var indTableColumns = [{\n        name: \"Gene\",\n        label: \"Locus\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Number of alleles\",\n        label: \"Number of Alleles\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Alleles not multiple of 3\",\n        label: \"Alleles not multiple of 3\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Alleles w/ >1 stop codons\",\n        label: \"Alleles w/ >1 stop codons\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Alleles wo/ Start/Stop Codon\",\n        label: \"Alleles wo/ Start/Stop Codon\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: alleleShorterColumn,\n        label: alleleShorterColumn,\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Missing Allele IDs\",\n        label: \"Missing Allele IDs\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          },\n          customBodyRender: function customBodyRender(value, tableMeta, updateValue) {\n            return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null, value.join(\", \"));\n          }\n        }\n      }, {\n        name: \"CDS\",\n        label: \"Valid Alleles\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"size_range\",\n        label: \"Size Range (bp)\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"alleles_median\",\n        label: \"Alleles Median\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"alleles_mode\",\n        label: \"Alleles Mode\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }];\n      var indTableOptions = {\n        responsive: \"vertical\",\n        selectableRowsHeader: false,\n        selectableRows: \"none\",\n        selectableRowsOnClick: false,\n        print: false,\n        download: false,\n        filter: false,\n        search: false,\n        viewColumns: false,\n        pagination: false\n      };\n      var indTable = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_styles__WEBPACK_IMPORTED_MODULE_16__.default, {\n        theme: this.getMuiTheme()\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(mui_datatables__WEBPACK_IMPORTED_MODULE_3__.default, {\n        title: \"Locus information\",\n        data: indTableData,\n        columns: indTableColumns,\n        options: indTableOptions\n      }));\n      var excTableColumns = [{\n        name: \"allele\",\n        label: \"Allele\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"exception\",\n        label: \"Exceptions\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }];\n      var excTableOptions = {\n        responsive: \"vertical\",\n        selectableRowsHeader: false,\n        selectableRows: \"none\",\n        selectableRowsOnClick: false,\n        print: false,\n        download: false,\n        filter: false,\n        search: false,\n        viewColumns: false,\n        pagination: true\n      };\n      var excTable = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_styles__WEBPACK_IMPORTED_MODULE_16__.default, {\n        theme: this.getMuiTheme()\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(mui_datatables__WEBPACK_IMPORTED_MODULE_3__.default, {\n        title: \"Exceptions\",\n        data: this.state.exceptions,\n        columns: excTableColumns,\n        options: excTableOptions\n      }));\n\n      var msa_options = _objectSpread(_objectSpread({}, this.state.testMSA), {}, {\n        colorScheme: \"clustal2\",\n        height: 1000,\n        width: 1500,\n        barMethod: \"information-content\"\n      });\n\n      var msa_component = this.state.testMSA === \"undefined\" ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"40px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_9__.default, {\n        defaultExpanded: true\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionSummary__WEBPACK_IMPORTED_MODULE_10__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"h5\",\n        className: _SchemaEvaluatorIndividual_css__WEBPACK_IMPORTED_MODULE_2__.default.title\n      }, \"Multiple Sequence Analysis\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_11__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        id: \"msa-viewer\",\n        style: {\n          padding: \"16px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"subtitle1\"\n      }, \"To analyse the alignment please hover over the alignment until the hand cursor appears and then drag it to see the remaining data.\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"subtitle1\"\n      }, \"Note: the gray graph above the alignment represents the information entropy after Shannon of a column (scaled).\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_msa_viewer__WEBPACK_IMPORTED_MODULE_17__.default, msa_options)))));\n      var locusIndHist = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginBottom: \"2%\",\n          marginTop: \"3%\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_9__.default, {\n        defaultExpanded: true\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_11__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        className: _SchemaEvaluatorIndividual_css__WEBPACK_IMPORTED_MODULE_2__.default.mainPaper,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: style.buttonBar\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Button__WEBPACK_IMPORTED_MODULE_18__.default, {\n        style: style.button,\n        className: \"\".concat(this.state.indTabValue === 0 && _SchemaEvaluatorIndividual_css__WEBPACK_IMPORTED_MODULE_2__.default.tabButton),\n        onClick: function onClick() {\n          _this2.indPlotChangeHandler(0);\n        }\n      }, \"Histogram\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Button__WEBPACK_IMPORTED_MODULE_18__.default, {\n        style: style.button,\n        className: \"\".concat(this.state.indTabValue === 1 && _SchemaEvaluatorIndividual_css__WEBPACK_IMPORTED_MODULE_2__.default.tabButton),\n        onClick: function onClick() {\n          _this2.indPlotChangeHandler(1);\n        }\n      }, \"Scatter\")), this.state.indTabValue === 0 && ind_hist, this.state.indTabValue === 1 && ind_scatter)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"20px\"\n        }\n      }, indTable), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"20px\"\n        }\n      }, excTable));\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_hoc_Aux__WEBPACK_IMPORTED_MODULE_1__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        id: \"locus-ind\",\n        style: {\n          marginTop: \"40px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"20px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"h5\",\n        className: _SchemaEvaluatorIndividual_css__WEBPACK_IMPORTED_MODULE_2__.default.title\n      }, \"Locus Individual Analysis\")), locusIndHist, phylocanvasComponent, msa_component)));\n    }\n  }]);\n\n  return SchemaEvaluator;\n}(react__WEBPACK_IMPORTED_MODULE_0__.Component);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SchemaEvaluator);\n\n//# sourceURL=webpack://test_react/./src/components/SchemaEvaluatorIndividual.js?");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var _hoc_Aux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../hoc/Aux */ \"./src/hoc/Aux.js\");\n/* harmony import */ var _SchemaEvaluatorIndividual_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./SchemaEvaluatorIndividual.css */ \"./src/components/SchemaEvaluatorIndividual.css\");\n/* harmony import */ var _material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @material-ui/core/Grid */ \"./node_modules/@material-ui/core/esm/Grid/Grid.js\");\n/* harmony import */ var _material_ui_core_Switch__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @material-ui/core/Switch */ \"./node_modules/@material-ui/core/esm/Switch/Switch.js\");\n/* harmony import */ var _material_ui_core_Button__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @material-ui/core/Button */ \"./node_modules/@material-ui/core/esm/Button/Button.js\");\n/* harmony import */ var _material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @material-ui/core/Typography */ \"./node_modules/@material-ui/core/esm/Typography/Typography.js\");\n/* harmony import */ var _material_ui_core_FormControlLabel__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @material-ui/core/FormControlLabel */ \"./node_modules/@material-ui/core/esm/FormControlLabel/FormControlLabel.js\");\n/* harmony import */ var _material_ui_core_styles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @material-ui/core/styles */ \"./node_modules/@material-ui/core/esm/styles/createMuiTheme.js\");\n/* harmony import */ var _material_ui_core_styles__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @material-ui/core/styles */ \"./node_modules/@material-ui/styles/esm/ThemeProvider/ThemeProvider.js\");\n/* harmony import */ var _material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @material-ui/core/Accordion */ \"./node_modules/@material-ui/core/esm/Accordion/Accordion.js\");\n/* harmony import */ var _material_ui_core_AccordionSummary__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @material-ui/core/AccordionSummary */ \"./node_modules/@material-ui/core/esm/AccordionSummary/AccordionSummary.js\");\n/* harmony import */ var _material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @material-ui/core/AccordionDetails */ \"./node_modules/@material-ui/core/esm/AccordionDetails/AccordionDetails.js\");\n/* harmony import */ var _material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @material-ui/lab/Alert */ \"./node_modules/@material-ui/lab/esm/Alert/Alert.js\");\n/* harmony import */ var react_select__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! react-select */ \"./node_modules/react-select/dist/react-select.browser.esm.js\");\n/* harmony import */ var mui_datatables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! mui-datatables */ \"./node_modules/mui-datatables/dist/index.js\");\n/* harmony import */ var react_plotly_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-plotly.js */ \"./node_modules/react-plotly.js/react-plotly.js\");\n/* harmony import */ var react_msa_viewer__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! react-msa-viewer */ \"./node_modules/react-msa-viewer/dist/index.esm.min.js\");\n/* harmony import */ var _Phylocanvas__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Phylocanvas */ \"./src/components/Phylocanvas.js\");\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n // Material-UI components\n\n\n\n\n\n\n // Material-UI ExpansionPanel components\n\n\n\n // Material-UI Lab components\n\n // react-select import\n\n // Material-UI Datatables\n\n // Plotly.js\n\n // MSAViewer\n\n // Phylocanvas\n\n\n\nvar SchemaEvaluator = /*#__PURE__*/function (_Component) {\n  _inherits(SchemaEvaluator, _Component);\n\n  var _super = _createSuper(SchemaEvaluator);\n\n  function SchemaEvaluator() {\n    var _this;\n\n    _classCallCheck(this, SchemaEvaluator);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      locus_ind_data: _preComputedDataInd,\n      cds_df_data: _cdsDf,\n      exceptions: _exceptions,\n      testMSA: _msaData,\n      phyloData: _phyloData,\n      indTabValue: 0,\n      treeType: 0,\n      zoom: false\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"getMuiTheme\", function () {\n      return (0,_material_ui_core_styles__WEBPACK_IMPORTED_MODULE_6__.default)({\n        overrides: {\n          MUIDataTableToolbar: {\n            titleText: {\n              color: \"#bb7944\"\n            }\n          }\n        }\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"indPlotChangeHandler\", function (value) {\n      _this.setState({\n        indTabValue: value\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleSelectChange\", function (selectType, val) {\n      var newState = {};\n      newState[selectType] = val.value;\n\n      _this.setState(newState);\n    });\n\n    return _this;\n  }\n\n  _createClass(SchemaEvaluator, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      // Tree type options for Phylocanvas\n      var treeTypeOption = [\"circular\", \"rectangular\", \"diagonal\", \"hierarchical\", \"radial\"].map(function (v, i) {\n        return {\n          label: v,\n          value: i\n        };\n      });\n      var style = {\n        buttonBar: {\n          overflowX: \"auto\",\n          display: \"flex\",\n          justifyContent: \"center\",\n          marginBottom: \"20px\"\n        },\n        button: {\n          minWidth: \"150px\"\n        },\n        formControl: {\n          margin: 0,\n          display: \"flex\",\n          wrap: \"nowrap\"\n        },\n        root: {\n          width: \"100%\"\n        },\n        toolbar: {\n          display: \"flex\"\n        },\n        select: {\n          width: \"170px\",\n          marginRight: \"10px\",\n          zIndex: 100\n        },\n        zoom: {\n          marginLeft: \"auto\"\n        }\n      };\n      var phylocanvasComponent = this.state.phyloData === \"undefined\" ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"20px\",\n          width: \"100%\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__.default, {\n        variant: \"outlined\",\n        severity: \"warning\"\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"subtitle1\"\n      }, \"The NJ tree and MSA were not generated because chewBBACA determined that this locus does not have valid alleles or has only one valid allele.\"))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_hoc_Aux__WEBPACK_IMPORTED_MODULE_1__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"40px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          width: \"100%\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__.default, {\n        variant: \"outlined\",\n        severity: \"info\"\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"subtitle1\"\n      }, \"Note: the first number of the name of each leaf corresponds to the order the sequence appears in the input sequence file. For example: '1_5' means that the first sequence of the input file is named '5'.\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"10px\",\n          width: \"100%\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__.default, {\n        variant: \"outlined\",\n        severity: \"info\"\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"subtitle1\"\n      }, \"If a tree is not being displayed it means that the distance between alleles is 0 and Phylocanvas won't render the tree.\")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"40px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_9__.default, {\n        defaultExpanded: true\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionSummary__WEBPACK_IMPORTED_MODULE_10__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"h5\",\n        className: _SchemaEvaluatorIndividual_css__WEBPACK_IMPORTED_MODULE_2__.default.title\n      }, \"NJ tree\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_11__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: style.root\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_12__.default, {\n        container: true,\n        style: style.toolbar\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: style.select\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, null, \"Tree type:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_select__WEBPACK_IMPORTED_MODULE_13__.default, {\n        closeMenuOnSelect: false,\n        options: treeTypeOption,\n        onChange: function onChange(val) {\n          _this2.handleSelectChange(\"treeType\", val);\n        },\n        value: treeTypeOption[this.state.treeType]\n      })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_FormControlLabel__WEBPACK_IMPORTED_MODULE_14__.default, {\n        control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Switch__WEBPACK_IMPORTED_MODULE_15__.default, {\n          color: \"primary\",\n          onChange: function onChange() {\n            _this2.setState({\n              zoom: !_this2.state.zoom\n            });\n          },\n          checked: this.state.zoom\n        }),\n        label: \"Zoom is \".concat(this.state.zoom ? \"enabled\" : \"disabled\"),\n        style: style.zoom\n      })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_Phylocanvas__WEBPACK_IMPORTED_MODULE_5__.PhylogeneticTree, {\n        zoom: this.state.zoom,\n        treeType: treeTypeOption[this.state.treeType].label,\n        newickString: this.state.phyloData.phylo_data\n      }))))));\n      var hist_allele_sizes_x = this.state.locus_ind_data.data.allele_sizes;\n      var hist_allele_ids_y = this.state.locus_ind_data.data.locus_ids;\n      var ind_hist_data = [];\n      ind_hist_data.push({\n        x: hist_allele_sizes_x,\n        y: hist_allele_ids_y,\n        type: \"histogram\",\n        name: \"Locus Details\"\n      });\n      var ind_hist = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_plotly_js__WEBPACK_IMPORTED_MODULE_4__.default, {\n        data: ind_hist_data,\n        layout: {\n          title: {\n            text: this.state.locus_ind_data.locus_name\n          },\n          xaxis: {\n            title: {\n              text: \"Sequence size in bp\"\n            }\n          },\n          yaxis: {\n            title: {\n              text: \"Number of Alleles\"\n            }\n          }\n        },\n        useResizeHandler: true,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        },\n        line: {\n          width: 1\n        }\n      }); // Build scatter\n\n      var scatter_allele_ids_x = this.state.locus_ind_data.data.locus_ids.map(function (id) {\n        return id.split(\"_\")[id.split(\"_\").length - 1];\n      });\n      var scatter_allele_sizes_y = this.state.locus_ind_data.data.allele_sizes;\n      var ind_scatter_data = [];\n      ind_scatter_data.push({\n        x: scatter_allele_ids_x,\n        y: scatter_allele_sizes_y,\n        type: \"scatter\",\n        name: \"Locus Details\",\n        mode: \"markers\"\n      });\n      var ind_scatter = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_plotly_js__WEBPACK_IMPORTED_MODULE_4__.default, {\n        data: ind_scatter_data,\n        layout: {\n          title: {\n            text: this.state.locus_ind_data.locus_name\n          },\n          xaxis: {\n            title: {\n              text: \"Allele ID\",\n              tick0: 0,\n              dtick: 1\n            }\n          },\n          yaxis: {\n            title: {\n              text: \"Sequence size in bp\",\n              tick0: 0,\n              dtick: 1\n            }\n          },\n          hovermode: \"closest\"\n        },\n        useResizeHandler: true,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        },\n        line: {\n          width: 1\n        }\n      }); // Build table with additional information\n\n      var cdsTableInfo = this.state.cds_df_data;\n      var alleleShorterColumn = Object.keys(this.state.cds_df_data).find(function (k) {\n        return k.includes(\"Alleles shorter\");\n      });\n      var indData = {\n        size_range: this.state.locus_ind_data.data.size_range,\n        alleles_median: this.state.locus_ind_data.data.alleles_median,\n        alleles_mode: this.state.locus_ind_data.data.alleles_mode\n      };\n      var indTableData = [_objectSpread(_objectSpread({}, cdsTableInfo), indData)];\n      var indTableColumns = [{\n        name: \"Gene\",\n        label: \"Locus\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Number of alleles\",\n        label: \"Number of Alleles\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Alleles not multiple of 3\",\n        label: \"Alleles not multiple of 3\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Alleles w/ >1 stop codons\",\n        label: \"Alleles w/ >1 stop codons\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Alleles wo/ Start/Stop Codon\",\n        label: \"Alleles wo/ Start/Stop Codon\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: alleleShorterColumn,\n        label: alleleShorterColumn,\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Missing Allele IDs\",\n        label: \"Missing Allele IDs\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          },\n          customBodyRender: function customBodyRender(value, tableMeta, updateValue) {\n            return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null, value.join(\", \"));\n          }\n        }\n      }, {\n        name: \"CDS\",\n        label: \"Valid Alleles\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"size_range\",\n        label: \"Size Range (bp)\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"alleles_median\",\n        label: \"Alleles Median\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"alleles_mode\",\n        label: \"Alleles Mode\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }];\n      var indTableOptions = {\n        responsive: \"vertical\",\n        selectableRowsHeader: false,\n        selectableRows: \"none\",\n        selectableRowsOnClick: false,\n        print: false,\n        download: false,\n        filter: false,\n        search: false,\n        viewColumns: false,\n        pagination: false\n      };\n      var indTable = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_styles__WEBPACK_IMPORTED_MODULE_16__.default, {\n        theme: this.getMuiTheme()\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(mui_datatables__WEBPACK_IMPORTED_MODULE_3__.default, {\n        title: \"Locus information\",\n        data: indTableData,\n        columns: indTableColumns,\n        options: indTableOptions\n      }));\n      var excTableColumns = [{\n        name: \"allele\",\n        label: \"Allele\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"exception\",\n        label: \"Exceptions\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }];\n      var excTableOptions = {\n        responsive: \"vertical\",\n        selectableRowsHeader: false,\n        selectableRows: \"none\",\n        selectableRowsOnClick: false,\n        print: false,\n        download: false,\n        filter: false,\n        search: false,\n        viewColumns: false,\n        pagination: true\n      };\n      var excTable = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_styles__WEBPACK_IMPORTED_MODULE_16__.default, {\n        theme: this.getMuiTheme()\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(mui_datatables__WEBPACK_IMPORTED_MODULE_3__.default, {\n        title: \"Exceptions\",\n        data: this.state.exceptions,\n        columns: excTableColumns,\n        options: excTableOptions\n      }));\n\n      var msa_options = _objectSpread(_objectSpread({}, this.state.testMSA), {}, {\n        colorScheme: \"clustal2\",\n        height: 1000,\n        width: 1500,\n        barMethod: \"information-content\"\n      });\n\n      var msa_component = this.state.testMSA === \"undefined\" ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"40px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_9__.default, {\n        defaultExpanded: true\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionSummary__WEBPACK_IMPORTED_MODULE_10__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"h5\",\n        className: _SchemaEvaluatorIndividual_css__WEBPACK_IMPORTED_MODULE_2__.default.title\n      }, \"Multiple Sequence Analysis\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_11__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        id: \"msa-viewer\",\n        style: {\n          padding: \"16px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"subtitle1\"\n      }, \"To analyse the alignment please hover over the alignment until the hand cursor appears and then drag it to see the remaining data.\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"subtitle1\"\n      }, \"Note: the gray graph above the alignment represents the information entropy after Shannon of a column (scaled).\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_msa_viewer__WEBPACK_IMPORTED_MODULE_17__.default, msa_options)))));\n      var locusIndHist = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginBottom: \"2%\",\n          marginTop: \"3%\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_9__.default, {\n        defaultExpanded: true\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_11__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        className: _SchemaEvaluatorIndividual_css__WEBPACK_IMPORTED_MODULE_2__.default.mainPaper,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: style.buttonBar\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Button__WEBPACK_IMPORTED_MODULE_18__.default, {\n        style: style.button,\n        className: \"\".concat(this.state.indTabValue === 0 && _SchemaEvaluatorIndividual_css__WEBPACK_IMPORTED_MODULE_2__.default.tabButton),\n        onClick: function onClick() {\n          _this2.indPlotChangeHandler(0);\n        }\n      }, \"Histogram\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Button__WEBPACK_IMPORTED_MODULE_18__.default, {\n        style: style.button,\n        className: \"\".concat(this.state.indTabValue === 1 && _SchemaEvaluatorIndividual_css__WEBPACK_IMPORTED_MODULE_2__.default.tabButton),\n        onClick: function onClick() {\n          _this2.indPlotChangeHandler(1);\n        }\n      }, \"Scatter\")), this.state.indTabValue === 0 && ind_hist, this.state.indTabValue === 1 && ind_scatter)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"20px\"\n        }\n      }, indTable), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"20px\"\n        }\n      }, excTable));\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_hoc_Aux__WEBPACK_IMPORTED_MODULE_1__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        id: \"locus-ind\",\n        style: {\n          marginTop: \"40px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"20px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"h5\",\n        className: _SchemaEvaluatorIndividual_css__WEBPACK_IMPORTED_MODULE_2__.default.title\n      }, \"Locus Individual Analysis\")), locusIndHist, phylocanvasComponent, msa_component)));\n    }\n  }]);\n\n  return SchemaEvaluator;\n}(react__WEBPACK_IMPORTED_MODULE_0__.Component);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SchemaEvaluator);\n\n//# sourceURL=webpack://test_react/./src/components/SchemaEvaluatorIndividual.js?");
 
 /***/ }),
 
diff --git a/CHEWBBACA/SchemaEvaluator/resources/schema_evaluator_individual_reports_react_scripts/src/components/SchemaEvaluatorIndividual.js b/CHEWBBACA/SchemaEvaluator/resources/schema_evaluator_individual_reports_react_scripts/src/components/SchemaEvaluatorIndividual.js
index 801df867..0f5a5168 100644
--- a/CHEWBBACA/SchemaEvaluator/resources/schema_evaluator_individual_reports_react_scripts/src/components/SchemaEvaluatorIndividual.js
+++ b/CHEWBBACA/SchemaEvaluator/resources/schema_evaluator_individual_reports_react_scripts/src/components/SchemaEvaluatorIndividual.js
@@ -139,7 +139,7 @@ class SchemaEvaluator extends Component {
               <Alert variant="outlined" severity="info">
                 <Typography variant="subtitle1">
                   If a tree is not being displayed it means that the distance
-                  between alleles is 0 and Phyloncavas won't render the tree.
+                  between alleles is 0 and Phylocanvas won't render the tree.
                 </Typography>
               </Alert>
             </div>
diff --git a/CHEWBBACA/SchemaEvaluator/resources/schema_evaluator_main_react_scripts/src/components/Header.js b/CHEWBBACA/SchemaEvaluator/resources/schema_evaluator_main_react_scripts/src/components/Header.js
index 633f9fa0..35dcb762 100644
--- a/CHEWBBACA/SchemaEvaluator/resources/schema_evaluator_main_react_scripts/src/components/Header.js
+++ b/CHEWBBACA/SchemaEvaluator/resources/schema_evaluator_main_react_scripts/src/components/Header.js
@@ -20,7 +20,7 @@ export default function Header() {
 
   Users are able to select an **individual locus** to be analysed, by clicking on:
   - each **point (locus)** of the **Locus Statistics** and **Locus Size Variation charts**;
-  - the **locus name** on the **Locus** column of the **CDS Analysis** table.
+  - the **locus name** on the **Locus** column of the **CDS Analysis** table, the **Loci with high variability** table or the **Loci with only 1 allele** table.
 
   By selecting a locus the following will be displayed:
   - 2 charts (histogram and scatterplot) containing an **analysis of the allele sizes**;
diff --git a/CHEWBBACA/SchemaEvaluator/resources/schema_evaluator_main_react_scripts/src/components/SchemaEvaluator.js b/CHEWBBACA/SchemaEvaluator/resources/schema_evaluator_main_react_scripts/src/components/SchemaEvaluator.js
index 7fb937fa..e7e21523 100644
--- a/CHEWBBACA/SchemaEvaluator/resources/schema_evaluator_main_react_scripts/src/components/SchemaEvaluator.js
+++ b/CHEWBBACA/SchemaEvaluator/resources/schema_evaluator_main_react_scripts/src/components/SchemaEvaluator.js
@@ -31,6 +31,9 @@ class SchemaEvaluator extends Component {
     cds_df_data: _cdsDf,
     cds_scatter_data: _cdsScatter,
     total_data: _totalData,
+    notConserved: _notConserved,
+    notConservedMessage: _notConservedMessage,
+    oneAlleleOnly: _oneAlleleOnly,
     message: _message,
     tabValue: 0,
   };
@@ -774,8 +777,6 @@ class SchemaEvaluator extends Component {
       viewColumns: true,
       pagination: true,
       onCellClick: (cellData, cellMeta) => {
-        console.log(cellData, cellMeta);
-
         if (cellData.includes(".fasta")) {
           this.clickCdsTableHandler(cellData);
         }
@@ -907,6 +908,135 @@ class SchemaEvaluator extends Component {
       </MuiThemeProvider>
     );
 
+    let notConservedList = <div />;
+
+    if (this.state.notConserved === "undefined") {
+      notConservedList = (
+        <Alert variant="outlined" severity="info">
+          No loci with high length variability detected.
+        </Alert>
+      );
+    } else {
+      const notConservedColumns = [
+        {
+          name: "gene",
+          label: "Locus",
+          options: {
+            filter: true,
+            sort: true,
+            display: true,
+            setCellHeaderProps: (value) => {
+              return {
+                style: {
+                  fontWeight: "bold",
+                },
+              };
+            },
+          },
+        },
+      ];
+
+      const notConservedOptions = {
+        responsive: "vertical",
+        selectableRowsHeader: false,
+        selectableRows: "none",
+        selectableRowsOnClick: false,
+        print: false,
+        download: false,
+        filter: false,
+        search: false,
+        viewColumns: true,
+        pagination: true,
+        onCellClick: (cellData, cellMeta) => {
+          if (cellData.includes(".fasta")) {
+            this.clickCdsTableHandler(cellData);
+          }
+        },
+      };
+
+      notConservedList = (
+        <Aux>
+          <div style={{ marginTop: "40px", width: "100%" }}>
+            <Alert variant="outlined" severity="info">
+              {this.state.notConservedMessage}
+            </Alert>
+          </div>
+          <div style={{ marginTop: "20px" }}>
+            <MuiThemeProvider theme={this.getMuiTheme()}>
+              <MUIDataTable
+                title={"Loci with high variability"}
+                data={this.state.notConserved}
+                columns={notConservedColumns}
+                options={notConservedOptions}
+              />
+            </MuiThemeProvider>
+          </div>
+        </Aux>
+      );
+    }
+
+    let oneAlleleOnlyList = <div />;
+
+    if (this.state.oneAlleleOnly === "undefined") {
+      oneAlleleOnlyList = (
+        <Alert variant="outlined" severity="info">
+          No loci with only 1 allele were detected.
+        </Alert>
+      );
+    } else {
+      const oneAlleleOnlyColumns = [
+        {
+          name: "gene",
+          label: "Locus",
+          options: {
+            filter: true,
+            sort: true,
+            display: true,
+            setCellHeaderProps: (value) => {
+              return {
+                style: {
+                  fontWeight: "bold",
+                },
+              };
+            },
+          },
+        },
+      ];
+
+      const oneAlleleOnlyOptions = {
+        responsive: "vertical",
+        selectableRowsHeader: false,
+        selectableRows: "none",
+        selectableRowsOnClick: false,
+        print: false,
+        download: false,
+        filter: false,
+        search: false,
+        viewColumns: true,
+        pagination: true,
+        onCellClick: (cellData, cellMeta) => {
+          if (cellData.includes(".fasta")) {
+            this.clickCdsTableHandler(cellData);
+          }
+        },
+      };
+
+      oneAlleleOnlyList = (
+        <Aux>
+          <div>
+            <MuiThemeProvider theme={this.getMuiTheme()}>
+              <MUIDataTable
+                title={"Loci with only 1 allele"}
+                data={this.state.oneAlleleOnly}
+                columns={oneAlleleOnlyColumns}
+                options={oneAlleleOnlyOptions}
+              />
+            </MuiThemeProvider>
+          </div>
+        </Aux>
+      );
+    }
+
     return (
       <Aux>
         <div>
@@ -916,6 +1046,8 @@ class SchemaEvaluator extends Component {
             </Alert>
           </div>
           <div style={{ marginTop: "40px" }}>{total_data_table}</div>
+          <div style={{ marginTop: "40px" }}>{notConservedList}</div>
+          <div style={{ marginTop: "40px" }}>{oneAlleleOnlyList}</div>
           <div style={{ marginTop: "40px" }}>
             <Accordion defaultExpanded>
               <AccordionSummary expandIcon={<ExpandMoreIcon />}>
diff --git a/CHEWBBACA/SchemaEvaluator/schema_evaluator.py b/CHEWBBACA/SchemaEvaluator/schema_evaluator.py
index e11e5944..f1052e1d 100644
--- a/CHEWBBACA/SchemaEvaluator/schema_evaluator.py
+++ b/CHEWBBACA/SchemaEvaluator/schema_evaluator.py
@@ -64,22 +64,22 @@
 
 
 # Schema Evaluator Auxiliary Functions
-def gene_seqs_info_schema_evaluator(gene):
-    """ Determines the total number of alleles and the mean length
-        of allele sequences per gene.
-
-        Parameters
-        ----------
-        gene : string
-            a string with names/paths for FASTA files.
-
-        Returns
-        -------
-        genes_info : list
-            a list with a sublist for each input
-            gene file. Each sublist contains a gene identifier, the
-            total number of alleles for that gene and the mean length
-            of allele sequences for that gene.
+def gene_seqs_info_schema_evaluator(gene, threshold, conserved):
+    """Determines the total number of alleles and the mean length
+    of allele sequences per gene.
+
+    Parameters
+    ----------
+    gene : string
+        a string with names/paths for FASTA files.
+
+    Returns
+    -------
+    genes_info : list
+        a list with a sublist for each input
+        gene file. Each sublist contains a gene identifier, the
+        total number of alleles for that gene and the mean length
+        of allele sequences for that gene.
     """
 
     seq_generator = SeqIO.parse(gene, "fasta")
@@ -101,36 +101,106 @@ def gene_seqs_info_schema_evaluator(gene):
     mean_length = round(sum(alleles_lengths) / len(alleles_lengths))
     mode_length = Counter(alleles_lengths).most_common()[0][0]
 
-    genes_info = {
-        "gene": gene,
-        "nr_alleles": nr_alleles,
-        "min_length": min_length,
-        "max_length": max_length,
-        "median_length": median_length,
-        "mean_length": mean_length,
-        "mode_length": mode_length,
-        "alleles_lengths": alleles_lengths
-    }
+    # Conserved alleles
+    # get ratio between number of alleles outside conserved threshold
+    alleles_within_threshold = 0
+    for size in alleles_lengths:
+        if not float(size) > mode_length * (1 + threshold) and not float(
+            size
+        ) < mode_length * (1 - threshold):
+            alleles_within_threshold += 1
+
+    ratio = alleles_within_threshold / float(nr_alleles)
+
+    if not conserved and (
+        ratio >= 1 or len(alleles_lengths) - alleles_within_threshold < 2
+    ):
+        if nr_alleles == 1:
+            genes_info = {
+                "gene": gene,
+                "nr_alleles": nr_alleles,
+                "min_length": min_length,
+                "max_length": max_length,
+                "median_length": median_length,
+                "mean_length": mean_length,
+                "mode_length": mode_length,
+                "alleles_lengths": alleles_lengths,
+                "conserved": True,
+                "one_allele_only": True,
+            }
+        else:
+            genes_info = {
+                "gene": gene,
+                "nr_alleles": nr_alleles,
+                "min_length": min_length,
+                "max_length": max_length,
+                "median_length": median_length,
+                "mean_length": mean_length,
+                "mode_length": mode_length,
+                "alleles_lengths": alleles_lengths,
+                "conserved": True,
+                "one_allele_only": False,
+            }
+    elif conserved and ratio >= 1:
+        if nr_alleles == 1:
+            genes_info = {
+                "gene": gene,
+                "nr_alleles": nr_alleles,
+                "min_length": min_length,
+                "max_length": max_length,
+                "median_length": median_length,
+                "mean_length": mean_length,
+                "mode_length": mode_length,
+                "alleles_lengths": alleles_lengths,
+                "conserved": True,
+                "one_allele_only": True,
+            }
+        else:
+            genes_info = {
+                "gene": gene,
+                "nr_alleles": nr_alleles,
+                "min_length": min_length,
+                "max_length": max_length,
+                "median_length": median_length,
+                "mean_length": mean_length,
+                "mode_length": mode_length,
+                "alleles_lengths": alleles_lengths,
+                "conserved": True,
+                "one_allele_only": False,
+            }
+    else:
+        genes_info = {
+            "gene": gene,
+            "nr_alleles": nr_alleles,
+            "min_length": min_length,
+            "max_length": max_length,
+            "median_length": median_length,
+            "mean_length": mean_length,
+            "mode_length": mode_length,
+            "alleles_lengths": alleles_lengths,
+            "conserved": False,
+            "one_allele_only": False,
+        }
 
     return genes_info
 
 
 def gene_seqs_info_individual_schema_evaluator(gene):
-    """ Determines the total number of alleles and 
-        the mean length of allele sequences for each locus.
-
-        Parameters
-        ----------
-        gene : string
-            a string with names/paths for FASTA files.
-
-        Returns
-        -------
-        genes_info : list
-            a list with a sublist for each input
-            gene file. Each sublist contains a gene identifier, the
-            total number of alleles for that gene and the mean length
-            of allele sequences for that gene.
+    """Determines the total number of alleles and
+    the mean length of allele sequences for each locus.
+
+    Parameters
+    ----------
+    gene : string
+        a string with names/paths for FASTA files.
+
+    Returns
+    -------
+    genes_info : list
+        a list with a sublist for each input
+        gene file. Each sublist contains a gene identifier, the
+        total number of alleles for that gene and the mean length
+        of allele sequences for that gene.
     """
 
     seq_generator = SeqIO.parse(gene, "fasta")
@@ -172,20 +242,20 @@ def gene_seqs_info_individual_schema_evaluator(gene):
 
 
 def gene_seqs_info_boxplot(schema_dir):
-    """ Determines boxplot statistics.
-
-        Parameters
-        -----------
-        schema_dir : list 
-            a list with names/paths for FASTA files.
-
-        Returns
-        -------
-        json_to_file : dict
-            a dict with a subdict for each input
-            gene file. Each subdict contains information about each
-            gene such as, mode of the allele sizes, number of alleles
-            and summary statistics (min, max, median, mode and quartiles).
+    """Determines boxplot statistics.
+
+    Parameters
+    -----------
+    schema_dir : list
+        a list with names/paths for FASTA files.
+
+    Returns
+    -------
+    json_to_file : dict
+        a dict with a subdict for each input
+        gene file. Each subdict contains information about each
+        gene such as, mode of the allele sizes, number of alleles
+        and summary statistics (min, max, median, mode and quartiles).
     """
 
     schema_files = [
@@ -232,17 +302,19 @@ def gene_seqs_info_boxplot(schema_dir):
             q1 = alleles_lengths[0]
             q3 = alleles_lengths[0]
 
-        json_to_file["boxplot_data"].append({
-            "locus_name": locus_name,
-            "nr_alleles": nr_alleles,
-            "max": loci_max,
-            "min": loci_min,
-            "sd": locus_sd,
-            "median": median_length,
-            "mean": mean_length,
-            "q1": q1,
-            "q3": q3
-        })
+        json_to_file["boxplot_data"].append(
+            {
+                "locus_name": locus_name,
+                "nr_alleles": nr_alleles,
+                "max": loci_max,
+                "min": loci_min,
+                "sd": locus_sd,
+                "median": median_length,
+                "mean": mean_length,
+                "q1": q1,
+                "q3": q3,
+            }
+        )
 
     # Sort data by locus_name
     for k in json_to_file:
@@ -253,23 +325,23 @@ def gene_seqs_info_boxplot(schema_dir):
 
 # Functions that obtain the data for panel E
 def create_cds_df(schema_file, minimum_length, translation_table):
-    """ Detects alleles that aren't CDSs.
-
-        Parameters
-        ----------
-        schema_dir : list
-            a list with names/paths for FASTA files.
-        minimum_length: int
-            Minimum sequence length accepted in nt.
-        translation_table: int
-            the translation table to be used.
-
-        Returns
-        -------
-        res_sorted : dict
-            a dict obtained from a dataframe containing the
-            number of non-CDSs detected. It will be used to
-            populate a table in the report.
+    """Detects alleles that aren't CDSs.
+
+    Parameters
+    ----------
+    schema_dir : list
+        a list with names/paths for FASTA files.
+    minimum_length: int
+        Minimum sequence length accepted in nt.
+    translation_table: int
+        the translation table to be used.
+
+    Returns
+    -------
+    res_sorted : dict
+        a dict obtained from a dataframe containing the
+        number of non-CDSs detected. It will be used to
+        populate a table in the report.
     """
     res = {"stats": []}
 
@@ -293,8 +365,7 @@ def create_cds_df(schema_file, minimum_length, translation_table):
         else:
             allele_ids.append(int(allele.id))
 
-        ola = aux.translate_dna(
-            str(allele.seq), translation_table, minimum_length)
+        ola = aux.translate_dna(str(allele.seq), translation_table, minimum_length)
 
         if "sequence length is not a multiple of 3" in ola:
             notMultiple += 1
@@ -317,10 +388,8 @@ def create_cds_df(schema_file, minimum_length, translation_table):
     gene_res["Alleles not multiple of 3"] = notMultiple
     gene_res["Alleles w/ >1 stop codons"] = stopC
     gene_res["Alleles wo/ Start/Stop Codon"] = notStart
-    gene_res["Alleles shorter than {0} nucleotides".format(
-        minimum_length)] = shorter
-    gene_res["Total Invalid Alleles"] = notMultiple + \
-        stopC + notStart + shorter
+    gene_res["Alleles shorter than {0} nucleotides".format(minimum_length)] = shorter
+    gene_res["Total Invalid Alleles"] = notMultiple + stopC + notStart + shorter
     gene_res["Missing Allele IDs"] = missing_allele_ids
     gene_res["CDS"] = CDS
 
@@ -331,35 +400,43 @@ def create_cds_df(schema_file, minimum_length, translation_table):
     return res_sorted
 
 
-def create_pre_computed_data(schema_dir, translation_table, output_path,
-                             cpu_to_use, minimum_length, chewie_schema=False,
-                             show_progress=False):
-    """ Creates a file with pre-computed data for 
-        the Schema Evaluator plotly charts.
-
-        Parameters
-        ----------
-        schema_dir : list 
-            a list with names/paths for FASTA files.
-        translation_table: int
-            the translation table to be used.
-        output_path : str
-            the directory where the output files will
-            be saved.
-        cpu_to_use: int
-            number of CPU cores to use for multiprocessing.
-        minimum_length: int
-            minimum sequence length accepted in nt.
-        chewie_schema: bool
-            identifies the schema as a chewBBACA created schema.
-        show_progress: bool
-            shows a progress bar for multiprocessing.
-
-        Returns
-        -------
-        out_path : str
-            the directory where the output files will
-            be saved.
+def create_pre_computed_data(
+    schema_dir,
+    translation_table,
+    output_path,
+    cpu_to_use,
+    minimum_length,
+    threshold,
+    conserved,
+    chewie_schema=False,
+    show_progress=False,
+):
+    """Creates a file with pre-computed data for
+    the Schema Evaluator plotly charts.
+
+    Parameters
+    ----------
+    schema_dir : list
+        a list with names/paths for FASTA files.
+    translation_table: int
+        the translation table to be used.
+    output_path : str
+        the directory where the output files will
+        be saved.
+    cpu_to_use: int
+        number of CPU cores to use for multiprocessing.
+    minimum_length: int
+        minimum sequence length accepted in nt.
+    chewie_schema: bool
+        identifies the schema as a chewBBACA created schema.
+    show_progress: bool
+        shows a progress bar for multiprocessing.
+
+    Returns
+    -------
+    out_path : str
+        the directory where the output files will
+        be saved.
 
     """
 
@@ -393,8 +470,12 @@ def create_pre_computed_data(schema_dir, translation_table, output_path,
 
         pool_main = multiprocessing.Pool(processes=cpu_to_use)
 
-        rawr_main = pool_main.map_async(
-            gene_seqs_info_schema_evaluator, schema_files, chunksize=1, callback=results.extend)
+        rawr_main = pool_main.starmap_async(
+            gene_seqs_info_schema_evaluator,
+            zip(schema_files, itertools.repeat(threshold), itertools.repeat(conserved)),
+            chunksize=1,
+            callback=results.extend,
+        )
 
         if show_progress is True:
             completed = False
@@ -410,8 +491,12 @@ def create_pre_computed_data(schema_dir, translation_table, output_path,
 
         pool_ind = multiprocessing.Pool(processes=cpu_to_use)
 
-        rawr_ind = pool_ind.map_async(gene_seqs_info_individual_schema_evaluator,
-                                      schema_files, chunksize=1, callback=results_individual.extend)
+        rawr_ind = pool_ind.map_async(
+            gene_seqs_info_individual_schema_evaluator,
+            schema_files,
+            chunksize=1,
+            callback=results_individual.extend,
+        )
 
         if show_progress is True:
             completed = False
@@ -444,6 +529,8 @@ def create_pre_computed_data(schema_dir, translation_table, output_path,
 
         total_number_of_loci = 0
         total_number_of_alleles = 0
+        not_conserved = []
+        one_allele_only = []
 
         for res in results:
 
@@ -453,14 +540,18 @@ def create_pre_computed_data(schema_dir, translation_table, output_path,
 
             # Get the mode for each locus.
             pre_computed_data["mode"].append(
-                {"locus_name": os.path.split(
-                    res["gene"])[1], "alleles_mode": res["mode_length"]}
+                {
+                    "locus_name": os.path.split(res["gene"])[1],
+                    "alleles_mode": res["mode_length"],
+                }
             )
 
             # Get the number of alleles for each locus.
             pre_computed_data["total_alleles"].append(
-                {"locus_name": os.path.split(res["gene"])[
-                    1], "nr_alleles": res["nr_alleles"]}
+                {
+                    "locus_name": os.path.split(res["gene"])[1],
+                    "nr_alleles": res["nr_alleles"],
+                }
             )
 
             # Get summary statistics (min, max, mean, mode and median) for each locus.
@@ -477,10 +568,29 @@ def create_pre_computed_data(schema_dir, translation_table, output_path,
                 }
             )
 
+            # get the not conserved loci
+            if not res["conserved"]:
+                not_conserved.append({"gene": os.path.split(res["gene"])[1]})
+
+            # get loci with only 1 allele
+            if res["one_allele_only"]:
+                one_allele_only.append({"gene": os.path.split(res["gene"])[1]})
+
+        if len(not_conserved) == 0:
+            not_conserved = "undefined"
+
+        if len(one_allele_only) == 0:
+            one_allele_only = "undefined"
+
+        not_conserved_message = '"Locus size is considered not conserved if >1 allele are outside the mode +/- {0} size. Loci with only 1 allele outside the threshold are considered conserved."'.format(
+            threshold
+        )
+
         # sort pre_computed_data by locus_name
         for k in pre_computed_data:
             pre_computed_data[k] = sorted(
-                pre_computed_data[k], key=itemgetter("locus_name"))
+                pre_computed_data[k], key=itemgetter("locus_name")
+            )
 
         # Get data for panel D
         print("\nGenerating data to populate a boxplot...\n")
@@ -495,10 +605,14 @@ def create_pre_computed_data(schema_dir, translation_table, output_path,
 
         rawr_cds = pool_cds.starmap_async(
             create_cds_df,
-            zip(schema_files, itertools.repeat(minimum_length),
-                itertools.repeat(translation_table)),
+            zip(
+                schema_files,
+                itertools.repeat(minimum_length),
+                itertools.repeat(translation_table),
+            ),
             chunksize=1,
-            callback=cds_multi.extend)
+            callback=cds_multi.extend,
+        )
 
         if show_progress is True:
             completed = False
@@ -511,50 +625,63 @@ def create_pre_computed_data(schema_dir, translation_table, output_path,
         flat_multi_out = aux.flatten_list(cds_multi)
 
         # sort data for the CDS table
-        data_ind = sorted(flat_multi_out, key=itemgetter("Alleles not multiple of 3",
-                                                         "Alleles w/ >1 stop codons",
-                                                         "Alleles wo/ Start/Stop Codon"),
-                          reverse=True)
+        data_ind = sorted(
+            flat_multi_out,
+            key=itemgetter(
+                "Alleles not multiple of 3",
+                "Alleles w/ >1 stop codons",
+                "Alleles wo/ Start/Stop Codon",
+            ),
+            reverse=True,
+        )
 
         # sort data for CDS scatterplot
-        hist_data_sort = sorted(
-            flat_multi_out, key=itemgetter("Number of alleles"))
+        hist_data_sort = sorted(flat_multi_out, key=itemgetter("Number of alleles"))
 
         # get total invalid alleles
         total_invalid_alleles = 0
 
         for k in data_ind:
-            total_invalid_alleles += k["Alleles not multiple of 3"] + k["Alleles w/ >1 stop codons"] + \
-                k["Alleles wo/ Start/Stop Codon"] + \
-                k["Alleles shorter than {0} nucleotides".format(
-                    minimum_length)]
+            total_invalid_alleles += (
+                k["Alleles not multiple of 3"]
+                + k["Alleles w/ >1 stop codons"]
+                + k["Alleles wo/ Start/Stop Codon"]
+                + k["Alleles shorter than {0} nucleotides".format(minimum_length)]
+            )
 
         # calculate total invalid alleles per class
-        total_alleles_mult3 = sum(
-            k1["Alleles not multiple of 3"] for k1 in data_ind)
-        total_alleles_stopC = sum(
-            k2["Alleles w/ >1 stop codons"] for k2 in data_ind)
+        total_alleles_mult3 = sum(k1["Alleles not multiple of 3"] for k1 in data_ind)
+        total_alleles_stopC = sum(k2["Alleles w/ >1 stop codons"] for k2 in data_ind)
         total_alleles_notStart = sum(
-            k3["Alleles wo/ Start/Stop Codon"] for k3 in data_ind)
-        total_alleles_shorter = sum(k3["Alleles shorter than {0} nucleotides".format(
-            minimum_length)] for k3 in data_ind)
+            k3["Alleles wo/ Start/Stop Codon"] for k3 in data_ind
+        )
+        total_alleles_shorter = sum(
+            k3["Alleles shorter than {0} nucleotides".format(minimum_length)]
+            for k3 in data_ind
+        )
 
         # organize data for CDS scatterplot
         hist_data = {}
 
         hist_data["genes"] = [g["Gene"] for g in hist_data_sort]
         hist_data["total_alleles"] = [
-            float(na["Number of alleles"]) for na in hist_data_sort]
+            float(na["Number of alleles"]) for na in hist_data_sort
+        ]
         hist_data["mult3"] = [
-            float(mult3["Alleles not multiple of 3"]) for mult3 in hist_data_sort]
+            float(mult3["Alleles not multiple of 3"]) for mult3 in hist_data_sort
+        ]
         hist_data["stopC"] = [
-            float(stopC["Alleles w/ >1 stop codons"]) for stopC in hist_data_sort]
+            float(stopC["Alleles w/ >1 stop codons"]) for stopC in hist_data_sort
+        ]
         hist_data["notStart"] = [
-            float(notStart["Alleles wo/ Start/Stop Codon"]) for notStart in hist_data_sort]
+            float(notStart["Alleles wo/ Start/Stop Codon"])
+            for notStart in hist_data_sort
+        ]
         hist_data["shorter"] = [
-            float(s["Alleles shorter than {0} nucleotides".format(minimum_length)]) for s in hist_data_sort]
-        hist_data["CDS_Alleles"] = [float(cds["CDS"])
-                                    for cds in hist_data_sort]
+            float(s["Alleles shorter than {0} nucleotides".format(minimum_length)])
+            for s in hist_data_sort
+        ]
+        hist_data["CDS_Alleles"] = [float(cds["CDS"]) for cds in hist_data_sort]
 
         # check if it is a chewBBACA schema
         if chewie_schema:
@@ -582,13 +709,20 @@ def create_pre_computed_data(schema_dir, translation_table, output_path,
             ]
 
             # check if config parameters are the same as the user input
-            if minimum_length_config == minimum_length and \
-                    translation_table_config == translation_table:
+            if (
+                minimum_length_config == minimum_length
+                and translation_table_config == translation_table
+            ):
                 message = '"Schema created and evaluated with minimum length of {0} and translation table {1}."'.format(
-                    minimum_length, translation_table)
+                    minimum_length, translation_table
+                )
             else:
                 message = '"Schema created with minimum length of {0} and translation table {1} and evaluated with minimum length of {2} and translation table {3}."'.format(
-                    minimum_length_config, translation_table_config, minimum_length, translation_table)
+                    minimum_length_config,
+                    translation_table_config,
+                    minimum_length,
+                    translation_table,
+                )
         else:
             # build the total data dictionary
             total_data = [
@@ -603,7 +737,8 @@ def create_pre_computed_data(schema_dir, translation_table, output_path,
                 }
             ]
             message = '"Schema evaluated with minimum length of {0} and translation table {1}."'.format(
-                minimum_length, translation_table)
+                minimum_length, translation_table
+            )
 
         # Write HTML file
         print("\nWriting main report HTML file...\n")
@@ -624,7 +759,10 @@ def create_pre_computed_data(schema_dir, translation_table, output_path,
                 <script> const _cdsDf = {3} </script>
                 <script> const _cdsScatter = {4} </script>
                 <script> const _totalData = {5} </script>
-                <script> const _message = {6} </script>
+                <script> const _notConserved = {6} </script>
+                <script> const _oneAlleleOnly = {7} </script>
+                <script> const _message = {8} </script>
+                <script> const _notConservedMessage = {9} </script>
                 <script src="./main.js"></script>
             </body>
         </html>
@@ -635,42 +773,40 @@ def create_pre_computed_data(schema_dir, translation_table, output_path,
             json.dumps(data_ind, sort_keys=True),
             json.dumps(hist_data, sort_keys=True),
             json.dumps(total_data),
+            json.dumps(not_conserved),
+            json.dumps(one_allele_only),
             message,
+            not_conserved_message,
         )
 
-        html_file_path = os.path.join(
-            out_path, "schema_evaluator_report.html"
-        )
+        html_file_path = os.path.join(out_path, "schema_evaluator_report.html")
 
         with open(html_file_path, "w") as html_fh:
             html_fh.write(html_template_global)
 
         # Write the file to the pre_computed_data directory.
-        pre_computed_data_path = os.path.join(
-            out_path, "pre_computed_data.json")
+        pre_computed_data_path = os.path.join(out_path, "pre_computed_data.json")
         with open(pre_computed_data_path, "w") as out:
             json.dump(pre_computed_data, out)
 
         # Write the locus individual file to the pre_computed_data directory.
         pre_computed_data_ind_path = os.path.join(
-            out_path, "pre_computed_data_ind.json")
+            out_path, "pre_computed_data_ind.json"
+        )
         with open(pre_computed_data_ind_path, "w") as out_ind:
             json.dump(pre_computed_data_individual, out_ind, sort_keys=True)
 
         # Write the boxplot pre_computed_data
         pre_computed_data_boxplot_path = os.path.join(
-            out_path, "pre_computed_data_boxplot.json")
+            out_path, "pre_computed_data_boxplot.json"
+        )
         with open(pre_computed_data_boxplot_path, "w") as box_outfile:
             json.dump(boxplot_data, box_outfile)
 
         # Write the CDS Analysis (Panel E) data files
-        cds_df_path = os.path.join(
-            out_path, "cds_df.json"
-        )
+        cds_df_path = os.path.join(out_path, "cds_df.json")
 
-        cds_scatter_path = os.path.join(
-            out_path, "cds_scatter.json"
-        )
+        cds_scatter_path = os.path.join(out_path, "cds_scatter.json")
 
         with open(cds_df_path, "w") as cds_df_json:
             json.dump(data_ind, cds_df_json)
@@ -685,58 +821,59 @@ def create_pre_computed_data(schema_dir, translation_table, output_path,
 
 
 def make_protein_record(nuc_record, record_id):
-    """ Returns a new SeqRecord with the 
-        translated sequence (default table).
-
-        Parameters
-        ----------
-        nuc_record : str
-            protein sequence.
-        record_id: str
-            record id.
-
-        Returns
-        -------
-        SeqRecord
-            a SeqRecord object with the 
-            translated record.
+    """Returns a new SeqRecord with the
+    translated sequence (default table).
+
+    Parameters
+    ----------
+    nuc_record : str
+        protein sequence.
+    record_id: str
+        record id.
+
+    Returns
+    -------
+    SeqRecord
+        a SeqRecord object with the
+        translated record.
 
     """
-    return SeqRecord(
-        seq=nuc_record,
-        id=record_id,
-        description=""
-    )
-
-
-def create_protein_files(schema_dir, output_path, cpu_to_use,
-                         minimum_length, translation_table,
-                         show_progress=False):
-    """ Generates FASTA files with the protein
-        sequence of the schema loci.
-
-        Parameters
-        ----------
-        schema_dir : list 
-            a list with names/paths for FASTA files.
-        output_path : str
-            the directory where the output files will
-            be saved.
-        cpu_to_use: int
-            number of CPU cores to use for 
-            multiprocessing.
-        minimum_length: int
-            minimum sequence length accepted in nt.
-        translation_table: int
-            the translation table to be used.
-        show_progress: bool
-            shows a progress bar for multiprocessing.
-
-        Returns
-        -------
-        out_path : str
-            the directory where the output files will
-            be saved.
+    return SeqRecord(seq=nuc_record, id=record_id, description="")
+
+
+def create_protein_files(
+    schema_dir,
+    output_path,
+    cpu_to_use,
+    minimum_length,
+    translation_table,
+    show_progress=False,
+):
+    """Generates FASTA files with the protein
+    sequence of the schema loci.
+
+    Parameters
+    ----------
+    schema_dir : list
+        a list with names/paths for FASTA files.
+    output_path : str
+        the directory where the output files will
+        be saved.
+    cpu_to_use: int
+        number of CPU cores to use for
+        multiprocessing.
+    minimum_length: int
+        minimum sequence length accepted in nt.
+    translation_table: int
+        the translation table to be used.
+    show_progress: bool
+        shows a progress bar for multiprocessing.
+
+    Returns
+    -------
+    out_path : str
+        the directory where the output files will
+        be saved.
     """
 
     out_path = os.path.join(output_path, "prot_files")
@@ -760,9 +897,14 @@ def create_protein_files(schema_dir, output_path, cpu_to_use,
 
     rawr_prot = pool_prot.starmap_async(
         generate_protein_files,
-        zip(schema_files, itertools.repeat(output_path), itertools.repeat(
-            minimum_length), itertools.repeat(translation_table)),
-        chunksize=1)
+        zip(
+            schema_files,
+            itertools.repeat(output_path),
+            itertools.repeat(minimum_length),
+            itertools.repeat(translation_table),
+        ),
+        chunksize=1,
+    )
 
     if show_progress is True:
         completed = False
@@ -775,24 +917,24 @@ def create_protein_files(schema_dir, output_path, cpu_to_use,
 
 
 def generate_protein_files(fasta, output_path, minimum_length, translation_table):
-    """ Generates FASTA files with the protein
-        sequence of the schema loci.
-
-        Parameters
-        ----------
-        schema_dir : list 
-            a list with names/paths for FASTA files.
-        output_path : str
-            the directory where the output files will
-            be saved.
-        minimum_length: int
-            minimum sequence length accepted in nt.
-        translation_table: int
-            the translation table to be used.
-
-        Returns
-        -------
-        None
+    """Generates FASTA files with the protein
+    sequence of the schema loci.
+
+    Parameters
+    ----------
+    schema_dir : list
+        a list with names/paths for FASTA files.
+    output_path : str
+        the directory where the output files will
+        be saved.
+    minimum_length: int
+        minimum sequence length accepted in nt.
+    translation_table: int
+        the translation table to be used.
+
+    Returns
+    -------
+    None
     """
 
     out_path = os.path.join(output_path, "prot_files")
@@ -810,22 +952,17 @@ def generate_protein_files(fasta, output_path, minimum_length, translation_table
     exceptions = []
 
     for allele in SeqIO.parse(fasta, "fasta"):
-        prot = aux.translate_dna(
-            str(allele.seq), translation_table, minimum_length)
+        prot = aux.translate_dna(str(allele.seq), translation_table, minimum_length)
 
         if isinstance(prot, list):
-            tets = make_protein_record(
-                prot[0][0], allele.id.split("_")[-1])
+            tets = make_protein_record(prot[0][0], allele.id.split("_")[-1])
             proteins.append(tets)
         elif isinstance(prot, str):
             if "sense" in prot:
                 prot2 = prot.split(",")[0]
             else:
                 prot2 = prot
-            exc = {
-                "allele": allele.id,
-                "exception": prot2
-            }
+            exc = {"allele": allele.id, "exception": prot2}
             exceptions.append(exc)
 
     SeqIO.write(proteins, out_file, "fasta")
@@ -835,23 +972,29 @@ def generate_protein_files(fasta, output_path, minimum_length, translation_table
 
 
 def call_mafft(genefile):
-    """ Calls MAFFT to generate an alignment.
-
-        Parameters
-        ----------
-        genefile : str 
-            a string with the name/path for 
-            the FASTA file.
-
-        Returns
-        -------
-        bool
-            True if sucessful, False otherwise.
+    """Calls MAFFT to generate an alignment.
+
+    Parameters
+    ----------
+    genefile : str
+        a string with the name/path for
+        the FASTA file.
+
+    Returns
+    -------
+    bool
+        True if sucessful, False otherwise.
     """
 
     try:
         mafft_cline = MafftCommandline(
-            input=genefile, adjustdirection=True, treeout=True, thread=1, retree=1, maxiterate=0)
+            input=genefile,
+            adjustdirection=True,
+            treeout=True,
+            thread=1,
+            retree=1,
+            maxiterate=0,
+        )
         stdout, stderr = mafft_cline()
         path_to_save = genefile.replace("_prot.fasta", "_aligned.fasta")
         with open(path_to_save, "w") as handle:
@@ -864,23 +1007,23 @@ def call_mafft(genefile):
 
 
 def run_mafft(protein_file_path, cpu_to_use, show_progress=False):
-    """ Run MAFFT with multprocessing and saves the output.
-
-        Parameters
-        ----------
-        protein_file_path : str 
-            a string with the name/path for 
-            the protein FASTA file.
-        cpu_to_use : int
-            the number of cpu to use for
-            multiprocessing.
-        show_progress : bool
-            If a progress bar should be
-            displayed.
-
-        Returns
-        -------
-        None.
+    """Run MAFFT with multprocessing and saves the output.
+
+    Parameters
+    ----------
+    protein_file_path : str
+        a string with the name/path for
+        the protein FASTA file.
+    cpu_to_use : int
+        the number of cpu to use for
+        multiprocessing.
+    show_progress : bool
+        If a progress bar should be
+        displayed.
+
+    Returns
+    -------
+    None.
     """
 
     print("\nRunning MAFFT...\n")
@@ -903,27 +1046,29 @@ def run_mafft(protein_file_path, cpu_to_use, show_progress=False):
     rawr.wait()
 
 
-def write_individual_html(input_files, pre_computed_data_path, protein_file_path, output_path):
-    """ Writes HTML files for each locus.
-
-        Parameters
-        ----------
-        input_files : str
-            a string with the name/path for 
-            the schema files.
-        pre_computed_data_path : str
-            a string with the name/path for 
-            the pre-computed data files.
-        protein_file_path : str 
-            a string with the name/path for 
-            the protein FASTA file.
-        output_path : str
-            the directory where the output 
-            files will be saved.
-
-        Returns
-        -------
-        None.
+def write_individual_html(
+    input_files, pre_computed_data_path, protein_file_path, output_path
+):
+    """Writes HTML files for each locus.
+
+    Parameters
+    ----------
+    input_files : str
+        a string with the name/path for
+        the schema files.
+    pre_computed_data_path : str
+        a string with the name/path for
+        the pre-computed data files.
+    protein_file_path : str
+        a string with the name/path for
+        the protein FASTA file.
+    output_path : str
+        the directory where the output
+        files will be saved.
+
+    Returns
+    -------
+    None.
     """
 
     print("\nWriting individual report HTML files...\n")
@@ -934,20 +1079,19 @@ def write_individual_html(input_files, pre_computed_data_path, protein_file_path
         os.mkdir(out_path)
 
     schema_files = [
-        os.path.splitext(f)[0]
-        for f in os.listdir(input_files)
-        if ".fasta" in f
+        os.path.splitext(f)[0] for f in os.listdir(input_files) if ".fasta" in f
     ]
 
     pre_computed_data_file = os.path.join(
-        pre_computed_data_path, "pre_computed_data_ind.json")
+        pre_computed_data_path, "pre_computed_data_ind.json"
+    )
 
     cds_df_path = os.path.join(
-        output_path, "SchemaEvaluator_pre_computed_data",  "cds_df.json"
+        output_path, "SchemaEvaluator_pre_computed_data", "cds_df.json"
     )
 
     exceptions_path = os.path.join(
-        output_path, "SchemaEvaluator_pre_computed_data",  "prot_files", "exceptions"
+        output_path, "SchemaEvaluator_pre_computed_data", "prot_files", "exceptions"
     )
 
     # Read the pre_computed data file
@@ -962,21 +1106,23 @@ def write_individual_html(input_files, pre_computed_data_path, protein_file_path
         sf_fasta = "{0}.fasta".format(sf)
 
         # Get the precomputed data for tables and plots
-        pre_computed_data_individual_sf = {"locus_name": str(
-            sf), "data": pre_computed_data_individual[sf_fasta]}
+        pre_computed_data_individual_sf = {
+            "locus_name": str(sf),
+            "data": pre_computed_data_individual[sf_fasta],
+        }
 
         # Get CDS data for table
         cds_ind_data = [e for e in cds_json_data if sf_fasta == e["Gene"]][0]
 
         # Read the exceptions file
         exceptions_filename_path = os.path.join(
-            exceptions_path, "{0}_exceptions.json".format(sf))
+            exceptions_path, "{0}_exceptions.json".format(sf)
+        )
         with open(exceptions_filename_path, "r") as ef:
             exc_data = json.load(ef)
 
         # get the msa data
-        msa_file_path = os.path.join(
-            protein_file_path, "{0}_aligned.fasta".format(sf))
+        msa_file_path = os.path.join(protein_file_path, "{0}_aligned.fasta".format(sf))
 
         msa_data = {"sequences": []}
 
@@ -987,13 +1133,15 @@ def write_individual_html(input_files, pre_computed_data_path, protein_file_path
         if len(allele_ids) > 1:
             for allele in SeqIO.parse(msa_file_path, "fasta"):
                 msa_data["sequences"].append(
-                    {"name": allele.id, "sequence": str(allele.seq)})
+                    {"name": allele.id, "sequence": str(allele.seq)}
+                )
         else:
             msa_data = "undefined"
 
         # get the phylocanvas data
         phylo_file_path = os.path.join(
-            protein_file_path, "{0}_prot.fasta.tree".format(sf))
+            protein_file_path, "{0}_prot.fasta.tree".format(sf)
+        )
         if os.path.exists(phylo_file_path):
             with open(phylo_file_path, "r") as phylo:
                 phylo_data = phylo.read()
@@ -1026,12 +1174,10 @@ def write_individual_html(input_files, pre_computed_data_path, protein_file_path
             json.dumps(exc_data, sort_keys=True),
             json.dumps(cds_ind_data, sort_keys=True),
             json.dumps(msa_data, sort_keys=True),
-            json.dumps(phylo_data_json, sort_keys=True)
+            json.dumps(phylo_data_json, sort_keys=True),
         )
 
-        html_file_path = os.path.join(
-            out_path, "{0}_individual_report.html".format(sf)
-        )
+        html_file_path = os.path.join(out_path, "{0}_individual_report.html".format(sf))
 
         with open(html_file_path, "w") as html_fh:
             html_fh.write(html_template_individual)
diff --git a/CHEWBBACA/chewBBACA.py b/CHEWBBACA/chewBBACA.py
index 0a8b5d8a..52211a77 100755
--- a/CHEWBBACA/chewBBACA.py
+++ b/CHEWBBACA/chewBBACA.py
@@ -636,11 +636,23 @@ def msg(name=None):
                         help='Genetic code used to translate coding '
                              'sequences.')
 
+    parser.add_argument('--th', '--threshold', type=float, required=False,
+                        default=0.05, dest='threshold',
+                        help='Allele size variation threshold. If an allele has '
+                             'a size within the interval of the locus mode -/+ '
+                             'the threshold, it will be considered a conserved '
+                             'allele.')
+
     parser.add_argument('--ml','--minimum-length', type=pv.minimum_sequence_length_type,
                         required=False, default=201, dest='minimum_length',
                         help='Minimum sequence length accepted for a '
                         'coding sequence to be included in the schema.')
 
+    parser.add_argument('--cons', '--conserved', action='store_true',
+                        required=False, dest='conserved',
+                        help='If all alleles must be within the threshold for the '
+                                'locus to be considered as having low length variability.')
+
     parser.add_argument('--cpu', type=int, required=False,
                         default=1, dest='cpu_cores',
                         help='Number of CPU cores to use to run the process.')
@@ -664,9 +676,11 @@ def msg(name=None):
     input_files = args.input_files
     output_file = args.output_file
     translation_table = args.translation_table
+    threshold = args.threshold
+    minimum_length = args.minimum_length
+    conserved = args.conserved
     cpu_cores = args.cpu_cores
     light_mode = args.light_mode
-    minimum_length = args.minimum_length
     no_cleanup = args.no_cleanup
 
     cpu_to_use = aux.verify_cpu_usage(cpu_cores)
@@ -686,11 +700,26 @@ def msg(name=None):
 
         # create pre-computed data
         pre_computed_data_path = schema_evaluator.create_pre_computed_data(
-            input_files, translation_table, output_file, cpu_to_use, minimum_length, chewie_schema=True, show_progress=True)
+            input_files,
+            translation_table, 
+            output_file, 
+            cpu_to_use, 
+            minimum_length,
+            threshold,
+            conserved,
+            chewie_schema=True, 
+            show_progress=True)
     else:
         # create pre-computed data
         pre_computed_data_path = schema_evaluator.create_pre_computed_data(
-            input_files, translation_table, output_file, cpu_to_use, minimum_length, show_progress=True)
+            input_files, 
+            translation_table, 
+            output_file, 
+            cpu_to_use, 
+            minimum_length, 
+            threshold,
+            conserved,
+            show_progress=True)
 
     schema_evaluator_main_path = os.path.join(
         output_file, "SchemaEvaluator_pre_computed_data"
@@ -712,7 +741,12 @@ def msg(name=None):
 
         # Translate loci
         protein_file_path = schema_evaluator.create_protein_files(
-            input_files, pre_computed_data_path, cpu_to_use, minimum_length, translation_table, show_progress=True)
+            input_files, 
+            pre_computed_data_path, 
+            cpu_to_use, 
+            minimum_length, 
+            translation_table, 
+            show_progress=True)
 
         # Run MAFFT
         schema_evaluator.run_mafft(


Test patch:
diff --git a/CHEWBBACA/tests/data/schemaEvaluatorData/expected_results/SchemaEvaluator_pre_computed_data/main.js b/CHEWBBACA/tests/data/schemaEvaluatorData/expected_results/SchemaEvaluator_pre_computed_data/main.js
index 76f5def8..23a329a1 100644
--- a/CHEWBBACA/tests/data/schemaEvaluatorData/expected_results/SchemaEvaluator_pre_computed_data/main.js
+++ b/CHEWBBACA/tests/data/schemaEvaluatorData/expected_results/SchemaEvaluator_pre_computed_data/main.js
@@ -6684,7 +6684,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
 
 "use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => /* binding */ Header\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react_markdown__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-markdown */ \"./node_modules/react-markdown/lib/react-markdown.js\");\n/* harmony import */ var react_markdown__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_markdown__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var remark_gfm__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! remark-gfm */ \"./node_modules/remark-gfm/index.js\");\n/* harmony import */ var remark_gfm__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(remark_gfm__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _Header_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Header.css */ \"./src/components/Header.css\");\n/* harmony import */ var _material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @material-ui/core/Accordion */ \"./node_modules/@material-ui/core/esm/Accordion/Accordion.js\");\n/* harmony import */ var _material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/core/AccordionDetails */ \"./node_modules/@material-ui/core/esm/AccordionDetails/AccordionDetails.js\");\n;\n\n\n // Material-UI ExpansionPanel components\n\n\n\nfunction Header() {\n  var markdown = \"\\n  # Schema Evaluator\\n\\n  Provides summary charts that allows users to explore:\\n  - The diversity (number of alleles) at each locus (**Panel A**);\\n  - The variation of allele mode sizes per locus (**Panel B**);\\n  - Summary statistics (minimum allele size in blue, minimum allele size in orange and median allele size in green) for each locus (**Panel C**);\\n  - The loci size distribution (**Panel D**);\\n  - The presence of alleles that are not CDSs (when evaluating schemas called by other algorithms) (**Panel E**).\\n\\n  Users are able to select an **individual locus** to be analysed, by clicking on:\\n  - each **point (locus)** of the **Locus Statistics** and **Locus Size Variation charts**;\\n  - the **locus name** on the **Locus** column of the **CDS Analysis** table.\\n\\n  By selecting a locus the following will be displayed:\\n  - 2 charts (histogram and scatterplot) containing an **analysis of the allele sizes**;\\n  - a table with **summary statistics** of the alleles;\\n  - a **Neighbor Joining tree** built by clustal based on the mafft alignment;\\n  - a **multiple sequence alignment** of the alleles produced by mafft.\\n  \";\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_4__.default, {\n    defaultExpanded: true\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_5__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n    className: _Header_css__WEBPACK_IMPORTED_MODULE_3__.default.mainPaper,\n    style: {\n      width: \"100%\",\n      height: \"100%\"\n    }\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement((react_markdown__WEBPACK_IMPORTED_MODULE_1___default()), {\n    plugins: [(remark_gfm__WEBPACK_IMPORTED_MODULE_2___default())],\n    children: markdown\n  })))));\n}\n\n//# sourceURL=webpack://test_react/./src/components/Header.js?");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => /* binding */ Header\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react_markdown__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-markdown */ \"./node_modules/react-markdown/lib/react-markdown.js\");\n/* harmony import */ var react_markdown__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_markdown__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var remark_gfm__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! remark-gfm */ \"./node_modules/remark-gfm/index.js\");\n/* harmony import */ var remark_gfm__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(remark_gfm__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _Header_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Header.css */ \"./src/components/Header.css\");\n/* harmony import */ var _material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @material-ui/core/Accordion */ \"./node_modules/@material-ui/core/esm/Accordion/Accordion.js\");\n/* harmony import */ var _material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/core/AccordionDetails */ \"./node_modules/@material-ui/core/esm/AccordionDetails/AccordionDetails.js\");\n;\n\n\n // Material-UI ExpansionPanel components\n\n\n\nfunction Header() {\n  var markdown = \"\\n  # Schema Evaluator\\n\\n  Provides summary charts that allows users to explore:\\n  - The diversity (number of alleles) at each locus (**Panel A**);\\n  - The variation of allele mode sizes per locus (**Panel B**);\\n  - Summary statistics (minimum allele size in blue, minimum allele size in orange and median allele size in green) for each locus (**Panel C**);\\n  - The loci size distribution (**Panel D**);\\n  - The presence of alleles that are not CDSs (when evaluating schemas called by other algorithms) (**Panel E**).\\n\\n  Users are able to select an **individual locus** to be analysed, by clicking on:\\n  - each **point (locus)** of the **Locus Statistics** and **Locus Size Variation charts**;\\n  - the **locus name** on the **Locus** column of the **CDS Analysis** table, the **Loci with high variability** table or the **Loci with only 1 allele** table.\\n\\n  By selecting a locus the following will be displayed:\\n  - 2 charts (histogram and scatterplot) containing an **analysis of the allele sizes**;\\n  - a table with **summary statistics** of the alleles;\\n  - a **Neighbor Joining tree** built by clustal based on the mafft alignment;\\n  - a **multiple sequence alignment** of the alleles produced by mafft.\\n  \";\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_4__.default, {\n    defaultExpanded: true\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_5__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n    className: _Header_css__WEBPACK_IMPORTED_MODULE_3__.default.mainPaper,\n    style: {\n      width: \"100%\",\n      height: \"100%\"\n    }\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement((react_markdown__WEBPACK_IMPORTED_MODULE_1___default()), {\n    plugins: [(remark_gfm__WEBPACK_IMPORTED_MODULE_2___default())],\n    children: markdown\n  })))));\n}\n\n//# sourceURL=webpack://test_react/./src/components/Header.js?");
 
 /***/ }),
 
@@ -6699,7 +6699,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
 
 "use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var _hoc_Aux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../hoc/Aux */ \"./src/hoc/Aux.js\");\n/* harmony import */ var _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./SchemaEvaluator.css */ \"./src/components/SchemaEvaluator.css\");\n/* harmony import */ var _material_ui_core_Button__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @material-ui/core/Button */ \"./node_modules/@material-ui/core/esm/Button/Button.js\");\n/* harmony import */ var _material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @material-ui/core/Typography */ \"./node_modules/@material-ui/core/esm/Typography/Typography.js\");\n/* harmony import */ var _material_ui_core_styles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/core/styles */ \"./node_modules/@material-ui/core/esm/styles/createMuiTheme.js\");\n/* harmony import */ var _material_ui_core_styles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @material-ui/core/styles */ \"./node_modules/@material-ui/styles/esm/ThemeProvider/ThemeProvider.js\");\n/* harmony import */ var _material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @material-ui/core/Accordion */ \"./node_modules/@material-ui/core/esm/Accordion/Accordion.js\");\n/* harmony import */ var _material_ui_icons_ExpandMore__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @material-ui/icons/ExpandMore */ \"./node_modules/@material-ui/icons/ExpandMore.js\");\n/* harmony import */ var _material_ui_core_AccordionSummary__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @material-ui/core/AccordionSummary */ \"./node_modules/@material-ui/core/esm/AccordionSummary/AccordionSummary.js\");\n/* harmony import */ var _material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @material-ui/core/AccordionDetails */ \"./node_modules/@material-ui/core/esm/AccordionDetails/AccordionDetails.js\");\n/* harmony import */ var _material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @material-ui/lab/Alert */ \"./node_modules/@material-ui/lab/esm/Alert/Alert.js\");\n/* harmony import */ var mui_datatables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! mui-datatables */ \"./node_modules/mui-datatables/dist/index.js\");\n/* harmony import */ var react_plotly_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-plotly.js */ \"./node_modules/react-plotly.js/react-plotly.js\");\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n // Material-UI components\n\n\n\n // Material-UI ExpansionPanel components\n\n\n\n\n // Material-UI Lab components\n\n // Material-UI Datatables\n\n // Plotly.js\n\n\n\nvar SchemaEvaluator = /*#__PURE__*/function (_Component) {\n  _inherits(SchemaEvaluator, _Component);\n\n  var _super = _createSuper(SchemaEvaluator);\n\n  function SchemaEvaluator() {\n    var _this;\n\n    _classCallCheck(this, SchemaEvaluator);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      pre_computed_data: _preComputedData,\n      locus_ind_data: _preComputedDataInd,\n      pre_computed_data_boxplot: _preComputedDataBoxplot,\n      cds_df_data: _cdsDf,\n      cds_scatter_data: _cdsScatter,\n      total_data: _totalData,\n      message: _message,\n      tabValue: 0\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"getMuiTheme\", function () {\n      return (0,_material_ui_core_styles__WEBPACK_IMPORTED_MODULE_5__.default)({\n        overrides: {\n          MUIDataTableToolbar: {\n            titleText: {\n              color: \"#bb7944\"\n            }\n          }\n        }\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"plotChangeHandler\", function (value) {\n      _this.setState({\n        tabValue: value\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"clickScatterPlotHandler\", function (event) {\n      var locus_id = event.points[0].text;\n      console.log(locus_id);\n      var anchor = document.createElement(\"a\");\n      anchor.href = \"../html_files/\".concat(locus_id.split(\".\")[0], \"_individual_report.html\");\n      anchor.target = \"_blank\";\n      anchor.rel = \"noopener noreferrer\";\n      anchor.click();\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"clickBoxPlotHandler\", function (event) {\n      var locus_id = event.points[0].x;\n      console.log(locus_id);\n      var anchor = document.createElement(\"a\");\n      anchor.href = \"../html_files/\".concat(locus_id.split(\".\")[0], \"_individual_report.html\");\n      anchor.target = \"_blank\";\n      anchor.rel = \"noopener noreferrer\";\n      anchor.click();\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"clickCdsTableHandler\", function (cellData) {\n      var locus_id = cellData;\n      console.log(locus_id);\n      var anchor = document.createElement(\"a\");\n      anchor.href = \"../html_files/\".concat(locus_id.split(\".\")[0], \"_individual_report.html\");\n      anchor.target = \"_blank\";\n      anchor.rel = \"noopener noreferrer\";\n      anchor.click();\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"totalDataColumnsHandler\", function (columnData, alleleShorterColumn) {\n      if (\"chewBBACA_version\" in columnData[0]) {\n        var totalDataColumns = [{\n          name: \"chewBBACA_version\",\n          label: \"chewBBACA Version\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"bsr\",\n          label: \"Blast Score Ratio\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_loci\",\n          label: \"Total Loci\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles\",\n          label: \"Total Alleles\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_mult3\",\n          label: \"Total Alleles not multiple of 3\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_stopC\",\n          label: \"Total Alleles w/ >1 stop codons\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_notStart\",\n          label: \"Total Alleles wo/ Start/Stop Codon\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_shorter\",\n          label: \"Total \".concat(alleleShorterColumn),\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_invalid_alleles\",\n          label: \"Total Invalid Alleles\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }];\n        return totalDataColumns;\n      } else {\n        var _totalDataColumns = [{\n          name: \"total_loci\",\n          label: \"Total Loci\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles\",\n          label: \"Total Alleles\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_mult3\",\n          label: \"Total Alleles not multiple of 3\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_stopC\",\n          label: \"Total Alleles w/ >1 stop codons\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_notStart\",\n          label: \"Total Alleles wo/ Start/Stop Codon\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_shorter\",\n          label: \"Total \".concat(alleleShorterColumn),\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_invalid_alleles\",\n          label: \"Total Invalid Alleles\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }];\n        return _totalDataColumns;\n      }\n    });\n\n    return _this;\n  }\n\n  _createClass(SchemaEvaluator, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var style = {\n        buttonBar: {\n          overflowX: \"auto\",\n          display: \"flex\",\n          justifyContent: \"center\",\n          marginBottom: \"20px\"\n        },\n        button: {\n          minWidth: \"150px\"\n        },\n        formControl: {\n          margin: 0,\n          display: \"flex\",\n          wrap: \"nowrap\"\n        },\n        root: {\n          width: \"100%\"\n        },\n        toolbar: {\n          display: \"flex\"\n        }\n      }; // Create panel A\n\n      var locus_name2 = [];\n      var nr_alleles = [];\n      var total_al_data = [];\n\n      for (var key in this.state.pre_computed_data.total_alleles) {\n        locus_name2.push(this.state.pre_computed_data.total_alleles[key].locus_name);\n        nr_alleles.push(this.state.pre_computed_data.total_alleles[key].nr_alleles);\n      }\n\n      total_al_data.push({\n        x: nr_alleles,\n        y: locus_name2,\n        type: \"histogram\",\n        name: \"Total alleles\"\n      });\n      var total_allele_plot = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_plotly_js__WEBPACK_IMPORTED_MODULE_4__.default, {\n        data: total_al_data,\n        layout: {\n          title: {\n            text: \"Number of Loci with given Number of Alleles\"\n          },\n          xaxis: {\n            title: {\n              text: \"Number of Different Alleles\"\n            },\n            showgrid: true\n          },\n          yaxis: {\n            title: {\n              text: \"Number of Loci\"\n            }\n          }\n        },\n        useResizeHandler: true,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        },\n        line: {\n          width: 1\n        }\n      }); // Create panel B\n\n      var mode_data_arr = [];\n      var allele_mode = [];\n      var locus_name = [];\n\n      for (var _key2 in this.state.pre_computed_data.mode) {\n        allele_mode.push(this.state.pre_computed_data.mode[_key2].alleles_mode);\n        locus_name.push(this.state.pre_computed_data.mode[_key2].locus_name);\n      }\n\n      mode_data_arr.push({\n        x: allele_mode,\n        y: locus_name,\n        type: \"histogram\",\n        name: \"Distribution of allele mode sizes per gene\"\n      });\n      var mode_data_plot = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_plotly_js__WEBPACK_IMPORTED_MODULE_4__.default, {\n        data: mode_data_arr,\n        layout: {\n          title: {\n            text: \"Distribution of allele mode sizes\"\n          },\n          xaxis: {\n            title: {\n              text: \"Allele Mode Size\"\n            },\n            showgrid: true\n          },\n          yaxis: {\n            title: {\n              text: \"Number of Loci\"\n            }\n          }\n        },\n        useResizeHandler: true,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        },\n        line: {\n          width: 1\n        }\n      }); // Create panel C\n\n      var locus_id = [];\n      var nr_alleles_scatter = [];\n      var scatter_data = [];\n      var scatter_data_median = [];\n      var scatter_data_min = [];\n      var scatter_data_max = [];\n\n      for (var _key3 in this.state.pre_computed_data.scatter_data) {\n        locus_id.push(this.state.pre_computed_data.scatter_data[_key3].locus_id);\n        nr_alleles_scatter.push(this.state.pre_computed_data.scatter_data[_key3].nr_alleles);\n        scatter_data_median.push(this.state.pre_computed_data.scatter_data[_key3].alleles_median);\n        scatter_data_min.push(this.state.pre_computed_data.scatter_data[_key3].alleles_min);\n        scatter_data_max.push(this.state.pre_computed_data.scatter_data[_key3].alleles_max);\n      }\n\n      scatter_data.push({\n        x: scatter_data_min,\n        y: nr_alleles_scatter,\n        type: \"scatter\",\n        name: \"Min\",\n        mode: \"markers\",\n        marker: {\n          opacity: 0.7,\n          size: 4\n        },\n        hovertemplate: \"<b>ID</b>: %{text}\",\n        text: locus_id\n      }, {\n        x: scatter_data_max,\n        y: nr_alleles_scatter,\n        type: \"scatter\",\n        name: \"Max\",\n        mode: \"markers\",\n        marker: {\n          opacity: 0.7,\n          size: 4\n        },\n        hovertemplate: \"<b>ID</b>: %{text}\",\n        text: locus_id\n      }, {\n        x: scatter_data_median,\n        y: nr_alleles_scatter,\n        type: \"scatter\",\n        name: \"Median\",\n        mode: \"markers\",\n        marker: {\n          opacity: 0.7,\n          size: 4\n        },\n        hovertemplate: \"<b>ID</b>: %{text}\",\n        text: locus_id\n      });\n      var scatter_plot = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_plotly_js__WEBPACK_IMPORTED_MODULE_4__.default, {\n        data: scatter_data,\n        layout: {\n          title: {\n            text: \"Locus Statistics\"\n          },\n          xaxis: {\n            title: {\n              text: \"Allele size in bp\"\n            },\n            showgrid: true,\n            zeroline: false\n          },\n          yaxis: {\n            title: {\n              text: \"Number of alleles\"\n            },\n            zeroline: false\n          },\n          hovermode: \"closest\"\n        },\n        useResizeHandler: true,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        },\n        line: {\n          width: 1\n        },\n        onClick: function onClick(e) {\n          return _this2.clickScatterPlotHandler(e);\n        }\n      }); // Panel D\n\n      var boxLoci = [];\n      var boxQ1 = [];\n      var boxMedian = [];\n      var boxQ3 = [];\n      var boxLowerfence = [];\n      var boxUpperfence = [];\n\n      for (var boxKey in this.state.pre_computed_data_boxplot[\"boxplot_data\"]) {\n        boxLoci.push(this.state.pre_computed_data_boxplot[\"boxplot_data\"][boxKey].locus_name);\n        boxQ1.push(this.state.pre_computed_data_boxplot[\"boxplot_data\"][boxKey].q1);\n        boxMedian.push(this.state.pre_computed_data_boxplot[\"boxplot_data\"][boxKey].median);\n        boxQ3.push(this.state.pre_computed_data_boxplot[\"boxplot_data\"][boxKey].q3);\n        boxLowerfence.push(this.state.pre_computed_data_boxplot[\"boxplot_data\"][boxKey].min);\n        boxUpperfence.push(this.state.pre_computed_data_boxplot[\"boxplot_data\"][boxKey].max);\n      }\n\n      var boxplotData = [];\n      boxplotData.push({\n        type: \"box\",\n        name: \"Locus Size Variation\",\n        x: boxLoci,\n        q1: boxQ1,\n        median: boxMedian,\n        q3: boxQ3,\n        lowerfence: boxLowerfence,\n        upperfence: boxUpperfence,\n        showlegend: false\n      });\n      var boxplot = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_plotly_js__WEBPACK_IMPORTED_MODULE_4__.default, {\n        data: boxplotData,\n        layout: {\n          title: {\n            text: \"Locus Size Variation\"\n          },\n          xaxis: {\n            title: {\n              text: \"Loci\"\n            },\n            showticklabels: false\n          },\n          yaxis: {\n            title: {\n              text: \"Allele size variation\"\n            }\n          },\n          boxgap: 0.05,\n          boxgapgroup: 0.05\n        },\n        useResizeHandler: true,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        },\n        onClick: function onClick(e) {\n          return _this2.clickBoxPlotHandler(e);\n        }\n      }); // CDS Analysis\n\n      var alleleShorterColumn = Object.keys(this.state.cds_df_data[0]).find(function (k) {\n        return k.includes(\"Alleles shorter\");\n      });\n      var columns = [{\n        name: \"Gene\",\n        label: \"Locus\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Alleles not multiple of 3\",\n        label: \"Alleles not multiple of 3\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Alleles w/ >1 stop codons\",\n        label: \"Alleles w/ >1 stop codons\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Alleles wo/ Start/Stop Codon\",\n        label: \"Alleles wo/ Start/Stop Codon\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: alleleShorterColumn,\n        label: alleleShorterColumn,\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Total Invalid Alleles\",\n        label: \"Total Invalid Alleles\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Missing Allele IDs\",\n        label: \"Missing Allele IDs\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          },\n          customBodyRender: function customBodyRender(value, tableMeta, updateValue) {\n            return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null, value.join(\", \"));\n          }\n        }\n      }, {\n        name: \"CDS\",\n        label: \"Valid Alleles\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }];\n      var options = {\n        responsive: \"vertical\",\n        selectableRowsHeader: false,\n        selectableRows: \"none\",\n        selectableRowsOnClick: false,\n        print: false,\n        download: true,\n        filter: true,\n        search: true,\n        viewColumns: true,\n        pagination: true,\n        onCellClick: function onCellClick(cellData, cellMeta) {\n          console.log(cellData, cellMeta);\n\n          if (cellData.includes(\".fasta\")) {\n            _this2.clickCdsTableHandler(cellData);\n          }\n        }\n      };\n      var cds_data = this.state.cds_df_data;\n      var cds_analysis_table = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_styles__WEBPACK_IMPORTED_MODULE_6__.default, {\n        theme: this.getMuiTheme()\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(mui_datatables__WEBPACK_IMPORTED_MODULE_3__.default, {\n        title: \"Loci Analysis\",\n        data: cds_data,\n        columns: columns,\n        options: options\n      })); // CDS scatter\n\n      var scatterCDS = [];\n      var barWidth = Array(this.state.cds_scatter_data[\"CDS_Alleles\"].length).fill(0.2);\n      scatterCDS.push({\n        type: \"bar\",\n        name: \"CDS Alleles\",\n        x: this.state.cds_scatter_data[\"CDS_Alleles\"],\n        orientation: \"h\",\n        text: this.state.cds_scatter_data[\"genes\"],\n        marker_color: \"#045a8d\",\n        width: barWidth\n      }, {\n        type: \"bar\",\n        name: \"Non multiple 3\",\n        x: this.state.cds_scatter_data[\"mult3\"],\n        orientation: \"h\",\n        text: this.state.cds_scatter_data[\"genes\"],\n        marker_color: \"#006d2c\",\n        width: barWidth\n      }, {\n        type: \"bar\",\n        name: \"> 1 stop codon\",\n        x: this.state.cds_scatter_data[\"stopC\"],\n        orientation: \"h\",\n        text: this.state.cds_scatter_data[\"genes\"],\n        marker_color: \"#7b3294\",\n        width: barWidth\n      }, {\n        type: \"bar\",\n        name: \"No Start/Stop codon\",\n        x: this.state.cds_scatter_data[\"notStart\"],\n        orientation: \"h\",\n        text: this.state.cds_scatter_data[\"genes\"],\n        marker_color: \"#ec7014\",\n        width: barWidth\n      }, {\n        type: \"bar\",\n        name: alleleShorterColumn,\n        x: this.state.cds_scatter_data[\"shorter\"],\n        orientation: \"h\",\n        text: this.state.cds_scatter_data[\"genes\"],\n        marker_color: \"#6a3d9a\",\n        width: barWidth\n      });\n      var cds_scatter_plot = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_plotly_js__WEBPACK_IMPORTED_MODULE_4__.default, {\n        data: scatterCDS,\n        layout: {\n          autosize: true,\n          barmode: \"stack\",\n          bargap: 0.5,\n          bargroupgap: 0.0,\n          title: {\n            text: \"Summary of problematic alleles per locus\"\n          },\n          xaxis: {\n            title: {\n              text: \"Number of occurrences\"\n            },\n            gridcolor: \"#eee\",\n            type: \"log\"\n          },\n          yaxis: {\n            showgrid: false,\n            showticklabels: false\n          },\n          plot_bgcolor: \"rgba(0,0,0,0)\",\n          hovermode: \"closest\"\n        },\n        useResizeHandler: true,\n        style: {\n          width: \"100%\",\n          height: \"700px\"\n        }\n      }); // Schema Summary Statistics table\n\n      var totalDataColumns = this.totalDataColumnsHandler(this.state.total_data, alleleShorterColumn);\n      var totalDataOptions = {\n        responsive: \"vertical\",\n        selectableRowsHeader: false,\n        selectableRows: \"none\",\n        selectableRowsOnClick: false,\n        print: false,\n        download: false,\n        filter: false,\n        search: false,\n        viewColumns: true,\n        pagination: false\n      };\n      var total_data = this.state.total_data;\n      var total_data_table = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_styles__WEBPACK_IMPORTED_MODULE_6__.default, {\n        theme: this.getMuiTheme()\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(mui_datatables__WEBPACK_IMPORTED_MODULE_3__.default, {\n        title: \"Schema Summary Statistics\",\n        data: total_data,\n        columns: totalDataColumns,\n        options: totalDataOptions\n      }));\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_hoc_Aux__WEBPACK_IMPORTED_MODULE_1__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"40px\",\n          width: \"100%\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__.default, {\n        variant: \"outlined\",\n        severity: \"info\"\n      }, this.state.message)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"40px\"\n        }\n      }, total_data_table), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"40px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_8__.default, {\n        defaultExpanded: true\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionSummary__WEBPACK_IMPORTED_MODULE_9__.default, {\n        expandIcon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_icons_ExpandMore__WEBPACK_IMPORTED_MODULE_10__.default, null)\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_11__.default, {\n        variant: \"h5\",\n        className: _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__.default.title\n      }, \"Schema Evaluation\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_12__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        className: _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__.default.mainPaper,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginBottom: \"10px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_11__.default, {\n        variant: \"subtitle1\"\n      }, \"In the Locus Statistics and Locus Size Variation graphs, each point (locus) is clickable and will open a page with more details about it.\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: style.buttonBar\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Button__WEBPACK_IMPORTED_MODULE_13__.default, {\n        style: style.button,\n        className: \"\".concat(this.state.tabValue === 0 && _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__.default.tabButton),\n        onClick: function onClick() {\n          _this2.plotChangeHandler(0);\n        }\n      }, \"Allele Numbers Analysis\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Button__WEBPACK_IMPORTED_MODULE_13__.default, {\n        style: style.button,\n        className: \"\".concat(this.state.tabValue === 1 && _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__.default.tabButton),\n        onClick: function onClick() {\n          _this2.plotChangeHandler(1);\n        }\n      }, \"Allele Length Analysis\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Button__WEBPACK_IMPORTED_MODULE_13__.default, {\n        style: style.button,\n        className: \"\".concat(this.state.tabValue === 2 && _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__.default.tabButton),\n        onClick: function onClick() {\n          _this2.plotChangeHandler(2);\n        }\n      }, \"Locus Statistics\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Button__WEBPACK_IMPORTED_MODULE_13__.default, {\n        style: style.button,\n        className: \"\".concat(this.state.tabValue === 3 && _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__.default.tabButton),\n        onClick: function onClick() {\n          _this2.plotChangeHandler(3);\n        }\n      }, \"Locus Size Variation\")), this.state.tabValue === 0 && total_allele_plot, this.state.tabValue === 1 && mode_data_plot, this.state.tabValue === 2 && scatter_plot, this.state.tabValue === 3 && boxplot)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        id: \"cds-analysis\",\n        style: {\n          marginTop: \"40px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_11__.default, {\n        variant: \"h5\",\n        className: _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__.default.title\n      }, \"Loci Analysis\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"20px\"\n        }\n      }, cds_analysis_table), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"20px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_hoc_Aux__WEBPACK_IMPORTED_MODULE_1__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"20px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__.default, {\n        variant: \"outlined\",\n        severity: \"info\"\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_11__.default, {\n        variant: \"subtitle1\"\n      }, \"The x-axis of the following plot is in logarithmic scale for a more compact visualization.\"))), cds_scatter_plot)))));\n    }\n  }]);\n\n  return SchemaEvaluator;\n}(react__WEBPACK_IMPORTED_MODULE_0__.Component);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SchemaEvaluator);\n\n//# sourceURL=webpack://test_react/./src/components/SchemaEvaluator.js?");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var _hoc_Aux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../hoc/Aux */ \"./src/hoc/Aux.js\");\n/* harmony import */ var _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./SchemaEvaluator.css */ \"./src/components/SchemaEvaluator.css\");\n/* harmony import */ var _material_ui_core_Button__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @material-ui/core/Button */ \"./node_modules/@material-ui/core/esm/Button/Button.js\");\n/* harmony import */ var _material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @material-ui/core/Typography */ \"./node_modules/@material-ui/core/esm/Typography/Typography.js\");\n/* harmony import */ var _material_ui_core_styles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/core/styles */ \"./node_modules/@material-ui/core/esm/styles/createMuiTheme.js\");\n/* harmony import */ var _material_ui_core_styles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @material-ui/core/styles */ \"./node_modules/@material-ui/styles/esm/ThemeProvider/ThemeProvider.js\");\n/* harmony import */ var _material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @material-ui/core/Accordion */ \"./node_modules/@material-ui/core/esm/Accordion/Accordion.js\");\n/* harmony import */ var _material_ui_icons_ExpandMore__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @material-ui/icons/ExpandMore */ \"./node_modules/@material-ui/icons/ExpandMore.js\");\n/* harmony import */ var _material_ui_core_AccordionSummary__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @material-ui/core/AccordionSummary */ \"./node_modules/@material-ui/core/esm/AccordionSummary/AccordionSummary.js\");\n/* harmony import */ var _material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @material-ui/core/AccordionDetails */ \"./node_modules/@material-ui/core/esm/AccordionDetails/AccordionDetails.js\");\n/* harmony import */ var _material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @material-ui/lab/Alert */ \"./node_modules/@material-ui/lab/esm/Alert/Alert.js\");\n/* harmony import */ var mui_datatables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! mui-datatables */ \"./node_modules/mui-datatables/dist/index.js\");\n/* harmony import */ var react_plotly_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-plotly.js */ \"./node_modules/react-plotly.js/react-plotly.js\");\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n // Material-UI components\n\n\n\n // Material-UI ExpansionPanel components\n\n\n\n\n // Material-UI Lab components\n\n // Material-UI Datatables\n\n // Plotly.js\n\n\n\nvar SchemaEvaluator = /*#__PURE__*/function (_Component) {\n  _inherits(SchemaEvaluator, _Component);\n\n  var _super = _createSuper(SchemaEvaluator);\n\n  function SchemaEvaluator() {\n    var _this;\n\n    _classCallCheck(this, SchemaEvaluator);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      pre_computed_data: _preComputedData,\n      locus_ind_data: _preComputedDataInd,\n      pre_computed_data_boxplot: _preComputedDataBoxplot,\n      cds_df_data: _cdsDf,\n      cds_scatter_data: _cdsScatter,\n      total_data: _totalData,\n      notConserved: _notConserved,\n      notConservedMessage: _notConservedMessage,\n      oneAlleleOnly: _oneAlleleOnly,\n      message: _message,\n      tabValue: 0\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"getMuiTheme\", function () {\n      return (0,_material_ui_core_styles__WEBPACK_IMPORTED_MODULE_5__.default)({\n        overrides: {\n          MUIDataTableToolbar: {\n            titleText: {\n              color: \"#bb7944\"\n            }\n          }\n        }\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"plotChangeHandler\", function (value) {\n      _this.setState({\n        tabValue: value\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"clickScatterPlotHandler\", function (event) {\n      var locus_id = event.points[0].text;\n      console.log(locus_id);\n      var anchor = document.createElement(\"a\");\n      anchor.href = \"../html_files/\".concat(locus_id.split(\".\")[0], \"_individual_report.html\");\n      anchor.target = \"_blank\";\n      anchor.rel = \"noopener noreferrer\";\n      anchor.click();\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"clickBoxPlotHandler\", function (event) {\n      var locus_id = event.points[0].x;\n      console.log(locus_id);\n      var anchor = document.createElement(\"a\");\n      anchor.href = \"../html_files/\".concat(locus_id.split(\".\")[0], \"_individual_report.html\");\n      anchor.target = \"_blank\";\n      anchor.rel = \"noopener noreferrer\";\n      anchor.click();\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"clickCdsTableHandler\", function (cellData) {\n      var locus_id = cellData;\n      console.log(locus_id);\n      var anchor = document.createElement(\"a\");\n      anchor.href = \"../html_files/\".concat(locus_id.split(\".\")[0], \"_individual_report.html\");\n      anchor.target = \"_blank\";\n      anchor.rel = \"noopener noreferrer\";\n      anchor.click();\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"totalDataColumnsHandler\", function (columnData, alleleShorterColumn) {\n      if (\"chewBBACA_version\" in columnData[0]) {\n        var totalDataColumns = [{\n          name: \"chewBBACA_version\",\n          label: \"chewBBACA Version\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"bsr\",\n          label: \"Blast Score Ratio\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_loci\",\n          label: \"Total Loci\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles\",\n          label: \"Total Alleles\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_mult3\",\n          label: \"Total Alleles not multiple of 3\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_stopC\",\n          label: \"Total Alleles w/ >1 stop codons\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_notStart\",\n          label: \"Total Alleles wo/ Start/Stop Codon\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_shorter\",\n          label: \"Total \".concat(alleleShorterColumn),\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_invalid_alleles\",\n          label: \"Total Invalid Alleles\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }];\n        return totalDataColumns;\n      } else {\n        var _totalDataColumns = [{\n          name: \"total_loci\",\n          label: \"Total Loci\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles\",\n          label: \"Total Alleles\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_mult3\",\n          label: \"Total Alleles not multiple of 3\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_stopC\",\n          label: \"Total Alleles w/ >1 stop codons\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_notStart\",\n          label: \"Total Alleles wo/ Start/Stop Codon\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_alleles_shorter\",\n          label: \"Total \".concat(alleleShorterColumn),\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }, {\n          name: \"total_invalid_alleles\",\n          label: \"Total Invalid Alleles\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }];\n        return _totalDataColumns;\n      }\n    });\n\n    return _this;\n  }\n\n  _createClass(SchemaEvaluator, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var style = {\n        buttonBar: {\n          overflowX: \"auto\",\n          display: \"flex\",\n          justifyContent: \"center\",\n          marginBottom: \"20px\"\n        },\n        button: {\n          minWidth: \"150px\"\n        },\n        formControl: {\n          margin: 0,\n          display: \"flex\",\n          wrap: \"nowrap\"\n        },\n        root: {\n          width: \"100%\"\n        },\n        toolbar: {\n          display: \"flex\"\n        }\n      }; // Create panel A\n\n      var locus_name2 = [];\n      var nr_alleles = [];\n      var total_al_data = [];\n\n      for (var key in this.state.pre_computed_data.total_alleles) {\n        locus_name2.push(this.state.pre_computed_data.total_alleles[key].locus_name);\n        nr_alleles.push(this.state.pre_computed_data.total_alleles[key].nr_alleles);\n      }\n\n      total_al_data.push({\n        x: nr_alleles,\n        y: locus_name2,\n        type: \"histogram\",\n        name: \"Total alleles\"\n      });\n      var total_allele_plot = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_plotly_js__WEBPACK_IMPORTED_MODULE_4__.default, {\n        data: total_al_data,\n        layout: {\n          title: {\n            text: \"Number of Loci with given Number of Alleles\"\n          },\n          xaxis: {\n            title: {\n              text: \"Number of Different Alleles\"\n            },\n            showgrid: true\n          },\n          yaxis: {\n            title: {\n              text: \"Number of Loci\"\n            }\n          }\n        },\n        useResizeHandler: true,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        },\n        line: {\n          width: 1\n        }\n      }); // Create panel B\n\n      var mode_data_arr = [];\n      var allele_mode = [];\n      var locus_name = [];\n\n      for (var _key2 in this.state.pre_computed_data.mode) {\n        allele_mode.push(this.state.pre_computed_data.mode[_key2].alleles_mode);\n        locus_name.push(this.state.pre_computed_data.mode[_key2].locus_name);\n      }\n\n      mode_data_arr.push({\n        x: allele_mode,\n        y: locus_name,\n        type: \"histogram\",\n        name: \"Distribution of allele mode sizes per gene\"\n      });\n      var mode_data_plot = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_plotly_js__WEBPACK_IMPORTED_MODULE_4__.default, {\n        data: mode_data_arr,\n        layout: {\n          title: {\n            text: \"Distribution of allele mode sizes\"\n          },\n          xaxis: {\n            title: {\n              text: \"Allele Mode Size\"\n            },\n            showgrid: true\n          },\n          yaxis: {\n            title: {\n              text: \"Number of Loci\"\n            }\n          }\n        },\n        useResizeHandler: true,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        },\n        line: {\n          width: 1\n        }\n      }); // Create panel C\n\n      var locus_id = [];\n      var nr_alleles_scatter = [];\n      var scatter_data = [];\n      var scatter_data_median = [];\n      var scatter_data_min = [];\n      var scatter_data_max = [];\n\n      for (var _key3 in this.state.pre_computed_data.scatter_data) {\n        locus_id.push(this.state.pre_computed_data.scatter_data[_key3].locus_id);\n        nr_alleles_scatter.push(this.state.pre_computed_data.scatter_data[_key3].nr_alleles);\n        scatter_data_median.push(this.state.pre_computed_data.scatter_data[_key3].alleles_median);\n        scatter_data_min.push(this.state.pre_computed_data.scatter_data[_key3].alleles_min);\n        scatter_data_max.push(this.state.pre_computed_data.scatter_data[_key3].alleles_max);\n      }\n\n      scatter_data.push({\n        x: scatter_data_min,\n        y: nr_alleles_scatter,\n        type: \"scatter\",\n        name: \"Min\",\n        mode: \"markers\",\n        marker: {\n          opacity: 0.7,\n          size: 4\n        },\n        hovertemplate: \"<b>ID</b>: %{text}\",\n        text: locus_id\n      }, {\n        x: scatter_data_max,\n        y: nr_alleles_scatter,\n        type: \"scatter\",\n        name: \"Max\",\n        mode: \"markers\",\n        marker: {\n          opacity: 0.7,\n          size: 4\n        },\n        hovertemplate: \"<b>ID</b>: %{text}\",\n        text: locus_id\n      }, {\n        x: scatter_data_median,\n        y: nr_alleles_scatter,\n        type: \"scatter\",\n        name: \"Median\",\n        mode: \"markers\",\n        marker: {\n          opacity: 0.7,\n          size: 4\n        },\n        hovertemplate: \"<b>ID</b>: %{text}\",\n        text: locus_id\n      });\n      var scatter_plot = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_plotly_js__WEBPACK_IMPORTED_MODULE_4__.default, {\n        data: scatter_data,\n        layout: {\n          title: {\n            text: \"Locus Statistics\"\n          },\n          xaxis: {\n            title: {\n              text: \"Allele size in bp\"\n            },\n            showgrid: true,\n            zeroline: false\n          },\n          yaxis: {\n            title: {\n              text: \"Number of alleles\"\n            },\n            zeroline: false\n          },\n          hovermode: \"closest\"\n        },\n        useResizeHandler: true,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        },\n        line: {\n          width: 1\n        },\n        onClick: function onClick(e) {\n          return _this2.clickScatterPlotHandler(e);\n        }\n      }); // Panel D\n\n      var boxLoci = [];\n      var boxQ1 = [];\n      var boxMedian = [];\n      var boxQ3 = [];\n      var boxLowerfence = [];\n      var boxUpperfence = [];\n\n      for (var boxKey in this.state.pre_computed_data_boxplot[\"boxplot_data\"]) {\n        boxLoci.push(this.state.pre_computed_data_boxplot[\"boxplot_data\"][boxKey].locus_name);\n        boxQ1.push(this.state.pre_computed_data_boxplot[\"boxplot_data\"][boxKey].q1);\n        boxMedian.push(this.state.pre_computed_data_boxplot[\"boxplot_data\"][boxKey].median);\n        boxQ3.push(this.state.pre_computed_data_boxplot[\"boxplot_data\"][boxKey].q3);\n        boxLowerfence.push(this.state.pre_computed_data_boxplot[\"boxplot_data\"][boxKey].min);\n        boxUpperfence.push(this.state.pre_computed_data_boxplot[\"boxplot_data\"][boxKey].max);\n      }\n\n      var boxplotData = [];\n      boxplotData.push({\n        type: \"box\",\n        name: \"Locus Size Variation\",\n        x: boxLoci,\n        q1: boxQ1,\n        median: boxMedian,\n        q3: boxQ3,\n        lowerfence: boxLowerfence,\n        upperfence: boxUpperfence,\n        showlegend: false\n      });\n      var boxplot = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_plotly_js__WEBPACK_IMPORTED_MODULE_4__.default, {\n        data: boxplotData,\n        layout: {\n          title: {\n            text: \"Locus Size Variation\"\n          },\n          xaxis: {\n            title: {\n              text: \"Loci\"\n            },\n            showticklabels: false\n          },\n          yaxis: {\n            title: {\n              text: \"Allele size variation\"\n            }\n          },\n          boxgap: 0.05,\n          boxgapgroup: 0.05\n        },\n        useResizeHandler: true,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        },\n        onClick: function onClick(e) {\n          return _this2.clickBoxPlotHandler(e);\n        }\n      }); // CDS Analysis\n\n      var alleleShorterColumn = Object.keys(this.state.cds_df_data[0]).find(function (k) {\n        return k.includes(\"Alleles shorter\");\n      });\n      var columns = [{\n        name: \"Gene\",\n        label: \"Locus\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Alleles not multiple of 3\",\n        label: \"Alleles not multiple of 3\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Alleles w/ >1 stop codons\",\n        label: \"Alleles w/ >1 stop codons\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Alleles wo/ Start/Stop Codon\",\n        label: \"Alleles wo/ Start/Stop Codon\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: alleleShorterColumn,\n        label: alleleShorterColumn,\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Total Invalid Alleles\",\n        label: \"Total Invalid Alleles\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Missing Allele IDs\",\n        label: \"Missing Allele IDs\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          },\n          customBodyRender: function customBodyRender(value, tableMeta, updateValue) {\n            return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null, value.join(\", \"));\n          }\n        }\n      }, {\n        name: \"CDS\",\n        label: \"Valid Alleles\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }];\n      var options = {\n        responsive: \"vertical\",\n        selectableRowsHeader: false,\n        selectableRows: \"none\",\n        selectableRowsOnClick: false,\n        print: false,\n        download: true,\n        filter: true,\n        search: true,\n        viewColumns: true,\n        pagination: true,\n        onCellClick: function onCellClick(cellData, cellMeta) {\n          if (cellData.includes(\".fasta\")) {\n            _this2.clickCdsTableHandler(cellData);\n          }\n        }\n      };\n      var cds_data = this.state.cds_df_data;\n      var cds_analysis_table = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_styles__WEBPACK_IMPORTED_MODULE_6__.default, {\n        theme: this.getMuiTheme()\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(mui_datatables__WEBPACK_IMPORTED_MODULE_3__.default, {\n        title: \"Loci Analysis\",\n        data: cds_data,\n        columns: columns,\n        options: options\n      })); // CDS scatter\n\n      var scatterCDS = [];\n      var barWidth = Array(this.state.cds_scatter_data[\"CDS_Alleles\"].length).fill(0.2);\n      scatterCDS.push({\n        type: \"bar\",\n        name: \"CDS Alleles\",\n        x: this.state.cds_scatter_data[\"CDS_Alleles\"],\n        orientation: \"h\",\n        text: this.state.cds_scatter_data[\"genes\"],\n        marker_color: \"#045a8d\",\n        width: barWidth\n      }, {\n        type: \"bar\",\n        name: \"Non multiple 3\",\n        x: this.state.cds_scatter_data[\"mult3\"],\n        orientation: \"h\",\n        text: this.state.cds_scatter_data[\"genes\"],\n        marker_color: \"#006d2c\",\n        width: barWidth\n      }, {\n        type: \"bar\",\n        name: \"> 1 stop codon\",\n        x: this.state.cds_scatter_data[\"stopC\"],\n        orientation: \"h\",\n        text: this.state.cds_scatter_data[\"genes\"],\n        marker_color: \"#7b3294\",\n        width: barWidth\n      }, {\n        type: \"bar\",\n        name: \"No Start/Stop codon\",\n        x: this.state.cds_scatter_data[\"notStart\"],\n        orientation: \"h\",\n        text: this.state.cds_scatter_data[\"genes\"],\n        marker_color: \"#ec7014\",\n        width: barWidth\n      }, {\n        type: \"bar\",\n        name: alleleShorterColumn,\n        x: this.state.cds_scatter_data[\"shorter\"],\n        orientation: \"h\",\n        text: this.state.cds_scatter_data[\"genes\"],\n        marker_color: \"#6a3d9a\",\n        width: barWidth\n      });\n      var cds_scatter_plot = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_plotly_js__WEBPACK_IMPORTED_MODULE_4__.default, {\n        data: scatterCDS,\n        layout: {\n          autosize: true,\n          barmode: \"stack\",\n          bargap: 0.5,\n          bargroupgap: 0.0,\n          title: {\n            text: \"Summary of problematic alleles per locus\"\n          },\n          xaxis: {\n            title: {\n              text: \"Number of occurrences\"\n            },\n            gridcolor: \"#eee\",\n            type: \"log\"\n          },\n          yaxis: {\n            showgrid: false,\n            showticklabels: false\n          },\n          plot_bgcolor: \"rgba(0,0,0,0)\",\n          hovermode: \"closest\"\n        },\n        useResizeHandler: true,\n        style: {\n          width: \"100%\",\n          height: \"700px\"\n        }\n      }); // Schema Summary Statistics table\n\n      var totalDataColumns = this.totalDataColumnsHandler(this.state.total_data, alleleShorterColumn);\n      var totalDataOptions = {\n        responsive: \"vertical\",\n        selectableRowsHeader: false,\n        selectableRows: \"none\",\n        selectableRowsOnClick: false,\n        print: false,\n        download: false,\n        filter: false,\n        search: false,\n        viewColumns: true,\n        pagination: false\n      };\n      var total_data = this.state.total_data;\n      var total_data_table = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_styles__WEBPACK_IMPORTED_MODULE_6__.default, {\n        theme: this.getMuiTheme()\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(mui_datatables__WEBPACK_IMPORTED_MODULE_3__.default, {\n        title: \"Schema Summary Statistics\",\n        data: total_data,\n        columns: totalDataColumns,\n        options: totalDataOptions\n      }));\n      var notConservedList = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null);\n\n      if (this.state.notConserved === \"undefined\") {\n        notConservedList = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__.default, {\n          variant: \"outlined\",\n          severity: \"info\"\n        }, \"No loci with high length variability detected.\");\n      } else {\n        var notConservedColumns = [{\n          name: \"gene\",\n          label: \"Locus\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }];\n        var notConservedOptions = {\n          responsive: \"vertical\",\n          selectableRowsHeader: false,\n          selectableRows: \"none\",\n          selectableRowsOnClick: false,\n          print: false,\n          download: false,\n          filter: false,\n          search: false,\n          viewColumns: true,\n          pagination: true,\n          onCellClick: function onCellClick(cellData, cellMeta) {\n            if (cellData.includes(\".fasta\")) {\n              _this2.clickCdsTableHandler(cellData);\n            }\n          }\n        };\n        notConservedList = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_hoc_Aux__WEBPACK_IMPORTED_MODULE_1__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n          style: {\n            marginTop: \"40px\",\n            width: \"100%\"\n          }\n        }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__.default, {\n          variant: \"outlined\",\n          severity: \"info\"\n        }, this.state.notConservedMessage)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n          style: {\n            marginTop: \"20px\"\n          }\n        }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_styles__WEBPACK_IMPORTED_MODULE_6__.default, {\n          theme: this.getMuiTheme()\n        }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(mui_datatables__WEBPACK_IMPORTED_MODULE_3__.default, {\n          title: \"Loci with high variability\",\n          data: this.state.notConserved,\n          columns: notConservedColumns,\n          options: notConservedOptions\n        }))));\n      }\n\n      var oneAlleleOnlyList = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null);\n\n      if (this.state.oneAlleleOnly === \"undefined\") {\n        oneAlleleOnlyList = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__.default, {\n          variant: \"outlined\",\n          severity: \"info\"\n        }, \"No loci with only 1 allele were detected.\");\n      } else {\n        var oneAlleleOnlyColumns = [{\n          name: \"gene\",\n          label: \"Locus\",\n          options: {\n            filter: true,\n            sort: true,\n            display: true,\n            setCellHeaderProps: function setCellHeaderProps(value) {\n              return {\n                style: {\n                  fontWeight: \"bold\"\n                }\n              };\n            }\n          }\n        }];\n        var oneAlleleOnlyOptions = {\n          responsive: \"vertical\",\n          selectableRowsHeader: false,\n          selectableRows: \"none\",\n          selectableRowsOnClick: false,\n          print: false,\n          download: false,\n          filter: false,\n          search: false,\n          viewColumns: true,\n          pagination: true,\n          onCellClick: function onCellClick(cellData, cellMeta) {\n            if (cellData.includes(\".fasta\")) {\n              _this2.clickCdsTableHandler(cellData);\n            }\n          }\n        };\n        oneAlleleOnlyList = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_hoc_Aux__WEBPACK_IMPORTED_MODULE_1__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_styles__WEBPACK_IMPORTED_MODULE_6__.default, {\n          theme: this.getMuiTheme()\n        }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(mui_datatables__WEBPACK_IMPORTED_MODULE_3__.default, {\n          title: \"Loci with only 1 allele\",\n          data: this.state.oneAlleleOnly,\n          columns: oneAlleleOnlyColumns,\n          options: oneAlleleOnlyOptions\n        }))));\n      }\n\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_hoc_Aux__WEBPACK_IMPORTED_MODULE_1__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"40px\",\n          width: \"100%\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__.default, {\n        variant: \"outlined\",\n        severity: \"info\"\n      }, this.state.message)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"40px\"\n        }\n      }, total_data_table), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"40px\"\n        }\n      }, notConservedList), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"40px\"\n        }\n      }, oneAlleleOnlyList), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"40px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_8__.default, {\n        defaultExpanded: true\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionSummary__WEBPACK_IMPORTED_MODULE_9__.default, {\n        expandIcon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_icons_ExpandMore__WEBPACK_IMPORTED_MODULE_10__.default, null)\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_11__.default, {\n        variant: \"h5\",\n        className: _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__.default.title\n      }, \"Schema Evaluation\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_12__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        className: _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__.default.mainPaper,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginBottom: \"10px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_11__.default, {\n        variant: \"subtitle1\"\n      }, \"In the Locus Statistics and Locus Size Variation graphs, each point (locus) is clickable and will open a page with more details about it.\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: style.buttonBar\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Button__WEBPACK_IMPORTED_MODULE_13__.default, {\n        style: style.button,\n        className: \"\".concat(this.state.tabValue === 0 && _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__.default.tabButton),\n        onClick: function onClick() {\n          _this2.plotChangeHandler(0);\n        }\n      }, \"Allele Numbers Analysis\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Button__WEBPACK_IMPORTED_MODULE_13__.default, {\n        style: style.button,\n        className: \"\".concat(this.state.tabValue === 1 && _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__.default.tabButton),\n        onClick: function onClick() {\n          _this2.plotChangeHandler(1);\n        }\n      }, \"Allele Length Analysis\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Button__WEBPACK_IMPORTED_MODULE_13__.default, {\n        style: style.button,\n        className: \"\".concat(this.state.tabValue === 2 && _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__.default.tabButton),\n        onClick: function onClick() {\n          _this2.plotChangeHandler(2);\n        }\n      }, \"Locus Statistics\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Button__WEBPACK_IMPORTED_MODULE_13__.default, {\n        style: style.button,\n        className: \"\".concat(this.state.tabValue === 3 && _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__.default.tabButton),\n        onClick: function onClick() {\n          _this2.plotChangeHandler(3);\n        }\n      }, \"Locus Size Variation\")), this.state.tabValue === 0 && total_allele_plot, this.state.tabValue === 1 && mode_data_plot, this.state.tabValue === 2 && scatter_plot, this.state.tabValue === 3 && boxplot)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        id: \"cds-analysis\",\n        style: {\n          marginTop: \"40px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_11__.default, {\n        variant: \"h5\",\n        className: _SchemaEvaluator_css__WEBPACK_IMPORTED_MODULE_2__.default.title\n      }, \"Loci Analysis\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"20px\"\n        }\n      }, cds_analysis_table), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"20px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_hoc_Aux__WEBPACK_IMPORTED_MODULE_1__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"20px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__.default, {\n        variant: \"outlined\",\n        severity: \"info\"\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_11__.default, {\n        variant: \"subtitle1\"\n      }, \"The x-axis of the following plot is in logarithmic scale for a more compact visualization.\"))), cds_scatter_plot)))));\n    }\n  }]);\n\n  return SchemaEvaluator;\n}(react__WEBPACK_IMPORTED_MODULE_0__.Component);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SchemaEvaluator);\n\n//# sourceURL=webpack://test_react/./src/components/SchemaEvaluator.js?");
 
 /***/ }),
 
diff --git a/CHEWBBACA/tests/data/schemaEvaluatorData/expected_results/SchemaEvaluator_pre_computed_data/schema_evaluator_report.html b/CHEWBBACA/tests/data/schemaEvaluatorData/expected_results/SchemaEvaluator_pre_computed_data/schema_evaluator_report.html
index 4fd83514..ef4232f8 100644
--- a/CHEWBBACA/tests/data/schemaEvaluatorData/expected_results/SchemaEvaluator_pre_computed_data/schema_evaluator_report.html
+++ b/CHEWBBACA/tests/data/schemaEvaluatorData/expected_results/SchemaEvaluator_pre_computed_data/schema_evaluator_report.html
@@ -15,7 +15,10 @@
                 <script> const _cdsDf = [{"Alleles not multiple of 3": 16, "Alleles shorter than 201 nucleotides": 0, "Alleles w/ >1 stop codons": 6, "Alleles wo/ Start/Stop Codon": 0, "CDS": 431, "Gene": "Y_RS20815.fasta", "Missing Allele IDs": ["None"], "Number of alleles": 453, "Total Invalid Alleles": 22}, {"Alleles not multiple of 3": 9, "Alleles shorter than 201 nucleotides": 0, "Alleles w/ >1 stop codons": 2, "Alleles wo/ Start/Stop Codon": 46, "CDS": 242, "Gene": "YE3303.fasta", "Missing Allele IDs": [194, 200, 280, 284], "Number of alleles": 299, "Total Invalid Alleles": 57}, {"Alleles not multiple of 3": 9, "Alleles shorter than 201 nucleotides": 0, "Alleles w/ >1 stop codons": 1, "Alleles wo/ Start/Stop Codon": 5, "CDS": 255, "Gene": "BD65_RS15605.fasta", "Missing Allele IDs": [174, 237, 244, 245, 247, 255, 257], "Number of alleles": 270, "Total Invalid Alleles": 15}, {"Alleles not multiple of 3": 8, "Alleles shorter than 201 nucleotides": 0, "Alleles w/ >1 stop codons": 6, "Alleles wo/ Start/Stop Codon": 1, "CDS": 335, "Gene": "YP02742.fasta", "Missing Allele IDs": [215, 224], "Number of alleles": 350, "Total Invalid Alleles": 15}, {"Alleles not multiple of 3": 8, "Alleles shorter than 201 nucleotides": 0, "Alleles w/ >1 stop codons": 3, "Alleles wo/ Start/Stop Codon": 127, "CDS": 76, "Gene": "YE0312.fasta", "Missing Allele IDs": [203], "Number of alleles": 214, "Total Invalid Alleles": 138}, {"Alleles not multiple of 3": 6, "Alleles shorter than 201 nucleotides": 0, "Alleles w/ >1 stop codons": 2, "Alleles wo/ Start/Stop Codon": 0, "CDS": 270, "Gene": "YER_AA1032AA_00894.fasta", "Missing Allele IDs": [188], "Number of alleles": 278, "Total Invalid Alleles": 8}, {"Alleles not multiple of 3": 5, "Alleles shorter than 201 nucleotides": 0, "Alleles w/ >1 stop codons": 3, "Alleles wo/ Start/Stop Codon": 0, "CDS": 147, "Gene": "YE105_RS20150.fasta", "Missing Allele IDs": [102], "Number of alleles": 155, "Total Invalid Alleles": 8}, {"Alleles not multiple of 3": 4, "Alleles shorter than 201 nucleotides": 0, "Alleles w/ >1 stop codons": 0, "Alleles wo/ Start/Stop Codon": 0, "CDS": 139, "Gene": "YPO0001.fasta", "Missing Allele IDs": [110], "Number of alleles": 143, "Total Invalid Alleles": 4}] </script>
                 <script> const _cdsScatter = {"CDS_Alleles": [139.0, 147.0, 76.0, 255.0, 270.0, 242.0, 335.0, 431.0], "genes": ["YPO0001.fasta", "YE105_RS20150.fasta", "YE0312.fasta", "BD65_RS15605.fasta", "YER_AA1032AA_00894.fasta", "YE3303.fasta", "YP02742.fasta", "Y_RS20815.fasta"], "mult3": [4.0, 5.0, 8.0, 9.0, 6.0, 9.0, 8.0, 16.0], "notStart": [0.0, 0.0, 127.0, 5.0, 0.0, 46.0, 1.0, 0.0], "shorter": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], "stopC": [0.0, 3.0, 3.0, 1.0, 2.0, 2.0, 6.0, 6.0], "total_alleles": [143.0, 155.0, 214.0, 270.0, 278.0, 299.0, 350.0, 453.0]} </script>
                 <script> const _totalData = [{"total_loci": 8, "total_alleles": 2162, "total_alleles_mult3": 65, "total_alleles_stopC": 23, "total_alleles_notStart": 179, "total_alleles_shorter": 0, "total_invalid_alleles": 267}] </script>
+                <script> const _notConserved = "undefined" </script>
+                <script> const _oneAlleleOnly = "undefined" </script>
                 <script> const _message = "Schema evaluated with minimum length of 201 and translation table 11." </script>
+                <script> const _notConservedMessage = "Locus size is considered not conserved if >1 allele are outside the mode +/- 0.05 size. Loci with only 1 allele outside the threshold are considered conserved." </script>
                 <script src="./main.js"></script>
             </body>
         </html>
diff --git a/CHEWBBACA/tests/data/schemaEvaluatorData/expected_results/html_files/main_ind.js b/CHEWBBACA/tests/data/schemaEvaluatorData/expected_results/html_files/main_ind.js
index d263d2e8..f5d55dc4 100644
--- a/CHEWBBACA/tests/data/schemaEvaluatorData/expected_results/html_files/main_ind.js
+++ b/CHEWBBACA/tests/data/schemaEvaluatorData/expected_results/html_files/main_ind.js
@@ -7115,7 +7115,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
 
 "use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var _hoc_Aux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../hoc/Aux */ \"./src/hoc/Aux.js\");\n/* harmony import */ var _SchemaEvaluatorIndividual_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./SchemaEvaluatorIndividual.css */ \"./src/components/SchemaEvaluatorIndividual.css\");\n/* harmony import */ var _material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @material-ui/core/Grid */ \"./node_modules/@material-ui/core/esm/Grid/Grid.js\");\n/* harmony import */ var _material_ui_core_Switch__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @material-ui/core/Switch */ \"./node_modules/@material-ui/core/esm/Switch/Switch.js\");\n/* harmony import */ var _material_ui_core_Button__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @material-ui/core/Button */ \"./node_modules/@material-ui/core/esm/Button/Button.js\");\n/* harmony import */ var _material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @material-ui/core/Typography */ \"./node_modules/@material-ui/core/esm/Typography/Typography.js\");\n/* harmony import */ var _material_ui_core_FormControlLabel__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @material-ui/core/FormControlLabel */ \"./node_modules/@material-ui/core/esm/FormControlLabel/FormControlLabel.js\");\n/* harmony import */ var _material_ui_core_styles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @material-ui/core/styles */ \"./node_modules/@material-ui/core/esm/styles/createMuiTheme.js\");\n/* harmony import */ var _material_ui_core_styles__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @material-ui/core/styles */ \"./node_modules/@material-ui/styles/esm/ThemeProvider/ThemeProvider.js\");\n/* harmony import */ var _material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @material-ui/core/Accordion */ \"./node_modules/@material-ui/core/esm/Accordion/Accordion.js\");\n/* harmony import */ var _material_ui_core_AccordionSummary__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @material-ui/core/AccordionSummary */ \"./node_modules/@material-ui/core/esm/AccordionSummary/AccordionSummary.js\");\n/* harmony import */ var _material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @material-ui/core/AccordionDetails */ \"./node_modules/@material-ui/core/esm/AccordionDetails/AccordionDetails.js\");\n/* harmony import */ var _material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @material-ui/lab/Alert */ \"./node_modules/@material-ui/lab/esm/Alert/Alert.js\");\n/* harmony import */ var react_select__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! react-select */ \"./node_modules/react-select/dist/react-select.browser.esm.js\");\n/* harmony import */ var mui_datatables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! mui-datatables */ \"./node_modules/mui-datatables/dist/index.js\");\n/* harmony import */ var react_plotly_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-plotly.js */ \"./node_modules/react-plotly.js/react-plotly.js\");\n/* harmony import */ var react_msa_viewer__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! react-msa-viewer */ \"./node_modules/react-msa-viewer/dist/index.esm.min.js\");\n/* harmony import */ var _Phylocanvas__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Phylocanvas */ \"./src/components/Phylocanvas.js\");\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n // Material-UI components\n\n\n\n\n\n\n // Material-UI ExpansionPanel components\n\n\n\n // Material-UI Lab components\n\n // react-select import\n\n // Material-UI Datatables\n\n // Plotly.js\n\n // MSAViewer\n\n // Phylocanvas\n\n\n\nvar SchemaEvaluator = /*#__PURE__*/function (_Component) {\n  _inherits(SchemaEvaluator, _Component);\n\n  var _super = _createSuper(SchemaEvaluator);\n\n  function SchemaEvaluator() {\n    var _this;\n\n    _classCallCheck(this, SchemaEvaluator);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      locus_ind_data: _preComputedDataInd,\n      cds_df_data: _cdsDf,\n      exceptions: _exceptions,\n      testMSA: _msaData,\n      phyloData: _phyloData,\n      indTabValue: 0,\n      treeType: 0,\n      zoom: false\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"getMuiTheme\", function () {\n      return (0,_material_ui_core_styles__WEBPACK_IMPORTED_MODULE_6__.default)({\n        overrides: {\n          MUIDataTableToolbar: {\n            titleText: {\n              color: \"#bb7944\"\n            }\n          }\n        }\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"indPlotChangeHandler\", function (value) {\n      _this.setState({\n        indTabValue: value\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleSelectChange\", function (selectType, val) {\n      var newState = {};\n      newState[selectType] = val.value;\n\n      _this.setState(newState);\n    });\n\n    return _this;\n  }\n\n  _createClass(SchemaEvaluator, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      // Tree type options for Phylocanvas\n      var treeTypeOption = [\"circular\", \"rectangular\", \"diagonal\", \"hierarchical\", \"radial\"].map(function (v, i) {\n        return {\n          label: v,\n          value: i\n        };\n      });\n      var style = {\n        buttonBar: {\n          overflowX: \"auto\",\n          display: \"flex\",\n          justifyContent: \"center\",\n          marginBottom: \"20px\"\n        },\n        button: {\n          minWidth: \"150px\"\n        },\n        formControl: {\n          margin: 0,\n          display: \"flex\",\n          wrap: \"nowrap\"\n        },\n        root: {\n          width: \"100%\"\n        },\n        toolbar: {\n          display: \"flex\"\n        },\n        select: {\n          width: \"170px\",\n          marginRight: \"10px\",\n          zIndex: 100\n        },\n        zoom: {\n          marginLeft: \"auto\"\n        }\n      };\n      var phylocanvasComponent = this.state.phyloData === \"undefined\" ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"20px\",\n          width: \"100%\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__.default, {\n        variant: \"outlined\",\n        severity: \"warning\"\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"subtitle1\"\n      }, \"The NJ tree and MSA were not generated because chewBBACA determined that this locus does not have valid alleles or has only one valid allele.\"))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_hoc_Aux__WEBPACK_IMPORTED_MODULE_1__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"40px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          width: \"100%\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__.default, {\n        variant: \"outlined\",\n        severity: \"info\"\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"subtitle1\"\n      }, \"Note: the first number of the name of each leaf corresponds to the order the sequence appears in the input sequence file. For example: '1_5' means that the first sequence of the input file is named '5'.\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"10px\",\n          width: \"100%\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__.default, {\n        variant: \"outlined\",\n        severity: \"info\"\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"subtitle1\"\n      }, \"If a tree is not being displayed it means that the distance between alleles is 0 and Phyloncavas won't render the tree.\")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"40px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_9__.default, {\n        defaultExpanded: true\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionSummary__WEBPACK_IMPORTED_MODULE_10__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"h5\",\n        className: _SchemaEvaluatorIndividual_css__WEBPACK_IMPORTED_MODULE_2__.default.title\n      }, \"NJ tree\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_11__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: style.root\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_12__.default, {\n        container: true,\n        style: style.toolbar\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: style.select\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, null, \"Tree type:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_select__WEBPACK_IMPORTED_MODULE_13__.default, {\n        closeMenuOnSelect: false,\n        options: treeTypeOption,\n        onChange: function onChange(val) {\n          _this2.handleSelectChange(\"treeType\", val);\n        },\n        value: treeTypeOption[this.state.treeType]\n      })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_FormControlLabel__WEBPACK_IMPORTED_MODULE_14__.default, {\n        control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Switch__WEBPACK_IMPORTED_MODULE_15__.default, {\n          color: \"primary\",\n          onChange: function onChange() {\n            _this2.setState({\n              zoom: !_this2.state.zoom\n            });\n          },\n          checked: this.state.zoom\n        }),\n        label: \"Zoom is \".concat(this.state.zoom ? \"enabled\" : \"disabled\"),\n        style: style.zoom\n      })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_Phylocanvas__WEBPACK_IMPORTED_MODULE_5__.PhylogeneticTree, {\n        zoom: this.state.zoom,\n        treeType: treeTypeOption[this.state.treeType].label,\n        newickString: this.state.phyloData.phylo_data\n      }))))));\n      var hist_allele_sizes_x = this.state.locus_ind_data.data.allele_sizes;\n      var hist_allele_ids_y = this.state.locus_ind_data.data.locus_ids;\n      var ind_hist_data = [];\n      ind_hist_data.push({\n        x: hist_allele_sizes_x,\n        y: hist_allele_ids_y,\n        type: \"histogram\",\n        name: \"Locus Details\"\n      });\n      var ind_hist = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_plotly_js__WEBPACK_IMPORTED_MODULE_4__.default, {\n        data: ind_hist_data,\n        layout: {\n          title: {\n            text: this.state.locus_ind_data.locus_name\n          },\n          xaxis: {\n            title: {\n              text: \"Sequence size in bp\"\n            }\n          },\n          yaxis: {\n            title: {\n              text: \"Number of Alleles\"\n            }\n          }\n        },\n        useResizeHandler: true,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        },\n        line: {\n          width: 1\n        }\n      }); // Build scatter\n\n      var scatter_allele_ids_x = this.state.locus_ind_data.data.locus_ids.map(function (id) {\n        return id.split(\"_\")[id.split(\"_\").length - 1];\n      });\n      var scatter_allele_sizes_y = this.state.locus_ind_data.data.allele_sizes;\n      var ind_scatter_data = [];\n      ind_scatter_data.push({\n        x: scatter_allele_ids_x,\n        y: scatter_allele_sizes_y,\n        type: \"scatter\",\n        name: \"Locus Details\",\n        mode: \"markers\"\n      });\n      var ind_scatter = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_plotly_js__WEBPACK_IMPORTED_MODULE_4__.default, {\n        data: ind_scatter_data,\n        layout: {\n          title: {\n            text: this.state.locus_ind_data.locus_name\n          },\n          xaxis: {\n            title: {\n              text: \"Allele ID\",\n              tick0: 0,\n              dtick: 1\n            }\n          },\n          yaxis: {\n            title: {\n              text: \"Sequence size in bp\",\n              tick0: 0,\n              dtick: 1\n            }\n          },\n          hovermode: \"closest\"\n        },\n        useResizeHandler: true,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        },\n        line: {\n          width: 1\n        }\n      }); // Build table with additional information\n\n      var cdsTableInfo = this.state.cds_df_data;\n      var alleleShorterColumn = Object.keys(this.state.cds_df_data).find(function (k) {\n        return k.includes(\"Alleles shorter\");\n      });\n      var indData = {\n        size_range: this.state.locus_ind_data.data.size_range,\n        alleles_median: this.state.locus_ind_data.data.alleles_median,\n        alleles_mode: this.state.locus_ind_data.data.alleles_mode\n      };\n      var indTableData = [_objectSpread(_objectSpread({}, cdsTableInfo), indData)];\n      var indTableColumns = [{\n        name: \"Gene\",\n        label: \"Locus\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Number of alleles\",\n        label: \"Number of Alleles\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Alleles not multiple of 3\",\n        label: \"Alleles not multiple of 3\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Alleles w/ >1 stop codons\",\n        label: \"Alleles w/ >1 stop codons\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Alleles wo/ Start/Stop Codon\",\n        label: \"Alleles wo/ Start/Stop Codon\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: alleleShorterColumn,\n        label: alleleShorterColumn,\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Missing Allele IDs\",\n        label: \"Missing Allele IDs\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          },\n          customBodyRender: function customBodyRender(value, tableMeta, updateValue) {\n            return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null, value.join(\", \"));\n          }\n        }\n      }, {\n        name: \"CDS\",\n        label: \"Valid Alleles\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"size_range\",\n        label: \"Size Range (bp)\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"alleles_median\",\n        label: \"Alleles Median\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"alleles_mode\",\n        label: \"Alleles Mode\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }];\n      var indTableOptions = {\n        responsive: \"vertical\",\n        selectableRowsHeader: false,\n        selectableRows: \"none\",\n        selectableRowsOnClick: false,\n        print: false,\n        download: false,\n        filter: false,\n        search: false,\n        viewColumns: false,\n        pagination: false\n      };\n      var indTable = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_styles__WEBPACK_IMPORTED_MODULE_16__.default, {\n        theme: this.getMuiTheme()\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(mui_datatables__WEBPACK_IMPORTED_MODULE_3__.default, {\n        title: \"Locus information\",\n        data: indTableData,\n        columns: indTableColumns,\n        options: indTableOptions\n      }));\n      var excTableColumns = [{\n        name: \"allele\",\n        label: \"Allele\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"exception\",\n        label: \"Exceptions\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }];\n      var excTableOptions = {\n        responsive: \"vertical\",\n        selectableRowsHeader: false,\n        selectableRows: \"none\",\n        selectableRowsOnClick: false,\n        print: false,\n        download: false,\n        filter: false,\n        search: false,\n        viewColumns: false,\n        pagination: true\n      };\n      var excTable = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_styles__WEBPACK_IMPORTED_MODULE_16__.default, {\n        theme: this.getMuiTheme()\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(mui_datatables__WEBPACK_IMPORTED_MODULE_3__.default, {\n        title: \"Exceptions\",\n        data: this.state.exceptions,\n        columns: excTableColumns,\n        options: excTableOptions\n      }));\n\n      var msa_options = _objectSpread(_objectSpread({}, this.state.testMSA), {}, {\n        colorScheme: \"clustal2\",\n        height: 1000,\n        width: 1500,\n        barMethod: \"information-content\"\n      });\n\n      var msa_component = this.state.testMSA === \"undefined\" ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"40px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_9__.default, {\n        defaultExpanded: true\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionSummary__WEBPACK_IMPORTED_MODULE_10__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"h5\",\n        className: _SchemaEvaluatorIndividual_css__WEBPACK_IMPORTED_MODULE_2__.default.title\n      }, \"Multiple Sequence Analysis\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_11__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        id: \"msa-viewer\",\n        style: {\n          padding: \"16px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"subtitle1\"\n      }, \"To analyse the alignment please hover over the alignment until the hand cursor appears and then drag it to see the remaining data.\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"subtitle1\"\n      }, \"Note: the gray graph above the alignment represents the information entropy after Shannon of a column (scaled).\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_msa_viewer__WEBPACK_IMPORTED_MODULE_17__.default, msa_options)))));\n      var locusIndHist = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginBottom: \"2%\",\n          marginTop: \"3%\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_9__.default, {\n        defaultExpanded: true\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_11__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        className: _SchemaEvaluatorIndividual_css__WEBPACK_IMPORTED_MODULE_2__.default.mainPaper,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: style.buttonBar\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Button__WEBPACK_IMPORTED_MODULE_18__.default, {\n        style: style.button,\n        className: \"\".concat(this.state.indTabValue === 0 && _SchemaEvaluatorIndividual_css__WEBPACK_IMPORTED_MODULE_2__.default.tabButton),\n        onClick: function onClick() {\n          _this2.indPlotChangeHandler(0);\n        }\n      }, \"Histogram\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Button__WEBPACK_IMPORTED_MODULE_18__.default, {\n        style: style.button,\n        className: \"\".concat(this.state.indTabValue === 1 && _SchemaEvaluatorIndividual_css__WEBPACK_IMPORTED_MODULE_2__.default.tabButton),\n        onClick: function onClick() {\n          _this2.indPlotChangeHandler(1);\n        }\n      }, \"Scatter\")), this.state.indTabValue === 0 && ind_hist, this.state.indTabValue === 1 && ind_scatter)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"20px\"\n        }\n      }, indTable), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"20px\"\n        }\n      }, excTable));\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_hoc_Aux__WEBPACK_IMPORTED_MODULE_1__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        id: \"locus-ind\",\n        style: {\n          marginTop: \"40px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"20px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"h5\",\n        className: _SchemaEvaluatorIndividual_css__WEBPACK_IMPORTED_MODULE_2__.default.title\n      }, \"Locus Individual Analysis\")), locusIndHist, phylocanvasComponent, msa_component)));\n    }\n  }]);\n\n  return SchemaEvaluator;\n}(react__WEBPACK_IMPORTED_MODULE_0__.Component);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SchemaEvaluator);\n\n//# sourceURL=webpack://test_react/./src/components/SchemaEvaluatorIndividual.js?");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var _hoc_Aux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../hoc/Aux */ \"./src/hoc/Aux.js\");\n/* harmony import */ var _SchemaEvaluatorIndividual_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./SchemaEvaluatorIndividual.css */ \"./src/components/SchemaEvaluatorIndividual.css\");\n/* harmony import */ var _material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @material-ui/core/Grid */ \"./node_modules/@material-ui/core/esm/Grid/Grid.js\");\n/* harmony import */ var _material_ui_core_Switch__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @material-ui/core/Switch */ \"./node_modules/@material-ui/core/esm/Switch/Switch.js\");\n/* harmony import */ var _material_ui_core_Button__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @material-ui/core/Button */ \"./node_modules/@material-ui/core/esm/Button/Button.js\");\n/* harmony import */ var _material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @material-ui/core/Typography */ \"./node_modules/@material-ui/core/esm/Typography/Typography.js\");\n/* harmony import */ var _material_ui_core_FormControlLabel__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @material-ui/core/FormControlLabel */ \"./node_modules/@material-ui/core/esm/FormControlLabel/FormControlLabel.js\");\n/* harmony import */ var _material_ui_core_styles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @material-ui/core/styles */ \"./node_modules/@material-ui/core/esm/styles/createMuiTheme.js\");\n/* harmony import */ var _material_ui_core_styles__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @material-ui/core/styles */ \"./node_modules/@material-ui/styles/esm/ThemeProvider/ThemeProvider.js\");\n/* harmony import */ var _material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @material-ui/core/Accordion */ \"./node_modules/@material-ui/core/esm/Accordion/Accordion.js\");\n/* harmony import */ var _material_ui_core_AccordionSummary__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @material-ui/core/AccordionSummary */ \"./node_modules/@material-ui/core/esm/AccordionSummary/AccordionSummary.js\");\n/* harmony import */ var _material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @material-ui/core/AccordionDetails */ \"./node_modules/@material-ui/core/esm/AccordionDetails/AccordionDetails.js\");\n/* harmony import */ var _material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @material-ui/lab/Alert */ \"./node_modules/@material-ui/lab/esm/Alert/Alert.js\");\n/* harmony import */ var react_select__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! react-select */ \"./node_modules/react-select/dist/react-select.browser.esm.js\");\n/* harmony import */ var mui_datatables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! mui-datatables */ \"./node_modules/mui-datatables/dist/index.js\");\n/* harmony import */ var react_plotly_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-plotly.js */ \"./node_modules/react-plotly.js/react-plotly.js\");\n/* harmony import */ var react_msa_viewer__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! react-msa-viewer */ \"./node_modules/react-msa-viewer/dist/index.esm.min.js\");\n/* harmony import */ var _Phylocanvas__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Phylocanvas */ \"./src/components/Phylocanvas.js\");\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n // Material-UI components\n\n\n\n\n\n\n // Material-UI ExpansionPanel components\n\n\n\n // Material-UI Lab components\n\n // react-select import\n\n // Material-UI Datatables\n\n // Plotly.js\n\n // MSAViewer\n\n // Phylocanvas\n\n\n\nvar SchemaEvaluator = /*#__PURE__*/function (_Component) {\n  _inherits(SchemaEvaluator, _Component);\n\n  var _super = _createSuper(SchemaEvaluator);\n\n  function SchemaEvaluator() {\n    var _this;\n\n    _classCallCheck(this, SchemaEvaluator);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      locus_ind_data: _preComputedDataInd,\n      cds_df_data: _cdsDf,\n      exceptions: _exceptions,\n      testMSA: _msaData,\n      phyloData: _phyloData,\n      indTabValue: 0,\n      treeType: 0,\n      zoom: false\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"getMuiTheme\", function () {\n      return (0,_material_ui_core_styles__WEBPACK_IMPORTED_MODULE_6__.default)({\n        overrides: {\n          MUIDataTableToolbar: {\n            titleText: {\n              color: \"#bb7944\"\n            }\n          }\n        }\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"indPlotChangeHandler\", function (value) {\n      _this.setState({\n        indTabValue: value\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleSelectChange\", function (selectType, val) {\n      var newState = {};\n      newState[selectType] = val.value;\n\n      _this.setState(newState);\n    });\n\n    return _this;\n  }\n\n  _createClass(SchemaEvaluator, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      // Tree type options for Phylocanvas\n      var treeTypeOption = [\"circular\", \"rectangular\", \"diagonal\", \"hierarchical\", \"radial\"].map(function (v, i) {\n        return {\n          label: v,\n          value: i\n        };\n      });\n      var style = {\n        buttonBar: {\n          overflowX: \"auto\",\n          display: \"flex\",\n          justifyContent: \"center\",\n          marginBottom: \"20px\"\n        },\n        button: {\n          minWidth: \"150px\"\n        },\n        formControl: {\n          margin: 0,\n          display: \"flex\",\n          wrap: \"nowrap\"\n        },\n        root: {\n          width: \"100%\"\n        },\n        toolbar: {\n          display: \"flex\"\n        },\n        select: {\n          width: \"170px\",\n          marginRight: \"10px\",\n          zIndex: 100\n        },\n        zoom: {\n          marginLeft: \"auto\"\n        }\n      };\n      var phylocanvasComponent = this.state.phyloData === \"undefined\" ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"20px\",\n          width: \"100%\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__.default, {\n        variant: \"outlined\",\n        severity: \"warning\"\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"subtitle1\"\n      }, \"The NJ tree and MSA were not generated because chewBBACA determined that this locus does not have valid alleles or has only one valid allele.\"))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_hoc_Aux__WEBPACK_IMPORTED_MODULE_1__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"40px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          width: \"100%\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__.default, {\n        variant: \"outlined\",\n        severity: \"info\"\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"subtitle1\"\n      }, \"Note: the first number of the name of each leaf corresponds to the order the sequence appears in the input sequence file. For example: '1_5' means that the first sequence of the input file is named '5'.\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"10px\",\n          width: \"100%\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_lab_Alert__WEBPACK_IMPORTED_MODULE_7__.default, {\n        variant: \"outlined\",\n        severity: \"info\"\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"subtitle1\"\n      }, \"If a tree is not being displayed it means that the distance between alleles is 0 and Phylocanvas won't render the tree.\")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"40px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_9__.default, {\n        defaultExpanded: true\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionSummary__WEBPACK_IMPORTED_MODULE_10__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"h5\",\n        className: _SchemaEvaluatorIndividual_css__WEBPACK_IMPORTED_MODULE_2__.default.title\n      }, \"NJ tree\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_11__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: style.root\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_12__.default, {\n        container: true,\n        style: style.toolbar\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: style.select\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, null, \"Tree type:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_select__WEBPACK_IMPORTED_MODULE_13__.default, {\n        closeMenuOnSelect: false,\n        options: treeTypeOption,\n        onChange: function onChange(val) {\n          _this2.handleSelectChange(\"treeType\", val);\n        },\n        value: treeTypeOption[this.state.treeType]\n      })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_FormControlLabel__WEBPACK_IMPORTED_MODULE_14__.default, {\n        control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Switch__WEBPACK_IMPORTED_MODULE_15__.default, {\n          color: \"primary\",\n          onChange: function onChange() {\n            _this2.setState({\n              zoom: !_this2.state.zoom\n            });\n          },\n          checked: this.state.zoom\n        }),\n        label: \"Zoom is \".concat(this.state.zoom ? \"enabled\" : \"disabled\"),\n        style: style.zoom\n      })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_Phylocanvas__WEBPACK_IMPORTED_MODULE_5__.PhylogeneticTree, {\n        zoom: this.state.zoom,\n        treeType: treeTypeOption[this.state.treeType].label,\n        newickString: this.state.phyloData.phylo_data\n      }))))));\n      var hist_allele_sizes_x = this.state.locus_ind_data.data.allele_sizes;\n      var hist_allele_ids_y = this.state.locus_ind_data.data.locus_ids;\n      var ind_hist_data = [];\n      ind_hist_data.push({\n        x: hist_allele_sizes_x,\n        y: hist_allele_ids_y,\n        type: \"histogram\",\n        name: \"Locus Details\"\n      });\n      var ind_hist = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_plotly_js__WEBPACK_IMPORTED_MODULE_4__.default, {\n        data: ind_hist_data,\n        layout: {\n          title: {\n            text: this.state.locus_ind_data.locus_name\n          },\n          xaxis: {\n            title: {\n              text: \"Sequence size in bp\"\n            }\n          },\n          yaxis: {\n            title: {\n              text: \"Number of Alleles\"\n            }\n          }\n        },\n        useResizeHandler: true,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        },\n        line: {\n          width: 1\n        }\n      }); // Build scatter\n\n      var scatter_allele_ids_x = this.state.locus_ind_data.data.locus_ids.map(function (id) {\n        return id.split(\"_\")[id.split(\"_\").length - 1];\n      });\n      var scatter_allele_sizes_y = this.state.locus_ind_data.data.allele_sizes;\n      var ind_scatter_data = [];\n      ind_scatter_data.push({\n        x: scatter_allele_ids_x,\n        y: scatter_allele_sizes_y,\n        type: \"scatter\",\n        name: \"Locus Details\",\n        mode: \"markers\"\n      });\n      var ind_scatter = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_plotly_js__WEBPACK_IMPORTED_MODULE_4__.default, {\n        data: ind_scatter_data,\n        layout: {\n          title: {\n            text: this.state.locus_ind_data.locus_name\n          },\n          xaxis: {\n            title: {\n              text: \"Allele ID\",\n              tick0: 0,\n              dtick: 1\n            }\n          },\n          yaxis: {\n            title: {\n              text: \"Sequence size in bp\",\n              tick0: 0,\n              dtick: 1\n            }\n          },\n          hovermode: \"closest\"\n        },\n        useResizeHandler: true,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        },\n        line: {\n          width: 1\n        }\n      }); // Build table with additional information\n\n      var cdsTableInfo = this.state.cds_df_data;\n      var alleleShorterColumn = Object.keys(this.state.cds_df_data).find(function (k) {\n        return k.includes(\"Alleles shorter\");\n      });\n      var indData = {\n        size_range: this.state.locus_ind_data.data.size_range,\n        alleles_median: this.state.locus_ind_data.data.alleles_median,\n        alleles_mode: this.state.locus_ind_data.data.alleles_mode\n      };\n      var indTableData = [_objectSpread(_objectSpread({}, cdsTableInfo), indData)];\n      var indTableColumns = [{\n        name: \"Gene\",\n        label: \"Locus\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Number of alleles\",\n        label: \"Number of Alleles\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Alleles not multiple of 3\",\n        label: \"Alleles not multiple of 3\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Alleles w/ >1 stop codons\",\n        label: \"Alleles w/ >1 stop codons\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Alleles wo/ Start/Stop Codon\",\n        label: \"Alleles wo/ Start/Stop Codon\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: alleleShorterColumn,\n        label: alleleShorterColumn,\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"Missing Allele IDs\",\n        label: \"Missing Allele IDs\",\n        options: {\n          filter: true,\n          sort: true,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          },\n          customBodyRender: function customBodyRender(value, tableMeta, updateValue) {\n            return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null, value.join(\", \"));\n          }\n        }\n      }, {\n        name: \"CDS\",\n        label: \"Valid Alleles\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"size_range\",\n        label: \"Size Range (bp)\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"alleles_median\",\n        label: \"Alleles Median\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"alleles_mode\",\n        label: \"Alleles Mode\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }];\n      var indTableOptions = {\n        responsive: \"vertical\",\n        selectableRowsHeader: false,\n        selectableRows: \"none\",\n        selectableRowsOnClick: false,\n        print: false,\n        download: false,\n        filter: false,\n        search: false,\n        viewColumns: false,\n        pagination: false\n      };\n      var indTable = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_styles__WEBPACK_IMPORTED_MODULE_16__.default, {\n        theme: this.getMuiTheme()\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(mui_datatables__WEBPACK_IMPORTED_MODULE_3__.default, {\n        title: \"Locus information\",\n        data: indTableData,\n        columns: indTableColumns,\n        options: indTableOptions\n      }));\n      var excTableColumns = [{\n        name: \"allele\",\n        label: \"Allele\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }, {\n        name: \"exception\",\n        label: \"Exceptions\",\n        options: {\n          filter: false,\n          sort: false,\n          display: true,\n          setCellHeaderProps: function setCellHeaderProps(value) {\n            return {\n              style: {\n                fontWeight: \"bold\"\n              }\n            };\n          }\n        }\n      }];\n      var excTableOptions = {\n        responsive: \"vertical\",\n        selectableRowsHeader: false,\n        selectableRows: \"none\",\n        selectableRowsOnClick: false,\n        print: false,\n        download: false,\n        filter: false,\n        search: false,\n        viewColumns: false,\n        pagination: true\n      };\n      var excTable = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_styles__WEBPACK_IMPORTED_MODULE_16__.default, {\n        theme: this.getMuiTheme()\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(mui_datatables__WEBPACK_IMPORTED_MODULE_3__.default, {\n        title: \"Exceptions\",\n        data: this.state.exceptions,\n        columns: excTableColumns,\n        options: excTableOptions\n      }));\n\n      var msa_options = _objectSpread(_objectSpread({}, this.state.testMSA), {}, {\n        colorScheme: \"clustal2\",\n        height: 1000,\n        width: 1500,\n        barMethod: \"information-content\"\n      });\n\n      var msa_component = this.state.testMSA === \"undefined\" ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"40px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_9__.default, {\n        defaultExpanded: true\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionSummary__WEBPACK_IMPORTED_MODULE_10__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"h5\",\n        className: _SchemaEvaluatorIndividual_css__WEBPACK_IMPORTED_MODULE_2__.default.title\n      }, \"Multiple Sequence Analysis\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_11__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        id: \"msa-viewer\",\n        style: {\n          padding: \"16px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"subtitle1\"\n      }, \"To analyse the alignment please hover over the alignment until the hand cursor appears and then drag it to see the remaining data.\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"subtitle1\"\n      }, \"Note: the gray graph above the alignment represents the information entropy after Shannon of a column (scaled).\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_msa_viewer__WEBPACK_IMPORTED_MODULE_17__.default, msa_options)))));\n      var locusIndHist = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginBottom: \"2%\",\n          marginTop: \"3%\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Accordion__WEBPACK_IMPORTED_MODULE_9__.default, {\n        defaultExpanded: true\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_AccordionDetails__WEBPACK_IMPORTED_MODULE_11__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        className: _SchemaEvaluatorIndividual_css__WEBPACK_IMPORTED_MODULE_2__.default.mainPaper,\n        style: {\n          width: \"100%\",\n          height: \"100%\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: style.buttonBar\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Button__WEBPACK_IMPORTED_MODULE_18__.default, {\n        style: style.button,\n        className: \"\".concat(this.state.indTabValue === 0 && _SchemaEvaluatorIndividual_css__WEBPACK_IMPORTED_MODULE_2__.default.tabButton),\n        onClick: function onClick() {\n          _this2.indPlotChangeHandler(0);\n        }\n      }, \"Histogram\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Button__WEBPACK_IMPORTED_MODULE_18__.default, {\n        style: style.button,\n        className: \"\".concat(this.state.indTabValue === 1 && _SchemaEvaluatorIndividual_css__WEBPACK_IMPORTED_MODULE_2__.default.tabButton),\n        onClick: function onClick() {\n          _this2.indPlotChangeHandler(1);\n        }\n      }, \"Scatter\")), this.state.indTabValue === 0 && ind_hist, this.state.indTabValue === 1 && ind_scatter)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"20px\"\n        }\n      }, indTable), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"20px\"\n        }\n      }, excTable));\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_hoc_Aux__WEBPACK_IMPORTED_MODULE_1__.default, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        id: \"locus-ind\",\n        style: {\n          marginTop: \"40px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n        style: {\n          marginTop: \"20px\"\n        }\n      }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_8__.default, {\n        variant: \"h5\",\n        className: _SchemaEvaluatorIndividual_css__WEBPACK_IMPORTED_MODULE_2__.default.title\n      }, \"Locus Individual Analysis\")), locusIndHist, phylocanvasComponent, msa_component)));\n    }\n  }]);\n\n  return SchemaEvaluator;\n}(react__WEBPACK_IMPORTED_MODULE_0__.Component);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SchemaEvaluator);\n\n//# sourceURL=webpack://test_react/./src/components/SchemaEvaluatorIndividual.js?");
 
 /***/ }),