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.
- package/.travis.yml +3 -1
- package/GRNsight - Beta.html +194 -0
- package/Gemfile.lock +259 -0
- package/README.md +2 -2
- package/_gh_pages/about.html +360 -45
- package/_gh_pages/assets/css/footer.css +3 -0
- package/_gh_pages/assets/css/main.css +28 -14
- package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_estimation_output_binary-no-targetless-genes_sif.png +0 -0
- package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_estimation_output_binary_sif.png +0 -0
- package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_graphml_3-edges-and-footer.png +0 -0
- package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_graphml_header-and-3-nodes.png +0 -0
- package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_graphml_output_3-edges-and-footer.png +0 -0
- package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_graphml_output_header-and-3-nodes.png +0 -0
- package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_input_binary-no-targetless-genes_sif.png +0 -0
- package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_input_binary_sif.png +0 -0
- package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_input_concatenated-no-targetless-genes_sif.png +0 -0
- package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_input_concatenated_sif.png +0 -0
- package/_gh_pages/assets/images/Choe-Shin_CMSI402-poster-session_20180430.jpg +0 -0
- package/_gh_pages/assets/images/Choe_SCCUR_2017.jpg +0 -0
- package/_gh_pages/assets/images/Dahlquist-Choe-Shin_CMSI402-poster-session_20180430.jpg +0 -0
- package/_gh_pages/assets/images/Dionisio-Dahlquist_GRNsight-shades_20170506.jpg +0 -0
- package/_gh_pages/assets/images/Klein_Samdarshi_TriBeta_2018_20180317.jpg +0 -0
- package/_gh_pages/assets/images/Shin_SCCUR_2017.jpg +0 -0
- 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
- 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
- package/_gh_pages/assets/images/gene-pages-0.png +0 -0
- package/_gh_pages/assets/images/gene-pages-1.png +0 -0
- package/_gh_pages/assets/images/gene-pages-2.png +0 -0
- package/_gh_pages/assets/images/gene-pages-3.png +0 -0
- package/_gh_pages/assets/images/grnsight2020.png +0 -0
- package/_gh_pages/assets/images/v3demo2-grid+nodecoloring.png +0 -0
- package/_gh_pages/assets/images/v3demo2-nodecoloring.png +0 -0
- package/_gh_pages/assets/images/v3demo2.png +0 -0
- package/_gh_pages/assets/js/ga-report.js +11 -11
- package/_gh_pages/assets/js/iframeResizer.min.js +9 -0
- package/_gh_pages/assets/js/main.js +43 -43
- package/_gh_pages/beta.html +29 -24
- package/_gh_pages/contact.html +31 -31
- package/_gh_pages/coverage/coverage.json +1 -0
- package/_gh_pages/coverage/coverage.raw.json +1 -0
- package/_gh_pages/coverage/lcov-report/base.css +223 -0
- package/_gh_pages/coverage/lcov-report/block-navigation.js +63 -0
- package/_gh_pages/coverage/lcov-report/controllers/additional-sheet-parser.js.html +330 -0
- package/_gh_pages/coverage/lcov-report/controllers/constants.js.html +243 -0
- package/_gh_pages/coverage/lcov-report/controllers/export-controller.js.html +285 -0
- package/_gh_pages/coverage/lcov-report/controllers/exporters/graphml.js.html +405 -0
- package/_gh_pages/coverage/lcov-report/controllers/exporters/index.html +110 -0
- package/_gh_pages/coverage/lcov-report/controllers/exporters/sif.js.html +150 -0
- package/_gh_pages/coverage/lcov-report/controllers/helpers.js.html +114 -0
- package/_gh_pages/coverage/lcov-report/controllers/import-controller.js.html +233 -0
- package/_gh_pages/coverage/lcov-report/controllers/importers/graphml.js.html +716 -0
- package/_gh_pages/coverage/lcov-report/controllers/importers/index.html +106 -0
- package/_gh_pages/coverage/lcov-report/controllers/importers/sif.js.html +488 -0
- package/_gh_pages/coverage/lcov-report/controllers/index.html +162 -0
- package/_gh_pages/coverage/lcov-report/controllers/semantic-checker.js.html +810 -0
- package/_gh_pages/coverage/lcov-report/controllers/spreadsheet-controller.js.html +1779 -0
- package/_gh_pages/coverage/lcov-report/index.html +136 -0
- package/_gh_pages/coverage/lcov-report/prettify.css +1 -0
- package/_gh_pages/coverage/lcov-report/prettify.js +1 -0
- package/_gh_pages/coverage/lcov-report/server/controllers/additional-sheet-parser.js.html +330 -0
- package/_gh_pages/coverage/lcov-report/server/controllers/constants.js.html +243 -0
- package/_gh_pages/coverage/lcov-report/server/controllers/export-controller.js.html +285 -0
- package/_gh_pages/coverage/lcov-report/server/controllers/exporters/graphml.js.html +405 -0
- package/_gh_pages/coverage/lcov-report/server/controllers/exporters/index.html +110 -0
- package/_gh_pages/coverage/lcov-report/server/controllers/exporters/sif.js.html +150 -0
- package/_gh_pages/coverage/lcov-report/server/controllers/graphml-constants.js.html +585 -0
- package/_gh_pages/coverage/lcov-report/server/controllers/helpers.js.html +114 -0
- package/_gh_pages/coverage/lcov-report/server/controllers/import-controller.js.html +237 -0
- package/_gh_pages/coverage/lcov-report/server/controllers/importers/graphml.js.html +585 -0
- package/_gh_pages/coverage/lcov-report/server/controllers/importers/index.html +110 -0
- package/_gh_pages/coverage/lcov-report/server/controllers/importers/sif.js.html +492 -0
- package/_gh_pages/coverage/lcov-report/server/controllers/index.html +188 -0
- package/_gh_pages/coverage/lcov-report/server/controllers/semantic-checker.js.html +810 -0
- package/_gh_pages/coverage/lcov-report/server/controllers/spreadsheet-controller.js.html +1779 -0
- package/_gh_pages/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/_gh_pages/coverage/lcov-report/sorter.js +158 -0
- package/_gh_pages/coverage/lcov-report/web-client/public/js/grnstate.js.html +225 -0
- package/_gh_pages/coverage/lcov-report/web-client/public/js/index.html +97 -0
- package/_gh_pages/coverage/lcov.info +49 -0
- package/_gh_pages/documentation.html +998 -320
- package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.aux +47 -0
- package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.bbl +73 -0
- package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.blg +52 -0
- package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.log +1056 -0
- package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.out +7 -0
- package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.synctex.gz +0 -0
- package/_gh_pages/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_text-only_revised-Dondi.docx +0 -0
- package/_gh_pages/encryption/server.cert +21 -0
- package/_gh_pages/encryption/server.key +28 -0
- package/_gh_pages/favicon.ico +0 -0
- package/_gh_pages/index.html +45 -22
- package/_gh_pages/links.html +47 -28
- package/_gh_pages/news.html +103 -21
- package/_gh_pages/onlyfooter.html +78 -0
- package/_gh_pages/onlyheader.html +64 -0
- package/_gh_pages/onlysidebar.html +73 -0
- package/_gh_pages/package-lock.json +14048 -0
- package/_gh_pages/people.html +129 -40
- package/_gh_pages/privacy.html +23 -17
- package/_gh_pages/publications.html +75 -33
- package/_gh_pages/robots.txt +1 -0
- package/_gh_pages/sitemap.xml +87 -74
- package/_gh_pages/test-files/import-samples/attributes.graphml +40 -0
- package/_gh_pages/test-files/import-samples/port.graphml +32 -0
- package/_gh_pages/test-files/import-samples/simple.graphml +31 -0
- package/_gh_pages/web-client/public/js/grnsight.min.js +2347 -0
- package/_gh_pages/web-client/public/stylesheets/grnsight.css +443 -0
- package/coverage/coverage.json +1 -1
- package/coverage/lcov.info +1847 -1142
- package/database/README.md +1 -0
- package/database/network-database/README.md +44 -0
- package/database/network-database/schema.sql +24 -0
- package/database/network-database/scripts/filter_genes.py +76 -0
- package/database/network-database/scripts/generate_network.py +199 -0
- package/database/network-database/scripts/generate_sgd_network_from_yeastract_network.py +120 -0
- package/database/network-database/scripts/loader.py +78 -0
- package/package.json +20 -11
- package/server/app.js +7 -2
- package/server/config/config.js +12 -3
- package/server/controllers/additional-sheet-parser.js +292 -55
- package/server/controllers/constants.js +4 -37
- package/server/controllers/custom-workbook-controller.js +66 -0
- package/server/controllers/demo-workbooks.js +5973 -0
- package/server/controllers/export-constants.js +78 -0
- package/server/controllers/export-controller.js +4 -3
- package/server/controllers/exporters/graphml.js +15 -15
- package/server/controllers/exporters/sif.js +7 -7
- package/server/controllers/exporters/xlsx.js +110 -34
- package/server/controllers/expression-database-controller.js +19 -0
- package/server/controllers/expression-sheet-parser.js +170 -0
- package/server/controllers/graphml-constants.js +0 -17
- package/server/controllers/helpers.js +25 -1
- package/server/controllers/import-controller.js +2 -2
- package/server/controllers/importers/graphml.js +17 -20
- package/server/controllers/importers/sif.js +22 -18
- package/server/controllers/network-database-controller.js +18 -0
- package/server/controllers/network-sheet-parser.js +307 -0
- package/server/controllers/semantic-checker.js +30 -162
- package/server/controllers/sif-constants.js +36 -0
- package/server/controllers/spreadsheet-controller.js +277 -425
- package/server/controllers/workbook-constants.js +521 -0
- package/server/dals/expression-dal.js +122 -0
- package/server/dals/network-dal.js +96 -0
- package/test/additional-sheet-parser-tests.js +147 -38
- package/test/api-tests.js +3 -6
- package/test/errors-adjacency-matrix-modifications.js +30 -29
- package/test/errors-graph-tests.js +4 -4
- package/test/errors-sheet-modifications.js +10 -2
- package/test/export-tests.js +187 -60
- package/test/expression-data-import-tests.js +113 -0
- package/test/grnstate-tests.js +8 -2
- package/test/import-graphml-tests.js +59 -40
- package/test/import-sif-tests.js +50 -37
- package/test/test.js +554 -91
- package/test/warnings-adjacency-matrix-modifications.js +8 -7
- package/test-files/additional-sheet-test-files/optimization-diagnostics-default.xlsx +0 -0
- package/test-files/additional-sheet-test-files/optimization-diagnostics-extraneous-data.xlsx +0 -0
- package/test-files/additional-sheet-test-files/optimization-diagnostics-incorrect-MSE-gene-header.xlsx +0 -0
- package/test-files/additional-sheet-test-files/optimization-diagnostics-incorrect-MSE-header.xlsx +0 -0
- package/test-files/additional-sheet-test-files/optimization-diagnostics-incorrect-column-headers.xlsx +0 -0
- package/test-files/additional-sheet-test-files/optimization-diagnostics-invalid-MSE-data.xlsx +0 -0
- package/test-files/additional-sheet-test-files/optimization-diagnostics-invalid-value.xlsx +0 -0
- package/test-files/additional-sheet-test-files/optimization-diagnostics-missing-MSE-data.xlsx +0 -0
- package/test-files/additional-sheet-test-files/optimization-diagnostics-missing-column-headers.xlsx +0 -0
- package/test-files/additional-sheet-test-files/optimization-diagnostics-missing-header.xlsx +0 -0
- package/test-files/additional-sheet-test-files/optimization-diagnostics-unknown-parameter.xlsx +0 -0
- package/test-files/additional-sheet-test-files/optimization-parameters-default.xlsx +0 -0
- package/test-files/additional-sheet-test-files/optimization-parameters-incorrect-headers.xlsx +0 -0
- package/test-files/additional-sheet-test-files/optimization-parameters-invalid-optimization-parameter.xlsx +0 -0
- package/test-files/additional-sheet-test-files/optimization-parameters-missing-headers.xlsx +0 -0
- package/test-files/additional-sheet-test-files/optimization-parameters-unknown-parameter.xlsx +0 -0
- package/test-files/additional-sheet-test-files/two-column-sheets-extraneous-data.xlsx +0 -0
- package/test-files/additional-sheet-test-files/two-column-sheets-incorrect-cell-A1.xlsx +0 -0
- package/test-files/additional-sheet-test-files/two-column-sheets-incorrect-column-header.xlsx +0 -0
- package/test-files/additional-sheet-test-files/two-column-sheets-invalid-gene-length.xlsx +0 -0
- package/test-files/additional-sheet-test-files/two-column-sheets-invalid-gene-type.xlsx +0 -0
- package/test-files/additional-sheet-test-files/two-column-sheets-invalid-value.xlsx +0 -0
- package/test-files/additional-sheet-test-files/two-column-sheets-missing-column-header.xlsx +0 -0
- package/test-files/additional-sheet-test-files/two-column-sheets-special-character.xlsx +0 -0
- package/test-files/adjacency-matrix-modifications/asymmetric-gene-order-input.xlsx +0 -0
- package/test-files/adjacency-matrix-modifications/asymmetric-gene-order-output.xlsx +0 -0
- package/test-files/adjacency-matrix-modifications/extra-column-adjacent-input.xlsx +0 -0
- package/test-files/adjacency-matrix-modifications/extra-column-adjacent-output.xlsx +0 -0
- package/test-files/adjacency-matrix-modifications/extra-column-end-of-sheet-input.xlsx +0 -0
- package/test-files/adjacency-matrix-modifications/extra-column-end-of-sheet-output.xlsx +0 -0
- package/test-files/adjacency-matrix-modifications/extra-data-random-cell-both-output.xlsx +0 -0
- package/test-files/adjacency-matrix-modifications/extra-data-random-cell-network-only-input.xlsx +0 -0
- package/test-files/adjacency-matrix-modifications/extra-data-random-cell-network-only-output.xlsx +0 -0
- package/test-files/adjacency-matrix-modifications/extra-data-random-cell-network-optimized-only-output.xlsx +0 -0
- package/test-files/adjacency-matrix-modifications/extra-row-end-of-sheet-input.xlsx +0 -0
- package/test-files/adjacency-matrix-modifications/extra-row-end-of-sheet-output.xlsx +0 -0
- package/test-files/adjacency-matrix-modifications/incorrect-network-cell-A1.xlsx +0 -0
- package/test-files/adjacency-matrix-modifications/missing-column-end-input.xlsx +0 -0
- package/test-files/adjacency-matrix-modifications/missing-column-end-output.xlsx +0 -0
- package/test-files/adjacency-matrix-modifications/missing-data-input.xlsx +0 -0
- package/test-files/adjacency-matrix-modifications/missing-data-output.xlsx +0 -0
- package/test-files/adjacency-matrix-modifications/missing-row-end-input.xlsx +0 -0
- package/test-files/adjacency-matrix-modifications/missing-row-end-output.xlsx +0 -0
- package/test-files/adjacency-matrix-modifications/missing-row-middle-input.xlsx +0 -0
- package/test-files/adjacency-matrix-modifications/missing-row-middle-output.xlsx +0 -0
- package/test-files/adjacency-matrix-modifications/missing-value-bottom-corner-input.xlsx +0 -0
- package/test-files/adjacency-matrix-modifications/missing-value-bottom-corner-output.xlsx +0 -0
- package/test-files/adjacency-matrix-modifications/value-replaced-w-spaces-both-output.xlsx +0 -0
- package/test-files/adjacency-matrix-modifications/value-replaced-w-spaces-net-only-input.xlsx +0 -0
- package/test-files/adjacency-matrix-modifications/value-replaced-w-spaces-net-op-only-output.xlsx +0 -0
- package/test-files/adjacency-matrix-modifications/value-replaced/342/200/223w-spaces-net-only-output.xlsx +0 -0
- package/test-files/demo-files/15-genes_28-edges_db5_Dahlquist-data_estimation_output.xlsx +0 -0
- package/test-files/demo-files/15-genes_28-edges_db5_Dahlquist-data_input.xlsx +0 -0
- package/test-files/expression-data-test-sheets/expression_sheet_correct_numbering.xlsx +0 -0
- package/test-files/expression-data-test-sheets/expression_sheet_different_number_of_columns.xlsx +0 -0
- package/test-files/expression-data-test-sheets/expression_sheet_empty_column.xlsx +0 -0
- package/test-files/expression-data-test-sheets/expression_sheet_empty_row.xlsx +0 -0
- package/test-files/expression-data-test-sheets/expression_sheet_erroneous_data.xlsx +0 -0
- package/test-files/expression-data-test-sheets/expression_sheet_extra_gene_name.xlsx +0 -0
- package/test-files/expression-data-test-sheets/expression_sheet_incorrectly_ordered_time_points.xlsx +0 -0
- package/test-files/expression-data-test-sheets/expression_sheet_mismatched_case_gene_names.xlsx +0 -0
- package/test-files/expression-data-test-sheets/expression_sheet_mismatched_gene_names.xlsx +0 -0
- package/test-files/expression-data-test-sheets/expression_sheet_missing_column_header.xlsx +0 -0
- package/test-files/expression-data-test-sheets/expression_sheet_missing_data_error.xlsx +0 -0
- package/test-files/expression-data-test-sheets/expression_sheet_missing_data_ok.xlsx +0 -0
- package/test-files/expression-data-test-sheets/expression_sheet_missing_data_ok_export_exact.xlsx +0 -0
- package/test-files/expression-data-test-sheets/expression_sheet_missing_gene_name.xlsx +0 -0
- package/test-files/expression-data-test-sheets/expression_sheet_name_not_in_optparams.xlsx +0 -0
- package/test-files/expression-data-test-sheets/expression_sheet_name_not_present.xlsx +0 -0
- package/test-files/expression-data-test-sheets/expression_sheet_negative_time_points.xlsx +0 -0
- package/test-files/expression-data-test-sheets/expression_sheet_non_numerical_time_points.xlsx +0 -0
- package/test-files/expression-data-test-sheets/expression_sheet_not_existing.xlsx +0 -0
- package/test-files/expression-data-test-sheets/expression_sheet_wrong_id_label.xlsx +0 -0
- package/test-files/expression-data-test-sheets/expression_sheet_wrong_order_gene_names.xlsx +0 -0
- package/test-files/expression-data-test-sheets/expression_sheet_wrong_sheet_name_case.xlsx +0 -0
- package/test-files/expression-data-test-sheets/expression_sheet_wrong_sheet_name_convention.xlsx +0 -0
- package/test-files/gene-name-modifications/NaN-as-gene-name-input.xlsx +0 -0
- package/test-files/gene-name-modifications/NaN-as-gene-name-output.xlsx +0 -0
- package/test-files/gene-name-modifications/mismatched-case-related-input.xlsx +0 -0
- package/test-files/gene-name-modifications/mismatched-case-related-output.xlsx +0 -0
- package/test-files/gene-name-modifications/mismatched-case-unrelated-input.xlsx +0 -0
- package/test-files/gene-name-modifications/mismatched-case-unrelated-output.xlsx +0 -0
- package/test-files/graph-tests/different-sized-networks/{80-genes-0-edges.xlsx → 134-genes-0-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{45-genes-max-edges.xlsx → 44-source-genes-45-target-genes-max-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{1-gene-0-edges.xlsx → unused-files/1-gene-0-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{1-gene-1-edges.xlsx → unused-files/1-gene-1-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{10-genes-50-edges.xlsx → unused-files/10-genes-50-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{10-genes-90-edges.xlsx → unused-files/10-genes-90-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{100-genes-0-edges.xlsx → unused-files/100-genes-0-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{110-genes-0-edges.xlsx → unused-files/110-genes-0-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{120-genes-0-edges.xlsx → unused-files/120-genes-0-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{130-genes-0-edges.xlsx → unused-files/130-genes-0-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{140-genes-0-edges.xlsx → unused-files/140-genes-0-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{150-genes-10000-edges.xlsx → unused-files/150-genes-10000-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{150-genes-20000-edges.xlsx → unused-files/150-genes-20000-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{150-genes-max-edges.xlsx → unused-files/150-genes-max-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{160-genes-max-edges.xlsx → unused-files/160-genes-max-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{20-genes-max-edges.xlsx → unused-files/20-genes-max-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{25-genes-max-edges.xlsx → unused-files/25-genes-max-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{30-genes-max-edges.xlsx → unused-files/30-genes-max-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{34-genes-0-edges.xlsx → unused-files/34-genes-0-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{34-genes-40-edges.xlsx → unused-files/34-genes-40-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{34-genes-65-edges.xlsx → unused-files/34-genes-65-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{34-genes-90-edges.xlsx → unused-files/34-genes-90-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{5-genes-max-edges.xlsx → unused-files/5-genes-max-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{51-genes-max-edges.xlsx → unused-files/51-genes-max-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{52-genes-max-edges.xlsx → unused-files/52-genes-max-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{55-genes-0-edges.xlsx → unused-files/55-genes-0-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{55-genes-max-edges.xlsx → unused-files/55-genes-max-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{65-genes-0-edges.xlsx → unused-files/65-genes-0-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{7-genes-max-edges.xlsx → unused-files/7-genes-max-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{70-genes-0-edges.xlsx → unused-files/70-genes-0-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{9-genes-max-edges.xlsx → unused-files/9-genes-max-edges.xlsx} +0 -0
- package/test-files/graph-tests/different-sized-networks/{90-genes-0-edges.xlsx → unused-files/90-genes-0-edges.xlsx} +0 -0
- 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
- package/test-files/node-tests/long-gene-name-no-spaces-first.xlsx +0 -0
- package/test-files/node-tests/long-gene-name-no-spaces-second.xlsx +0 -0
- package/test-files/node-tests/long-gene-name-spaces.xlsx +0 -0
- package/test-files/species-test-data/15-genes_28-edges_db5_Dahlquist-data_input_no-species.xlsx +0 -0
- package/test-files/species-test-data/15-genes_28-edges_db5_Dahlquist-data_input_with-species.xlsx +0 -0
- package/test-files/species-test-data/3-gene_7-edge_elegans.xlsx +0 -0
- package/test-files/species-test-data/3-gene_7-edge_melanogaster.xlsx +0 -0
- package/test-files/species-test-data/3-gene_7-edge_musculus.xlsx +0 -0
- package/test-files/species-test-data/3-gene_7-edge_sapiens.xlsx +0 -0
- package/test-files/species-test-data/kev-fake-data-sapiens-no-exp-data.xlsx +0 -0
- package/test-files/spreadsheet-controller-test-files/sheet-name-capitalized-network-optimized-weights.xlsx +0 -0
- package/test-files/spreadsheet-controller-test-files/sheet-name-capitalized-network.xlsx +0 -0
- package/web-client/app.js +1 -1
- package/web-client/controllers/main.js +1 -1
- package/web-client/public/favicon.ico +0 -0
- package/web-client/public/gene/api.js +76 -14
- package/web-client/public/gene/info.js +19 -8
- package/web-client/public/js/api/grnsight-api.js +124 -0
- package/web-client/public/js/constants.js +90 -17
- package/web-client/public/js/createNetwork.js +195 -0
- package/web-client/public/js/graph-statistics.js +7 -7
- package/web-client/public/js/graph.js +369 -324
- package/web-client/public/js/grnsight.js +2 -2
- package/web-client/public/js/grnsight.min.js +128 -59
- package/web-client/public/js/grnstate.js +54 -30
- package/web-client/public/js/iframe-coordination.js +55 -0
- package/web-client/public/js/setup-handlers.js +358 -18
- package/web-client/public/js/setup-load-and-import-handlers.js +105 -66
- package/web-client/public/js/update-app.js +483 -93
- package/web-client/public/js/upload.js +349 -32
- package/web-client/public/js/warnings.js +13 -51
- package/web-client/public/lib/iframeSizer.contentWindow.min.js +10 -0
- package/web-client/public/stylesheets/grnsight.styl +323 -28
- package/web-client/views/components/demo.pug +10 -0
- package/web-client/views/{graph.jade → graph.pug} +0 -0
- package/web-client/views/{info.jade → info.pug} +1 -5
- package/web-client/views/upload.pug +580 -0
- package/_gh_pages/Gemfile +0 -7
- package/_gh_pages/Gemfile.lock +0 -129
- package/documents/SDF/CMSI_402/spring_2014/Southwick_CMSI402_Spring2014_software-development-plan.md +0 -71
- package/documents/SDF/CMSI_402/spring_2014/Southwick_CMSI402_Spring2014_software-requirements-specification.md +0 -71
- package/documents/SDF/CMSI_402/spring_2014/use-case-diagram-spring-2014.jpg +0 -0
- package/documents/SDF/CMSI_402/spring_2017/Anguiano_402_Final_Presentation.pptx +0 -0
- package/documents/SDF/CMSI_402/spring_2017/Anguiano_402_Presentation_Final_Poster.pdf +0 -0
- package/documents/SDF/CMSI_402/spring_2017/Anguiano_CMSI402_Spring2017_project-proposal-presentation.pptx +0 -0
- package/documents/SDF/CMSI_402/spring_2017/Anguiano_CMSI402_Spring2017_project-proposal.docx +0 -0
- package/documents/SDF/CMSI_402/spring_2017/Anguiano_CMSI402_Spring2017_software-development-plan.docx +0 -0
- package/documents/SDF/CMSI_402/spring_2017/Anguiano_CMSI402_Spring2017_software-requirements-specification.docx +0 -0
- package/documents/SDF/CMSI_402/spring_2017/Design Review Presentation.pptx +0 -0
- package/documents/SDF/CMSI_402/spring_2018/0402report.docx +0 -0
- package/documents/SDF/CMSI_402/spring_2018/0409report.docx +0 -0
- package/documents/SDF/CMSI_402/spring_2018/402-gantt.png +0 -0
- package/documents/SDF/CMSI_402/spring_2018/402SRS_GRNSightFeedback01.txt +0 -28
- package/documents/SDF/CMSI_402/spring_2018/402_SPD.md +0 -223
- package/documents/SDF/CMSI_402/spring_2018/ChoeShinCMSI402_Final.pptx +0 -0
- package/documents/SDF/CMSI_402/spring_2018/ProjectProposal.md +0 -22
- package/documents/SDF/CMSI_402/spring_2018/SoftwareRequirementsSpecification.md +0 -88
- package/documents/SDF/CMSI_402/spring_2018/homework/choe_eileen/Choe_Eileen_CMSI 402_HW1.pdf +0 -0
- package/documents/SDF/CMSI_402/spring_2018/homework/choe_eileen/Choe_Eileen_CMSI402_HW2.pdf +0 -0
- package/documents/SDF/CMSI_402/spring_2018/homework/shin_jen/402hw2.docx +0 -0
- package/documents/SDF/CMSI_402/spring_2018/homework/shin_jen/Jen - 402Hw1.docx +0 -0
- package/documents/SDF/CMSI_402/spring_2018/homework/shin_jen/Jen - hw3.docx +0 -0
- package/documents/SDF/CMSI_402/spring_2018/writtenStatusReport.docx +0 -0
- package/documents/SDF/CMSI_402/spring_2018/writtenStatusReport4 +0 -0
- package/documents/abstracts/Anguiano_Varshneya_Undergraduate-Research-Symposium_2017_abstract.pdf +0 -0
- package/documents/abstracts/SIGGRAPH 2017 Abstract/ACM-Reference-Format.bst +0 -3478
- package/documents/abstracts/SIGGRAPH 2017 Abstract/Figure1_zoom100.png +0 -0
- package/documents/abstracts/SIGGRAPH 2017 Abstract/acmart.cls +0 -2352
- package/documents/abstracts/SIGGRAPH 2017 Abstract/acmart.ins +0 -29
- package/documents/abstracts/SIGGRAPH 2017 Abstract/always-weights.png +0 -0
- package/documents/abstracts/SIGGRAPH 2017 Abstract/auto.png +0 -0
- package/documents/abstracts/SIGGRAPH 2017 Abstract/networkA.png +0 -0
- package/documents/abstracts/SIGGRAPH 2017 Abstract/networkB-normalized.png +0 -0
- package/documents/abstracts/SIGGRAPH 2017 Abstract/networkB.png +0 -0
- package/documents/abstracts/SIGGRAPH 2017 Abstract/never-weights.png +0 -0
- package/documents/abstracts/SIGGRAPH 2017 Abstract/representative-image/screenshot.jpg +0 -0
- package/documents/abstracts/SIGGRAPH 2017 Abstract/representative-image/screenshot3x2.png +0 -0
- package/documents/abstracts/SIGGRAPH 2017 Abstract/representative-image/withweights3x2.png +0 -0
- package/documents/abstracts/SIGGRAPH 2017 Abstract/screenshot-auto.png +0 -0
- package/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.bib +0 -85
- package/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.pdf +0 -0
- package/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.tex +0 -235
- package/documents/abstracts/SWE Collegiate Competition 2017.md +0 -9
- package/documents/abstracts/Samdarshi_GRNsight_SoCalSysBio_Abstract_2019.docx +0 -0
- package/documents/abstracts/Varshneya_Samdarshi_Southern-California-Systems-Biology_2017_abstract.docx +0 -0
- package/documents/abstracts/~$mdarshi_SoCalSysBio_Abstract_2019.docx +0 -0
- package/documents/developer_documents/State Diagram.graphml +0 -3525
- package/documents/developer_documents/graphml/State Diagram.graphml +0 -3115
- package/documents/developer_documents/older_versions/GRNsight State Diagram old.png +0 -0
- package/documents/developer_documents/older_versions/GRNsight State Diagram.png +0 -0
- package/documents/developer_documents/testing_script_generator/GRNsightTestingDocument.md +0 -998
- package/documents/developer_documents/testing_script_generator/featureList.json +0 -496
- package/documents/developer_documents/testing_script_generator/testing-script-generator.js +0 -149
- package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_conference-presentations_2016.docx +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_manuscript_2016.docx +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_manuscript_2016_Table1.docx +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_manuscript_2016_references.rtf +0 -264
- package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_manuscript_2016_text-only.docx +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/21-genes_31-edges_Schade-data_for-screenshots.xlsx +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom100.jpg +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom100.png +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom100.psd +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom145.jpg +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom145.png +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom145.psd +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom145_900pix-wide.psd +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom100.jpg +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom100.png +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom100.psd +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom145.jpg +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom145.png +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom145.psd +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom145_900pix-wide.psd +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5A.pdf +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5B.pdf +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5C.eps +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5D.pdf +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5E.pdf +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5F.eps +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5_compiled.png +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/figures/submitted-versions/Figure3_GRNsight-Architecture.pdf +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/figures/submitted-versions/Figure4_GRNsight-Screenshot.pdf +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/figures/submitted-versions/Figure5_compiled.pdf +12 -5383
- package/documents/manuscripts/peerj-computerscience-2016/peerj-reviewing-10823-v0.pdf +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_conference-presentations_2016_revised.docx +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_cover-letter-and-response_2016.pdf +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_cover-letter_2016.docx +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_cover-letter_2016.pdf +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_Table1.docx +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_references_revised.rtf +0 -385
- package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_text-only_revised.docx +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_text-only_revised_marked.docx +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_response-to-reviewers_2016.docx +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_response-to-reviewers_2016.pdf +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/revisions/figures/Figure3_GRNsight-Architecture.pdf +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/revisions/figures/Figure4_GRNsight-Screenshot-auto.pdf +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/revisions/figures/Figure4_GRNsight-Screenshot.pdf +0 -0
- package/documents/manuscripts/peerj-computerscience-2016/revisions/peerj-reviewing-10823-v1.pdf +0 -0
- package/documents/posters/Anguiano_CMSI402_2017.pptx +0 -0
- package/documents/posters/Anguiano_Varshneya_LMU-Symposium_2015.pptx +0 -0
- package/documents/posters/Anguiano_Varshneya_SCCUR_2014.pptx +0 -0
- package/documents/posters/Choe_Shin_CMSI402_2018.pptx +0 -0
- package/documents/posters/Dahlquist-et-al_BOSC_ISMB_2016_poster.pptx +0 -0
- package/documents/posters/Lopez_Filler_LMU_Symposium_2019.pdf +0 -0
- package/documents/posters/Lopez_Filler_LMU_Symposium_2019.pptx +0 -0
- package/documents/posters/Samdarshi-et-al_LMU-Symposium_2017.pptx +0 -0
- package/documents/posters/Samdarshi-et-al_LMU-Symposium_2018.pptx +0 -0
- package/documents/posters/Samdarshi-et-al_SoCalSysBio_2019.pptx +0 -0
- package/documents/posters/Shin-et-al_SCCUR_2017.pptx +0 -0
- package/documents/posters/Southwick_CMSI402_2014.pptx +0 -0
- package/documents/posters/Varshneya_Samdarshi_LMU-Symposium_2016.pptx +0 -0
- package/documents/posters/Varshneya_Samdarshi_SoCalSysBio_2017.pptx +0 -0
- package/documents/presentations/Anguiano_402_Final_Presentation.pptx +0 -0
- package/documents/presentations/Choe_SWERapidFire2017_final.pptx +0 -0
- package/documents/presentations/Dahlquist_BOSC_20160709.pptx +0 -0
- package/documents/presentations/Dahlquist_ExperimentalBiology_20160404_talk.pptx +0 -0
- package/documents/presentations/Dahlquist_SoCalSysBio_20150131_talk.pptx +0 -0
- package/documents/presentations/Samdarshi_LMU-Symposium_20190323_talk.pdf +0 -0
- package/documents/presentations/Samdarshi_LMU-Symposium_20190323_talk.pptx +0 -0
- package/documents/presentations/Southwick_Anguiano_LMU-Symposium_20140329_talk.pptx +0 -0
- package/documents/presentations/Southwick_CMSI402_Presentation_20140508_talk.pptx +0 -0
- package/documents/presentations/Varshneya_Anguiano_LMU-Symposium_201703_talk.pptx +0 -0
- package/documents/reports/Samdarshi_Mihir_2019/Samdarshi_2019_Final.docx +0 -0
- package/documents/reports/Samdarshi_Mihir_2019/Samdarshi_Mihir_2019_AnnotatedBibliography.docx +0 -0
- package/documents/reports/Samdarshi_Mihir_2019/Samdarshi_Mihir_2019_Outline.docx +0 -0
- package/documents/reports/Samdarshi_Mihir_2019/~$mdarshi_2019_Draft.docx +0 -0
- package/documents/reports/Samdarshi_Mihir_2019/~$mdarshi_2019_Final_Paper_Draft.docx +0 -0
- package/documents/reports/Varshneya_Anu_2017/Varshneya-201701-AnnotatedBibliography.docx +0 -0
- package/documents/reports/Varshneya_Anu_2017/Varshneya-201702-Introduction.docx +0 -0
- package/documents/reports/Varshneya_Anu_2017/Varshneya-201702-Outline.docx +0 -0
- package/documents/reports/Varshneya_Anu_2017/Varshneya-201703-Discussion.docx +0 -0
- package/documents/reports/Varshneya_Anu_2017/Varshneya-201703-MMResults.docx +0 -0
- package/documents/reports/Varshneya_Anu_2017/Varshneya-201704-Draft-1.docx +0 -0
- package/documents/reports/Varshneya_Anu_2017/Varshneya-201704-Final.docx +0 -0
- package/onlysidebar.html +0 -8
- package/test/graph-library-tests.js +0 -165
- package/test-files/demo-files/21-genes_50-edges_Dahlquist-data_estimation_output.xlsx +0 -0
- package/test-files/demo-files/21-genes_50-edges_Dahlquist-data_input.xlsx +0 -0
- package/test-files/graph-tests/different-sized-networks/10-genes-max-edges.xlsx +0 -0
- package/test-files/graph-tests/different-sized-networks/12-genes-max-edges.xlsx +0 -0
- package/test-files/graph-tests/different-sized-networks/35-genes-max-edges.xlsx +0 -0
- package/test-files/graph-tests/different-sized-networks/40-genes-0-edges.xlsx +0 -0
- package/test-files/graph-tests/different-sized-networks/40-genes-max-edges.xlsx +0 -0
- package/test-files/graph-tests/different-sized-networks/42-genes-max-edges.xlsx +0 -0
- package/test-files/graph-tests/different-sized-networks/50-genes-max-edges.xlsx +0 -0
- package/test-files/graph-tests/different-sized-networks/75-genes-150-edges.xlsx +0 -0
- package/web-client/public/js/container.js +0 -121
- 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.
|
|
15
|
+
return res.status(200).send(converter(JSON.parse(req.body.workbook)));
|
|
16
16
|
};
|
|
17
17
|
|
|
18
18
|
var generalExportError = function (res, error) {
|
|
19
|
-
|
|
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,
|
|
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 (
|
|
9
|
-
var
|
|
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 (
|
|
46
|
-
|
|
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
|
-
|
|
54
|
+
convertedWorkbook.graphml.graph = {
|
|
55
55
|
"@edgedefault": "directed",
|
|
56
56
|
|
|
57
|
-
node:
|
|
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:
|
|
68
|
-
var sourceGeneId =
|
|
69
|
-
var targetGeneId =
|
|
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 (
|
|
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 (
|
|
99
|
-
|
|
98
|
+
if (workbook.filename) {
|
|
99
|
+
convertedWorkbook.graphml.graph["@id"] = workbook.filename;
|
|
100
100
|
}
|
|
101
101
|
|
|
102
|
-
return
|
|
102
|
+
return convertedWorkbook;
|
|
103
103
|
};
|
|
104
104
|
|
|
105
|
-
module.exports = function (
|
|
106
|
-
return xmlbuilder.create(grnsightToGraphMlJson(
|
|
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 (
|
|
3
|
+
var exportEdges = function (workbook, gene, geneIndex) {
|
|
4
4
|
var result = "";
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
workbook.links.forEach(function (link) {
|
|
7
7
|
if (link.source === geneIndex) {
|
|
8
8
|
result += [
|
|
9
9
|
gene.name,
|
|
10
|
-
|
|
11
|
-
|
|
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 (
|
|
19
|
+
module.exports = function (workbook) {
|
|
20
20
|
var result = "";
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
result += exportEdges(
|
|
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
|
|
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 =
|
|
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.
|
|
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",
|
|
37
|
+
data: [["id", header], ...Object.keys(testSheet).map(key => [key, testSheet[key]])]
|
|
36
38
|
};
|
|
37
39
|
};
|
|
38
40
|
|
|
39
|
-
const buildTestSheets =
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
|
48
|
-
|
|
49
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 (
|
|
104
|
+
const buildXlsxSheet = function (workbook) {
|
|
73
105
|
const resultSheet = [];
|
|
74
|
-
|
|
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(
|
|
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
|
-
|
|
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(
|
|
165
|
+
resultSheet.push(...buildTestSheets(workbook[key]));
|
|
93
166
|
break;
|
|
94
167
|
case "expression":
|
|
95
|
-
resultSheet.push(...buildExpressionSheets(
|
|
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 (
|
|
106
|
-
return xlsx.build(buildXlsxSheet(
|
|
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
|
};
|