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
@@ -33,8 +33,8 @@ module.exports = function (app) {
33
33
  throw error;
34
34
  } else {
35
35
  helpers.attachFileHeaders(res, input);
36
- var network = importer(data);
37
- return res.status((network.errors.length === 0) ? 200 : 400).json(network);
36
+ var workbook = importer(data);
37
+ return res.status((workbook.errors.length === 0) ? 200 : 400).json(workbook);
38
38
  }
39
39
  });
40
40
  });
@@ -2,20 +2,17 @@ var constants = require(__dirname + "/../constants");
2
2
  var parseString = require("xml2js").parseString;
3
3
  var semanticChecker = require(__dirname + "/../semantic-checker");
4
4
  var graphmlConstants = require(__dirname + "/../graphml-constants");
5
+ var initWorkbook = require(__dirname + "/../helpers.js").initWorkbook;
5
6
 
6
7
  module.exports = function (graphml) {
7
8
  var graph;
8
9
  var key;
9
10
 
10
- var network = {
11
- genes: [],
12
- links: [],
13
- errors: [],
14
- warnings: [],
15
- positiveWeights: [],
16
- negativeWeights: [],
17
- sheetType: constants.UNWEIGHTED
18
- };
11
+ var workbook = initWorkbook({sheetType: constants.UNWEIGHTED});
12
+
13
+ // These warnings don't exist. They are a TODO
14
+ // workbook.warnings.push(constants.warnings.noSpeciesInformationDetected);
15
+ // workbook.warnings.push(constants.warnings.missingExpressionData); Doesn't exist
19
16
 
20
17
  var parseErr = function (err) {
21
18
  err = err.toString().split("\n").join(" ");
@@ -28,7 +25,7 @@ module.exports = function (graphml) {
28
25
  };
29
26
 
30
27
  var pushRelevantError = function (err) {
31
- network.errors.push(graphmlConstants.pairError(parseErr(err)));
28
+ workbook.errors.push(graphmlConstants.pairError(parseErr(err)));
32
29
  };
33
30
 
34
31
  parseString(graphml, function (err, result) {
@@ -36,15 +33,15 @@ module.exports = function (graphml) {
36
33
  pushRelevantError(err);
37
34
  } else {
38
35
  if (!result) {
39
- return semanticChecker(network);
36
+ return semanticChecker(workbook);
40
37
  }
41
38
  key = result.graphml && result.graphml.key;
42
39
  graph = result.graphml && result.graphml.graph && result.graphml.graph[0];
43
40
  }
44
41
  });
45
42
 
46
- if (network.errors.length > 0) {
47
- return network;
43
+ if (workbook.errors.length > 0) {
44
+ return workbook;
48
45
  }
49
46
 
50
47
  var findKeyId = function (attrName, attrFor) {
@@ -97,13 +94,13 @@ module.exports = function (graphml) {
97
94
  return data.$.key === weightId && !isNaN(+data._);
98
95
  });
99
96
  })) {
100
- network.sheetType = constants.WEIGHTED;
97
+ workbook.sheetType = constants.WEIGHTED;
101
98
  } else if (weightId) {
102
- network.warnings.push(constants.warnings.EDGES_WITHOUT_WEIGHTS);
99
+ workbook.warnings.push(constants.warnings.EDGES_WITHOUT_WEIGHTS);
103
100
  }
104
101
 
105
102
  if (!graph.$ || graph.$.edgedefault !== "directed") {
106
- network.warnings.push(constants.warnings.EDGE_DEFAULT_NOT_DIRECTED);
103
+ workbook.warnings.push(constants.warnings.EDGE_DEFAULT_NOT_DIRECTED);
107
104
  }
108
105
 
109
106
  var nameId = findKeyId("name", "node");
