grnsight 3.0.0 → 5.1.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 (489) hide show
  1. package/.eslintignore +1 -0
  2. package/.travis.yml +1 -1
  3. package/GRNsight - Beta.html +194 -0
  4. package/Gemfile.lock +259 -0
  5. package/README.md +1 -1
  6. package/_gh_pages/about.html +360 -45
  7. package/_gh_pages/assets/css/footer.css +3 -0
  8. package/_gh_pages/assets/css/main.css +28 -14
  9. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_estimation_output_binary-no-targetless-genes_sif.png +0 -0
  10. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_estimation_output_binary_sif.png +0 -0
  11. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_graphml_3-edges-and-footer.png +0 -0
  12. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_graphml_header-and-3-nodes.png +0 -0
  13. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_graphml_output_3-edges-and-footer.png +0 -0
  14. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_graphml_output_header-and-3-nodes.png +0 -0
  15. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_input_binary-no-targetless-genes_sif.png +0 -0
  16. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_input_binary_sif.png +0 -0
  17. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_input_concatenated-no-targetless-genes_sif.png +0 -0
  18. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_input_concatenated_sif.png +0 -0
  19. package/_gh_pages/assets/images/Choe-Shin_CMSI402-poster-session_20180430.jpg +0 -0
  20. package/_gh_pages/assets/images/Choe_SCCUR_2017.jpg +0 -0
  21. package/_gh_pages/assets/images/Dahlquist-Choe-Shin_CMSI402-poster-session_20180430.jpg +0 -0
  22. package/_gh_pages/assets/images/Dionisio-Dahlquist_GRNsight-shades_20170506.jpg +0 -0
  23. package/_gh_pages/assets/images/Klein_Samdarshi_TriBeta_2018_20180317.jpg +0 -0
  24. package/_gh_pages/assets/images/Shin_SCCUR_2017.jpg +0 -0
  25. 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
  26. 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
  27. package/_gh_pages/assets/images/gene-pages-0.png +0 -0
  28. package/_gh_pages/assets/images/gene-pages-1.png +0 -0
  29. package/_gh_pages/assets/images/gene-pages-2.png +0 -0
  30. package/_gh_pages/assets/images/gene-pages-3.png +0 -0
  31. package/_gh_pages/assets/images/grnsight2020.png +0 -0
  32. package/_gh_pages/assets/images/v3demo2-grid+nodecoloring.png +0 -0
  33. package/_gh_pages/assets/images/v3demo2-nodecoloring.png +0 -0
  34. package/_gh_pages/assets/images/v3demo2.png +0 -0
  35. package/_gh_pages/assets/js/ga-report.js +11 -11
  36. package/_gh_pages/assets/js/iframeResizer.min.js +9 -0
  37. package/_gh_pages/assets/js/main.js +43 -43
  38. package/_gh_pages/beta.html +29 -24
  39. package/_gh_pages/contact.html +31 -31
  40. package/_gh_pages/coverage/coverage.json +1 -0
  41. package/_gh_pages/coverage/coverage.raw.json +1 -0
  42. package/_gh_pages/coverage/lcov-report/base.css +223 -0
  43. package/_gh_pages/coverage/lcov-report/block-navigation.js +63 -0
  44. package/_gh_pages/coverage/lcov-report/controllers/additional-sheet-parser.js.html +330 -0
  45. package/_gh_pages/coverage/lcov-report/controllers/constants.js.html +243 -0
  46. package/_gh_pages/coverage/lcov-report/controllers/export-controller.js.html +285 -0
  47. package/_gh_pages/coverage/lcov-report/controllers/exporters/graphml.js.html +405 -0
  48. package/_gh_pages/coverage/lcov-report/controllers/exporters/index.html +110 -0
  49. package/_gh_pages/coverage/lcov-report/controllers/exporters/sif.js.html +150 -0
  50. package/_gh_pages/coverage/lcov-report/controllers/helpers.js.html +114 -0
  51. package/_gh_pages/coverage/lcov-report/controllers/import-controller.js.html +233 -0
  52. package/_gh_pages/coverage/lcov-report/controllers/importers/graphml.js.html +716 -0
  53. package/_gh_pages/coverage/lcov-report/controllers/importers/index.html +106 -0
  54. package/_gh_pages/coverage/lcov-report/controllers/importers/sif.js.html +488 -0
  55. package/_gh_pages/coverage/lcov-report/controllers/index.html +162 -0
  56. package/_gh_pages/coverage/lcov-report/controllers/semantic-checker.js.html +810 -0
  57. package/_gh_pages/coverage/lcov-report/controllers/spreadsheet-controller.js.html +1779 -0
  58. package/_gh_pages/coverage/lcov-report/index.html +136 -0
  59. package/_gh_pages/coverage/lcov-report/prettify.css +1 -0
  60. package/_gh_pages/coverage/lcov-report/prettify.js +1 -0
  61. package/_gh_pages/coverage/lcov-report/server/controllers/additional-sheet-parser.js.html +330 -0
  62. package/_gh_pages/coverage/lcov-report/server/controllers/constants.js.html +243 -0
  63. package/_gh_pages/coverage/lcov-report/server/controllers/export-controller.js.html +285 -0
  64. package/_gh_pages/coverage/lcov-report/server/controllers/exporters/graphml.js.html +405 -0
  65. package/_gh_pages/coverage/lcov-report/server/controllers/exporters/index.html +110 -0
  66. package/_gh_pages/coverage/lcov-report/server/controllers/exporters/sif.js.html +150 -0
  67. package/_gh_pages/coverage/lcov-report/server/controllers/graphml-constants.js.html +585 -0
  68. package/_gh_pages/coverage/lcov-report/server/controllers/helpers.js.html +114 -0
  69. package/_gh_pages/coverage/lcov-report/server/controllers/import-controller.js.html +237 -0
  70. package/_gh_pages/coverage/lcov-report/server/controllers/importers/graphml.js.html +585 -0
  71. package/_gh_pages/coverage/lcov-report/server/controllers/importers/index.html +110 -0
  72. package/_gh_pages/coverage/lcov-report/server/controllers/importers/sif.js.html +492 -0
  73. package/_gh_pages/coverage/lcov-report/server/controllers/index.html +188 -0
  74. package/_gh_pages/coverage/lcov-report/server/controllers/semantic-checker.js.html +810 -0
  75. package/_gh_pages/coverage/lcov-report/server/controllers/spreadsheet-controller.js.html +1779 -0
  76. package/_gh_pages/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  77. package/_gh_pages/coverage/lcov-report/sorter.js +158 -0
  78. package/_gh_pages/coverage/lcov-report/web-client/public/js/grnstate.js.html +225 -0
  79. package/_gh_pages/coverage/lcov-report/web-client/public/js/index.html +97 -0
  80. package/_gh_pages/coverage/lcov.info +49 -0
  81. package/_gh_pages/documentation.html +998 -320
  82. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.aux +47 -0
  83. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.bbl +73 -0
  84. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.blg +52 -0
  85. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.log +1056 -0
  86. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.out +7 -0
  87. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.synctex.gz +0 -0
  88. package/_gh_pages/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_text-only_revised-Dondi.docx +0 -0
  89. package/_gh_pages/encryption/server.cert +21 -0
  90. package/_gh_pages/encryption/server.key +28 -0
  91. package/_gh_pages/favicon.ico +0 -0
  92. package/_gh_pages/index.html +45 -22
  93. package/_gh_pages/links.html +47 -28
  94. package/_gh_pages/news.html +103 -21
  95. package/_gh_pages/onlyfooter.html +78 -0
  96. package/_gh_pages/onlyheader.html +64 -0
  97. package/_gh_pages/onlysidebar.html +73 -0
  98. package/_gh_pages/package-lock.json +14048 -0
  99. package/_gh_pages/people.html +129 -40
  100. package/_gh_pages/privacy.html +23 -17
  101. package/_gh_pages/publications.html +75 -33
  102. package/_gh_pages/robots.txt +1 -0
  103. package/_gh_pages/sitemap.xml +87 -74
  104. package/_gh_pages/test-files/import-samples/attributes.graphml +40 -0
  105. package/_gh_pages/test-files/import-samples/port.graphml +32 -0
  106. package/_gh_pages/test-files/import-samples/simple.graphml +31 -0
  107. package/_gh_pages/web-client/public/js/grnsight.min.js +2347 -0
  108. package/_gh_pages/web-client/public/stylesheets/grnsight.css +443 -0
  109. package/coverage/coverage.json +1 -1
  110. package/coverage/coverage.raw.json +1 -0
  111. package/coverage/lcov-report/base.css +18 -8
  112. package/coverage/lcov-report/block-navigation.js +63 -0
  113. package/coverage/lcov-report/controllers/additional-sheet-parser.js.html +330 -0
  114. package/coverage/lcov-report/controllers/constants.js.html +65 -61
  115. package/coverage/lcov-report/controllers/export-controller.js.html +96 -92
  116. package/coverage/lcov-report/controllers/exporters/graphml.js.html +168 -164
  117. package/coverage/lcov-report/controllers/exporters/index.html +36 -32
  118. package/coverage/lcov-report/controllers/exporters/sif.js.html +65 -61
  119. package/coverage/lcov-report/controllers/helpers.js.html +25 -21
  120. package/coverage/lcov-report/controllers/index.html +49 -45
  121. package/coverage/lcov-report/controllers/semantic-checker.js.html +403 -396
  122. package/coverage/lcov-report/controllers/spreadsheet-controller.js.html +973 -879
  123. package/coverage/lcov-report/index.html +45 -28
  124. package/coverage/lcov-report/server/controllers/additional-sheet-parser.js.html +330 -0
  125. package/coverage/lcov-report/server/controllers/constants.js.html +243 -0
  126. package/coverage/lcov-report/server/controllers/export-controller.js.html +285 -0
  127. package/coverage/lcov-report/server/controllers/exporters/graphml.js.html +405 -0
  128. package/coverage/lcov-report/server/controllers/exporters/index.html +110 -0
  129. package/coverage/lcov-report/server/controllers/exporters/sif.js.html +150 -0
  130. package/coverage/lcov-report/server/controllers/graphml-constants.js.html +585 -0
  131. package/coverage/lcov-report/server/controllers/helpers.js.html +114 -0
  132. package/coverage/lcov-report/server/controllers/import-controller.js.html +237 -0
  133. package/coverage/lcov-report/server/controllers/importers/graphml.js.html +585 -0
  134. package/coverage/lcov-report/server/controllers/importers/index.html +110 -0
  135. package/coverage/lcov-report/server/controllers/importers/sif.js.html +492 -0
  136. package/coverage/lcov-report/server/controllers/index.html +188 -0
  137. package/coverage/lcov-report/server/controllers/semantic-checker.js.html +810 -0
  138. package/coverage/lcov-report/server/controllers/spreadsheet-controller.js.html +1779 -0
  139. package/coverage/lcov-report/web-client/public/js/grnstate.js.html +225 -0
  140. package/coverage/lcov-report/web-client/public/js/index.html +97 -0
  141. package/coverage/lcov.info +1758 -876
  142. package/encryption/server.cert +21 -0
  143. package/encryption/server.key +28 -0
  144. package/package.json +46 -22
  145. package/server/app.js +6 -2
  146. package/server/config/config.js +16 -7
  147. package/server/controllers/additional-sheet-parser.js +292 -55
  148. package/server/controllers/api-controllers.js +36 -0
  149. package/server/controllers/constants.js +4 -37
  150. package/server/controllers/database-controller.js +129 -0
  151. package/server/controllers/demo-workbooks.js +5973 -0
  152. package/server/controllers/export-constants.js +78 -0
  153. package/server/controllers/export-controller.js +25 -3
  154. package/server/controllers/exporters/graphml.js +15 -15
  155. package/server/controllers/exporters/sif.js +7 -7
  156. package/server/controllers/exporters/xlsx.js +183 -0
  157. package/server/controllers/expression-sheet-parser.js +170 -0
  158. package/server/controllers/ga-controller.js +1 -1
  159. package/server/controllers/graphml-constants.js +0 -17
  160. package/server/controllers/helpers.js +25 -1
  161. package/server/controllers/import-controller.js +2 -2
  162. package/server/controllers/importers/graphml.js +17 -20
  163. package/server/controllers/importers/sif.js +22 -18
  164. package/server/controllers/network-sheet-parser.js +307 -0
  165. package/server/controllers/semantic-checker.js +30 -162
  166. package/server/controllers/sif-constants.js +36 -0
  167. package/server/controllers/spreadsheet-controller.js +277 -424
  168. package/server/controllers/workbook-constants.js +521 -0
  169. package/test/additional-sheet-parser-tests.js +147 -38
  170. package/test/api-tests.js +245 -0
  171. package/test/errors-adjacency-matrix-modifications.js +30 -29
  172. package/test/errors-gene-name-modifications.js +9 -0
  173. package/test/errors-graph-tests.js +4 -4
  174. package/test/errors-sheet-modifications.js +10 -2
  175. package/test/export-tests.js +431 -24
  176. package/test/expression-data-import-tests.js +113 -0
  177. package/test/grnstate-tests.js +29 -0
  178. package/test/import-graphml-tests.js +59 -40
  179. package/test/import-sif-tests.js +50 -37
  180. package/test/test.js +557 -93
  181. package/test/warnings-adjacency-matrix-modifications.js +8 -7
  182. package/test-files/additional-sheet-test-files/optimization-diagnostics-default.xlsx +0 -0
  183. package/test-files/additional-sheet-test-files/optimization-diagnostics-extraneous-data.xlsx +0 -0
  184. package/test-files/additional-sheet-test-files/optimization-diagnostics-incorrect-MSE-gene-header.xlsx +0 -0
  185. package/test-files/additional-sheet-test-files/optimization-diagnostics-incorrect-MSE-header.xlsx +0 -0
  186. package/test-files/additional-sheet-test-files/optimization-diagnostics-incorrect-column-headers.xlsx +0 -0
  187. package/test-files/additional-sheet-test-files/optimization-diagnostics-invalid-MSE-data.xlsx +0 -0
  188. package/test-files/additional-sheet-test-files/optimization-diagnostics-invalid-value.xlsx +0 -0
  189. package/test-files/additional-sheet-test-files/optimization-diagnostics-missing-MSE-data.xlsx +0 -0
  190. package/test-files/additional-sheet-test-files/optimization-diagnostics-missing-column-headers.xlsx +0 -0
  191. package/test-files/additional-sheet-test-files/optimization-diagnostics-missing-header.xlsx +0 -0
  192. package/test-files/additional-sheet-test-files/optimization-diagnostics-unknown-parameter.xlsx +0 -0
  193. package/test-files/additional-sheet-test-files/optimization-parameters-default.xlsx +0 -0
  194. package/test-files/additional-sheet-test-files/optimization-parameters-incorrect-headers.xlsx +0 -0
  195. package/test-files/additional-sheet-test-files/optimization-parameters-invalid-optimization-parameter.xlsx +0 -0
  196. package/test-files/additional-sheet-test-files/optimization-parameters-missing-headers.xlsx +0 -0
  197. package/test-files/additional-sheet-test-files/optimization-parameters-unknown-parameter.xlsx +0 -0
  198. package/test-files/additional-sheet-test-files/two-column-sheets-extraneous-data.xlsx +0 -0
  199. package/test-files/additional-sheet-test-files/two-column-sheets-incorrect-cell-A1.xlsx +0 -0
  200. package/test-files/additional-sheet-test-files/two-column-sheets-incorrect-column-header.xlsx +0 -0
  201. package/test-files/additional-sheet-test-files/two-column-sheets-invalid-gene-length.xlsx +0 -0
  202. package/test-files/additional-sheet-test-files/two-column-sheets-invalid-gene-type.xlsx +0 -0
  203. package/test-files/additional-sheet-test-files/two-column-sheets-invalid-value.xlsx +0 -0
  204. package/test-files/additional-sheet-test-files/two-column-sheets-missing-column-header.xlsx +0 -0
  205. package/test-files/additional-sheet-test-files/two-column-sheets-special-character.xlsx +0 -0
  206. package/test-files/adjacency-matrix-modifications/asymmetric-gene-order-input.xlsx +0 -0
  207. package/test-files/adjacency-matrix-modifications/asymmetric-gene-order-output.xlsx +0 -0
  208. package/test-files/adjacency-matrix-modifications/extra-column-adjacent-input.xlsx +0 -0
  209. package/test-files/adjacency-matrix-modifications/extra-column-adjacent-output.xlsx +0 -0
  210. package/test-files/adjacency-matrix-modifications/extra-column-end-of-sheet-input.xlsx +0 -0
  211. package/test-files/adjacency-matrix-modifications/extra-column-end-of-sheet-output.xlsx +0 -0
  212. package/test-files/adjacency-matrix-modifications/extra-data-random-cell-both-output.xlsx +0 -0
  213. package/test-files/adjacency-matrix-modifications/extra-data-random-cell-network-only-input.xlsx +0 -0
  214. package/test-files/adjacency-matrix-modifications/extra-data-random-cell-network-only-output.xlsx +0 -0
  215. package/test-files/adjacency-matrix-modifications/extra-data-random-cell-network-optimized-only-output.xlsx +0 -0
  216. package/test-files/adjacency-matrix-modifications/extra-row-end-of-sheet-input.xlsx +0 -0
  217. package/test-files/adjacency-matrix-modifications/extra-row-end-of-sheet-output.xlsx +0 -0
  218. package/test-files/adjacency-matrix-modifications/incorrect-network-cell-A1.xlsx +0 -0
  219. package/test-files/adjacency-matrix-modifications/missing-column-end-input.xlsx +0 -0
  220. package/test-files/adjacency-matrix-modifications/missing-column-end-output.xlsx +0 -0
  221. package/test-files/adjacency-matrix-modifications/missing-data-input.xlsx +0 -0
  222. package/test-files/adjacency-matrix-modifications/missing-data-output.xlsx +0 -0
  223. package/test-files/adjacency-matrix-modifications/missing-row-end-input.xlsx +0 -0
  224. package/test-files/adjacency-matrix-modifications/missing-row-end-output.xlsx +0 -0
  225. package/test-files/adjacency-matrix-modifications/missing-row-middle-input.xlsx +0 -0
  226. package/test-files/adjacency-matrix-modifications/missing-row-middle-output.xlsx +0 -0
  227. package/test-files/adjacency-matrix-modifications/missing-value-bottom-corner-input.xlsx +0 -0
  228. package/test-files/adjacency-matrix-modifications/missing-value-bottom-corner-output.xlsx +0 -0
  229. package/test-files/adjacency-matrix-modifications/value-replaced-w-spaces-both-output.xlsx +0 -0
  230. package/test-files/adjacency-matrix-modifications/value-replaced-w-spaces-net-only-input.xlsx +0 -0
  231. package/test-files/adjacency-matrix-modifications/value-replaced-w-spaces-net-op-only-output.xlsx +0 -0
  232. package/test-files/adjacency-matrix-modifications/value-replaced/342/200/223w-spaces-net-only-output.xlsx +0 -0
  233. package/test-files/demo-files/15-genes_28-edges_db5_Dahlquist-data_estimation_output.xlsx +0 -0
  234. package/test-files/demo-files/15-genes_28-edges_db5_Dahlquist-data_input.xlsx +0 -0
  235. package/test-files/expression-data-test-sheets/expression_sheet_correct_numbering.xlsx +0 -0
  236. package/test-files/expression-data-test-sheets/expression_sheet_different_number_of_columns.xlsx +0 -0
  237. package/test-files/expression-data-test-sheets/expression_sheet_empty_column.xlsx +0 -0
  238. package/test-files/expression-data-test-sheets/expression_sheet_empty_row.xlsx +0 -0
  239. package/test-files/expression-data-test-sheets/expression_sheet_erroneous_data.xlsx +0 -0
  240. package/test-files/expression-data-test-sheets/expression_sheet_extra_gene_name.xlsx +0 -0
  241. package/test-files/expression-data-test-sheets/expression_sheet_incorrectly_ordered_time_points.xlsx +0 -0
  242. package/test-files/expression-data-test-sheets/expression_sheet_mismatched_case_gene_names.xlsx +0 -0
  243. package/test-files/expression-data-test-sheets/expression_sheet_mismatched_gene_names.xlsx +0 -0
  244. package/test-files/expression-data-test-sheets/expression_sheet_missing_column_header.xlsx +0 -0
  245. package/test-files/expression-data-test-sheets/expression_sheet_missing_data_error.xlsx +0 -0
  246. package/test-files/expression-data-test-sheets/expression_sheet_missing_data_ok.xlsx +0 -0
  247. package/test-files/expression-data-test-sheets/expression_sheet_missing_data_ok_export_exact.xlsx +0 -0
  248. package/test-files/expression-data-test-sheets/expression_sheet_missing_gene_name.xlsx +0 -0
  249. package/test-files/expression-data-test-sheets/expression_sheet_name_not_in_optparams.xlsx +0 -0
  250. package/test-files/expression-data-test-sheets/expression_sheet_name_not_present.xlsx +0 -0
  251. package/test-files/expression-data-test-sheets/expression_sheet_negative_time_points.xlsx +0 -0
  252. package/test-files/expression-data-test-sheets/expression_sheet_non_numerical_time_points.xlsx +0 -0
  253. package/test-files/expression-data-test-sheets/expression_sheet_not_existing.xlsx +0 -0
  254. package/test-files/expression-data-test-sheets/expression_sheet_wrong_id_label.xlsx +0 -0
  255. package/test-files/expression-data-test-sheets/expression_sheet_wrong_order_gene_names.xlsx +0 -0
  256. package/test-files/expression-data-test-sheets/expression_sheet_wrong_sheet_name_case.xlsx +0 -0
  257. package/test-files/expression-data-test-sheets/expression_sheet_wrong_sheet_name_convention.xlsx +0 -0
  258. package/test-files/gene-name-modifications/NaN-as-gene-name-input.xlsx +0 -0
  259. package/test-files/gene-name-modifications/NaN-as-gene-name-output.xlsx +0 -0
  260. package/test-files/gene-name-modifications/mismatched-case-related-input.xlsx +0 -0
  261. package/test-files/gene-name-modifications/mismatched-case-related-output.xlsx +0 -0
  262. package/test-files/gene-name-modifications/mismatched-case-unrelated-input.xlsx +0 -0
  263. package/test-files/gene-name-modifications/mismatched-case-unrelated-output.xlsx +0 -0
  264. package/test-files/gene-name-modifications/numbers-as-gene-name-related-input.xlsx +0 -0
  265. package/test-files/gene-name-modifications/numbers-as-gene-name-related-output.xlsx +0 -0
  266. package/test-files/gene-name-modifications/numbers-as-gene-name-unrelated-input.xlsx +0 -0
  267. package/test-files/gene-name-modifications/numbers-as-gene-name-unrelated-output.xlsx +0 -0
  268. package/test-files/graph-tests/different-sized-networks/{80-genes-0-edges.xlsx → 134-genes-0-edges.xlsx} +0 -0
  269. package/test-files/graph-tests/different-sized-networks/{45-genes-max-edges.xlsx → 44-source-genes-45-target-genes-max-edges.xlsx} +0 -0
  270. package/test-files/graph-tests/different-sized-networks/{1-gene-0-edges.xlsx → unused-files/1-gene-0-edges.xlsx} +0 -0
  271. package/test-files/graph-tests/different-sized-networks/{1-gene-1-edges.xlsx → unused-files/1-gene-1-edges.xlsx} +0 -0
  272. package/test-files/graph-tests/different-sized-networks/{10-genes-50-edges.xlsx → unused-files/10-genes-50-edges.xlsx} +0 -0
  273. package/test-files/graph-tests/different-sized-networks/{10-genes-90-edges.xlsx → unused-files/10-genes-90-edges.xlsx} +0 -0
  274. package/test-files/graph-tests/different-sized-networks/{100-genes-0-edges.xlsx → unused-files/100-genes-0-edges.xlsx} +0 -0
  275. package/test-files/graph-tests/different-sized-networks/{110-genes-0-edges.xlsx → unused-files/110-genes-0-edges.xlsx} +0 -0
  276. package/test-files/graph-tests/different-sized-networks/{120-genes-0-edges.xlsx → unused-files/120-genes-0-edges.xlsx} +0 -0
  277. package/test-files/graph-tests/different-sized-networks/{130-genes-0-edges.xlsx → unused-files/130-genes-0-edges.xlsx} +0 -0
  278. package/test-files/graph-tests/different-sized-networks/{140-genes-0-edges.xlsx → unused-files/140-genes-0-edges.xlsx} +0 -0
  279. package/test-files/graph-tests/different-sized-networks/{150-genes-10000-edges.xlsx → unused-files/150-genes-10000-edges.xlsx} +0 -0
  280. package/test-files/graph-tests/different-sized-networks/{150-genes-20000-edges.xlsx → unused-files/150-genes-20000-edges.xlsx} +0 -0
  281. package/test-files/graph-tests/different-sized-networks/{150-genes-max-edges.xlsx → unused-files/150-genes-max-edges.xlsx} +0 -0
  282. package/test-files/graph-tests/different-sized-networks/{160-genes-max-edges.xlsx → unused-files/160-genes-max-edges.xlsx} +0 -0
  283. package/test-files/graph-tests/different-sized-networks/{20-genes-max-edges.xlsx → unused-files/20-genes-max-edges.xlsx} +0 -0
  284. package/test-files/graph-tests/different-sized-networks/{25-genes-max-edges.xlsx → unused-files/25-genes-max-edges.xlsx} +0 -0
  285. package/test-files/graph-tests/different-sized-networks/{30-genes-max-edges.xlsx → unused-files/30-genes-max-edges.xlsx} +0 -0
  286. package/test-files/graph-tests/different-sized-networks/{34-genes-0-edges.xlsx → unused-files/34-genes-0-edges.xlsx} +0 -0
  287. package/test-files/graph-tests/different-sized-networks/{34-genes-40-edges.xlsx → unused-files/34-genes-40-edges.xlsx} +0 -0
  288. package/test-files/graph-tests/different-sized-networks/{34-genes-65-edges.xlsx → unused-files/34-genes-65-edges.xlsx} +0 -0
  289. package/test-files/graph-tests/different-sized-networks/{34-genes-90-edges.xlsx → unused-files/34-genes-90-edges.xlsx} +0 -0
  290. package/test-files/graph-tests/different-sized-networks/{5-genes-max-edges.xlsx → unused-files/5-genes-max-edges.xlsx} +0 -0
  291. package/test-files/graph-tests/different-sized-networks/{51-genes-max-edges.xlsx → unused-files/51-genes-max-edges.xlsx} +0 -0
  292. package/test-files/graph-tests/different-sized-networks/{52-genes-max-edges.xlsx → unused-files/52-genes-max-edges.xlsx} +0 -0
  293. package/test-files/graph-tests/different-sized-networks/{55-genes-0-edges.xlsx → unused-files/55-genes-0-edges.xlsx} +0 -0
  294. package/test-files/graph-tests/different-sized-networks/{55-genes-max-edges.xlsx → unused-files/55-genes-max-edges.xlsx} +0 -0
  295. package/test-files/graph-tests/different-sized-networks/{65-genes-0-edges.xlsx → unused-files/65-genes-0-edges.xlsx} +0 -0
  296. package/test-files/graph-tests/different-sized-networks/{7-genes-max-edges.xlsx → unused-files/7-genes-max-edges.xlsx} +0 -0
  297. package/test-files/graph-tests/different-sized-networks/{70-genes-0-edges.xlsx → unused-files/70-genes-0-edges.xlsx} +0 -0
  298. package/test-files/graph-tests/different-sized-networks/{9-genes-max-edges.xlsx → unused-files/9-genes-max-edges.xlsx} +0 -0
  299. package/test-files/graph-tests/different-sized-networks/{90-genes-0-edges.xlsx → unused-files/90-genes-0-edges.xlsx} +0 -0
  300. 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
  301. package/test-files/node-tests/long-gene-name-no-spaces-first.xlsx +0 -0
  302. package/test-files/node-tests/long-gene-name-no-spaces-second.xlsx +0 -0
  303. package/test-files/node-tests/long-gene-name-spaces.xlsx +0 -0
  304. package/test-files/species-test-data/15-genes_28-edges_db5_Dahlquist-data_input_no-species.xlsx +0 -0
  305. package/test-files/species-test-data/15-genes_28-edges_db5_Dahlquist-data_input_with-species.xlsx +0 -0
  306. package/test-files/species-test-data/3-gene_7-edge_elegans.xlsx +0 -0
  307. package/test-files/species-test-data/3-gene_7-edge_melanogaster.xlsx +0 -0
  308. package/test-files/species-test-data/3-gene_7-edge_musculus.xlsx +0 -0
  309. package/test-files/species-test-data/3-gene_7-edge_sapiens.xlsx +0 -0
  310. package/test-files/species-test-data/kev-fake-data-sapiens-no-exp-data.xlsx +0 -0
  311. package/test-files/spreadsheet-controller-test-files/sheet-name-capitalized-network-optimized-weights.xlsx +0 -0
  312. package/test-files/spreadsheet-controller-test-files/sheet-name-capitalized-network.xlsx +0 -0
  313. package/web-client/app.js +1 -1
  314. package/web-client/config/config.js +5 -5
  315. package/web-client/controllers/main.js +5 -1
  316. package/web-client/public/favicon.ico +0 -0
  317. package/web-client/public/gene/GRNSight.svg +689 -0
  318. package/web-client/public/gene/PageDesignREADME.md +1 -0
  319. package/web-client/public/gene/api.js +442 -0
  320. package/web-client/public/gene/info.css +181 -0
  321. package/web-client/public/gene/info.js +334 -0
  322. package/web-client/public/gene/integrationREADME.md +52 -0
  323. package/web-client/public/js/constants.js +182 -0
  324. package/web-client/public/js/getGeneInformationREADME.md +4 -0
  325. package/web-client/public/js/graph-statistics.js +7 -7
  326. package/web-client/public/js/graph.js +480 -476
  327. package/web-client/public/js/grnsight.js +10 -9
  328. package/web-client/public/js/grnsight.min.js +2335 -0
  329. package/web-client/public/js/grnstate.js +147 -0
  330. package/web-client/public/js/iframe-coordination.js +55 -0
  331. package/web-client/public/js/setup-handlers.js +617 -0
  332. package/web-client/public/js/setup-load-and-import-handlers.js +180 -0
  333. package/web-client/public/js/update-app.js +980 -0
  334. package/web-client/public/js/upload.js +352 -578
  335. package/web-client/public/js/warnings.js +60 -0
  336. package/web-client/public/lib/iframeSizer.contentWindow.min.js +10 -0
  337. package/{documents/SDF/CMSI_402/spring_2018/writtenStatusReport4 → web-client/public/lib/jaspar-front.html} +0 -0
  338. package/web-client/public/stylesheets/grnsight.styl +176 -26
  339. package/web-client/public/stylesheets/print.styl +10 -4
  340. package/web-client/views/{graph.jade → graph.pug} +1 -3
  341. package/web-client/views/info.pug +215 -0
  342. package/web-client/views/upload.pug +587 -0
  343. package/_gh_pages/Gemfile +0 -7
  344. package/_gh_pages/Gemfile.lock +0 -129
  345. package/documents/SDF/CMSI_402/spring_2014/Southwick_CMSI402_Spring2014_software-development-plan.md +0 -71
  346. package/documents/SDF/CMSI_402/spring_2014/Southwick_CMSI402_Spring2014_software-requirements-specification.md +0 -71
  347. package/documents/SDF/CMSI_402/spring_2014/use-case-diagram-spring-2014.jpg +0 -0
  348. package/documents/SDF/CMSI_402/spring_2017/Anguiano_402_Final_Presentation.pptx +0 -0
  349. package/documents/SDF/CMSI_402/spring_2017/Anguiano_402_Presentation_Final_Poster.pdf +0 -0
  350. package/documents/SDF/CMSI_402/spring_2017/Anguiano_CMSI402_Spring2017_project-proposal-presentation.pptx +0 -0
  351. package/documents/SDF/CMSI_402/spring_2017/Anguiano_CMSI402_Spring2017_project-proposal.docx +0 -0
  352. package/documents/SDF/CMSI_402/spring_2017/Anguiano_CMSI402_Spring2017_software-development-plan.docx +0 -0
  353. package/documents/SDF/CMSI_402/spring_2017/Anguiano_CMSI402_Spring2017_software-requirements-specification.docx +0 -0
  354. package/documents/SDF/CMSI_402/spring_2017/Design Review Presentation.pptx +0 -0
  355. package/documents/SDF/CMSI_402/spring_2018/0402report.docx +0 -0
  356. package/documents/SDF/CMSI_402/spring_2018/0409report.docx +0 -0
  357. package/documents/SDF/CMSI_402/spring_2018/402-gantt.png +0 -0
  358. package/documents/SDF/CMSI_402/spring_2018/402SRS_GRNSightFeedback01.txt +0 -28
  359. package/documents/SDF/CMSI_402/spring_2018/402_SPD.md +0 -223
  360. package/documents/SDF/CMSI_402/spring_2018/ChoeShinCMSI402_Final.pptx +0 -0
  361. package/documents/SDF/CMSI_402/spring_2018/ProjectProposal.md +0 -22
  362. package/documents/SDF/CMSI_402/spring_2018/SoftwareRequirementsSpecification.md +0 -88
  363. package/documents/SDF/CMSI_402/spring_2018/homework/choe_eileen/Choe_Eileen_CMSI 402_HW1.pdf +0 -0
  364. package/documents/SDF/CMSI_402/spring_2018/homework/choe_eileen/Choe_Eileen_CMSI402_HW2.pdf +0 -0
  365. package/documents/SDF/CMSI_402/spring_2018/homework/shin_jen/402hw2.docx +0 -0
  366. package/documents/SDF/CMSI_402/spring_2018/homework/shin_jen/Jen - 402Hw1.docx +0 -0
  367. package/documents/SDF/CMSI_402/spring_2018/homework/shin_jen/Jen - hw3.docx +0 -0
  368. package/documents/SDF/CMSI_402/spring_2018/writtenStatusReport.docx +0 -0
  369. package/documents/Varshneya_Samdarshi_LMU_Symposium_2016.pptx +0 -0
  370. package/documents/abstracts/Anguiano_Varshneya_Undergraduate-Research-Symposium_2017_abstract.pdf +0 -0
  371. package/documents/abstracts/SIGGRAPH 2017 Abstract/ACM-Reference-Format.bst +0 -3478
  372. package/documents/abstracts/SIGGRAPH 2017 Abstract/Figure1_zoom100.png +0 -0
  373. package/documents/abstracts/SIGGRAPH 2017 Abstract/acmart.cls +0 -2352
  374. package/documents/abstracts/SIGGRAPH 2017 Abstract/acmart.ins +0 -29
  375. package/documents/abstracts/SIGGRAPH 2017 Abstract/always-weights.png +0 -0
  376. package/documents/abstracts/SIGGRAPH 2017 Abstract/auto.png +0 -0
  377. package/documents/abstracts/SIGGRAPH 2017 Abstract/networkA.png +0 -0
  378. package/documents/abstracts/SIGGRAPH 2017 Abstract/networkB-normalized.png +0 -0
  379. package/documents/abstracts/SIGGRAPH 2017 Abstract/networkB.png +0 -0
  380. package/documents/abstracts/SIGGRAPH 2017 Abstract/never-weights.png +0 -0
  381. package/documents/abstracts/SIGGRAPH 2017 Abstract/representative-image/screenshot.jpg +0 -0
  382. package/documents/abstracts/SIGGRAPH 2017 Abstract/representative-image/screenshot3x2.png +0 -0
  383. package/documents/abstracts/SIGGRAPH 2017 Abstract/representative-image/withweights3x2.png +0 -0
  384. package/documents/abstracts/SIGGRAPH 2017 Abstract/screenshot-auto.png +0 -0
  385. package/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.bib +0 -85
  386. package/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.pdf +0 -0
  387. package/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.tex +0 -235
  388. package/documents/abstracts/SWE Collegiate Competition 2017.md +0 -9
  389. package/documents/abstracts/Varshneya_Samdarshi_Southern-California-Systems-Biology_2017_abstract.docx +0 -0
  390. package/documents/developer_documents/State Diagram.graphml +0 -3525
  391. package/documents/developer_documents/graphml/State Diagram.graphml +0 -3115
  392. package/documents/developer_documents/older_versions/GRNsight State Diagram old.png +0 -0
  393. package/documents/developer_documents/older_versions/GRNsight State Diagram.png +0 -0
  394. package/documents/developer_documents/testing_script_generator/GRNsightTestingDocument.md +0 -998
  395. package/documents/developer_documents/testing_script_generator/featureList.json +0 -486
  396. package/documents/developer_documents/testing_script_generator/testing-script-generator.js +0 -149
  397. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_conference-presentations_2016.docx +0 -0
  398. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_manuscript_2016.docx +0 -0
  399. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_manuscript_2016_Table1.docx +0 -0
  400. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_manuscript_2016_references.rtf +0 -264
  401. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_manuscript_2016_text-only.docx +0 -0
  402. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/21-genes_31-edges_Schade-data_for-screenshots.xlsx +0 -0
  403. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom100.jpg +0 -0
  404. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom100.png +0 -0
  405. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom100.psd +0 -0
  406. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom145.jpg +0 -0
  407. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom145.png +0 -0
  408. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom145.psd +0 -0
  409. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom145_900pix-wide.psd +0 -0
  410. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom100.jpg +0 -0
  411. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom100.png +0 -0
  412. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom100.psd +0 -0
  413. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom145.jpg +0 -0
  414. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom145.png +0 -0
  415. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom145.psd +0 -0
  416. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom145_900pix-wide.psd +0 -0
  417. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5A.pdf +0 -0
  418. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5B.pdf +0 -0
  419. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5C.eps +0 -0
  420. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5D.pdf +0 -0
  421. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5E.pdf +0 -0
  422. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5F.eps +0 -0
  423. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5_compiled.png +0 -0
  424. package/documents/manuscripts/peerj-computerscience-2016/figures/submitted-versions/Figure3_GRNsight-Architecture.pdf +0 -0
  425. package/documents/manuscripts/peerj-computerscience-2016/figures/submitted-versions/Figure4_GRNsight-Screenshot.pdf +0 -0
  426. package/documents/manuscripts/peerj-computerscience-2016/figures/submitted-versions/Figure5_compiled.pdf +12 -5383
  427. package/documents/manuscripts/peerj-computerscience-2016/peerj-reviewing-10823-v0.pdf +0 -0
  428. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_conference-presentations_2016_revised.docx +0 -0
  429. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_cover-letter-and-response_2016.pdf +0 -0
  430. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_cover-letter_2016.docx +0 -0
  431. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_cover-letter_2016.pdf +0 -0
  432. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_Table1.docx +0 -0
  433. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_references_revised.rtf +0 -385
  434. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_text-only_revised.docx +0 -0
  435. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_text-only_revised_marked.docx +0 -0
  436. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_response-to-reviewers_2016.docx +0 -0
  437. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_response-to-reviewers_2016.pdf +0 -0
  438. package/documents/manuscripts/peerj-computerscience-2016/revisions/figures/Figure3_GRNsight-Architecture.pdf +0 -0
  439. package/documents/manuscripts/peerj-computerscience-2016/revisions/figures/Figure4_GRNsight-Screenshot-auto.pdf +0 -0
  440. package/documents/manuscripts/peerj-computerscience-2016/revisions/figures/Figure4_GRNsight-Screenshot.pdf +0 -0
  441. package/documents/manuscripts/peerj-computerscience-2016/revisions/peerj-reviewing-10823-v1.pdf +0 -0
  442. package/documents/posters/Anguiano_402_Presentation_Draft_Poster.pdf +0 -0
  443. package/documents/posters/Anguiano_402_Presentation_Draft_Poster.pptx +0 -0
  444. package/documents/posters/Anguiano_Varshneya_LMU-Symposium_2015_poster.pptx +0 -0
  445. package/documents/posters/Anguiano_Varshneya_SCCUR-Poster_20141122_poster.pptx +0 -0
  446. package/documents/posters/ChoeShinCMSI402-2.pptx +0 -0
  447. package/documents/posters/ChoeShinCMSI402.pptx +0 -0
  448. package/documents/posters/ChoeShinCMSI402Final.pptx +0 -0
  449. package/documents/posters/Dahlquist-et-al_BOSC_ISMB_2016_poster.pptx +0 -0
  450. package/documents/posters/Samdarshi et al. LMU Symposium 2017-finalDraft.pptx +0 -0
  451. package/documents/posters/Samdarshi et al. LMU Symposium 2018-firstDraft.pptx +0 -0
  452. package/documents/posters/Shin et al. SCCUR 2017 FinalDraft.pptx +0 -0
  453. package/documents/posters/Southwick_CMSI402_2014_poster.pptx +0 -0
  454. package/documents/posters/Varshneya_Samdarshi_LMU-Symposium_2016_poster.pptx +0 -0
  455. package/documents/posters/Varshneya_Samdarshi_Southern-California-Systems-Biology-Conference_2017_poster.pptx +0 -0
  456. package/documents/posters/~$Samdarshi et al. LMU Symposium 2018-firstDraft.pptx +0 -0
  457. package/documents/presentations/Anguiano_402_Final_Presentation.pptx +0 -0
  458. package/documents/presentations/Choe_SCCUR2017.pptx +0 -0
  459. package/documents/presentations/Choe_SWERapidFire2017_final.pptx +0 -0
  460. package/documents/presentations/Dahlquist_BOSC_20160709.pptx +0 -0
  461. package/documents/presentations/Dahlquist_ExperimentalBiology_20160404_talk.pptx +0 -0
  462. package/documents/presentations/Dahlquist_SoCalSysBio_20150131_talk.pptx +0 -0
  463. package/documents/presentations/Samdarshi et al. LMU Symposium 2017-draft.pptx +0 -0
  464. package/documents/presentations/Southwick_Anguiano_LMU-Symposium_20140329_talk.pptx +0 -0
  465. package/documents/presentations/Southwick_CMSI402_Presentation_20140508_talk.pptx +0 -0
  466. package/documents/presentations/Varshneya-Anguiano-LMU Symposium-201703.pptx +0 -0
  467. package/documents/presentations/~$Choe_SWERapidFire2017_final.pptx +0 -0
  468. package/documents/reports/Varshneya-201701-AnnotatedBibliography.docx +0 -0
  469. package/documents/reports/Varshneya-201702-Introduction.docx +0 -0
  470. package/documents/reports/Varshneya-201702-Outline.docx +0 -0
  471. package/documents/reports/Varshneya-201703-Discussion.docx +0 -0
  472. package/documents/reports/Varshneya-201703-MMResults.docx +0 -0
  473. package/documents/reports/Varshneya-201704-Draft-1.docx +0 -0
  474. package/documents/reports/Varshneya-201704-Final.docx +0 -0
  475. package/test/graph-library-tests.js +0 -165
  476. package/test-files/demo-files/21-genes_50-edges_Dahlquist-data_estimation_output.xlsx +0 -0
  477. package/test-files/demo-files/21-genes_50-edges_Dahlquist-data_input.xlsx +0 -0
  478. package/test-files/graph-tests/different-sized-networks/10-genes-max-edges.xlsx +0 -0
  479. package/test-files/graph-tests/different-sized-networks/12-genes-max-edges.xlsx +0 -0
  480. package/test-files/graph-tests/different-sized-networks/35-genes-max-edges.xlsx +0 -0
  481. package/test-files/graph-tests/different-sized-networks/40-genes-0-edges.xlsx +0 -0
  482. package/test-files/graph-tests/different-sized-networks/40-genes-max-edges.xlsx +0 -0
  483. package/test-files/graph-tests/different-sized-networks/42-genes-max-edges.xlsx +0 -0
  484. package/test-files/graph-tests/different-sized-networks/50-genes-max-edges.xlsx +0 -0
  485. package/test-files/graph-tests/different-sized-networks/75-genes-150-edges.xlsx +0 -0
  486. package/web-client/public/js/container.js +0 -121
  487. package/web-client/public/js/node-coloring.js +0 -306
  488. package/web-client/public/js/sliders.js +0 -197
  489. package/web-client/views/upload.jade +0 -458
