grnsight 4.0.0 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (458) hide show
  1. package/.travis.yml +3 -1
  2. package/GRNsight - Beta.html +194 -0
  3. package/Gemfile.lock +259 -0
  4. package/README.md +2 -2
  5. package/_gh_pages/about.html +360 -45
  6. package/_gh_pages/assets/css/footer.css +3 -0
  7. package/_gh_pages/assets/css/main.css +28 -14
  8. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_estimation_output_binary-no-targetless-genes_sif.png +0 -0
  9. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_estimation_output_binary_sif.png +0 -0
  10. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_graphml_3-edges-and-footer.png +0 -0
  11. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_graphml_header-and-3-nodes.png +0 -0
  12. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_graphml_output_3-edges-and-footer.png +0 -0
  13. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_graphml_output_header-and-3-nodes.png +0 -0
  14. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_input_binary-no-targetless-genes_sif.png +0 -0
  15. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_input_binary_sif.png +0 -0
  16. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_input_concatenated-no-targetless-genes_sif.png +0 -0
  17. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_input_concatenated_sif.png +0 -0
  18. package/_gh_pages/assets/images/Choe-Shin_CMSI402-poster-session_20180430.jpg +0 -0
  19. package/_gh_pages/assets/images/Choe_SCCUR_2017.jpg +0 -0
  20. package/_gh_pages/assets/images/Dahlquist-Choe-Shin_CMSI402-poster-session_20180430.jpg +0 -0
  21. package/_gh_pages/assets/images/Dionisio-Dahlquist_GRNsight-shades_20170506.jpg +0 -0
  22. package/_gh_pages/assets/images/Klein_Samdarshi_TriBeta_2018_20180317.jpg +0 -0
  23. package/_gh_pages/assets/images/Shin_SCCUR_2017.jpg +0 -0
  24. package/{documents/manuscripts/peerj-computerscience-2016/figures/submitted-versions/Figure1_zoom145_900pix-wide.png → _gh_pages/assets/images/demo-3_network-sheet.png} +0 -0
  25. package/{documents/manuscripts/peerj-computerscience-2016/figures/submitted-versions/Figure2_zoom145_900pix-wide.png → _gh_pages/assets/images/demo-4_network-optimized-weights-sheet.png} +0 -0
  26. package/_gh_pages/assets/images/gene-pages-0.png +0 -0
  27. package/_gh_pages/assets/images/gene-pages-1.png +0 -0
  28. package/_gh_pages/assets/images/gene-pages-2.png +0 -0
  29. package/_gh_pages/assets/images/gene-pages-3.png +0 -0
  30. package/_gh_pages/assets/images/grnsight2020.png +0 -0
  31. package/_gh_pages/assets/images/v3demo2-grid+nodecoloring.png +0 -0
  32. package/_gh_pages/assets/images/v3demo2-nodecoloring.png +0 -0
  33. package/_gh_pages/assets/images/v3demo2.png +0 -0
  34. package/_gh_pages/assets/js/ga-report.js +11 -11
  35. package/_gh_pages/assets/js/iframeResizer.min.js +9 -0
  36. package/_gh_pages/assets/js/main.js +43 -43
  37. package/_gh_pages/beta.html +29 -24
  38. package/_gh_pages/contact.html +31 -31
  39. package/_gh_pages/coverage/coverage.json +1 -0
  40. package/_gh_pages/coverage/coverage.raw.json +1 -0
  41. package/_gh_pages/coverage/lcov-report/base.css +223 -0
  42. package/_gh_pages/coverage/lcov-report/block-navigation.js +63 -0
  43. package/_gh_pages/coverage/lcov-report/controllers/additional-sheet-parser.js.html +330 -0
  44. package/_gh_pages/coverage/lcov-report/controllers/constants.js.html +243 -0
  45. package/_gh_pages/coverage/lcov-report/controllers/export-controller.js.html +285 -0
  46. package/_gh_pages/coverage/lcov-report/controllers/exporters/graphml.js.html +405 -0
  47. package/_gh_pages/coverage/lcov-report/controllers/exporters/index.html +110 -0
  48. package/_gh_pages/coverage/lcov-report/controllers/exporters/sif.js.html +150 -0
  49. package/_gh_pages/coverage/lcov-report/controllers/helpers.js.html +114 -0
  50. package/_gh_pages/coverage/lcov-report/controllers/import-controller.js.html +233 -0
  51. package/_gh_pages/coverage/lcov-report/controllers/importers/graphml.js.html +716 -0
  52. package/_gh_pages/coverage/lcov-report/controllers/importers/index.html +106 -0
  53. package/_gh_pages/coverage/lcov-report/controllers/importers/sif.js.html +488 -0
  54. package/_gh_pages/coverage/lcov-report/controllers/index.html +162 -0
  55. package/_gh_pages/coverage/lcov-report/controllers/semantic-checker.js.html +810 -0
  56. package/_gh_pages/coverage/lcov-report/controllers/spreadsheet-controller.js.html +1779 -0
  57. package/_gh_pages/coverage/lcov-report/index.html +136 -0
  58. package/_gh_pages/coverage/lcov-report/prettify.css +1 -0
  59. package/_gh_pages/coverage/lcov-report/prettify.js +1 -0
  60. package/_gh_pages/coverage/lcov-report/server/controllers/additional-sheet-parser.js.html +330 -0
  61. package/_gh_pages/coverage/lcov-report/server/controllers/constants.js.html +243 -0
  62. package/_gh_pages/coverage/lcov-report/server/controllers/export-controller.js.html +285 -0
  63. package/_gh_pages/coverage/lcov-report/server/controllers/exporters/graphml.js.html +405 -0
  64. package/_gh_pages/coverage/lcov-report/server/controllers/exporters/index.html +110 -0
  65. package/_gh_pages/coverage/lcov-report/server/controllers/exporters/sif.js.html +150 -0
  66. package/_gh_pages/coverage/lcov-report/server/controllers/graphml-constants.js.html +585 -0
  67. package/_gh_pages/coverage/lcov-report/server/controllers/helpers.js.html +114 -0
  68. package/_gh_pages/coverage/lcov-report/server/controllers/import-controller.js.html +237 -0
  69. package/_gh_pages/coverage/lcov-report/server/controllers/importers/graphml.js.html +585 -0
  70. package/_gh_pages/coverage/lcov-report/server/controllers/importers/index.html +110 -0
  71. package/_gh_pages/coverage/lcov-report/server/controllers/importers/sif.js.html +492 -0
  72. package/_gh_pages/coverage/lcov-report/server/controllers/index.html +188 -0
  73. package/_gh_pages/coverage/lcov-report/server/controllers/semantic-checker.js.html +810 -0
  74. package/_gh_pages/coverage/lcov-report/server/controllers/spreadsheet-controller.js.html +1779 -0
  75. package/_gh_pages/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  76. package/_gh_pages/coverage/lcov-report/sorter.js +158 -0
  77. package/_gh_pages/coverage/lcov-report/web-client/public/js/grnstate.js.html +225 -0
  78. package/_gh_pages/coverage/lcov-report/web-client/public/js/index.html +97 -0
  79. package/_gh_pages/coverage/lcov.info +49 -0
  80. package/_gh_pages/documentation.html +998 -320
  81. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.aux +47 -0
  82. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.bbl +73 -0
  83. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.blg +52 -0
  84. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.log +1056 -0
  85. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.out +7 -0
  86. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.synctex.gz +0 -0
  87. package/_gh_pages/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_text-only_revised-Dondi.docx +0 -0
  88. package/_gh_pages/encryption/server.cert +21 -0
  89. package/_gh_pages/encryption/server.key +28 -0
  90. package/_gh_pages/favicon.ico +0 -0
  91. package/_gh_pages/index.html +45 -22
  92. package/_gh_pages/links.html +47 -28
  93. package/_gh_pages/news.html +103 -21
  94. package/_gh_pages/onlyfooter.html +78 -0
  95. package/_gh_pages/onlyheader.html +64 -0
  96. package/_gh_pages/onlysidebar.html +73 -0
  97. package/_gh_pages/package-lock.json +14048 -0
  98. package/_gh_pages/people.html +129 -40
  99. package/_gh_pages/privacy.html +23 -17
  100. package/_gh_pages/publications.html +75 -33
  101. package/_gh_pages/robots.txt +1 -0
  102. package/_gh_pages/sitemap.xml +87 -74
  103. package/_gh_pages/test-files/import-samples/attributes.graphml +40 -0
  104. package/_gh_pages/test-files/import-samples/port.graphml +32 -0
  105. package/_gh_pages/test-files/import-samples/simple.graphml +31 -0
  106. package/_gh_pages/web-client/public/js/grnsight.min.js +2347 -0
  107. package/_gh_pages/web-client/public/stylesheets/grnsight.css +443 -0
  108. package/coverage/coverage.json +1 -1
  109. package/coverage/lcov.info +1847 -1142
  110. package/database/README.md +1 -0
  111. package/database/network-database/README.md +44 -0
  112. package/database/network-database/schema.sql +24 -0
  113. package/database/network-database/scripts/filter_genes.py +76 -0
  114. package/database/network-database/scripts/generate_network.py +199 -0
  115. package/database/network-database/scripts/generate_sgd_network_from_yeastract_network.py +120 -0
  116. package/database/network-database/scripts/loader.py +78 -0
  117. package/package.json +20 -11
  118. package/server/app.js +7 -2
  119. package/server/config/config.js +12 -3
  120. package/server/controllers/additional-sheet-parser.js +292 -55
  121. package/server/controllers/constants.js +4 -37
  122. package/server/controllers/custom-workbook-controller.js +66 -0
  123. package/server/controllers/demo-workbooks.js +5973 -0
  124. package/server/controllers/export-constants.js +78 -0
  125. package/server/controllers/export-controller.js +4 -3
  126. package/server/controllers/exporters/graphml.js +15 -15
  127. package/server/controllers/exporters/sif.js +7 -7
  128. package/server/controllers/exporters/xlsx.js +110 -34
  129. package/server/controllers/expression-database-controller.js +19 -0
  130. package/server/controllers/expression-sheet-parser.js +170 -0
  131. package/server/controllers/graphml-constants.js +0 -17
  132. package/server/controllers/helpers.js +25 -1
  133. package/server/controllers/import-controller.js +2 -2
  134. package/server/controllers/importers/graphml.js +17 -20
  135. package/server/controllers/importers/sif.js +22 -18
  136. package/server/controllers/network-database-controller.js +18 -0
  137. package/server/controllers/network-sheet-parser.js +307 -0
  138. package/server/controllers/semantic-checker.js +30 -162
  139. package/server/controllers/sif-constants.js +36 -0
  140. package/server/controllers/spreadsheet-controller.js +277 -425
  141. package/server/controllers/workbook-constants.js +521 -0
  142. package/server/dals/expression-dal.js +122 -0
  143. package/server/dals/network-dal.js +96 -0
  144. package/test/additional-sheet-parser-tests.js +147 -38
  145. package/test/api-tests.js +3 -6
  146. package/test/errors-adjacency-matrix-modifications.js +30 -29
  147. package/test/errors-graph-tests.js +4 -4
  148. package/test/errors-sheet-modifications.js +10 -2
  149. package/test/export-tests.js +187 -60
  150. package/test/expression-data-import-tests.js +113 -0
  151. package/test/grnstate-tests.js +8 -2
  152. package/test/import-graphml-tests.js +59 -40
  153. package/test/import-sif-tests.js +50 -37
  154. package/test/test.js +554 -91
  155. package/test/warnings-adjacency-matrix-modifications.js +8 -7
  156. package/test-files/additional-sheet-test-files/optimization-diagnostics-default.xlsx +0 -0
  157. package/test-files/additional-sheet-test-files/optimization-diagnostics-extraneous-data.xlsx +0 -0
  158. package/test-files/additional-sheet-test-files/optimization-diagnostics-incorrect-MSE-gene-header.xlsx +0 -0
  159. package/test-files/additional-sheet-test-files/optimization-diagnostics-incorrect-MSE-header.xlsx +0 -0
  160. package/test-files/additional-sheet-test-files/optimization-diagnostics-incorrect-column-headers.xlsx +0 -0
  161. package/test-files/additional-sheet-test-files/optimization-diagnostics-invalid-MSE-data.xlsx +0 -0
  162. package/test-files/additional-sheet-test-files/optimization-diagnostics-invalid-value.xlsx +0 -0
  163. package/test-files/additional-sheet-test-files/optimization-diagnostics-missing-MSE-data.xlsx +0 -0
  164. package/test-files/additional-sheet-test-files/optimization-diagnostics-missing-column-headers.xlsx +0 -0
  165. package/test-files/additional-sheet-test-files/optimization-diagnostics-missing-header.xlsx +0 -0
  166. package/test-files/additional-sheet-test-files/optimization-diagnostics-unknown-parameter.xlsx +0 -0
  167. package/test-files/additional-sheet-test-files/optimization-parameters-default.xlsx +0 -0
  168. package/test-files/additional-sheet-test-files/optimization-parameters-incorrect-headers.xlsx +0 -0
  169. package/test-files/additional-sheet-test-files/optimization-parameters-invalid-optimization-parameter.xlsx +0 -0
  170. package/test-files/additional-sheet-test-files/optimization-parameters-missing-headers.xlsx +0 -0
  171. package/test-files/additional-sheet-test-files/optimization-parameters-unknown-parameter.xlsx +0 -0
  172. package/test-files/additional-sheet-test-files/two-column-sheets-extraneous-data.xlsx +0 -0
  173. package/test-files/additional-sheet-test-files/two-column-sheets-incorrect-cell-A1.xlsx +0 -0
  174. package/test-files/additional-sheet-test-files/two-column-sheets-incorrect-column-header.xlsx +0 -0
  175. package/test-files/additional-sheet-test-files/two-column-sheets-invalid-gene-length.xlsx +0 -0
  176. package/test-files/additional-sheet-test-files/two-column-sheets-invalid-gene-type.xlsx +0 -0
  177. package/test-files/additional-sheet-test-files/two-column-sheets-invalid-value.xlsx +0 -0
  178. package/test-files/additional-sheet-test-files/two-column-sheets-missing-column-header.xlsx +0 -0
  179. package/test-files/additional-sheet-test-files/two-column-sheets-special-character.xlsx +0 -0
  180. package/test-files/adjacency-matrix-modifications/asymmetric-gene-order-input.xlsx +0 -0
  181. package/test-files/adjacency-matrix-modifications/asymmetric-gene-order-output.xlsx +0 -0
  182. package/test-files/adjacency-matrix-modifications/extra-column-adjacent-input.xlsx +0 -0
  183. package/test-files/adjacency-matrix-modifications/extra-column-adjacent-output.xlsx +0 -0
  184. package/test-files/adjacency-matrix-modifications/extra-column-end-of-sheet-input.xlsx +0 -0
  185. package/test-files/adjacency-matrix-modifications/extra-column-end-of-sheet-output.xlsx +0 -0
  186. package/test-files/adjacency-matrix-modifications/extra-data-random-cell-both-output.xlsx +0 -0
  187. package/test-files/adjacency-matrix-modifications/extra-data-random-cell-network-only-input.xlsx +0 -0
  188. package/test-files/adjacency-matrix-modifications/extra-data-random-cell-network-only-output.xlsx +0 -0
  189. package/test-files/adjacency-matrix-modifications/extra-data-random-cell-network-optimized-only-output.xlsx +0 -0
  190. package/test-files/adjacency-matrix-modifications/extra-row-end-of-sheet-input.xlsx +0 -0
  191. package/test-files/adjacency-matrix-modifications/extra-row-end-of-sheet-output.xlsx +0 -0
  192. package/test-files/adjacency-matrix-modifications/incorrect-network-cell-A1.xlsx +0 -0
  193. package/test-files/adjacency-matrix-modifications/missing-column-end-input.xlsx +0 -0
  194. package/test-files/adjacency-matrix-modifications/missing-column-end-output.xlsx +0 -0
  195. package/test-files/adjacency-matrix-modifications/missing-data-input.xlsx +0 -0
  196. package/test-files/adjacency-matrix-modifications/missing-data-output.xlsx +0 -0
  197. package/test-files/adjacency-matrix-modifications/missing-row-end-input.xlsx +0 -0
  198. package/test-files/adjacency-matrix-modifications/missing-row-end-output.xlsx +0 -0
  199. package/test-files/adjacency-matrix-modifications/missing-row-middle-input.xlsx +0 -0
  200. package/test-files/adjacency-matrix-modifications/missing-row-middle-output.xlsx +0 -0
  201. package/test-files/adjacency-matrix-modifications/missing-value-bottom-corner-input.xlsx +0 -0
  202. package/test-files/adjacency-matrix-modifications/missing-value-bottom-corner-output.xlsx +0 -0
  203. package/test-files/adjacency-matrix-modifications/value-replaced-w-spaces-both-output.xlsx +0 -0
  204. package/test-files/adjacency-matrix-modifications/value-replaced-w-spaces-net-only-input.xlsx +0 -0
  205. package/test-files/adjacency-matrix-modifications/value-replaced-w-spaces-net-op-only-output.xlsx +0 -0
  206. package/test-files/adjacency-matrix-modifications/value-replaced/342/200/223w-spaces-net-only-output.xlsx +0 -0
  207. package/test-files/demo-files/15-genes_28-edges_db5_Dahlquist-data_estimation_output.xlsx +0 -0
  208. package/test-files/demo-files/15-genes_28-edges_db5_Dahlquist-data_input.xlsx +0 -0
  209. package/test-files/expression-data-test-sheets/expression_sheet_correct_numbering.xlsx +0 -0
  210. package/test-files/expression-data-test-sheets/expression_sheet_different_number_of_columns.xlsx +0 -0
  211. package/test-files/expression-data-test-sheets/expression_sheet_empty_column.xlsx +0 -0
  212. package/test-files/expression-data-test-sheets/expression_sheet_empty_row.xlsx +0 -0
  213. package/test-files/expression-data-test-sheets/expression_sheet_erroneous_data.xlsx +0 -0
  214. package/test-files/expression-data-test-sheets/expression_sheet_extra_gene_name.xlsx +0 -0
  215. package/test-files/expression-data-test-sheets/expression_sheet_incorrectly_ordered_time_points.xlsx +0 -0
  216. package/test-files/expression-data-test-sheets/expression_sheet_mismatched_case_gene_names.xlsx +0 -0
  217. package/test-files/expression-data-test-sheets/expression_sheet_mismatched_gene_names.xlsx +0 -0
  218. package/test-files/expression-data-test-sheets/expression_sheet_missing_column_header.xlsx +0 -0
  219. package/test-files/expression-data-test-sheets/expression_sheet_missing_data_error.xlsx +0 -0
  220. package/test-files/expression-data-test-sheets/expression_sheet_missing_data_ok.xlsx +0 -0
  221. package/test-files/expression-data-test-sheets/expression_sheet_missing_data_ok_export_exact.xlsx +0 -0
  222. package/test-files/expression-data-test-sheets/expression_sheet_missing_gene_name.xlsx +0 -0
  223. package/test-files/expression-data-test-sheets/expression_sheet_name_not_in_optparams.xlsx +0 -0
  224. package/test-files/expression-data-test-sheets/expression_sheet_name_not_present.xlsx +0 -0
  225. package/test-files/expression-data-test-sheets/expression_sheet_negative_time_points.xlsx +0 -0
  226. package/test-files/expression-data-test-sheets/expression_sheet_non_numerical_time_points.xlsx +0 -0
  227. package/test-files/expression-data-test-sheets/expression_sheet_not_existing.xlsx +0 -0
  228. package/test-files/expression-data-test-sheets/expression_sheet_wrong_id_label.xlsx +0 -0
  229. package/test-files/expression-data-test-sheets/expression_sheet_wrong_order_gene_names.xlsx +0 -0
  230. package/test-files/expression-data-test-sheets/expression_sheet_wrong_sheet_name_case.xlsx +0 -0
  231. package/test-files/expression-data-test-sheets/expression_sheet_wrong_sheet_name_convention.xlsx +0 -0
  232. package/test-files/gene-name-modifications/NaN-as-gene-name-input.xlsx +0 -0
  233. package/test-files/gene-name-modifications/NaN-as-gene-name-output.xlsx +0 -0
  234. package/test-files/gene-name-modifications/mismatched-case-related-input.xlsx +0 -0
  235. package/test-files/gene-name-modifications/mismatched-case-related-output.xlsx +0 -0
  236. package/test-files/gene-name-modifications/mismatched-case-unrelated-input.xlsx +0 -0
  237. package/test-files/gene-name-modifications/mismatched-case-unrelated-output.xlsx +0 -0
  238. package/test-files/graph-tests/different-sized-networks/{80-genes-0-edges.xlsx → 134-genes-0-edges.xlsx} +0 -0
  239. package/test-files/graph-tests/different-sized-networks/{45-genes-max-edges.xlsx → 44-source-genes-45-target-genes-max-edges.xlsx} +0 -0
  240. package/test-files/graph-tests/different-sized-networks/{1-gene-0-edges.xlsx → unused-files/1-gene-0-edges.xlsx} +0 -0
  241. package/test-files/graph-tests/different-sized-networks/{1-gene-1-edges.xlsx → unused-files/1-gene-1-edges.xlsx} +0 -0
  242. package/test-files/graph-tests/different-sized-networks/{10-genes-50-edges.xlsx → unused-files/10-genes-50-edges.xlsx} +0 -0
  243. package/test-files/graph-tests/different-sized-networks/{10-genes-90-edges.xlsx → unused-files/10-genes-90-edges.xlsx} +0 -0
  244. package/test-files/graph-tests/different-sized-networks/{100-genes-0-edges.xlsx → unused-files/100-genes-0-edges.xlsx} +0 -0
  245. package/test-files/graph-tests/different-sized-networks/{110-genes-0-edges.xlsx → unused-files/110-genes-0-edges.xlsx} +0 -0
  246. package/test-files/graph-tests/different-sized-networks/{120-genes-0-edges.xlsx → unused-files/120-genes-0-edges.xlsx} +0 -0
  247. package/test-files/graph-tests/different-sized-networks/{130-genes-0-edges.xlsx → unused-files/130-genes-0-edges.xlsx} +0 -0
  248. package/test-files/graph-tests/different-sized-networks/{140-genes-0-edges.xlsx → unused-files/140-genes-0-edges.xlsx} +0 -0
  249. package/test-files/graph-tests/different-sized-networks/{150-genes-10000-edges.xlsx → unused-files/150-genes-10000-edges.xlsx} +0 -0
  250. package/test-files/graph-tests/different-sized-networks/{150-genes-20000-edges.xlsx → unused-files/150-genes-20000-edges.xlsx} +0 -0
  251. package/test-files/graph-tests/different-sized-networks/{150-genes-max-edges.xlsx → unused-files/150-genes-max-edges.xlsx} +0 -0
  252. package/test-files/graph-tests/different-sized-networks/{160-genes-max-edges.xlsx → unused-files/160-genes-max-edges.xlsx} +0 -0
  253. package/test-files/graph-tests/different-sized-networks/{20-genes-max-edges.xlsx → unused-files/20-genes-max-edges.xlsx} +0 -0
  254. package/test-files/graph-tests/different-sized-networks/{25-genes-max-edges.xlsx → unused-files/25-genes-max-edges.xlsx} +0 -0
  255. package/test-files/graph-tests/different-sized-networks/{30-genes-max-edges.xlsx → unused-files/30-genes-max-edges.xlsx} +0 -0
  256. package/test-files/graph-tests/different-sized-networks/{34-genes-0-edges.xlsx → unused-files/34-genes-0-edges.xlsx} +0 -0
  257. package/test-files/graph-tests/different-sized-networks/{34-genes-40-edges.xlsx → unused-files/34-genes-40-edges.xlsx} +0 -0
  258. package/test-files/graph-tests/different-sized-networks/{34-genes-65-edges.xlsx → unused-files/34-genes-65-edges.xlsx} +0 -0
  259. package/test-files/graph-tests/different-sized-networks/{34-genes-90-edges.xlsx → unused-files/34-genes-90-edges.xlsx} +0 -0
  260. package/test-files/graph-tests/different-sized-networks/{5-genes-max-edges.xlsx → unused-files/5-genes-max-edges.xlsx} +0 -0
  261. package/test-files/graph-tests/different-sized-networks/{51-genes-max-edges.xlsx → unused-files/51-genes-max-edges.xlsx} +0 -0
  262. package/test-files/graph-tests/different-sized-networks/{52-genes-max-edges.xlsx → unused-files/52-genes-max-edges.xlsx} +0 -0
  263. package/test-files/graph-tests/different-sized-networks/{55-genes-0-edges.xlsx → unused-files/55-genes-0-edges.xlsx} +0 -0
  264. package/test-files/graph-tests/different-sized-networks/{55-genes-max-edges.xlsx → unused-files/55-genes-max-edges.xlsx} +0 -0
  265. package/test-files/graph-tests/different-sized-networks/{65-genes-0-edges.xlsx → unused-files/65-genes-0-edges.xlsx} +0 -0
  266. package/test-files/graph-tests/different-sized-networks/{7-genes-max-edges.xlsx → unused-files/7-genes-max-edges.xlsx} +0 -0
  267. package/test-files/graph-tests/different-sized-networks/{70-genes-0-edges.xlsx → unused-files/70-genes-0-edges.xlsx} +0 -0
  268. package/test-files/graph-tests/different-sized-networks/{9-genes-max-edges.xlsx → unused-files/9-genes-max-edges.xlsx} +0 -0
  269. package/test-files/graph-tests/different-sized-networks/{90-genes-0-edges.xlsx → unused-files/90-genes-0-edges.xlsx} +0 -0
  270. package/test-files/graph-tests/different-sized-networks/{regulation-matrix-documented-20140709-AllTF-all-targets.xlsx → unused-files/regulation-matrix-documented-20140709-AllTF-all-targets.xlsx} +0 -0
  271. package/test-files/node-tests/long-gene-name-no-spaces-first.xlsx +0 -0
  272. package/test-files/node-tests/long-gene-name-no-spaces-second.xlsx +0 -0
  273. package/test-files/node-tests/long-gene-name-spaces.xlsx +0 -0
  274. package/test-files/species-test-data/15-genes_28-edges_db5_Dahlquist-data_input_no-species.xlsx +0 -0
  275. package/test-files/species-test-data/15-genes_28-edges_db5_Dahlquist-data_input_with-species.xlsx +0 -0
  276. package/test-files/species-test-data/3-gene_7-edge_elegans.xlsx +0 -0
  277. package/test-files/species-test-data/3-gene_7-edge_melanogaster.xlsx +0 -0
  278. package/test-files/species-test-data/3-gene_7-edge_musculus.xlsx +0 -0
  279. package/test-files/species-test-data/3-gene_7-edge_sapiens.xlsx +0 -0
  280. package/test-files/species-test-data/kev-fake-data-sapiens-no-exp-data.xlsx +0 -0
  281. package/test-files/spreadsheet-controller-test-files/sheet-name-capitalized-network-optimized-weights.xlsx +0 -0
  282. package/test-files/spreadsheet-controller-test-files/sheet-name-capitalized-network.xlsx +0 -0
  283. package/web-client/app.js +1 -1
  284. package/web-client/controllers/main.js +1 -1
  285. package/web-client/public/favicon.ico +0 -0
  286. package/web-client/public/gene/api.js +76 -14
  287. package/web-client/public/gene/info.js +19 -8
  288. package/web-client/public/js/api/grnsight-api.js +124 -0
  289. package/web-client/public/js/constants.js +90 -17
  290. package/web-client/public/js/createNetwork.js +195 -0
  291. package/web-client/public/js/graph-statistics.js +7 -7
  292. package/web-client/public/js/graph.js +369 -324
  293. package/web-client/public/js/grnsight.js +2 -2
  294. package/web-client/public/js/grnsight.min.js +128 -59
  295. package/web-client/public/js/grnstate.js +54 -30
  296. package/web-client/public/js/iframe-coordination.js +55 -0
  297. package/web-client/public/js/setup-handlers.js +358 -18
  298. package/web-client/public/js/setup-load-and-import-handlers.js +105 -66
  299. package/web-client/public/js/update-app.js +483 -93
  300. package/web-client/public/js/upload.js +349 -32
  301. package/web-client/public/js/warnings.js +13 -51
  302. package/web-client/public/lib/iframeSizer.contentWindow.min.js +10 -0
  303. package/web-client/public/stylesheets/grnsight.styl +323 -28
  304. package/web-client/views/components/demo.pug +10 -0
  305. package/web-client/views/{graph.jade → graph.pug} +0 -0
  306. package/web-client/views/{info.jade → info.pug} +1 -5
  307. package/web-client/views/upload.pug +580 -0
  308. package/_gh_pages/Gemfile +0 -7
  309. package/_gh_pages/Gemfile.lock +0 -129
  310. package/documents/SDF/CMSI_402/spring_2014/Southwick_CMSI402_Spring2014_software-development-plan.md +0 -71
  311. package/documents/SDF/CMSI_402/spring_2014/Southwick_CMSI402_Spring2014_software-requirements-specification.md +0 -71
  312. package/documents/SDF/CMSI_402/spring_2014/use-case-diagram-spring-2014.jpg +0 -0
  313. package/documents/SDF/CMSI_402/spring_2017/Anguiano_402_Final_Presentation.pptx +0 -0
  314. package/documents/SDF/CMSI_402/spring_2017/Anguiano_402_Presentation_Final_Poster.pdf +0 -0
  315. package/documents/SDF/CMSI_402/spring_2017/Anguiano_CMSI402_Spring2017_project-proposal-presentation.pptx +0 -0
  316. package/documents/SDF/CMSI_402/spring_2017/Anguiano_CMSI402_Spring2017_project-proposal.docx +0 -0
  317. package/documents/SDF/CMSI_402/spring_2017/Anguiano_CMSI402_Spring2017_software-development-plan.docx +0 -0
  318. package/documents/SDF/CMSI_402/spring_2017/Anguiano_CMSI402_Spring2017_software-requirements-specification.docx +0 -0
  319. package/documents/SDF/CMSI_402/spring_2017/Design Review Presentation.pptx +0 -0
  320. package/documents/SDF/CMSI_402/spring_2018/0402report.docx +0 -0
  321. package/documents/SDF/CMSI_402/spring_2018/0409report.docx +0 -0
  322. package/documents/SDF/CMSI_402/spring_2018/402-gantt.png +0 -0
  323. package/documents/SDF/CMSI_402/spring_2018/402SRS_GRNSightFeedback01.txt +0 -28
  324. package/documents/SDF/CMSI_402/spring_2018/402_SPD.md +0 -223
  325. package/documents/SDF/CMSI_402/spring_2018/ChoeShinCMSI402_Final.pptx +0 -0
  326. package/documents/SDF/CMSI_402/spring_2018/ProjectProposal.md +0 -22
  327. package/documents/SDF/CMSI_402/spring_2018/SoftwareRequirementsSpecification.md +0 -88
  328. package/documents/SDF/CMSI_402/spring_2018/homework/choe_eileen/Choe_Eileen_CMSI 402_HW1.pdf +0 -0
  329. package/documents/SDF/CMSI_402/spring_2018/homework/choe_eileen/Choe_Eileen_CMSI402_HW2.pdf +0 -0
  330. package/documents/SDF/CMSI_402/spring_2018/homework/shin_jen/402hw2.docx +0 -0
  331. package/documents/SDF/CMSI_402/spring_2018/homework/shin_jen/Jen - 402Hw1.docx +0 -0
  332. package/documents/SDF/CMSI_402/spring_2018/homework/shin_jen/Jen - hw3.docx +0 -0
  333. package/documents/SDF/CMSI_402/spring_2018/writtenStatusReport.docx +0 -0
  334. package/documents/SDF/CMSI_402/spring_2018/writtenStatusReport4 +0 -0
  335. package/documents/abstracts/Anguiano_Varshneya_Undergraduate-Research-Symposium_2017_abstract.pdf +0 -0
  336. package/documents/abstracts/SIGGRAPH 2017 Abstract/ACM-Reference-Format.bst +0 -3478
  337. package/documents/abstracts/SIGGRAPH 2017 Abstract/Figure1_zoom100.png +0 -0
  338. package/documents/abstracts/SIGGRAPH 2017 Abstract/acmart.cls +0 -2352
  339. package/documents/abstracts/SIGGRAPH 2017 Abstract/acmart.ins +0 -29
  340. package/documents/abstracts/SIGGRAPH 2017 Abstract/always-weights.png +0 -0
  341. package/documents/abstracts/SIGGRAPH 2017 Abstract/auto.png +0 -0
  342. package/documents/abstracts/SIGGRAPH 2017 Abstract/networkA.png +0 -0
  343. package/documents/abstracts/SIGGRAPH 2017 Abstract/networkB-normalized.png +0 -0
  344. package/documents/abstracts/SIGGRAPH 2017 Abstract/networkB.png +0 -0
  345. package/documents/abstracts/SIGGRAPH 2017 Abstract/never-weights.png +0 -0
  346. package/documents/abstracts/SIGGRAPH 2017 Abstract/representative-image/screenshot.jpg +0 -0
  347. package/documents/abstracts/SIGGRAPH 2017 Abstract/representative-image/screenshot3x2.png +0 -0
  348. package/documents/abstracts/SIGGRAPH 2017 Abstract/representative-image/withweights3x2.png +0 -0
  349. package/documents/abstracts/SIGGRAPH 2017 Abstract/screenshot-auto.png +0 -0
  350. package/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.bib +0 -85
  351. package/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.pdf +0 -0
  352. package/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.tex +0 -235
  353. package/documents/abstracts/SWE Collegiate Competition 2017.md +0 -9
  354. package/documents/abstracts/Samdarshi_GRNsight_SoCalSysBio_Abstract_2019.docx +0 -0
  355. package/documents/abstracts/Varshneya_Samdarshi_Southern-California-Systems-Biology_2017_abstract.docx +0 -0
  356. package/documents/abstracts/~$mdarshi_SoCalSysBio_Abstract_2019.docx +0 -0
  357. package/documents/developer_documents/State Diagram.graphml +0 -3525
  358. package/documents/developer_documents/graphml/State Diagram.graphml +0 -3115
  359. package/documents/developer_documents/older_versions/GRNsight State Diagram old.png +0 -0
  360. package/documents/developer_documents/older_versions/GRNsight State Diagram.png +0 -0
  361. package/documents/developer_documents/testing_script_generator/GRNsightTestingDocument.md +0 -998
  362. package/documents/developer_documents/testing_script_generator/featureList.json +0 -496
  363. package/documents/developer_documents/testing_script_generator/testing-script-generator.js +0 -149
  364. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_conference-presentations_2016.docx +0 -0
  365. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_manuscript_2016.docx +0 -0
  366. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_manuscript_2016_Table1.docx +0 -0
  367. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_manuscript_2016_references.rtf +0 -264
  368. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_manuscript_2016_text-only.docx +0 -0
  369. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/21-genes_31-edges_Schade-data_for-screenshots.xlsx +0 -0
  370. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom100.jpg +0 -0
  371. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom100.png +0 -0
  372. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom100.psd +0 -0
  373. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom145.jpg +0 -0
  374. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom145.png +0 -0
  375. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom145.psd +0 -0
  376. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom145_900pix-wide.psd +0 -0
  377. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom100.jpg +0 -0
  378. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom100.png +0 -0
  379. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom100.psd +0 -0
  380. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom145.jpg +0 -0
  381. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom145.png +0 -0
  382. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom145.psd +0 -0
  383. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom145_900pix-wide.psd +0 -0
  384. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5A.pdf +0 -0
  385. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5B.pdf +0 -0
  386. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5C.eps +0 -0
  387. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5D.pdf +0 -0
  388. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5E.pdf +0 -0
  389. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5F.eps +0 -0
  390. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5_compiled.png +0 -0
  391. package/documents/manuscripts/peerj-computerscience-2016/figures/submitted-versions/Figure3_GRNsight-Architecture.pdf +0 -0
  392. package/documents/manuscripts/peerj-computerscience-2016/figures/submitted-versions/Figure4_GRNsight-Screenshot.pdf +0 -0
  393. package/documents/manuscripts/peerj-computerscience-2016/figures/submitted-versions/Figure5_compiled.pdf +12 -5383
  394. package/documents/manuscripts/peerj-computerscience-2016/peerj-reviewing-10823-v0.pdf +0 -0
  395. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_conference-presentations_2016_revised.docx +0 -0
  396. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_cover-letter-and-response_2016.pdf +0 -0
  397. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_cover-letter_2016.docx +0 -0
  398. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_cover-letter_2016.pdf +0 -0
  399. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_Table1.docx +0 -0
  400. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_references_revised.rtf +0 -385
  401. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_text-only_revised.docx +0 -0
  402. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_text-only_revised_marked.docx +0 -0
  403. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_response-to-reviewers_2016.docx +0 -0
  404. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_response-to-reviewers_2016.pdf +0 -0
  405. package/documents/manuscripts/peerj-computerscience-2016/revisions/figures/Figure3_GRNsight-Architecture.pdf +0 -0
  406. package/documents/manuscripts/peerj-computerscience-2016/revisions/figures/Figure4_GRNsight-Screenshot-auto.pdf +0 -0
  407. package/documents/manuscripts/peerj-computerscience-2016/revisions/figures/Figure4_GRNsight-Screenshot.pdf +0 -0
  408. package/documents/manuscripts/peerj-computerscience-2016/revisions/peerj-reviewing-10823-v1.pdf +0 -0
  409. package/documents/posters/Anguiano_CMSI402_2017.pptx +0 -0
  410. package/documents/posters/Anguiano_Varshneya_LMU-Symposium_2015.pptx +0 -0
  411. package/documents/posters/Anguiano_Varshneya_SCCUR_2014.pptx +0 -0
  412. package/documents/posters/Choe_Shin_CMSI402_2018.pptx +0 -0
  413. package/documents/posters/Dahlquist-et-al_BOSC_ISMB_2016_poster.pptx +0 -0
  414. package/documents/posters/Lopez_Filler_LMU_Symposium_2019.pdf +0 -0
  415. package/documents/posters/Lopez_Filler_LMU_Symposium_2019.pptx +0 -0
  416. package/documents/posters/Samdarshi-et-al_LMU-Symposium_2017.pptx +0 -0
  417. package/documents/posters/Samdarshi-et-al_LMU-Symposium_2018.pptx +0 -0
  418. package/documents/posters/Samdarshi-et-al_SoCalSysBio_2019.pptx +0 -0
  419. package/documents/posters/Shin-et-al_SCCUR_2017.pptx +0 -0
  420. package/documents/posters/Southwick_CMSI402_2014.pptx +0 -0
  421. package/documents/posters/Varshneya_Samdarshi_LMU-Symposium_2016.pptx +0 -0
  422. package/documents/posters/Varshneya_Samdarshi_SoCalSysBio_2017.pptx +0 -0
  423. package/documents/presentations/Anguiano_402_Final_Presentation.pptx +0 -0
  424. package/documents/presentations/Choe_SWERapidFire2017_final.pptx +0 -0
  425. package/documents/presentations/Dahlquist_BOSC_20160709.pptx +0 -0
  426. package/documents/presentations/Dahlquist_ExperimentalBiology_20160404_talk.pptx +0 -0
  427. package/documents/presentations/Dahlquist_SoCalSysBio_20150131_talk.pptx +0 -0
  428. package/documents/presentations/Samdarshi_LMU-Symposium_20190323_talk.pdf +0 -0
  429. package/documents/presentations/Samdarshi_LMU-Symposium_20190323_talk.pptx +0 -0
  430. package/documents/presentations/Southwick_Anguiano_LMU-Symposium_20140329_talk.pptx +0 -0
  431. package/documents/presentations/Southwick_CMSI402_Presentation_20140508_talk.pptx +0 -0
  432. package/documents/presentations/Varshneya_Anguiano_LMU-Symposium_201703_talk.pptx +0 -0
  433. package/documents/reports/Samdarshi_Mihir_2019/Samdarshi_2019_Final.docx +0 -0
  434. package/documents/reports/Samdarshi_Mihir_2019/Samdarshi_Mihir_2019_AnnotatedBibliography.docx +0 -0
  435. package/documents/reports/Samdarshi_Mihir_2019/Samdarshi_Mihir_2019_Outline.docx +0 -0
  436. package/documents/reports/Samdarshi_Mihir_2019/~$mdarshi_2019_Draft.docx +0 -0
  437. package/documents/reports/Samdarshi_Mihir_2019/~$mdarshi_2019_Final_Paper_Draft.docx +0 -0
  438. package/documents/reports/Varshneya_Anu_2017/Varshneya-201701-AnnotatedBibliography.docx +0 -0
  439. package/documents/reports/Varshneya_Anu_2017/Varshneya-201702-Introduction.docx +0 -0
  440. package/documents/reports/Varshneya_Anu_2017/Varshneya-201702-Outline.docx +0 -0
  441. package/documents/reports/Varshneya_Anu_2017/Varshneya-201703-Discussion.docx +0 -0
  442. package/documents/reports/Varshneya_Anu_2017/Varshneya-201703-MMResults.docx +0 -0
  443. package/documents/reports/Varshneya_Anu_2017/Varshneya-201704-Draft-1.docx +0 -0
  444. package/documents/reports/Varshneya_Anu_2017/Varshneya-201704-Final.docx +0 -0
  445. package/onlysidebar.html +0 -8
  446. package/test/graph-library-tests.js +0 -165
  447. package/test-files/demo-files/21-genes_50-edges_Dahlquist-data_estimation_output.xlsx +0 -0
  448. package/test-files/demo-files/21-genes_50-edges_Dahlquist-data_input.xlsx +0 -0
  449. package/test-files/graph-tests/different-sized-networks/10-genes-max-edges.xlsx +0 -0
  450. package/test-files/graph-tests/different-sized-networks/12-genes-max-edges.xlsx +0 -0
  451. package/test-files/graph-tests/different-sized-networks/35-genes-max-edges.xlsx +0 -0
  452. package/test-files/graph-tests/different-sized-networks/40-genes-0-edges.xlsx +0 -0
  453. package/test-files/graph-tests/different-sized-networks/40-genes-max-edges.xlsx +0 -0
  454. package/test-files/graph-tests/different-sized-networks/42-genes-max-edges.xlsx +0 -0
  455. package/test-files/graph-tests/different-sized-networks/50-genes-max-edges.xlsx +0 -0
  456. package/test-files/graph-tests/different-sized-networks/75-genes-150-edges.xlsx +0 -0
  457. package/web-client/public/js/container.js +0 -121
  458. package/web-client/views/upload.jade +0 -464
