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
@@ -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
+ };
@@ -12,11 +12,12 @@ var convertResponse = function (app, req, res, converter) {
12
12
  var exportResponse = function (app, req, res, converter) {
13
13
  helpers.attachCorsHeader(res, app);
14
14
  res.header("Content-Disposition", "attachment;filename=\"" + req.body.filename + "\"");
15
- return res.status(200).send(converter(JSON.parse(req.body.network)));
15
+ return res.status(200).send(converter(JSON.parse(req.body.workbook)));
16
16
  };
17
17
 
18
18
  var generalExportError = function (res, error) {
19
- return res.json(400, {
19
+ // Express deprecated res.json(status, obj): Use res.status(status).json(obj)
20
+ return res.status(400).json({
20
21
  message: "Invalid GRNsight format.",
21
22
  details: {
22
23
  name: error.name,
@@ -68,7 +69,7 @@ module.exports = function (app) {
68
69
  app.post("/convert-to-excel", function (req, res) {
69
70
  try {
70
71
  res.header("Content-Type", "text/xlsx");
71
- return convertResponse(app, req, res, grnsightToGraphMl);
72
+ return convertResponse(app, req, res, grnsightToXlsx);
72
73
  } catch (error) {
73
74
  return generalExportError(res, error);
74
75
  }
@@ -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;
@@ -1,6 +1,7 @@
1
+ // const { meta } = require("eslint/lib/rules/*");
1
2
  const xlsx = require("node-xlsx");
2
3
 
3
- const bulidGeneNameArray = function (genes) {
4
+ const buildGeneNameArray = function (genes) {
4
5
  const geneNameArray = genes.map(gene => gene["name"]);
5
6
  return geneNameArray;
6
7
  };
@@ -10,7 +11,7 @@ const createArrayWithZeroes = function (length) {
10
11
  };
11
12
 
12
13
  const buildNetworkSheet = function (genes, links) {
13
- const geneNameArray = bulidGeneNameArray(genes);
14
+ const geneNameArray = buildGeneNameArray(genes);
14
15
  // The +1 to length is because we ALSO add the gene name to each of the network sheet arrays.
15
16
  const networkSheet = genes.map(() => createArrayWithZeroes(genes.length + 1));
16
17
 
@@ -20,7 +21,7 @@ const buildNetworkSheet = function (genes, links) {
20
21
  geneNameArray.unshift("cols regulators/rows targets");
21
22
 
22
23
  links.forEach((link) => {
23
- networkSheet[link.source][link.target + 1] = link.value;
24
+ networkSheet[link.target][link.source + 1] = link.value;
24
25
  });
25
26
 
26
27
  networkSheet.unshift(geneNameArray);
@@ -30,36 +31,67 @@ const buildNetworkSheet = function (genes, links) {
30
31
 
31
32
  const convertToSheet = function (name, testSheet) {
32
33
  const singularName = name.toLowerCase().endsWith("s") ? name.substring(0, name.length - 1) : name;
34
+ const header = singularName.includes("optimized_") ? singularName.substring(10) : singularName;
33
35
  return {
34
36
  name: name,
35
- data: [["id", singularName], ...Object.keys(testSheet).map(key => [key, testSheet[key]])]
37
+ data: [["id", header], ...Object.keys(testSheet).map(key => [key, testSheet[key]])]
36
38
  };
37
39
  };
38
40
 
39
- const buildTestSheets = function (testSheet) {
40
- const productionRateSheet = convertToSheet("production_rates", testSheet["production_rates"]);
41
- const degradationRateSheet = convertToSheet("degradation_rates", testSheet["degradation_rates"]);
42
- const thresholdBSheet = convertToSheet("threshold_b", testSheet["threshold_b"]);
43
- return [productionRateSheet, degradationRateSheet, thresholdBSheet];
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;
44
64
  };
45
65
 
46
66
  const buildMetaSheet = function (metaDataContainer) {
47
- const metaSheet = { name: "optimization_parameters", data: [] };
48
- metaSheet["data"].push(["optimization_parameter", "value"]);
49
- Object.keys(metaDataContainer).forEach((parameter) => {
50
- const metaData = metaDataContainer[parameter];
67
+ const meta = [];
68
+ meta.push(["optimization_parameter", "value"]);
69
+ for (let parameter in metaDataContainer.data) {
70
+ const metaData = metaDataContainer.data[parameter];
51
71
  const cleanedUpData = Array.isArray(metaData)
52
72
  ? [parameter, ...metaData]
53
73
  : [parameter, metaData];
54
- metaSheet["data"].push(cleanedUpData);
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);
55
84
  });
56
- return metaSheet;
57
85
  };
58
86
 
59
87
  const buildExpressionSheets = function (expressions) {
60
88
  const builtExpressionSheets = [];
61
89
  Object.keys(expressions).forEach((expression) => {
62
- const builtSheet = { name: expression, data: []};
90
+ let expressionName = expression;
91
+ if (!isExpressionSheet(expression)) {
92
+ expressionName = expression + "_expression";
93
+ }
94
+ const builtSheet = { name: expressionName, data: [] };
63
95
  Object.keys(expressions[expression]["data"]).forEach((key) => {
64
96
  const expressionData = expressions[expression]["data"][key];
65
97
  builtSheet["data"].push([key, ...expressionData]);
@@ -69,30 +101,74 @@ const buildExpressionSheets = function (expressions) {
69
101
  return builtExpressionSheets;
70
102
  };
71
103
 
72
- const buildXlsxSheet = function (network) {
104
+ const buildXlsxSheet = function (workbook) {
73
105
  const resultSheet = [];
74
- resultSheet.push(
75
- {
76
- "name": "network",
77
- "data": buildNetworkSheet(network.genes, network.links)
78
- },
79
-
80
- {
81
- "name": "network_weights",
82
- "data": buildNetworkSheet(network.genes, network.links)
83
- }
84
- );
106
+ const exportNetworkType = workbook.exportNetworkType;
85
107
 
86
- Object.keys(network).forEach((key) => {
108
+ Object.keys(workbook).forEach((key) => {
87
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;
88
143
  case "meta":
89
- resultSheet.push(buildMetaSheet(network[key]));
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
+ }
90
163
  break;
91
164
  case "test":
92
- resultSheet.push(...buildTestSheets(network[key]));
165
+ resultSheet.push(...buildTestSheets(workbook[key]));
93
166
  break;
94
167
  case "expression":
95
- resultSheet.push(...buildExpressionSheets(network[key]));
168
+ // resultSheet.push(...buildExpressionSheets(workbook[key]));
169
+ break;
170
+ case "exportExpression":
171
+ resultSheet.push(...buildExpressionSheets(workbook[key]));
96
172
  break;
97
173
  default:
98
174
  break;
@@ -102,6 +178,6 @@ const buildXlsxSheet = function (network) {
102
178
  return resultSheet;
103
179
  };
104
180
 
105
- module.exports = function (network) {
106
- return xlsx.build(buildXlsxSheet(network));
181
+ module.exports = function (workbook) {
182
+ return xlsx.build(buildXlsxSheet(workbook));
107
183
  };
@@ -0,0 +1,19 @@
1
+
2
+ var expressionDal = require(__dirname + "/../dals/expression-dal");
3
+
4
+
5
+ module.exports = function (app) {
6
+
7
+ app.get("/expressiondb", function (req, res) {
8
+ try {
9
+ return expressionDal.queryExpressionDatabase(req, res);
10
+ } catch (e) {
11
+ res.json({error: e.stack});
12
+ res.json({error: e.name});
13
+ res.json({error: e.message});
14
+
15
+ }
16
+ });
17
+
18
+
19
+ };
@@ -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
+ };
@@ -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
  };