@@ -0,0 +1,78 @@
1
+ module.exports = {
2
+ warnings: {
3
+ // GENERAL WARNINGS
4
+ // If there are warnings in the original graph already add this warning
5
+ UNSAFE_EXPORT_WARNING: {
6
+ warningCode: "UNSAFE_EXPORT_WARNING",
7
+ errorDescription: " GRNsight has detected that there are warnings in the current graph. Your workbook" +
8
+ " may be exported improperly. We suggest that you ensure that the original uploaded graph has no " +
9
+ " warnings or errors, and fix any warnings that are displayed."
10
+ },
11
+ // NETWORK OR MATRIX WARNINGS
12
+ // Check that all sheets fit under the appropriate naming conventions
13
+ INCORRECT_SHEET_NAME_EXPORT_WARNING: {
14
+ warningCode: "INCORRECT_SHEET_NAME_EXPORT_WARNING",
15
+ errorDescription: "GRNsight has detected that there is an improperly named sheet in your exported" +
16
+ " workbook. Please look over your exported workbook and ensure that all sheets are named using the" +
17
+ " proper naming conventions listed at:\nhttps://dondi.github.io/GRNsight/documentation.html."
18
+ },
19
+ // Check that the matrix data values are the same in the graph object and the exported matrix
20
+ INCORRECT_MATRIX_DATA_EXPORT_WARNING: {
21
+ warningCode: "NCORRECT_MATRIX_DATA_EXPORT_WARNING",
22
+ errorDescription: "GRNsight has detected that the matrix data has been exported incorrectly into your" +
23
+ "workbook. Please look over your exported workbook and ensure that the 'network' and/or the" +
24
+ " 'network_optimized_weights' matrix values are correct."
25
+ },
26
+ // Make sure network sheets only have 0/1, make sure network optimized weights sheet has only numbers in matrix
27
+ IMPROPERLY_FORMATTED_MATRIX_DATA_EXPORT_WARNING: {
28
+ warningCode: "INCORRECT_MATRIX_DATA_EXPORT_WARNING",
29
+ errorDescription: "GRNsight has detected that the matrix data has been exported incorrectly into your" +
30
+ " workbook. Please ensure that the 'network' sheet only contains '0' and '1' in the matrix data. " +
31
+ " Please ensure that the 'network_optimized_weights' sheet contains a '0' if there is no regulatory" +
32
+ " relationship, a number > 0 if there is an activation relationship, or a number < 0 if there is a" +
33
+ " repression relationship."
34
+ },
35
+ // Make sure genes are semantically fine and that cell A1 is correct
36
+ IMPROPERLY_FORMATTED_NETWORK_SHEET_EXPORT_WARNING: {
37
+ warningCode: "INCORRECT_NETWORK_SHEET_EXPORT_WARNING",
38
+ errorDescription: "GRNsight has detected that the 'network' sheet or the 'network_optimized_weights'" +
39
+ " sheet is improperly formattedPlease look over your exported workbook and ensure that network" +
40
+ " sheets have cell A1 as 'cols regulators/rows targets' exactly, and all gene are using the naming" +
41
+ " conventions listed at: \nhttps://dondi.github.io/GRNsight/documentation.html."
42
+ },
43
+ // Missing Source Genes
44
+ MISSING_SOURCE_GENES_EXPORT_WARNING: {
45
+ warningCode: "MISSING_SOURCE_GENES_EXPORT_WARNING",
46
+ errorDescription: "GRNsight has detected that there are missing source genes in the exported workbook's." +
47
+ " 'network' or 'network_optimized_weights' sheet. Please ensure that all source genes are present in" +
48
+ " the exported workbook."
49
+ },
50
+ // Missing Target Genes
51
+ MISSING_TARGET_GENES_EXPORT_WARNING: {
52
+ warningCode: "MISSING_TARGET_GENES_EXPORT_WARNING",
53
+ errorDescription: "GRNsight has detected that there are missing target genes in the exported workbook's." +
54
+ " 'network' or 'network_optimized_weights' sheet. Please ensure that all target genes are present in" +
55
+ " the exported workbook."
56
+ },
57
+ // Additional Source Genes
58
+ ADDITIONAL_SOURCE_GENES_EXPORT_WARNING: {
59
+ warningCode: "ADDITIONAL_SOURCE_GENES_EXPORT_WARNING",
60
+ errorDescription: "GRNsight has detected that there are additional source genes in the exported" +
61
+ " 'network' or 'network_optimized_weights' sheet. Please remove any extra source genes present in" +
62
+ " the exported workbook."
63
+ },
64
+ // Missing Target Genes
65
+ ADDITIONAL_TARGET_GENES_EXPORT_WARNING: {
66
+ warningCode: "ADDITIONAL_TARGET_GENES_EXPORT_WARNING",
67
+ errorDescription: "GRNsight has detected that there are additional target genes in the exported" +
68
+ " 'network' or 'network_optimized_weights' sheet. Please remove any extra target genes present in" +
69
+ " the exported workbook."
70
+ },
71
+ // EXPRESSION SHEET WARNINGS
72
+
73
+
74
+ // ADDITIONAL SHEET WARNINGS
75
+
76
+
77
+ },
78
+ };
@@ -2,6 +2,7 @@ var helpers = require(__dirname + "/helpers");
2
2
 