package/test/test.js CHANGED
@@ -1,33 +1,54 @@
1
1
  var assert = require("chai").assert;
2
2
  var xlsx = require("node-xlsx");
3
3
  // var cytoscape = require("cytoscape");
4
-
5
4
  var spreadsheetController = require(__dirname + "/../server/controllers" + "/spreadsheet-controller")();
6
5
 
6
+ var parseAllNetworkSheet = require(__dirname + "/../server/controllers" + "/network-sheet-parser");
7
+
8
+ var parseExpressionSheet = require(__dirname + "/../server/controllers" + "/expression-sheet-parser");
9
+
10
+ var parseAdditionalSheet = require(__dirname + "/../server/controllers" + "/additional-sheet-parser");
11
+
12
+ var exportController = require(__dirname + "/../server/controllers/export-controller")();
13
+
14
+ // changed network parser to preserve all network sheets instead of choosing the best and throwing awway rhe rest
15
+ // this helper method chooses the best network sheet, so prior implemented test behaviour doesn't crash
16
+ var parseNetworkSheet = (sheet) => {
17
+ var allNetworks = parseAllNetworkSheet(sheet);
18
+ if (typeof allNetworks.networkOptimizedWeights === "object" &&
19
+ Object.keys(allNetworks.networkOptimizedWeights).length !== 0) {
20
+ return allNetworks.networkOptimizedWeights;
21
+ } else {
22
+ // Network is the default network. If network_optimized_weights does not exist, then we will want to return the
23
+ // network sheet. If both network_optimized_weights and network do not exist, it returns an empty initalized
24
+ // network object with an error saying no network sheet detected.
25
+ return allNetworks.network;
26
+ }
27
+ };
28
+
7
29
  // ERROR TEST FUNCTIONS:
8
30
 
9
31
  var noErrors = function (input) {
10
32
  var sheet = xlsx.parse(input);
11
- var network = spreadsheetController.parseSheet(sheet);
12
-
13
- assert.equal(0, network.errors.length);
33
+ var workbook = parseNetworkSheet(sheet);
34
+ assert.equal(0, workbook.errors.length);
14
35
  };
15
36
 
16
37
  var duplicateGeneError = function (input, frequency) {
17
38
  var sheet = xlsx.parse(input);
18
- var network = spreadsheetController.parseSheet(sheet);
39
+ var workbook = parseNetworkSheet(sheet);
19
40
 
20
- assert.equal(frequency, network.errors.length);
41
+ assert.equal(frequency, workbook.errors.length);
21
42
 
22
43
  for (var i = 0; i < frequency; i++) {
23
44
  assert.equal(
24
- "DUPLICATE_GENE",
25
- network.errors[i].errorCode
26
- );
45
+ "DUPLICATE_GENE",
46
+ workbook.errors[i].errorCode
47
+ );
27
48
  }
28
49
 
29
50
  /* TO DO:
30
- network.errors.forEach(function (error) {
51
+ workbook.errors.forEach(function (error) {
31
52
  assert.equal("DUPLICATE_GENE", error.errorCode);
32
53
  });
33
54
  */