@@ -112,7 +109,7 @@ module.exports = function (graphml) {
112
109
 
113
110
  var geneIds = [];
114
111
  if (graph.node) {
115
- network.genes = graph.node.map(function (node) {
112
+ workbook.genes = graph.node.map(function (node) {
116
113
  var nodeName = node.$.id;
117
114
 
118
115
  if (yFilesNodeId) {
@@ -157,16 +154,16 @@ module.exports = function (graphml) {
157
154
  return;
158
155
  }
159
156
 
160
- if (network.sheetType === constants.WEIGHTED) {
157
+ if (workbook.sheetType === constants.WEIGHTED) {
161
158
  link.value = +edge.data.filter(function (data) {
162
159
  return data.$.key === weightId;
163
160
  })[0]._;
164
161
  }
165
162
 
166
- network.links.push(link);
163
+ workbook.links.push(link);
167
164
  });
168
165
  }
169
166
 
170
- return (network.errors.length === 0) ? semanticChecker(network) : network;
167
+ return (workbook.errors.length === 0) ? semanticChecker(workbook) : workbook;
171
168
 
172
169
  };
@@ -1,5 +1,7 @@
1
1
  var constants = require(__dirname + "/../constants");
2
+ var sifConstants = require(__dirname + "/../sif-constants");
2
3
  var semanticChecker = require(__dirname + "/../semantic-checker");
4
+ var initWorkbook = require(__dirname + "/../helpers.js").initWorkbook;
3
5
 
4
6
  var GENE_NAME = 0;
5
7
  var RELATIONSHIP = 1;
@@ -21,19 +23,19 @@ module.exports = function (sif) {
21
23
  // Stray data detected when there are 2 or more consecutive tabs NOT followed by a newline in the SIF file.
22
24
  // OR Stray data detected when there are 2 or more consecutive new lines
23
25
  if (sif.match(/(?=.*[\t]{2,}?[^\n\t]).*/g) || sif.match(/[\n]{2,}/g)) {
24
- errors.push(constants.errors.SIF_STRAY_DATA_ERROR);
26
+ errors.push(sifConstants.errors.SIF_STRAY_DATA_ERROR);
25
27
  }
26
28
 
27
29
  // Detects comma separated SIF files
28
30
  if (!sif.match(/[\t]+/g) && sif.match(/[,]+/g)) {
29
- errors.push(constants.warnings.SIF_FORMAT_WARNING);
31
+ errors.push(sifConstants.warnings.SIF_FORMAT_WARNING);
30
32
  }
31
33
 
32
34
  var isNumber = function (relationship) {
33
35
  return !isNaN(+relationship);
34
36
  };
35
37
 
36
- var sifNetworkType = function (sifEntries) {
38
+ var sifWorkbookType = function (sifEntries) {
37
39
  var errors = [];
38
40
  var relationships = [];
39
41
  var numRowsWithTwoColumns = 0;
@@ -53,11 +55,11 @@ module.exports = function (sif) {
53
55
  });
54
56
 
55
57
  if (unweightedRelationshipTypeErrorDetected) {
56
- errors.push(constants.errors.SIF_UNWEIGHTED_RELATIONSHIP_TYPE_ERROR);
58
+ errors.push(sifConstants.errors.SIF_UNWEIGHTED_RELATIONSHIP_TYPE_ERROR);
57
59
  }
58
60
 
59
61
  if (numRowsWithTwoColumns > 0) {
60
- errors.push(constants.errors.SIF_MISSING_DATA_ERROR);
62
+ errors.push(sifConstants.errors.SIF_MISSING_DATA_ERROR);
61
63
  }
62
64
 
63
65
  var hasNumbers = relationships.some(isNumber);
@@ -75,14 +77,14 @@ module.exports = function (sif) {
75
77
 
76
78
  var genes = [];
77
79
  var links = [];
78
- var networkType = "unweighted";
80
+ var workbookType = "unweighted";
79
81
 
80
82
  var nullEntries = entries.filter(function (entry) {
81
83
  return entry === null;
82
84
  });
83
85
 
84
86
  if (nullEntries.length > 0) {
85
- errors.push(constants.errors.SIF_STRAY_DATA_ERROR);
87
+ errors.push(sifConstants.errors.SIF_STRAY_DATA_ERROR);
86
88
  } else {
87
89
  entries.forEach(function (entry) {
88
90
  if (entry.length && entry[GENE_NAME] && genes.indexOf(entry[GENE_NAME]) === constants.NOT_FOUND) {
@@ -90,13 +92,13 @@ module.exports = function (sif) {
90
92
  }
91
93
  });
92
94
 
93
- networkType = sifNetworkType(entries);
94
- if (networkType.warnings) {
95
- warnings.push(networkType.warnings);
95
+ workbookType = sifWorkbookType(entries);
96
+ if (workbookType.warnings) {
97
+ warnings.push(workbookType.warnings);
96
98
  }
97
99
 
98
- if (networkType.errors) {
99
- networkType.errors.forEach(function (error) {
100
+ if (workbookType.errors) {
101
+ workbookType.errors.forEach(function (error) {
100
102
  errors.push(error);
101
103
  });
102
104
  }
@@ -115,7 +117,7 @@ module.exports = function (sif) {
115
117
  source: sourceIndex,
116
118
  target: targetIndex
117
119
  };
118
- if (networkType.sheetType === constants.WEIGHTED) {
120
+ if (workbookType.sheetType === constants.WEIGHTED) {
119
121
  link.value = +entry[RELATIONSHIP];
120
122
  }
121
123
  links.push(link);
@@ -124,18 +126,20 @@ module.exports = function (sif) {
124
126
  });
125
127
  }
126
128
 
127
- var network = {
129
+ var workbook = initWorkbook({
128
130
  genes: emptySifFile ? [] : genes.map(function (geneName) {
129
131
  return { name: geneName };
130
132
  }),
131
133
  links: links,
132
134
  errors: errors,
133
135
  warnings: warnings,
134
- sheetType: networkType.sheetType,
136
+ sheetType: workbookType.sheetType,
135
137
  positiveWeights: [],
136
- negativeWeights: []
137
- };
138
+ negativeWeights: [],
139
+ meta: {},
140
+ expression: {}
141
+ });
138
142
 
139
- return (network.errors.length === 0) ? semanticChecker(network) : network;
143
+ return (workbook.errors.length === 0) ? semanticChecker(workbook) : workbook;
140
144
 
141
145
  };
@@ -0,0 +1,18 @@
1
+
2
+ var expressionDal = require(__dirname + "/../dals/network-dal");
3
+
4
+
5
+ module.exports = function (app) {
6
+
7
+ app.get("/networkdb", function (req, res) {
8
+ try {
9
+ return expressionDal.queryNetworkDatabase(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
+ };
@@ -0,0 +1,307 @@
1
+ // var multiparty = require("multiparty");
2
+ // var path = require("path");
3
+ // var demoWorkbooks = require(__dirname + "/demo-workbooks");
4
+
5
+ const { initWorkbook } = require("./helpers");
6
+
7
+ var semanticChecker = require(__dirname + "/semantic-checker");
8
+
9
+ var constants = require(__dirname + "/workbook-constants");
10
+
11
+
12
+ // const NETWORK_SHEET_NAMES = ["network", "network_optimized_weights"];
13
+
14
+ // const isNetworkSheet = (sheetName) => {
15
+ // return NETWORK_SHEET_NAMES.some(function (network) {
16
+ // return (sheetName.toLowerCase() === network);
17
+ // });
18
+ // };
19
+ // Currently only going to number 76 because currently the network errors out at 75+ genes.
20
+
21
+ var addMessageToArray = function (messageArray, message) {
22
+ messageArray.push(message);
23
+ };
24
+
25
+ var addWarning = function (workbook, message) {
26
+ var warningsCount = workbook.warnings.length;
27
+ var MAX_WARNINGS = 75;
28
+ if (warningsCount < MAX_WARNINGS) {
29
+ addMessageToArray(workbook.warnings, message);
30
+ } else {
31
+ addMessageToArray(workbook.errors, constants.errors.warningsCountError);
32
+ return false;
33
+ }
34
+ };
35
+
36
+ var addError = function (workbook, message) {
37
+ var errorsCount = workbook.errors.length;
38
+ var MAX_ERRORS = 20;
39
+ if (errorsCount < MAX_ERRORS) {
40
+ addMessageToArray(workbook.errors, message);
41
+ } else {
42
+ addMessageToArray(workbook.errors, constants.errors.errorsCountError);
43
+ return false;
44
+ }
45
+ };
46
+
47
+ var checkDuplicates = function (errorArray, sourceGenes, targetGenes) {
48
+ // Run through the source genes and check if the gene in slot i is the same as the one next to it
49
+ for (var i = 0; i < sourceGenes.length - 1; i++) {
50
+ if (sourceGenes[i] === sourceGenes[i + 1]) {
51
+ errorArray.push(constants.errors.duplicateGeneError("source", sourceGenes[i]));
52
+ }
53
+ }
54
+ // Run through the target genes and check if the gene in slot j is the same as the one next to it
55
+ for (var j = 0; j < targetGenes.length - 1; j++) {
56
+ if (targetGenes[j] === targetGenes[j + 1]) {
57
+ errorArray.push(constants.errors.duplicateGeneError("target", targetGenes[j]));
58
+ }
59
+ }
60
+ };
61
+
62
+ var addTargetGene = function (workbook, sheet, row, targetGenes, genesList) {
63
+ let currentGene = { name: sheet.data[row][0] };
64
+ if (currentGene.name === undefined) {
65
+ addWarning(workbook, constants.warnings.missingTargetGeneWarning(row, 0));
66
+ } else if (isNaN(currentGene.name) && typeof currentGene.name !== "string") {
67
+ addWarning(workbook, constants.warnings.missingTargetGeneWarning(row, 0));
68
+ } else {
69
+ // set currentGeneName to a String so toUpperCase doesn't mess up
70
+ currentGene.name = currentGene.name.toString();
71
+ targetGenes.push(String(currentGene.name.toUpperCase()));
72
+ // Here we check to see if we've already seen the gene name that we're about to store
73
+ // Genes may or may not be present due to asymmetry or unorderedness
74
+ // If it's in the genesList, it will return a number > 0, so we won't store it
75
+ // If it's not there, it will return -1, so we add it.
76
+ if (genesList.indexOf(String(currentGene.name.toUpperCase())) === -1) {
77
+ genesList.push(String(currentGene.name.toUpperCase()));
78
+ workbook.genes.push(currentGene);
79
+ }
80
+ }
81
+ };
82
+
83
+ var parseNetworkSheet = function (sheet, network) {
84
+ var currentLink;
85
+ var currentGene;
86
+ var sourceGene;
87
+ var targetGene;
88
+ var sourceGeneNumber;
89
+ var targetGeneNumber;
90
+ var genesList = []; // This will contain all of the genes in upper case for use in error checking
91
+ var sourceGenes = [];
92
+ var targetGenes = [];
93
+ var columnChecker = [];
94
+ var rowData = [];
95
+
96
+ // check for “cols regulators/rows targets” in cell A1
97
+ const cellA1 = sheet.data[0][0];
98
+ if (cellA1 !== "cols regulators/rows targets") {
99
+ addWarning(network, constants.warnings.incorrectCellA1WorkbookWarning(sheet.name));
100
+ }
101
+
102
+ // Get Source Genes
103
+ for (let i = 1; i <= sheet.data[0].slice(1).length; i++) {
104
+ currentGene = { name: sheet.data[0][i] };
105
+ if (currentGene.name === undefined) {
106
+ addWarning(network, constants.warnings.missingSourceGeneWarning(0, i));
107
+ } else if (isNaN(currentGene.name) && typeof currentGene.name !== "string") {
108
+ addWarning(network, constants.warnings.missingSourceGeneWarning(0, i));
109
+ } else {
110
+ // set currentGeneName to a String so toUpperCase doesn't mess up
111
+ currentGene.name = currentGene.name.toString();
112
+ sourceGenes.push(String(currentGene.name.toUpperCase()));
113
+ genesList.push(String(currentGene.name.toUpperCase()));
114
+ network.genes.push(currentGene);
115
+ }
116
+ }
117
+ // Set columnCount to undefineds in each column equal to the length of the gene names
118
+ columnChecker = new Array(sheet.data[0].length).fill(0);
119
+
120
+ for (var row = 0, column = 1; row < sheet.data.length; row++) {
121
+ if (sheet.data[row].length === 0) { // if the current row is empty
122
+ if (addError(network, constants.errors.emptyRowError(row)) === false) {
123
+ return network;
124
+ }
125
+ } else if (sheet.data[row].length === 1) {
126
+ addTargetGene(network, sheet, row, targetGenes, genesList);
127
+ rowData.push(row);
128
+ } else { // if the row has data...
129
+ // Genes found when row = 0 are targets. Genes found when column = 0 are source genes.
130
+ // We set column = 1 in the for loop so it skips row 0 column 0, since that contains no matrix data.
131
+ // Yes, the rows and columns use array numbering. That is, they start at 0, not 1.
132
+ try { // This prevents the server from crashing if something goes wrong anywhere in here
133
+ if (sheet.data[row].length < sheet.data[0].length) {
134
+ for (let i = sheet.data[row].length - 1; i < sheet.data[0].length - 1; i++) {
135
+ columnChecker[i]++;
136
+ addWarning(network, constants.warnings.invalidMatrixDataWarning(row, i));
137
+ }
138
+ }
139
+ while (column < sheet.data[row].length) {
140
+ // While we haven't gone through all of the columns in this row...
141
+ if (row !== 0) { // skip the source genes
142
+ if (column === 0) {
143
+ // These genes are the target genes
144
+ try {
145
+ addTargetGene(network, sheet, row, targetGenes, genesList);
146
+ } catch (err) {
147
+ sourceGene = sheet.data[0][column];
148
+ targetGene = sheet.data[row][0];
149
+ addError(network, constants.errors.corruptGeneError(row, column));
150
+ return network;
151
+ }
152
+ } else { // If we're within the matrix and lookin' at the data...
153
+ try {
154
+ if (sheet.data[row][column] === undefined) {
155
+ // SHOULD BE: addError(network, constants.errors.missingValueError(row, column));
156
+ columnChecker[column - 1]++;
157
+ addWarning(network, constants.warnings.invalidMatrixDataWarning(row, column));
158
+ } else if (isNaN(+("" + sheet.data[row][column])) ||
159
+ typeof sheet.data[row][column] !== "number") {
160
+ addError(network, constants.errors.dataTypeError(row, column));
161
+ return network;
162
+ } else {
163
+ // columnChecker[column - 1] = columnChecker[column - 1]++;
164
+ if (sheet.data[row][column] !== 0) { // We only care about non-zero values
165
+ // Grab the source and target genes' names
166
+ sourceGene = sheet.data[0][column];
167
+ targetGene = sheet.data[row][0];
168
+ if (sourceGene === undefined || targetGene === undefined) {
169
+ addWarning(network, constants.warnings.randomDataWarning("undefined",
170
+ row, column));
171
+ } else if ((isNaN(sourceGene) && typeof sourceGene !== "string") ||
172
+ (isNaN(targetGene) && typeof targetGene !== "string")) {
173
+ addWarning(network, constants.warnings.randomDataWarning(
174
+ "NaN", row, column));
175
+ } else {
176
+ // Grab the source and target genes' numbers
177
+ sourceGeneNumber = genesList.indexOf(sourceGene.toString().toUpperCase());
178
+ targetGeneNumber = genesList.indexOf(targetGene.toString().toUpperCase());
179
+ currentLink = {
180
+ source: sourceGeneNumber, target: targetGeneNumber,
181
+ value: sheet.data[row][column]
182
+ };
183
+ // Here we set the properties of the current link
184
+ // before we push them to the network
185
+ if (network.sheetType === "weighted") {
186
+ if (currentLink.value > 0) {
187
+ // If it's a positive number, mark it as an activator
188
+ currentLink.type = "arrowhead";
189
+ // GRNsight v1 magenta edge color
190
+ // currentLink.stroke = "MediumVioletRed";
191
+ // Node coloring-consistent red edge color
192
+ currentLink.stroke = "rgb(195, 61, 61)";
193
+ network.positiveWeights.push(currentLink.value);
194
+ } else { // if it's a negative number, mark it as a repressor
195
+ currentLink.type = "repressor";
196
+ // currentLink.stroke = "DarkTurquoise";
197
+ // GRNsight v1 cyan edge color
198
+ // Node coloring-consistent blue edge color
199
+ currentLink.stroke = "rgb(51, 124, 183)";
200
+ network.negativeWeights.push(currentLink.value);
201
+ }
202
+ } else if (network.sheetType === "unweighted") {
203
+ currentLink.type = "arrowhead";
204
+ currentLink.stroke = "black";
205
+ if (currentLink.value !== 1) {
206
+ addWarning(network, constants.warnings.
207
+ incorrectlyNamedSheetWarning());
208
+ currentLink.value = 1;
209
+ }
210
+ network.positiveWeights.push(currentLink.value);
211
+ }
212
+ network.links.push(currentLink);
213
+ }
214
+ }
215
+ }
216
+
217
+ } catch (err) {
218
+ addError(network, constants.errors.missingValueError(row, column));
219
+ // SHOULD BE: addError(network, constants.errors.unknownFileError);
220
+ return network;
221
+ }
222
+ }
223
+ }
224
+ column++; // Let's move on to the next column!
225
+ } // Once we finish with the current row...
226
+ if (column < sourceGenes.length) {
227
+ for (let x = column; x < sourceGenes.length - 1; x++) {
228
+ columnChecker[column] = columnChecker[column]++;
229
+ }
230
+ }
231
+ column = 0; // let's go back to column 0 on the next row!
232
+ } catch (err) {
233
+ // We only get here if something goes drastically wrong. We don't want to get here.
234
+ addError(network, constants.errors.unknownError);
235
+ return network;
236
+ }
237
+ }
238
+ }
239
+
240
+ if (rowData.length === sheet.data.length - 1) {
241
+ addError(network, constants.errors.emptyMatrixDataError(sheet.name));
242
+ } else {
243
+ for (let x of rowData) {
244
+ addError(network, constants.errors.emptyRowDataError(x, sheet.name));
245
+ }
246
+ }
247
+
248
+ for (var i = 0; i < columnChecker.length; i++) {
249
+ if (columnChecker[i] >= sheet.data.length - 1) {
250
+ if (sheet.data[0][i + 1] === undefined) {
251
+ addError(network, constants.errors.emptyColumnError(i + 1, sheet.name));
252
+ } else {
253
+ addError(network, constants.errors.emptyColumnDataError(i + 1, sheet.name));
254
+ }
255
+ }
256
+ }
257
+
258
+ // Move on to semanticChecker.
259
+
260
+
261
+ // We sort them here because gene order is not relevant before this point
262
+ // Sorting them now means duplicates will be right next to each other
263
+ sourceGenes.sort();
264
+ targetGenes.sort();
265
+
266
+ // syntactic duplicate checker for both columns and rows
267
+ checkDuplicates(network.errors, sourceGenes, targetGenes);
268
+
269
+ // NOTE: Temporarily commented out pending resolution of #474, and other related issues
270
+ // try {
271
+ // network.graphStatisticsReport = graphStatisticsReport(network);
272
+ // } catch (err) {
273
+ // console.log ("Graph statistics report failed to be complete.");
274
+ // }
275
+ return semanticChecker(network);
276
+ };
277
+
278
+
279
+ module.exports = function (workbookFile) {
280
+ const networks = {
281
+ network: {},
282
+ networkOptimizedWeights: {},
283
+ networkWeights: {},
284
+ };
285
+
286
+ for (let i = 0; i < workbookFile.length; i++) {
287
+ // === 'network' for backwards compatibility of test files
288
+ if (workbookFile[i].name.toLowerCase() === "network") {
289
+ // Here we have found a network sheet containing simple data. We keep looking
290
+ // in case there is also a network sheet with optimized weights
291
+ networks.network = parseNetworkSheet(workbookFile[i], initWorkbook({ sheetType: "unweighted" }));
292
+ } else if (workbookFile[i].name.toLowerCase() === "network_optimized_weights" ) {
293
+ // We found a network sheet with optimized weights, which is the ideal data source.
294
+ networks.networkOptimizedWeights = parseNetworkSheet(workbookFile[i],
295
+ initWorkbook({ sheetType: "weighted" }));
296
+ } else if (workbookFile[i].name.toLowerCase() === "network_weights") {
297
+ // We found a network_weights sheet to preserve existing network type sheet data
298
+ networks.networkWeights = parseNetworkSheet(workbookFile[i], initWorkbook({ sheetType: "weighted" }));
299
+ }
300
+ }
301
+
302
+ if (Object.keys(networks.network).length === 0 && Object.keys(networks.networkOptimizedWeights).length === 0) {
303
+ networks.network = initWorkbook({ sheetType: "unweighted" });
304
+ addError(networks.network, constants.errors.missingNetworkError);
305
+ }
306
+ return networks;
307
+ };