3
3
  var grnsightToSif = require(__dirname + "/exporters/sif");
4
4
  var grnsightToGraphMl = require(__dirname + "/exporters/graphml");
5
+ var grnsightToXlsx = require(__dirname + "/exporters/xlsx");
5
6
 
6
7
  var convertResponse = function (app, req, res, converter) {
7
8
  helpers.attachCorsHeader(res, app);
@@ -11,11 +12,12 @@ var convertResponse = function (app, req, res, converter) {
11
12
  var exportResponse = function (app, req, res, converter) {
12
13
  helpers.attachCorsHeader(res, app);
13
14
  res.header("Content-Disposition", "attachment;filename=\"" + req.body.filename + "\"");
14
- return res.status(200).send(converter(JSON.parse(req.body.network)));
15
+ return res.status(200).send(converter(JSON.parse(req.body.workbook)));
15
16
  };
16
17
 
17
18
  var generalExportError = function (res, error) {
18
- return res.json(400, {
19
+ // Express deprecated res.json(status, obj): Use res.status(status).json(obj)
20
+ return res.status(400).json({
19
21
  message: "Invalid GRNsight format.",
20
22
  details: {
21
23
  name: error.name,
@@ -63,10 +65,30 @@ module.exports = function (app) {
63
65
  return generalExportError(res, error);
64
66
  }
65
67
  });
68
+
69
+ app.post("/convert-to-excel", function (req, res) {
70
+ try {
71
+ res.header("Content-Type", "text/xlsx");
72
+ return convertResponse(app, req, res, grnsightToXlsx);
73
+ } catch (error) {
74
+ return generalExportError(res, error);
75
+ }
76
+ });
77
+
78
+ app.post("/export-to-excel", function (req, res) {
79
+ try {
80
+ res.header("Content-Type", "text/xlsx");
81
+ return exportResponse(app, req, res, grnsightToXlsx);
82
+ } catch (error) {
83
+ return generalExportError(res, error);
84
+ }
85
+ });
86
+
66
87
  }
67
88
 
68
89
  return {
69
90
  grnsightToSif: grnsightToSif,
70
- grnsightToGraphMl: grnsightToGraphMl
91
+ grnsightToGraphMl: grnsightToGraphMl,
92
+ grnsightToXlsx: grnsightToXlsx
71
93
  };
72
94
  };
@@ -5,8 +5,8 @@ var INTERACTION_ID = "interaction";
5
5
  var NAME_ID = "name";
6
6
  var WEIGHT_ID = "weight";
7
7
 
8
- var grnsightToGraphMlJson = function (network) {
9
- var convertedNetwork = {
8
+ var grnsightToGraphMlJson = function (workbook) {
9
+ var convertedWorkbook = {
10
10
  graphml: {
11
11
  "@xmlns": "http://graphml.graphdrawing.org/xmlns",
12
12
  "@xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
@@ -42,8 +42,8 @@ var grnsightToGraphMlJson = function (network) {
42
42
  }
43
43
  };
44
44
 
45
- if (network.sheetType === constants.WEIGHTED) {
46
- convertedNetwork.graphml.key.push({
45
+ if (workbook.sheetType === constants.WEIGHTED) {
46
+ convertedWorkbook.graphml.key.push({
47
47
  "@id": WEIGHT_ID,
48
48
  "@for": "edge",
49
49
  "@attr.name": "weight",
@@ -51,10 +51,10 @@ var grnsightToGraphMlJson = function (network) {
51
51
  });
52
52
  }
53
53
 
54
- convertedNetwork.graphml.graph = {
54
+ convertedWorkbook.graphml.graph = {
55
55
  "@edgedefault": "directed",
56
56
 
57
- node: network.genes.map(function (gene) {
57
+ node: workbook.genes.map(function (gene) {
58
58
  return {
59
59
  "@id": gene.name,
60
60
  data: {
@@ -64,9 +64,9 @@ var grnsightToGraphMlJson = function (network) {
64
64
  };
65
65
  }),
66
66
 
67
- edge: network.links.map(function (link) {
68
- var sourceGeneId = network.genes[link.source].name;
69
- var targetGeneId = network.genes[link.target].name;
67
+ edge: workbook.links.map(function (link) {
68
+ var sourceGeneId = workbook.genes[link.source].name;
69
+ var targetGeneId = workbook.genes[link.target].name;
70
70
 
71
71
  var edge = {
72
72
  "@source": sourceGeneId,
@@ -84,7 +84,7 @@ var grnsightToGraphMlJson = function (network) {
84
84
  ]
85
85
  };
86
86
 
87
- if (network.sheetType === constants.WEIGHTED) {
87
+ if (workbook.sheetType === constants.WEIGHTED) {
88
88
  edge.data.push({
89
89
  "@key": WEIGHT_ID,
90
90
  "#text": link.value
@@ -95,15 +95,15 @@ var grnsightToGraphMlJson = function (network) {
95
95
  })
96
96
  };
97
97
 
98
- if (network.filename) {
99
- convertedNetwork.graphml.graph["@id"] = network.filename;
98
+ if (workbook.filename) {
99
+ convertedWorkbook.graphml.graph["@id"] = workbook.filename;
100
100
  }
101
101
 
102
- return convertedNetwork;
102
+ return convertedWorkbook;
103
103
  };
104
104
 
105
- module.exports = function (network) {
106
- return xmlbuilder.create(grnsightToGraphMlJson(network), {
105
+ module.exports = function (workbook) {
106
+ return xmlbuilder.create(grnsightToGraphMlJson(workbook), {
107
107
  version: "1.0",
108
108
  encoding: "UTF-8"
109
109
  }).end({
@@ -1,14 +1,14 @@
1
1
  var constants = require(__dirname + "/../constants");
2
2
 
3
- var exportEdges = function (network, gene, geneIndex) {
3
+ var exportEdges = function (workbook, gene, geneIndex) {
4
4
  var result = "";
5
5
 
6
- network.links.forEach(function (link) {
6
+ workbook.links.forEach(function (link) {
7
7
  if (link.source === geneIndex) {
8
8
  result += [
9
9
  gene.name,
10
- network.sheetType === constants.UNWEIGHTED ? "pd" : link.value,
11
- network.genes[link.target].name
10
+ workbook.sheetType === constants.UNWEIGHTED ? "pd" : link.value,
11
+ workbook.genes[link.target].name
12
12
  ].join("\t") + "\n";
13
13
  }
14
14
  });
@@ -16,11 +16,11 @@ var exportEdges = function (network, gene, geneIndex) {
16
16
  return result || (gene.name + "\t\t\n");
17
17
  };
18
18
 
19
- module.exports = function (network) {
19
+ module.exports = function (workbook) {
20
20
  var result = "";
21
21
 
22
- network.genes.forEach(function (gene, geneIndex) {
23
- result += exportEdges(network, gene, geneIndex);
22
+ workbook.genes.forEach(function (gene, geneIndex) {
23
+ result += exportEdges(workbook, gene, geneIndex);
24
24
  });
25
25
 
26
26
  return result;
@@ -0,0 +1,183 @@
1
+ // const { meta } = require("eslint/lib/rules/*");
2
+ const xlsx = require("node-xlsx");
3
+
4
+ const buildGeneNameArray = function (genes) {
5
+ const geneNameArray = genes.map(gene => gene["name"]);
6
+ return geneNameArray;
7
+ };
8
+
9
+ const createArrayWithZeroes = function (length) {
10
+ return Array.apply(null, Array(length)).map(() => 0);
11
+ };
12
+
13
+ const buildNetworkSheet = function (genes, links) {
14
+ const geneNameArray = buildGeneNameArray(genes);
15
+ // The +1 to length is because we ALSO add the gene name to each of the network sheet arrays.
16
+ const networkSheet = genes.map(() => createArrayWithZeroes(genes.length + 1));
17
+
18
+ // Place the gene name in the beginning of the network sheet array.
19
+ // EX: ["CIN5", 0, 0, 1]
20
+ Object.keys(geneNameArray).forEach(index => networkSheet[index][0] = geneNameArray[index]);
21
+ geneNameArray.unshift("cols regulators/rows targets");
22
+
23
+ links.forEach((link) => {
24
+ networkSheet[link.target][link.source + 1] = link.value;
25
+ });
26
+
27
+ networkSheet.unshift(geneNameArray);
28
+ return networkSheet;
29
+ };
30
+
31
+
32
+ const convertToSheet = function (name, testSheet) {
33
+ const singularName = name.toLowerCase().endsWith("s") ? name.substring(0, name.length - 1) : name;
34
+ const header = singularName.includes("optimized_") ? singularName.substring(10) : singularName;
35
+ return {
36
+ name: name,
37
+ data: [["id", header], ...Object.keys(testSheet).map(key => [key, testSheet[key]])]
38
+ };
39
+ };
40
+
41
+ const buildTestSheets = testSheet => ["production_rates",
42
+ "degradation_rates",
43
+ "threshold_b",
44
+ "optimized_production_rates",
45
+ "optimized_threshold_b"
46
+ ]
47
+ .filter(name => testSheet[name])
48
+ .map(name => convertToSheet(name, testSheet[name].data));
49
+
50
+ const buildMeta2Sheet = function (meta2DataContainer) {
51
+ const meta2 = [];
52
+ meta2.push(["Parameter", "Value"]);
53
+ for (let parameter in meta2DataContainer.data.Parameters) {
54
+ const meta2Data = meta2DataContainer.data.Parameters[parameter];
55
+ meta2.push([parameter, meta2Data]);
56
+ }
57
+ meta2.push([]);
58
+ meta2.push(["Gene", ...meta2DataContainer.data.MSE["column-headers"]]);
59
+ for (let gene in meta2DataContainer.data.MSE.Genes) {
60
+ const meta2GeneData = meta2DataContainer.data.MSE.Genes[gene];
61
+ meta2.push([gene, ...meta2GeneData]);
62
+ }
63
+ return meta2;
64
+ };
65
+
66
+ const buildMetaSheet = function (metaDataContainer) {
67
+ const meta = [];
68
+ meta.push(["optimization_parameter", "value"]);
69
+ for (let parameter in metaDataContainer.data) {
70
+ const metaData = metaDataContainer.data[parameter];
71
+ const cleanedUpData = Array.isArray(metaData)
72
+ ? [parameter, ...metaData]
73
+ : [parameter, metaData];
74
+ meta.push(cleanedUpData);
75
+ }
76
+ return meta;
77
+ };
78
+
79
+ const EXPRESSION_SHEET_SUFFIXES = ["_expression", "_optimized_expression", "_sigmas"];
80
+
81
+ const isExpressionSheet = (sheetName) => {
82
+ return EXPRESSION_SHEET_SUFFIXES.some(function (suffix) {
83
+ return sheetName.includes(suffix);
84
+ });
85
+ };
86
+
87
+ const buildExpressionSheets = function (expressions) {
88
+ const builtExpressionSheets = [];
89
+ Object.keys(expressions).forEach((expression) => {
90
+ let expressionName = expression;
91
+ if (!isExpressionSheet(expression)) {
92
+ expressionName = expression + "_expression";
93
+ }
94
+ const builtSheet = { name: expressionName, data: [] };
95
+ Object.keys(expressions[expression]["data"]).forEach((key) => {
96
+ const expressionData = expressions[expression]["data"][key];
97
+ builtSheet["data"].push([key, ...expressionData]);
98
+ });
99
+ builtExpressionSheets.push(builtSheet);
100
+ });
101
+ return builtExpressionSheets;
102
+ };
103
+
104
+ const buildXlsxSheet = function (workbook) {
105
+ const resultSheet = [];
106
+ const exportNetworkType = workbook.exportNetworkType;
107
+
108
+ Object.keys(workbook).forEach((key) => {
109
+ switch (key) {
110
+ case "network":
111
+ if (Object.keys(workbook.network).length > 0) {
112
+ resultSheet.push(
113
+ {
114
+ "name": "network",
115
+ "data": buildNetworkSheet(workbook.network.genes, workbook.network.links)
116
+ }
117
+ );
118
+ }
119
+ break;
120
+ case "networkOptimizedWeights":
121
+ if (exportNetworkType === "weighted") {
122
+ if (Object.keys(workbook.networkOptimizedWeights).length > 0) {
123
+ resultSheet.push(
124
+ {
125
+ "name": "network_optimized_weights",
126
+ "data": buildNetworkSheet(workbook.networkOptimizedWeights.genes,
127
+ workbook.networkOptimizedWeights.links)
128
+ }
129
+ );
130
+ }
131
+ }
132
+ break;
133
+ case "networkWeights":
134
+ if (Object.keys(workbook.networkWeights).length > 0) {
135
+ resultSheet.push(
136
+ {
137
+ "name": "network_weights",
138
+ "data": buildNetworkSheet(workbook.networkWeights.genes, workbook.networkWeights.links)
139
+ }
140
+ );
141
+ }
142
+ break;
143
+ case "meta":
144
+ if (Object.keys(workbook.meta).length > 0) {
145
+ resultSheet.push(
146
+ {
147
+ "name": "optimization_parameters",
148
+ "data": buildMetaSheet(workbook.meta)
149
+ }
150
+ );
151
+ }
152
+ break;
153
+ case "meta2":
154
+ // Optimization Diagnostics sheet not properly implemented yet.
155
+ if (Object.keys(workbook.meta2).length > 0) {
156
+ resultSheet.push(
157
+ {
158
+ "name": "optimization_diagnostics",
159
+ "data": buildMeta2Sheet(workbook.meta2)
160
+ }
161
+ );
162
+ }
163
+ break;
164
+ case "test":
165
+ resultSheet.push(...buildTestSheets(workbook[key]));
166
+ break;
167
+ case "expression":
168
+ // resultSheet.push(...buildExpressionSheets(workbook[key]));
169
+ break;
170
+ case "exportExpression":
171
+ resultSheet.push(...buildExpressionSheets(workbook[key]));
172
+ break;
173
+ default:
174
+ break;
175
+ }
176
+ });
177
+
178
+ return resultSheet;
179
+ };
180
+
181
+ module.exports = function (workbook) {
182
+ return xlsx.build(buildXlsxSheet(workbook));
183
+ };
@@ -0,0 +1,170 @@
1
+ // Parses "optimization_paramters," expression data sheets, and 2-column sheets
2
+ // from GRNmap input or output workbook
3
+
4
+ var constants = require(__dirname + "/workbook-constants");
5
+
6
+ const EXPRESSION_SHEET_SUFFIXES = ["_expression", "_optimized_expression", "_sigmas"];
7
+
8
+ const addExpWarning = (workbook, message) => {
9
+ let warningsCount;
10
+ if (!Object.keys(workbook).includes("warnings")) {
11
+ warningsCount = 0;
12
+ workbook.warnings = [];
13
+ } else {
14
+ warningsCount = workbook.warnings.length;
15
+ }
16
+ const MAX_WARNINGS = 75;
17
+ if (warningsCount < MAX_WARNINGS) {
18
+ workbook.warnings.push(message);
19
+ } else {
20
+ workbook.errors.push(constants.errors.warningsCountError);
21
+ return false;
22
+ }
23
+ };
24
+
25
+ const addExpError = (workbook, message) => {
26
+ const errorsCount = workbook.errors.length;
27
+ const MAX_ERRORS = 20;
28
+ if (errorsCount < MAX_ERRORS) {
29
+ workbook.errors.push(message);
30
+ } else {
31
+ workbook.errors.push(constants.errors.errorsCountError);
32
+ return false;
33
+ }
34
+ };
35
+
36
+ const fillArray = (value, array, length) => { // mutator
37
+ while (array.length < length) {
38
+ array.push(value);
39
+ }
40
+ return array;
41
+ };
42
+
43
+ const isExpressionSheet = (sheetName) => {
44
+ return EXPRESSION_SHEET_SUFFIXES.some(function (suffix) {
45
+ return sheetName.includes(suffix);
46
+ });
47
+ };
48
+
49
+ // Going to continue basing this section off of the parseWorkbookSheet function in spreadsheet-controller.js
50
+ var parseExpressionSheet = function (sheet) {
51
+
52
+ var geneData = {};
53
+ var expressionData = {
54
+ errors: [],
55
+ warnings: [],
56
+ timePoints: [],
57
+ columnGeneNames: []
58
+ };
59
+
60
+ // Check that id label is correct. Throw error if not.
61
+ const idLabel = sheet.data[0][0];
62
+ if (idLabel !== "id") {
63
+ addExpError(expressionData, constants.errors.idLabelError(sheet.name));
64
+ }
65
+ expressionData.timePoints = sheet.data[0].slice(1);
66
+ const numberOfDataPoints = expressionData.timePoints.length;
67
+ let compareTimePoint = 0;
68
+ for (let i = 0; i < numberOfDataPoints; i++) {
69
+ if (isNaN(expressionData.timePoints[i]) && expressionData.timePoints[i] !== undefined) {
70
+ addExpError(expressionData, constants.errors.nonNumericalTimePointsError(i + 1, sheet.name));
71
+ } else if (expressionData.timePoints[i] < 0) {
72
+ addExpError(expressionData, constants.errors.negativeTimePointError(i + 1, sheet.name));
73
+ } else if (expressionData.timePoints[i] < compareTimePoint) {
74
+ addExpError(expressionData, constants.errors.nonMonotonicTimePointsError(i + 1, sheet.name));
75
+ break;
76
+ } else {
77
+ compareTimePoint = expressionData.timePoints[i];
78
+ }
79
+
80
+ }
81
+ let geneNames = [];
82
+ sheet.data.forEach(function (sheet) {
83
+
84
+ const geneName = sheet[0];
85
+ if (geneName) {
86
+ geneNames.push(geneName);
87
+ const rowData = sheet.slice(1);
88
+ // Sometimes, missing data is at the end of the row. In this case, pad the
89
+ // array with nulls
90
+ if (rowData.length < numberOfDataPoints) {
91
+ fillArray(null, rowData, numberOfDataPoints);
92
+ }
93
+ geneData[geneName] = rowData;
94
+ }
95
+ });
96
+ geneNames = geneNames.slice(1);
97
+ geneNames.forEach(x => expressionData.columnGeneNames.push(x));
98
+ expressionData.data = geneData;
99
+ if (expressionData.data.id) {
100
+ // Throw warning in case of extraneous data
101
+ // Need to add a case where it checks the depth of the columns, as well
102
+ const rowLength = expressionData.data.id.length;
103
+ let rowCounter = 0;
104
+ let columnChecker = new Array(rowLength).fill(0);
105
+ Object.values(expressionData.data).forEach(function (row) {
106
+ if (row.length !== rowLength) {
107
+ addExpWarning(expressionData, constants.warnings.extraneousDataWarning(sheet.name, row));
108
+ }
109
+ // Check for missing Column Headers
110
+ if (rowCounter === 0) {
111
+ for (let i = 0; i < rowLength; i++) {
112
+ if (sheet.data[0][i] === undefined) {
113
+ addExpError(expressionData, constants.errors.missingColumnHeaderError(sheet.name));
114
+ }
115
+ }
116
+ } else {
117
+ for (var i = 0; i < rowLength; i++) {
118
+ if (sheet.data[rowCounter][i] !== undefined) {
119
+ columnChecker[i]++;
120
+ }
121
+ }
122
+ }
123
+
124
+ let nonnullCount = 0;
125
+ // check for empty rows
126
+ for (let i = 0; i <= rowLength; i++) {
127
+ if (i === rowLength) {
128
+ if (nonnullCount === 0) {
129
+ addExpError(expressionData, constants.errors.emptyExpressionRowError(i, sheet.name));
130
+ break;
131
+ }
132
+ } else {
133
+ if (row[i]) {
134
+ nonnullCount++;
135
+ }
136
+ }
137
+ }
138
+ rowCounter++;
139
+ });
140
+ // check for empty columns
141
+ for (var i = 0; i < columnChecker.length; i++) {
142
+ if (columnChecker[i] === 0) {
143
+ addExpError(expressionData, constants.errors.emptyExpressionColumnError(i, sheet.name));
144
+ }
145
+ }
146
+ }
147
+
148
+ return expressionData;
149
+ };
150
+
151
+ module.exports = function (workbook) {
152
+ const output = {
153
+ expression: {},
154
+ warnings: [],
155
+ errors: []
156
+ };
157
+ var expCount = 0;
158
+
159
+ workbook.forEach(function (sheet) {
160
+ if (isExpressionSheet(sheet.name)) {
161
+ output["expression"][sheet.name] = parseExpressionSheet(sheet);
162
+ expCount++;
163
+ }
164
+ });
165
+
166
+ if (expCount <= 0) {
167
+ addExpWarning(output, constants.warnings.missingExpressionWarning());
168
+ }
169
+ return output;
170
+ };
@@ -43,7 +43,7 @@ module.exports = function (app) {
43
43
  gaQuery(req, res, {
44
44
  serviceEmail: process.env.SERVICE_EMAIL,
45
45
  pemFilename: "grnsight.pem",
46
- origin: "http://dondi.github.io",
46
+ origin: "https://dondi.github.io",
47
47
  accountId: "ga:91279024",
48
48
  pathRoot: "GRNsight"
49
49
  });
@@ -1,19 +1,3 @@
1
- var graphmlWarnings = {
2
- EDGES_WITHOUT_WEIGHTS: {
3
- warningCode: "EDGES_WITHOUT_WEIGHTS",
4
- errorDescription: "GRNsight has detected that one or more edges in your network are missing numerical" +
5
- " weight values. Because the algorithm GRNsight uses for determining the arrowhead type and the" +
6
- " color and thickness of the edges requires numerical weight values, your graph will" +
7
- " display as an unweighted graph with black edges and pointed arrowheads. If you want to" +
8
- " display the network as a weighted graph, please modify your input file to include weight" +
9
- " values for all edges."
10
- },
11
- EDGE_DEFAULT_NOT_DIRECTED: {
12
- warningCode: "EDGE_DEFAULT_NOT_DIRECTED",
13
- errorDescription: "GRNsight interprets the graph as directed unconditionally."
14
- },
15
- };
16
-
17
1
  var graphmlErrors = {
18
2
  GRAPHML_GENERAL_SYNTAX_ERROR: function (error) {
19
3
  return {
@@ -166,7 +150,6 @@ var pairError = function (error) {
166
150
 
167
151
  module.exports = {
168
152
  graphmlErrors: graphmlErrors,
169
- graphmlWarnings: graphmlWarnings,
170
153
  errorMessageToGraphmlError: errorMessageToGraphmlError,
171
154
  pairError: pairError,
172
155
  };
@@ -1,5 +1,26 @@
1
1
  var constants = require(__dirname + "/constants");
2
2
 
3
+ var createEmptyWorkbook = function () {
4
+ return {
5
+ genes: [],
6
+ links: [],
7
+ errors: [],
8
+ warnings: [],
9
+ positiveWeights: [],
10
+ negativeWeights: [],
11
+ sheetType: "",
12
+ meta: {},
13
+ expression:{}
14
+ };
15
+ };
16
+
17
+ // Outside of module.exports because needs too access createEmptyWorkbook
18
+ var initWorkbook = function (net) {
19
+ const workbook = createEmptyWorkbook();
20
+ Object.assign(workbook, net); // copies fields without overriding empty ones :)
21
+ return workbook;
22
+ };
23
+
3
24
  module.exports = {
4
25
 
5
26
  attachCorsHeader: function (res, app) {
@@ -10,6 +31,9 @@ module.exports = {
10
31
  res.header("Access-Control-Allow-Methods", "POST, GET");
11
32
  res.header("Access-Control-Expose-Headers", constants.GRNSIGHT_FILENAME_HEADER);
12
33
  res.header(constants.GRNSIGHT_FILENAME_HEADER, path.split("/").pop());
13
- }
34
+ },
35
+
36
+ createEmptyWorkbook: createEmptyWorkbook,
37
+ initWorkbook: initWorkbook
14
38
 
15
39
  };