@@ -35,129 +56,129 @@ var duplicateGeneError = function (input, frequency) {
35
56
 
36
57
  var invalidGeneLengthError = function (input, frequency) {
37
58
  var sheet = xlsx.parse(input);
38
- var network = spreadsheetController.parseSheet(sheet);
59
+ var workbook = parseNetworkSheet(sheet);
39
60
 
40
- assert.equal(frequency, network.errors.length);
61
+ assert.equal(frequency, workbook.errors.length);
41
62
 
42
63
  for (var i = 0; i < frequency; i++) {
43
64
  assert.equal(
44
- "INVALID_GENE_LENGTH",
45
- network.errors[i].errorCode
46
- );
65
+ "INVALID_GENE_LENGTH",
66
+ workbook.errors[i].errorCode
67
+ );
47
68
  }
48
69
  };
49
70
 
50
71
  var corruptGeneError = function (input, frequency) {
51
72
  var sheet = xlsx.parse(input);
52
- var network = spreadsheetController.parseSheet(sheet);
73
+ var workbook = parseNetworkSheet(sheet);
53
74
 
54
- assert.equal(frequency, network.errors.length);
75
+ assert.equal(frequency, workbook.errors.length);
55
76
 
56
77
  for (var i = 0; i < frequency; i++) {
57
78
  assert.equal(
58
- "CORRUPT_GENE",
59
- network.errors[i].errorCode
60
- );
79
+ "CORRUPT_GENE",
80
+ workbook.errors[i].errorCode
81
+ );
61
82
  }
62
83
  };
63
84
 
64
85
  var unknownError = function (input, frequency) {
65
86
  var sheet = xlsx.parse(input);
66
- var network = spreadsheetController.parseSheet(sheet);
87
+ var workbook = parseNetworkSheet(sheet);
67
88
 
68
- assert.equal(frequency, network.errors.length);
89
+ assert.equal(frequency, workbook.errors.length);
69
90
 
70
91
  for (var i = 0; i < frequency; i++) {
71
92
  assert.equal(
72
- "UNKNOWN_ERROR",
73
- network.errors[i].errorCode
74
- );
93
+ "UNKNOWN_ERROR",
94
+ workbook.errors[i].errorCode
95
+ );
75
96
  }
76
97
  };
77
98
 
78
99
  var missingValueError = function (input, frequency) {
79
100
  var sheet = xlsx.parse(input);
80
- var network = spreadsheetController.parseSheet(sheet);
101
+ var workbook = parseNetworkSheet(sheet);
81
102
 
82
- assert.equal(frequency, network.errors.length);
103
+ assert.equal(frequency, workbook.errors.length);
83
104
 
84
105
  for (var i = 0; i < frequency; i++) {
85
106
  assert.equal(
86
- "MISSING_VALUE",
87
- network.errors[i].errorCode
88
- );
107
+ "MISSING_VALUE",
108
+ workbook.errors[i].errorCode
109
+ );
89
110
  }
90
111
  };
91
112
 
92
113
  var missingNetworkError = function (input, frequency) {
93
114
  var sheet = xlsx.parse(input);
94
- var network = spreadsheetController.parseSheet(sheet);
115
+ var workbook = parseNetworkSheet(sheet);
95
116
 
96
- assert.equal(frequency, network.errors.length);
117
+ assert.equal(frequency, workbook.errors.length);
97
118
 
98
119
  for (var i = 0; i < frequency; i++) {
99
120
  assert.equal(
100
- "MISSING_NETWORK",
101
- network.errors[i].errorCode
102
- );
121
+ "MISSING_NETWORK",
122
+ workbook.errors[i].errorCode
123
+ );
103
124
  }
104
125
  };
105
126
 
106
127
  var specialCharacterError = function (input, frequency) {
107
128
  var sheet = xlsx.parse(input);
108
- var network = spreadsheetController.parseSheet(sheet);
129
+ var workbook = parseNetworkSheet(sheet);
109
130
 
110
- assert.equal(frequency, network.errors.length);
131
+ assert.equal(frequency, workbook.errors.length);
111
132
 
112
133
  for (var i = 0; i < frequency; i++) {
113
134
  assert.equal(
114
- "INVALID_CHARACTER",
115
- network.errors[i].errorCode
116
- );
135
+ "INVALID_CHARACTER",
136
+ workbook.errors[i].errorCode
137
+ );
117
138
  }
118
139
  };
119
140
 
120
141
  var invalidDataTypeError = function (input, frequency) {
121
142
  var sheet = xlsx.parse(input);
122
- var network = spreadsheetController.parseSheet(sheet);
143
+ var workbook = parseNetworkSheet(sheet);
123
144
 
124
- assert.equal(frequency, network.errors.length);
145
+ assert.equal(frequency, workbook.errors.length);
125
146
 
126
147
  for (var i = 0; i < frequency; i++) {
127
148
  assert.equal(
128
- "INVALID_CELL_DATA_TYPE",
129
- network.errors[i].errorCode
130
- );
149
+ "INVALID_CELL_DATA_TYPE",
150
+ workbook.errors[i].errorCode
151
+ );
131
152
  }
132
153
  };
133
154
 
134
- var networkSizeError = function (input, frequency) {
155
+ var workbookSizeError = function (input, frequency) {
135
156
  var sheet = xlsx.parse(input);
136
- var network = spreadsheetController.parseSheet(sheet);
157
+ var workbook = parseNetworkSheet(sheet);
137
158
 
138
- assert.equal(frequency, network.errors.length);
159
+ assert.equal(frequency, workbook.errors.length);
139
160
 
140
161
  for (var i = 0; i < frequency; i++) {
141
162
  assert.equal(
142
- "INVALID_NETWORK_SIZE",
143
- network.errors[i].errorCode
144
- );
163
+ "INVALID_NETWORK_SIZE",
164
+ workbook.errors[i].errorCode
165
+ );
145
166
  }
146
167
  };
147
168
 
148
169
  var checkForGene = function (test, frequency, input) {
149
170
  var sheet = xlsx.parse(input);
150
- var network = spreadsheetController.parseSheet(sheet);
171
+ var workbook = parseNetworkSheet(sheet);
151
172
 
152
- assert.equal(frequency, network.genes.filter(function (gene) {
173
+ assert.equal(frequency, workbook.genes.filter(function (gene) {
153
174
  return gene.name === test;
154
175
  }).length);
155
176
  };
156
177
 
157
178
  var warningsCountError = function (input, frequency) {
158
179
  var sheet = xlsx.parse(input);
159
- var network = spreadsheetController.parseSheet(sheet);
160
- var warningsCountErrorArray = network.errors.filter(function (x) {
180
+ var workbook = parseNetworkSheet(sheet);
181
+ var warningsCountErrorArray = workbook.errors.filter(function (x) {
161
182
  return x.errorCode === "WARNINGS_OVERLOAD";
162
183
  });
163
184
 
@@ -166,8 +187,8 @@ var warningsCountError = function (input, frequency) {
166
187
 
167
188
  var errorsCountError = function (input, frequency) {
168
189
  var sheet = xlsx.parse(input);
169
- var network = spreadsheetController.parseSheet(sheet);
170
- var errorsCountErrorArray = network.errors.filter(function (x) {
190
+ var workbook = parseNetworkSheet(sheet);
191
+ var errorsCountErrorArray = workbook.errors.filter(function (x) {
171
192
  return x.errorCode === "ERRORS_OVERLOAD";
172
193
  });
173
194
 
@@ -176,31 +197,202 @@ var errorsCountError = function (input, frequency) {
176
197
 
177
198
  var emptyRowError = function (input, frequency) {
178
199
  var sheet = xlsx.parse(input);
179
- var network = spreadsheetController.parseSheet(sheet);
200
+ var workbook = parseNetworkSheet(sheet);
201
+
202
+ assert.equal(frequency, workbook.errors.length);
203
+
204
+ for (var i = 0; i < frequency; i++) {
205
+ assert.equal(
206
+ "EMPTY_ROW",
207
+ workbook.errors[i].errorCode
208
+ );
209
+ }
210
+ };
211
+
212
+ var geneMismatchError = function (input, frequency) {
213
+ var sheet = xlsx.parse(input);
214
+ var workbook = spreadsheetController.crossSheetInteractions(sheet);
215
+ var geneMismatchCount = workbook.errors.filter(function (x) {
216
+ return x.errorCode === "GENE_MISMATCH";
217
+ });
218
+
219
+ assert.equal(frequency, geneMismatchCount.length);
220
+ };
221
+
222
+ var idLabelError = function (input, frequency) {
223
+ var sheet = xlsx.parse(input);
224
+ var workbook = parseExpressionSheet(sheet);
225
+ assert.equal(frequency, workbook.expression.wt_log2_expression.errors.length);
226
+
227
+ for (var i = 0; i < frequency; i++) {
228
+ assert.equal(
229
+ "MISLABELED_ID_CELL",
230
+ workbook.expression.wt_log2_expression.errors[i].errorCode
231
+ );
232
+ }
233
+ };
234
+
235
+ var missingColumnHeaderError = function (input, frequency) {
236
+ var sheet = xlsx.parse(input);
237
+ var exp = parseExpressionSheet(sheet);
238
+ assert.equal(frequency, exp["expression"]["wt_log2_expression"]["errors"].length);
239
+ for (var i = 0; i < frequency; i++) {
240
+ assert.equal(
241
+ "MISSING_COLUMN_HEADER",
242
+ exp["expression"]["wt_log2_expression"]["errors"][i].errorCode
243
+ );
244
+ }
245
+ };
246
+
247
+ var emptyExpressionColumnError = function (input, frequency) {
248
+ var sheet = xlsx.parse(input);
249
+ var exp = parseExpressionSheet(sheet);
250
+ assert.equal(frequency, exp["expression"]["wt_log2_expression"]["errors"].length);
251
+ for (var i = 0; i < frequency; i++) {
252
+ assert.equal(
253
+ "EMPTY_COLUMN",
254
+ exp["expression"]["wt_log2_expression"]["errors"][i].errorCode
255
+ );
256
+ }
257
+ };
258
+
259
+ var emptyExpressionRowError = function (input, frequency) {
260
+ var sheet = xlsx.parse(input);
261
+ var exp = parseExpressionSheet(sheet);
262
+ assert.equal(frequency, exp["expression"]["wt_log2_expression"]["errors"].length);
263
+
264
+ for (var i = 0; i < frequency; i++) {
265
+ assert.equal(
266
+ "EMPTY_ROW",
267
+ exp["expression"]["wt_log2_expression"]["errors"][i].errorCode
268
+ );
269
+ }
270
+ };
271
+
272
+ // should extra_gene_name and missing_gene_name be split into two different functions?
273
+ var labelError = function (input, frequency) {
274
+ var sheet = xlsx.parse(input);
275
+ var exp = parseExpressionSheet(sheet);
276
+ assert.equal(frequency, exp["expression"]["wt_log2_expression"]["errors"].length);
277
+ for (var i = 0; i < frequency; i++) {
278
+ assert.equal(
279
+ "extra_gene_name" || "missing_a_gene_name",
280
+ exp["expression"]["wt_log2_expression"]["errors"][i].errorCode
281
+ );
282
+ }
283
+ };
284
+
285
+ var missingGeneNameError = function (input, frequency) {
286
+ var sheet = xlsx.parse(input);
287
+ var workbook = spreadsheetController.crossSheetInteractions(sheet);
288
+ var missingGeneCount = workbook.errors.filter(function (x) {
289
+ return x.errorCode === "MISSING_GENE_NAME";
290
+ });
180
291
 
181
- assert.equal(frequency, network.errors.length);
292
+ assert.equal(frequency, missingGeneCount.length);
293
+ };
182
294
 
295
+ var extraGeneNameError = function (input, frequency) {
296
+ var sheet = xlsx.parse(input);
297
+ var workbook = spreadsheetController.crossSheetInteractions(sheet);
298
+ var extraGeneCount = workbook.errors.filter(function (x) {
299
+ return x.errorCode === "EXTRA_GENE_NAME";
300
+ });
301
+
302
+ assert.equal(frequency, extraGeneCount.length);
303
+ };
304
+
305
+ var negativeTimePointError = function (input, frequency) {
306
+ var sheet = xlsx.parse(input);
307
+ var exp = parseExpressionSheet(sheet);
308
+ assert.equal(frequency, exp["expression"]["wt_log2_expression"]["errors"].length);
309
+ for (var i = 0; i < frequency; i++) {
310
+ assert.equal(
311
+ "NEGATIVE_TIME_POINT",
312
+ exp["expression"]["wt_log2_expression"]["errors"][i].errorCode
313
+ );
314
+ }
315
+ };
316
+
317
+ var nonMonotonicTimePointsError = function (input, frequency) {
318
+ var sheet = xlsx.parse(input);
319
+ var exp = parseExpressionSheet(sheet);
320
+ assert.equal(frequency, exp["expression"]["wt_log2_expression"]["errors"].length);
183
321
  for (var i = 0; i < frequency; i++) {
184
322
  assert.equal(
185
- "EMPTY_ROW",
186
- network.errors[i].errorCode
187
- );
323
+ "NON_MONOTONIC_TIME_POINTS",
324
+ exp["expression"]["wt_log2_expression"]["errors"][i].errorCode
325
+ );
188
326
  }
189
327
  };
190
328
 
329
+ var nonNumericalTimePointError = function (input, frequency) {
330
+ var sheet = xlsx.parse(input);
331
+ var exp = parseExpressionSheet(sheet);
332
+ assert.equal(frequency, exp["expression"]["wt_log2_expression"]["errors"].length);
333
+ for (var i = 0; i < frequency; i++) {
334
+ assert.equal(
335
+ "NON_NUMERICAL_TIME_POINT",
336
+ exp["expression"]["wt_log2_expression"]["errors"][i].errorCode
337
+ );
338
+ }
339
+ };
340
+
341
+ var emptyRowDataError = function (input, frequency) {
342
+ var sheet = xlsx.parse(input);
343
+ var workbook = parseNetworkSheet(sheet);
344
+ var emptyRowDataCount = workbook.errors.filter(function (x) {
345
+ return x.errorCode === "EMPTY_ROW_DATA";
346
+ });
347
+
348
+ assert.equal(frequency, emptyRowDataCount.length);
349
+ };
350
+
351
+ var emptyMatrixDataError = function (input, frequency) {
352
+ var sheet = xlsx.parse(input);
353
+ var workbook = parseNetworkSheet(sheet);
354
+ var emptyMatrixDataCount = workbook.errors.filter(function (x) {
355
+ return x.errorCode === "EMPTY_MATRIX_DATA";
356
+ });
357
+
358
+ assert.equal(frequency, emptyMatrixDataCount.length);
359
+ };
360
+
361
+ var emptyColumnDataError = function (input, frequency) {
362
+ var sheet = xlsx.parse(input);
363
+ var workbook = parseNetworkSheet(sheet);
364
+ var emptyRowDataCount = workbook.errors.filter(function (x) {
365
+ return x.errorCode === "EMPTY_COLUMN_DATA";
366
+ });
367
+
368
+ assert.equal(frequency, emptyRowDataCount.length);
369
+ };
370
+
371
+ var emptyColumnError = function (input, frequency) {
372
+ var sheet = xlsx.parse(input);
373
+ var workbook = parseNetworkSheet(sheet);
374
+ var emptyRowDataCount = workbook.errors.filter(function (x) {
375
+ return x.errorCode === "EMPTY_COLUMN";
376
+ });
377
+
378
+ assert.equal(frequency, emptyRowDataCount.length);
379
+ };
380
+
381
+
382
+
191
383
  // WARNING TEST FUNCTIONS:
192
384
 
193
385
  var noWarnings = function (input) {
194
386
  var sheet = xlsx.parse(input);
195
- var network = spreadsheetController.parseSheet(sheet);
387
+ var workbook = parseNetworkSheet(sheet);
196
388
 
197
- assert.equal(0, network.warnings.length);
389
+ assert.equal(0, workbook.warnings.length);
198
390
  };
199
391
 
200
392
  var missingSourceWarning = function (input, frequency) {
201
393
  var sheet = xlsx.parse(input);
202
- var network = spreadsheetController.parseSheet(sheet);
203
- var missingSourceCount = network.warnings.filter(function (x) {
394
+ var workbook = parseNetworkSheet(sheet);
395
+ var missingSourceCount = workbook.warnings.filter(function (x) {
204
396
  return x.warningCode === "MISSING_SOURCE";
205
397
  });
206
398
 
@@ -209,8 +401,8 @@ var missingSourceWarning = function (input, frequency) {
209
401
 
210
402
  var invalidMatrixDataWarning = function (input, frequency) {
211
403
  var sheet = xlsx.parse(input);
212
- var network = spreadsheetController.parseSheet(sheet);
213
- var invalidDataCount = network.warnings.filter(function (x) {
404
+ var workbook = parseNetworkSheet(sheet);
405
+ var invalidDataCount = workbook.warnings.filter(function (x) {
214
406
  return x.warningCode === "INVALID_DATA";
215
407
  });
216
408
 
@@ -219,8 +411,8 @@ var invalidMatrixDataWarning = function (input, frequency) {
219
411
 
220
412
  var missingTargetWarning = function (input, frequency) {
221
413
  var sheet = xlsx.parse(input);
222
- var network = spreadsheetController.parseSheet(sheet);
223
- var missingTargetCount = network.warnings.filter(function (x) {
414
+ var workbook = parseNetworkSheet(sheet);
415
+ var missingTargetCount = workbook.warnings.filter(function (x) {
224
416
  return x.warningCode === "MISSING_TARGET";
225
417
  });
226
418
 
@@ -229,8 +421,8 @@ var missingTargetWarning = function (input, frequency) {
229
421
 
230
422
  var randomDataWarning = function (input, frequency) {
231
423
  var sheet = xlsx.parse(input);
232
- var network = spreadsheetController.parseSheet(sheet);
233
- var randomDataCount = network.warnings.filter(function (x) {
424
+ var workbook = parseNetworkSheet(sheet);
425
+ var randomDataCount = workbook.warnings.filter(function (x) {
234
426
  return x.warningCode === "RANDOM_DATA";
235
427
  });
236
428
 
@@ -239,8 +431,8 @@ var randomDataWarning = function (input, frequency) {
239
431
 
240
432
  var emptyRowWarning = function (input, frequency) {
241
433
  var sheet = xlsx.parse(input);
242
- var network = spreadsheetController.parseSheet(sheet);
243
- var emptyRowCount = network.warnings.filter(function (x) {
434
+ var workbook = parseNetworkSheet(sheet);
435
+ var emptyRowCount = workbook.warnings.filter(function (x) {
244
436
  return x.warningCode === "EMPTY_ROW";
245
437
  });
246
438
 
@@ -249,40 +441,61 @@ var emptyRowWarning = function (input, frequency) {
249
441
 
250
442
  var invalidNetworkSizeWarning = function (input, frequency) {
251
443
  var sheet = xlsx.parse(input);
252
- var network = spreadsheetController.parseSheet(sheet);
253
- var invalidNetworkSizeCount = network.warnings.filter(function (x) {
444
+ var workbook = parseNetworkSheet(sheet);
445
+ var invalidworkbookSizeCount = workbook.warnings.filter(function (x) {
254
446
  return x.warningCode === "INVALID_NETWORK_SIZE";
255
447
  });
256
448
 
257
- assert.equal(frequency, invalidNetworkSizeCount.length);
449
+ assert.equal(frequency, invalidworkbookSizeCount.length);
258
450
  };
259
451
 
260
452
  var extraneousDataWarning = function (input, frequency) {
261
453
  var sheet = xlsx.parse(input);
262
- var network = spreadsheetController.parseSheet(sheet);
263
- var extraneousDataWarning = network.warnings.filter(function (x) {
454
+ var exp = parseExpressionSheet(sheet);
455
+ var extraneousDataCount = exp["expression"]["wt_log2_expression"]["warnings"].filter(function (x) {
264
456
  return x.warningCode === "EXTRANEOUS_DATA";
265
457
  });
266
458
 
267
- assert.equal(frequency, extraneousDataWarning.length);
459
+ assert.equal(frequency, extraneousDataCount.length);
460
+ };
461
+
462
+
463
+ var missingExpressionWarning = function (input, frequency) {
464
+ var sheet = xlsx.parse(input);
465
+ var workbook = spreadsheetController.crossSheetInteractions(sheet);
466
+ var missingExpressionCount = workbook.warnings.filter(function (x) {
467
+ return x.warningCode === "MISSING_EXPRESSION_SHEET";
468
+ });
469
+
470
+ assert.equal(frequency, missingExpressionCount.length);
471
+ };
472
+
473
+ var incorrectlyNamedExpressionSheetWarning = function (input, frequency) {
474
+ var sheet = xlsx.parse(input);
475
+ var workbook = parseExpressionSheet(sheet);
476
+ var incorrectlyNamedSheetCount = workbook.warnings.filter(function (x) {
477
+ return x.warningCode === "INCORRECTLY_NAMED_EXPRESSION_SHEET";
478
+ });
479
+
480
+ assert.equal(frequency, incorrectlyNamedSheetCount.length);
268
481
  };
269
482
 
270
483
  var incorrectlyNamedSheetWarning = function (input, frequency) {
271
484
  var sheet = xlsx.parse(input);
272
- var network = spreadsheetController.parseSheet(sheet);
273
- var incorrectlyNamedSheetWarning = network.warnings.filter(function (x) {
485
+ var workbook = parseNetworkSheet(sheet);
486
+ var incorrectlyNamedSheetCount = workbook.warnings.filter(function (x) {
274
487
  return x.warningCode === "INCORRECTLY_NAMED_SHEET";
275
488
  });
276
489
 
277
- assert.equal(frequency, incorrectlyNamedSheetWarning.length);
490
+ assert.equal(frequency, incorrectlyNamedSheetCount.length);
278
491
  };
279
492
 
280
493
  // GRAPH STATISTICS
281
494
  /*
282
495
  var shortestPath = function (input, directed, source, target, length) {
283
496
  var sheet = xlsx.parse(input);
284
- var network = spreadsheetController.parseSheet(sheet);
285
- var cytoscapeElements = spreadsheetController.grnSightToCytoscape(network);
497
+ var workbook = parseNetworkSheet(sheet);
498
+ var cytoscapeElements = spreadsheetController.grnSightToCytoscape(workbook);
286
499
 
287
500
  var cy = cytoscape({
288
501
  headless: true,
@@ -295,8 +508,8 @@ var shortestPath = function (input, directed, source, target, length) {
295
508
 
296
509
  var betweennessCentrality = function (input, directed, node, centrality) {
297
510
  var sheet = xlsx.parse(input);
298
- var network = spreadsheetController.parseSheet(sheet);
299
- var cytoscapeElements = spreadsheetController.grnSightToCytoscape(network);
511
+ var workbook = parseNetworkSheet(sheet);
512
+ var cytoscapeElements = spreadsheetController.grnSightToCytoscape(workbook);
300
513
 
301
514
  var cy = cytoscape({
302
515
  headless: true,
@@ -308,6 +521,222 @@ var betweennessCentrality = function (input, directed, node, centrality) {
308
521
  };
309
522
  */
310
523
 
524
+ // Additional Sheets Error Tests
525
+ var twoColumnIdError = function (input, frequency) {
526
+ var sheet = xlsx.parse(input);
527
+ var workbook = parseAdditionalSheet(sheet);
528
+ var twoColumnIdErrorCount = 0;
529
+ for (let page in workbook.test) {
530
+ twoColumnIdErrorCount += workbook.test[page].errors.filter(function (x) {
531
+ return x.errorCode === "MISLABELED_ID_CELL";
532
+ }).length;
533
+ }
534
+ assert.equal(frequency, twoColumnIdErrorCount);
535
+ };
536
+
537
+ var additionalSheetIncorrectColumnHeaderError = function (input, frequency) {
538
+ var sheet = xlsx.parse(input);
539
+ var workbook = parseAdditionalSheet(sheet);
540
+ var additionalSheetIncorrectColumnHeaderErrorCount = 0;
541
+ for (let page in workbook.test) {
542
+ additionalSheetIncorrectColumnHeaderErrorCount += workbook.test[page].errors.filter(
543
+ (x) => x.errorCode === "INCORRECT_COLUMN_HEADER").length;
544
+ }
545
+ additionalSheetIncorrectColumnHeaderErrorCount += workbook.meta.errors.filter(
546
+ (x) => x.errorCode === "INCORRECT_COLUMN_HEADER").length;
547
+ if (workbook.meta2.errors !== undefined) {
548
+ additionalSheetIncorrectColumnHeaderErrorCount += workbook.meta2.errors.filter(
549
+ (x) => x.errorCode === "INCORRECT_COLUMN_HEADER").length;
550
+ }
551
+ assert.equal(frequency, additionalSheetIncorrectColumnHeaderErrorCount);
552
+ };
553
+
554
+ var additionalSheetMissingColumnHeaderError = function (input, frequency) {
555
+ var sheet = xlsx.parse(input);
556
+ var workbook = parseAdditionalSheet(sheet);
557
+ var additionalSheetMissingColumnHeaderErrorCount = 0;
558
+ for (let page in workbook.test) {
559
+ additionalSheetMissingColumnHeaderErrorCount += workbook.test[page].errors.filter(
560
+ (x) => x.errorCode === "MISSING_COLUMN_HEADER").length;
561
+ }
562
+ additionalSheetMissingColumnHeaderErrorCount += workbook.meta.errors.filter(
563
+ (x) => x.errorCode === "MISSING_COLUMN_HEADER").length;
564
+ if (workbook.meta2.warnings !== undefined) {
565
+ additionalSheetMissingColumnHeaderErrorCount += workbook.meta2.errors.filter(
566
+ (x) => x.errorCode === "MISSING_COLUMN_HEADER").length;
567
+ }
568
+ assert.equal(frequency, additionalSheetMissingColumnHeaderErrorCount);
569
+ };
570
+
571
+ var twoColumnInvalidGeneTypeError = function (input, frequency) {
572
+ var sheet = xlsx.parse(input);
573
+ var workbook = parseAdditionalSheet(sheet);
574
+ var twoColumnInvalidGeneTypeErrorCount = 0;
575
+ for (let page in workbook.test) {
576
+ twoColumnInvalidGeneTypeErrorCount += workbook.test[page].errors.filter(function (x) {
577
+ return x.errorCode === "INVALID_GENE_TYPE";
578
+ }).length;
579
+ }
580
+ assert.equal(frequency, twoColumnInvalidGeneTypeErrorCount);
581
+ };
582
+
583
+ var twoColumnInvalidValueError = function (input, frequency) {
584
+ var sheet = xlsx.parse(input);
585
+ var workbook = parseAdditionalSheet(sheet);
586
+ var twoColumnInvalidValueErrorCount = 0;
587
+ for (let page in workbook.test) {
588
+ twoColumnInvalidValueErrorCount += workbook.test[page].errors.filter(function (x) {
589
+ return x.errorCode === "INVALID_VALUE";
590
+ }).length;
591
+ }
592
+ assert.equal(frequency, twoColumnInvalidValueErrorCount);
593
+ };
594
+
595
+ var twoColumnInvalidGeneLengthError = function (input, frequency) {
596
+ var sheet = xlsx.parse(input);
597
+ var workbook = parseAdditionalSheet(sheet);
598
+ var twoColumnInvalidGeneLengthErrorCount = 0;
599
+ for (let page in workbook.test) {
600
+ twoColumnInvalidGeneLengthErrorCount += workbook.test[page].errors.filter(function (x) {
601
+ return x.errorCode === "INVALID_GENE_LENGTH";
602
+ }).length;
603
+ }
604
+ assert.equal(frequency, twoColumnInvalidGeneLengthErrorCount);
605
+ };
606
+
607
+ var twoColumnSpecialCharacterError = function (input, frequency) {
608
+ var sheet = xlsx.parse(input);
609
+ var workbook = parseAdditionalSheet(sheet);
610
+ var twoColumnSpecialCharacterErrorCount = 0;
611
+ for (let page in workbook.test) {
612
+ twoColumnSpecialCharacterErrorCount += workbook.test[page].errors.filter(function (x) {
613
+ return x.errorCode === "INVALID_CHARACTER";
614
+ }).length;
615
+ }
616
+ assert.equal(frequency, twoColumnSpecialCharacterErrorCount);
617
+ };
618
+
619
+ // Additional Sheets Warning Tests
620
+
621
+ var additionalSheetExtraneousDataWarning = function (input, frequency) {
622
+ var sheet = xlsx.parse(input);
623
+ var workbook = parseAdditionalSheet(sheet);
624
+ var additionalSheetExtraneousDataWarningCount = 0;
625
+ for (let page in workbook.test) {
626
+ additionalSheetExtraneousDataWarningCount += workbook.test[page].warnings.filter(function (x) {
627
+ return x.warningCode === "EXTRANEOUS_DATA";
628
+ }).length;
629
+ }
630
+ assert.equal(frequency, additionalSheetExtraneousDataWarningCount);
631
+ };
632
+
633
+ var unknownOptimizationParameterWarning = function (input, frequency) {
634
+ var sheet = xlsx.parse(input);
635
+ var workbook = parseAdditionalSheet(sheet);
636
+ var unknownOptimizationParameterWarningCount = 0;
637
+ unknownOptimizationParameterWarningCount += workbook.meta.warnings.filter((x) =>
638
+ x.warningCode === "UNKNOWN_OPTIMIZATION_PARAMETER").length;
639
+ assert.equal(frequency, unknownOptimizationParameterWarningCount);
640
+ };
641
+
642
+ var invalidOptimizationParameterWarning = function (input, frequency) {
643
+ var sheet = xlsx.parse(input);
644
+ var workbook = parseAdditionalSheet(sheet);
645
+ var invalidOptimizationParameterWarningCount = 0;
646
+ invalidOptimizationParameterWarningCount += workbook.meta.warnings.filter((x) =>
647
+ x.warningCode === "INVALID_OPTIMIZATION_PARAMETER").length;
648
+ assert.equal(frequency, invalidOptimizationParameterWarningCount);
649
+ };
650
+
651
+ var unknownOptimizationDiagnosticsParameterWarning = function (input, frequency) {
652
+ var sheet = xlsx.parse(input);
653
+ var workbook = parseAdditionalSheet(sheet);
654
+ var unknownOptimizationDiagnosticsParameterWarningCount = 0;
655
+ unknownOptimizationDiagnosticsParameterWarningCount += workbook.meta2.warnings.filter((x) =>
656
+ x.warningCode === "UNKNOWN_OPTIMIZATION_DIAGNOSTICS_PARAMETER").length;
657
+ assert.equal(frequency, unknownOptimizationDiagnosticsParameterWarningCount);
658
+ };
659
+
660
+ var invalidOptimizationDiagnosticsValueWarning = function (input, frequency) {
661
+ var sheet = xlsx.parse(input);
662
+ var workbook = parseAdditionalSheet(sheet);
663
+ var invalidOptimizationDiagnosticsValueWarningCount = 0;
664
+ invalidOptimizationDiagnosticsValueWarningCount += workbook.meta2.warnings.filter((x) =>
665
+ x.warningCode === "INVALID_OPTIMIZATION_DIAGNOSTICS_VALUE").length;
666
+ assert.equal(frequency, invalidOptimizationDiagnosticsValueWarningCount);
667
+ };
668
+
669
+ var optimizationDiagnosticsExtraneousDataWarning = function (input, frequency) {
670
+ var sheet = xlsx.parse(input);
671
+ var workbook = parseAdditionalSheet(sheet);
672
+ var optimizationDiagnosticsExtraneousDataWarningCount = 0;
673
+ optimizationDiagnosticsExtraneousDataWarningCount += workbook.meta2.warnings.filter((x) =>
674
+ x.warningCode === "EXTRANEOUS_DATA").length;
675
+ assert.equal(frequency, optimizationDiagnosticsExtraneousDataWarningCount);
676
+ };
677
+
678
+ var incorrectMSEGeneHeaderWarning = function (input, frequency) {
679
+ var sheet = xlsx.parse(input);
680
+ var workbook = parseAdditionalSheet(sheet);
681
+ var incorrectMSEGeneHeaderWarningCount = 0;
682
+ incorrectMSEGeneHeaderWarningCount += workbook.meta2.warnings.filter((x) =>
683
+ x.warningCode === "INCORRECT_MSE_GENE_HEADER").length;
684
+ assert.equal(frequency, incorrectMSEGeneHeaderWarningCount);
685
+ };
686
+
687
+ var incorrectMSEHeaderWarning = function (input, frequency) {
688
+ var sheet = xlsx.parse(input);
689
+ var workbook = parseAdditionalSheet(sheet);
690
+ var incorrectMSEHeaderWarningCount = 0;
691
+ incorrectMSEHeaderWarningCount += workbook.meta2.warnings.filter((x) =>
692
+ x.warningCode === "INCORRECT_MSE_HEADER").length;
693
+ assert.equal(frequency, incorrectMSEHeaderWarningCount);
694
+ };
695
+
696
+ var missingMSEDataWarning = function (input, frequency) {
697
+ var sheet = xlsx.parse(input);
698
+ var workbook = parseAdditionalSheet(sheet);
699
+ var missingMSEDataWarningCount = 0;
700
+ missingMSEDataWarningCount += workbook.meta2.warnings.filter((x) =>
701
+ x.warningCode === "MISSING_MSE_DATA").length;
702
+ assert.equal(frequency, missingMSEDataWarningCount);
703
+ };
704
+
705
+ var invalidMSEDataWarning = function (input, frequency) {
706
+ var sheet = xlsx.parse(input);
707
+ var workbook = parseAdditionalSheet(sheet);
708
+ var invalidMSEDataWarningCount = 0;
709
+ invalidMSEDataWarningCount += workbook.meta2.warnings.filter((x) =>
710
+ x.warningCode === "INVALID_MSE_DATA").length;
711
+ assert.equal(frequency, invalidMSEDataWarningCount);
712
+ };
713
+
714
+ // Export Tests
715
+
716
+ var importExportReImportNoErrorsOrWarnings = function (input) {
717
+ var sheet = xlsx.parse(input);
718
+ var inputWorkbook = spreadsheetController.crossSheetInteractions(sheet);
719
+ inputWorkbook["exportExpression"] = inputWorkbook.expression;
720
+ var exportedWorkbook = exportController.grnsightToXlsx(inputWorkbook);
721
+ var sheet2 = xlsx.parse(exportedWorkbook);
722
+ var reImportedWorkbook = spreadsheetController.crossSheetInteractions(sheet2);
723
+ assert.equal(0, reImportedWorkbook.errors.length + reImportedWorkbook.warnings.length);
724
+ };
725
+
726
+ var importFileSameAsExportFile = function (input) {
727
+ var sheet = xlsx.parse(input);
728
+ var inputWorkbook = spreadsheetController.crossSheetInteractions(sheet);
729
+ inputWorkbook["exportExpression"] = inputWorkbook.expression;
730
+ inputWorkbook["exportNetworkType"] = inputWorkbook.sheetType;
731
+ var exportedWorkbook = exportController.grnsightToXlsx(inputWorkbook);
732
+ var sheet2 = xlsx.parse(exportedWorkbook);
733
+ sheet.sort((a, b) => (a.name > b.name) ? 1 : -1);
734
+ sheet2.sort((a, b) => (a.name > b.name) ? 1 : -1);
735
+ assert.deepEqual(sheet, sheet2);
736
+ };
737
+
738
+
739
+
311
740
  exports.noErrors = noErrors;
312
741
  exports.duplicateGeneError = duplicateGeneError;
313
742
  exports.invalidGeneLengthError = invalidGeneLengthError;
@@ -315,12 +744,34 @@ exports.corruptGeneError = corruptGeneError;
315
744
  exports.unknownError = unknownError;
316
745
  exports.missingValueError = missingValueError;
317
746
  exports.missingNetworkError = missingNetworkError;
318
- exports.networkSizeError = networkSizeError;
747
+ exports.workbookSizeError = workbookSizeError;
319
748
  exports.warningsCountError = warningsCountError;
320
749
  exports.invalidDataTypeError = invalidDataTypeError;
321
750
  exports.emptyRowError = emptyRowError;
751
+ exports.idLabelError = idLabelError;
322
752
  exports.errorsCountError = errorsCountError;
323
753
  exports.specialCharacterError = specialCharacterError;
754
+ exports.emptyExpressionColumnError = emptyExpressionColumnError;
755
+ exports.emptyExpressionRowError = emptyExpressionRowError;
756
+ exports.missingColumnHeaderError = missingColumnHeaderError;
757
+ exports.geneMismatchError = geneMismatchError;
758
+ exports.labelError = labelError;
759
+ exports.missingGeneNameError = missingGeneNameError;
760
+ exports.extraGeneNameError = extraGeneNameError;
761
+ exports.negativeTimePointError = negativeTimePointError;
762
+ exports.nonMonotonicTimePointsError = nonMonotonicTimePointsError;
763
+ exports.nonNumericalTimePointError = nonNumericalTimePointError;
764
+ exports.emptyRowDataError = emptyRowDataError;
765
+ exports.emptyMatrixDataError = emptyMatrixDataError;
766
+ exports.emptyColumnDataError = emptyColumnDataError;
767
+ exports.emptyColumnError = emptyColumnError;
768
+ exports.twoColumnIdError = twoColumnIdError;
769
+ exports.additionalSheetIncorrectColumnHeaderError = additionalSheetIncorrectColumnHeaderError;
770
+ exports.additionalSheetMissingColumnHeaderError = additionalSheetMissingColumnHeaderError;
771
+ exports.twoColumnInvalidGeneTypeError = twoColumnInvalidGeneTypeError;
772
+ exports.twoColumnInvalidValueError = twoColumnInvalidValueError;
773
+ exports.twoColumnInvalidGeneLengthError = twoColumnInvalidGeneLengthError;
774
+ exports.twoColumnSpecialCharacterError = twoColumnSpecialCharacterError;
324
775
 
325
776
  exports.checkForGene = checkForGene;
326
777
  exports.noWarnings = noWarnings;
@@ -331,7 +782,19 @@ exports.emptyRowWarning = emptyRowWarning;
331
782
  exports.invalidNetworkSizeWarning = invalidNetworkSizeWarning;
332
783
  exports.extraneousDataWarning = extraneousDataWarning;
333
784
  exports.invalidMatrixDataWarning = invalidMatrixDataWarning;
785
+ exports.incorrectlyNamedExpressionSheetWarning = incorrectlyNamedExpressionSheetWarning;
786
+ exports.missingExpressionWarning = missingExpressionWarning;
334
787
  exports.incorrectlyNamedSheetWarning = incorrectlyNamedSheetWarning;
335
-
336
- // exports.shortestPath = shortestPath;
337
- // exports.betweennessCentrality = betweennessCentrality;
788
+ exports.additionalSheetExtraneousDataWarning = additionalSheetExtraneousDataWarning;
789
+ exports.unknownOptimizationParameterWarning = unknownOptimizationParameterWarning;
790
+ exports.invalidOptimizationParameterWarning = invalidOptimizationParameterWarning;
791
+ exports.unknownOptimizationDiagnosticsParameterWarning = unknownOptimizationDiagnosticsParameterWarning;
792
+ exports.invalidOptimizationDiagnosticsValueWarning = invalidOptimizationDiagnosticsValueWarning;
793
+ exports.optimizationDiagnosticsExtraneousDataWarning = optimizationDiagnosticsExtraneousDataWarning;
794
+ exports.incorrectMSEGeneHeaderWarning = incorrectMSEGeneHeaderWarning;
795
+ exports.incorrectMSEHeaderWarning = incorrectMSEHeaderWarning;
796
+ exports.missingMSEDataWarning = missingMSEDataWarning;
797
+ exports.invalidMSEDataWarning = invalidMSEDataWarning;
798
+
799
+ exports.importExportReImportNoErrorsOrWarnings = importExportReImportNoErrorsOrWarnings;
800
+ exports.importFileSameAsExportFile = importFileSameAsExportFile;