about summary refs log tree commit diff
Error: user-error ("Org export aborted. Unable to resolve link: \"introduction\" See `org-export-with-broken-links'") signal(user-error ("Org export aborted. Unable to resolve link: \"introduction\"\nSee `org-export-with-broken-links'")) user-error("Org export aborted. Unable to resolve link: %S\nSee `org-export-with-broken-links'" "introduction") org-export-data((link (:standard-properties [124 nil 141 153 155 0 nil nil nil nil nil nil nil nil # nil nil (paragraph (:standard-properties [124 124 124 156 156 0 nil nil nil nil nil nil nil nil # nil nil (item (:standard-properties [121 121 124 156 156 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #30]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #33] :key "TITLE" :value "Installing GeneNetwork services"))) #25 (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #30] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #35))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #35]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #38]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #41))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #30] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #36))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #36]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #39]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #42)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #42] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #46))) #(").\n" 0 3 (:parent #42))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #39]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #43)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #43] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #43))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #39]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #44))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #39]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #45)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #45] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #45))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #39]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #46))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #39]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #47)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #47] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #47))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #30] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #37))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #37]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #40]) #("The main " 0 9 (:parent #43)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #43] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #47))) #("is built on " 0 12 (:parent #43)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #43] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #49))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #43)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #43] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #51))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #43)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #43] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #53))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #43)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #43] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #55)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #55] :use-brackets-p nil) #("page.html" 0 9 (:parent #59)))) #("in the " 0 7 (:parent #43)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #43] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #57))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #43)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #43] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #59)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #59] :use-brackets-p nil) #("select" 0 6 (:parent #63))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #59] :use-brackets-p nil) #("menu.js" 0 7 (:parent #64)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #43)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #43] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #61)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #61] :use-brackets-p nil) #("select" 0 6 (:parent #65))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #61] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #66)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #43)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #43] :use-brackets-p nil) #("server" 0 6 (:parent #63))) #("in the latest version, see " 0 27 (:parent #43)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #43] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #65))) #(".\n" 0 2 (:parent #43))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #40]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #44)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("M2" 0 2 (:parent #48))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("0606" 0 4 (:parent #49))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("P" 0 1 (:parent #50))) #("&search" 0 7 (:parent #44)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("terms" 0 5 (:parent #52))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("or" 0 2 (:parent #53))) #("=&search" 0 8 (:parent #44)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("terms" 0 5 (:parent #55))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("and" 0 3 (:parent #56))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #44)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("server" 0 6 (:parent #58))) #("). The logic is in\nsearch" 0 25 (:parent #44)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("result.py" 0 9 (:parent #60))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #44)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #44] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #62)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #62] :use-brackets-p nil) #("result" 0 6 (:parent #66))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #62] :use-brackets-p nil) #("page.html" 0 9 (:parent #67)))) #(".\n" 0 2 (:parent #44))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #40]) #("For what happens at the database level see " 0 43 (:parent #45)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #45] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #45))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #40]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #46)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #46] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #50)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #50] :use-brackets-p nil) #("result" 0 6 (:parent #54))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #50] :use-brackets-p nil) #("page.html" 0 9 (:parent #55)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #46)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #46] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #52))) #(".\n" 0 2 (:parent #46))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #30] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #38))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #38]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #41]) #("The " 0 4 (:parent #44)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #44] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #48))) #("is built on high performance " 0 29 (:parent #44)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #44] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #50))) #("with " 0 5 (:parent #44)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #44] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #52))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #44))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #41] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #41]) #("(json2yaml.rb is in the gn" 0 26 (:parent #46)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #46] :use-brackets-p nil) #("server" 0 6 (:parent #50))) #("repo). For the current API definition\nsee " 0 42 (:parent #46)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #46] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #52))) #("documentation.\n" 0 15 (:parent #46))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #30] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #39))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #39]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #42]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #45))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #30] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #40))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #40] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #43))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #43]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #46]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #49)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #49] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #49)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #49] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #55))) #(".\n" 0 2 (:parent #49))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #40] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #44))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #44]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #47]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #50)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #50] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #54))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #50)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #50] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #56))) #(".\n" 0 2 (:parent #50))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #47]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #51))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #47] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #47]) #("and, for example, in the method run" 0 35 (:parent #53)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #53] :use-brackets-p nil) #("rqtl" 0 4 (:parent #57))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #53] :use-brackets-p nil) #("geno" 0 4 (:parent #58))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #53)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #53] :use-brackets-p nil) #("extra" 0 5 (:parent #60))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #53))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #47] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #47]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #55))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #47] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t]))))))] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #25))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) #20)]) #15)] :type unordered) #10 (item (:standard-properties [156 156 159 239 239 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #15] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [159 159 159 239 239 0 nil nil nil nil nil nil nil nil # nil nil #19]) (link (:standard-properties [159 nil 200 236 238 0 nil nil nil nil nil nil nil nil # nil nil #22] :type "custom-id" :type-explicit-p nil :path "reproducibility-and-interoperability" :format bracket :raw-link "#reproducibility-and-interoperability" :application nil :search-option nil) #("Reproducibility and interoperability" 0 36 (:parent #25))) #("\n" 0 1 (:parent #22)))) (item (:standard-properties [239 239 242 268 268 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #15] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [242 242 242 268 268 0 nil nil nil nil nil nil nil nil # nil nil #20]) (link (:standard-properties [242 nil 256 265 267 0 nil nil nil nil nil nil nil nil # nil nil #23] :type "custom-id" :type-explicit-p nil :path "webserver" :format bracket :raw-link "#webserver" :application nil :search-option nil) #("Webserver" 0 9 (:parent #26))) #("\n" 0 1 (:parent #23)))) (item (:standard-properties [268 268 271 307 307 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #15] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [271 271 271 307 307 0 nil nil nil nil nil nil nil nil # nil nil #21]) (link (:standard-properties [271 nil 289 304 306 0 nil nil nil nil nil nil nil nil # nil nil #24] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #27))) #("\n" 0 1 (:parent #24)))) (item (:standard-properties [307 307 310 330 330 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #15] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [310 310 310 330 330 0 nil nil nil nil nil nil nil nil # nil nil #22]) (link (:standard-properties [310 nil 321 327 329 0 nil nil nil nil nil nil nil nil # nil nil #25] :type "custom-id" :type-explicit-p nil :path "gnexec" :format bracket :raw-link "#gnexec" :application nil :search-option nil) #("GnExec" 0 6 (:parent #28))) #("\n" 0 1 (:parent #25)))) (item (:standard-properties [330 330 333 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #15] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [333 333 333 357 357 0 nil nil nil nil nil nil nil nil # nil nil #23]) (link (:standard-properties [333 nil 346 354 356 0 nil nil nil nil nil nil nil nil # nil nil #26] :type "custom-id" :type-explicit-p nil :path "database" :format bracket :raw-link "#database" :application nil :search-option nil) #("Database" 0 8 (:parent #29))) #("\n" 0 1 (:parent #26))) (plain-list (:standard-properties [357 357 357 421 421 0 nil nil nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #23] :type unordered) (item (:standard-properties [357 357 362 390 390 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #27] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [362 362 362 390 390 0 nil nil nil nil nil nil nil nil # nil nil #30]) (link (:standard-properties [362 nil 377 387 389 0 nil nil nil nil nil nil nil nil # nil nil #33] :type "custom-id" :type-explicit-p nil :path "phenotypes" :format bracket :raw-link "#phenotypes" :application nil :search-option nil) #("Phenotypes" 0 10 (:parent #36))) #("\n" 0 1 (:parent #33)))) (item (:standard-properties [390 390 395 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #27] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [395 395 395 421 421 0 nil nil nil nil nil nil nil nil # nil nil #31]) (link (:standard-properties [395 nil 409 418 420 0 nil nil nil nil nil nil nil nil # nil nil #34] :type "custom-id" :type-explicit-p nil :path "genotypes" :format bracket :raw-link "#genotypes" :application nil :search-option nil) #("Genotypes" 0 9 (:parent #37))) #("\n" 0 1 (:parent #34)))))))] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) #5)]) #0 #("\n" 0 1 (:parent #5)))] :type "custom-id" :type-explicit-p nil :path "introduction" :format bracket :raw-link "#introduction" :application nil :search-option nil) #("Introduction" 0 12 (:parent #0))) (:export-options (body-only) :back-end #s(org-export-backend :name html :parent nil :transcoders ((bold . org-html-bold) (center-block . org-html-center-block) (clock . org-html-clock) (code . org-html-code) (drawer . org-html-drawer) (dynamic-block . org-html-dynamic-block) (entity . org-html-entity) (example-block . org-html-example-block) (export-block . org-html-export-block) (export-snippet . org-html-export-snippet) (fixed-width . org-html-fixed-width) (footnote-reference . org-html-footnote-reference) (headline . org-html-headline) (horizontal-rule . org-html-horizontal-rule) (inline-src-block . org-html-inline-src-block) (inlinetask . org-html-inlinetask) (inner-template . org-html-inner-template) (italic . org-html-italic) (item . org-html-item) (keyword . org-html-keyword) (latex-environment . org-html-latex-environment) (latex-fragment . org-html-latex-fragment) (line-break . org-html-line-break) (link . org-html-link) (node-property . org-html-node-property) (paragraph . org-html-paragraph) (plain-list . org-html-plain-list) (plain-text . org-html-plain-text) (planning . org-html-planning) (property-drawer . org-html-property-drawer) (quote-block . org-html-quote-block) (radio-target . org-html-radio-target) (section . org-html-section) (special-block . org-html-special-block) (src-block . org-html-src-block) (statistics-cookie . org-html-statistics-cookie) (strike-through . org-html-strike-through) (subscript . org-html-subscript) (superscript . org-html-superscript) (table . org-html-table) (table-cell . org-html-table-cell) (table-row . org-html-table-row) (target . org-html-target) (template . org-html-template) (timestamp . org-html-timestamp) (underline . org-html-underline) (verbatim . org-html-verbatim) (verse-block . org-html-verse-block)) :options ((:html-doctype "HTML_DOCTYPE" nil org-html-doctype) (:html-container "HTML_CONTAINER" nil org-html-container-element) (:html-content-class "HTML_CONTENT_CLASS" nil org-html-content-class) (:description "DESCRIPTION" nil nil newline) (:keywords "KEYWORDS" nil nil space) (:html-html5-fancy nil "html5-fancy" org-html-html5-fancy) (:html-link-use-abs-url nil "html-link-use-abs-url" org-html-link-use-abs-url) (:html-link-home "HTML_LINK_HOME" nil org-html-link-home) (:html-link-up "HTML_LINK_UP" nil org-html-link-up) (:html-mathjax "HTML_MATHJAX" nil "" space) (:html-equation-reference-format "HTML_EQUATION_REFERENCE_FORMAT" nil org-html-equation-reference-format t) (:html-postamble nil "html-postamble" org-html-postamble) (:html-preamble nil "html-preamble" org-html-preamble) (:html-head "HTML_HEAD" nil org-html-head newline) (:html-head-extra "HTML_HEAD_EXTRA" nil org-html-head-extra newline) (:subtitle "SUBTITLE" nil nil parse) (:html-head-include-default-style nil "html-style" org-html-head-include-default-style) (:html-head-include-scripts nil "html-scripts" org-html-head-include-scripts) (:html-allow-name-attribute-in-anchors nil nil org-html-allow-name-attribute-in-anchors) (:html-divs nil nil org-html-divs) (:html-checkbox-type nil nil org-html-checkbox-type) (:html-extension nil nil org-html-extension) (:html-footnote-format nil nil org-html-footnote-format) (:html-footnote-separator nil nil org-html-footnote-separator) (:html-footnotes-section nil nil org-html-footnotes-section) (:html-format-drawer-function nil nil org-html-format-drawer-function) (:html-format-headline-function nil nil org-html-format-headline-function) (:html-format-inlinetask-function nil nil org-html-format-inlinetask-function) (:html-home/up-format nil nil org-html-home/up-format) (:html-indent nil nil org-html-indent) (:html-infojs-options nil nil org-html-infojs-options) (:html-infojs-template nil nil org-html-infojs-template) (:html-inline-image-rules nil nil org-html-inline-image-rules) (:html-link-org-files-as-html nil nil org-html-link-org-files-as-html) (:html-mathjax-options nil nil org-html-mathjax-options) (:html-mathjax-template nil nil org-html-mathjax-template) (:html-metadata-timestamp-format nil nil org-html-metadata-timestamp-format) (:html-postamble-format nil nil org-html-postamble-format) (:html-preamble-format nil nil org-html-preamble-format) (:html-prefer-user-labels nil nil org-html-prefer-user-labels) (:html-self-link-headlines nil nil org-html-self-link-headlines) (:html-table-align-individual-fields nil nil org-html-table-align-individual-fields) (:html-table-caption-above nil nil org-html-table-caption-above) (:html-table-data-tags nil nil org-html-table-data-tags) (:html-table-header-tags nil nil org-html-table-header-tags) (:html-table-use-header-tags-for-first-column nil nil org-html-table-use-header-tags-for-first-column) (:html-tag-class-prefix nil nil org-html-tag-class-prefix) (:html-text-markup-alist nil nil org-html-text-markup-alist) (:html-todo-kwd-class-prefix nil nil org-html-todo-kwd-class-prefix) (:html-toplevel-hlevel nil nil org-html-toplevel-hlevel) (:html-use-infojs nil nil org-html-use-infojs) (:html-validation-link nil nil org-html-validation-link) (:html-viewport nil nil org-html-viewport) (:html-inline-images nil nil org-html-inline-images) (:html-table-attributes nil nil org-html-table-default-attributes) (:html-table-row-open-tag nil nil org-html-table-row-open-tag) (:html-table-row-close-tag nil nil org-html-table-row-close-tag) (:html-xml-declaration nil nil org-html-xml-declaration) (:html-wrap-src-lines nil nil org-html-wrap-src-lines) (:html-klipsify-src nil nil org-html-klipsify-src) (:html-klipse-css nil nil org-html-klipse-css) (:html-klipse-js nil nil org-html-klipse-js) (:html-klipse-selection-script nil nil org-html-klipse-selection-script) (:infojs-opt "INFOJS_OPT" nil nil) (:creator "CREATOR" nil org-html-creator-string) (:with-latex nil "tex" org-html-with-latex) (:latex-header "LATEX_HEADER" nil nil newline)) :filters ((:filter-options . org-html-infojs-install-script) (:filter-parse-tree . org-html-image-link-filter) (:filter-final-output . org-html-final-function)) :blocks nil :menu (104 "Export to HTML" ((72 "As HTML buffer" org-html-export-as-html) (104 "As HTML file" org-html-export-to-html) (111 "As HTML file and open" (lambda (a s v b) (if a (org-html-export-to-html t s v b) (org-open-file (org-html-export-to-html nil s v b)))))))) :translate-alist ((bold . org-html-bold) (center-block . org-html-center-block) (clock . org-html-clock) (code . org-html-code) (drawer . org-html-drawer) (dynamic-block . org-html-dynamic-block) (entity . org-html-entity) (example-block . org-html-example-block) (export-block . org-html-export-block) (export-snippet . org-html-export-snippet) (fixed-width . org-html-fixed-width) (footnote-reference . org-html-footnote-reference) (headline . org-html-headline) (horizontal-rule . org-html-horizontal-rule) (inline-src-block . org-html-inline-src-block) (inlinetask . org-html-inlinetask) (inner-template . org-html-inner-template) (italic . org-html-italic) (item . org-html-item) (keyword . org-html-keyword) (latex-environment . org-html-latex-environment) (latex-fragment . org-html-latex-fragment) (line-break . org-html-line-break) (link . org-html-link) (node-property . org-html-node-property) (paragraph . org-html-paragraph) (plain-list . org-html-plain-list) (plain-text . org-html-plain-text) (planning . org-html-planning) (property-drawer . org-html-property-drawer) (quote-block . org-html-quote-block) (radio-target . org-html-radio-target) (section . org-html-section) (special-block . org-html-special-block) (src-block . org-html-src-block) (statistics-cookie . org-html-statistics-cookie) (strike-through . org-html-strike-through) (subscript . org-html-subscript) (superscript . org-html-superscript) (table . org-html-table) (table-cell . org-html-table-cell) (table-row . org-html-table-row) (target . org-html-target) (template . org-html-template) (timestamp . org-html-timestamp) (underline . org-html-underline) (verbatim . org-html-verbatim) (verse-block . org-html-verse-block)) :exported-data # :input-buffer " *temp*" :input-file nil :html-doctype "xhtml-strict" :html-container "div" :html-content-class "content" :description nil :keywords nil :html-html5-fancy nil :html-link-use-abs-url nil :html-link-home "" :html-link-up "" :html-mathjax "" :html-equation-reference-format "\\eqref{%s}" :html-postamble auto :html-preamble t :html-head "" :html-head-extra "" :subtitle nil :html-head-include-default-style t :html-head-include-scripts nil :html-allow-name-attribute-in-anchors nil :html-divs ((preamble "div" "preamble") (content "div" "content") (postamble "div" "postamble")) :html-checkbox-type ascii :html-extension "html" :html-footnote-format "%s" :html-footnote-separator ", " :html-footnotes-section "
\n

%s:

\n
\n%s\n
\n
" :html-format-drawer-function #f(compiled-function (name contents) #) :html-format-headline-function org-html-format-headline-default-function :html-format-inlinetask-function org-html-format-inlinetask-default-function :html-home/up-format "
\n UP \n |\n HOME \n
" :html-indent nil :html-infojs-options ((path . "https://orgmode.org/org-info.js") (view . "info") (toc . :with-toc) (ftoc . "0") (tdepth . "max") (sdepth . "max") (mouse . "underline") (buttons . "0") (ltoc . "1") (up . :html-link-up) (home . :html-link-home)) :html-infojs-template "\n\n" :html-inline-image-rules (("file" . "\\(?:\\.\\(?:avif\\|gif\\|jp\\(?:e?g\\)\\|png\\|svg\\|webp\\)\\)") ("http" . "\\(?:\\.\\(?:avif\\|gif\\|jp\\(?:e?g\\)\\|png\\|svg\\|webp\\)\\)") ("https" . "\\(?:\\.\\(?:avif\\|gif\\|jp\\(?:e?g\\)\\|png\\|svg\\|webp\\)\\)")) :html-link-org-files-as-html t :html-mathjax-options ((path "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js") (scale 1.0) (align "center") (font "mathjax-modern") (overflow "overflow") (tags "ams") (indent "0em") (multlinewidth "85%") (tagindent ".8em") (tagside "right")) :html-mathjax-template "\n\n\n" :html-metadata-timestamp-format "%Y-%m-%d %a %H:%M" :html-postamble-format (("en" "

Author: %a (%e)

\n

Date: %d

\n

%c

\n

%v

")) :html-preamble-format (("en" "")) :html-prefer-user-labels nil :html-self-link-headlines nil :html-table-align-individual-fields t :html-table-caption-above t :html-table-data-tags ("" . "") :html-table-header-tags ("" . "") :html-table-use-header-tags-for-first-column nil :html-tag-class-prefix "" :html-text-markup-alist ((bold . "%s") (code . "%s") (italic . "%s") (strike-through . "%s") (underline . "%s") (verbatim . "%s")) :html-todo-kwd-class-prefix "" :html-toplevel-hlevel 2 :html-use-infojs when-configured :html-validation-link "Validate" :html-viewport ((width "device-width") (initial-scale "1") (minimum-scale "") (maximum-scale "") (user-scalable "")) :html-inline-images t :html-table-attributes (:border "2" :cellspacing "0" :cellpadding "6" :rules "groups" :frame "hsides") :html-table-row-open-tag "" :html-table-row-close-tag "" :html-xml-declaration (("html" . "") ("php" . "\"; ?>")) :html-wrap-src-lines nil :html-klipsify-src nil :html-klipse-css "https://storage.googleapis.com/app.klipse.tech/css/codemirror.css" :html-klipse-js "https://storage.googleapis.com/app.klipse.tech/plugin_prod/js/klipse_plugin.min.js" :html-klipse-selection-script "window.klipse_settings = {selector_eval_html: '.src-html',\n selector_eval_js: '.src-js',\n selector_eval_python_client: '.src-python',\n selector_eval_scheme: '.src-scheme',\n selector: '.src-clojure',\n selector_eval_ruby: '.src-ruby'};" :infojs-opt nil :creator "Emacs 30.1 (Org mode 9.7.11)" :with-latex t :latex-header nil :title (#("Installing GeneNetwork services" 0 31 (:parent #148))) :date nil :author (#("unknown" 0 7 (:parent #152))) :email "unknown@genenetwork-development" :language "en" :select-tags ("export") :exclude-tags ("noexport") :headline-levels 3 :preserve-breaks nil :section-numbers nil :time-stamp-file t :with-archived-trees headline :with-author t :expand-links t :with-broken-links nil :with-clocks nil :with-creator nil :with-date t :with-drawers (not "LOGBOOK") :with-email nil :with-emphasize t :with-entities t :with-fixed-width t :with-footnotes t :with-inlinetasks t :with-planning nil :with-priority nil :with-properties nil :with-smart-quotes nil :with-special-strings t :with-special-rows nil :with-statistics-cookies t :with-sub-superscript t :with-toc nil :with-tables t :with-tags t :with-tasks t :with-timestamps t :with-title t :with-todo-keywords t :with-cite-processors t :cite-export (basic nil nil) :bibliography nil :filter-body nil :filter-bold nil :filter-babel-call nil :filter-center-block nil :filter-clock nil :filter-code nil :filter-diary-sexp nil :filter-drawer nil :filter-dynamic-block nil :filter-entity nil :filter-example-block nil :filter-export-block nil :filter-export-snippet nil :filter-final-output (org-html-final-function) :filter-fixed-width nil :filter-footnote-definition nil :filter-footnote-reference nil :filter-headline nil :filter-horizontal-rule nil :filter-inline-babel-call nil :filter-inline-src-block nil :filter-inlinetask nil :filter-italic nil :filter-item nil :filter-keyword nil :filter-latex-environment nil :filter-latex-fragment nil :filter-line-break nil :filter-link nil :filter-node-property nil :filter-options (org-html-infojs-install-script) :filter-paragraph nil :filter-parse-tree (org-html-image-link-filter) :filter-plain-list nil :filter-plain-text nil :filter-planning nil :filter-property-drawer nil :filter-quote-block nil :filter-radio-target nil :filter-section nil :filter-special-block nil :filter-src-block nil :filter-statistics-cookie nil :filter-strike-through nil :filter-subscript nil :filter-superscript nil :filter-table nil :filter-table-cell nil :filter-table-row nil :filter-target nil :filter-timestamp nil :filter-underline nil :filter-verbatim nil :filter-verse-block nil :ignore-list nil :parse-tree (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #344]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #347] :key "TITLE" :value "Installing GeneNetwork services"))) (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil #344] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #348))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil #348]) (plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #351] :type unordered) (item (:standard-properties [121 121 124 156 156 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [124 124 124 156 156 0 nil nil nil nil nil nil nil nil # nil nil #357]) (link (:standard-properties [124 nil 141 153 155 0 nil nil nil nil nil nil nil nil # nil nil #360] :type "custom-id" :type-explicit-p nil :path "introduction" :format bracket :raw-link "#introduction" :application nil :search-option nil) #("Introduction" 0 12 (:parent #363))) #("\n" 0 1 (:parent #360)))) (item (:standard-properties [156 156 159 239 239 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [159 159 159 239 239 0 nil nil nil nil nil nil nil nil # nil nil #358]) (link (:standard-properties [159 nil 200 236 238 0 nil nil nil nil nil nil nil nil # nil nil #361] :type "custom-id" :type-explicit-p nil :path "reproducibility-and-interoperability" :format bracket :raw-link "#reproducibility-and-interoperability" :application nil :search-option nil) #("Reproducibility and interoperability" 0 36 (:parent #364))) #("\n" 0 1 (:parent #361)))) (item (:standard-properties [239 239 242 268 268 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [242 242 242 268 268 0 nil nil nil nil nil nil nil nil # nil nil #359]) (link (:standard-properties [242 nil 256 265 267 0 nil nil nil nil nil nil nil nil # nil nil #362] :type "custom-id" :type-explicit-p nil :path "webserver" :format bracket :raw-link "#webserver" :application nil :search-option nil) #("Webserver" 0 9 (:parent #365))) #("\n" 0 1 (:parent #362)))) (item (:standard-properties [268 268 271 307 307 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [271 271 271 307 307 0 nil nil nil nil nil nil nil nil # nil nil #360]) (link (:standard-properties [271 nil 289 304 306 0 nil nil nil nil nil nil nil nil # nil nil #363] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #366))) #("\n" 0 1 (:parent #363)))) (item (:standard-properties [307 307 310 330 330 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [310 310 310 330 330 0 nil nil nil nil nil nil nil nil # nil nil #361]) (link (:standard-properties [310 nil 321 327 329 0 nil nil nil nil nil nil nil nil # nil nil #364] :type "custom-id" :type-explicit-p nil :path "gnexec" :format bracket :raw-link "#gnexec" :application nil :search-option nil) #("GnExec" 0 6 (:parent #367))) #("\n" 0 1 (:parent #364)))) (item (:standard-properties [330 330 333 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [333 333 333 357 357 0 nil nil nil nil nil nil nil nil # nil nil #362]) (link (:standard-properties [333 nil 346 354 356 0 nil nil nil nil nil nil nil nil # nil nil #365] :type "custom-id" :type-explicit-p nil :path "database" :format bracket :raw-link "#database" :application nil :search-option nil) #("Database" 0 8 (:parent #368))) #("\n" 0 1 (:parent #365))) (plain-list (:standard-properties [357 357 357 421 421 0 nil nil nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #362] :type unordered) (item (:standard-properties [357 357 362 390 390 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #366] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [362 362 362 390 390 0 nil nil nil nil nil nil nil nil # nil nil #369]) (link (:standard-properties [362 nil 377 387 389 0 nil nil nil nil nil nil nil nil # nil nil #372] :type "custom-id" :type-explicit-p nil :path "phenotypes" :format bracket :raw-link "#phenotypes" :application nil :search-option nil) #("Phenotypes" 0 10 (:parent #375))) #("\n" 0 1 (:parent #372)))) (item (:standard-properties [390 390 395 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #366] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [395 395 395 421 421 0 nil nil nil nil nil nil nil nil # nil nil #370]) (link (:standard-properties [395 nil 409 418 420 0 nil nil nil nil nil nil nil nil # nil nil #373] :type "custom-id" :type-explicit-p nil :path "genotypes" :format bracket :raw-link "#genotypes" :application nil :search-option nil) #("Genotypes" 0 9 (:parent #376))) #("\n" 0 1 (:parent #373))))))))) (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #349))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #349]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #352]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #355))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #350))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #350]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #353]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #356)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #356] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #360))) #(").\n" 0 3 (:parent #356))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #357)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #357))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #358))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #359)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #359] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #359))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #360))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #361)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #361] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #361))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #351))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #351]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #354]) #("The main " 0 9 (:parent #357)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #361))) #("is built on " 0 12 (:parent #357)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #363))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #357)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #365))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #357)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #367))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #357)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #369)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #369] :use-brackets-p nil) #("page.html" 0 9 (:parent #373)))) #("in the " 0 7 (:parent #357)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #371))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #357)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #373)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #373] :use-brackets-p nil) #("select" 0 6 (:parent #377))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #373] :use-brackets-p nil) #("menu.js" 0 7 (:parent #378)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #357)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #375)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #375] :use-brackets-p nil) #("select" 0 6 (:parent #379))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #375] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #380)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #357)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #357] :use-brackets-p nil) #("server" 0 6 (:parent #377))) #("in the latest version, see " 0 27 (:parent #357)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #357] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #379))) #(".\n" 0 2 (:parent #357))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #354]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #358)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("M2" 0 2 (:parent #362))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("0606" 0 4 (:parent #363))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("P" 0 1 (:parent #364))) #("&search" 0 7 (:parent #358)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("terms" 0 5 (:parent #366))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("or" 0 2 (:parent #367))) #("=&search" 0 8 (:parent #358)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("terms" 0 5 (:parent #369))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("and" 0 3 (:parent #370))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #358)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("server" 0 6 (:parent #372))) #("). The logic is in\nsearch" 0 25 (:parent #358)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("result.py" 0 9 (:parent #374))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #358)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #358] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #376)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #376] :use-brackets-p nil) #("result" 0 6 (:parent #380))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #376] :use-brackets-p nil) #("page.html" 0 9 (:parent #381)))) #(".\n" 0 2 (:parent #358))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #354]) #("For what happens at the database level see " 0 43 (:parent #359)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #359] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #359))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #354]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #360)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #360] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #364)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #364] :use-brackets-p nil) #("result" 0 6 (:parent #368))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #364] :use-brackets-p nil) #("page.html" 0 9 (:parent #369)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #360)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #360] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #366))) #(".\n" 0 2 (:parent #360))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #352))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #352]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #355]) #("The " 0 4 (:parent #358)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #358] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #362))) #("is built on high performance " 0 29 (:parent #358)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #358] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #364))) #("with " 0 5 (:parent #358)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #358] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #366))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #358))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #355] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #355]) #("(json2yaml.rb is in the gn" 0 26 (:parent #360)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #360] :use-brackets-p nil) #("server" 0 6 (:parent #364))) #("repo). For the current API definition\nsee " 0 42 (:parent #360)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #360] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #366))) #("documentation.\n" 0 15 (:parent #360))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #353))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #353]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #356]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #359))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #344] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #354))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #354] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #357))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #357]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #360]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #363)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #363] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #363)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #363] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #369))) #(".\n" 0 2 (:parent #363))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #354] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #358))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #358]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #361]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #364)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #364] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #368))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #364)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #364] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #370))) #(".\n" 0 2 (:parent #364))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #361]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #365))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #361] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #361]) #("and, for example, in the method run" 0 35 (:parent #367)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #367] :use-brackets-p nil) #("rqtl" 0 4 (:parent #371))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #367] :use-brackets-p nil) #("geno" 0 4 (:parent #372))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #367)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #367] :use-brackets-p nil) #("extra" 0 5 (:parent #374))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #367))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #361] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #361]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #369))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #361] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t])))))) :headline-offset 0 :headline-numbering nil :id-alist nil :citations nil :id-local-cache #)) #f(compiled-function (element) #)((link (:standard-properties [124 nil 141 153 155 0 nil nil nil nil nil nil nil nil # nil nil (paragraph (:standard-properties [124 124 124 156 156 0 nil nil nil nil nil nil nil nil # nil nil (item (:standard-properties [121 121 124 156 156 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #30]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #33] :key "TITLE" :value "Installing GeneNetwork services"))) #25 (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #30] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #35))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #35]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #38]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #41))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #30] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #36))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #36]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #39]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #42)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #42] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #46))) #(").\n" 0 3 (:parent #42))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #39]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #43)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #43] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #43))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #39]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #44))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #39]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #45)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #45] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #45))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #39]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #46))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #39]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #47)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #47] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #47))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #30] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #37))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #37]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #40]) #("The main " 0 9 (:parent #43)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #43] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #47))) #("is built on " 0 12 (:parent #43)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #43] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #49))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #43)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #43] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #51))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #43)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #43] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #53))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #43)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #43] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #55)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #55] :use-brackets-p nil) #("page.html" 0 9 (:parent #59)))) #("in the " 0 7 (:parent #43)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #43] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #57))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #43)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #43] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #59)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #59] :use-brackets-p nil) #("select" 0 6 (:parent #63))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #59] :use-brackets-p nil) #("menu.js" 0 7 (:parent #64)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #43)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #43] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #61)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #61] :use-brackets-p nil) #("select" 0 6 (:parent #65))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #61] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #66)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #43)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #43] :use-brackets-p nil) #("server" 0 6 (:parent #63))) #("in the latest version, see " 0 27 (:parent #43)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #43] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #65))) #(".\n" 0 2 (:parent #43))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #40]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #44)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("M2" 0 2 (:parent #48))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("0606" 0 4 (:parent #49))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("P" 0 1 (:parent #50))) #("&search" 0 7 (:parent #44)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("terms" 0 5 (:parent #52))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("or" 0 2 (:parent #53))) #("=&search" 0 8 (:parent #44)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("terms" 0 5 (:parent #55))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("and" 0 3 (:parent #56))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #44)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("server" 0 6 (:parent #58))) #("). The logic is in\nsearch" 0 25 (:parent #44)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("result.py" 0 9 (:parent #60))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #44)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #44] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #62)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #62] :use-brackets-p nil) #("result" 0 6 (:parent #66))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #62] :use-brackets-p nil) #("page.html" 0 9 (:parent #67)))) #(".\n" 0 2 (:parent #44))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #40]) #("For what happens at the database level see " 0 43 (:parent #45)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #45] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #45))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #40]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #46)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #46] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #50)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #50] :use-brackets-p nil) #("result" 0 6 (:parent #54))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #50] :use-brackets-p nil) #("page.html" 0 9 (:parent #55)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #46)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #46] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #52))) #(".\n" 0 2 (:parent #46))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #30] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #38))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #38]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #41]) #("The " 0 4 (:parent #44)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #44] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #48))) #("is built on high performance " 0 29 (:parent #44)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #44] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #50))) #("with " 0 5 (:parent #44)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #44] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #52))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #44))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #41] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #41]) #("(json2yaml.rb is in the gn" 0 26 (:parent #46)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #46] :use-brackets-p nil) #("server" 0 6 (:parent #50))) #("repo). For the current API definition\nsee " 0 42 (:parent #46)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #46] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #52))) #("documentation.\n" 0 15 (:parent #46))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #30] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #39))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #39]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #42]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #45))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #30] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #40))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #40] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #43))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #43]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #46]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #49)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #49] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #49)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #49] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #55))) #(".\n" 0 2 (:parent #49))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #40] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #44))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #44]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #47]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #50)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #50] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #54))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #50)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #50] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #56))) #(".\n" 0 2 (:parent #50))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #47]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #51))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #47] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #47]) #("and, for example, in the method run" 0 35 (:parent #53)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #53] :use-brackets-p nil) #("rqtl" 0 4 (:parent #57))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #53] :use-brackets-p nil) #("geno" 0 4 (:parent #58))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #53)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #53] :use-brackets-p nil) #("extra" 0 5 (:parent #60))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #53))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #47] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #47]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #55))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #47] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t]))))))] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #25))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) #20)]) #15)] :type unordered) #10 (item (:standard-properties [156 156 159 239 239 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #15] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [159 159 159 239 239 0 nil nil nil nil nil nil nil nil # nil nil #19]) (link (:standard-properties [159 nil 200 236 238 0 nil nil nil nil nil nil nil nil # nil nil #22] :type "custom-id" :type-explicit-p nil :path "reproducibility-and-interoperability" :format bracket :raw-link "#reproducibility-and-interoperability" :application nil :search-option nil) #("Reproducibility and interoperability" 0 36 (:parent #25))) #("\n" 0 1 (:parent #22)))) (item (:standard-properties [239 239 242 268 268 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #15] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [242 242 242 268 268 0 nil nil nil nil nil nil nil nil # nil nil #20]) (link (:standard-properties [242 nil 256 265 267 0 nil nil nil nil nil nil nil nil # nil nil #23] :type "custom-id" :type-explicit-p nil :path "webserver" :format bracket :raw-link "#webserver" :application nil :search-option nil) #("Webserver" 0 9 (:parent #26))) #("\n" 0 1 (:parent #23)))) (item (:standard-properties [268 268 271 307 307 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #15] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [271 271 271 307 307 0 nil nil nil nil nil nil nil nil # nil nil #21]) (link (:standard-properties [271 nil 289 304 306 0 nil nil nil nil nil nil nil nil # nil nil #24] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #27))) #("\n" 0 1 (:parent #24)))) (item (:standard-properties [307 307 310 330 330 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #15] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [310 310 310 330 330 0 nil nil nil nil nil nil nil nil # nil nil #22]) (link (:standard-properties [310 nil 321 327 329 0 nil nil nil nil nil nil nil nil # nil nil #25] :type "custom-id" :type-explicit-p nil :path "gnexec" :format bracket :raw-link "#gnexec" :application nil :search-option nil) #("GnExec" 0 6 (:parent #28))) #("\n" 0 1 (:parent #25)))) (item (:standard-properties [330 330 333 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #15] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [333 333 333 357 357 0 nil nil nil nil nil nil nil nil # nil nil #23]) (link (:standard-properties [333 nil 346 354 356 0 nil nil nil nil nil nil nil nil # nil nil #26] :type "custom-id" :type-explicit-p nil :path "database" :format bracket :raw-link "#database" :application nil :search-option nil) #("Database" 0 8 (:parent #29))) #("\n" 0 1 (:parent #26))) (plain-list (:standard-properties [357 357 357 421 421 0 nil nil nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #23] :type unordered) (item (:standard-properties [357 357 362 390 390 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #27] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [362 362 362 390 390 0 nil nil nil nil nil nil nil nil # nil nil #30]) (link (:standard-properties [362 nil 377 387 389 0 nil nil nil nil nil nil nil nil # nil nil #33] :type "custom-id" :type-explicit-p nil :path "phenotypes" :format bracket :raw-link "#phenotypes" :application nil :search-option nil) #("Phenotypes" 0 10 (:parent #36))) #("\n" 0 1 (:parent #33)))) (item (:standard-properties [390 390 395 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #27] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [395 395 395 421 421 0 nil nil nil nil nil nil nil nil # nil nil #31]) (link (:standard-properties [395 nil 409 418 420 0 nil nil nil nil nil nil nil nil # nil nil #34] :type "custom-id" :type-explicit-p nil :path "genotypes" :format bracket :raw-link "#genotypes" :application nil :search-option nil) #("Genotypes" 0 9 (:parent #37))) #("\n" 0 1 (:parent #34)))))))] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) #5)]) #0 #("\n" 0 1 (:parent #5)))] :type "custom-id" :type-explicit-p nil :path "introduction" :format bracket :raw-link "#introduction" :application nil :search-option nil) #("Introduction" 0 12 (:parent #0)))) mapconcat(#f(compiled-function (element) #) ((link (:standard-properties [124 nil 141 153 155 0 nil nil nil nil nil nil nil nil # nil nil (paragraph (:standard-properties [124 124 124 156 156 0 nil nil nil nil nil nil nil nil # nil nil (item (:standard-properties [121 121 124 156 156 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #31]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #34] :key "TITLE" :value "Installing GeneNetwork services"))) #26 (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #31] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #36))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #36]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #39]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #42))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #31] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #37))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #37]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #40]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #43)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #43] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #47))) #(").\n" 0 3 (:parent #43))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #40]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #44)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #44] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #44))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #40]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #45))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #40]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #46)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #46] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #46))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #40]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #47))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #40]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #48)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #48] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #48))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #31] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #38))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #38]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #41]) #("The main " 0 9 (:parent #44)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #44] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #48))) #("is built on " 0 12 (:parent #44)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #44] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #50))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #44)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #44] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #52))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #44)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #44] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #54))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #44)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #44] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #56)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #56] :use-brackets-p nil) #("page.html" 0 9 (:parent #60)))) #("in the " 0 7 (:parent #44)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #44] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #58))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #44)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #44] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #60)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #60] :use-brackets-p nil) #("select" 0 6 (:parent #64))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #60] :use-brackets-p nil) #("menu.js" 0 7 (:parent #65)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #44)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #44] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #62)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #62] :use-brackets-p nil) #("select" 0 6 (:parent #66))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #62] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #67)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #44)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("server" 0 6 (:parent #64))) #("in the latest version, see " 0 27 (:parent #44)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #44] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #66))) #(".\n" 0 2 (:parent #44))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #41]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #45)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #45] :use-brackets-p nil) #("M2" 0 2 (:parent #49))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #45] :use-brackets-p nil) #("0606" 0 4 (:parent #50))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #45] :use-brackets-p nil) #("P" 0 1 (:parent #51))) #("&search" 0 7 (:parent #45)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #45] :use-brackets-p nil) #("terms" 0 5 (:parent #53))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #45] :use-brackets-p nil) #("or" 0 2 (:parent #54))) #("=&search" 0 8 (:parent #45)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #45] :use-brackets-p nil) #("terms" 0 5 (:parent #56))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #45] :use-brackets-p nil) #("and" 0 3 (:parent #57))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #45)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #45] :use-brackets-p nil) #("server" 0 6 (:parent #59))) #("). The logic is in\nsearch" 0 25 (:parent #45)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #45] :use-brackets-p nil) #("result.py" 0 9 (:parent #61))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #45)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #45] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #63)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #63] :use-brackets-p nil) #("result" 0 6 (:parent #67))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #63] :use-brackets-p nil) #("page.html" 0 9 (:parent #68)))) #(".\n" 0 2 (:parent #45))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #41]) #("For what happens at the database level see " 0 43 (:parent #46)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #46] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #46))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #41]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #47)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #47] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #51)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #51] :use-brackets-p nil) #("result" 0 6 (:parent #55))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #51] :use-brackets-p nil) #("page.html" 0 9 (:parent #56)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #47)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #47] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #53))) #(".\n" 0 2 (:parent #47))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #31] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #39))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #39]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #42]) #("The " 0 4 (:parent #45)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #45] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #49))) #("is built on high performance " 0 29 (:parent #45)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #45] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #51))) #("with " 0 5 (:parent #45)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #45] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #53))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #45))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #42] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #42]) #("(json2yaml.rb is in the gn" 0 26 (:parent #47)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #47] :use-brackets-p nil) #("server" 0 6 (:parent #51))) #("repo). For the current API definition\nsee " 0 42 (:parent #47)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #47] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #53))) #("documentation.\n" 0 15 (:parent #47))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #31] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #40))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #40]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #43]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #46))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #31] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #41))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #41] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #44))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #44]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #47]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #50)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #50] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #50)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #50] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #56))) #(".\n" 0 2 (:parent #50))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #41] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #45))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #45]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #48]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #51)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #51] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #55))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #51)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #51] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #57))) #(".\n" 0 2 (:parent #51))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #48]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #52))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #48] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #48]) #("and, for example, in the method run" 0 35 (:parent #54)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #54] :use-brackets-p nil) #("rqtl" 0 4 (:parent #58))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #54] :use-brackets-p nil) #("geno" 0 4 (:parent #59))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #54)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #54] :use-brackets-p nil) #("extra" 0 5 (:parent #61))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #54))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #48] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #48]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #56))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #48] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t]))))))] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #26))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) #21)]) #16)] :type unordered) #11 (item (:standard-properties [156 156 159 239 239 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #16] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [159 159 159 239 239 0 nil nil nil nil nil nil nil nil # nil nil #20]) (link (:standard-properties [159 nil 200 236 238 0 nil nil nil nil nil nil nil nil # nil nil #23] :type "custom-id" :type-explicit-p nil :path "reproducibility-and-interoperability" :format bracket :raw-link "#reproducibility-and-interoperability" :application nil :search-option nil) #("Reproducibility and interoperability" 0 36 (:parent #26))) #("\n" 0 1 (:parent #23)))) (item (:standard-properties [239 239 242 268 268 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #16] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [242 242 242 268 268 0 nil nil nil nil nil nil nil nil # nil nil #21]) (link (:standard-properties [242 nil 256 265 267 0 nil nil nil nil nil nil nil nil # nil nil #24] :type "custom-id" :type-explicit-p nil :path "webserver" :format bracket :raw-link "#webserver" :application nil :search-option nil) #("Webserver" 0 9 (:parent #27))) #("\n" 0 1 (:parent #24)))) (item (:standard-properties [268 268 271 307 307 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #16] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [271 271 271 307 307 0 nil nil nil nil nil nil nil nil # nil nil #22]) (link (:standard-properties [271 nil 289 304 306 0 nil nil nil nil nil nil nil nil # nil nil #25] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #28))) #("\n" 0 1 (:parent #25)))) (item (:standard-properties [307 307 310 330 330 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #16] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [310 310 310 330 330 0 nil nil nil nil nil nil nil nil # nil nil #23]) (link (:standard-properties [310 nil 321 327 329 0 nil nil nil nil nil nil nil nil # nil nil #26] :type "custom-id" :type-explicit-p nil :path "gnexec" :format bracket :raw-link "#gnexec" :application nil :search-option nil) #("GnExec" 0 6 (:parent #29))) #("\n" 0 1 (:parent #26)))) (item (:standard-properties [330 330 333 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #16] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [333 333 333 357 357 0 nil nil nil nil nil nil nil nil # nil nil #24]) (link (:standard-properties [333 nil 346 354 356 0 nil nil nil nil nil nil nil nil # nil nil #27] :type "custom-id" :type-explicit-p nil :path "database" :format bracket :raw-link "#database" :application nil :search-option nil) #("Database" 0 8 (:parent #30))) #("\n" 0 1 (:parent #27))) (plain-list (:standard-properties [357 357 357 421 421 0 nil nil nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #24] :type unordered) (item (:standard-properties [357 357 362 390 390 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #28] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [362 362 362 390 390 0 nil nil nil nil nil nil nil nil # nil nil #31]) (link (:standard-properties [362 nil 377 387 389 0 nil nil nil nil nil nil nil nil # nil nil #34] :type "custom-id" :type-explicit-p nil :path "phenotypes" :format bracket :raw-link "#phenotypes" :application nil :search-option nil) #("Phenotypes" 0 10 (:parent #37))) #("\n" 0 1 (:parent #34)))) (item (:standard-properties [390 390 395 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #28] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [395 395 395 421 421 0 nil nil nil nil nil nil nil nil # nil nil #32]) (link (:standard-properties [395 nil 409 418 420 0 nil nil nil nil nil nil nil nil # nil nil #35] :type "custom-id" :type-explicit-p nil :path "genotypes" :format bracket :raw-link "#genotypes" :application nil :search-option nil) #("Genotypes" 0 9 (:parent #38))) #("\n" 0 1 (:parent #35)))))))] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) #6)]) . #0)] :type "custom-id" :type-explicit-p nil :path "introduction" :format bracket :raw-link "#introduction" :application nil :search-option nil) #("Introduction" 0 12 (:parent #1))) #("\n" 0 1 (:parent (paragraph (:standard-properties [124 124 124 156 156 0 nil nil nil nil nil nil nil nil # nil nil (item (:standard-properties [121 121 124 156 156 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #30]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #33] :key "TITLE" :value "Installing GeneNetwork services"))) #25 (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #30] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #35))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #35]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #38]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #41))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #30] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #36))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #36]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #39]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #42)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #42] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #46))) #(").\n" 0 3 (:parent #42))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #39]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #43)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #43] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #43))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #39]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #44))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #39]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #45)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #45] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #45))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #39]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #46))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #39]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #47)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #47] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #47))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #30] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #37))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #37]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #40]) #("The main " 0 9 (:parent #43)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #43] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #47))) #("is built on " 0 12 (:parent #43)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #43] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #49))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #43)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #43] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #51))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #43)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #43] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #53))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #43)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #43] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #55)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #55] :use-brackets-p nil) #("page.html" 0 9 (:parent #59)))) #("in the " 0 7 (:parent #43)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #43] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #57))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #43)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #43] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #59)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #59] :use-brackets-p nil) #("select" 0 6 (:parent #63))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #59] :use-brackets-p nil) #("menu.js" 0 7 (:parent #64)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #43)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #43] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #61)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #61] :use-brackets-p nil) #("select" 0 6 (:parent #65))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #61] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #66)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #43)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #43] :use-brackets-p nil) #("server" 0 6 (:parent #63))) #("in the latest version, see " 0 27 (:parent #43)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #43] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #65))) #(".\n" 0 2 (:parent #43))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #40]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #44)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("M2" 0 2 (:parent #48))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("0606" 0 4 (:parent #49))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("P" 0 1 (:parent #50))) #("&search" 0 7 (:parent #44)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("terms" 0 5 (:parent #52))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("or" 0 2 (:parent #53))) #("=&search" 0 8 (:parent #44)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("terms" 0 5 (:parent #55))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("and" 0 3 (:parent #56))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #44)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("server" 0 6 (:parent #58))) #("). The logic is in\nsearch" 0 25 (:parent #44)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("result.py" 0 9 (:parent #60))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #44)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #44] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #62)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #62] :use-brackets-p nil) #("result" 0 6 (:parent #66))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #62] :use-brackets-p nil) #("page.html" 0 9 (:parent #67)))) #(".\n" 0 2 (:parent #44))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #40]) #("For what happens at the database level see " 0 43 (:parent #45)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #45] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #45))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #40]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #46)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #46] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #50)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #50] :use-brackets-p nil) #("result" 0 6 (:parent #54))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #50] :use-brackets-p nil) #("page.html" 0 9 (:parent #55)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #46)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #46] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #52))) #(".\n" 0 2 (:parent #46))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #30] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #38))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #38]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #41]) #("The " 0 4 (:parent #44)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #44] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #48))) #("is built on high performance " 0 29 (:parent #44)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #44] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #50))) #("with " 0 5 (:parent #44)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #44] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #52))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #44))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #41] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #41]) #("(json2yaml.rb is in the gn" 0 26 (:parent #46)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #46] :use-brackets-p nil) #("server" 0 6 (:parent #50))) #("repo). For the current API definition\nsee " 0 42 (:parent #46)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #46] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #52))) #("documentation.\n" 0 15 (:parent #46))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #30] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #39))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #39]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #42]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #45))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #30] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #40))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #40] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #43))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #43]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #46]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #49)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #49] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #49)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #49] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #55))) #(".\n" 0 2 (:parent #49))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #40] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #44))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #44]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #47]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #50)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #50] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #54))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #50)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #50] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #56))) #(".\n" 0 2 (:parent #50))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #47]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #51))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #47] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #47]) #("and, for example, in the method run" 0 35 (:parent #53)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #53] :use-brackets-p nil) #("rqtl" 0 4 (:parent #57))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #53] :use-brackets-p nil) #("geno" 0 4 (:parent #58))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #53)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #53] :use-brackets-p nil) #("extra" 0 5 (:parent #60))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #53))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #47] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #47]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #55))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #47] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t]))))))] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #25))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) #20)]) #15)] :type unordered) #10 (item (:standard-properties [156 156 159 239 239 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #15] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [159 159 159 239 239 0 nil nil nil nil nil nil nil nil # nil nil #19]) (link (:standard-properties [159 nil 200 236 238 0 nil nil nil nil nil nil nil nil # nil nil #22] :type "custom-id" :type-explicit-p nil :path "reproducibility-and-interoperability" :format bracket :raw-link "#reproducibility-and-interoperability" :application nil :search-option nil) #("Reproducibility and interoperability" 0 36 (:parent #25))) #("\n" 0 1 (:parent #22)))) (item (:standard-properties [239 239 242 268 268 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #15] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [242 242 242 268 268 0 nil nil nil nil nil nil nil nil # nil nil #20]) (link (:standard-properties [242 nil 256 265 267 0 nil nil nil nil nil nil nil nil # nil nil #23] :type "custom-id" :type-explicit-p nil :path "webserver" :format bracket :raw-link "#webserver" :application nil :search-option nil) #("Webserver" 0 9 (:parent #26))) #("\n" 0 1 (:parent #23)))) (item (:standard-properties [268 268 271 307 307 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #15] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [271 271 271 307 307 0 nil nil nil nil nil nil nil nil # nil nil #21]) (link (:standard-properties [271 nil 289 304 306 0 nil nil nil nil nil nil nil nil # nil nil #24] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #27))) #("\n" 0 1 (:parent #24)))) (item (:standard-properties [307 307 310 330 330 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #15] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [310 310 310 330 330 0 nil nil nil nil nil nil nil nil # nil nil #22]) (link (:standard-properties [310 nil 321 327 329 0 nil nil nil nil nil nil nil nil # nil nil #25] :type "custom-id" :type-explicit-p nil :path "gnexec" :format bracket :raw-link "#gnexec" :application nil :search-option nil) #("GnExec" 0 6 (:parent #28))) #("\n" 0 1 (:parent #25)))) (item (:standard-properties [330 330 333 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #15] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [333 333 333 357 357 0 nil nil nil nil nil nil nil nil # nil nil #23]) (link (:standard-properties [333 nil 346 354 356 0 nil nil nil nil nil nil nil nil # nil nil #26] :type "custom-id" :type-explicit-p nil :path "database" :format bracket :raw-link "#database" :application nil :search-option nil) #("Database" 0 8 (:parent #29))) #("\n" 0 1 (:parent #26))) (plain-list (:standard-properties [357 357 357 421 421 0 nil nil nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #23] :type unordered) (item (:standard-properties [357 357 362 390 390 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #27] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [362 362 362 390 390 0 nil nil nil nil nil nil nil nil # nil nil #30]) (link (:standard-properties [362 nil 377 387 389 0 nil nil nil nil nil nil nil nil # nil nil #33] :type "custom-id" :type-explicit-p nil :path "phenotypes" :format bracket :raw-link "#phenotypes" :application nil :search-option nil) #("Phenotypes" 0 10 (:parent #36))) #("\n" 0 1 (:parent #33)))) (item (:standard-properties [390 390 395 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #27] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [395 395 395 421 421 0 nil nil nil nil nil nil nil nil # nil nil #31]) (link (:standard-properties [395 nil 409 418 420 0 nil nil nil nil nil nil nil nil # nil nil #34] :type "custom-id" :type-explicit-p nil :path "genotypes" :format bracket :raw-link "#genotypes" :application nil :search-option nil) #("Genotypes" 0 9 (:parent #37))) #("\n" 0 1 (:parent #34)))))))] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) #5)]) . #0)))) "") org-export-data((paragraph (:standard-properties [124 124 124 156 156 0 nil nil nil nil nil nil nil nil # nil nil (item (:standard-properties [121 121 124 156 156 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #25]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #28] :key "TITLE" :value "Installing GeneNetwork services"))) #20 (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #25] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #30))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #30]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #33]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #36))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #25] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #31))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #31]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #34]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #37)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #37] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #41))) #(").\n" 0 3 (:parent #37))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #34]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #38)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #38))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #34]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #39))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #34]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #40)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #40] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #40))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #34]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #41))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #34]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #42)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #42] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #42))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #25] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #32))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #32]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #35]) #("The main " 0 9 (:parent #38)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #42))) #("is built on " 0 12 (:parent #38)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #38] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #44))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #38)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #46))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #38)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #48))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #38)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #50)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #50] :use-brackets-p nil) #("page.html" 0 9 (:parent #54)))) #("in the " 0 7 (:parent #38)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #52))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #38)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #54)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #54] :use-brackets-p nil) #("select" 0 6 (:parent #58))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #54] :use-brackets-p nil) #("menu.js" 0 7 (:parent #59)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #38)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #56)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #56] :use-brackets-p nil) #("select" 0 6 (:parent #60))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #56] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #61)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #38)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #38] :use-brackets-p nil) #("server" 0 6 (:parent #58))) #("in the latest version, see " 0 27 (:parent #38)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #38] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #60))) #(".\n" 0 2 (:parent #38))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #35]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #39)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("M2" 0 2 (:parent #43))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("0606" 0 4 (:parent #44))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("P" 0 1 (:parent #45))) #("&search" 0 7 (:parent #39)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("terms" 0 5 (:parent #47))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("or" 0 2 (:parent #48))) #("=&search" 0 8 (:parent #39)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("terms" 0 5 (:parent #50))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("and" 0 3 (:parent #51))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #39)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("server" 0 6 (:parent #53))) #("). The logic is in\nsearch" 0 25 (:parent #39)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("result.py" 0 9 (:parent #55))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #39)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #57)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #57] :use-brackets-p nil) #("result" 0 6 (:parent #61))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #57] :use-brackets-p nil) #("page.html" 0 9 (:parent #62)))) #(".\n" 0 2 (:parent #39))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #35]) #("For what happens at the database level see " 0 43 (:parent #40)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #40] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #40))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #35]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #41)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #41] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #45)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #45] :use-brackets-p nil) #("result" 0 6 (:parent #49))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #45] :use-brackets-p nil) #("page.html" 0 9 (:parent #50)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #41)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #41] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #47))) #(".\n" 0 2 (:parent #41))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #25] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #33))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #33]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #36]) #("The " 0 4 (:parent #39)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #43))) #("is built on high performance " 0 29 (:parent #39)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #39] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #45))) #("with " 0 5 (:parent #39)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #47))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #39))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #36] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #36]) #("(json2yaml.rb is in the gn" 0 26 (:parent #41)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #41] :use-brackets-p nil) #("server" 0 6 (:parent #45))) #("repo). For the current API definition\nsee " 0 42 (:parent #41)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #41] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #47))) #("documentation.\n" 0 15 (:parent #41))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #25] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #34))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #34]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #37]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #40))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #25] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #35))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #35] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #38))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #38]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #41]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #44)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #44] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #44)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #44] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #50))) #(".\n" 0 2 (:parent #44))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #35] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #39))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #39]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #42]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #45)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #45] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #49))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #45)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #45] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #51))) #(".\n" 0 2 (:parent #45))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #42]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #46))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #42] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #42]) #("and, for example, in the method run" 0 35 (:parent #48)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #48] :use-brackets-p nil) #("rqtl" 0 4 (:parent #52))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #48] :use-brackets-p nil) #("geno" 0 4 (:parent #53))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #48)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #48] :use-brackets-p nil) #("extra" 0 5 (:parent #55))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #48))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #42] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #42]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #50))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #42] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t]))))))] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #20))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) #15)]) #10)] :type unordered) #5 (item (:standard-properties [156 156 159 239 239 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #10] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [159 159 159 239 239 0 nil nil nil nil nil nil nil nil # nil nil #14]) (link (:standard-properties [159 nil 200 236 238 0 nil nil nil nil nil nil nil nil # nil nil #17] :type "custom-id" :type-explicit-p nil :path "reproducibility-and-interoperability" :format bracket :raw-link "#reproducibility-and-interoperability" :application nil :search-option nil) #("Reproducibility and interoperability" 0 36 (:parent #20))) #("\n" 0 1 (:parent #17)))) (item (:standard-properties [239 239 242 268 268 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #10] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [242 242 242 268 268 0 nil nil nil nil nil nil nil nil # nil nil #15]) (link (:standard-properties [242 nil 256 265 267 0 nil nil nil nil nil nil nil nil # nil nil #18] :type "custom-id" :type-explicit-p nil :path "webserver" :format bracket :raw-link "#webserver" :application nil :search-option nil) #("Webserver" 0 9 (:parent #21))) #("\n" 0 1 (:parent #18)))) (item (:standard-properties [268 268 271 307 307 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #10] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [271 271 271 307 307 0 nil nil nil nil nil nil nil nil # nil nil #16]) (link (:standard-properties [271 nil 289 304 306 0 nil nil nil nil nil nil nil nil # nil nil #19] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #22))) #("\n" 0 1 (:parent #19)))) (item (:standard-properties [307 307 310 330 330 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #10] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [310 310 310 330 330 0 nil nil nil nil nil nil nil nil # nil nil #17]) (link (:standard-properties [310 nil 321 327 329 0 nil nil nil nil nil nil nil nil # nil nil #20] :type "custom-id" :type-explicit-p nil :path "gnexec" :format bracket :raw-link "#gnexec" :application nil :search-option nil) #("GnExec" 0 6 (:parent #23))) #("\n" 0 1 (:parent #20)))) (item (:standard-properties [330 330 333 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #10] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [333 333 333 357 357 0 nil nil nil nil nil nil nil nil # nil nil #18]) (link (:standard-properties [333 nil 346 354 356 0 nil nil nil nil nil nil nil nil # nil nil #21] :type "custom-id" :type-explicit-p nil :path "database" :format bracket :raw-link "#database" :application nil :search-option nil) #("Database" 0 8 (:parent #24))) #("\n" 0 1 (:parent #21))) (plain-list (:standard-properties [357 357 357 421 421 0 nil nil nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #18] :type unordered) (item (:standard-properties [357 357 362 390 390 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #22] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [362 362 362 390 390 0 nil nil nil nil nil nil nil nil # nil nil #25]) (link (:standard-properties [362 nil 377 387 389 0 nil nil nil nil nil nil nil nil # nil nil #28] :type "custom-id" :type-explicit-p nil :path "phenotypes" :format bracket :raw-link "#phenotypes" :application nil :search-option nil) #("Phenotypes" 0 10 (:parent #31))) #("\n" 0 1 (:parent #28)))) (item (:standard-properties [390 390 395 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #22] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [395 395 395 421 421 0 nil nil nil nil nil nil nil nil # nil nil #26]) (link (:standard-properties [395 nil 409 418 420 0 nil nil nil nil nil nil nil nil # nil nil #29] :type "custom-id" :type-explicit-p nil :path "genotypes" :format bracket :raw-link "#genotypes" :application nil :search-option nil) #("Genotypes" 0 9 (:parent #32))) #("\n" 0 1 (:parent #29)))))))] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) #0)]) (link (:standard-properties [124 nil 141 153 155 0 nil nil nil nil nil nil nil nil # nil nil #0] :type "custom-id" :type-explicit-p nil :path "introduction" :format bracket :raw-link "#introduction" :application nil :search-option nil) #("Introduction" 0 12 (:parent #3))) #("\n" 0 1 (:parent #0))) (:export-options (body-only) :back-end #s(org-export-backend :name html :parent nil :transcoders ((bold . org-html-bold) (center-block . org-html-center-block) (clock . org-html-clock) (code . org-html-code) (drawer . org-html-drawer) (dynamic-block . org-html-dynamic-block) (entity . org-html-entity) (example-block . org-html-example-block) (export-block . org-html-export-block) (export-snippet . org-html-export-snippet) (fixed-width . org-html-fixed-width) (footnote-reference . org-html-footnote-reference) (headline . org-html-headline) (horizontal-rule . org-html-horizontal-rule) (inline-src-block . org-html-inline-src-block) (inlinetask . org-html-inlinetask) (inner-template . org-html-inner-template) (italic . org-html-italic) (item . org-html-item) (keyword . org-html-keyword) (latex-environment . org-html-latex-environment) (latex-fragment . org-html-latex-fragment) (line-break . org-html-line-break) (link . org-html-link) (node-property . org-html-node-property) (paragraph . org-html-paragraph) (plain-list . org-html-plain-list) (plain-text . org-html-plain-text) (planning . org-html-planning) (property-drawer . org-html-property-drawer) (quote-block . org-html-quote-block) (radio-target . org-html-radio-target) (section . org-html-section) (special-block . org-html-special-block) (src-block . org-html-src-block) (statistics-cookie . org-html-statistics-cookie) (strike-through . org-html-strike-through) (subscript . org-html-subscript) (superscript . org-html-superscript) (table . org-html-table) (table-cell . org-html-table-cell) (table-row . org-html-table-row) (target . org-html-target) (template . org-html-template) (timestamp . org-html-timestamp) (underline . org-html-underline) (verbatim . org-html-verbatim) (verse-block . org-html-verse-block)) :options ((:html-doctype "HTML_DOCTYPE" nil org-html-doctype) (:html-container "HTML_CONTAINER" nil org-html-container-element) (:html-content-class "HTML_CONTENT_CLASS" nil org-html-content-class) (:description "DESCRIPTION" nil nil newline) (:keywords "KEYWORDS" nil nil space) (:html-html5-fancy nil "html5-fancy" org-html-html5-fancy) (:html-link-use-abs-url nil "html-link-use-abs-url" org-html-link-use-abs-url) (:html-link-home "HTML_LINK_HOME" nil org-html-link-home) (:html-link-up "HTML_LINK_UP" nil org-html-link-up) (:html-mathjax "HTML_MATHJAX" nil "" space) (:html-equation-reference-format "HTML_EQUATION_REFERENCE_FORMAT" nil org-html-equation-reference-format t) (:html-postamble nil "html-postamble" org-html-postamble) (:html-preamble nil "html-preamble" org-html-preamble) (:html-head "HTML_HEAD" nil org-html-head newline) (:html-head-extra "HTML_HEAD_EXTRA" nil org-html-head-extra newline) (:subtitle "SUBTITLE" nil nil parse) (:html-head-include-default-style nil "html-style" org-html-head-include-default-style) (:html-head-include-scripts nil "html-scripts" org-html-head-include-scripts) (:html-allow-name-attribute-in-anchors nil nil org-html-allow-name-attribute-in-anchors) (:html-divs nil nil org-html-divs) (:html-checkbox-type nil nil org-html-checkbox-type) (:html-extension nil nil org-html-extension) (:html-footnote-format nil nil org-html-footnote-format) (:html-footnote-separator nil nil org-html-footnote-separator) (:html-footnotes-section nil nil org-html-footnotes-section) (:html-format-drawer-function nil nil org-html-format-drawer-function) (:html-format-headline-function nil nil org-html-format-headline-function) (:html-format-inlinetask-function nil nil org-html-format-inlinetask-function) (:html-home/up-format nil nil org-html-home/up-format) (:html-indent nil nil org-html-indent) (:html-infojs-options nil nil org-html-infojs-options) (:html-infojs-template nil nil org-html-infojs-template) (:html-inline-image-rules nil nil org-html-inline-image-rules) (:html-link-org-files-as-html nil nil org-html-link-org-files-as-html) (:html-mathjax-options nil nil org-html-mathjax-options) (:html-mathjax-template nil nil org-html-mathjax-template) (:html-metadata-timestamp-format nil nil org-html-metadata-timestamp-format) (:html-postamble-format nil nil org-html-postamble-format) (:html-preamble-format nil nil org-html-preamble-format) (:html-prefer-user-labels nil nil org-html-prefer-user-labels) (:html-self-link-headlines nil nil org-html-self-link-headlines) (:html-table-align-individual-fields nil nil org-html-table-align-individual-fields) (:html-table-caption-above nil nil org-html-table-caption-above) (:html-table-data-tags nil nil org-html-table-data-tags) (:html-table-header-tags nil nil org-html-table-header-tags) (:html-table-use-header-tags-for-first-column nil nil org-html-table-use-header-tags-for-first-column) (:html-tag-class-prefix nil nil org-html-tag-class-prefix) (:html-text-markup-alist nil nil org-html-text-markup-alist) (:html-todo-kwd-class-prefix nil nil org-html-todo-kwd-class-prefix) (:html-toplevel-hlevel nil nil org-html-toplevel-hlevel) (:html-use-infojs nil nil org-html-use-infojs) (:html-validation-link nil nil org-html-validation-link) (:html-viewport nil nil org-html-viewport) (:html-inline-images nil nil org-html-inline-images) (:html-table-attributes nil nil org-html-table-default-attributes) (:html-table-row-open-tag nil nil org-html-table-row-open-tag) (:html-table-row-close-tag nil nil org-html-table-row-close-tag) (:html-xml-declaration nil nil org-html-xml-declaration) (:html-wrap-src-lines nil nil org-html-wrap-src-lines) (:html-klipsify-src nil nil org-html-klipsify-src) (:html-klipse-css nil nil org-html-klipse-css) (:html-klipse-js nil nil org-html-klipse-js) (:html-klipse-selection-script nil nil org-html-klipse-selection-script) (:infojs-opt "INFOJS_OPT" nil nil) (:creator "CREATOR" nil org-html-creator-string) (:with-latex nil "tex" org-html-with-latex) (:latex-header "LATEX_HEADER" nil nil newline)) :filters ((:filter-options . org-html-infojs-install-script) (:filter-parse-tree . org-html-image-link-filter) (:filter-final-output . org-html-final-function)) :blocks nil :menu (104 "Export to HTML" ((72 "As HTML buffer" org-html-export-as-html) (104 "As HTML file" org-html-export-to-html) (111 "As HTML file and open" (lambda (a s v b) (if a (org-html-export-to-html t s v b) (org-open-file (org-html-export-to-html nil s v b)))))))) :translate-alist ((bold . org-html-bold) (center-block . org-html-center-block) (clock . org-html-clock) (code . org-html-code) (drawer . org-html-drawer) (dynamic-block . org-html-dynamic-block) (entity . org-html-entity) (example-block . org-html-example-block) (export-block . org-html-export-block) (export-snippet . org-html-export-snippet) (fixed-width . org-html-fixed-width) (footnote-reference . org-html-footnote-reference) (headline . org-html-headline) (horizontal-rule . org-html-horizontal-rule) (inline-src-block . org-html-inline-src-block) (inlinetask . org-html-inlinetask) (inner-template . org-html-inner-template) (italic . org-html-italic) (item . org-html-item) (keyword . org-html-keyword) (latex-environment . org-html-latex-environment) (latex-fragment . org-html-latex-fragment) (line-break . org-html-line-break) (link . org-html-link) (node-property . org-html-node-property) (paragraph . org-html-paragraph) (plain-list . org-html-plain-list) (plain-text . org-html-plain-text) (planning . org-html-planning) (property-drawer . org-html-property-drawer) (quote-block . org-html-quote-block) (radio-target . org-html-radio-target) (section . org-html-section) (special-block . org-html-special-block) (src-block . org-html-src-block) (statistics-cookie . org-html-statistics-cookie) (strike-through . org-html-strike-through) (subscript . org-html-subscript) (superscript . org-html-superscript) (table . org-html-table) (table-cell . org-html-table-cell) (table-row . org-html-table-row) (target . org-html-target) (template . org-html-template) (timestamp . org-html-timestamp) (underline . org-html-underline) (verbatim . org-html-verbatim) (verse-block . org-html-verse-block)) :exported-data # :input-buffer " *temp*" :input-file nil :html-doctype "xhtml-strict" :html-container "div" :html-content-class "content" :description nil :keywords nil :html-html5-fancy nil :html-link-use-abs-url nil :html-link-home "" :html-link-up "" :html-mathjax "" :html-equation-reference-format "\\eqref{%s}" :html-postamble auto :html-preamble t :html-head "" :html-head-extra "" :subtitle nil :html-head-include-default-style t :html-head-include-scripts nil :html-allow-name-attribute-in-anchors nil :html-divs ((preamble "div" "preamble") (content "div" "content") (postamble "div" "postamble")) :html-checkbox-type ascii :html-extension "html" :html-footnote-format "%s" :html-footnote-separator ", " :html-footnotes-section "
\n

%s:

\n
\n%s\n
\n
" :html-format-drawer-function #f(compiled-function (name contents) #) :html-format-headline-function org-html-format-headline-default-function :html-format-inlinetask-function org-html-format-inlinetask-default-function :html-home/up-format "
\n UP \n |\n HOME \n
" :html-indent nil :html-infojs-options ((path . "https://orgmode.org/org-info.js") (view . "info") (toc . :with-toc) (ftoc . "0") (tdepth . "max") (sdepth . "max") (mouse . "underline") (buttons . "0") (ltoc . "1") (up . :html-link-up) (home . :html-link-home)) :html-infojs-template "\n\n" :html-inline-image-rules (("file" . "\\(?:\\.\\(?:avif\\|gif\\|jp\\(?:e?g\\)\\|png\\|svg\\|webp\\)\\)") ("http" . "\\(?:\\.\\(?:avif\\|gif\\|jp\\(?:e?g\\)\\|png\\|svg\\|webp\\)\\)") ("https" . "\\(?:\\.\\(?:avif\\|gif\\|jp\\(?:e?g\\)\\|png\\|svg\\|webp\\)\\)")) :html-link-org-files-as-html t :html-mathjax-options ((path "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js") (scale 1.0) (align "center") (font "mathjax-modern") (overflow "overflow") (tags "ams") (indent "0em") (multlinewidth "85%") (tagindent ".8em") (tagside "right")) :html-mathjax-template "\n\n\n" :html-metadata-timestamp-format "%Y-%m-%d %a %H:%M" :html-postamble-format (("en" "

Author: %a (%e)

\n

Date: %d

\n

%c

\n

%v

")) :html-preamble-format (("en" "")) :html-prefer-user-labels nil :html-self-link-headlines nil :html-table-align-individual-fields t :html-table-caption-above t :html-table-data-tags ("" . "") :html-table-header-tags ("" . "") :html-table-use-header-tags-for-first-column nil :html-tag-class-prefix "" :html-text-markup-alist ((bold . "%s") (code . "%s") (italic . "%s") (strike-through . "%s") (underline . "%s") (verbatim . "%s")) :html-todo-kwd-class-prefix "" :html-toplevel-hlevel 2 :html-use-infojs when-configured :html-validation-link "Validate" :html-viewport ((width "device-width") (initial-scale "1") (minimum-scale "") (maximum-scale "") (user-scalable "")) :html-inline-images t :html-table-attributes (:border "2" :cellspacing "0" :cellpadding "6" :rules "groups" :frame "hsides") :html-table-row-open-tag "" :html-table-row-close-tag "" :html-xml-declaration (("html" . "") ("php" . "\"; ?>")) :html-wrap-src-lines nil :html-klipsify-src nil :html-klipse-css "https://storage.googleapis.com/app.klipse.tech/css/codemirror.css" :html-klipse-js "https://storage.googleapis.com/app.klipse.tech/plugin_prod/js/klipse_plugin.min.js" :html-klipse-selection-script "window.klipse_settings = {selector_eval_html: '.src-html',\n selector_eval_js: '.src-js',\n selector_eval_python_client: '.src-python',\n selector_eval_scheme: '.src-scheme',\n selector: '.src-clojure',\n selector_eval_ruby: '.src-ruby'};" :infojs-opt nil :creator "Emacs 30.1 (Org mode 9.7.11)" :with-latex t :latex-header nil :title (#("Installing GeneNetwork services" 0 31 (:parent #148))) :date nil :author (#("unknown" 0 7 (:parent #152))) :email "unknown@genenetwork-development" :language "en" :select-tags ("export") :exclude-tags ("noexport") :headline-levels 3 :preserve-breaks nil :section-numbers nil :time-stamp-file t :with-archived-trees headline :with-author t :expand-links t :with-broken-links nil :with-clocks nil :with-creator nil :with-date t :with-drawers (not "LOGBOOK") :with-email nil :with-emphasize t :with-entities t :with-fixed-width t :with-footnotes t :with-inlinetasks t :with-planning nil :with-priority nil :with-properties nil :with-smart-quotes nil :with-special-strings t :with-special-rows nil :with-statistics-cookies t :with-sub-superscript t :with-toc nil :with-tables t :with-tags t :with-tasks t :with-timestamps t :with-title t :with-todo-keywords t :with-cite-processors t :cite-export (basic nil nil) :bibliography nil :filter-body nil :filter-bold nil :filter-babel-call nil :filter-center-block nil :filter-clock nil :filter-code nil :filter-diary-sexp nil :filter-drawer nil :filter-dynamic-block nil :filter-entity nil :filter-example-block nil :filter-export-block nil :filter-export-snippet nil :filter-final-output (org-html-final-function) :filter-fixed-width nil :filter-footnote-definition nil :filter-footnote-reference nil :filter-headline nil :filter-horizontal-rule nil :filter-inline-babel-call nil :filter-inline-src-block nil :filter-inlinetask nil :filter-italic nil :filter-item nil :filter-keyword nil :filter-latex-environment nil :filter-latex-fragment nil :filter-line-break nil :filter-link nil :filter-node-property nil :filter-options (org-html-infojs-install-script) :filter-paragraph nil :filter-parse-tree (org-html-image-link-filter) :filter-plain-list nil :filter-plain-text nil :filter-planning nil :filter-property-drawer nil :filter-quote-block nil :filter-radio-target nil :filter-section nil :filter-special-block nil :filter-src-block nil :filter-statistics-cookie nil :filter-strike-through nil :filter-subscript nil :filter-superscript nil :filter-table nil :filter-table-cell nil :filter-table-row nil :filter-target nil :filter-timestamp nil :filter-underline nil :filter-verbatim nil :filter-verse-block nil :ignore-list nil :parse-tree (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #344]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #347] :key "TITLE" :value "Installing GeneNetwork services"))) (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil #344] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #348))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil #348]) (plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #351] :type unordered) (item (:standard-properties [121 121 124 156 156 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [124 124 124 156 156 0 nil nil nil nil nil nil nil nil # nil nil #357]) (link (:standard-properties [124 nil 141 153 155 0 nil nil nil nil nil nil nil nil # nil nil #360] :type "custom-id" :type-explicit-p nil :path "introduction" :format bracket :raw-link "#introduction" :application nil :search-option nil) #("Introduction" 0 12 (:parent #363))) #("\n" 0 1 (:parent #360)))) (item (:standard-properties [156 156 159 239 239 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [159 159 159 239 239 0 nil nil nil nil nil nil nil nil # nil nil #358]) (link (:standard-properties [159 nil 200 236 238 0 nil nil nil nil nil nil nil nil # nil nil #361] :type "custom-id" :type-explicit-p nil :path "reproducibility-and-interoperability" :format bracket :raw-link "#reproducibility-and-interoperability" :application nil :search-option nil) #("Reproducibility and interoperability" 0 36 (:parent #364))) #("\n" 0 1 (:parent #361)))) (item (:standard-properties [239 239 242 268 268 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [242 242 242 268 268 0 nil nil nil nil nil nil nil nil # nil nil #359]) (link (:standard-properties [242 nil 256 265 267 0 nil nil nil nil nil nil nil nil # nil nil #362] :type "custom-id" :type-explicit-p nil :path "webserver" :format bracket :raw-link "#webserver" :application nil :search-option nil) #("Webserver" 0 9 (:parent #365))) #("\n" 0 1 (:parent #362)))) (item (:standard-properties [268 268 271 307 307 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [271 271 271 307 307 0 nil nil nil nil nil nil nil nil # nil nil #360]) (link (:standard-properties [271 nil 289 304 306 0 nil nil nil nil nil nil nil nil # nil nil #363] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #366))) #("\n" 0 1 (:parent #363)))) (item (:standard-properties [307 307 310 330 330 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [310 310 310 330 330 0 nil nil nil nil nil nil nil nil # nil nil #361]) (link (:standard-properties [310 nil 321 327 329 0 nil nil nil nil nil nil nil nil # nil nil #364] :type "custom-id" :type-explicit-p nil :path "gnexec" :format bracket :raw-link "#gnexec" :application nil :search-option nil) #("GnExec" 0 6 (:parent #367))) #("\n" 0 1 (:parent #364)))) (item (:standard-properties [330 330 333 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [333 333 333 357 357 0 nil nil nil nil nil nil nil nil # nil nil #362]) (link (:standard-properties [333 nil 346 354 356 0 nil nil nil nil nil nil nil nil # nil nil #365] :type "custom-id" :type-explicit-p nil :path "database" :format bracket :raw-link "#database" :application nil :search-option nil) #("Database" 0 8 (:parent #368))) #("\n" 0 1 (:parent #365))) (plain-list (:standard-properties [357 357 357 421 421 0 nil nil nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #362] :type unordered) (item (:standard-properties [357 357 362 390 390 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #366] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [362 362 362 390 390 0 nil nil nil nil nil nil nil nil # nil nil #369]) (link (:standard-properties [362 nil 377 387 389 0 nil nil nil nil nil nil nil nil # nil nil #372] :type "custom-id" :type-explicit-p nil :path "phenotypes" :format bracket :raw-link "#phenotypes" :application nil :search-option nil) #("Phenotypes" 0 10 (:parent #375))) #("\n" 0 1 (:parent #372)))) (item (:standard-properties [390 390 395 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #366] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [395 395 395 421 421 0 nil nil nil nil nil nil nil nil # nil nil #370]) (link (:standard-properties [395 nil 409 418 420 0 nil nil nil nil nil nil nil nil # nil nil #373] :type "custom-id" :type-explicit-p nil :path "genotypes" :format bracket :raw-link "#genotypes" :application nil :search-option nil) #("Genotypes" 0 9 (:parent #376))) #("\n" 0 1 (:parent #373))))))))) (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #349))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #349]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #352]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #355))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #350))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #350]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #353]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #356)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #356] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #360))) #(").\n" 0 3 (:parent #356))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #357)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #357))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #358))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #359)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #359] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #359))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #360))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #361)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #361] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #361))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #351))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #351]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #354]) #("The main " 0 9 (:parent #357)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #361))) #("is built on " 0 12 (:parent #357)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #363))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #357)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #365))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #357)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #367))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #357)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #369)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #369] :use-brackets-p nil) #("page.html" 0 9 (:parent #373)))) #("in the " 0 7 (:parent #357)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #371))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #357)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #373)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #373] :use-brackets-p nil) #("select" 0 6 (:parent #377))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #373] :use-brackets-p nil) #("menu.js" 0 7 (:parent #378)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #357)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #375)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #375] :use-brackets-p nil) #("select" 0 6 (:parent #379))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #375] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #380)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #357)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #357] :use-brackets-p nil) #("server" 0 6 (:parent #377))) #("in the latest version, see " 0 27 (:parent #357)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #357] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #379))) #(".\n" 0 2 (:parent #357))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #354]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #358)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("M2" 0 2 (:parent #362))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("0606" 0 4 (:parent #363))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("P" 0 1 (:parent #364))) #("&search" 0 7 (:parent #358)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("terms" 0 5 (:parent #366))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("or" 0 2 (:parent #367))) #("=&search" 0 8 (:parent #358)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("terms" 0 5 (:parent #369))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("and" 0 3 (:parent #370))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #358)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("server" 0 6 (:parent #372))) #("). The logic is in\nsearch" 0 25 (:parent #358)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("result.py" 0 9 (:parent #374))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #358)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #358] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #376)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #376] :use-brackets-p nil) #("result" 0 6 (:parent #380))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #376] :use-brackets-p nil) #("page.html" 0 9 (:parent #381)))) #(".\n" 0 2 (:parent #358))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #354]) #("For what happens at the database level see " 0 43 (:parent #359)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #359] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #359))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #354]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #360)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #360] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #364)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #364] :use-brackets-p nil) #("result" 0 6 (:parent #368))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #364] :use-brackets-p nil) #("page.html" 0 9 (:parent #369)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #360)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #360] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #366))) #(".\n" 0 2 (:parent #360))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #352))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #352]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #355]) #("The " 0 4 (:parent #358)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #358] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #362))) #("is built on high performance " 0 29 (:parent #358)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #358] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #364))) #("with " 0 5 (:parent #358)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #358] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #366))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #358))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #355] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #355]) #("(json2yaml.rb is in the gn" 0 26 (:parent #360)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #360] :use-brackets-p nil) #("server" 0 6 (:parent #364))) #("repo). For the current API definition\nsee " 0 42 (:parent #360)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #360] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #366))) #("documentation.\n" 0 15 (:parent #360))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #353))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #353]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #356]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #359))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #344] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #354))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #354] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #357))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #357]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #360]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #363)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #363] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #363)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #363] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #369))) #(".\n" 0 2 (:parent #363))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #354] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #358))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #358]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #361]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #364)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #364] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #368))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #364)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #364] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #370))) #(".\n" 0 2 (:parent #364))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #361]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #365))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #361] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #361]) #("and, for example, in the method run" 0 35 (:parent #367)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #367] :use-brackets-p nil) #("rqtl" 0 4 (:parent #371))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #367] :use-brackets-p nil) #("geno" 0 4 (:parent #372))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #367)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #367] :use-brackets-p nil) #("extra" 0 5 (:parent #374))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #367))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #361] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #361]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #369))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #361] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t])))))) :headline-offset 0 :headline-numbering nil :id-alist nil :citations nil :id-local-cache #)) #f(compiled-function (element) #)((paragraph (:standard-properties [124 124 124 156 156 0 nil nil nil nil nil nil nil nil # nil nil (item (:standard-properties [121 121 124 156 156 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #25]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #28] :key "TITLE" :value "Installing GeneNetwork services"))) #20 (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #25] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #30))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #30]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #33]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #36))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #25] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #31))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #31]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #34]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #37)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #37] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #41))) #(").\n" 0 3 (:parent #37))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #34]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #38)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #38))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #34]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #39))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #34]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #40)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #40] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #40))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #34]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #41))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #34]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #42)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #42] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #42))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #25] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #32))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #32]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #35]) #("The main " 0 9 (:parent #38)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #42))) #("is built on " 0 12 (:parent #38)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #38] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #44))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #38)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #46))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #38)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #48))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #38)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #50)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #50] :use-brackets-p nil) #("page.html" 0 9 (:parent #54)))) #("in the " 0 7 (:parent #38)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #52))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #38)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #54)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #54] :use-brackets-p nil) #("select" 0 6 (:parent #58))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #54] :use-brackets-p nil) #("menu.js" 0 7 (:parent #59)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #38)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #56)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #56] :use-brackets-p nil) #("select" 0 6 (:parent #60))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #56] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #61)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #38)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #38] :use-brackets-p nil) #("server" 0 6 (:parent #58))) #("in the latest version, see " 0 27 (:parent #38)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #38] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #60))) #(".\n" 0 2 (:parent #38))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #35]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #39)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("M2" 0 2 (:parent #43))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("0606" 0 4 (:parent #44))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("P" 0 1 (:parent #45))) #("&search" 0 7 (:parent #39)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("terms" 0 5 (:parent #47))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("or" 0 2 (:parent #48))) #("=&search" 0 8 (:parent #39)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("terms" 0 5 (:parent #50))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("and" 0 3 (:parent #51))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #39)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("server" 0 6 (:parent #53))) #("). The logic is in\nsearch" 0 25 (:parent #39)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("result.py" 0 9 (:parent #55))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #39)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #57)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #57] :use-brackets-p nil) #("result" 0 6 (:parent #61))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #57] :use-brackets-p nil) #("page.html" 0 9 (:parent #62)))) #(".\n" 0 2 (:parent #39))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #35]) #("For what happens at the database level see " 0 43 (:parent #40)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #40] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #40))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #35]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #41)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #41] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #45)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #45] :use-brackets-p nil) #("result" 0 6 (:parent #49))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #45] :use-brackets-p nil) #("page.html" 0 9 (:parent #50)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #41)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #41] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #47))) #(".\n" 0 2 (:parent #41))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #25] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #33))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #33]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #36]) #("The " 0 4 (:parent #39)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #43))) #("is built on high performance " 0 29 (:parent #39)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #39] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #45))) #("with " 0 5 (:parent #39)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #47))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #39))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #36] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #36]) #("(json2yaml.rb is in the gn" 0 26 (:parent #41)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #41] :use-brackets-p nil) #("server" 0 6 (:parent #45))) #("repo). For the current API definition\nsee " 0 42 (:parent #41)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #41] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #47))) #("documentation.\n" 0 15 (:parent #41))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #25] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #34))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #34]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #37]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #40))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #25] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #35))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #35] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #38))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #38]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #41]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #44)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #44] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #44)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #44] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #50))) #(".\n" 0 2 (:parent #44))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #35] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #39))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #39]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #42]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #45)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #45] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #49))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #45)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #45] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #51))) #(".\n" 0 2 (:parent #45))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #42]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #46))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #42] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #42]) #("and, for example, in the method run" 0 35 (:parent #48)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #48] :use-brackets-p nil) #("rqtl" 0 4 (:parent #52))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #48] :use-brackets-p nil) #("geno" 0 4 (:parent #53))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #48)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #48] :use-brackets-p nil) #("extra" 0 5 (:parent #55))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #48))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #42] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #42]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #50))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #42] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t]))))))] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #20))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) #15)]) #10)] :type unordered) #5 (item (:standard-properties [156 156 159 239 239 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #10] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [159 159 159 239 239 0 nil nil nil nil nil nil nil nil # nil nil #14]) (link (:standard-properties [159 nil 200 236 238 0 nil nil nil nil nil nil nil nil # nil nil #17] :type "custom-id" :type-explicit-p nil :path "reproducibility-and-interoperability" :format bracket :raw-link "#reproducibility-and-interoperability" :application nil :search-option nil) #("Reproducibility and interoperability" 0 36 (:parent #20))) #("\n" 0 1 (:parent #17)))) (item (:standard-properties [239 239 242 268 268 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #10] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [242 242 242 268 268 0 nil nil nil nil nil nil nil nil # nil nil #15]) (link (:standard-properties [242 nil 256 265 267 0 nil nil nil nil nil nil nil nil # nil nil #18] :type "custom-id" :type-explicit-p nil :path "webserver" :format bracket :raw-link "#webserver" :application nil :search-option nil) #("Webserver" 0 9 (:parent #21))) #("\n" 0 1 (:parent #18)))) (item (:standard-properties [268 268 271 307 307 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #10] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [271 271 271 307 307 0 nil nil nil nil nil nil nil nil # nil nil #16]) (link (:standard-properties [271 nil 289 304 306 0 nil nil nil nil nil nil nil nil # nil nil #19] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #22))) #("\n" 0 1 (:parent #19)))) (item (:standard-properties [307 307 310 330 330 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #10] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [310 310 310 330 330 0 nil nil nil nil nil nil nil nil # nil nil #17]) (link (:standard-properties [310 nil 321 327 329 0 nil nil nil nil nil nil nil nil # nil nil #20] :type "custom-id" :type-explicit-p nil :path "gnexec" :format bracket :raw-link "#gnexec" :application nil :search-option nil) #("GnExec" 0 6 (:parent #23))) #("\n" 0 1 (:parent #20)))) (item (:standard-properties [330 330 333 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #10] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [333 333 333 357 357 0 nil nil nil nil nil nil nil nil # nil nil #18]) (link (:standard-properties [333 nil 346 354 356 0 nil nil nil nil nil nil nil nil # nil nil #21] :type "custom-id" :type-explicit-p nil :path "database" :format bracket :raw-link "#database" :application nil :search-option nil) #("Database" 0 8 (:parent #24))) #("\n" 0 1 (:parent #21))) (plain-list (:standard-properties [357 357 357 421 421 0 nil nil nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #18] :type unordered) (item (:standard-properties [357 357 362 390 390 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #22] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [362 362 362 390 390 0 nil nil nil nil nil nil nil nil # nil nil #25]) (link (:standard-properties [362 nil 377 387 389 0 nil nil nil nil nil nil nil nil # nil nil #28] :type "custom-id" :type-explicit-p nil :path "phenotypes" :format bracket :raw-link "#phenotypes" :application nil :search-option nil) #("Phenotypes" 0 10 (:parent #31))) #("\n" 0 1 (:parent #28)))) (item (:standard-properties [390 390 395 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #22] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [395 395 395 421 421 0 nil nil nil nil nil nil nil nil # nil nil #26]) (link (:standard-properties [395 nil 409 418 420 0 nil nil nil nil nil nil nil nil # nil nil #29] :type "custom-id" :type-explicit-p nil :path "genotypes" :format bracket :raw-link "#genotypes" :application nil :search-option nil) #("Genotypes" 0 9 (:parent #32))) #("\n" 0 1 (:parent #29)))))))] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) #0)]) (link (:standard-properties [124 nil 141 153 155 0 nil nil nil nil nil nil nil nil # nil nil #0] :type "custom-id" :type-explicit-p nil :path "introduction" :format bracket :raw-link "#introduction" :application nil :search-option nil) #("Introduction" 0 12 (:parent #3))) #("\n" 0 1 (:parent #0)))) mapconcat(#f(compiled-function (element) #) ((paragraph (:standard-properties [124 124 124 156 156 0 nil nil nil nil nil nil nil nil # nil nil (item (:standard-properties [121 121 124 156 156 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #26]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #29] :key "TITLE" :value "Installing GeneNetwork services"))) #21 (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #26] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #31))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #31]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #34]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #37))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #26] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #32))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #32]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #35]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #38)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #38] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #42))) #(").\n" 0 3 (:parent #38))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #35]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #39)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #39))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #35]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #40))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #35]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #41)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #41] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #41))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #35]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #42))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #35]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #43)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #43] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #43))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #26] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #33))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #33]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #36]) #("The main " 0 9 (:parent #39)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #43))) #("is built on " 0 12 (:parent #39)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #39] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #45))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #39)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #47))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #39)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #49))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #39)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #51)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #51] :use-brackets-p nil) #("page.html" 0 9 (:parent #55)))) #("in the " 0 7 (:parent #39)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #53))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #39)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #55)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #55] :use-brackets-p nil) #("select" 0 6 (:parent #59))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #55] :use-brackets-p nil) #("menu.js" 0 7 (:parent #60)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #39)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #57)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #57] :use-brackets-p nil) #("select" 0 6 (:parent #61))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #57] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #62)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #39)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("server" 0 6 (:parent #59))) #("in the latest version, see " 0 27 (:parent #39)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #39] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #61))) #(".\n" 0 2 (:parent #39))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #36]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #40)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #40] :use-brackets-p nil) #("M2" 0 2 (:parent #44))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #40] :use-brackets-p nil) #("0606" 0 4 (:parent #45))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #40] :use-brackets-p nil) #("P" 0 1 (:parent #46))) #("&search" 0 7 (:parent #40)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #40] :use-brackets-p nil) #("terms" 0 5 (:parent #48))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #40] :use-brackets-p nil) #("or" 0 2 (:parent #49))) #("=&search" 0 8 (:parent #40)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #40] :use-brackets-p nil) #("terms" 0 5 (:parent #51))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #40] :use-brackets-p nil) #("and" 0 3 (:parent #52))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #40)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #40] :use-brackets-p nil) #("server" 0 6 (:parent #54))) #("). The logic is in\nsearch" 0 25 (:parent #40)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #40] :use-brackets-p nil) #("result.py" 0 9 (:parent #56))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #40)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #40] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #58)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #58] :use-brackets-p nil) #("result" 0 6 (:parent #62))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #58] :use-brackets-p nil) #("page.html" 0 9 (:parent #63)))) #(".\n" 0 2 (:parent #40))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #36]) #("For what happens at the database level see " 0 43 (:parent #41)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #41] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #41))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #36]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #42)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #42] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #46)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #46] :use-brackets-p nil) #("result" 0 6 (:parent #50))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #46] :use-brackets-p nil) #("page.html" 0 9 (:parent #51)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #42)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #42] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #48))) #(".\n" 0 2 (:parent #42))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #26] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #34))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #34]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #37]) #("The " 0 4 (:parent #40)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #40] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #44))) #("is built on high performance " 0 29 (:parent #40)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #40] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #46))) #("with " 0 5 (:parent #40)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #40] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #48))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #40))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #37] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #37]) #("(json2yaml.rb is in the gn" 0 26 (:parent #42)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #42] :use-brackets-p nil) #("server" 0 6 (:parent #46))) #("repo). For the current API definition\nsee " 0 42 (:parent #42)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #42] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #48))) #("documentation.\n" 0 15 (:parent #42))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #26] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #35))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #35]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #38]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #41))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #26] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #36))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #36] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #39))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #39]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #42]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #45)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #45] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #45)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #45] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #51))) #(".\n" 0 2 (:parent #45))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #36] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #40))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #40]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #43]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #46)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #46] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #50))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #46)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #46] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #52))) #(".\n" 0 2 (:parent #46))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #43]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #47))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #43] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #43]) #("and, for example, in the method run" 0 35 (:parent #49)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #49] :use-brackets-p nil) #("rqtl" 0 4 (:parent #53))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #49] :use-brackets-p nil) #("geno" 0 4 (:parent #54))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #49)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #49] :use-brackets-p nil) #("extra" 0 5 (:parent #56))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #49))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #43] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #43]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #51))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #43] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t]))))))] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #21))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) #16)]) #11)] :type unordered) #6 (item (:standard-properties [156 156 159 239 239 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #11] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [159 159 159 239 239 0 nil nil nil nil nil nil nil nil # nil nil #15]) (link (:standard-properties [159 nil 200 236 238 0 nil nil nil nil nil nil nil nil # nil nil #18] :type "custom-id" :type-explicit-p nil :path "reproducibility-and-interoperability" :format bracket :raw-link "#reproducibility-and-interoperability" :application nil :search-option nil) #("Reproducibility and interoperability" 0 36 (:parent #21))) #("\n" 0 1 (:parent #18)))) (item (:standard-properties [239 239 242 268 268 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #11] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [242 242 242 268 268 0 nil nil nil nil nil nil nil nil # nil nil #16]) (link (:standard-properties [242 nil 256 265 267 0 nil nil nil nil nil nil nil nil # nil nil #19] :type "custom-id" :type-explicit-p nil :path "webserver" :format bracket :raw-link "#webserver" :application nil :search-option nil) #("Webserver" 0 9 (:parent #22))) #("\n" 0 1 (:parent #19)))) (item (:standard-properties [268 268 271 307 307 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #11] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [271 271 271 307 307 0 nil nil nil nil nil nil nil nil # nil nil #17]) (link (:standard-properties [271 nil 289 304 306 0 nil nil nil nil nil nil nil nil # nil nil #20] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #23))) #("\n" 0 1 (:parent #20)))) (item (:standard-properties [307 307 310 330 330 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #11] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [310 310 310 330 330 0 nil nil nil nil nil nil nil nil # nil nil #18]) (link (:standard-properties [310 nil 321 327 329 0 nil nil nil nil nil nil nil nil # nil nil #21] :type "custom-id" :type-explicit-p nil :path "gnexec" :format bracket :raw-link "#gnexec" :application nil :search-option nil) #("GnExec" 0 6 (:parent #24))) #("\n" 0 1 (:parent #21)))) (item (:standard-properties [330 330 333 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #11] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [333 333 333 357 357 0 nil nil nil nil nil nil nil nil # nil nil #19]) (link (:standard-properties [333 nil 346 354 356 0 nil nil nil nil nil nil nil nil # nil nil #22] :type "custom-id" :type-explicit-p nil :path "database" :format bracket :raw-link "#database" :application nil :search-option nil) #("Database" 0 8 (:parent #25))) #("\n" 0 1 (:parent #22))) (plain-list (:standard-properties [357 357 357 421 421 0 nil nil nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #19] :type unordered) (item (:standard-properties [357 357 362 390 390 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #23] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [362 362 362 390 390 0 nil nil nil nil nil nil nil nil # nil nil #26]) (link (:standard-properties [362 nil 377 387 389 0 nil nil nil nil nil nil nil nil # nil nil #29] :type "custom-id" :type-explicit-p nil :path "phenotypes" :format bracket :raw-link "#phenotypes" :application nil :search-option nil) #("Phenotypes" 0 10 (:parent #32))) #("\n" 0 1 (:parent #29)))) (item (:standard-properties [390 390 395 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #23] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [395 395 395 421 421 0 nil nil nil nil nil nil nil nil # nil nil #27]) (link (:standard-properties [395 nil 409 418 420 0 nil nil nil nil nil nil nil nil # nil nil #30] :type "custom-id" :type-explicit-p nil :path "genotypes" :format bracket :raw-link "#genotypes" :application nil :search-option nil) #("Genotypes" 0 9 (:parent #33))) #("\n" 0 1 (:parent #30)))))))] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) . #0)]) (link (:standard-properties [124 nil 141 153 155 0 nil nil nil nil nil nil nil nil # nil nil #1] :type "custom-id" :type-explicit-p nil :path "introduction" :format bracket :raw-link "#introduction" :application nil :search-option nil) #("Introduction" 0 12 (:parent #4))) #("\n" 0 1 (:parent #1)))) "") org-export-data((item (:standard-properties [121 121 124 156 156 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #20]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #23] :key "TITLE" :value "Installing GeneNetwork services"))) #15 (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #20] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #25))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #25]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #28]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #31))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #20] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #26))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #26]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #29]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #32)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #32] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #36))) #(").\n" 0 3 (:parent #32))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #29]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #33)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #33] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #33))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #29]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #34))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #29]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #35)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #35] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #35))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #29]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #36))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #29]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #37)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #37] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #37))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #20] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #27))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #27]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #30]) #("The main " 0 9 (:parent #33)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #33] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #37))) #("is built on " 0 12 (:parent #33)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #33] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #39))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #33)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #33] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #41))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #33)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #33] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #43))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #33)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #33] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #45)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #45] :use-brackets-p nil) #("page.html" 0 9 (:parent #49)))) #("in the " 0 7 (:parent #33)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #33] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #47))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #33)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #33] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #49)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #49] :use-brackets-p nil) #("select" 0 6 (:parent #53))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #49] :use-brackets-p nil) #("menu.js" 0 7 (:parent #54)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #33)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #33] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #51)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #51] :use-brackets-p nil) #("select" 0 6 (:parent #55))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #51] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #56)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #33)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #33] :use-brackets-p nil) #("server" 0 6 (:parent #53))) #("in the latest version, see " 0 27 (:parent #33)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #33] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #55))) #(".\n" 0 2 (:parent #33))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #30]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #34)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #34] :use-brackets-p nil) #("M2" 0 2 (:parent #38))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #34] :use-brackets-p nil) #("0606" 0 4 (:parent #39))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #34] :use-brackets-p nil) #("P" 0 1 (:parent #40))) #("&search" 0 7 (:parent #34)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #34] :use-brackets-p nil) #("terms" 0 5 (:parent #42))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #34] :use-brackets-p nil) #("or" 0 2 (:parent #43))) #("=&search" 0 8 (:parent #34)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #34] :use-brackets-p nil) #("terms" 0 5 (:parent #45))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #34] :use-brackets-p nil) #("and" 0 3 (:parent #46))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #34)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #34] :use-brackets-p nil) #("server" 0 6 (:parent #48))) #("). The logic is in\nsearch" 0 25 (:parent #34)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #34] :use-brackets-p nil) #("result.py" 0 9 (:parent #50))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #34)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #34] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #52)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #52] :use-brackets-p nil) #("result" 0 6 (:parent #56))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #52] :use-brackets-p nil) #("page.html" 0 9 (:parent #57)))) #(".\n" 0 2 (:parent #34))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #30]) #("For what happens at the database level see " 0 43 (:parent #35)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #35] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #35))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #30]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #36)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #36] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #40)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #40] :use-brackets-p nil) #("result" 0 6 (:parent #44))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #40] :use-brackets-p nil) #("page.html" 0 9 (:parent #45)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #36)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #36] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #42))) #(".\n" 0 2 (:parent #36))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #20] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #28))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #28]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #31]) #("The " 0 4 (:parent #34)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #34] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #38))) #("is built on high performance " 0 29 (:parent #34)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #34] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #40))) #("with " 0 5 (:parent #34)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #34] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #42))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #34))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #31] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #31]) #("(json2yaml.rb is in the gn" 0 26 (:parent #36)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #36] :use-brackets-p nil) #("server" 0 6 (:parent #40))) #("repo). For the current API definition\nsee " 0 42 (:parent #36)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #36] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #42))) #("documentation.\n" 0 15 (:parent #36))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #20] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #29))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #29]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #32]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #35))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #20] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #30))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #30] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #33))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #33]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #36]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #39)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #39] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #39)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #39] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #45))) #(".\n" 0 2 (:parent #39))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #30] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #34))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #34]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #37]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #40)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #40] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #44))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #40)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #40] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #46))) #(".\n" 0 2 (:parent #40))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #37]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #41))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #37] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #37]) #("and, for example, in the method run" 0 35 (:parent #43)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #43] :use-brackets-p nil) #("rqtl" 0 4 (:parent #47))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #43] :use-brackets-p nil) #("geno" 0 4 (:parent #48))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #43)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #43] :use-brackets-p nil) #("extra" 0 5 (:parent #50))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #43))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #37] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #37]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #45))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #37] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t]))))))] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #15))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) #10)]) #5)] :type unordered) #0 (item (:standard-properties [156 156 159 239 239 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #5] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [159 159 159 239 239 0 nil nil nil nil nil nil nil nil # nil nil #9]) (link (:standard-properties [159 nil 200 236 238 0 nil nil nil nil nil nil nil nil # nil nil #12] :type "custom-id" :type-explicit-p nil :path "reproducibility-and-interoperability" :format bracket :raw-link "#reproducibility-and-interoperability" :application nil :search-option nil) #("Reproducibility and interoperability" 0 36 (:parent #15))) #("\n" 0 1 (:parent #12)))) (item (:standard-properties [239 239 242 268 268 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #5] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [242 242 242 268 268 0 nil nil nil nil nil nil nil nil # nil nil #10]) (link (:standard-properties [242 nil 256 265 267 0 nil nil nil nil nil nil nil nil # nil nil #13] :type "custom-id" :type-explicit-p nil :path "webserver" :format bracket :raw-link "#webserver" :application nil :search-option nil) #("Webserver" 0 9 (:parent #16))) #("\n" 0 1 (:parent #13)))) (item (:standard-properties [268 268 271 307 307 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #5] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [271 271 271 307 307 0 nil nil nil nil nil nil nil nil # nil nil #11]) (link (:standard-properties [271 nil 289 304 306 0 nil nil nil nil nil nil nil nil # nil nil #14] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #17))) #("\n" 0 1 (:parent #14)))) (item (:standard-properties [307 307 310 330 330 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #5] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [310 310 310 330 330 0 nil nil nil nil nil nil nil nil # nil nil #12]) (link (:standard-properties [310 nil 321 327 329 0 nil nil nil nil nil nil nil nil # nil nil #15] :type "custom-id" :type-explicit-p nil :path "gnexec" :format bracket :raw-link "#gnexec" :application nil :search-option nil) #("GnExec" 0 6 (:parent #18))) #("\n" 0 1 (:parent #15)))) (item (:standard-properties [330 330 333 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #5] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [333 333 333 357 357 0 nil nil nil nil nil nil nil nil # nil nil #13]) (link (:standard-properties [333 nil 346 354 356 0 nil nil nil nil nil nil nil nil # nil nil #16] :type "custom-id" :type-explicit-p nil :path "database" :format bracket :raw-link "#database" :application nil :search-option nil) #("Database" 0 8 (:parent #19))) #("\n" 0 1 (:parent #16))) (plain-list (:standard-properties [357 357 357 421 421 0 nil nil nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #13] :type unordered) (item (:standard-properties [357 357 362 390 390 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #17] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [362 362 362 390 390 0 nil nil nil nil nil nil nil nil # nil nil #20]) (link (:standard-properties [362 nil 377 387 389 0 nil nil nil nil nil nil nil nil # nil nil #23] :type "custom-id" :type-explicit-p nil :path "phenotypes" :format bracket :raw-link "#phenotypes" :application nil :search-option nil) #("Phenotypes" 0 10 (:parent #26))) #("\n" 0 1 (:parent #23)))) (item (:standard-properties [390 390 395 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #17] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [395 395 395 421 421 0 nil nil nil nil nil nil nil nil # nil nil #21]) (link (:standard-properties [395 nil 409 418 420 0 nil nil nil nil nil nil nil nil # nil nil #24] :type "custom-id" :type-explicit-p nil :path "genotypes" :format bracket :raw-link "#genotypes" :application nil :search-option nil) #("Genotypes" 0 9 (:parent #27))) #("\n" 0 1 (:parent #24)))))))] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [124 124 124 156 156 0 nil nil nil nil nil nil nil nil # nil nil #0]) (link (:standard-properties [124 nil 141 153 155 0 nil nil nil nil nil nil nil nil # nil nil #3] :type "custom-id" :type-explicit-p nil :path "introduction" :format bracket :raw-link "#introduction" :application nil :search-option nil) #("Introduction" 0 12 (:parent #6))) #("\n" 0 1 (:parent #3)))) (:export-options (body-only) :back-end #s(org-export-backend :name html :parent nil :transcoders ((bold . org-html-bold) (center-block . org-html-center-block) (clock . org-html-clock) (code . org-html-code) (drawer . org-html-drawer) (dynamic-block . org-html-dynamic-block) (entity . org-html-entity) (example-block . org-html-example-block) (export-block . org-html-export-block) (export-snippet . org-html-export-snippet) (fixed-width . org-html-fixed-width) (footnote-reference . org-html-footnote-reference) (headline . org-html-headline) (horizontal-rule . org-html-horizontal-rule) (inline-src-block . org-html-inline-src-block) (inlinetask . org-html-inlinetask) (inner-template . org-html-inner-template) (italic . org-html-italic) (item . org-html-item) (keyword . org-html-keyword) (latex-environment . org-html-latex-environment) (latex-fragment . org-html-latex-fragment) (line-break . org-html-line-break) (link . org-html-link) (node-property . org-html-node-property) (paragraph . org-html-paragraph) (plain-list . org-html-plain-list) (plain-text . org-html-plain-text) (planning . org-html-planning) (property-drawer . org-html-property-drawer) (quote-block . org-html-quote-block) (radio-target . org-html-radio-target) (section . org-html-section) (special-block . org-html-special-block) (src-block . org-html-src-block) (statistics-cookie . org-html-statistics-cookie) (strike-through . org-html-strike-through) (subscript . org-html-subscript) (superscript . org-html-superscript) (table . org-html-table) (table-cell . org-html-table-cell) (table-row . org-html-table-row) (target . org-html-target) (template . org-html-template) (timestamp . org-html-timestamp) (underline . org-html-underline) (verbatim . org-html-verbatim) (verse-block . org-html-verse-block)) :options ((:html-doctype "HTML_DOCTYPE" nil org-html-doctype) (:html-container "HTML_CONTAINER" nil org-html-container-element) (:html-content-class "HTML_CONTENT_CLASS" nil org-html-content-class) (:description "DESCRIPTION" nil nil newline) (:keywords "KEYWORDS" nil nil space) (:html-html5-fancy nil "html5-fancy" org-html-html5-fancy) (:html-link-use-abs-url nil "html-link-use-abs-url" org-html-link-use-abs-url) (:html-link-home "HTML_LINK_HOME" nil org-html-link-home) (:html-link-up "HTML_LINK_UP" nil org-html-link-up) (:html-mathjax "HTML_MATHJAX" nil "" space) (:html-equation-reference-format "HTML_EQUATION_REFERENCE_FORMAT" nil org-html-equation-reference-format t) (:html-postamble nil "html-postamble" org-html-postamble) (:html-preamble nil "html-preamble" org-html-preamble) (:html-head "HTML_HEAD" nil org-html-head newline) (:html-head-extra "HTML_HEAD_EXTRA" nil org-html-head-extra newline) (:subtitle "SUBTITLE" nil nil parse) (:html-head-include-default-style nil "html-style" org-html-head-include-default-style) (:html-head-include-scripts nil "html-scripts" org-html-head-include-scripts) (:html-allow-name-attribute-in-anchors nil nil org-html-allow-name-attribute-in-anchors) (:html-divs nil nil org-html-divs) (:html-checkbox-type nil nil org-html-checkbox-type) (:html-extension nil nil org-html-extension) (:html-footnote-format nil nil org-html-footnote-format) (:html-footnote-separator nil nil org-html-footnote-separator) (:html-footnotes-section nil nil org-html-footnotes-section) (:html-format-drawer-function nil nil org-html-format-drawer-function) (:html-format-headline-function nil nil org-html-format-headline-function) (:html-format-inlinetask-function nil nil org-html-format-inlinetask-function) (:html-home/up-format nil nil org-html-home/up-format) (:html-indent nil nil org-html-indent) (:html-infojs-options nil nil org-html-infojs-options) (:html-infojs-template nil nil org-html-infojs-template) (:html-inline-image-rules nil nil org-html-inline-image-rules) (:html-link-org-files-as-html nil nil org-html-link-org-files-as-html) (:html-mathjax-options nil nil org-html-mathjax-options) (:html-mathjax-template nil nil org-html-mathjax-template) (:html-metadata-timestamp-format nil nil org-html-metadata-timestamp-format) (:html-postamble-format nil nil org-html-postamble-format) (:html-preamble-format nil nil org-html-preamble-format) (:html-prefer-user-labels nil nil org-html-prefer-user-labels) (:html-self-link-headlines nil nil org-html-self-link-headlines) (:html-table-align-individual-fields nil nil org-html-table-align-individual-fields) (:html-table-caption-above nil nil org-html-table-caption-above) (:html-table-data-tags nil nil org-html-table-data-tags) (:html-table-header-tags nil nil org-html-table-header-tags) (:html-table-use-header-tags-for-first-column nil nil org-html-table-use-header-tags-for-first-column) (:html-tag-class-prefix nil nil org-html-tag-class-prefix) (:html-text-markup-alist nil nil org-html-text-markup-alist) (:html-todo-kwd-class-prefix nil nil org-html-todo-kwd-class-prefix) (:html-toplevel-hlevel nil nil org-html-toplevel-hlevel) (:html-use-infojs nil nil org-html-use-infojs) (:html-validation-link nil nil org-html-validation-link) (:html-viewport nil nil org-html-viewport) (:html-inline-images nil nil org-html-inline-images) (:html-table-attributes nil nil org-html-table-default-attributes) (:html-table-row-open-tag nil nil org-html-table-row-open-tag) (:html-table-row-close-tag nil nil org-html-table-row-close-tag) (:html-xml-declaration nil nil org-html-xml-declaration) (:html-wrap-src-lines nil nil org-html-wrap-src-lines) (:html-klipsify-src nil nil org-html-klipsify-src) (:html-klipse-css nil nil org-html-klipse-css) (:html-klipse-js nil nil org-html-klipse-js) (:html-klipse-selection-script nil nil org-html-klipse-selection-script) (:infojs-opt "INFOJS_OPT" nil nil) (:creator "CREATOR" nil org-html-creator-string) (:with-latex nil "tex" org-html-with-latex) (:latex-header "LATEX_HEADER" nil nil newline)) :filters ((:filter-options . org-html-infojs-install-script) (:filter-parse-tree . org-html-image-link-filter) (:filter-final-output . org-html-final-function)) :blocks nil :menu (104 "Export to HTML" ((72 "As HTML buffer" org-html-export-as-html) (104 "As HTML file" org-html-export-to-html) (111 "As HTML file and open" (lambda (a s v b) (if a (org-html-export-to-html t s v b) (org-open-file (org-html-export-to-html nil s v b)))))))) :translate-alist ((bold . org-html-bold) (center-block . org-html-center-block) (clock . org-html-clock) (code . org-html-code) (drawer . org-html-drawer) (dynamic-block . org-html-dynamic-block) (entity . org-html-entity) (example-block . org-html-example-block) (export-block . org-html-export-block) (export-snippet . org-html-export-snippet) (fixed-width . org-html-fixed-width) (footnote-reference . org-html-footnote-reference) (headline . org-html-headline) (horizontal-rule . org-html-horizontal-rule) (inline-src-block . org-html-inline-src-block) (inlinetask . org-html-inlinetask) (inner-template . org-html-inner-template) (italic . org-html-italic) (item . org-html-item) (keyword . org-html-keyword) (latex-environment . org-html-latex-environment) (latex-fragment . org-html-latex-fragment) (line-break . org-html-line-break) (link . org-html-link) (node-property . org-html-node-property) (paragraph . org-html-paragraph) (plain-list . org-html-plain-list) (plain-text . org-html-plain-text) (planning . org-html-planning) (property-drawer . org-html-property-drawer) (quote-block . org-html-quote-block) (radio-target . org-html-radio-target) (section . org-html-section) (special-block . org-html-special-block) (src-block . org-html-src-block) (statistics-cookie . org-html-statistics-cookie) (strike-through . org-html-strike-through) (subscript . org-html-subscript) (superscript . org-html-superscript) (table . org-html-table) (table-cell . org-html-table-cell) (table-row . org-html-table-row) (target . org-html-target) (template . org-html-template) (timestamp . org-html-timestamp) (underline . org-html-underline) (verbatim . org-html-verbatim) (verse-block . org-html-verse-block)) :exported-data # :input-buffer " *temp*" :input-file nil :html-doctype "xhtml-strict" :html-container "div" :html-content-class "content" :description nil :keywords nil :html-html5-fancy nil :html-link-use-abs-url nil :html-link-home "" :html-link-up "" :html-mathjax "" :html-equation-reference-format "\\eqref{%s}" :html-postamble auto :html-preamble t :html-head "" :html-head-extra "" :subtitle nil :html-head-include-default-style t :html-head-include-scripts nil :html-allow-name-attribute-in-anchors nil :html-divs ((preamble "div" "preamble") (content "div" "content") (postamble "div" "postamble")) :html-checkbox-type ascii :html-extension "html" :html-footnote-format "%s" :html-footnote-separator ", " :html-footnotes-section "
\n

%s:

\n
\n%s\n
\n
" :html-format-drawer-function #f(compiled-function (name contents) #) :html-format-headline-function org-html-format-headline-default-function :html-format-inlinetask-function org-html-format-inlinetask-default-function :html-home/up-format "
\n UP \n |\n HOME \n
" :html-indent nil :html-infojs-options ((path . "https://orgmode.org/org-info.js") (view . "info") (toc . :with-toc) (ftoc . "0") (tdepth . "max") (sdepth . "max") (mouse . "underline") (buttons . "0") (ltoc . "1") (up . :html-link-up) (home . :html-link-home)) :html-infojs-template "\n\n" :html-inline-image-rules (("file" . "\\(?:\\.\\(?:avif\\|gif\\|jp\\(?:e?g\\)\\|png\\|svg\\|webp\\)\\)") ("http" . "\\(?:\\.\\(?:avif\\|gif\\|jp\\(?:e?g\\)\\|png\\|svg\\|webp\\)\\)") ("https" . "\\(?:\\.\\(?:avif\\|gif\\|jp\\(?:e?g\\)\\|png\\|svg\\|webp\\)\\)")) :html-link-org-files-as-html t :html-mathjax-options ((path "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js") (scale 1.0) (align "center") (font "mathjax-modern") (overflow "overflow") (tags "ams") (indent "0em") (multlinewidth "85%") (tagindent ".8em") (tagside "right")) :html-mathjax-template "\n\n\n" :html-metadata-timestamp-format "%Y-%m-%d %a %H:%M" :html-postamble-format (("en" "

Author: %a (%e)

\n

Date: %d

\n

%c

\n

%v

")) :html-preamble-format (("en" "")) :html-prefer-user-labels nil :html-self-link-headlines nil :html-table-align-individual-fields t :html-table-caption-above t :html-table-data-tags ("" . "") :html-table-header-tags ("" . "") :html-table-use-header-tags-for-first-column nil :html-tag-class-prefix "" :html-text-markup-alist ((bold . "%s") (code . "%s") (italic . "%s") (strike-through . "%s") (underline . "%s") (verbatim . "%s")) :html-todo-kwd-class-prefix "" :html-toplevel-hlevel 2 :html-use-infojs when-configured :html-validation-link "Validate" :html-viewport ((width "device-width") (initial-scale "1") (minimum-scale "") (maximum-scale "") (user-scalable "")) :html-inline-images t :html-table-attributes (:border "2" :cellspacing "0" :cellpadding "6" :rules "groups" :frame "hsides") :html-table-row-open-tag "" :html-table-row-close-tag "" :html-xml-declaration (("html" . "") ("php" . "\"; ?>")) :html-wrap-src-lines nil :html-klipsify-src nil :html-klipse-css "https://storage.googleapis.com/app.klipse.tech/css/codemirror.css" :html-klipse-js "https://storage.googleapis.com/app.klipse.tech/plugin_prod/js/klipse_plugin.min.js" :html-klipse-selection-script "window.klipse_settings = {selector_eval_html: '.src-html',\n selector_eval_js: '.src-js',\n selector_eval_python_client: '.src-python',\n selector_eval_scheme: '.src-scheme',\n selector: '.src-clojure',\n selector_eval_ruby: '.src-ruby'};" :infojs-opt nil :creator "Emacs 30.1 (Org mode 9.7.11)" :with-latex t :latex-header nil :title (#("Installing GeneNetwork services" 0 31 (:parent #148))) :date nil :author (#("unknown" 0 7 (:parent #152))) :email "unknown@genenetwork-development" :language "en" :select-tags ("export") :exclude-tags ("noexport") :headline-levels 3 :preserve-breaks nil :section-numbers nil :time-stamp-file t :with-archived-trees headline :with-author t :expand-links t :with-broken-links nil :with-clocks nil :with-creator nil :with-date t :with-drawers (not "LOGBOOK") :with-email nil :with-emphasize t :with-entities t :with-fixed-width t :with-footnotes t :with-inlinetasks t :with-planning nil :with-priority nil :with-properties nil :with-smart-quotes nil :with-special-strings t :with-special-rows nil :with-statistics-cookies t :with-sub-superscript t :with-toc nil :with-tables t :with-tags t :with-tasks t :with-timestamps t :with-title t :with-todo-keywords t :with-cite-processors t :cite-export (basic nil nil) :bibliography nil :filter-body nil :filter-bold nil :filter-babel-call nil :filter-center-block nil :filter-clock nil :filter-code nil :filter-diary-sexp nil :filter-drawer nil :filter-dynamic-block nil :filter-entity nil :filter-example-block nil :filter-export-block nil :filter-export-snippet nil :filter-final-output (org-html-final-function) :filter-fixed-width nil :filter-footnote-definition nil :filter-footnote-reference nil :filter-headline nil :filter-horizontal-rule nil :filter-inline-babel-call nil :filter-inline-src-block nil :filter-inlinetask nil :filter-italic nil :filter-item nil :filter-keyword nil :filter-latex-environment nil :filter-latex-fragment nil :filter-line-break nil :filter-link nil :filter-node-property nil :filter-options (org-html-infojs-install-script) :filter-paragraph nil :filter-parse-tree (org-html-image-link-filter) :filter-plain-list nil :filter-plain-text nil :filter-planning nil :filter-property-drawer nil :filter-quote-block nil :filter-radio-target nil :filter-section nil :filter-special-block nil :filter-src-block nil :filter-statistics-cookie nil :filter-strike-through nil :filter-subscript nil :filter-superscript nil :filter-table nil :filter-table-cell nil :filter-table-row nil :filter-target nil :filter-timestamp nil :filter-underline nil :filter-verbatim nil :filter-verse-block nil :ignore-list nil :parse-tree (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #344]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #347] :key "TITLE" :value "Installing GeneNetwork services"))) (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil #344] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #348))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil #348]) (plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #351] :type unordered) (item (:standard-properties [121 121 124 156 156 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [124 124 124 156 156 0 nil nil nil nil nil nil nil nil # nil nil #357]) (link (:standard-properties [124 nil 141 153 155 0 nil nil nil nil nil nil nil nil # nil nil #360] :type "custom-id" :type-explicit-p nil :path "introduction" :format bracket :raw-link "#introduction" :application nil :search-option nil) #("Introduction" 0 12 (:parent #363))) #("\n" 0 1 (:parent #360)))) (item (:standard-properties [156 156 159 239 239 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [159 159 159 239 239 0 nil nil nil nil nil nil nil nil # nil nil #358]) (link (:standard-properties [159 nil 200 236 238 0 nil nil nil nil nil nil nil nil # nil nil #361] :type "custom-id" :type-explicit-p nil :path "reproducibility-and-interoperability" :format bracket :raw-link "#reproducibility-and-interoperability" :application nil :search-option nil) #("Reproducibility and interoperability" 0 36 (:parent #364))) #("\n" 0 1 (:parent #361)))) (item (:standard-properties [239 239 242 268 268 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [242 242 242 268 268 0 nil nil nil nil nil nil nil nil # nil nil #359]) (link (:standard-properties [242 nil 256 265 267 0 nil nil nil nil nil nil nil nil # nil nil #362] :type "custom-id" :type-explicit-p nil :path "webserver" :format bracket :raw-link "#webserver" :application nil :search-option nil) #("Webserver" 0 9 (:parent #365))) #("\n" 0 1 (:parent #362)))) (item (:standard-properties [268 268 271 307 307 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [271 271 271 307 307 0 nil nil nil nil nil nil nil nil # nil nil #360]) (link (:standard-properties [271 nil 289 304 306 0 nil nil nil nil nil nil nil nil # nil nil #363] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #366))) #("\n" 0 1 (:parent #363)))) (item (:standard-properties [307 307 310 330 330 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [310 310 310 330 330 0 nil nil nil nil nil nil nil nil # nil nil #361]) (link (:standard-properties [310 nil 321 327 329 0 nil nil nil nil nil nil nil nil # nil nil #364] :type "custom-id" :type-explicit-p nil :path "gnexec" :format bracket :raw-link "#gnexec" :application nil :search-option nil) #("GnExec" 0 6 (:parent #367))) #("\n" 0 1 (:parent #364)))) (item (:standard-properties [330 330 333 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [333 333 333 357 357 0 nil nil nil nil nil nil nil nil # nil nil #362]) (link (:standard-properties [333 nil 346 354 356 0 nil nil nil nil nil nil nil nil # nil nil #365] :type "custom-id" :type-explicit-p nil :path "database" :format bracket :raw-link "#database" :application nil :search-option nil) #("Database" 0 8 (:parent #368))) #("\n" 0 1 (:parent #365))) (plain-list (:standard-properties [357 357 357 421 421 0 nil nil nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #362] :type unordered) (item (:standard-properties [357 357 362 390 390 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #366] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [362 362 362 390 390 0 nil nil nil nil nil nil nil nil # nil nil #369]) (link (:standard-properties [362 nil 377 387 389 0 nil nil nil nil nil nil nil nil # nil nil #372] :type "custom-id" :type-explicit-p nil :path "phenotypes" :format bracket :raw-link "#phenotypes" :application nil :search-option nil) #("Phenotypes" 0 10 (:parent #375))) #("\n" 0 1 (:parent #372)))) (item (:standard-properties [390 390 395 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #366] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [395 395 395 421 421 0 nil nil nil nil nil nil nil nil # nil nil #370]) (link (:standard-properties [395 nil 409 418 420 0 nil nil nil nil nil nil nil nil # nil nil #373] :type "custom-id" :type-explicit-p nil :path "genotypes" :format bracket :raw-link "#genotypes" :application nil :search-option nil) #("Genotypes" 0 9 (:parent #376))) #("\n" 0 1 (:parent #373))))))))) (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #349))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #349]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #352]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #355))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #350))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #350]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #353]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #356)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #356] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #360))) #(").\n" 0 3 (:parent #356))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #357)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #357))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #358))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #359)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #359] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #359))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #360))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #361)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #361] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #361))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #351))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #351]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #354]) #("The main " 0 9 (:parent #357)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #361))) #("is built on " 0 12 (:parent #357)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #363))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #357)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #365))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #357)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #367))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #357)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #369)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #369] :use-brackets-p nil) #("page.html" 0 9 (:parent #373)))) #("in the " 0 7 (:parent #357)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #371))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #357)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #373)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #373] :use-brackets-p nil) #("select" 0 6 (:parent #377))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #373] :use-brackets-p nil) #("menu.js" 0 7 (:parent #378)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #357)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #375)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #375] :use-brackets-p nil) #("select" 0 6 (:parent #379))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #375] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #380)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #357)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #357] :use-brackets-p nil) #("server" 0 6 (:parent #377))) #("in the latest version, see " 0 27 (:parent #357)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #357] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #379))) #(".\n" 0 2 (:parent #357))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #354]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #358)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("M2" 0 2 (:parent #362))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("0606" 0 4 (:parent #363))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("P" 0 1 (:parent #364))) #("&search" 0 7 (:parent #358)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("terms" 0 5 (:parent #366))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("or" 0 2 (:parent #367))) #("=&search" 0 8 (:parent #358)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("terms" 0 5 (:parent #369))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("and" 0 3 (:parent #370))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #358)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("server" 0 6 (:parent #372))) #("). The logic is in\nsearch" 0 25 (:parent #358)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("result.py" 0 9 (:parent #374))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #358)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #358] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #376)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #376] :use-brackets-p nil) #("result" 0 6 (:parent #380))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #376] :use-brackets-p nil) #("page.html" 0 9 (:parent #381)))) #(".\n" 0 2 (:parent #358))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #354]) #("For what happens at the database level see " 0 43 (:parent #359)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #359] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #359))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #354]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #360)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #360] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #364)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #364] :use-brackets-p nil) #("result" 0 6 (:parent #368))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #364] :use-brackets-p nil) #("page.html" 0 9 (:parent #369)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #360)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #360] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #366))) #(".\n" 0 2 (:parent #360))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #352))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #352]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #355]) #("The " 0 4 (:parent #358)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #358] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #362))) #("is built on high performance " 0 29 (:parent #358)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #358] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #364))) #("with " 0 5 (:parent #358)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #358] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #366))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #358))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #355] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #355]) #("(json2yaml.rb is in the gn" 0 26 (:parent #360)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #360] :use-brackets-p nil) #("server" 0 6 (:parent #364))) #("repo). For the current API definition\nsee " 0 42 (:parent #360)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #360] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #366))) #("documentation.\n" 0 15 (:parent #360))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #353))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #353]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #356]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #359))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #344] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #354))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #354] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #357))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #357]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #360]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #363)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #363] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #363)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #363] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #369))) #(".\n" 0 2 (:parent #363))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #354] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #358))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #358]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #361]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #364)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #364] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #368))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #364)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #364] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #370))) #(".\n" 0 2 (:parent #364))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #361]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #365))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #361] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #361]) #("and, for example, in the method run" 0 35 (:parent #367)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #367] :use-brackets-p nil) #("rqtl" 0 4 (:parent #371))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #367] :use-brackets-p nil) #("geno" 0 4 (:parent #372))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #367)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #367] :use-brackets-p nil) #("extra" 0 5 (:parent #374))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #367))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #361] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #361]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #369))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #361] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t])))))) :headline-offset 0 :headline-numbering nil :id-alist nil :citations nil :id-local-cache #)) #f(compiled-function (element) #)((item (:standard-properties [121 121 124 156 156 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #20]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #23] :key "TITLE" :value "Installing GeneNetwork services"))) #15 (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #20] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #25))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #25]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #28]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #31))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #20] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #26))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #26]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #29]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #32)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #32] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #36))) #(").\n" 0 3 (:parent #32))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #29]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #33)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #33] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #33))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #29]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #34))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #29]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #35)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #35] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #35))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #29]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #36))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #29]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #37)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #37] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #37))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #20] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #27))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #27]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #30]) #("The main " 0 9 (:parent #33)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #33] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #37))) #("is built on " 0 12 (:parent #33)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #33] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #39))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #33)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #33] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #41))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #33)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #33] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #43))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #33)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #33] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #45)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #45] :use-brackets-p nil) #("page.html" 0 9 (:parent #49)))) #("in the " 0 7 (:parent #33)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #33] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #47))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #33)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #33] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #49)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #49] :use-brackets-p nil) #("select" 0 6 (:parent #53))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #49] :use-brackets-p nil) #("menu.js" 0 7 (:parent #54)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #33)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #33] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #51)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #51] :use-brackets-p nil) #("select" 0 6 (:parent #55))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #51] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #56)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #33)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #33] :use-brackets-p nil) #("server" 0 6 (:parent #53))) #("in the latest version, see " 0 27 (:parent #33)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #33] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #55))) #(".\n" 0 2 (:parent #33))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #30]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #34)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #34] :use-brackets-p nil) #("M2" 0 2 (:parent #38))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #34] :use-brackets-p nil) #("0606" 0 4 (:parent #39))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #34] :use-brackets-p nil) #("P" 0 1 (:parent #40))) #("&search" 0 7 (:parent #34)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #34] :use-brackets-p nil) #("terms" 0 5 (:parent #42))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #34] :use-brackets-p nil) #("or" 0 2 (:parent #43))) #("=&search" 0 8 (:parent #34)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #34] :use-brackets-p nil) #("terms" 0 5 (:parent #45))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #34] :use-brackets-p nil) #("and" 0 3 (:parent #46))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #34)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #34] :use-brackets-p nil) #("server" 0 6 (:parent #48))) #("). The logic is in\nsearch" 0 25 (:parent #34)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #34] :use-brackets-p nil) #("result.py" 0 9 (:parent #50))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #34)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #34] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #52)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #52] :use-brackets-p nil) #("result" 0 6 (:parent #56))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #52] :use-brackets-p nil) #("page.html" 0 9 (:parent #57)))) #(".\n" 0 2 (:parent #34))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #30]) #("For what happens at the database level see " 0 43 (:parent #35)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #35] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #35))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #30]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #36)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #36] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #40)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #40] :use-brackets-p nil) #("result" 0 6 (:parent #44))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #40] :use-brackets-p nil) #("page.html" 0 9 (:parent #45)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #36)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #36] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #42))) #(".\n" 0 2 (:parent #36))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #20] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #28))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #28]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #31]) #("The " 0 4 (:parent #34)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #34] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #38))) #("is built on high performance " 0 29 (:parent #34)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #34] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #40))) #("with " 0 5 (:parent #34)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #34] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #42))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #34))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #31] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #31]) #("(json2yaml.rb is in the gn" 0 26 (:parent #36)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #36] :use-brackets-p nil) #("server" 0 6 (:parent #40))) #("repo). For the current API definition\nsee " 0 42 (:parent #36)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #36] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #42))) #("documentation.\n" 0 15 (:parent #36))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #20] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #29))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #29]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #32]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #35))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #20] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #30))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #30] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #33))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #33]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #36]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #39)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #39] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #39)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #39] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #45))) #(".\n" 0 2 (:parent #39))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #30] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #34))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #34]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #37]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #40)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #40] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #44))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #40)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #40] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #46))) #(".\n" 0 2 (:parent #40))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #37]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #41))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #37] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #37]) #("and, for example, in the method run" 0 35 (:parent #43)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #43] :use-brackets-p nil) #("rqtl" 0 4 (:parent #47))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #43] :use-brackets-p nil) #("geno" 0 4 (:parent #48))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #43)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #43] :use-brackets-p nil) #("extra" 0 5 (:parent #50))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #43))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #37] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #37]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #45))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #37] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t]))))))] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #15))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) #10)]) #5)] :type unordered) #0 (item (:standard-properties [156 156 159 239 239 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #5] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [159 159 159 239 239 0 nil nil nil nil nil nil nil nil # nil nil #9]) (link (:standard-properties [159 nil 200 236 238 0 nil nil nil nil nil nil nil nil # nil nil #12] :type "custom-id" :type-explicit-p nil :path "reproducibility-and-interoperability" :format bracket :raw-link "#reproducibility-and-interoperability" :application nil :search-option nil) #("Reproducibility and interoperability" 0 36 (:parent #15))) #("\n" 0 1 (:parent #12)))) (item (:standard-properties [239 239 242 268 268 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #5] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [242 242 242 268 268 0 nil nil nil nil nil nil nil nil # nil nil #10]) (link (:standard-properties [242 nil 256 265 267 0 nil nil nil nil nil nil nil nil # nil nil #13] :type "custom-id" :type-explicit-p nil :path "webserver" :format bracket :raw-link "#webserver" :application nil :search-option nil) #("Webserver" 0 9 (:parent #16))) #("\n" 0 1 (:parent #13)))) (item (:standard-properties [268 268 271 307 307 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #5] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [271 271 271 307 307 0 nil nil nil nil nil nil nil nil # nil nil #11]) (link (:standard-properties [271 nil 289 304 306 0 nil nil nil nil nil nil nil nil # nil nil #14] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #17))) #("\n" 0 1 (:parent #14)))) (item (:standard-properties [307 307 310 330 330 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #5] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [310 310 310 330 330 0 nil nil nil nil nil nil nil nil # nil nil #12]) (link (:standard-properties [310 nil 321 327 329 0 nil nil nil nil nil nil nil nil # nil nil #15] :type "custom-id" :type-explicit-p nil :path "gnexec" :format bracket :raw-link "#gnexec" :application nil :search-option nil) #("GnExec" 0 6 (:parent #18))) #("\n" 0 1 (:parent #15)))) (item (:standard-properties [330 330 333 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #5] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [333 333 333 357 357 0 nil nil nil nil nil nil nil nil # nil nil #13]) (link (:standard-properties [333 nil 346 354 356 0 nil nil nil nil nil nil nil nil # nil nil #16] :type "custom-id" :type-explicit-p nil :path "database" :format bracket :raw-link "#database" :application nil :search-option nil) #("Database" 0 8 (:parent #19))) #("\n" 0 1 (:parent #16))) (plain-list (:standard-properties [357 357 357 421 421 0 nil nil nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #13] :type unordered) (item (:standard-properties [357 357 362 390 390 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #17] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [362 362 362 390 390 0 nil nil nil nil nil nil nil nil # nil nil #20]) (link (:standard-properties [362 nil 377 387 389 0 nil nil nil nil nil nil nil nil # nil nil #23] :type "custom-id" :type-explicit-p nil :path "phenotypes" :format bracket :raw-link "#phenotypes" :application nil :search-option nil) #("Phenotypes" 0 10 (:parent #26))) #("\n" 0 1 (:parent #23)))) (item (:standard-properties [390 390 395 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #17] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [395 395 395 421 421 0 nil nil nil nil nil nil nil nil # nil nil #21]) (link (:standard-properties [395 nil 409 418 420 0 nil nil nil nil nil nil nil nil # nil nil #24] :type "custom-id" :type-explicit-p nil :path "genotypes" :format bracket :raw-link "#genotypes" :application nil :search-option nil) #("Genotypes" 0 9 (:parent #27))) #("\n" 0 1 (:parent #24)))))))] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [124 124 124 156 156 0 nil nil nil nil nil nil nil nil # nil nil #0]) (link (:standard-properties [124 nil 141 153 155 0 nil nil nil nil nil nil nil nil # nil nil #3] :type "custom-id" :type-explicit-p nil :path "introduction" :format bracket :raw-link "#introduction" :application nil :search-option nil) #("Introduction" 0 12 (:parent #6))) #("\n" 0 1 (:parent #3))))) mapconcat(#f(compiled-function (element) #) ((item (:standard-properties [121 121 124 156 156 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #21]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #24] :key "TITLE" :value "Installing GeneNetwork services"))) #16 (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #21] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #26))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #26]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #29]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #32))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #21] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #27))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #27]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #30]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #33)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #33] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #37))) #(").\n" 0 3 (:parent #33))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #30]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #34)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #34] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #34))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #30]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #35))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #30]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #36)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #36] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #36))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #30]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #37))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #30]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #38)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #38))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #21] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #28))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #28]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #31]) #("The main " 0 9 (:parent #34)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #34] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #38))) #("is built on " 0 12 (:parent #34)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #34] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #40))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #34)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #34] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #42))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #34)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #34] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #44))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #34)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #34] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #46)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #46] :use-brackets-p nil) #("page.html" 0 9 (:parent #50)))) #("in the " 0 7 (:parent #34)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #34] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #48))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #34)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #34] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #50)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #50] :use-brackets-p nil) #("select" 0 6 (:parent #54))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #50] :use-brackets-p nil) #("menu.js" 0 7 (:parent #55)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #34)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #34] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #52)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #52] :use-brackets-p nil) #("select" 0 6 (:parent #56))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #52] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #57)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #34)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #34] :use-brackets-p nil) #("server" 0 6 (:parent #54))) #("in the latest version, see " 0 27 (:parent #34)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #34] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #56))) #(".\n" 0 2 (:parent #34))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #31]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #35)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #35] :use-brackets-p nil) #("M2" 0 2 (:parent #39))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #35] :use-brackets-p nil) #("0606" 0 4 (:parent #40))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #35] :use-brackets-p nil) #("P" 0 1 (:parent #41))) #("&search" 0 7 (:parent #35)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #35] :use-brackets-p nil) #("terms" 0 5 (:parent #43))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #35] :use-brackets-p nil) #("or" 0 2 (:parent #44))) #("=&search" 0 8 (:parent #35)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #35] :use-brackets-p nil) #("terms" 0 5 (:parent #46))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #35] :use-brackets-p nil) #("and" 0 3 (:parent #47))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #35)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #35] :use-brackets-p nil) #("server" 0 6 (:parent #49))) #("). The logic is in\nsearch" 0 25 (:parent #35)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #35] :use-brackets-p nil) #("result.py" 0 9 (:parent #51))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #35)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #35] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #53)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #53] :use-brackets-p nil) #("result" 0 6 (:parent #57))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #53] :use-brackets-p nil) #("page.html" 0 9 (:parent #58)))) #(".\n" 0 2 (:parent #35))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #31]) #("For what happens at the database level see " 0 43 (:parent #36)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #36] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #36))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #31]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #37)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #37] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #41)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #41] :use-brackets-p nil) #("result" 0 6 (:parent #45))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #41] :use-brackets-p nil) #("page.html" 0 9 (:parent #46)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #37)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #37] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #43))) #(".\n" 0 2 (:parent #37))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #21] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #29))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #29]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #32]) #("The " 0 4 (:parent #35)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #35] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #39))) #("is built on high performance " 0 29 (:parent #35)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #35] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #41))) #("with " 0 5 (:parent #35)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #35] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #43))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #35))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #32] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #32]) #("(json2yaml.rb is in the gn" 0 26 (:parent #37)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #37] :use-brackets-p nil) #("server" 0 6 (:parent #41))) #("repo). For the current API definition\nsee " 0 42 (:parent #37)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #37] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #43))) #("documentation.\n" 0 15 (:parent #37))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #21] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #30))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #30]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #33]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #36))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #21] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #31))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #31] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #34))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #34]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #37]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #40)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #40] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #40)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #40] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #46))) #(".\n" 0 2 (:parent #40))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #31] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #35))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #35]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #38]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #41)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #41] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #45))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #41)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #41] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #47))) #(".\n" 0 2 (:parent #41))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #38]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #42))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #38] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #38]) #("and, for example, in the method run" 0 35 (:parent #44)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("rqtl" 0 4 (:parent #48))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("geno" 0 4 (:parent #49))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #44)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("extra" 0 5 (:parent #51))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #44))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #38] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #38]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #46))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #38] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t]))))))] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #16))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) #11)]) #6)] :type unordered) . #0)] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [124 124 124 156 156 0 nil nil nil nil nil nil nil nil # nil nil #1]) (link (:standard-properties [124 nil 141 153 155 0 nil nil nil nil nil nil nil nil # nil nil #4] :type "custom-id" :type-explicit-p nil :path "introduction" :format bracket :raw-link "#introduction" :application nil :search-option nil) #("Introduction" 0 12 (:parent #7))) #("\n" 0 1 (:parent #4)))) (item (:standard-properties [156 156 159 239 239 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #22]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #25] :key "TITLE" :value "Installing GeneNetwork services"))) #17 (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #22] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #27))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #27]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #30]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #33))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #22] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #28))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #28]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #31]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #34)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #34] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #38))) #(").\n" 0 3 (:parent #34))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #31]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #35)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #35] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #35))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #31]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #36))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #31]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #37)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #37] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #37))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #31]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #38))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #31]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #39)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #39))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #22] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #29))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #29]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #32]) #("The main " 0 9 (:parent #35)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #35] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #39))) #("is built on " 0 12 (:parent #35)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #35] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #41))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #35)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #35] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #43))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #35)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #35] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #45))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #35)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #35] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #47)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #47] :use-brackets-p nil) #("page.html" 0 9 (:parent #51)))) #("in the " 0 7 (:parent #35)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #35] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #49))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #35)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #35] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #51)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #51] :use-brackets-p nil) #("select" 0 6 (:parent #55))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #51] :use-brackets-p nil) #("menu.js" 0 7 (:parent #56)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #35)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #35] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #53)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #53] :use-brackets-p nil) #("select" 0 6 (:parent #57))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #53] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #58)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #35)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #35] :use-brackets-p nil) #("server" 0 6 (:parent #55))) #("in the latest version, see " 0 27 (:parent #35)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #35] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #57))) #(".\n" 0 2 (:parent #35))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #32]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #36)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #36] :use-brackets-p nil) #("M2" 0 2 (:parent #40))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #36] :use-brackets-p nil) #("0606" 0 4 (:parent #41))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #36] :use-brackets-p nil) #("P" 0 1 (:parent #42))) #("&search" 0 7 (:parent #36)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #36] :use-brackets-p nil) #("terms" 0 5 (:parent #44))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #36] :use-brackets-p nil) #("or" 0 2 (:parent #45))) #("=&search" 0 8 (:parent #36)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #36] :use-brackets-p nil) #("terms" 0 5 (:parent #47))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #36] :use-brackets-p nil) #("and" 0 3 (:parent #48))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #36)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #36] :use-brackets-p nil) #("server" 0 6 (:parent #50))) #("). The logic is in\nsearch" 0 25 (:parent #36)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #36] :use-brackets-p nil) #("result.py" 0 9 (:parent #52))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #36)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #36] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #54)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #54] :use-brackets-p nil) #("result" 0 6 (:parent #58))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #54] :use-brackets-p nil) #("page.html" 0 9 (:parent #59)))) #(".\n" 0 2 (:parent #36))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #32]) #("For what happens at the database level see " 0 43 (:parent #37)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #37] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #37))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #32]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #38)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #42)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #42] :use-brackets-p nil) #("result" 0 6 (:parent #46))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #42] :use-brackets-p nil) #("page.html" 0 9 (:parent #47)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #38)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #44))) #(".\n" 0 2 (:parent #38))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #22] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #30))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #30]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #33]) #("The " 0 4 (:parent #36)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #36] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #40))) #("is built on high performance " 0 29 (:parent #36)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #36] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #42))) #("with " 0 5 (:parent #36)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #36] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #44))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #36))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #33] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #33]) #("(json2yaml.rb is in the gn" 0 26 (:parent #38)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #38] :use-brackets-p nil) #("server" 0 6 (:parent #42))) #("repo). For the current API definition\nsee " 0 42 (:parent #38)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #44))) #("documentation.\n" 0 15 (:parent #38))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #22] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #31))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #31]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #34]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #37))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #22] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #32))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #32] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #35))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #35]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #38]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #41)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #41] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #41)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #41] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #47))) #(".\n" 0 2 (:parent #41))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #32] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #36))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #36]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #39]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #42)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #42] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #46))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #42)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #42] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #48))) #(".\n" 0 2 (:parent #42))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #39]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #43))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #39] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #39]) #("and, for example, in the method run" 0 35 (:parent #45)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #45] :use-brackets-p nil) #("rqtl" 0 4 (:parent #49))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #45] :use-brackets-p nil) #("geno" 0 4 (:parent #50))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #45)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #45] :use-brackets-p nil) #("extra" 0 5 (:parent #52))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #45))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #39] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #39]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #47))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #39] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t]))))))] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #17))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) #12)]) #7)] :type unordered) . #0)] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [159 159 159 239 239 0 nil nil nil nil nil nil nil nil # nil nil #2]) (link (:standard-properties [159 nil 200 236 238 0 nil nil nil nil nil nil nil nil # nil nil #5] :type "custom-id" :type-explicit-p nil :path "reproducibility-and-interoperability" :format bracket :raw-link "#reproducibility-and-interoperability" :application nil :search-option nil) #("Reproducibility and interoperability" 0 36 (:parent #8))) #("\n" 0 1 (:parent #5)))) (item (:standard-properties [239 239 242 268 268 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #23]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #26] :key "TITLE" :value "Installing GeneNetwork services"))) #18 (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #23] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #28))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #28]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #31]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #34))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #23] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #29))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #29]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #32]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #35)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #35] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #39))) #(").\n" 0 3 (:parent #35))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #32]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #36)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #36] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #36))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #32]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #37))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #32]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #38)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #38))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #32]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #39))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #32]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #40)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #40] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #40))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #23] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #30))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #30]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #33]) #("The main " 0 9 (:parent #36)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #36] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #40))) #("is built on " 0 12 (:parent #36)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #36] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #42))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #36)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #36] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #44))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #36)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #36] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #46))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #36)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #36] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #48)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #48] :use-brackets-p nil) #("page.html" 0 9 (:parent #52)))) #("in the " 0 7 (:parent #36)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #36] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #50))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #36)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #36] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #52)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #52] :use-brackets-p nil) #("select" 0 6 (:parent #56))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #52] :use-brackets-p nil) #("menu.js" 0 7 (:parent #57)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #36)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #36] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #54)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #54] :use-brackets-p nil) #("select" 0 6 (:parent #58))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #54] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #59)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #36)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #36] :use-brackets-p nil) #("server" 0 6 (:parent #56))) #("in the latest version, see " 0 27 (:parent #36)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #36] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #58))) #(".\n" 0 2 (:parent #36))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #33]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #37)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #37] :use-brackets-p nil) #("M2" 0 2 (:parent #41))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #37] :use-brackets-p nil) #("0606" 0 4 (:parent #42))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #37] :use-brackets-p nil) #("P" 0 1 (:parent #43))) #("&search" 0 7 (:parent #37)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #37] :use-brackets-p nil) #("terms" 0 5 (:parent #45))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #37] :use-brackets-p nil) #("or" 0 2 (:parent #46))) #("=&search" 0 8 (:parent #37)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #37] :use-brackets-p nil) #("terms" 0 5 (:parent #48))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #37] :use-brackets-p nil) #("and" 0 3 (:parent #49))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #37)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #37] :use-brackets-p nil) #("server" 0 6 (:parent #51))) #("). The logic is in\nsearch" 0 25 (:parent #37)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #37] :use-brackets-p nil) #("result.py" 0 9 (:parent #53))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #37)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #37] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #55)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #55] :use-brackets-p nil) #("result" 0 6 (:parent #59))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #55] :use-brackets-p nil) #("page.html" 0 9 (:parent #60)))) #(".\n" 0 2 (:parent #37))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #33]) #("For what happens at the database level see " 0 43 (:parent #38)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #38] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #38))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #33]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #39)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #43)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #43] :use-brackets-p nil) #("result" 0 6 (:parent #47))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #43] :use-brackets-p nil) #("page.html" 0 9 (:parent #48)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #39)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #45))) #(".\n" 0 2 (:parent #39))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #23] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #31))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #31]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #34]) #("The " 0 4 (:parent #37)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #37] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #41))) #("is built on high performance " 0 29 (:parent #37)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #37] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #43))) #("with " 0 5 (:parent #37)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #37] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #45))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #37))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #34] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #34]) #("(json2yaml.rb is in the gn" 0 26 (:parent #39)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("server" 0 6 (:parent #43))) #("repo). For the current API definition\nsee " 0 42 (:parent #39)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #45))) #("documentation.\n" 0 15 (:parent #39))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #23] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #32))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #32]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #35]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #38))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #23] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #33))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #33] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #36))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #36]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #39]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #42)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #42] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #42)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #42] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #48))) #(".\n" 0 2 (:parent #42))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #33] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #37))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #37]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #40]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #43)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #43] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #47))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #43)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #43] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #49))) #(".\n" 0 2 (:parent #43))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #40]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #44))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #40] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #40]) #("and, for example, in the method run" 0 35 (:parent #46)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #46] :use-brackets-p nil) #("rqtl" 0 4 (:parent #50))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #46] :use-brackets-p nil) #("geno" 0 4 (:parent #51))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #46)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #46] :use-brackets-p nil) #("extra" 0 5 (:parent #53))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #46))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #40] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #40]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #48))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #40] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t]))))))] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #18))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) #13)]) #8)] :type unordered) . #0)] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [242 242 242 268 268 0 nil nil nil nil nil nil nil nil # nil nil #3]) (link (:standard-properties [242 nil 256 265 267 0 nil nil nil nil nil nil nil nil # nil nil #6] :type "custom-id" :type-explicit-p nil :path "webserver" :format bracket :raw-link "#webserver" :application nil :search-option nil) #("Webserver" 0 9 (:parent #9))) #("\n" 0 1 (:parent #6)))) (item (:standard-properties [268 268 271 307 307 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #24]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #27] :key "TITLE" :value "Installing GeneNetwork services"))) #19 (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #24] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #29))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #29]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #32]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #35))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #24] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #30))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #30]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #33]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #36)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #36] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #40))) #(").\n" 0 3 (:parent #36))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #33]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #37)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #37] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #37))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #33]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #38))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #33]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #39)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #39))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #33]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #40))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #33]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #41)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #41] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #41))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #24] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #31))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #31]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #34]) #("The main " 0 9 (:parent #37)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #37] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #41))) #("is built on " 0 12 (:parent #37)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #37] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #43))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #37)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #37] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #45))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #37)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #37] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #47))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #37)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #37] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #49)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #49] :use-brackets-p nil) #("page.html" 0 9 (:parent #53)))) #("in the " 0 7 (:parent #37)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #37] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #51))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #37)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #37] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #53)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #53] :use-brackets-p nil) #("select" 0 6 (:parent #57))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #53] :use-brackets-p nil) #("menu.js" 0 7 (:parent #58)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #37)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #37] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #55)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #55] :use-brackets-p nil) #("select" 0 6 (:parent #59))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #55] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #60)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #37)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #37] :use-brackets-p nil) #("server" 0 6 (:parent #57))) #("in the latest version, see " 0 27 (:parent #37)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #37] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #59))) #(".\n" 0 2 (:parent #37))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #34]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #38)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #38] :use-brackets-p nil) #("M2" 0 2 (:parent #42))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #38] :use-brackets-p nil) #("0606" 0 4 (:parent #43))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #38] :use-brackets-p nil) #("P" 0 1 (:parent #44))) #("&search" 0 7 (:parent #38)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #38] :use-brackets-p nil) #("terms" 0 5 (:parent #46))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #38] :use-brackets-p nil) #("or" 0 2 (:parent #47))) #("=&search" 0 8 (:parent #38)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #38] :use-brackets-p nil) #("terms" 0 5 (:parent #49))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #38] :use-brackets-p nil) #("and" 0 3 (:parent #50))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #38)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #38] :use-brackets-p nil) #("server" 0 6 (:parent #52))) #("). The logic is in\nsearch" 0 25 (:parent #38)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #38] :use-brackets-p nil) #("result.py" 0 9 (:parent #54))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #38)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #56)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #56] :use-brackets-p nil) #("result" 0 6 (:parent #60))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #56] :use-brackets-p nil) #("page.html" 0 9 (:parent #61)))) #(".\n" 0 2 (:parent #38))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #34]) #("For what happens at the database level see " 0 43 (:parent #39)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #39] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #39))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #34]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #40)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #40] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #44)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("result" 0 6 (:parent #48))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("page.html" 0 9 (:parent #49)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #40)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #40] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #46))) #(".\n" 0 2 (:parent #40))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #24] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #32))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #32]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #35]) #("The " 0 4 (:parent #38)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #42))) #("is built on high performance " 0 29 (:parent #38)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #38] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #44))) #("with " 0 5 (:parent #38)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #46))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #38))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #35] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #35]) #("(json2yaml.rb is in the gn" 0 26 (:parent #40)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #40] :use-brackets-p nil) #("server" 0 6 (:parent #44))) #("repo). For the current API definition\nsee " 0 42 (:parent #40)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #40] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #46))) #("documentation.\n" 0 15 (:parent #40))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #24] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #33))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #33]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #36]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #39))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #24] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #34))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #34] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #37))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #37]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #40]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #43)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #43] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #43)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #43] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #49))) #(".\n" 0 2 (:parent #43))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #34] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #38))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #38]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #41]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #44)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #44] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #48))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #44)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #44] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #50))) #(".\n" 0 2 (:parent #44))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #41]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #45))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #41] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #41]) #("and, for example, in the method run" 0 35 (:parent #47)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #47] :use-brackets-p nil) #("rqtl" 0 4 (:parent #51))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #47] :use-brackets-p nil) #("geno" 0 4 (:parent #52))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #47)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #47] :use-brackets-p nil) #("extra" 0 5 (:parent #54))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #47))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #41] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #41]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #49))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #41] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t]))))))] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #19))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) #14)]) #9)] :type unordered) . #0)] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [271 271 271 307 307 0 nil nil nil nil nil nil nil nil # nil nil #4]) (link (:standard-properties [271 nil 289 304 306 0 nil nil nil nil nil nil nil nil # nil nil #7] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #10))) #("\n" 0 1 (:parent #7)))) (item (:standard-properties [307 307 310 330 330 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #25]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #28] :key "TITLE" :value "Installing GeneNetwork services"))) #20 (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #25] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #30))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #30]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #33]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #36))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #25] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #31))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #31]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #34]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #37)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #37] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #41))) #(").\n" 0 3 (:parent #37))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #34]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #38)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #38))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #34]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #39))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #34]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #40)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #40] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #40))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #34]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #41))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #34]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #42)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #42] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #42))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #25] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #32))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #32]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #35]) #("The main " 0 9 (:parent #38)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #42))) #("is built on " 0 12 (:parent #38)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #38] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #44))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #38)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #46))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #38)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #48))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #38)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #50)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #50] :use-brackets-p nil) #("page.html" 0 9 (:parent #54)))) #("in the " 0 7 (:parent #38)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #52))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #38)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #54)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #54] :use-brackets-p nil) #("select" 0 6 (:parent #58))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #54] :use-brackets-p nil) #("menu.js" 0 7 (:parent #59)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #38)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #38] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #56)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #56] :use-brackets-p nil) #("select" 0 6 (:parent #60))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #56] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #61)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #38)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #38] :use-brackets-p nil) #("server" 0 6 (:parent #58))) #("in the latest version, see " 0 27 (:parent #38)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #38] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #60))) #(".\n" 0 2 (:parent #38))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #35]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #39)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("M2" 0 2 (:parent #43))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("0606" 0 4 (:parent #44))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("P" 0 1 (:parent #45))) #("&search" 0 7 (:parent #39)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("terms" 0 5 (:parent #47))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("or" 0 2 (:parent #48))) #("=&search" 0 8 (:parent #39)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("terms" 0 5 (:parent #50))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("and" 0 3 (:parent #51))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #39)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("server" 0 6 (:parent #53))) #("). The logic is in\nsearch" 0 25 (:parent #39)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("result.py" 0 9 (:parent #55))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #39)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #57)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #57] :use-brackets-p nil) #("result" 0 6 (:parent #61))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #57] :use-brackets-p nil) #("page.html" 0 9 (:parent #62)))) #(".\n" 0 2 (:parent #39))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #35]) #("For what happens at the database level see " 0 43 (:parent #40)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #40] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #40))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #35]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #41)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #41] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #45)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #45] :use-brackets-p nil) #("result" 0 6 (:parent #49))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #45] :use-brackets-p nil) #("page.html" 0 9 (:parent #50)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #41)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #41] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #47))) #(".\n" 0 2 (:parent #41))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #25] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #33))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #33]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #36]) #("The " 0 4 (:parent #39)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #43))) #("is built on high performance " 0 29 (:parent #39)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #39] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #45))) #("with " 0 5 (:parent #39)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #47))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #39))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #36] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #36]) #("(json2yaml.rb is in the gn" 0 26 (:parent #41)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #41] :use-brackets-p nil) #("server" 0 6 (:parent #45))) #("repo). For the current API definition\nsee " 0 42 (:parent #41)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #41] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #47))) #("documentation.\n" 0 15 (:parent #41))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #25] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #34))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #34]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #37]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #40))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #25] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #35))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #35] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #38))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #38]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #41]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #44)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #44] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #44)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #44] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #50))) #(".\n" 0 2 (:parent #44))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #35] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #39))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #39]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #42]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #45)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #45] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #49))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #45)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #45] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #51))) #(".\n" 0 2 (:parent #45))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #42]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #46))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #42] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #42]) #("and, for example, in the method run" 0 35 (:parent #48)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #48] :use-brackets-p nil) #("rqtl" 0 4 (:parent #52))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #48] :use-brackets-p nil) #("geno" 0 4 (:parent #53))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #48)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #48] :use-brackets-p nil) #("extra" 0 5 (:parent #55))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #48))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #42] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #42]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #50))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #42] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t]))))))] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #20))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) #15)]) #10)] :type unordered) . #0)] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [310 310 310 330 330 0 nil nil nil nil nil nil nil nil # nil nil #5]) (link (:standard-properties [310 nil 321 327 329 0 nil nil nil nil nil nil nil nil # nil nil #8] :type "custom-id" :type-explicit-p nil :path "gnexec" :format bracket :raw-link "#gnexec" :application nil :search-option nil) #("GnExec" 0 6 (:parent #11))) #("\n" 0 1 (:parent #8)))) (item (:standard-properties [330 330 333 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #26]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #29] :key "TITLE" :value "Installing GeneNetwork services"))) #21 (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #26] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #31))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #31]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #34]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #37))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #26] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #32))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #32]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #35]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #38)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #38] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #42))) #(").\n" 0 3 (:parent #38))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #35]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #39)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #39))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #35]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #40))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #35]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #41)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #41] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #41))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #35]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #42))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #35]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #43)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #43] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #43))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #26] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #33))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #33]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #36]) #("The main " 0 9 (:parent #39)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #43))) #("is built on " 0 12 (:parent #39)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #39] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #45))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #39)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #47))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #39)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #49))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #39)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #51)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #51] :use-brackets-p nil) #("page.html" 0 9 (:parent #55)))) #("in the " 0 7 (:parent #39)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #53))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #39)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #55)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #55] :use-brackets-p nil) #("select" 0 6 (:parent #59))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #55] :use-brackets-p nil) #("menu.js" 0 7 (:parent #60)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #39)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #39] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #57)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #57] :use-brackets-p nil) #("select" 0 6 (:parent #61))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #57] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #62)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #39)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("server" 0 6 (:parent #59))) #("in the latest version, see " 0 27 (:parent #39)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #39] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #61))) #(".\n" 0 2 (:parent #39))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #36]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #40)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #40] :use-brackets-p nil) #("M2" 0 2 (:parent #44))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #40] :use-brackets-p nil) #("0606" 0 4 (:parent #45))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #40] :use-brackets-p nil) #("P" 0 1 (:parent #46))) #("&search" 0 7 (:parent #40)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #40] :use-brackets-p nil) #("terms" 0 5 (:parent #48))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #40] :use-brackets-p nil) #("or" 0 2 (:parent #49))) #("=&search" 0 8 (:parent #40)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #40] :use-brackets-p nil) #("terms" 0 5 (:parent #51))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #40] :use-brackets-p nil) #("and" 0 3 (:parent #52))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #40)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #40] :use-brackets-p nil) #("server" 0 6 (:parent #54))) #("). The logic is in\nsearch" 0 25 (:parent #40)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #40] :use-brackets-p nil) #("result.py" 0 9 (:parent #56))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #40)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #40] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #58)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #58] :use-brackets-p nil) #("result" 0 6 (:parent #62))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #58] :use-brackets-p nil) #("page.html" 0 9 (:parent #63)))) #(".\n" 0 2 (:parent #40))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #36]) #("For what happens at the database level see " 0 43 (:parent #41)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #41] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #41))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #36]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #42)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #42] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #46)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #46] :use-brackets-p nil) #("result" 0 6 (:parent #50))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #46] :use-brackets-p nil) #("page.html" 0 9 (:parent #51)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #42)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #42] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #48))) #(".\n" 0 2 (:parent #42))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #26] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #34))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #34]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #37]) #("The " 0 4 (:parent #40)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #40] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #44))) #("is built on high performance " 0 29 (:parent #40)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #40] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #46))) #("with " 0 5 (:parent #40)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #40] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #48))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #40))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #37] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #37]) #("(json2yaml.rb is in the gn" 0 26 (:parent #42)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #42] :use-brackets-p nil) #("server" 0 6 (:parent #46))) #("repo). For the current API definition\nsee " 0 42 (:parent #42)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #42] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #48))) #("documentation.\n" 0 15 (:parent #42))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #26] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #35))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #35]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #38]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #41))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #26] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #36))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #36] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #39))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #39]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #42]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #45)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #45] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #45)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #45] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #51))) #(".\n" 0 2 (:parent #45))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #36] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #40))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #40]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #43]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #46)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #46] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #50))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #46)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #46] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #52))) #(".\n" 0 2 (:parent #46))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #43]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #47))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #43] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #43]) #("and, for example, in the method run" 0 35 (:parent #49)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #49] :use-brackets-p nil) #("rqtl" 0 4 (:parent #53))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #49] :use-brackets-p nil) #("geno" 0 4 (:parent #54))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #49)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #49] :use-brackets-p nil) #("extra" 0 5 (:parent #56))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #49))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #43] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #43]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #51))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #43] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t]))))))] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #21))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) #16)]) #11)] :type unordered) . #0)] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [333 333 333 357 357 0 nil nil nil nil nil nil nil nil # nil nil #6]) (link (:standard-properties [333 nil 346 354 356 0 nil nil nil nil nil nil nil nil # nil nil #9] :type "custom-id" :type-explicit-p nil :path "database" :format bracket :raw-link "#database" :application nil :search-option nil) #("Database" 0 8 (:parent #12))) #("\n" 0 1 (:parent #9))) (plain-list (:standard-properties [357 357 357 421 421 0 nil nil nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #6] :type unordered) (item (:standard-properties [357 357 362 390 390 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #10] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [362 362 362 390 390 0 nil nil nil nil nil nil nil nil # nil nil #13]) (link (:standard-properties [362 nil 377 387 389 0 nil nil nil nil nil nil nil nil # nil nil #16] :type "custom-id" :type-explicit-p nil :path "phenotypes" :format bracket :raw-link "#phenotypes" :application nil :search-option nil) #("Phenotypes" 0 10 (:parent #19))) #("\n" 0 1 (:parent #16)))) (item (:standard-properties [390 390 395 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #10] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [395 395 395 421 421 0 nil nil nil nil nil nil nil nil # nil nil #14]) (link (:standard-properties [395 nil 409 418 420 0 nil nil nil nil nil nil nil nil # nil nil #17] :type "custom-id" :type-explicit-p nil :path "genotypes" :format bracket :raw-link "#genotypes" :application nil :search-option nil) #("Genotypes" 0 9 (:parent #20))) #("\n" 0 1 (:parent #17))))))) "") org-export-data((plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #15]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #18] :key "TITLE" :value "Installing GeneNetwork services"))) #10 (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #15] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #20))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #20]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #23]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #26))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #15] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #21))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #21]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #24]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #27)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #27] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #31))) #(").\n" 0 3 (:parent #27))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #24]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #28)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #28] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #28))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #24]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #29))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #24]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #30)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #30] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #30))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #24]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #31))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #24]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #32)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #32] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #32))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #15] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #22))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #22]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #25]) #("The main " 0 9 (:parent #28)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #28] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #32))) #("is built on " 0 12 (:parent #28)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #28] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #34))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #28)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #28] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #36))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #28)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #28] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #38))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #28)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #28] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #40)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #40] :use-brackets-p nil) #("page.html" 0 9 (:parent #44)))) #("in the " 0 7 (:parent #28)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #28] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #42))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #28)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #28] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #44)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("select" 0 6 (:parent #48))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("menu.js" 0 7 (:parent #49)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #28)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #28] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #46)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #46] :use-brackets-p nil) #("select" 0 6 (:parent #50))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #46] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #51)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #28)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #28] :use-brackets-p nil) #("server" 0 6 (:parent #48))) #("in the latest version, see " 0 27 (:parent #28)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #28] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #50))) #(".\n" 0 2 (:parent #28))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #25]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #29)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #29] :use-brackets-p nil) #("M2" 0 2 (:parent #33))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #29] :use-brackets-p nil) #("0606" 0 4 (:parent #34))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #29] :use-brackets-p nil) #("P" 0 1 (:parent #35))) #("&search" 0 7 (:parent #29)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #29] :use-brackets-p nil) #("terms" 0 5 (:parent #37))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #29] :use-brackets-p nil) #("or" 0 2 (:parent #38))) #("=&search" 0 8 (:parent #29)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #29] :use-brackets-p nil) #("terms" 0 5 (:parent #40))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #29] :use-brackets-p nil) #("and" 0 3 (:parent #41))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #29)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #29] :use-brackets-p nil) #("server" 0 6 (:parent #43))) #("). The logic is in\nsearch" 0 25 (:parent #29)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #29] :use-brackets-p nil) #("result.py" 0 9 (:parent #45))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #29)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #29] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #47)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #47] :use-brackets-p nil) #("result" 0 6 (:parent #51))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #47] :use-brackets-p nil) #("page.html" 0 9 (:parent #52)))) #(".\n" 0 2 (:parent #29))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #25]) #("For what happens at the database level see " 0 43 (:parent #30)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #30] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #30))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #25]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #31)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #31] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #35)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #35] :use-brackets-p nil) #("result" 0 6 (:parent #39))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #35] :use-brackets-p nil) #("page.html" 0 9 (:parent #40)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #31)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #31] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #37))) #(".\n" 0 2 (:parent #31))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #15] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #23))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #23]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #26]) #("The " 0 4 (:parent #29)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #29] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #33))) #("is built on high performance " 0 29 (:parent #29)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #29] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #35))) #("with " 0 5 (:parent #29)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #29] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #37))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #29))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #26] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #26]) #("(json2yaml.rb is in the gn" 0 26 (:parent #31)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #31] :use-brackets-p nil) #("server" 0 6 (:parent #35))) #("repo). For the current API definition\nsee " 0 42 (:parent #31)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #31] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #37))) #("documentation.\n" 0 15 (:parent #31))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #15] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #24))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #24]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #27]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #30))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #15] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #25))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #25] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #28))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #28]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #31]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #34)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #34] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #34)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #34] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #40))) #(".\n" 0 2 (:parent #34))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #25] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #29))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #29]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #32]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #35)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #35] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #39))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #35)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #35] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #41))) #(".\n" 0 2 (:parent #35))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #32]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #36))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #32] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #32]) #("and, for example, in the method run" 0 35 (:parent #38)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #38] :use-brackets-p nil) #("rqtl" 0 4 (:parent #42))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #38] :use-brackets-p nil) #("geno" 0 4 (:parent #43))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #38)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #38] :use-brackets-p nil) #("extra" 0 5 (:parent #45))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #38))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #32] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #32]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #40))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #32] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t]))))))] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #10))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) #5)]) #0)] :type unordered) (item (:standard-properties [121 121 124 156 156 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #0] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [124 124 124 156 156 0 nil nil nil nil nil nil nil nil # nil nil #3]) (link (:standard-properties [124 nil 141 153 155 0 nil nil nil nil nil nil nil nil # nil nil #6] :type "custom-id" :type-explicit-p nil :path "introduction" :format bracket :raw-link "#introduction" :application nil :search-option nil) #("Introduction" 0 12 (:parent #9))) #("\n" 0 1 (:parent #6)))) (item (:standard-properties [156 156 159 239 239 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #0] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [159 159 159 239 239 0 nil nil nil nil nil nil nil nil # nil nil #4]) (link (:standard-properties [159 nil 200 236 238 0 nil nil nil nil nil nil nil nil # nil nil #7] :type "custom-id" :type-explicit-p nil :path "reproducibility-and-interoperability" :format bracket :raw-link "#reproducibility-and-interoperability" :application nil :search-option nil) #("Reproducibility and interoperability" 0 36 (:parent #10))) #("\n" 0 1 (:parent #7)))) (item (:standard-properties [239 239 242 268 268 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #0] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [242 242 242 268 268 0 nil nil nil nil nil nil nil nil # nil nil #5]) (link (:standard-properties [242 nil 256 265 267 0 nil nil nil nil nil nil nil nil # nil nil #8] :type "custom-id" :type-explicit-p nil :path "webserver" :format bracket :raw-link "#webserver" :application nil :search-option nil) #("Webserver" 0 9 (:parent #11))) #("\n" 0 1 (:parent #8)))) (item (:standard-properties [268 268 271 307 307 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #0] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [271 271 271 307 307 0 nil nil nil nil nil nil nil nil # nil nil #6]) (link (:standard-properties [271 nil 289 304 306 0 nil nil nil nil nil nil nil nil # nil nil #9] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #12))) #("\n" 0 1 (:parent #9)))) (item (:standard-properties [307 307 310 330 330 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #0] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [310 310 310 330 330 0 nil nil nil nil nil nil nil nil # nil nil #7]) (link (:standard-properties [310 nil 321 327 329 0 nil nil nil nil nil nil nil nil # nil nil #10] :type "custom-id" :type-explicit-p nil :path "gnexec" :format bracket :raw-link "#gnexec" :application nil :search-option nil) #("GnExec" 0 6 (:parent #13))) #("\n" 0 1 (:parent #10)))) (item (:standard-properties [330 330 333 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #0] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [333 333 333 357 357 0 nil nil nil nil nil nil nil nil # nil nil #8]) (link (:standard-properties [333 nil 346 354 356 0 nil nil nil nil nil nil nil nil # nil nil #11] :type "custom-id" :type-explicit-p nil :path "database" :format bracket :raw-link "#database" :application nil :search-option nil) #("Database" 0 8 (:parent #14))) #("\n" 0 1 (:parent #11))) (plain-list (:standard-properties [357 357 357 421 421 0 nil nil nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #8] :type unordered) (item (:standard-properties [357 357 362 390 390 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #12] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [362 362 362 390 390 0 nil nil nil nil nil nil nil nil # nil nil #15]) (link (:standard-properties [362 nil 377 387 389 0 nil nil nil nil nil nil nil nil # nil nil #18] :type "custom-id" :type-explicit-p nil :path "phenotypes" :format bracket :raw-link "#phenotypes" :application nil :search-option nil) #("Phenotypes" 0 10 (:parent #21))) #("\n" 0 1 (:parent #18)))) (item (:standard-properties [390 390 395 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #12] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [395 395 395 421 421 0 nil nil nil nil nil nil nil nil # nil nil #16]) (link (:standard-properties [395 nil 409 418 420 0 nil nil nil nil nil nil nil nil # nil nil #19] :type "custom-id" :type-explicit-p nil :path "genotypes" :format bracket :raw-link "#genotypes" :application nil :search-option nil) #("Genotypes" 0 9 (:parent #22))) #("\n" 0 1 (:parent #19))))))) (:export-options (body-only) :back-end #s(org-export-backend :name html :parent nil :transcoders ((bold . org-html-bold) (center-block . org-html-center-block) (clock . org-html-clock) (code . org-html-code) (drawer . org-html-drawer) (dynamic-block . org-html-dynamic-block) (entity . org-html-entity) (example-block . org-html-example-block) (export-block . org-html-export-block) (export-snippet . org-html-export-snippet) (fixed-width . org-html-fixed-width) (footnote-reference . org-html-footnote-reference) (headline . org-html-headline) (horizontal-rule . org-html-horizontal-rule) (inline-src-block . org-html-inline-src-block) (inlinetask . org-html-inlinetask) (inner-template . org-html-inner-template) (italic . org-html-italic) (item . org-html-item) (keyword . org-html-keyword) (latex-environment . org-html-latex-environment) (latex-fragment . org-html-latex-fragment) (line-break . org-html-line-break) (link . org-html-link) (node-property . org-html-node-property) (paragraph . org-html-paragraph) (plain-list . org-html-plain-list) (plain-text . org-html-plain-text) (planning . org-html-planning) (property-drawer . org-html-property-drawer) (quote-block . org-html-quote-block) (radio-target . org-html-radio-target) (section . org-html-section) (special-block . org-html-special-block) (src-block . org-html-src-block) (statistics-cookie . org-html-statistics-cookie) (strike-through . org-html-strike-through) (subscript . org-html-subscript) (superscript . org-html-superscript) (table . org-html-table) (table-cell . org-html-table-cell) (table-row . org-html-table-row) (target . org-html-target) (template . org-html-template) (timestamp . org-html-timestamp) (underline . org-html-underline) (verbatim . org-html-verbatim) (verse-block . org-html-verse-block)) :options ((:html-doctype "HTML_DOCTYPE" nil org-html-doctype) (:html-container "HTML_CONTAINER" nil org-html-container-element) (:html-content-class "HTML_CONTENT_CLASS" nil org-html-content-class) (:description "DESCRIPTION" nil nil newline) (:keywords "KEYWORDS" nil nil space) (:html-html5-fancy nil "html5-fancy" org-html-html5-fancy) (:html-link-use-abs-url nil "html-link-use-abs-url" org-html-link-use-abs-url) (:html-link-home "HTML_LINK_HOME" nil org-html-link-home) (:html-link-up "HTML_LINK_UP" nil org-html-link-up) (:html-mathjax "HTML_MATHJAX" nil "" space) (:html-equation-reference-format "HTML_EQUATION_REFERENCE_FORMAT" nil org-html-equation-reference-format t) (:html-postamble nil "html-postamble" org-html-postamble) (:html-preamble nil "html-preamble" org-html-preamble) (:html-head "HTML_HEAD" nil org-html-head newline) (:html-head-extra "HTML_HEAD_EXTRA" nil org-html-head-extra newline) (:subtitle "SUBTITLE" nil nil parse) (:html-head-include-default-style nil "html-style" org-html-head-include-default-style) (:html-head-include-scripts nil "html-scripts" org-html-head-include-scripts) (:html-allow-name-attribute-in-anchors nil nil org-html-allow-name-attribute-in-anchors) (:html-divs nil nil org-html-divs) (:html-checkbox-type nil nil org-html-checkbox-type) (:html-extension nil nil org-html-extension) (:html-footnote-format nil nil org-html-footnote-format) (:html-footnote-separator nil nil org-html-footnote-separator) (:html-footnotes-section nil nil org-html-footnotes-section) (:html-format-drawer-function nil nil org-html-format-drawer-function) (:html-format-headline-function nil nil org-html-format-headline-function) (:html-format-inlinetask-function nil nil org-html-format-inlinetask-function) (:html-home/up-format nil nil org-html-home/up-format) (:html-indent nil nil org-html-indent) (:html-infojs-options nil nil org-html-infojs-options) (:html-infojs-template nil nil org-html-infojs-template) (:html-inline-image-rules nil nil org-html-inline-image-rules) (:html-link-org-files-as-html nil nil org-html-link-org-files-as-html) (:html-mathjax-options nil nil org-html-mathjax-options) (:html-mathjax-template nil nil org-html-mathjax-template) (:html-metadata-timestamp-format nil nil org-html-metadata-timestamp-format) (:html-postamble-format nil nil org-html-postamble-format) (:html-preamble-format nil nil org-html-preamble-format) (:html-prefer-user-labels nil nil org-html-prefer-user-labels) (:html-self-link-headlines nil nil org-html-self-link-headlines) (:html-table-align-individual-fields nil nil org-html-table-align-individual-fields) (:html-table-caption-above nil nil org-html-table-caption-above) (:html-table-data-tags nil nil org-html-table-data-tags) (:html-table-header-tags nil nil org-html-table-header-tags) (:html-table-use-header-tags-for-first-column nil nil org-html-table-use-header-tags-for-first-column) (:html-tag-class-prefix nil nil org-html-tag-class-prefix) (:html-text-markup-alist nil nil org-html-text-markup-alist) (:html-todo-kwd-class-prefix nil nil org-html-todo-kwd-class-prefix) (:html-toplevel-hlevel nil nil org-html-toplevel-hlevel) (:html-use-infojs nil nil org-html-use-infojs) (:html-validation-link nil nil org-html-validation-link) (:html-viewport nil nil org-html-viewport) (:html-inline-images nil nil org-html-inline-images) (:html-table-attributes nil nil org-html-table-default-attributes) (:html-table-row-open-tag nil nil org-html-table-row-open-tag) (:html-table-row-close-tag nil nil org-html-table-row-close-tag) (:html-xml-declaration nil nil org-html-xml-declaration) (:html-wrap-src-lines nil nil org-html-wrap-src-lines) (:html-klipsify-src nil nil org-html-klipsify-src) (:html-klipse-css nil nil org-html-klipse-css) (:html-klipse-js nil nil org-html-klipse-js) (:html-klipse-selection-script nil nil org-html-klipse-selection-script) (:infojs-opt "INFOJS_OPT" nil nil) (:creator "CREATOR" nil org-html-creator-string) (:with-latex nil "tex" org-html-with-latex) (:latex-header "LATEX_HEADER" nil nil newline)) :filters ((:filter-options . org-html-infojs-install-script) (:filter-parse-tree . org-html-image-link-filter) (:filter-final-output . org-html-final-function)) :blocks nil :menu (104 "Export to HTML" ((72 "As HTML buffer" org-html-export-as-html) (104 "As HTML file" org-html-export-to-html) (111 "As HTML file and open" (lambda (a s v b) (if a (org-html-export-to-html t s v b) (org-open-file (org-html-export-to-html nil s v b)))))))) :translate-alist ((bold . org-html-bold) (center-block . org-html-center-block) (clock . org-html-clock) (code . org-html-code) (drawer . org-html-drawer) (dynamic-block . org-html-dynamic-block) (entity . org-html-entity) (example-block . org-html-example-block) (export-block . org-html-export-block) (export-snippet . org-html-export-snippet) (fixed-width . org-html-fixed-width) (footnote-reference . org-html-footnote-reference) (headline . org-html-headline) (horizontal-rule . org-html-horizontal-rule) (inline-src-block . org-html-inline-src-block) (inlinetask . org-html-inlinetask) (inner-template . org-html-inner-template) (italic . org-html-italic) (item . org-html-item) (keyword . org-html-keyword) (latex-environment . org-html-latex-environment) (latex-fragment . org-html-latex-fragment) (line-break . org-html-line-break) (link . org-html-link) (node-property . org-html-node-property) (paragraph . org-html-paragraph) (plain-list . org-html-plain-list) (plain-text . org-html-plain-text) (planning . org-html-planning) (property-drawer . org-html-property-drawer) (quote-block . org-html-quote-block) (radio-target . org-html-radio-target) (section . org-html-section) (special-block . org-html-special-block) (src-block . org-html-src-block) (statistics-cookie . org-html-statistics-cookie) (strike-through . org-html-strike-through) (subscript . org-html-subscript) (superscript . org-html-superscript) (table . org-html-table) (table-cell . org-html-table-cell) (table-row . org-html-table-row) (target . org-html-target) (template . org-html-template) (timestamp . org-html-timestamp) (underline . org-html-underline) (verbatim . org-html-verbatim) (verse-block . org-html-verse-block)) :exported-data # :input-buffer " *temp*" :input-file nil :html-doctype "xhtml-strict" :html-container "div" :html-content-class "content" :description nil :keywords nil :html-html5-fancy nil :html-link-use-abs-url nil :html-link-home "" :html-link-up "" :html-mathjax "" :html-equation-reference-format "\\eqref{%s}" :html-postamble auto :html-preamble t :html-head "" :html-head-extra "" :subtitle nil :html-head-include-default-style t :html-head-include-scripts nil :html-allow-name-attribute-in-anchors nil :html-divs ((preamble "div" "preamble") (content "div" "content") (postamble "div" "postamble")) :html-checkbox-type ascii :html-extension "html" :html-footnote-format "%s" :html-footnote-separator ", " :html-footnotes-section "
\n

%s:

\n
\n%s\n
\n
" :html-format-drawer-function #f(compiled-function (name contents) #) :html-format-headline-function org-html-format-headline-default-function :html-format-inlinetask-function org-html-format-inlinetask-default-function :html-home/up-format "
\n UP \n |\n HOME \n
" :html-indent nil :html-infojs-options ((path . "https://orgmode.org/org-info.js") (view . "info") (toc . :with-toc) (ftoc . "0") (tdepth . "max") (sdepth . "max") (mouse . "underline") (buttons . "0") (ltoc . "1") (up . :html-link-up) (home . :html-link-home)) :html-infojs-template "\n\n" :html-inline-image-rules (("file" . "\\(?:\\.\\(?:avif\\|gif\\|jp\\(?:e?g\\)\\|png\\|svg\\|webp\\)\\)") ("http" . "\\(?:\\.\\(?:avif\\|gif\\|jp\\(?:e?g\\)\\|png\\|svg\\|webp\\)\\)") ("https" . "\\(?:\\.\\(?:avif\\|gif\\|jp\\(?:e?g\\)\\|png\\|svg\\|webp\\)\\)")) :html-link-org-files-as-html t :html-mathjax-options ((path "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js") (scale 1.0) (align "center") (font "mathjax-modern") (overflow "overflow") (tags "ams") (indent "0em") (multlinewidth "85%") (tagindent ".8em") (tagside "right")) :html-mathjax-template "\n\n\n" :html-metadata-timestamp-format "%Y-%m-%d %a %H:%M" :html-postamble-format (("en" "

Author: %a (%e)

\n

Date: %d

\n

%c

\n

%v

")) :html-preamble-format (("en" "")) :html-prefer-user-labels nil :html-self-link-headlines nil :html-table-align-individual-fields t :html-table-caption-above t :html-table-data-tags ("" . "") :html-table-header-tags ("" . "") :html-table-use-header-tags-for-first-column nil :html-tag-class-prefix "" :html-text-markup-alist ((bold . "%s") (code . "%s") (italic . "%s") (strike-through . "%s") (underline . "%s") (verbatim . "%s")) :html-todo-kwd-class-prefix "" :html-toplevel-hlevel 2 :html-use-infojs when-configured :html-validation-link "Validate" :html-viewport ((width "device-width") (initial-scale "1") (minimum-scale "") (maximum-scale "") (user-scalable "")) :html-inline-images t :html-table-attributes (:border "2" :cellspacing "0" :cellpadding "6" :rules "groups" :frame "hsides") :html-table-row-open-tag "" :html-table-row-close-tag "" :html-xml-declaration (("html" . "") ("php" . "\"; ?>")) :html-wrap-src-lines nil :html-klipsify-src nil :html-klipse-css "https://storage.googleapis.com/app.klipse.tech/css/codemirror.css" :html-klipse-js "https://storage.googleapis.com/app.klipse.tech/plugin_prod/js/klipse_plugin.min.js" :html-klipse-selection-script "window.klipse_settings = {selector_eval_html: '.src-html',\n selector_eval_js: '.src-js',\n selector_eval_python_client: '.src-python',\n selector_eval_scheme: '.src-scheme',\n selector: '.src-clojure',\n selector_eval_ruby: '.src-ruby'};" :infojs-opt nil :creator "Emacs 30.1 (Org mode 9.7.11)" :with-latex t :latex-header nil :title (#("Installing GeneNetwork services" 0 31 (:parent #148))) :date nil :author (#("unknown" 0 7 (:parent #152))) :email "unknown@genenetwork-development" :language "en" :select-tags ("export") :exclude-tags ("noexport") :headline-levels 3 :preserve-breaks nil :section-numbers nil :time-stamp-file t :with-archived-trees headline :with-author t :expand-links t :with-broken-links nil :with-clocks nil :with-creator nil :with-date t :with-drawers (not "LOGBOOK") :with-email nil :with-emphasize t :with-entities t :with-fixed-width t :with-footnotes t :with-inlinetasks t :with-planning nil :with-priority nil :with-properties nil :with-smart-quotes nil :with-special-strings t :with-special-rows nil :with-statistics-cookies t :with-sub-superscript t :with-toc nil :with-tables t :with-tags t :with-tasks t :with-timestamps t :with-title t :with-todo-keywords t :with-cite-processors t :cite-export (basic nil nil) :bibliography nil :filter-body nil :filter-bold nil :filter-babel-call nil :filter-center-block nil :filter-clock nil :filter-code nil :filter-diary-sexp nil :filter-drawer nil :filter-dynamic-block nil :filter-entity nil :filter-example-block nil :filter-export-block nil :filter-export-snippet nil :filter-final-output (org-html-final-function) :filter-fixed-width nil :filter-footnote-definition nil :filter-footnote-reference nil :filter-headline nil :filter-horizontal-rule nil :filter-inline-babel-call nil :filter-inline-src-block nil :filter-inlinetask nil :filter-italic nil :filter-item nil :filter-keyword nil :filter-latex-environment nil :filter-latex-fragment nil :filter-line-break nil :filter-link nil :filter-node-property nil :filter-options (org-html-infojs-install-script) :filter-paragraph nil :filter-parse-tree (org-html-image-link-filter) :filter-plain-list nil :filter-plain-text nil :filter-planning nil :filter-property-drawer nil :filter-quote-block nil :filter-radio-target nil :filter-section nil :filter-special-block nil :filter-src-block nil :filter-statistics-cookie nil :filter-strike-through nil :filter-subscript nil :filter-superscript nil :filter-table nil :filter-table-cell nil :filter-table-row nil :filter-target nil :filter-timestamp nil :filter-underline nil :filter-verbatim nil :filter-verse-block nil :ignore-list nil :parse-tree (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #344]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #347] :key "TITLE" :value "Installing GeneNetwork services"))) (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil #344] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #348))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil #348]) (plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #351] :type unordered) (item (:standard-properties [121 121 124 156 156 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [124 124 124 156 156 0 nil nil nil nil nil nil nil nil # nil nil #357]) (link (:standard-properties [124 nil 141 153 155 0 nil nil nil nil nil nil nil nil # nil nil #360] :type "custom-id" :type-explicit-p nil :path "introduction" :format bracket :raw-link "#introduction" :application nil :search-option nil) #("Introduction" 0 12 (:parent #363))) #("\n" 0 1 (:parent #360)))) (item (:standard-properties [156 156 159 239 239 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [159 159 159 239 239 0 nil nil nil nil nil nil nil nil # nil nil #358]) (link (:standard-properties [159 nil 200 236 238 0 nil nil nil nil nil nil nil nil # nil nil #361] :type "custom-id" :type-explicit-p nil :path "reproducibility-and-interoperability" :format bracket :raw-link "#reproducibility-and-interoperability" :application nil :search-option nil) #("Reproducibility and interoperability" 0 36 (:parent #364))) #("\n" 0 1 (:parent #361)))) (item (:standard-properties [239 239 242 268 268 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [242 242 242 268 268 0 nil nil nil nil nil nil nil nil # nil nil #359]) (link (:standard-properties [242 nil 256 265 267 0 nil nil nil nil nil nil nil nil # nil nil #362] :type "custom-id" :type-explicit-p nil :path "webserver" :format bracket :raw-link "#webserver" :application nil :search-option nil) #("Webserver" 0 9 (:parent #365))) #("\n" 0 1 (:parent #362)))) (item (:standard-properties [268 268 271 307 307 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [271 271 271 307 307 0 nil nil nil nil nil nil nil nil # nil nil #360]) (link (:standard-properties [271 nil 289 304 306 0 nil nil nil nil nil nil nil nil # nil nil #363] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #366))) #("\n" 0 1 (:parent #363)))) (item (:standard-properties [307 307 310 330 330 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [310 310 310 330 330 0 nil nil nil nil nil nil nil nil # nil nil #361]) (link (:standard-properties [310 nil 321 327 329 0 nil nil nil nil nil nil nil nil # nil nil #364] :type "custom-id" :type-explicit-p nil :path "gnexec" :format bracket :raw-link "#gnexec" :application nil :search-option nil) #("GnExec" 0 6 (:parent #367))) #("\n" 0 1 (:parent #364)))) (item (:standard-properties [330 330 333 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [333 333 333 357 357 0 nil nil nil nil nil nil nil nil # nil nil #362]) (link (:standard-properties [333 nil 346 354 356 0 nil nil nil nil nil nil nil nil # nil nil #365] :type "custom-id" :type-explicit-p nil :path "database" :format bracket :raw-link "#database" :application nil :search-option nil) #("Database" 0 8 (:parent #368))) #("\n" 0 1 (:parent #365))) (plain-list (:standard-properties [357 357 357 421 421 0 nil nil nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #362] :type unordered) (item (:standard-properties [357 357 362 390 390 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #366] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [362 362 362 390 390 0 nil nil nil nil nil nil nil nil # nil nil #369]) (link (:standard-properties [362 nil 377 387 389 0 nil nil nil nil nil nil nil nil # nil nil #372] :type "custom-id" :type-explicit-p nil :path "phenotypes" :format bracket :raw-link "#phenotypes" :application nil :search-option nil) #("Phenotypes" 0 10 (:parent #375))) #("\n" 0 1 (:parent #372)))) (item (:standard-properties [390 390 395 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #366] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [395 395 395 421 421 0 nil nil nil nil nil nil nil nil # nil nil #370]) (link (:standard-properties [395 nil 409 418 420 0 nil nil nil nil nil nil nil nil # nil nil #373] :type "custom-id" :type-explicit-p nil :path "genotypes" :format bracket :raw-link "#genotypes" :application nil :search-option nil) #("Genotypes" 0 9 (:parent #376))) #("\n" 0 1 (:parent #373))))))))) (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #349))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #349]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #352]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #355))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #350))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #350]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #353]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #356)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #356] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #360))) #(").\n" 0 3 (:parent #356))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #357)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #357))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #358))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #359)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #359] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #359))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #360))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #361)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #361] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #361))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #351))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #351]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #354]) #("The main " 0 9 (:parent #357)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #361))) #("is built on " 0 12 (:parent #357)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #363))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #357)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #365))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #357)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #367))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #357)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #369)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #369] :use-brackets-p nil) #("page.html" 0 9 (:parent #373)))) #("in the " 0 7 (:parent #357)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #371))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #357)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #373)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #373] :use-brackets-p nil) #("select" 0 6 (:parent #377))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #373] :use-brackets-p nil) #("menu.js" 0 7 (:parent #378)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #357)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #375)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #375] :use-brackets-p nil) #("select" 0 6 (:parent #379))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #375] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #380)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #357)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #357] :use-brackets-p nil) #("server" 0 6 (:parent #377))) #("in the latest version, see " 0 27 (:parent #357)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #357] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #379))) #(".\n" 0 2 (:parent #357))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #354]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #358)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("M2" 0 2 (:parent #362))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("0606" 0 4 (:parent #363))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("P" 0 1 (:parent #364))) #("&search" 0 7 (:parent #358)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("terms" 0 5 (:parent #366))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("or" 0 2 (:parent #367))) #("=&search" 0 8 (:parent #358)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("terms" 0 5 (:parent #369))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("and" 0 3 (:parent #370))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #358)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("server" 0 6 (:parent #372))) #("). The logic is in\nsearch" 0 25 (:parent #358)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("result.py" 0 9 (:parent #374))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #358)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #358] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #376)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #376] :use-brackets-p nil) #("result" 0 6 (:parent #380))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #376] :use-brackets-p nil) #("page.html" 0 9 (:parent #381)))) #(".\n" 0 2 (:parent #358))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #354]) #("For what happens at the database level see " 0 43 (:parent #359)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #359] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #359))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #354]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #360)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #360] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #364)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #364] :use-brackets-p nil) #("result" 0 6 (:parent #368))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #364] :use-brackets-p nil) #("page.html" 0 9 (:parent #369)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #360)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #360] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #366))) #(".\n" 0 2 (:parent #360))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #352))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #352]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #355]) #("The " 0 4 (:parent #358)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #358] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #362))) #("is built on high performance " 0 29 (:parent #358)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #358] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #364))) #("with " 0 5 (:parent #358)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #358] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #366))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #358))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #355] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #355]) #("(json2yaml.rb is in the gn" 0 26 (:parent #360)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #360] :use-brackets-p nil) #("server" 0 6 (:parent #364))) #("repo). For the current API definition\nsee " 0 42 (:parent #360)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #360] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #366))) #("documentation.\n" 0 15 (:parent #360))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #353))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #353]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #356]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #359))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #344] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #354))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #354] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #357))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #357]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #360]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #363)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #363] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #363)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #363] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #369))) #(".\n" 0 2 (:parent #363))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #354] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #358))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #358]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #361]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #364)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #364] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #368))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #364)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #364] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #370))) #(".\n" 0 2 (:parent #364))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #361]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #365))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #361] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #361]) #("and, for example, in the method run" 0 35 (:parent #367)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #367] :use-brackets-p nil) #("rqtl" 0 4 (:parent #371))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #367] :use-brackets-p nil) #("geno" 0 4 (:parent #372))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #367)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #367] :use-brackets-p nil) #("extra" 0 5 (:parent #374))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #367))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #361] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #361]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #369))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #361] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t])))))) :headline-offset 0 :headline-numbering nil :id-alist nil :citations nil :id-local-cache #)) #f(compiled-function (element) #)((plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #15]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #18] :key "TITLE" :value "Installing GeneNetwork services"))) #10 (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #15] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #20))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #20]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #23]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #26))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #15] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #21))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #21]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #24]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #27)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #27] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #31))) #(").\n" 0 3 (:parent #27))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #24]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #28)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #28] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #28))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #24]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #29))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #24]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #30)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #30] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #30))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #24]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #31))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #24]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #32)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #32] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #32))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #15] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #22))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #22]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #25]) #("The main " 0 9 (:parent #28)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #28] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #32))) #("is built on " 0 12 (:parent #28)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #28] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #34))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #28)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #28] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #36))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #28)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #28] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #38))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #28)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #28] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #40)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #40] :use-brackets-p nil) #("page.html" 0 9 (:parent #44)))) #("in the " 0 7 (:parent #28)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #28] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #42))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #28)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #28] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #44)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("select" 0 6 (:parent #48))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #44] :use-brackets-p nil) #("menu.js" 0 7 (:parent #49)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #28)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #28] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #46)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #46] :use-brackets-p nil) #("select" 0 6 (:parent #50))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #46] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #51)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #28)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #28] :use-brackets-p nil) #("server" 0 6 (:parent #48))) #("in the latest version, see " 0 27 (:parent #28)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #28] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #50))) #(".\n" 0 2 (:parent #28))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #25]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #29)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #29] :use-brackets-p nil) #("M2" 0 2 (:parent #33))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #29] :use-brackets-p nil) #("0606" 0 4 (:parent #34))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #29] :use-brackets-p nil) #("P" 0 1 (:parent #35))) #("&search" 0 7 (:parent #29)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #29] :use-brackets-p nil) #("terms" 0 5 (:parent #37))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #29] :use-brackets-p nil) #("or" 0 2 (:parent #38))) #("=&search" 0 8 (:parent #29)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #29] :use-brackets-p nil) #("terms" 0 5 (:parent #40))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #29] :use-brackets-p nil) #("and" 0 3 (:parent #41))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #29)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #29] :use-brackets-p nil) #("server" 0 6 (:parent #43))) #("). The logic is in\nsearch" 0 25 (:parent #29)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #29] :use-brackets-p nil) #("result.py" 0 9 (:parent #45))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #29)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #29] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #47)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #47] :use-brackets-p nil) #("result" 0 6 (:parent #51))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #47] :use-brackets-p nil) #("page.html" 0 9 (:parent #52)))) #(".\n" 0 2 (:parent #29))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #25]) #("For what happens at the database level see " 0 43 (:parent #30)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #30] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #30))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #25]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #31)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #31] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #35)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #35] :use-brackets-p nil) #("result" 0 6 (:parent #39))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #35] :use-brackets-p nil) #("page.html" 0 9 (:parent #40)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #31)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #31] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #37))) #(".\n" 0 2 (:parent #31))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #15] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #23))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #23]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #26]) #("The " 0 4 (:parent #29)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #29] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #33))) #("is built on high performance " 0 29 (:parent #29)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #29] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #35))) #("with " 0 5 (:parent #29)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #29] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #37))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #29))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #26] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #26]) #("(json2yaml.rb is in the gn" 0 26 (:parent #31)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #31] :use-brackets-p nil) #("server" 0 6 (:parent #35))) #("repo). For the current API definition\nsee " 0 42 (:parent #31)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #31] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #37))) #("documentation.\n" 0 15 (:parent #31))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #15] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #24))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #24]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #27]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #30))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #15] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #25))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #25] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #28))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #28]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #31]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #34)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #34] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #34)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #34] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #40))) #(".\n" 0 2 (:parent #34))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #25] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #29))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #29]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #32]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #35)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #35] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #39))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #35)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #35] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #41))) #(".\n" 0 2 (:parent #35))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #32]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #36))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #32] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #32]) #("and, for example, in the method run" 0 35 (:parent #38)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #38] :use-brackets-p nil) #("rqtl" 0 4 (:parent #42))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #38] :use-brackets-p nil) #("geno" 0 4 (:parent #43))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #38)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #38] :use-brackets-p nil) #("extra" 0 5 (:parent #45))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #38))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #32] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #32]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #40))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #32] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t]))))))] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #10))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) #5)]) #0)] :type unordered) (item (:standard-properties [121 121 124 156 156 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #0] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [124 124 124 156 156 0 nil nil nil nil nil nil nil nil # nil nil #3]) (link (:standard-properties [124 nil 141 153 155 0 nil nil nil nil nil nil nil nil # nil nil #6] :type "custom-id" :type-explicit-p nil :path "introduction" :format bracket :raw-link "#introduction" :application nil :search-option nil) #("Introduction" 0 12 (:parent #9))) #("\n" 0 1 (:parent #6)))) (item (:standard-properties [156 156 159 239 239 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #0] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [159 159 159 239 239 0 nil nil nil nil nil nil nil nil # nil nil #4]) (link (:standard-properties [159 nil 200 236 238 0 nil nil nil nil nil nil nil nil # nil nil #7] :type "custom-id" :type-explicit-p nil :path "reproducibility-and-interoperability" :format bracket :raw-link "#reproducibility-and-interoperability" :application nil :search-option nil) #("Reproducibility and interoperability" 0 36 (:parent #10))) #("\n" 0 1 (:parent #7)))) (item (:standard-properties [239 239 242 268 268 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #0] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [242 242 242 268 268 0 nil nil nil nil nil nil nil nil # nil nil #5]) (link (:standard-properties [242 nil 256 265 267 0 nil nil nil nil nil nil nil nil # nil nil #8] :type "custom-id" :type-explicit-p nil :path "webserver" :format bracket :raw-link "#webserver" :application nil :search-option nil) #("Webserver" 0 9 (:parent #11))) #("\n" 0 1 (:parent #8)))) (item (:standard-properties [268 268 271 307 307 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #0] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [271 271 271 307 307 0 nil nil nil nil nil nil nil nil # nil nil #6]) (link (:standard-properties [271 nil 289 304 306 0 nil nil nil nil nil nil nil nil # nil nil #9] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #12))) #("\n" 0 1 (:parent #9)))) (item (:standard-properties [307 307 310 330 330 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #0] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [310 310 310 330 330 0 nil nil nil nil nil nil nil nil # nil nil #7]) (link (:standard-properties [310 nil 321 327 329 0 nil nil nil nil nil nil nil nil # nil nil #10] :type "custom-id" :type-explicit-p nil :path "gnexec" :format bracket :raw-link "#gnexec" :application nil :search-option nil) #("GnExec" 0 6 (:parent #13))) #("\n" 0 1 (:parent #10)))) (item (:standard-properties [330 330 333 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #0] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [333 333 333 357 357 0 nil nil nil nil nil nil nil nil # nil nil #8]) (link (:standard-properties [333 nil 346 354 356 0 nil nil nil nil nil nil nil nil # nil nil #11] :type "custom-id" :type-explicit-p nil :path "database" :format bracket :raw-link "#database" :application nil :search-option nil) #("Database" 0 8 (:parent #14))) #("\n" 0 1 (:parent #11))) (plain-list (:standard-properties [357 357 357 421 421 0 nil nil nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #8] :type unordered) (item (:standard-properties [357 357 362 390 390 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #12] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [362 362 362 390 390 0 nil nil nil nil nil nil nil nil # nil nil #15]) (link (:standard-properties [362 nil 377 387 389 0 nil nil nil nil nil nil nil nil # nil nil #18] :type "custom-id" :type-explicit-p nil :path "phenotypes" :format bracket :raw-link "#phenotypes" :application nil :search-option nil) #("Phenotypes" 0 10 (:parent #21))) #("\n" 0 1 (:parent #18)))) (item (:standard-properties [390 390 395 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #12] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [395 395 395 421 421 0 nil nil nil nil nil nil nil nil # nil nil #16]) (link (:standard-properties [395 nil 409 418 420 0 nil nil nil nil nil nil nil nil # nil nil #19] :type "custom-id" :type-explicit-p nil :path "genotypes" :format bracket :raw-link "#genotypes" :application nil :search-option nil) #("Genotypes" 0 9 (:parent #22))) #("\n" 0 1 (:parent #19)))))))) mapconcat(#f(compiled-function (element) #) ((plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) (section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #16]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #19] :key "TITLE" :value "Installing GeneNetwork services"))) #11 (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #16] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #21))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #21]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #24]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #27))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #16] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #22))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #22]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #25]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #28)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #28] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #32))) #(").\n" 0 3 (:parent #28))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #25]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #29)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #29] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #29))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #25]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #30))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #25]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #31)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #31] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #31))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #25]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #32))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #25]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #33)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #33] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #33))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #16] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #23))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #23]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #26]) #("The main " 0 9 (:parent #29)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #29] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #33))) #("is built on " 0 12 (:parent #29)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #29] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #35))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #29)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #29] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #37))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #29)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #29] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #39))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #29)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #29] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #41)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #41] :use-brackets-p nil) #("page.html" 0 9 (:parent #45)))) #("in the " 0 7 (:parent #29)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #29] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #43))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #29)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #29] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #45)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #45] :use-brackets-p nil) #("select" 0 6 (:parent #49))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #45] :use-brackets-p nil) #("menu.js" 0 7 (:parent #50)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #29)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #29] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #47)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #47] :use-brackets-p nil) #("select" 0 6 (:parent #51))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #47] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #52)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #29)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #29] :use-brackets-p nil) #("server" 0 6 (:parent #49))) #("in the latest version, see " 0 27 (:parent #29)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #29] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #51))) #(".\n" 0 2 (:parent #29))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #26]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #30)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #30] :use-brackets-p nil) #("M2" 0 2 (:parent #34))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #30] :use-brackets-p nil) #("0606" 0 4 (:parent #35))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #30] :use-brackets-p nil) #("P" 0 1 (:parent #36))) #("&search" 0 7 (:parent #30)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #30] :use-brackets-p nil) #("terms" 0 5 (:parent #38))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #30] :use-brackets-p nil) #("or" 0 2 (:parent #39))) #("=&search" 0 8 (:parent #30)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #30] :use-brackets-p nil) #("terms" 0 5 (:parent #41))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #30] :use-brackets-p nil) #("and" 0 3 (:parent #42))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #30)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #30] :use-brackets-p nil) #("server" 0 6 (:parent #44))) #("). The logic is in\nsearch" 0 25 (:parent #30)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #30] :use-brackets-p nil) #("result.py" 0 9 (:parent #46))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #30)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #30] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #48)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #48] :use-brackets-p nil) #("result" 0 6 (:parent #52))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #48] :use-brackets-p nil) #("page.html" 0 9 (:parent #53)))) #(".\n" 0 2 (:parent #30))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #26]) #("For what happens at the database level see " 0 43 (:parent #31)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #31] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #31))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #26]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #32)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #32] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #36)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #36] :use-brackets-p nil) #("result" 0 6 (:parent #40))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #36] :use-brackets-p nil) #("page.html" 0 9 (:parent #41)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #32)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #32] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #38))) #(".\n" 0 2 (:parent #32))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #16] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #24))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #24]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #27]) #("The " 0 4 (:parent #30)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #30] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #34))) #("is built on high performance " 0 29 (:parent #30)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #30] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #36))) #("with " 0 5 (:parent #30)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #30] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #38))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #30))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #27] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #27]) #("(json2yaml.rb is in the gn" 0 26 (:parent #32)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #32] :use-brackets-p nil) #("server" 0 6 (:parent #36))) #("repo). For the current API definition\nsee " 0 42 (:parent #32)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #32] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #38))) #("documentation.\n" 0 15 (:parent #32))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #16] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #25))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #25]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #28]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #31))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #16] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #26))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #26] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #29))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #29]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #32]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #35)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #35] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #35)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #35] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #41))) #(".\n" 0 2 (:parent #35))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #26] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #30))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #30]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #33]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #36)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #36] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #40))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #36)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #36] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #42))) #(".\n" 0 2 (:parent #36))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #33]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #37))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #33] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #33]) #("and, for example, in the method run" 0 35 (:parent #39)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("rqtl" 0 4 (:parent #43))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("geno" 0 4 (:parent #44))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #39)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("extra" 0 5 (:parent #46))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #39))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #33] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #33]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #41))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #33] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t]))))))] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #11))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) #6)]) . #0)] :type unordered) (item (:standard-properties [121 121 124 156 156 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #1] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [124 124 124 156 156 0 nil nil nil nil nil nil nil nil # nil nil #4]) (link (:standard-properties [124 nil 141 153 155 0 nil nil nil nil nil nil nil nil # nil nil #7] :type "custom-id" :type-explicit-p nil :path "introduction" :format bracket :raw-link "#introduction" :application nil :search-option nil) #("Introduction" 0 12 (:parent #10))) #("\n" 0 1 (:parent #7)))) (item (:standard-properties [156 156 159 239 239 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #1] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [159 159 159 239 239 0 nil nil nil nil nil nil nil nil # nil nil #5]) (link (:standard-properties [159 nil 200 236 238 0 nil nil nil nil nil nil nil nil # nil nil #8] :type "custom-id" :type-explicit-p nil :path "reproducibility-and-interoperability" :format bracket :raw-link "#reproducibility-and-interoperability" :application nil :search-option nil) #("Reproducibility and interoperability" 0 36 (:parent #11))) #("\n" 0 1 (:parent #8)))) (item (:standard-properties [239 239 242 268 268 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #1] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [242 242 242 268 268 0 nil nil nil nil nil nil nil nil # nil nil #6]) (link (:standard-properties [242 nil 256 265 267 0 nil nil nil nil nil nil nil nil # nil nil #9] :type "custom-id" :type-explicit-p nil :path "webserver" :format bracket :raw-link "#webserver" :application nil :search-option nil) #("Webserver" 0 9 (:parent #12))) #("\n" 0 1 (:parent #9)))) (item (:standard-properties [268 268 271 307 307 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #1] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [271 271 271 307 307 0 nil nil nil nil nil nil nil nil # nil nil #7]) (link (:standard-properties [271 nil 289 304 306 0 nil nil nil nil nil nil nil nil # nil nil #10] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #13))) #("\n" 0 1 (:parent #10)))) (item (:standard-properties [307 307 310 330 330 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #1] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [310 310 310 330 330 0 nil nil nil nil nil nil nil nil # nil nil #8]) (link (:standard-properties [310 nil 321 327 329 0 nil nil nil nil nil nil nil nil # nil nil #11] :type "custom-id" :type-explicit-p nil :path "gnexec" :format bracket :raw-link "#gnexec" :application nil :search-option nil) #("GnExec" 0 6 (:parent #14))) #("\n" 0 1 (:parent #11)))) (item (:standard-properties [330 330 333 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #1] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [333 333 333 357 357 0 nil nil nil nil nil nil nil nil # nil nil #9]) (link (:standard-properties [333 nil 346 354 356 0 nil nil nil nil nil nil nil nil # nil nil #12] :type "custom-id" :type-explicit-p nil :path "database" :format bracket :raw-link "#database" :application nil :search-option nil) #("Database" 0 8 (:parent #15))) #("\n" 0 1 (:parent #12))) (plain-list (:standard-properties [357 357 357 421 421 0 nil nil nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #9] :type unordered) (item (:standard-properties [357 357 362 390 390 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #13] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [362 362 362 390 390 0 nil nil nil nil nil nil nil nil # nil nil #16]) (link (:standard-properties [362 nil 377 387 389 0 nil nil nil nil nil nil nil nil # nil nil #19] :type "custom-id" :type-explicit-p nil :path "phenotypes" :format bracket :raw-link "#phenotypes" :application nil :search-option nil) #("Phenotypes" 0 10 (:parent #22))) #("\n" 0 1 (:parent #19)))) (item (:standard-properties [390 390 395 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #13] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [395 395 395 421 421 0 nil nil nil nil nil nil nil nil # nil nil #17]) (link (:standard-properties [395 nil 409 418 420 0 nil nil nil nil nil nil nil nil # nil nil #20] :type "custom-id" :type-explicit-p nil :path "genotypes" :format bracket :raw-link "#genotypes" :application nil :search-option nil) #("Genotypes" 0 9 (:parent #23))) #("\n" 0 1 (:parent #20)))))))) "") org-export-data((section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #10]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #13] :key "TITLE" :value "Installing GeneNetwork services"))) #5 (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #10] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #15))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #15]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #18]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #21))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #10] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #16))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #16]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #19]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #22)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #22] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #26))) #(").\n" 0 3 (:parent #22))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #19]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #23)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #23] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #23))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #19]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #24))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #19]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #25)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #25] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #25))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #19]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #26))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #19]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #27)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #27] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #27))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #10] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #17))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #17]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #20]) #("The main " 0 9 (:parent #23)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #23] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #27))) #("is built on " 0 12 (:parent #23)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #23] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #29))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #23)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #23] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #31))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #23)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #23] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #33))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #23)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #23] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #35)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #35] :use-brackets-p nil) #("page.html" 0 9 (:parent #39)))) #("in the " 0 7 (:parent #23)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #23] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #37))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #23)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #23] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #39)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("select" 0 6 (:parent #43))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("menu.js" 0 7 (:parent #44)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #23)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #23] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #41)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #41] :use-brackets-p nil) #("select" 0 6 (:parent #45))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #41] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #46)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #23)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #23] :use-brackets-p nil) #("server" 0 6 (:parent #43))) #("in the latest version, see " 0 27 (:parent #23)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #23] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #45))) #(".\n" 0 2 (:parent #23))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #20]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #24)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #24] :use-brackets-p nil) #("M2" 0 2 (:parent #28))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #24] :use-brackets-p nil) #("0606" 0 4 (:parent #29))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #24] :use-brackets-p nil) #("P" 0 1 (:parent #30))) #("&search" 0 7 (:parent #24)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #24] :use-brackets-p nil) #("terms" 0 5 (:parent #32))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #24] :use-brackets-p nil) #("or" 0 2 (:parent #33))) #("=&search" 0 8 (:parent #24)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #24] :use-brackets-p nil) #("terms" 0 5 (:parent #35))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #24] :use-brackets-p nil) #("and" 0 3 (:parent #36))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #24)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #24] :use-brackets-p nil) #("server" 0 6 (:parent #38))) #("). The logic is in\nsearch" 0 25 (:parent #24)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #24] :use-brackets-p nil) #("result.py" 0 9 (:parent #40))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #24)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #24] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #42)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #42] :use-brackets-p nil) #("result" 0 6 (:parent #46))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #42] :use-brackets-p nil) #("page.html" 0 9 (:parent #47)))) #(".\n" 0 2 (:parent #24))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #20]) #("For what happens at the database level see " 0 43 (:parent #25)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #25] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #25))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #20]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #26)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #26] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #30)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #30] :use-brackets-p nil) #("result" 0 6 (:parent #34))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #30] :use-brackets-p nil) #("page.html" 0 9 (:parent #35)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #26)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #26] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #32))) #(".\n" 0 2 (:parent #26))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #10] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #18))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #18]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #21]) #("The " 0 4 (:parent #24)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #24] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #28))) #("is built on high performance " 0 29 (:parent #24)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #24] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #30))) #("with " 0 5 (:parent #24)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #24] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #32))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #24))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #21] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #21]) #("(json2yaml.rb is in the gn" 0 26 (:parent #26)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #26] :use-brackets-p nil) #("server" 0 6 (:parent #30))) #("repo). For the current API definition\nsee " 0 42 (:parent #26)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #26] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #32))) #("documentation.\n" 0 15 (:parent #26))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #10] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #19))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #19]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #22]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #25))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #10] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #20))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #20] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #23))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #23]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #26]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #29)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #29] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #29)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #29] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #35))) #(".\n" 0 2 (:parent #29))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #20] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #24))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #24]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #27]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #30)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #30] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #34))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #30)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #30] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #36))) #(".\n" 0 2 (:parent #30))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #27]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #31))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #27] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #27]) #("and, for example, in the method run" 0 35 (:parent #33)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #33] :use-brackets-p nil) #("rqtl" 0 4 (:parent #37))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #33] :use-brackets-p nil) #("geno" 0 4 (:parent #38))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #33)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #33] :use-brackets-p nil) #("extra" 0 5 (:parent #40))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #33))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #27] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #27]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #35))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #27] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t]))))))] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #5))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) #0)]) (plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #0] :type unordered) (item (:standard-properties [121 121 124 156 156 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #3] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [124 124 124 156 156 0 nil nil nil nil nil nil nil nil # nil nil #6]) (link (:standard-properties [124 nil 141 153 155 0 nil nil nil nil nil nil nil nil # nil nil #9] :type "custom-id" :type-explicit-p nil :path "introduction" :format bracket :raw-link "#introduction" :application nil :search-option nil) #("Introduction" 0 12 (:parent #12))) #("\n" 0 1 (:parent #9)))) (item (:standard-properties [156 156 159 239 239 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #3] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [159 159 159 239 239 0 nil nil nil nil nil nil nil nil # nil nil #7]) (link (:standard-properties [159 nil 200 236 238 0 nil nil nil nil nil nil nil nil # nil nil #10] :type "custom-id" :type-explicit-p nil :path "reproducibility-and-interoperability" :format bracket :raw-link "#reproducibility-and-interoperability" :application nil :search-option nil) #("Reproducibility and interoperability" 0 36 (:parent #13))) #("\n" 0 1 (:parent #10)))) (item (:standard-properties [239 239 242 268 268 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #3] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [242 242 242 268 268 0 nil nil nil nil nil nil nil nil # nil nil #8]) (link (:standard-properties [242 nil 256 265 267 0 nil nil nil nil nil nil nil nil # nil nil #11] :type "custom-id" :type-explicit-p nil :path "webserver" :format bracket :raw-link "#webserver" :application nil :search-option nil) #("Webserver" 0 9 (:parent #14))) #("\n" 0 1 (:parent #11)))) (item (:standard-properties [268 268 271 307 307 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #3] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [271 271 271 307 307 0 nil nil nil nil nil nil nil nil # nil nil #9]) (link (:standard-properties [271 nil 289 304 306 0 nil nil nil nil nil nil nil nil # nil nil #12] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #15))) #("\n" 0 1 (:parent #12)))) (item (:standard-properties [307 307 310 330 330 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #3] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [310 310 310 330 330 0 nil nil nil nil nil nil nil nil # nil nil #10]) (link (:standard-properties [310 nil 321 327 329 0 nil nil nil nil nil nil nil nil # nil nil #13] :type "custom-id" :type-explicit-p nil :path "gnexec" :format bracket :raw-link "#gnexec" :application nil :search-option nil) #("GnExec" 0 6 (:parent #16))) #("\n" 0 1 (:parent #13)))) (item (:standard-properties [330 330 333 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #3] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [333 333 333 357 357 0 nil nil nil nil nil nil nil nil # nil nil #11]) (link (:standard-properties [333 nil 346 354 356 0 nil nil nil nil nil nil nil nil # nil nil #14] :type "custom-id" :type-explicit-p nil :path "database" :format bracket :raw-link "#database" :application nil :search-option nil) #("Database" 0 8 (:parent #17))) #("\n" 0 1 (:parent #14))) (plain-list (:standard-properties [357 357 357 421 421 0 nil nil nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #11] :type unordered) (item (:standard-properties [357 357 362 390 390 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #15] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [362 362 362 390 390 0 nil nil nil nil nil nil nil nil # nil nil #18]) (link (:standard-properties [362 nil 377 387 389 0 nil nil nil nil nil nil nil nil # nil nil #21] :type "custom-id" :type-explicit-p nil :path "phenotypes" :format bracket :raw-link "#phenotypes" :application nil :search-option nil) #("Phenotypes" 0 10 (:parent #24))) #("\n" 0 1 (:parent #21)))) (item (:standard-properties [390 390 395 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #15] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [395 395 395 421 421 0 nil nil nil nil nil nil nil nil # nil nil #19]) (link (:standard-properties [395 nil 409 418 420 0 nil nil nil nil nil nil nil nil # nil nil #22] :type "custom-id" :type-explicit-p nil :path "genotypes" :format bracket :raw-link "#genotypes" :application nil :search-option nil) #("Genotypes" 0 9 (:parent #25))) #("\n" 0 1 (:parent #22)))))))) (:export-options (body-only) :back-end #s(org-export-backend :name html :parent nil :transcoders ((bold . org-html-bold) (center-block . org-html-center-block) (clock . org-html-clock) (code . org-html-code) (drawer . org-html-drawer) (dynamic-block . org-html-dynamic-block) (entity . org-html-entity) (example-block . org-html-example-block) (export-block . org-html-export-block) (export-snippet . org-html-export-snippet) (fixed-width . org-html-fixed-width) (footnote-reference . org-html-footnote-reference) (headline . org-html-headline) (horizontal-rule . org-html-horizontal-rule) (inline-src-block . org-html-inline-src-block) (inlinetask . org-html-inlinetask) (inner-template . org-html-inner-template) (italic . org-html-italic) (item . org-html-item) (keyword . org-html-keyword) (latex-environment . org-html-latex-environment) (latex-fragment . org-html-latex-fragment) (line-break . org-html-line-break) (link . org-html-link) (node-property . org-html-node-property) (paragraph . org-html-paragraph) (plain-list . org-html-plain-list) (plain-text . org-html-plain-text) (planning . org-html-planning) (property-drawer . org-html-property-drawer) (quote-block . org-html-quote-block) (radio-target . org-html-radio-target) (section . org-html-section) (special-block . org-html-special-block) (src-block . org-html-src-block) (statistics-cookie . org-html-statistics-cookie) (strike-through . org-html-strike-through) (subscript . org-html-subscript) (superscript . org-html-superscript) (table . org-html-table) (table-cell . org-html-table-cell) (table-row . org-html-table-row) (target . org-html-target) (template . org-html-template) (timestamp . org-html-timestamp) (underline . org-html-underline) (verbatim . org-html-verbatim) (verse-block . org-html-verse-block)) :options ((:html-doctype "HTML_DOCTYPE" nil org-html-doctype) (:html-container "HTML_CONTAINER" nil org-html-container-element) (:html-content-class "HTML_CONTENT_CLASS" nil org-html-content-class) (:description "DESCRIPTION" nil nil newline) (:keywords "KEYWORDS" nil nil space) (:html-html5-fancy nil "html5-fancy" org-html-html5-fancy) (:html-link-use-abs-url nil "html-link-use-abs-url" org-html-link-use-abs-url) (:html-link-home "HTML_LINK_HOME" nil org-html-link-home) (:html-link-up "HTML_LINK_UP" nil org-html-link-up) (:html-mathjax "HTML_MATHJAX" nil "" space) (:html-equation-reference-format "HTML_EQUATION_REFERENCE_FORMAT" nil org-html-equation-reference-format t) (:html-postamble nil "html-postamble" org-html-postamble) (:html-preamble nil "html-preamble" org-html-preamble) (:html-head "HTML_HEAD" nil org-html-head newline) (:html-head-extra "HTML_HEAD_EXTRA" nil org-html-head-extra newline) (:subtitle "SUBTITLE" nil nil parse) (:html-head-include-default-style nil "html-style" org-html-head-include-default-style) (:html-head-include-scripts nil "html-scripts" org-html-head-include-scripts) (:html-allow-name-attribute-in-anchors nil nil org-html-allow-name-attribute-in-anchors) (:html-divs nil nil org-html-divs) (:html-checkbox-type nil nil org-html-checkbox-type) (:html-extension nil nil org-html-extension) (:html-footnote-format nil nil org-html-footnote-format) (:html-footnote-separator nil nil org-html-footnote-separator) (:html-footnotes-section nil nil org-html-footnotes-section) (:html-format-drawer-function nil nil org-html-format-drawer-function) (:html-format-headline-function nil nil org-html-format-headline-function) (:html-format-inlinetask-function nil nil org-html-format-inlinetask-function) (:html-home/up-format nil nil org-html-home/up-format) (:html-indent nil nil org-html-indent) (:html-infojs-options nil nil org-html-infojs-options) (:html-infojs-template nil nil org-html-infojs-template) (:html-inline-image-rules nil nil org-html-inline-image-rules) (:html-link-org-files-as-html nil nil org-html-link-org-files-as-html) (:html-mathjax-options nil nil org-html-mathjax-options) (:html-mathjax-template nil nil org-html-mathjax-template) (:html-metadata-timestamp-format nil nil org-html-metadata-timestamp-format) (:html-postamble-format nil nil org-html-postamble-format) (:html-preamble-format nil nil org-html-preamble-format) (:html-prefer-user-labels nil nil org-html-prefer-user-labels) (:html-self-link-headlines nil nil org-html-self-link-headlines) (:html-table-align-individual-fields nil nil org-html-table-align-individual-fields) (:html-table-caption-above nil nil org-html-table-caption-above) (:html-table-data-tags nil nil org-html-table-data-tags) (:html-table-header-tags nil nil org-html-table-header-tags) (:html-table-use-header-tags-for-first-column nil nil org-html-table-use-header-tags-for-first-column) (:html-tag-class-prefix nil nil org-html-tag-class-prefix) (:html-text-markup-alist nil nil org-html-text-markup-alist) (:html-todo-kwd-class-prefix nil nil org-html-todo-kwd-class-prefix) (:html-toplevel-hlevel nil nil org-html-toplevel-hlevel) (:html-use-infojs nil nil org-html-use-infojs) (:html-validation-link nil nil org-html-validation-link) (:html-viewport nil nil org-html-viewport) (:html-inline-images nil nil org-html-inline-images) (:html-table-attributes nil nil org-html-table-default-attributes) (:html-table-row-open-tag nil nil org-html-table-row-open-tag) (:html-table-row-close-tag nil nil org-html-table-row-close-tag) (:html-xml-declaration nil nil org-html-xml-declaration) (:html-wrap-src-lines nil nil org-html-wrap-src-lines) (:html-klipsify-src nil nil org-html-klipsify-src) (:html-klipse-css nil nil org-html-klipse-css) (:html-klipse-js nil nil org-html-klipse-js) (:html-klipse-selection-script nil nil org-html-klipse-selection-script) (:infojs-opt "INFOJS_OPT" nil nil) (:creator "CREATOR" nil org-html-creator-string) (:with-latex nil "tex" org-html-with-latex) (:latex-header "LATEX_HEADER" nil nil newline)) :filters ((:filter-options . org-html-infojs-install-script) (:filter-parse-tree . org-html-image-link-filter) (:filter-final-output . org-html-final-function)) :blocks nil :menu (104 "Export to HTML" ((72 "As HTML buffer" org-html-export-as-html) (104 "As HTML file" org-html-export-to-html) (111 "As HTML file and open" (lambda (a s v b) (if a (org-html-export-to-html t s v b) (org-open-file (org-html-export-to-html nil s v b)))))))) :translate-alist ((bold . org-html-bold) (center-block . org-html-center-block) (clock . org-html-clock) (code . org-html-code) (drawer . org-html-drawer) (dynamic-block . org-html-dynamic-block) (entity . org-html-entity) (example-block . org-html-example-block) (export-block . org-html-export-block) (export-snippet . org-html-export-snippet) (fixed-width . org-html-fixed-width) (footnote-reference . org-html-footnote-reference) (headline . org-html-headline) (horizontal-rule . org-html-horizontal-rule) (inline-src-block . org-html-inline-src-block) (inlinetask . org-html-inlinetask) (inner-template . org-html-inner-template) (italic . org-html-italic) (item . org-html-item) (keyword . org-html-keyword) (latex-environment . org-html-latex-environment) (latex-fragment . org-html-latex-fragment) (line-break . org-html-line-break) (link . org-html-link) (node-property . org-html-node-property) (paragraph . org-html-paragraph) (plain-list . org-html-plain-list) (plain-text . org-html-plain-text) (planning . org-html-planning) (property-drawer . org-html-property-drawer) (quote-block . org-html-quote-block) (radio-target . org-html-radio-target) (section . org-html-section) (special-block . org-html-special-block) (src-block . org-html-src-block) (statistics-cookie . org-html-statistics-cookie) (strike-through . org-html-strike-through) (subscript . org-html-subscript) (superscript . org-html-superscript) (table . org-html-table) (table-cell . org-html-table-cell) (table-row . org-html-table-row) (target . org-html-target) (template . org-html-template) (timestamp . org-html-timestamp) (underline . org-html-underline) (verbatim . org-html-verbatim) (verse-block . org-html-verse-block)) :exported-data # :input-buffer " *temp*" :input-file nil :html-doctype "xhtml-strict" :html-container "div" :html-content-class "content" :description nil :keywords nil :html-html5-fancy nil :html-link-use-abs-url nil :html-link-home "" :html-link-up "" :html-mathjax "" :html-equation-reference-format "\\eqref{%s}" :html-postamble auto :html-preamble t :html-head "" :html-head-extra "" :subtitle nil :html-head-include-default-style t :html-head-include-scripts nil :html-allow-name-attribute-in-anchors nil :html-divs ((preamble "div" "preamble") (content "div" "content") (postamble "div" "postamble")) :html-checkbox-type ascii :html-extension "html" :html-footnote-format "%s" :html-footnote-separator ", " :html-footnotes-section "
\n

%s:

\n
\n%s\n
\n
" :html-format-drawer-function #f(compiled-function (name contents) #) :html-format-headline-function org-html-format-headline-default-function :html-format-inlinetask-function org-html-format-inlinetask-default-function :html-home/up-format "
\n UP \n |\n HOME \n
" :html-indent nil :html-infojs-options ((path . "https://orgmode.org/org-info.js") (view . "info") (toc . :with-toc) (ftoc . "0") (tdepth . "max") (sdepth . "max") (mouse . "underline") (buttons . "0") (ltoc . "1") (up . :html-link-up) (home . :html-link-home)) :html-infojs-template "\n\n" :html-inline-image-rules (("file" . "\\(?:\\.\\(?:avif\\|gif\\|jp\\(?:e?g\\)\\|png\\|svg\\|webp\\)\\)") ("http" . "\\(?:\\.\\(?:avif\\|gif\\|jp\\(?:e?g\\)\\|png\\|svg\\|webp\\)\\)") ("https" . "\\(?:\\.\\(?:avif\\|gif\\|jp\\(?:e?g\\)\\|png\\|svg\\|webp\\)\\)")) :html-link-org-files-as-html t :html-mathjax-options ((path "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js") (scale 1.0) (align "center") (font "mathjax-modern") (overflow "overflow") (tags "ams") (indent "0em") (multlinewidth "85%") (tagindent ".8em") (tagside "right")) :html-mathjax-template "\n\n\n" :html-metadata-timestamp-format "%Y-%m-%d %a %H:%M" :html-postamble-format (("en" "

Author: %a (%e)

\n

Date: %d

\n

%c

\n

%v

")) :html-preamble-format (("en" "")) :html-prefer-user-labels nil :html-self-link-headlines nil :html-table-align-individual-fields t :html-table-caption-above t :html-table-data-tags ("" . "") :html-table-header-tags ("" . "") :html-table-use-header-tags-for-first-column nil :html-tag-class-prefix "" :html-text-markup-alist ((bold . "%s") (code . "%s") (italic . "%s") (strike-through . "%s") (underline . "%s") (verbatim . "%s")) :html-todo-kwd-class-prefix "" :html-toplevel-hlevel 2 :html-use-infojs when-configured :html-validation-link "Validate" :html-viewport ((width "device-width") (initial-scale "1") (minimum-scale "") (maximum-scale "") (user-scalable "")) :html-inline-images t :html-table-attributes (:border "2" :cellspacing "0" :cellpadding "6" :rules "groups" :frame "hsides") :html-table-row-open-tag "" :html-table-row-close-tag "" :html-xml-declaration (("html" . "") ("php" . "\"; ?>")) :html-wrap-src-lines nil :html-klipsify-src nil :html-klipse-css "https://storage.googleapis.com/app.klipse.tech/css/codemirror.css" :html-klipse-js "https://storage.googleapis.com/app.klipse.tech/plugin_prod/js/klipse_plugin.min.js" :html-klipse-selection-script "window.klipse_settings = {selector_eval_html: '.src-html',\n selector_eval_js: '.src-js',\n selector_eval_python_client: '.src-python',\n selector_eval_scheme: '.src-scheme',\n selector: '.src-clojure',\n selector_eval_ruby: '.src-ruby'};" :infojs-opt nil :creator "Emacs 30.1 (Org mode 9.7.11)" :with-latex t :latex-header nil :title (#("Installing GeneNetwork services" 0 31 (:parent #148))) :date nil :author (#("unknown" 0 7 (:parent #152))) :email "unknown@genenetwork-development" :language "en" :select-tags ("export") :exclude-tags ("noexport") :headline-levels 3 :preserve-breaks nil :section-numbers nil :time-stamp-file t :with-archived-trees headline :with-author t :expand-links t :with-broken-links nil :with-clocks nil :with-creator nil :with-date t :with-drawers (not "LOGBOOK") :with-email nil :with-emphasize t :with-entities t :with-fixed-width t :with-footnotes t :with-inlinetasks t :with-planning nil :with-priority nil :with-properties nil :with-smart-quotes nil :with-special-strings t :with-special-rows nil :with-statistics-cookies t :with-sub-superscript t :with-toc nil :with-tables t :with-tags t :with-tasks t :with-timestamps t :with-title t :with-todo-keywords t :with-cite-processors t :cite-export (basic nil nil) :bibliography nil :filter-body nil :filter-bold nil :filter-babel-call nil :filter-center-block nil :filter-clock nil :filter-code nil :filter-diary-sexp nil :filter-drawer nil :filter-dynamic-block nil :filter-entity nil :filter-example-block nil :filter-export-block nil :filter-export-snippet nil :filter-final-output (org-html-final-function) :filter-fixed-width nil :filter-footnote-definition nil :filter-footnote-reference nil :filter-headline nil :filter-horizontal-rule nil :filter-inline-babel-call nil :filter-inline-src-block nil :filter-inlinetask nil :filter-italic nil :filter-item nil :filter-keyword nil :filter-latex-environment nil :filter-latex-fragment nil :filter-line-break nil :filter-link nil :filter-node-property nil :filter-options (org-html-infojs-install-script) :filter-paragraph nil :filter-parse-tree (org-html-image-link-filter) :filter-plain-list nil :filter-plain-text nil :filter-planning nil :filter-property-drawer nil :filter-quote-block nil :filter-radio-target nil :filter-section nil :filter-special-block nil :filter-src-block nil :filter-statistics-cookie nil :filter-strike-through nil :filter-subscript nil :filter-superscript nil :filter-table nil :filter-table-cell nil :filter-table-row nil :filter-target nil :filter-timestamp nil :filter-underline nil :filter-verbatim nil :filter-verse-block nil :ignore-list nil :parse-tree (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #344]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #347] :key "TITLE" :value "Installing GeneNetwork services"))) (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil #344] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #348))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil #348]) (plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #351] :type unordered) (item (:standard-properties [121 121 124 156 156 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [124 124 124 156 156 0 nil nil nil nil nil nil nil nil # nil nil #357]) (link (:standard-properties [124 nil 141 153 155 0 nil nil nil nil nil nil nil nil # nil nil #360] :type "custom-id" :type-explicit-p nil :path "introduction" :format bracket :raw-link "#introduction" :application nil :search-option nil) #("Introduction" 0 12 (:parent #363))) #("\n" 0 1 (:parent #360)))) (item (:standard-properties [156 156 159 239 239 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [159 159 159 239 239 0 nil nil nil nil nil nil nil nil # nil nil #358]) (link (:standard-properties [159 nil 200 236 238 0 nil nil nil nil nil nil nil nil # nil nil #361] :type "custom-id" :type-explicit-p nil :path "reproducibility-and-interoperability" :format bracket :raw-link "#reproducibility-and-interoperability" :application nil :search-option nil) #("Reproducibility and interoperability" 0 36 (:parent #364))) #("\n" 0 1 (:parent #361)))) (item (:standard-properties [239 239 242 268 268 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [242 242 242 268 268 0 nil nil nil nil nil nil nil nil # nil nil #359]) (link (:standard-properties [242 nil 256 265 267 0 nil nil nil nil nil nil nil nil # nil nil #362] :type "custom-id" :type-explicit-p nil :path "webserver" :format bracket :raw-link "#webserver" :application nil :search-option nil) #("Webserver" 0 9 (:parent #365))) #("\n" 0 1 (:parent #362)))) (item (:standard-properties [268 268 271 307 307 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [271 271 271 307 307 0 nil nil nil nil nil nil nil nil # nil nil #360]) (link (:standard-properties [271 nil 289 304 306 0 nil nil nil nil nil nil nil nil # nil nil #363] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #366))) #("\n" 0 1 (:parent #363)))) (item (:standard-properties [307 307 310 330 330 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [310 310 310 330 330 0 nil nil nil nil nil nil nil nil # nil nil #361]) (link (:standard-properties [310 nil 321 327 329 0 nil nil nil nil nil nil nil nil # nil nil #364] :type "custom-id" :type-explicit-p nil :path "gnexec" :format bracket :raw-link "#gnexec" :application nil :search-option nil) #("GnExec" 0 6 (:parent #367))) #("\n" 0 1 (:parent #364)))) (item (:standard-properties [330 330 333 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [333 333 333 357 357 0 nil nil nil nil nil nil nil nil # nil nil #362]) (link (:standard-properties [333 nil 346 354 356 0 nil nil nil nil nil nil nil nil # nil nil #365] :type "custom-id" :type-explicit-p nil :path "database" :format bracket :raw-link "#database" :application nil :search-option nil) #("Database" 0 8 (:parent #368))) #("\n" 0 1 (:parent #365))) (plain-list (:standard-properties [357 357 357 421 421 0 nil nil nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #362] :type unordered) (item (:standard-properties [357 357 362 390 390 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #366] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [362 362 362 390 390 0 nil nil nil nil nil nil nil nil # nil nil #369]) (link (:standard-properties [362 nil 377 387 389 0 nil nil nil nil nil nil nil nil # nil nil #372] :type "custom-id" :type-explicit-p nil :path "phenotypes" :format bracket :raw-link "#phenotypes" :application nil :search-option nil) #("Phenotypes" 0 10 (:parent #375))) #("\n" 0 1 (:parent #372)))) (item (:standard-properties [390 390 395 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #366] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [395 395 395 421 421 0 nil nil nil nil nil nil nil nil # nil nil #370]) (link (:standard-properties [395 nil 409 418 420 0 nil nil nil nil nil nil nil nil # nil nil #373] :type "custom-id" :type-explicit-p nil :path "genotypes" :format bracket :raw-link "#genotypes" :application nil :search-option nil) #("Genotypes" 0 9 (:parent #376))) #("\n" 0 1 (:parent #373))))))))) (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #349))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #349]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #352]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #355))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #350))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #350]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #353]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #356)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #356] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #360))) #(").\n" 0 3 (:parent #356))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #357)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #357))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #358))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #359)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #359] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #359))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #360))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #361)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #361] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #361))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #351))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #351]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #354]) #("The main " 0 9 (:parent #357)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #361))) #("is built on " 0 12 (:parent #357)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #363))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #357)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #365))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #357)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #367))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #357)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #369)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #369] :use-brackets-p nil) #("page.html" 0 9 (:parent #373)))) #("in the " 0 7 (:parent #357)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #371))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #357)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #373)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #373] :use-brackets-p nil) #("select" 0 6 (:parent #377))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #373] :use-brackets-p nil) #("menu.js" 0 7 (:parent #378)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #357)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #375)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #375] :use-brackets-p nil) #("select" 0 6 (:parent #379))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #375] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #380)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #357)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #357] :use-brackets-p nil) #("server" 0 6 (:parent #377))) #("in the latest version, see " 0 27 (:parent #357)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #357] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #379))) #(".\n" 0 2 (:parent #357))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #354]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #358)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("M2" 0 2 (:parent #362))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("0606" 0 4 (:parent #363))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("P" 0 1 (:parent #364))) #("&search" 0 7 (:parent #358)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("terms" 0 5 (:parent #366))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("or" 0 2 (:parent #367))) #("=&search" 0 8 (:parent #358)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("terms" 0 5 (:parent #369))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("and" 0 3 (:parent #370))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #358)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("server" 0 6 (:parent #372))) #("). The logic is in\nsearch" 0 25 (:parent #358)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("result.py" 0 9 (:parent #374))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #358)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #358] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #376)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #376] :use-brackets-p nil) #("result" 0 6 (:parent #380))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #376] :use-brackets-p nil) #("page.html" 0 9 (:parent #381)))) #(".\n" 0 2 (:parent #358))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #354]) #("For what happens at the database level see " 0 43 (:parent #359)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #359] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #359))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #354]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #360)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #360] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #364)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #364] :use-brackets-p nil) #("result" 0 6 (:parent #368))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #364] :use-brackets-p nil) #("page.html" 0 9 (:parent #369)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #360)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #360] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #366))) #(".\n" 0 2 (:parent #360))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #352))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #352]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #355]) #("The " 0 4 (:parent #358)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #358] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #362))) #("is built on high performance " 0 29 (:parent #358)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #358] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #364))) #("with " 0 5 (:parent #358)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #358] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #366))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #358))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #355] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #355]) #("(json2yaml.rb is in the gn" 0 26 (:parent #360)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #360] :use-brackets-p nil) #("server" 0 6 (:parent #364))) #("repo). For the current API definition\nsee " 0 42 (:parent #360)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #360] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #366))) #("documentation.\n" 0 15 (:parent #360))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #353))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #353]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #356]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #359))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #344] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #354))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #354] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #357))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #357]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #360]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #363)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #363] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #363)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #363] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #369))) #(".\n" 0 2 (:parent #363))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #354] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #358))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #358]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #361]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #364)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #364] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #368))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #364)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #364] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #370))) #(".\n" 0 2 (:parent #364))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #361]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #365))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #361] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #361]) #("and, for example, in the method run" 0 35 (:parent #367)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #367] :use-brackets-p nil) #("rqtl" 0 4 (:parent #371))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #367] :use-brackets-p nil) #("geno" 0 4 (:parent #372))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #367)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #367] :use-brackets-p nil) #("extra" 0 5 (:parent #374))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #367))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #361] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #361]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #369))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #361] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t])))))) :headline-offset 0 :headline-numbering nil :id-alist nil :citations nil :id-local-cache #)) #f(compiled-function (element) #)((section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #10]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #13] :key "TITLE" :value "Installing GeneNetwork services"))) #5 (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #10] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #15))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #15]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #18]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #21))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #10] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #16))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #16]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #19]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #22)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #22] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #26))) #(").\n" 0 3 (:parent #22))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #19]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #23)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #23] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #23))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #19]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #24))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #19]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #25)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #25] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #25))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #19]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #26))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #19]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #27)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #27] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #27))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #10] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #17))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #17]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #20]) #("The main " 0 9 (:parent #23)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #23] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #27))) #("is built on " 0 12 (:parent #23)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #23] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #29))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #23)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #23] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #31))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #23)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #23] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #33))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #23)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #23] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #35)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #35] :use-brackets-p nil) #("page.html" 0 9 (:parent #39)))) #("in the " 0 7 (:parent #23)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #23] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #37))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #23)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #23] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #39)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("select" 0 6 (:parent #43))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #39] :use-brackets-p nil) #("menu.js" 0 7 (:parent #44)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #23)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #23] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #41)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #41] :use-brackets-p nil) #("select" 0 6 (:parent #45))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #41] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #46)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #23)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #23] :use-brackets-p nil) #("server" 0 6 (:parent #43))) #("in the latest version, see " 0 27 (:parent #23)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #23] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #45))) #(".\n" 0 2 (:parent #23))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #20]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #24)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #24] :use-brackets-p nil) #("M2" 0 2 (:parent #28))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #24] :use-brackets-p nil) #("0606" 0 4 (:parent #29))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #24] :use-brackets-p nil) #("P" 0 1 (:parent #30))) #("&search" 0 7 (:parent #24)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #24] :use-brackets-p nil) #("terms" 0 5 (:parent #32))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #24] :use-brackets-p nil) #("or" 0 2 (:parent #33))) #("=&search" 0 8 (:parent #24)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #24] :use-brackets-p nil) #("terms" 0 5 (:parent #35))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #24] :use-brackets-p nil) #("and" 0 3 (:parent #36))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #24)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #24] :use-brackets-p nil) #("server" 0 6 (:parent #38))) #("). The logic is in\nsearch" 0 25 (:parent #24)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #24] :use-brackets-p nil) #("result.py" 0 9 (:parent #40))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #24)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #24] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #42)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #42] :use-brackets-p nil) #("result" 0 6 (:parent #46))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #42] :use-brackets-p nil) #("page.html" 0 9 (:parent #47)))) #(".\n" 0 2 (:parent #24))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #20]) #("For what happens at the database level see " 0 43 (:parent #25)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #25] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #25))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #20]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #26)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #26] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #30)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #30] :use-brackets-p nil) #("result" 0 6 (:parent #34))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #30] :use-brackets-p nil) #("page.html" 0 9 (:parent #35)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #26)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #26] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #32))) #(".\n" 0 2 (:parent #26))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #10] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #18))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #18]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #21]) #("The " 0 4 (:parent #24)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #24] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #28))) #("is built on high performance " 0 29 (:parent #24)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #24] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #30))) #("with " 0 5 (:parent #24)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #24] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #32))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #24))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #21] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #21]) #("(json2yaml.rb is in the gn" 0 26 (:parent #26)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #26] :use-brackets-p nil) #("server" 0 6 (:parent #30))) #("repo). For the current API definition\nsee " 0 42 (:parent #26)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #26] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #32))) #("documentation.\n" 0 15 (:parent #26))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #10] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #19))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #19]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #22]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #25))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #10] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #20))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #20] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #23))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #23]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #26]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #29)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #29] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #29)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #29] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #35))) #(".\n" 0 2 (:parent #29))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #20] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #24))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #24]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #27]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #30)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #30] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #34))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #30)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #30] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #36))) #(".\n" 0 2 (:parent #30))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #27]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #31))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #27] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #27]) #("and, for example, in the method run" 0 35 (:parent #33)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #33] :use-brackets-p nil) #("rqtl" 0 4 (:parent #37))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #33] :use-brackets-p nil) #("geno" 0 4 (:parent #38))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #33)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #33] :use-brackets-p nil) #("extra" 0 5 (:parent #40))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #33))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #27] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #27]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #35))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #27] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t]))))))] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #5))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) #0)]) (plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #0] :type unordered) (item (:standard-properties [121 121 124 156 156 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #3] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [124 124 124 156 156 0 nil nil nil nil nil nil nil nil # nil nil #6]) (link (:standard-properties [124 nil 141 153 155 0 nil nil nil nil nil nil nil nil # nil nil #9] :type "custom-id" :type-explicit-p nil :path "introduction" :format bracket :raw-link "#introduction" :application nil :search-option nil) #("Introduction" 0 12 (:parent #12))) #("\n" 0 1 (:parent #9)))) (item (:standard-properties [156 156 159 239 239 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #3] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [159 159 159 239 239 0 nil nil nil nil nil nil nil nil # nil nil #7]) (link (:standard-properties [159 nil 200 236 238 0 nil nil nil nil nil nil nil nil # nil nil #10] :type "custom-id" :type-explicit-p nil :path "reproducibility-and-interoperability" :format bracket :raw-link "#reproducibility-and-interoperability" :application nil :search-option nil) #("Reproducibility and interoperability" 0 36 (:parent #13))) #("\n" 0 1 (:parent #10)))) (item (:standard-properties [239 239 242 268 268 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #3] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [242 242 242 268 268 0 nil nil nil nil nil nil nil nil # nil nil #8]) (link (:standard-properties [242 nil 256 265 267 0 nil nil nil nil nil nil nil nil # nil nil #11] :type "custom-id" :type-explicit-p nil :path "webserver" :format bracket :raw-link "#webserver" :application nil :search-option nil) #("Webserver" 0 9 (:parent #14))) #("\n" 0 1 (:parent #11)))) (item (:standard-properties [268 268 271 307 307 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #3] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [271 271 271 307 307 0 nil nil nil nil nil nil nil nil # nil nil #9]) (link (:standard-properties [271 nil 289 304 306 0 nil nil nil nil nil nil nil nil # nil nil #12] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #15))) #("\n" 0 1 (:parent #12)))) (item (:standard-properties [307 307 310 330 330 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #3] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [310 310 310 330 330 0 nil nil nil nil nil nil nil nil # nil nil #10]) (link (:standard-properties [310 nil 321 327 329 0 nil nil nil nil nil nil nil nil # nil nil #13] :type "custom-id" :type-explicit-p nil :path "gnexec" :format bracket :raw-link "#gnexec" :application nil :search-option nil) #("GnExec" 0 6 (:parent #16))) #("\n" 0 1 (:parent #13)))) (item (:standard-properties [330 330 333 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #3] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [333 333 333 357 357 0 nil nil nil nil nil nil nil nil # nil nil #11]) (link (:standard-properties [333 nil 346 354 356 0 nil nil nil nil nil nil nil nil # nil nil #14] :type "custom-id" :type-explicit-p nil :path "database" :format bracket :raw-link "#database" :application nil :search-option nil) #("Database" 0 8 (:parent #17))) #("\n" 0 1 (:parent #14))) (plain-list (:standard-properties [357 357 357 421 421 0 nil nil nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #11] :type unordered) (item (:standard-properties [357 357 362 390 390 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #15] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [362 362 362 390 390 0 nil nil nil nil nil nil nil nil # nil nil #18]) (link (:standard-properties [362 nil 377 387 389 0 nil nil nil nil nil nil nil nil # nil nil #21] :type "custom-id" :type-explicit-p nil :path "phenotypes" :format bracket :raw-link "#phenotypes" :application nil :search-option nil) #("Phenotypes" 0 10 (:parent #24))) #("\n" 0 1 (:parent #21)))) (item (:standard-properties [390 390 395 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #15] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [395 395 395 421 421 0 nil nil nil nil nil nil nil nil # nil nil #19]) (link (:standard-properties [395 nil 409 418 420 0 nil nil nil nil nil nil nil nil # nil nil #22] :type "custom-id" :type-explicit-p nil :path "genotypes" :format bracket :raw-link "#genotypes" :application nil :search-option nil) #("Genotypes" 0 9 (:parent #25))) #("\n" 0 1 (:parent #22))))))))) mapconcat(#f(compiled-function (element) #) ((section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #11]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #14] :key "TITLE" :value "Installing GeneNetwork services"))) #6 (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #11] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #16))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #16]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #19]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #22))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #11] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #17))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #17]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #20]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #23)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #23] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #27))) #(").\n" 0 3 (:parent #23))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #20]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #24)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #24] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #24))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #20]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #25))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #20]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #26)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #26] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #26))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #20]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #27))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #20]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #28)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #28] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #28))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #11] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #18))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #18]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #21]) #("The main " 0 9 (:parent #24)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #24] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #28))) #("is built on " 0 12 (:parent #24)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #24] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #30))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #24)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #24] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #32))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #24)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #24] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #34))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #24)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #24] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #36)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #36] :use-brackets-p nil) #("page.html" 0 9 (:parent #40)))) #("in the " 0 7 (:parent #24)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #24] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #38))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #24)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #24] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #40)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #40] :use-brackets-p nil) #("select" 0 6 (:parent #44))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #40] :use-brackets-p nil) #("menu.js" 0 7 (:parent #45)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #24)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #24] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #42)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #42] :use-brackets-p nil) #("select" 0 6 (:parent #46))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #42] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #47)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #24)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #24] :use-brackets-p nil) #("server" 0 6 (:parent #44))) #("in the latest version, see " 0 27 (:parent #24)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #24] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #46))) #(".\n" 0 2 (:parent #24))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #21]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #25)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #25] :use-brackets-p nil) #("M2" 0 2 (:parent #29))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #25] :use-brackets-p nil) #("0606" 0 4 (:parent #30))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #25] :use-brackets-p nil) #("P" 0 1 (:parent #31))) #("&search" 0 7 (:parent #25)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #25] :use-brackets-p nil) #("terms" 0 5 (:parent #33))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #25] :use-brackets-p nil) #("or" 0 2 (:parent #34))) #("=&search" 0 8 (:parent #25)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #25] :use-brackets-p nil) #("terms" 0 5 (:parent #36))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #25] :use-brackets-p nil) #("and" 0 3 (:parent #37))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #25)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #25] :use-brackets-p nil) #("server" 0 6 (:parent #39))) #("). The logic is in\nsearch" 0 25 (:parent #25)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #25] :use-brackets-p nil) #("result.py" 0 9 (:parent #41))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #25)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #25] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #43)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #43] :use-brackets-p nil) #("result" 0 6 (:parent #47))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #43] :use-brackets-p nil) #("page.html" 0 9 (:parent #48)))) #(".\n" 0 2 (:parent #25))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #21]) #("For what happens at the database level see " 0 43 (:parent #26)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #26] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #26))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #21]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #27)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #27] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #31)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #31] :use-brackets-p nil) #("result" 0 6 (:parent #35))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #31] :use-brackets-p nil) #("page.html" 0 9 (:parent #36)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #27)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #27] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #33))) #(".\n" 0 2 (:parent #27))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #11] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #19))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #19]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #22]) #("The " 0 4 (:parent #25)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #25] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #29))) #("is built on high performance " 0 29 (:parent #25)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #25] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #31))) #("with " 0 5 (:parent #25)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #25] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #33))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #25))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #22] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #22]) #("(json2yaml.rb is in the gn" 0 26 (:parent #27)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #27] :use-brackets-p nil) #("server" 0 6 (:parent #31))) #("repo). For the current API definition\nsee " 0 42 (:parent #27)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #27] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #33))) #("documentation.\n" 0 15 (:parent #27))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #11] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #20))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #20]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #23]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #26))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #11] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #21))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #21] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #24))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #24]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #27]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #30)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #30] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #30)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #30] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #36))) #(".\n" 0 2 (:parent #30))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #21] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #25))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #25]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #28]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #31)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #31] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #35))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #31)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #31] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #37))) #(".\n" 0 2 (:parent #31))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #28]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #32))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #28] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #28]) #("and, for example, in the method run" 0 35 (:parent #34)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #34] :use-brackets-p nil) #("rqtl" 0 4 (:parent #38))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #34] :use-brackets-p nil) #("geno" 0 4 (:parent #39))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #34)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #34] :use-brackets-p nil) #("extra" 0 5 (:parent #41))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #34))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #28] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #28]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #36))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #28] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t]))))))] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #6))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) . #0)]) (plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #1] :type unordered) (item (:standard-properties [121 121 124 156 156 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #4] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [124 124 124 156 156 0 nil nil nil nil nil nil nil nil # nil nil #7]) (link (:standard-properties [124 nil 141 153 155 0 nil nil nil nil nil nil nil nil # nil nil #10] :type "custom-id" :type-explicit-p nil :path "introduction" :format bracket :raw-link "#introduction" :application nil :search-option nil) #("Introduction" 0 12 (:parent #13))) #("\n" 0 1 (:parent #10)))) (item (:standard-properties [156 156 159 239 239 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #4] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [159 159 159 239 239 0 nil nil nil nil nil nil nil nil # nil nil #8]) (link (:standard-properties [159 nil 200 236 238 0 nil nil nil nil nil nil nil nil # nil nil #11] :type "custom-id" :type-explicit-p nil :path "reproducibility-and-interoperability" :format bracket :raw-link "#reproducibility-and-interoperability" :application nil :search-option nil) #("Reproducibility and interoperability" 0 36 (:parent #14))) #("\n" 0 1 (:parent #11)))) (item (:standard-properties [239 239 242 268 268 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #4] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [242 242 242 268 268 0 nil nil nil nil nil nil nil nil # nil nil #9]) (link (:standard-properties [242 nil 256 265 267 0 nil nil nil nil nil nil nil nil # nil nil #12] :type "custom-id" :type-explicit-p nil :path "webserver" :format bracket :raw-link "#webserver" :application nil :search-option nil) #("Webserver" 0 9 (:parent #15))) #("\n" 0 1 (:parent #12)))) (item (:standard-properties [268 268 271 307 307 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #4] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [271 271 271 307 307 0 nil nil nil nil nil nil nil nil # nil nil #10]) (link (:standard-properties [271 nil 289 304 306 0 nil nil nil nil nil nil nil nil # nil nil #13] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #16))) #("\n" 0 1 (:parent #13)))) (item (:standard-properties [307 307 310 330 330 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #4] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [310 310 310 330 330 0 nil nil nil nil nil nil nil nil # nil nil #11]) (link (:standard-properties [310 nil 321 327 329 0 nil nil nil nil nil nil nil nil # nil nil #14] :type "custom-id" :type-explicit-p nil :path "gnexec" :format bracket :raw-link "#gnexec" :application nil :search-option nil) #("GnExec" 0 6 (:parent #17))) #("\n" 0 1 (:parent #14)))) (item (:standard-properties [330 330 333 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #4] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [333 333 333 357 357 0 nil nil nil nil nil nil nil nil # nil nil #12]) (link (:standard-properties [333 nil 346 354 356 0 nil nil nil nil nil nil nil nil # nil nil #15] :type "custom-id" :type-explicit-p nil :path "database" :format bracket :raw-link "#database" :application nil :search-option nil) #("Database" 0 8 (:parent #18))) #("\n" 0 1 (:parent #15))) (plain-list (:standard-properties [357 357 357 421 421 0 nil nil nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #12] :type unordered) (item (:standard-properties [357 357 362 390 390 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #16] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [362 362 362 390 390 0 nil nil nil nil nil nil nil nil # nil nil #19]) (link (:standard-properties [362 nil 377 387 389 0 nil nil nil nil nil nil nil nil # nil nil #22] :type "custom-id" :type-explicit-p nil :path "phenotypes" :format bracket :raw-link "#phenotypes" :application nil :search-option nil) #("Phenotypes" 0 10 (:parent #25))) #("\n" 0 1 (:parent #22)))) (item (:standard-properties [390 390 395 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #16] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [395 395 395 421 421 0 nil nil nil nil nil nil nil nil # nil nil #20]) (link (:standard-properties [395 nil 409 418 420 0 nil nil nil nil nil nil nil nil # nil nil #23] :type "custom-id" :type-explicit-p nil :path "genotypes" :format bracket :raw-link "#genotypes" :application nil :search-option nil) #("Genotypes" 0 9 (:parent #26))) #("\n" 0 1 (:parent #23))))))))) "") org-export-data((headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #5]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #8] :key "TITLE" :value "Installing GeneNetwork services"))) #0 (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #5] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #10))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #10]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #13]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #16))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #5] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #11))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #11]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #14]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #17)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #17] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #21))) #(").\n" 0 3 (:parent #17))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #14]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #18)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #18] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #18))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #14]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #19))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #14]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #20)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #20] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #20))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #14]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #21))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #14]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #22)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #22] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #22))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #5] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #12))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #12]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #15]) #("The main " 0 9 (:parent #18)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #18] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #22))) #("is built on " 0 12 (:parent #18)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #18] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #24))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #18)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #18] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #26))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #18)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #18] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #28))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #18)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #18] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #30)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #30] :use-brackets-p nil) #("page.html" 0 9 (:parent #34)))) #("in the " 0 7 (:parent #18)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #18] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #32))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #18)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #18] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #34)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #34] :use-brackets-p nil) #("select" 0 6 (:parent #38))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #34] :use-brackets-p nil) #("menu.js" 0 7 (:parent #39)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #18)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #18] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #36)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #36] :use-brackets-p nil) #("select" 0 6 (:parent #40))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #36] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #41)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #18)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #18] :use-brackets-p nil) #("server" 0 6 (:parent #38))) #("in the latest version, see " 0 27 (:parent #18)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #18] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #40))) #(".\n" 0 2 (:parent #18))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #15]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #19)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #19] :use-brackets-p nil) #("M2" 0 2 (:parent #23))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #19] :use-brackets-p nil) #("0606" 0 4 (:parent #24))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #19] :use-brackets-p nil) #("P" 0 1 (:parent #25))) #("&search" 0 7 (:parent #19)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #19] :use-brackets-p nil) #("terms" 0 5 (:parent #27))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #19] :use-brackets-p nil) #("or" 0 2 (:parent #28))) #("=&search" 0 8 (:parent #19)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #19] :use-brackets-p nil) #("terms" 0 5 (:parent #30))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #19] :use-brackets-p nil) #("and" 0 3 (:parent #31))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #19)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #19] :use-brackets-p nil) #("server" 0 6 (:parent #33))) #("). The logic is in\nsearch" 0 25 (:parent #19)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #19] :use-brackets-p nil) #("result.py" 0 9 (:parent #35))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #19)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #19] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #37)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #37] :use-brackets-p nil) #("result" 0 6 (:parent #41))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #37] :use-brackets-p nil) #("page.html" 0 9 (:parent #42)))) #(".\n" 0 2 (:parent #19))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #15]) #("For what happens at the database level see " 0 43 (:parent #20)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #20] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #20))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #15]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #21)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #21] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #25)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #25] :use-brackets-p nil) #("result" 0 6 (:parent #29))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #25] :use-brackets-p nil) #("page.html" 0 9 (:parent #30)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #21)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #21] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #27))) #(".\n" 0 2 (:parent #21))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #5] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #13))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #13]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #16]) #("The " 0 4 (:parent #19)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #19] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #23))) #("is built on high performance " 0 29 (:parent #19)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #19] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #25))) #("with " 0 5 (:parent #19)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #19] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #27))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #19))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #16] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #16]) #("(json2yaml.rb is in the gn" 0 26 (:parent #21)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #21] :use-brackets-p nil) #("server" 0 6 (:parent #25))) #("repo). For the current API definition\nsee " 0 42 (:parent #21)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #21] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #27))) #("documentation.\n" 0 15 (:parent #21))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #5] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #14))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #14]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #17]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #20))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #5] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #15))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #15] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #18))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #18]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #21]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #24)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #24] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #24)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #24] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #30))) #(".\n" 0 2 (:parent #24))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #15] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #19))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #19]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #22]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #25)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #25] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #29))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #25)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #25] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #31))) #(".\n" 0 2 (:parent #25))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #22]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #26))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #22] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #22]) #("and, for example, in the method run" 0 35 (:parent #28)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #28] :use-brackets-p nil) #("rqtl" 0 4 (:parent #32))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #28] :use-brackets-p nil) #("geno" 0 4 (:parent #33))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #28)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #28] :use-brackets-p nil) #("extra" 0 5 (:parent #35))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #28))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #22] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #22]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #30))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #22] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t]))))))] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #0))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil #0]) (plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #3] :type unordered) (item (:standard-properties [121 121 124 156 156 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #6] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [124 124 124 156 156 0 nil nil nil nil nil nil nil nil # nil nil #9]) (link (:standard-properties [124 nil 141 153 155 0 nil nil nil nil nil nil nil nil # nil nil #12] :type "custom-id" :type-explicit-p nil :path "introduction" :format bracket :raw-link "#introduction" :application nil :search-option nil) #("Introduction" 0 12 (:parent #15))) #("\n" 0 1 (:parent #12)))) (item (:standard-properties [156 156 159 239 239 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #6] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [159 159 159 239 239 0 nil nil nil nil nil nil nil nil # nil nil #10]) (link (:standard-properties [159 nil 200 236 238 0 nil nil nil nil nil nil nil nil # nil nil #13] :type "custom-id" :type-explicit-p nil :path "reproducibility-and-interoperability" :format bracket :raw-link "#reproducibility-and-interoperability" :application nil :search-option nil) #("Reproducibility and interoperability" 0 36 (:parent #16))) #("\n" 0 1 (:parent #13)))) (item (:standard-properties [239 239 242 268 268 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #6] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [242 242 242 268 268 0 nil nil nil nil nil nil nil nil # nil nil #11]) (link (:standard-properties [242 nil 256 265 267 0 nil nil nil nil nil nil nil nil # nil nil #14] :type "custom-id" :type-explicit-p nil :path "webserver" :format bracket :raw-link "#webserver" :application nil :search-option nil) #("Webserver" 0 9 (:parent #17))) #("\n" 0 1 (:parent #14)))) (item (:standard-properties [268 268 271 307 307 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #6] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [271 271 271 307 307 0 nil nil nil nil nil nil nil nil # nil nil #12]) (link (:standard-properties [271 nil 289 304 306 0 nil nil nil nil nil nil nil nil # nil nil #15] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #18))) #("\n" 0 1 (:parent #15)))) (item (:standard-properties [307 307 310 330 330 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #6] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [310 310 310 330 330 0 nil nil nil nil nil nil nil nil # nil nil #13]) (link (:standard-properties [310 nil 321 327 329 0 nil nil nil nil nil nil nil nil # nil nil #16] :type "custom-id" :type-explicit-p nil :path "gnexec" :format bracket :raw-link "#gnexec" :application nil :search-option nil) #("GnExec" 0 6 (:parent #19))) #("\n" 0 1 (:parent #16)))) (item (:standard-properties [330 330 333 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #6] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [333 333 333 357 357 0 nil nil nil nil nil nil nil nil # nil nil #14]) (link (:standard-properties [333 nil 346 354 356 0 nil nil nil nil nil nil nil nil # nil nil #17] :type "custom-id" :type-explicit-p nil :path "database" :format bracket :raw-link "#database" :application nil :search-option nil) #("Database" 0 8 (:parent #20))) #("\n" 0 1 (:parent #17))) (plain-list (:standard-properties [357 357 357 421 421 0 nil nil nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #14] :type unordered) (item (:standard-properties [357 357 362 390 390 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #18] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [362 362 362 390 390 0 nil nil nil nil nil nil nil nil # nil nil #21]) (link (:standard-properties [362 nil 377 387 389 0 nil nil nil nil nil nil nil nil # nil nil #24] :type "custom-id" :type-explicit-p nil :path "phenotypes" :format bracket :raw-link "#phenotypes" :application nil :search-option nil) #("Phenotypes" 0 10 (:parent #27))) #("\n" 0 1 (:parent #24)))) (item (:standard-properties [390 390 395 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #18] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [395 395 395 421 421 0 nil nil nil nil nil nil nil nil # nil nil #22]) (link (:standard-properties [395 nil 409 418 420 0 nil nil nil nil nil nil nil nil # nil nil #25] :type "custom-id" :type-explicit-p nil :path "genotypes" :format bracket :raw-link "#genotypes" :application nil :search-option nil) #("Genotypes" 0 9 (:parent #28))) #("\n" 0 1 (:parent #25))))))))) (:export-options (body-only) :back-end #s(org-export-backend :name html :parent nil :transcoders ((bold . org-html-bold) (center-block . org-html-center-block) (clock . org-html-clock) (code . org-html-code) (drawer . org-html-drawer) (dynamic-block . org-html-dynamic-block) (entity . org-html-entity) (example-block . org-html-example-block) (export-block . org-html-export-block) (export-snippet . org-html-export-snippet) (fixed-width . org-html-fixed-width) (footnote-reference . org-html-footnote-reference) (headline . org-html-headline) (horizontal-rule . org-html-horizontal-rule) (inline-src-block . org-html-inline-src-block) (inlinetask . org-html-inlinetask) (inner-template . org-html-inner-template) (italic . org-html-italic) (item . org-html-item) (keyword . org-html-keyword) (latex-environment . org-html-latex-environment) (latex-fragment . org-html-latex-fragment) (line-break . org-html-line-break) (link . org-html-link) (node-property . org-html-node-property) (paragraph . org-html-paragraph) (plain-list . org-html-plain-list) (plain-text . org-html-plain-text) (planning . org-html-planning) (property-drawer . org-html-property-drawer) (quote-block . org-html-quote-block) (radio-target . org-html-radio-target) (section . org-html-section) (special-block . org-html-special-block) (src-block . org-html-src-block) (statistics-cookie . org-html-statistics-cookie) (strike-through . org-html-strike-through) (subscript . org-html-subscript) (superscript . org-html-superscript) (table . org-html-table) (table-cell . org-html-table-cell) (table-row . org-html-table-row) (target . org-html-target) (template . org-html-template) (timestamp . org-html-timestamp) (underline . org-html-underline) (verbatim . org-html-verbatim) (verse-block . org-html-verse-block)) :options ((:html-doctype "HTML_DOCTYPE" nil org-html-doctype) (:html-container "HTML_CONTAINER" nil org-html-container-element) (:html-content-class "HTML_CONTENT_CLASS" nil org-html-content-class) (:description "DESCRIPTION" nil nil newline) (:keywords "KEYWORDS" nil nil space) (:html-html5-fancy nil "html5-fancy" org-html-html5-fancy) (:html-link-use-abs-url nil "html-link-use-abs-url" org-html-link-use-abs-url) (:html-link-home "HTML_LINK_HOME" nil org-html-link-home) (:html-link-up "HTML_LINK_UP" nil org-html-link-up) (:html-mathjax "HTML_MATHJAX" nil "" space) (:html-equation-reference-format "HTML_EQUATION_REFERENCE_FORMAT" nil org-html-equation-reference-format t) (:html-postamble nil "html-postamble" org-html-postamble) (:html-preamble nil "html-preamble" org-html-preamble) (:html-head "HTML_HEAD" nil org-html-head newline) (:html-head-extra "HTML_HEAD_EXTRA" nil org-html-head-extra newline) (:subtitle "SUBTITLE" nil nil parse) (:html-head-include-default-style nil "html-style" org-html-head-include-default-style) (:html-head-include-scripts nil "html-scripts" org-html-head-include-scripts) (:html-allow-name-attribute-in-anchors nil nil org-html-allow-name-attribute-in-anchors) (:html-divs nil nil org-html-divs) (:html-checkbox-type nil nil org-html-checkbox-type) (:html-extension nil nil org-html-extension) (:html-footnote-format nil nil org-html-footnote-format) (:html-footnote-separator nil nil org-html-footnote-separator) (:html-footnotes-section nil nil org-html-footnotes-section) (:html-format-drawer-function nil nil org-html-format-drawer-function) (:html-format-headline-function nil nil org-html-format-headline-function) (:html-format-inlinetask-function nil nil org-html-format-inlinetask-function) (:html-home/up-format nil nil org-html-home/up-format) (:html-indent nil nil org-html-indent) (:html-infojs-options nil nil org-html-infojs-options) (:html-infojs-template nil nil org-html-infojs-template) (:html-inline-image-rules nil nil org-html-inline-image-rules) (:html-link-org-files-as-html nil nil org-html-link-org-files-as-html) (:html-mathjax-options nil nil org-html-mathjax-options) (:html-mathjax-template nil nil org-html-mathjax-template) (:html-metadata-timestamp-format nil nil org-html-metadata-timestamp-format) (:html-postamble-format nil nil org-html-postamble-format) (:html-preamble-format nil nil org-html-preamble-format) (:html-prefer-user-labels nil nil org-html-prefer-user-labels) (:html-self-link-headlines nil nil org-html-self-link-headlines) (:html-table-align-individual-fields nil nil org-html-table-align-individual-fields) (:html-table-caption-above nil nil org-html-table-caption-above) (:html-table-data-tags nil nil org-html-table-data-tags) (:html-table-header-tags nil nil org-html-table-header-tags) (:html-table-use-header-tags-for-first-column nil nil org-html-table-use-header-tags-for-first-column) (:html-tag-class-prefix nil nil org-html-tag-class-prefix) (:html-text-markup-alist nil nil org-html-text-markup-alist) (:html-todo-kwd-class-prefix nil nil org-html-todo-kwd-class-prefix) (:html-toplevel-hlevel nil nil org-html-toplevel-hlevel) (:html-use-infojs nil nil org-html-use-infojs) (:html-validation-link nil nil org-html-validation-link) (:html-viewport nil nil org-html-viewport) (:html-inline-images nil nil org-html-inline-images) (:html-table-attributes nil nil org-html-table-default-attributes) (:html-table-row-open-tag nil nil org-html-table-row-open-tag) (:html-table-row-close-tag nil nil org-html-table-row-close-tag) (:html-xml-declaration nil nil org-html-xml-declaration) (:html-wrap-src-lines nil nil org-html-wrap-src-lines) (:html-klipsify-src nil nil org-html-klipsify-src) (:html-klipse-css nil nil org-html-klipse-css) (:html-klipse-js nil nil org-html-klipse-js) (:html-klipse-selection-script nil nil org-html-klipse-selection-script) (:infojs-opt "INFOJS_OPT" nil nil) (:creator "CREATOR" nil org-html-creator-string) (:with-latex nil "tex" org-html-with-latex) (:latex-header "LATEX_HEADER" nil nil newline)) :filters ((:filter-options . org-html-infojs-install-script) (:filter-parse-tree . org-html-image-link-filter) (:filter-final-output . org-html-final-function)) :blocks nil :menu (104 "Export to HTML" ((72 "As HTML buffer" org-html-export-as-html) (104 "As HTML file" org-html-export-to-html) (111 "As HTML file and open" (lambda (a s v b) (if a (org-html-export-to-html t s v b) (org-open-file (org-html-export-to-html nil s v b)))))))) :translate-alist ((bold . org-html-bold) (center-block . org-html-center-block) (clock . org-html-clock) (code . org-html-code) (drawer . org-html-drawer) (dynamic-block . org-html-dynamic-block) (entity . org-html-entity) (example-block . org-html-example-block) (export-block . org-html-export-block) (export-snippet . org-html-export-snippet) (fixed-width . org-html-fixed-width) (footnote-reference . org-html-footnote-reference) (headline . org-html-headline) (horizontal-rule . org-html-horizontal-rule) (inline-src-block . org-html-inline-src-block) (inlinetask . org-html-inlinetask) (inner-template . org-html-inner-template) (italic . org-html-italic) (item . org-html-item) (keyword . org-html-keyword) (latex-environment . org-html-latex-environment) (latex-fragment . org-html-latex-fragment) (line-break . org-html-line-break) (link . org-html-link) (node-property . org-html-node-property) (paragraph . org-html-paragraph) (plain-list . org-html-plain-list) (plain-text . org-html-plain-text) (planning . org-html-planning) (property-drawer . org-html-property-drawer) (quote-block . org-html-quote-block) (radio-target . org-html-radio-target) (section . org-html-section) (special-block . org-html-special-block) (src-block . org-html-src-block) (statistics-cookie . org-html-statistics-cookie) (strike-through . org-html-strike-through) (subscript . org-html-subscript) (superscript . org-html-superscript) (table . org-html-table) (table-cell . org-html-table-cell) (table-row . org-html-table-row) (target . org-html-target) (template . org-html-template) (timestamp . org-html-timestamp) (underline . org-html-underline) (verbatim . org-html-verbatim) (verse-block . org-html-verse-block)) :exported-data # :input-buffer " *temp*" :input-file nil :html-doctype "xhtml-strict" :html-container "div" :html-content-class "content" :description nil :keywords nil :html-html5-fancy nil :html-link-use-abs-url nil :html-link-home "" :html-link-up "" :html-mathjax "" :html-equation-reference-format "\\eqref{%s}" :html-postamble auto :html-preamble t :html-head "" :html-head-extra "" :subtitle nil :html-head-include-default-style t :html-head-include-scripts nil :html-allow-name-attribute-in-anchors nil :html-divs ((preamble "div" "preamble") (content "div" "content") (postamble "div" "postamble")) :html-checkbox-type ascii :html-extension "html" :html-footnote-format "%s" :html-footnote-separator ", " :html-footnotes-section "
\n

%s:

\n
\n%s\n
\n
" :html-format-drawer-function #f(compiled-function (name contents) #) :html-format-headline-function org-html-format-headline-default-function :html-format-inlinetask-function org-html-format-inlinetask-default-function :html-home/up-format "
\n UP \n |\n HOME \n
" :html-indent nil :html-infojs-options ((path . "https://orgmode.org/org-info.js") (view . "info") (toc . :with-toc) (ftoc . "0") (tdepth . "max") (sdepth . "max") (mouse . "underline") (buttons . "0") (ltoc . "1") (up . :html-link-up) (home . :html-link-home)) :html-infojs-template "\n\n" :html-inline-image-rules (("file" . "\\(?:\\.\\(?:avif\\|gif\\|jp\\(?:e?g\\)\\|png\\|svg\\|webp\\)\\)") ("http" . "\\(?:\\.\\(?:avif\\|gif\\|jp\\(?:e?g\\)\\|png\\|svg\\|webp\\)\\)") ("https" . "\\(?:\\.\\(?:avif\\|gif\\|jp\\(?:e?g\\)\\|png\\|svg\\|webp\\)\\)")) :html-link-org-files-as-html t :html-mathjax-options ((path "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js") (scale 1.0) (align "center") (font "mathjax-modern") (overflow "overflow") (tags "ams") (indent "0em") (multlinewidth "85%") (tagindent ".8em") (tagside "right")) :html-mathjax-template "\n\n\n" :html-metadata-timestamp-format "%Y-%m-%d %a %H:%M" :html-postamble-format (("en" "

Author: %a (%e)

\n

Date: %d

\n

%c

\n

%v

")) :html-preamble-format (("en" "")) :html-prefer-user-labels nil :html-self-link-headlines nil :html-table-align-individual-fields t :html-table-caption-above t :html-table-data-tags ("" . "") :html-table-header-tags ("" . "") :html-table-use-header-tags-for-first-column nil :html-tag-class-prefix "" :html-text-markup-alist ((bold . "%s") (code . "%s") (italic . "%s") (strike-through . "%s") (underline . "%s") (verbatim . "%s")) :html-todo-kwd-class-prefix "" :html-toplevel-hlevel 2 :html-use-infojs when-configured :html-validation-link "Validate" :html-viewport ((width "device-width") (initial-scale "1") (minimum-scale "") (maximum-scale "") (user-scalable "")) :html-inline-images t :html-table-attributes (:border "2" :cellspacing "0" :cellpadding "6" :rules "groups" :frame "hsides") :html-table-row-open-tag "" :html-table-row-close-tag "" :html-xml-declaration (("html" . "") ("php" . "\"; ?>")) :html-wrap-src-lines nil :html-klipsify-src nil :html-klipse-css "https://storage.googleapis.com/app.klipse.tech/css/codemirror.css" :html-klipse-js "https://storage.googleapis.com/app.klipse.tech/plugin_prod/js/klipse_plugin.min.js" :html-klipse-selection-script "window.klipse_settings = {selector_eval_html: '.src-html',\n selector_eval_js: '.src-js',\n selector_eval_python_client: '.src-python',\n selector_eval_scheme: '.src-scheme',\n selector: '.src-clojure',\n selector_eval_ruby: '.src-ruby'};" :infojs-opt nil :creator "Emacs 30.1 (Org mode 9.7.11)" :with-latex t :latex-header nil :title (#("Installing GeneNetwork services" 0 31 (:parent #148))) :date nil :author (#("unknown" 0 7 (:parent #152))) :email "unknown@genenetwork-development" :language "en" :select-tags ("export") :exclude-tags ("noexport") :headline-levels 3 :preserve-breaks nil :section-numbers nil :time-stamp-file t :with-archived-trees headline :with-author t :expand-links t :with-broken-links nil :with-clocks nil :with-creator nil :with-date t :with-drawers (not "LOGBOOK") :with-email nil :with-emphasize t :with-entities t :with-fixed-width t :with-footnotes t :with-inlinetasks t :with-planning nil :with-priority nil :with-properties nil :with-smart-quotes nil :with-special-strings t :with-special-rows nil :with-statistics-cookies t :with-sub-superscript t :with-toc nil :with-tables t :with-tags t :with-tasks t :with-timestamps t :with-title t :with-todo-keywords t :with-cite-processors t :cite-export (basic nil nil) :bibliography nil :filter-body nil :filter-bold nil :filter-babel-call nil :filter-center-block nil :filter-clock nil :filter-code nil :filter-diary-sexp nil :filter-drawer nil :filter-dynamic-block nil :filter-entity nil :filter-example-block nil :filter-export-block nil :filter-export-snippet nil :filter-final-output (org-html-final-function) :filter-fixed-width nil :filter-footnote-definition nil :filter-footnote-reference nil :filter-headline nil :filter-horizontal-rule nil :filter-inline-babel-call nil :filter-inline-src-block nil :filter-inlinetask nil :filter-italic nil :filter-item nil :filter-keyword nil :filter-latex-environment nil :filter-latex-fragment nil :filter-line-break nil :filter-link nil :filter-node-property nil :filter-options (org-html-infojs-install-script) :filter-paragraph nil :filter-parse-tree (org-html-image-link-filter) :filter-plain-list nil :filter-plain-text nil :filter-planning nil :filter-property-drawer nil :filter-quote-block nil :filter-radio-target nil :filter-section nil :filter-special-block nil :filter-src-block nil :filter-statistics-cookie nil :filter-strike-through nil :filter-subscript nil :filter-superscript nil :filter-table nil :filter-table-cell nil :filter-table-row nil :filter-target nil :filter-timestamp nil :filter-underline nil :filter-verbatim nil :filter-verse-block nil :ignore-list nil :parse-tree (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #344]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #347] :key "TITLE" :value "Installing GeneNetwork services"))) (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil #344] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #348))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil #348]) (plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #351] :type unordered) (item (:standard-properties [121 121 124 156 156 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [124 124 124 156 156 0 nil nil nil nil nil nil nil nil # nil nil #357]) (link (:standard-properties [124 nil 141 153 155 0 nil nil nil nil nil nil nil nil # nil nil #360] :type "custom-id" :type-explicit-p nil :path "introduction" :format bracket :raw-link "#introduction" :application nil :search-option nil) #("Introduction" 0 12 (:parent #363))) #("\n" 0 1 (:parent #360)))) (item (:standard-properties [156 156 159 239 239 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [159 159 159 239 239 0 nil nil nil nil nil nil nil nil # nil nil #358]) (link (:standard-properties [159 nil 200 236 238 0 nil nil nil nil nil nil nil nil # nil nil #361] :type "custom-id" :type-explicit-p nil :path "reproducibility-and-interoperability" :format bracket :raw-link "#reproducibility-and-interoperability" :application nil :search-option nil) #("Reproducibility and interoperability" 0 36 (:parent #364))) #("\n" 0 1 (:parent #361)))) (item (:standard-properties [239 239 242 268 268 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [242 242 242 268 268 0 nil nil nil nil nil nil nil nil # nil nil #359]) (link (:standard-properties [242 nil 256 265 267 0 nil nil nil nil nil nil nil nil # nil nil #362] :type "custom-id" :type-explicit-p nil :path "webserver" :format bracket :raw-link "#webserver" :application nil :search-option nil) #("Webserver" 0 9 (:parent #365))) #("\n" 0 1 (:parent #362)))) (item (:standard-properties [268 268 271 307 307 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [271 271 271 307 307 0 nil nil nil nil nil nil nil nil # nil nil #360]) (link (:standard-properties [271 nil 289 304 306 0 nil nil nil nil nil nil nil nil # nil nil #363] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #366))) #("\n" 0 1 (:parent #363)))) (item (:standard-properties [307 307 310 330 330 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [310 310 310 330 330 0 nil nil nil nil nil nil nil nil # nil nil #361]) (link (:standard-properties [310 nil 321 327 329 0 nil nil nil nil nil nil nil nil # nil nil #364] :type "custom-id" :type-explicit-p nil :path "gnexec" :format bracket :raw-link "#gnexec" :application nil :search-option nil) #("GnExec" 0 6 (:parent #367))) #("\n" 0 1 (:parent #364)))) (item (:standard-properties [330 330 333 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [333 333 333 357 357 0 nil nil nil nil nil nil nil nil # nil nil #362]) (link (:standard-properties [333 nil 346 354 356 0 nil nil nil nil nil nil nil nil # nil nil #365] :type "custom-id" :type-explicit-p nil :path "database" :format bracket :raw-link "#database" :application nil :search-option nil) #("Database" 0 8 (:parent #368))) #("\n" 0 1 (:parent #365))) (plain-list (:standard-properties [357 357 357 421 421 0 nil nil nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #362] :type unordered) (item (:standard-properties [357 357 362 390 390 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #366] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [362 362 362 390 390 0 nil nil nil nil nil nil nil nil # nil nil #369]) (link (:standard-properties [362 nil 377 387 389 0 nil nil nil nil nil nil nil nil # nil nil #372] :type "custom-id" :type-explicit-p nil :path "phenotypes" :format bracket :raw-link "#phenotypes" :application nil :search-option nil) #("Phenotypes" 0 10 (:parent #375))) #("\n" 0 1 (:parent #372)))) (item (:standard-properties [390 390 395 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #366] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [395 395 395 421 421 0 nil nil nil nil nil nil nil nil # nil nil #370]) (link (:standard-properties [395 nil 409 418 420 0 nil nil nil nil nil nil nil nil # nil nil #373] :type "custom-id" :type-explicit-p nil :path "genotypes" :format bracket :raw-link "#genotypes" :application nil :search-option nil) #("Genotypes" 0 9 (:parent #376))) #("\n" 0 1 (:parent #373))))))))) (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #349))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #349]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #352]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #355))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #350))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #350]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #353]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #356)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #356] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #360))) #(").\n" 0 3 (:parent #356))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #357)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #357))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #358))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #359)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #359] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #359))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #360))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #361)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #361] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #361))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #351))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #351]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #354]) #("The main " 0 9 (:parent #357)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #361))) #("is built on " 0 12 (:parent #357)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #363))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #357)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #365))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #357)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #367))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #357)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #369)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #369] :use-brackets-p nil) #("page.html" 0 9 (:parent #373)))) #("in the " 0 7 (:parent #357)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #371))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #357)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #373)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #373] :use-brackets-p nil) #("select" 0 6 (:parent #377))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #373] :use-brackets-p nil) #("menu.js" 0 7 (:parent #378)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #357)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #375)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #375] :use-brackets-p nil) #("select" 0 6 (:parent #379))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #375] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #380)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #357)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #357] :use-brackets-p nil) #("server" 0 6 (:parent #377))) #("in the latest version, see " 0 27 (:parent #357)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #357] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #379))) #(".\n" 0 2 (:parent #357))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #354]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #358)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("M2" 0 2 (:parent #362))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("0606" 0 4 (:parent #363))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("P" 0 1 (:parent #364))) #("&search" 0 7 (:parent #358)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("terms" 0 5 (:parent #366))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("or" 0 2 (:parent #367))) #("=&search" 0 8 (:parent #358)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("terms" 0 5 (:parent #369))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("and" 0 3 (:parent #370))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #358)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("server" 0 6 (:parent #372))) #("). The logic is in\nsearch" 0 25 (:parent #358)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("result.py" 0 9 (:parent #374))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #358)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #358] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #376)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #376] :use-brackets-p nil) #("result" 0 6 (:parent #380))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #376] :use-brackets-p nil) #("page.html" 0 9 (:parent #381)))) #(".\n" 0 2 (:parent #358))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #354]) #("For what happens at the database level see " 0 43 (:parent #359)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #359] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #359))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #354]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #360)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #360] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #364)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #364] :use-brackets-p nil) #("result" 0 6 (:parent #368))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #364] :use-brackets-p nil) #("page.html" 0 9 (:parent #369)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #360)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #360] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #366))) #(".\n" 0 2 (:parent #360))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #352))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #352]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #355]) #("The " 0 4 (:parent #358)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #358] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #362))) #("is built on high performance " 0 29 (:parent #358)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #358] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #364))) #("with " 0 5 (:parent #358)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #358] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #366))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #358))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #355] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #355]) #("(json2yaml.rb is in the gn" 0 26 (:parent #360)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #360] :use-brackets-p nil) #("server" 0 6 (:parent #364))) #("repo). For the current API definition\nsee " 0 42 (:parent #360)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #360] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #366))) #("documentation.\n" 0 15 (:parent #360))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #353))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #353]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #356]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #359))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #344] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #354))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #354] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #357))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #357]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #360]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #363)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #363] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #363)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #363] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #369))) #(".\n" 0 2 (:parent #363))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #354] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #358))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #358]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #361]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #364)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #364] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #368))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #364)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #364] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #370))) #(".\n" 0 2 (:parent #364))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #361]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #365))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #361] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #361]) #("and, for example, in the method run" 0 35 (:parent #367)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #367] :use-brackets-p nil) #("rqtl" 0 4 (:parent #371))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #367] :use-brackets-p nil) #("geno" 0 4 (:parent #372))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #367)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #367] :use-brackets-p nil) #("extra" 0 5 (:parent #374))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #367))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #361] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #361]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #369))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #361] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t])))))) :headline-offset 0 :headline-numbering nil :id-alist nil :citations nil :id-local-cache #)) #f(compiled-function (element) #)((headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #5]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #8] :key "TITLE" :value "Installing GeneNetwork services"))) #0 (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #5] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #10))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #10]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #13]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #16))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #5] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #11))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #11]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #14]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #17)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #17] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #21))) #(").\n" 0 3 (:parent #17))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #14]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #18)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #18] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #18))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #14]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #19))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #14]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #20)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #20] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #20))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #14]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #21))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #14]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #22)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #22] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #22))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #5] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #12))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #12]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #15]) #("The main " 0 9 (:parent #18)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #18] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #22))) #("is built on " 0 12 (:parent #18)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #18] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #24))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #18)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #18] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #26))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #18)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #18] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #28))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #18)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #18] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #30)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #30] :use-brackets-p nil) #("page.html" 0 9 (:parent #34)))) #("in the " 0 7 (:parent #18)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #18] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #32))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #18)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #18] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #34)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #34] :use-brackets-p nil) #("select" 0 6 (:parent #38))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #34] :use-brackets-p nil) #("menu.js" 0 7 (:parent #39)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #18)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #18] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #36)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #36] :use-brackets-p nil) #("select" 0 6 (:parent #40))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #36] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #41)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #18)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #18] :use-brackets-p nil) #("server" 0 6 (:parent #38))) #("in the latest version, see " 0 27 (:parent #18)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #18] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #40))) #(".\n" 0 2 (:parent #18))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #15]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #19)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #19] :use-brackets-p nil) #("M2" 0 2 (:parent #23))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #19] :use-brackets-p nil) #("0606" 0 4 (:parent #24))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #19] :use-brackets-p nil) #("P" 0 1 (:parent #25))) #("&search" 0 7 (:parent #19)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #19] :use-brackets-p nil) #("terms" 0 5 (:parent #27))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #19] :use-brackets-p nil) #("or" 0 2 (:parent #28))) #("=&search" 0 8 (:parent #19)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #19] :use-brackets-p nil) #("terms" 0 5 (:parent #30))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #19] :use-brackets-p nil) #("and" 0 3 (:parent #31))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #19)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #19] :use-brackets-p nil) #("server" 0 6 (:parent #33))) #("). The logic is in\nsearch" 0 25 (:parent #19)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #19] :use-brackets-p nil) #("result.py" 0 9 (:parent #35))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #19)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #19] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #37)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #37] :use-brackets-p nil) #("result" 0 6 (:parent #41))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #37] :use-brackets-p nil) #("page.html" 0 9 (:parent #42)))) #(".\n" 0 2 (:parent #19))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #15]) #("For what happens at the database level see " 0 43 (:parent #20)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #20] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #20))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #15]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #21)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #21] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #25)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #25] :use-brackets-p nil) #("result" 0 6 (:parent #29))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #25] :use-brackets-p nil) #("page.html" 0 9 (:parent #30)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #21)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #21] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #27))) #(".\n" 0 2 (:parent #21))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #5] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #13))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #13]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #16]) #("The " 0 4 (:parent #19)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #19] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #23))) #("is built on high performance " 0 29 (:parent #19)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #19] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #25))) #("with " 0 5 (:parent #19)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #19] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #27))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #19))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #16] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #16]) #("(json2yaml.rb is in the gn" 0 26 (:parent #21)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #21] :use-brackets-p nil) #("server" 0 6 (:parent #25))) #("repo). For the current API definition\nsee " 0 42 (:parent #21)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #21] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #27))) #("documentation.\n" 0 15 (:parent #21))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #5] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #14))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #14]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #17]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #20))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #5] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #15))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #15] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #18))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #18]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #21]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #24)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #24] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #24)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #24] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #30))) #(".\n" 0 2 (:parent #24))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #15] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #19))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #19]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #22]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #25)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #25] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #29))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #25)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #25] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #31))) #(".\n" 0 2 (:parent #25))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #22]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #26))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #22] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #22]) #("and, for example, in the method run" 0 35 (:parent #28)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #28] :use-brackets-p nil) #("rqtl" 0 4 (:parent #32))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #28] :use-brackets-p nil) #("geno" 0 4 (:parent #33))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #28)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #28] :use-brackets-p nil) #("extra" 0 5 (:parent #35))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #28))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #22] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #22]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #30))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #22] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t]))))))] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #0))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil #0]) (plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #3] :type unordered) (item (:standard-properties [121 121 124 156 156 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #6] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [124 124 124 156 156 0 nil nil nil nil nil nil nil nil # nil nil #9]) (link (:standard-properties [124 nil 141 153 155 0 nil nil nil nil nil nil nil nil # nil nil #12] :type "custom-id" :type-explicit-p nil :path "introduction" :format bracket :raw-link "#introduction" :application nil :search-option nil) #("Introduction" 0 12 (:parent #15))) #("\n" 0 1 (:parent #12)))) (item (:standard-properties [156 156 159 239 239 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #6] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [159 159 159 239 239 0 nil nil nil nil nil nil nil nil # nil nil #10]) (link (:standard-properties [159 nil 200 236 238 0 nil nil nil nil nil nil nil nil # nil nil #13] :type "custom-id" :type-explicit-p nil :path "reproducibility-and-interoperability" :format bracket :raw-link "#reproducibility-and-interoperability" :application nil :search-option nil) #("Reproducibility and interoperability" 0 36 (:parent #16))) #("\n" 0 1 (:parent #13)))) (item (:standard-properties [239 239 242 268 268 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #6] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [242 242 242 268 268 0 nil nil nil nil nil nil nil nil # nil nil #11]) (link (:standard-properties [242 nil 256 265 267 0 nil nil nil nil nil nil nil nil # nil nil #14] :type "custom-id" :type-explicit-p nil :path "webserver" :format bracket :raw-link "#webserver" :application nil :search-option nil) #("Webserver" 0 9 (:parent #17))) #("\n" 0 1 (:parent #14)))) (item (:standard-properties [268 268 271 307 307 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #6] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [271 271 271 307 307 0 nil nil nil nil nil nil nil nil # nil nil #12]) (link (:standard-properties [271 nil 289 304 306 0 nil nil nil nil nil nil nil nil # nil nil #15] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #18))) #("\n" 0 1 (:parent #15)))) (item (:standard-properties [307 307 310 330 330 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #6] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [310 310 310 330 330 0 nil nil nil nil nil nil nil nil # nil nil #13]) (link (:standard-properties [310 nil 321 327 329 0 nil nil nil nil nil nil nil nil # nil nil #16] :type "custom-id" :type-explicit-p nil :path "gnexec" :format bracket :raw-link "#gnexec" :application nil :search-option nil) #("GnExec" 0 6 (:parent #19))) #("\n" 0 1 (:parent #16)))) (item (:standard-properties [330 330 333 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #6] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [333 333 333 357 357 0 nil nil nil nil nil nil nil nil # nil nil #14]) (link (:standard-properties [333 nil 346 354 356 0 nil nil nil nil nil nil nil nil # nil nil #17] :type "custom-id" :type-explicit-p nil :path "database" :format bracket :raw-link "#database" :application nil :search-option nil) #("Database" 0 8 (:parent #20))) #("\n" 0 1 (:parent #17))) (plain-list (:standard-properties [357 357 357 421 421 0 nil nil nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #14] :type unordered) (item (:standard-properties [357 357 362 390 390 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #18] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [362 362 362 390 390 0 nil nil nil nil nil nil nil nil # nil nil #21]) (link (:standard-properties [362 nil 377 387 389 0 nil nil nil nil nil nil nil nil # nil nil #24] :type "custom-id" :type-explicit-p nil :path "phenotypes" :format bracket :raw-link "#phenotypes" :application nil :search-option nil) #("Phenotypes" 0 10 (:parent #27))) #("\n" 0 1 (:parent #24)))) (item (:standard-properties [390 390 395 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #18] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [395 395 395 421 421 0 nil nil nil nil nil nil nil nil # nil nil #22]) (link (:standard-properties [395 nil 409 418 420 0 nil nil nil nil nil nil nil nil # nil nil #25] :type "custom-id" :type-explicit-p nil :path "genotypes" :format bracket :raw-link "#genotypes" :application nil :search-option nil) #("Genotypes" 0 9 (:parent #28))) #("\n" 0 1 (:parent #25)))))))))) mapconcat(#f(compiled-function (element) #) ((section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) . #0)]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #1] :key "TITLE" :value "Installing GeneNetwork services"))) (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) . #0)] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #2))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil #2]) (plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #5] :type unordered) (item (:standard-properties [121 121 124 156 156 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #8] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [124 124 124 156 156 0 nil nil nil nil nil nil nil nil # nil nil #11]) (link (:standard-properties [124 nil 141 153 155 0 nil nil nil nil nil nil nil nil # nil nil #14] :type "custom-id" :type-explicit-p nil :path "introduction" :format bracket :raw-link "#introduction" :application nil :search-option nil) #("Introduction" 0 12 (:parent #17))) #("\n" 0 1 (:parent #14)))) (item (:standard-properties [156 156 159 239 239 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #8] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [159 159 159 239 239 0 nil nil nil nil nil nil nil nil # nil nil #12]) (link (:standard-properties [159 nil 200 236 238 0 nil nil nil nil nil nil nil nil # nil nil #15] :type "custom-id" :type-explicit-p nil :path "reproducibility-and-interoperability" :format bracket :raw-link "#reproducibility-and-interoperability" :application nil :search-option nil) #("Reproducibility and interoperability" 0 36 (:parent #18))) #("\n" 0 1 (:parent #15)))) (item (:standard-properties [239 239 242 268 268 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #8] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [242 242 242 268 268 0 nil nil nil nil nil nil nil nil # nil nil #13]) (link (:standard-properties [242 nil 256 265 267 0 nil nil nil nil nil nil nil nil # nil nil #16] :type "custom-id" :type-explicit-p nil :path "webserver" :format bracket :raw-link "#webserver" :application nil :search-option nil) #("Webserver" 0 9 (:parent #19))) #("\n" 0 1 (:parent #16)))) (item (:standard-properties [268 268 271 307 307 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #8] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [271 271 271 307 307 0 nil nil nil nil nil nil nil nil # nil nil #14]) (link (:standard-properties [271 nil 289 304 306 0 nil nil nil nil nil nil nil nil # nil nil #17] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #20))) #("\n" 0 1 (:parent #17)))) (item (:standard-properties [307 307 310 330 330 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #8] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [310 310 310 330 330 0 nil nil nil nil nil nil nil nil # nil nil #15]) (link (:standard-properties [310 nil 321 327 329 0 nil nil nil nil nil nil nil nil # nil nil #18] :type "custom-id" :type-explicit-p nil :path "gnexec" :format bracket :raw-link "#gnexec" :application nil :search-option nil) #("GnExec" 0 6 (:parent #21))) #("\n" 0 1 (:parent #18)))) (item (:standard-properties [330 330 333 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #8] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [333 333 333 357 357 0 nil nil nil nil nil nil nil nil # nil nil #16]) (link (:standard-properties [333 nil 346 354 356 0 nil nil nil nil nil nil nil nil # nil nil #19] :type "custom-id" :type-explicit-p nil :path "database" :format bracket :raw-link "#database" :application nil :search-option nil) #("Database" 0 8 (:parent #22))) #("\n" 0 1 (:parent #19))) (plain-list (:standard-properties [357 357 357 421 421 0 nil nil nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #16] :type unordered) (item (:standard-properties [357 357 362 390 390 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #20] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [362 362 362 390 390 0 nil nil nil nil nil nil nil nil # nil nil #23]) (link (:standard-properties [362 nil 377 387 389 0 nil nil nil nil nil nil nil nil # nil nil #26] :type "custom-id" :type-explicit-p nil :path "phenotypes" :format bracket :raw-link "#phenotypes" :application nil :search-option nil) #("Phenotypes" 0 10 (:parent #29))) #("\n" 0 1 (:parent #26)))) (item (:standard-properties [390 390 395 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #20] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [395 395 395 421 421 0 nil nil nil nil nil nil nil nil # nil nil #24]) (link (:standard-properties [395 nil 409 418 420 0 nil nil nil nil nil nil nil nil # nil nil #27] :type "custom-id" :type-explicit-p nil :path "genotypes" :format bracket :raw-link "#genotypes" :application nil :search-option nil) #("Genotypes" 0 9 (:parent #30))) #("\n" 0 1 (:parent #27))))))))) (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) . #0)] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #3))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #3]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #6]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #9))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) . #0)] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #4))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #4]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #7]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #10)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #10] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #14))) #(").\n" 0 3 (:parent #10))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #7]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #11)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #11] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #11))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #7]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #12))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #7]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #13)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #13] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #13))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #7]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #14))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #7]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #15)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #15] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #15))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) . #0)] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #5))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #5]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #8]) #("The main " 0 9 (:parent #11)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #11] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #15))) #("is built on " 0 12 (:parent #11)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #11] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #17))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #11)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #11] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #19))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #11)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #11] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #21))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #11)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #11] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #23)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #23] :use-brackets-p nil) #("page.html" 0 9 (:parent #27)))) #("in the " 0 7 (:parent #11)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #11] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #25))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #11)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #11] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #27)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #27] :use-brackets-p nil) #("select" 0 6 (:parent #31))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #27] :use-brackets-p nil) #("menu.js" 0 7 (:parent #32)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #11)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #11] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #29)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #29] :use-brackets-p nil) #("select" 0 6 (:parent #33))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #29] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #34)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #11)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #11] :use-brackets-p nil) #("server" 0 6 (:parent #31))) #("in the latest version, see " 0 27 (:parent #11)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #11] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #33))) #(".\n" 0 2 (:parent #11))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #8]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #12)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #12] :use-brackets-p nil) #("M2" 0 2 (:parent #16))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #12] :use-brackets-p nil) #("0606" 0 4 (:parent #17))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #12] :use-brackets-p nil) #("P" 0 1 (:parent #18))) #("&search" 0 7 (:parent #12)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #12] :use-brackets-p nil) #("terms" 0 5 (:parent #20))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #12] :use-brackets-p nil) #("or" 0 2 (:parent #21))) #("=&search" 0 8 (:parent #12)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #12] :use-brackets-p nil) #("terms" 0 5 (:parent #23))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #12] :use-brackets-p nil) #("and" 0 3 (:parent #24))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #12)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #12] :use-brackets-p nil) #("server" 0 6 (:parent #26))) #("). The logic is in\nsearch" 0 25 (:parent #12)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #12] :use-brackets-p nil) #("result.py" 0 9 (:parent #28))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #12)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #12] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #30)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #30] :use-brackets-p nil) #("result" 0 6 (:parent #34))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #30] :use-brackets-p nil) #("page.html" 0 9 (:parent #35)))) #(".\n" 0 2 (:parent #12))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #8]) #("For what happens at the database level see " 0 43 (:parent #13)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #13] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #13))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #8]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #14)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #14] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #18)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #18] :use-brackets-p nil) #("result" 0 6 (:parent #22))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #18] :use-brackets-p nil) #("page.html" 0 9 (:parent #23)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #14)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #14] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #20))) #(".\n" 0 2 (:parent #14))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) . #0)] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #6))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #6]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #9]) #("The " 0 4 (:parent #12)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #12] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #16))) #("is built on high performance " 0 29 (:parent #12)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #12] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #18))) #("with " 0 5 (:parent #12)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #12] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #20))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #12))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #9] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #9]) #("(json2yaml.rb is in the gn" 0 26 (:parent #14)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #14] :use-brackets-p nil) #("server" 0 6 (:parent #18))) #("repo). For the current API definition\nsee " 0 42 (:parent #14)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #14] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #20))) #("documentation.\n" 0 15 (:parent #14))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) . #0)] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #7))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #7]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #10]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #13))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) . #0)] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #8))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #8] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #11))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #11]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #14]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #17)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #17] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #17)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #17] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #23))) #(".\n" 0 2 (:parent #17))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #8] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #12))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #12]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #15]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #18)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #18] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #22))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #18)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #18] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #24))) #(".\n" 0 2 (:parent #18))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #15]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #19))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #15] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #15]) #("and, for example, in the method run" 0 35 (:parent #21)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #21] :use-brackets-p nil) #("rqtl" 0 4 (:parent #25))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #21] :use-brackets-p nil) #("geno" 0 4 (:parent #26))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #21)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #21] :use-brackets-p nil) #("extra" 0 5 (:parent #28))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #21))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #15] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #15]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #23))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #15] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t])))))) "") org-export-data((org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #0]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #3] :key "TITLE" :value "Installing GeneNetwork services"))) (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil #0] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #4))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil #4]) (plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #7] :type unordered) (item (:standard-properties [121 121 124 156 156 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #10] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [124 124 124 156 156 0 nil nil nil nil nil nil nil nil # nil nil #13]) (link (:standard-properties [124 nil 141 153 155 0 nil nil nil nil nil nil nil nil # nil nil #16] :type "custom-id" :type-explicit-p nil :path "introduction" :format bracket :raw-link "#introduction" :application nil :search-option nil) #("Introduction" 0 12 (:parent #19))) #("\n" 0 1 (:parent #16)))) (item (:standard-properties [156 156 159 239 239 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #10] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [159 159 159 239 239 0 nil nil nil nil nil nil nil nil # nil nil #14]) (link (:standard-properties [159 nil 200 236 238 0 nil nil nil nil nil nil nil nil # nil nil #17] :type "custom-id" :type-explicit-p nil :path "reproducibility-and-interoperability" :format bracket :raw-link "#reproducibility-and-interoperability" :application nil :search-option nil) #("Reproducibility and interoperability" 0 36 (:parent #20))) #("\n" 0 1 (:parent #17)))) (item (:standard-properties [239 239 242 268 268 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #10] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [242 242 242 268 268 0 nil nil nil nil nil nil nil nil # nil nil #15]) (link (:standard-properties [242 nil 256 265 267 0 nil nil nil nil nil nil nil nil # nil nil #18] :type "custom-id" :type-explicit-p nil :path "webserver" :format bracket :raw-link "#webserver" :application nil :search-option nil) #("Webserver" 0 9 (:parent #21))) #("\n" 0 1 (:parent #18)))) (item (:standard-properties [268 268 271 307 307 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #10] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [271 271 271 307 307 0 nil nil nil nil nil nil nil nil # nil nil #16]) (link (:standard-properties [271 nil 289 304 306 0 nil nil nil nil nil nil nil nil # nil nil #19] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #22))) #("\n" 0 1 (:parent #19)))) (item (:standard-properties [307 307 310 330 330 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #10] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [310 310 310 330 330 0 nil nil nil nil nil nil nil nil # nil nil #17]) (link (:standard-properties [310 nil 321 327 329 0 nil nil nil nil nil nil nil nil # nil nil #20] :type "custom-id" :type-explicit-p nil :path "gnexec" :format bracket :raw-link "#gnexec" :application nil :search-option nil) #("GnExec" 0 6 (:parent #23))) #("\n" 0 1 (:parent #20)))) (item (:standard-properties [330 330 333 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #10] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [333 333 333 357 357 0 nil nil nil nil nil nil nil nil # nil nil #18]) (link (:standard-properties [333 nil 346 354 356 0 nil nil nil nil nil nil nil nil # nil nil #21] :type "custom-id" :type-explicit-p nil :path "database" :format bracket :raw-link "#database" :application nil :search-option nil) #("Database" 0 8 (:parent #24))) #("\n" 0 1 (:parent #21))) (plain-list (:standard-properties [357 357 357 421 421 0 nil nil nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #18] :type unordered) (item (:standard-properties [357 357 362 390 390 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #22] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [362 362 362 390 390 0 nil nil nil nil nil nil nil nil # nil nil #25]) (link (:standard-properties [362 nil 377 387 389 0 nil nil nil nil nil nil nil nil # nil nil #28] :type "custom-id" :type-explicit-p nil :path "phenotypes" :format bracket :raw-link "#phenotypes" :application nil :search-option nil) #("Phenotypes" 0 10 (:parent #31))) #("\n" 0 1 (:parent #28)))) (item (:standard-properties [390 390 395 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #22] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [395 395 395 421 421 0 nil nil nil nil nil nil nil nil # nil nil #26]) (link (:standard-properties [395 nil 409 418 420 0 nil nil nil nil nil nil nil nil # nil nil #29] :type "custom-id" :type-explicit-p nil :path "genotypes" :format bracket :raw-link "#genotypes" :application nil :search-option nil) #("Genotypes" 0 9 (:parent #32))) #("\n" 0 1 (:parent #29))))))))) (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #0] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #5))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #5]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #8]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #11))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #0] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #6))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #6]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #9]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #12)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #12] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #16))) #(").\n" 0 3 (:parent #12))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #9]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #13)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #13] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #13))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #9]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #14))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #9]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #15)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #15] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #15))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #9]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #16))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #9]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #17)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #17] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #17))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #0] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #7))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #7]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #10]) #("The main " 0 9 (:parent #13)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #13] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #17))) #("is built on " 0 12 (:parent #13)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #13] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #19))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #13)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #13] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #21))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #13)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #13] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #23))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #13)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #13] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #25)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #25] :use-brackets-p nil) #("page.html" 0 9 (:parent #29)))) #("in the " 0 7 (:parent #13)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #13] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #27))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #13)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #13] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #29)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #29] :use-brackets-p nil) #("select" 0 6 (:parent #33))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #29] :use-brackets-p nil) #("menu.js" 0 7 (:parent #34)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #13)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #13] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #31)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #31] :use-brackets-p nil) #("select" 0 6 (:parent #35))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #31] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #36)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #13)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #13] :use-brackets-p nil) #("server" 0 6 (:parent #33))) #("in the latest version, see " 0 27 (:parent #13)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #13] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #35))) #(".\n" 0 2 (:parent #13))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #10]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #14)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #14] :use-brackets-p nil) #("M2" 0 2 (:parent #18))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #14] :use-brackets-p nil) #("0606" 0 4 (:parent #19))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #14] :use-brackets-p nil) #("P" 0 1 (:parent #20))) #("&search" 0 7 (:parent #14)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #14] :use-brackets-p nil) #("terms" 0 5 (:parent #22))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #14] :use-brackets-p nil) #("or" 0 2 (:parent #23))) #("=&search" 0 8 (:parent #14)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #14] :use-brackets-p nil) #("terms" 0 5 (:parent #25))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #14] :use-brackets-p nil) #("and" 0 3 (:parent #26))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #14)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #14] :use-brackets-p nil) #("server" 0 6 (:parent #28))) #("). The logic is in\nsearch" 0 25 (:parent #14)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #14] :use-brackets-p nil) #("result.py" 0 9 (:parent #30))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #14)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #14] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #32)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #32] :use-brackets-p nil) #("result" 0 6 (:parent #36))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #32] :use-brackets-p nil) #("page.html" 0 9 (:parent #37)))) #(".\n" 0 2 (:parent #14))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #10]) #("For what happens at the database level see " 0 43 (:parent #15)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #15] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #15))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #10]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #16)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #16] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #20)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #20] :use-brackets-p nil) #("result" 0 6 (:parent #24))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #20] :use-brackets-p nil) #("page.html" 0 9 (:parent #25)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #16)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #16] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #22))) #(".\n" 0 2 (:parent #16))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #0] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #8))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #8]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #11]) #("The " 0 4 (:parent #14)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #14] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #18))) #("is built on high performance " 0 29 (:parent #14)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #14] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #20))) #("with " 0 5 (:parent #14)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #14] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #22))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #14))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #11] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #11]) #("(json2yaml.rb is in the gn" 0 26 (:parent #16)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #16] :use-brackets-p nil) #("server" 0 6 (:parent #20))) #("repo). For the current API definition\nsee " 0 42 (:parent #16)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #16] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #22))) #("documentation.\n" 0 15 (:parent #16))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #0] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #9))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #9]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #12]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #15))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #0] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #10))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #10] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #13))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #13]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #16]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #19)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #19] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #19)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #19] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #25))) #(".\n" 0 2 (:parent #19))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #10] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #14))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #14]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #17]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #20)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #20] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #24))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #20)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #20] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #26))) #(".\n" 0 2 (:parent #20))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #17]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #21))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #17] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #17]) #("and, for example, in the method run" 0 35 (:parent #23)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #23] :use-brackets-p nil) #("rqtl" 0 4 (:parent #27))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #23] :use-brackets-p nil) #("geno" 0 4 (:parent #28))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #23)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #23] :use-brackets-p nil) #("extra" 0 5 (:parent #30))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #23))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #17] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #17]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #25))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #17] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t])))))) (:export-options (body-only) :back-end #s(org-export-backend :name html :parent nil :transcoders ((bold . org-html-bold) (center-block . org-html-center-block) (clock . org-html-clock) (code . org-html-code) (drawer . org-html-drawer) (dynamic-block . org-html-dynamic-block) (entity . org-html-entity) (example-block . org-html-example-block) (export-block . org-html-export-block) (export-snippet . org-html-export-snippet) (fixed-width . org-html-fixed-width) (footnote-reference . org-html-footnote-reference) (headline . org-html-headline) (horizontal-rule . org-html-horizontal-rule) (inline-src-block . org-html-inline-src-block) (inlinetask . org-html-inlinetask) (inner-template . org-html-inner-template) (italic . org-html-italic) (item . org-html-item) (keyword . org-html-keyword) (latex-environment . org-html-latex-environment) (latex-fragment . org-html-latex-fragment) (line-break . org-html-line-break) (link . org-html-link) (node-property . org-html-node-property) (paragraph . org-html-paragraph) (plain-list . org-html-plain-list) (plain-text . org-html-plain-text) (planning . org-html-planning) (property-drawer . org-html-property-drawer) (quote-block . org-html-quote-block) (radio-target . org-html-radio-target) (section . org-html-section) (special-block . org-html-special-block) (src-block . org-html-src-block) (statistics-cookie . org-html-statistics-cookie) (strike-through . org-html-strike-through) (subscript . org-html-subscript) (superscript . org-html-superscript) (table . org-html-table) (table-cell . org-html-table-cell) (table-row . org-html-table-row) (target . org-html-target) (template . org-html-template) (timestamp . org-html-timestamp) (underline . org-html-underline) (verbatim . org-html-verbatim) (verse-block . org-html-verse-block)) :options ((:html-doctype "HTML_DOCTYPE" nil org-html-doctype) (:html-container "HTML_CONTAINER" nil org-html-container-element) (:html-content-class "HTML_CONTENT_CLASS" nil org-html-content-class) (:description "DESCRIPTION" nil nil newline) (:keywords "KEYWORDS" nil nil space) (:html-html5-fancy nil "html5-fancy" org-html-html5-fancy) (:html-link-use-abs-url nil "html-link-use-abs-url" org-html-link-use-abs-url) (:html-link-home "HTML_LINK_HOME" nil org-html-link-home) (:html-link-up "HTML_LINK_UP" nil org-html-link-up) (:html-mathjax "HTML_MATHJAX" nil "" space) (:html-equation-reference-format "HTML_EQUATION_REFERENCE_FORMAT" nil org-html-equation-reference-format t) (:html-postamble nil "html-postamble" org-html-postamble) (:html-preamble nil "html-preamble" org-html-preamble) (:html-head "HTML_HEAD" nil org-html-head newline) (:html-head-extra "HTML_HEAD_EXTRA" nil org-html-head-extra newline) (:subtitle "SUBTITLE" nil nil parse) (:html-head-include-default-style nil "html-style" org-html-head-include-default-style) (:html-head-include-scripts nil "html-scripts" org-html-head-include-scripts) (:html-allow-name-attribute-in-anchors nil nil org-html-allow-name-attribute-in-anchors) (:html-divs nil nil org-html-divs) (:html-checkbox-type nil nil org-html-checkbox-type) (:html-extension nil nil org-html-extension) (:html-footnote-format nil nil org-html-footnote-format) (:html-footnote-separator nil nil org-html-footnote-separator) (:html-footnotes-section nil nil org-html-footnotes-section) (:html-format-drawer-function nil nil org-html-format-drawer-function) (:html-format-headline-function nil nil org-html-format-headline-function) (:html-format-inlinetask-function nil nil org-html-format-inlinetask-function) (:html-home/up-format nil nil org-html-home/up-format) (:html-indent nil nil org-html-indent) (:html-infojs-options nil nil org-html-infojs-options) (:html-infojs-template nil nil org-html-infojs-template) (:html-inline-image-rules nil nil org-html-inline-image-rules) (:html-link-org-files-as-html nil nil org-html-link-org-files-as-html) (:html-mathjax-options nil nil org-html-mathjax-options) (:html-mathjax-template nil nil org-html-mathjax-template) (:html-metadata-timestamp-format nil nil org-html-metadata-timestamp-format) (:html-postamble-format nil nil org-html-postamble-format) (:html-preamble-format nil nil org-html-preamble-format) (:html-prefer-user-labels nil nil org-html-prefer-user-labels) (:html-self-link-headlines nil nil org-html-self-link-headlines) (:html-table-align-individual-fields nil nil org-html-table-align-individual-fields) (:html-table-caption-above nil nil org-html-table-caption-above) (:html-table-data-tags nil nil org-html-table-data-tags) (:html-table-header-tags nil nil org-html-table-header-tags) (:html-table-use-header-tags-for-first-column nil nil org-html-table-use-header-tags-for-first-column) (:html-tag-class-prefix nil nil org-html-tag-class-prefix) (:html-text-markup-alist nil nil org-html-text-markup-alist) (:html-todo-kwd-class-prefix nil nil org-html-todo-kwd-class-prefix) (:html-toplevel-hlevel nil nil org-html-toplevel-hlevel) (:html-use-infojs nil nil org-html-use-infojs) (:html-validation-link nil nil org-html-validation-link) (:html-viewport nil nil org-html-viewport) (:html-inline-images nil nil org-html-inline-images) (:html-table-attributes nil nil org-html-table-default-attributes) (:html-table-row-open-tag nil nil org-html-table-row-open-tag) (:html-table-row-close-tag nil nil org-html-table-row-close-tag) (:html-xml-declaration nil nil org-html-xml-declaration) (:html-wrap-src-lines nil nil org-html-wrap-src-lines) (:html-klipsify-src nil nil org-html-klipsify-src) (:html-klipse-css nil nil org-html-klipse-css) (:html-klipse-js nil nil org-html-klipse-js) (:html-klipse-selection-script nil nil org-html-klipse-selection-script) (:infojs-opt "INFOJS_OPT" nil nil) (:creator "CREATOR" nil org-html-creator-string) (:with-latex nil "tex" org-html-with-latex) (:latex-header "LATEX_HEADER" nil nil newline)) :filters ((:filter-options . org-html-infojs-install-script) (:filter-parse-tree . org-html-image-link-filter) (:filter-final-output . org-html-final-function)) :blocks nil :menu (104 "Export to HTML" ((72 "As HTML buffer" org-html-export-as-html) (104 "As HTML file" org-html-export-to-html) (111 "As HTML file and open" (lambda (a s v b) (if a (org-html-export-to-html t s v b) (org-open-file (org-html-export-to-html nil s v b)))))))) :translate-alist ((bold . org-html-bold) (center-block . org-html-center-block) (clock . org-html-clock) (code . org-html-code) (drawer . org-html-drawer) (dynamic-block . org-html-dynamic-block) (entity . org-html-entity) (example-block . org-html-example-block) (export-block . org-html-export-block) (export-snippet . org-html-export-snippet) (fixed-width . org-html-fixed-width) (footnote-reference . org-html-footnote-reference) (headline . org-html-headline) (horizontal-rule . org-html-horizontal-rule) (inline-src-block . org-html-inline-src-block) (inlinetask . org-html-inlinetask) (inner-template . org-html-inner-template) (italic . org-html-italic) (item . org-html-item) (keyword . org-html-keyword) (latex-environment . org-html-latex-environment) (latex-fragment . org-html-latex-fragment) (line-break . org-html-line-break) (link . org-html-link) (node-property . org-html-node-property) (paragraph . org-html-paragraph) (plain-list . org-html-plain-list) (plain-text . org-html-plain-text) (planning . org-html-planning) (property-drawer . org-html-property-drawer) (quote-block . org-html-quote-block) (radio-target . org-html-radio-target) (section . org-html-section) (special-block . org-html-special-block) (src-block . org-html-src-block) (statistics-cookie . org-html-statistics-cookie) (strike-through . org-html-strike-through) (subscript . org-html-subscript) (superscript . org-html-superscript) (table . org-html-table) (table-cell . org-html-table-cell) (table-row . org-html-table-row) (target . org-html-target) (template . org-html-template) (timestamp . org-html-timestamp) (underline . org-html-underline) (verbatim . org-html-verbatim) (verse-block . org-html-verse-block)) :exported-data # :input-buffer " *temp*" :input-file nil :html-doctype "xhtml-strict" :html-container "div" :html-content-class "content" :description nil :keywords nil :html-html5-fancy nil :html-link-use-abs-url nil :html-link-home "" :html-link-up "" :html-mathjax "" :html-equation-reference-format "\\eqref{%s}" :html-postamble auto :html-preamble t :html-head "" :html-head-extra "" :subtitle nil :html-head-include-default-style t :html-head-include-scripts nil :html-allow-name-attribute-in-anchors nil :html-divs ((preamble "div" "preamble") (content "div" "content") (postamble "div" "postamble")) :html-checkbox-type ascii :html-extension "html" :html-footnote-format "%s" :html-footnote-separator ", " :html-footnotes-section "
\n

%s:

\n
\n%s\n
\n
" :html-format-drawer-function #f(compiled-function (name contents) #) :html-format-headline-function org-html-format-headline-default-function :html-format-inlinetask-function org-html-format-inlinetask-default-function :html-home/up-format "
\n UP \n |\n HOME \n
" :html-indent nil :html-infojs-options ((path . "https://orgmode.org/org-info.js") (view . "info") (toc . :with-toc) (ftoc . "0") (tdepth . "max") (sdepth . "max") (mouse . "underline") (buttons . "0") (ltoc . "1") (up . :html-link-up) (home . :html-link-home)) :html-infojs-template "\n\n" :html-inline-image-rules (("file" . "\\(?:\\.\\(?:avif\\|gif\\|jp\\(?:e?g\\)\\|png\\|svg\\|webp\\)\\)") ("http" . "\\(?:\\.\\(?:avif\\|gif\\|jp\\(?:e?g\\)\\|png\\|svg\\|webp\\)\\)") ("https" . "\\(?:\\.\\(?:avif\\|gif\\|jp\\(?:e?g\\)\\|png\\|svg\\|webp\\)\\)")) :html-link-org-files-as-html t :html-mathjax-options ((path "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js") (scale 1.0) (align "center") (font "mathjax-modern") (overflow "overflow") (tags "ams") (indent "0em") (multlinewidth "85%") (tagindent ".8em") (tagside "right")) :html-mathjax-template "\n\n\n" :html-metadata-timestamp-format "%Y-%m-%d %a %H:%M" :html-postamble-format (("en" "

Author: %a (%e)

\n

Date: %d

\n

%c

\n

%v

")) :html-preamble-format (("en" "")) :html-prefer-user-labels nil :html-self-link-headlines nil :html-table-align-individual-fields t :html-table-caption-above t :html-table-data-tags ("" . "") :html-table-header-tags ("" . "") :html-table-use-header-tags-for-first-column nil :html-tag-class-prefix "" :html-text-markup-alist ((bold . "%s") (code . "%s") (italic . "%s") (strike-through . "%s") (underline . "%s") (verbatim . "%s")) :html-todo-kwd-class-prefix "" :html-toplevel-hlevel 2 :html-use-infojs when-configured :html-validation-link "Validate" :html-viewport ((width "device-width") (initial-scale "1") (minimum-scale "") (maximum-scale "") (user-scalable "")) :html-inline-images t :html-table-attributes (:border "2" :cellspacing "0" :cellpadding "6" :rules "groups" :frame "hsides") :html-table-row-open-tag "" :html-table-row-close-tag "" :html-xml-declaration (("html" . "") ("php" . "\"; ?>")) :html-wrap-src-lines nil :html-klipsify-src nil :html-klipse-css "https://storage.googleapis.com/app.klipse.tech/css/codemirror.css" :html-klipse-js "https://storage.googleapis.com/app.klipse.tech/plugin_prod/js/klipse_plugin.min.js" :html-klipse-selection-script "window.klipse_settings = {selector_eval_html: '.src-html',\n selector_eval_js: '.src-js',\n selector_eval_python_client: '.src-python',\n selector_eval_scheme: '.src-scheme',\n selector: '.src-clojure',\n selector_eval_ruby: '.src-ruby'};" :infojs-opt nil :creator "Emacs 30.1 (Org mode 9.7.11)" :with-latex t :latex-header nil :title (#("Installing GeneNetwork services" 0 31 (:parent #148))) :date nil :author (#("unknown" 0 7 (:parent #152))) :email "unknown@genenetwork-development" :language "en" :select-tags ("export") :exclude-tags ("noexport") :headline-levels 3 :preserve-breaks nil :section-numbers nil :time-stamp-file t :with-archived-trees headline :with-author t :expand-links t :with-broken-links nil :with-clocks nil :with-creator nil :with-date t :with-drawers (not "LOGBOOK") :with-email nil :with-emphasize t :with-entities t :with-fixed-width t :with-footnotes t :with-inlinetasks t :with-planning nil :with-priority nil :with-properties nil :with-smart-quotes nil :with-special-strings t :with-special-rows nil :with-statistics-cookies t :with-sub-superscript t :with-toc nil :with-tables t :with-tags t :with-tasks t :with-timestamps t :with-title t :with-todo-keywords t :with-cite-processors t :cite-export (basic nil nil) :bibliography nil :filter-body nil :filter-bold nil :filter-babel-call nil :filter-center-block nil :filter-clock nil :filter-code nil :filter-diary-sexp nil :filter-drawer nil :filter-dynamic-block nil :filter-entity nil :filter-example-block nil :filter-export-block nil :filter-export-snippet nil :filter-final-output (org-html-final-function) :filter-fixed-width nil :filter-footnote-definition nil :filter-footnote-reference nil :filter-headline nil :filter-horizontal-rule nil :filter-inline-babel-call nil :filter-inline-src-block nil :filter-inlinetask nil :filter-italic nil :filter-item nil :filter-keyword nil :filter-latex-environment nil :filter-latex-fragment nil :filter-line-break nil :filter-link nil :filter-node-property nil :filter-options (org-html-infojs-install-script) :filter-paragraph nil :filter-parse-tree (org-html-image-link-filter) :filter-plain-list nil :filter-plain-text nil :filter-planning nil :filter-property-drawer nil :filter-quote-block nil :filter-radio-target nil :filter-section nil :filter-special-block nil :filter-src-block nil :filter-statistics-cookie nil :filter-strike-through nil :filter-subscript nil :filter-superscript nil :filter-table nil :filter-table-cell nil :filter-table-row nil :filter-target nil :filter-timestamp nil :filter-underline nil :filter-verbatim nil :filter-verse-block nil :ignore-list nil :parse-tree (org-data (:standard-properties [1 1 1 12638 12638 0 nil org-data nil nil nil 3 12638 nil # nil nil nil] :path nil :CATEGORY nil) (section (:standard-properties [1 1 1 43 43 0 nil first-section nil nil nil 1 43 nil # nil nil #344]) (keyword (:standard-properties [1 1 nil nil 43 1 nil top-comment nil nil nil nil nil nil # nil nil #347] :key "TITLE" :value "Installing GeneNetwork services"))) (headline (:standard-properties [43 43 121 422 422 0 (:title) nil nil nil nil 123 420 1 # nil nil #344] :pre-blank 0 :raw-value "Table of Contents" :title (#("Table of Contents" 0 17 (:parent #348))) :level 1 :priority nil :tags ("TOC") :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [121 121 121 422 422 0 nil section nil nil nil 121 422 nil # nil nil #348]) (plain-list (:standard-properties [121 121 121 421 422 1 nil planning nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #351] :type unordered) (item (:standard-properties [121 121 124 156 156 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [124 124 124 156 156 0 nil nil nil nil nil nil nil nil # nil nil #357]) (link (:standard-properties [124 nil 141 153 155 0 nil nil nil nil nil nil nil nil # nil nil #360] :type "custom-id" :type-explicit-p nil :path "introduction" :format bracket :raw-link "#introduction" :application nil :search-option nil) #("Introduction" 0 12 (:parent #363))) #("\n" 0 1 (:parent #360)))) (item (:standard-properties [156 156 159 239 239 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [159 159 159 239 239 0 nil nil nil nil nil nil nil nil # nil nil #358]) (link (:standard-properties [159 nil 200 236 238 0 nil nil nil nil nil nil nil nil # nil nil #361] :type "custom-id" :type-explicit-p nil :path "reproducibility-and-interoperability" :format bracket :raw-link "#reproducibility-and-interoperability" :application nil :search-option nil) #("Reproducibility and interoperability" 0 36 (:parent #364))) #("\n" 0 1 (:parent #361)))) (item (:standard-properties [239 239 242 268 268 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [242 242 242 268 268 0 nil nil nil nil nil nil nil nil # nil nil #359]) (link (:standard-properties [242 nil 256 265 267 0 nil nil nil nil nil nil nil nil # nil nil #362] :type "custom-id" :type-explicit-p nil :path "webserver" :format bracket :raw-link "#webserver" :application nil :search-option nil) #("Webserver" 0 9 (:parent #365))) #("\n" 0 1 (:parent #362)))) (item (:standard-properties [268 268 271 307 307 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [271 271 271 307 307 0 nil nil nil nil nil nil nil nil # nil nil #360]) (link (:standard-properties [271 nil 289 304 306 0 nil nil nil nil nil nil nil nil # nil nil #363] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #366))) #("\n" 0 1 (:parent #363)))) (item (:standard-properties [307 307 310 330 330 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [310 310 310 330 330 0 nil nil nil nil nil nil nil nil # nil nil #361]) (link (:standard-properties [310 nil 321 327 329 0 nil nil nil nil nil nil nil nil # nil nil #364] :type "custom-id" :type-explicit-p nil :path "gnexec" :format bracket :raw-link "#gnexec" :application nil :search-option nil) #("GnExec" 0 6 (:parent #367))) #("\n" 0 1 (:parent #364)))) (item (:standard-properties [330 330 333 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #354] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [333 333 333 357 357 0 nil nil nil nil nil nil nil nil # nil nil #362]) (link (:standard-properties [333 nil 346 354 356 0 nil nil nil nil nil nil nil nil # nil nil #365] :type "custom-id" :type-explicit-p nil :path "database" :format bracket :raw-link "#database" :application nil :search-option nil) #("Database" 0 8 (:parent #368))) #("\n" 0 1 (:parent #365))) (plain-list (:standard-properties [357 357 357 421 421 0 nil nil nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #362] :type unordered) (item (:standard-properties [357 357 362 390 390 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #366] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [362 362 362 390 390 0 nil nil nil nil nil nil nil nil # nil nil #369]) (link (:standard-properties [362 nil 377 387 389 0 nil nil nil nil nil nil nil nil # nil nil #372] :type "custom-id" :type-explicit-p nil :path "phenotypes" :format bracket :raw-link "#phenotypes" :application nil :search-option nil) #("Phenotypes" 0 10 (:parent #375))) #("\n" 0 1 (:parent #372)))) (item (:standard-properties [390 390 395 421 421 0 (:tag) item nil nil nil nil nil nil # nil ((121 1 "- " nil nil nil 156) (156 1 "- " nil nil nil 239) (239 1 "- " nil nil nil 268) (268 1 "- " nil nil nil 307) (307 1 "- " nil nil nil 330) (330 1 "- " nil nil nil 421) (357 3 "- " nil nil nil 390) (390 3 "- " nil nil nil 421)) #366] :bullet "- " :checkbox nil :counter nil :pre-blank 0 :tag nil) (paragraph (:standard-properties [395 395 395 421 421 0 nil nil nil nil nil nil nil nil # nil nil #370]) (link (:standard-properties [395 nil 409 418 420 0 nil nil nil nil nil nil nil nil # nil nil #373] :type "custom-id" :type-explicit-p nil :path "genotypes" :format bracket :raw-link "#genotypes" :application nil :search-option nil) #("Genotypes" 0 9 (:parent #376))) #("\n" 0 1 (:parent #373))))))))) (headline (:standard-properties [422 422 438 555 555 0 (:title) nil nil nil nil 440 553 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 14) t] :title (#("Introduction" 0 12 (:parent #349))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [438 438 438 555 555 0 nil section nil nil nil 438 555 nil # nil nil #349]) (paragraph (:standard-properties [438 438 438 554 555 1 nil planning nil nil nil nil nil nil # nil nil #352]) #("This document describes the architecture of GN2. Because GN2 is\nevolving, only a high-level overview is given here.\n" 0 116 (:parent #355))))) (headline (:standard-properties [555 555 595 3925 3925 0 (:title) nil nil nil nil 597 3923 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 38) t] :title (#("Reproducibility and interoperability" 0 36 (:parent #350))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [595 595 595 3925 3925 0 nil section nil nil nil 595 3925 nil # nil nil #350]) (paragraph (:standard-properties [595 595 595 1141 1142 1 nil planning nil nil nil nil nil nil # nil nil #353]) #("Reproducible data analysis and software interoperability should be key\ngoals for any system that aims to bring research groups\ntogether. These goals are increasingly relevant with growing data\nsizes and increasingly complex analysis pipelines. Rigor,\nreproducibility, and robustness starts with data that should abide by\nFindable, Accessible, Interoperable, and Re-usable (FAIR) principles\n(see the Wilkinson Nature paper on " 0 425 (:parent #356)) (link (:standard-properties [1020 nil 1066 1136 1138 0 nil nil nil nil nil nil nil nil # nil nil #356] :type "http" :type-explicit-p t :path "//www.nature.com/articles/sdata201618" :format bracket :raw-link "http://www.nature.com/articles/sdata201618" :application nil :search-option nil) #("FAIR Guiding Principles for\nscientific data management and stewardship" 0 70 (:parent #360))) #(").\n" 0 3 (:parent #356))) (paragraph (:standard-properties [1142 1142 1142 1614 1615 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("GeneNetwork (GN2) solves this by assigning unique identifiers\n(cryptographic HASH values calculated over immutable data content),\nincluding these values in file or directory names, and making them\navailable through web interfaces (e.g., through a through a REST\nAPI). This means that at any point in the future the exact same data\ncan be retrieved using a known non-changeable identifier (see also\n" 0 398 (:parent #357)) (link (:standard-properties [1540 nil nil nil 1611 0 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :format plain :raw-link "https://github.com/pjotrp/genenetwork2/blob/staging/doc/submit-data.org" :application nil :search-option nil)) #(").\n" 0 3 (:parent #357))) (paragraph (:standard-properties [1615 1615 1615 1949 1950 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("Synchronisation, integrity checking and backups become trivial using\nthese HASH values, even for very large datasets. Since everything is\nmanaged at the file system level we can also use Unix authorisation\nsystems. HIPAA compliancy is achieved by using HASH references and\nbringing the software into the controlled HIPAA environment.\n" 0 334 (:parent #358))) (paragraph (:standard-properties [1950 1950 1950 2419 2420 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("In the context of GeneNetwork we are using git for version control of\nsoftware source code (" 0 92 (:parent #359)) (link (:standard-properties [2042 nil nil nil 2073 0 nil nil nil nil nil nil nil nil # nil nil #359] :type "https" :type-explicit-p t :path "//github.com/genenetwork/" :format plain :raw-link "https://github.com/genenetwork/" :application nil :search-option nil)) #("). Software can\nbe treated just like data, i.e., git uses HASH identifiers to retrieve\nspecific versions of source. I.e., versions of source code are\nidentifiable and retrievable and can be matched with data into an\nanalysis pipeline. The combination of software and data, again, makes\na unique HASH value which identifies the analysis pipeline.\n" 0 346 (:parent #359))) (paragraph (:standard-properties [2420 2420 2420 3231 3232 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("For combining runnable software and data into an analysis pipeline we\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\nuse GNU Guix which, yet again, turns everything into a unique HASH\nvalue which allows for exact retrieval and reproducibility. Not only\nthat, GNU Guix gives control of the software and all its dependencies,\ncalculating a HASH value for all dependencies, all the way down to\nversions of R, BLAS and glibc. This way of packaging software\nascertains that identical software pipelines are easily setup on\ndifferent system or in the Cloud. Meaning that everyone ends up using\nthe exact same combination of software versions in a pipeline.\n" 0 811 (:parent #360))) (paragraph (:standard-properties [3232 3232 3232 3924 3925 1 nil nil nil nil nil nil nil nil # nil nil #353]) #("For software development we use GNU Guix for integration testing and\ndeployment (described in JOSS paper). We also use automated test tools\n(Ruby mechanize) for integration testing of the web services and we\nuse unit testing of all backend services. All our software source code\nis published as `free and open source software' (FOSS) which means\nthat anyone can view code on github, comment on, or even contribute\nto. GeneNetwork is becoming increasingly modular and has a growing\nnumber of contributers who subscribe to the principles of THE SMALL\nTOOLS MANIFESTO FOR BIOINFORMATICS\n(" 0 585 (:parent #361)) (link (:standard-properties [3817 nil nil nil 3857 0 nil nil nil nil nil nil nil nil # nil nil #361] :type "https" :type-explicit-p t :path "//github.com/pjotrp/bioinformatics" :format plain :raw-link "https://github.com/pjotrp/bioinformatics" :application nil :search-option nil)) #(") which we drew up and was\nsigned by over fifty bioinformaticians.\n" 0 67 (:parent #361))))) (headline (:standard-properties [3925 3925 3938 6564 6564 0 (:title) nil nil nil nil 3940 6562 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 11) t] :title (#("Webserver" 0 9 (:parent #351))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [3938 3938 3938 6564 6564 0 nil section nil nil nil 3938 6564 nil # nil nil #351]) (paragraph (:standard-properties [3938 3938 3938 5189 5190 1 nil planning nil nil nil nil nil nil # nil nil #354]) #("The main " 0 9 (:parent #357)) (link (:standard-properties [3947 nil 3994 4007 4010 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2" :application nil :search-option nil) #("GN2 webserver" 0 13 (:parent #361))) #("is built on " 0 12 (:parent #357)) (link (:standard-properties [4022 nil 4049 4061 4064 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "http" :type-explicit-p t :path "//flask.pocoo.org/" :format bracket :raw-link "http://flask.pocoo.org/" :application nil :search-option nil) #("Python flask" 0 12 (:parent #363))) #("and this GN2 source\ncode can be found on " 0 41 (:parent #357)) (link (:standard-properties [4105 nil 4180 4186 4189 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask" :application nil :search-option nil) #("github" 0 6 (:parent #365))) #("in the wqflask directory. The routing\ntables are defined in " 0 60 (:parent #357)) (link (:standard-properties [4249 nil 4333 4341 4343 0 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/views.py" :application nil :search-option nil) #("views.py" 0 8 (:parent #367))) #(". For example the main page is loaded\nfrom a template named " 0 60 (:parent #357)) (link (:standard-properties [4403 nil 4503 4518 4521 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/index_page.htm" :application nil :search-option nil) #("index" 0 5 (:parent #369)) (subscript (:standard-properties [4508 nil 4509 4518 4518 0 nil nil nil nil nil nil nil nil # nil nil #369] :use-brackets-p nil) #("page.html" 0 9 (:parent #373)))) #("in the " 0 7 (:parent #357)) (link (:standard-properties [4528 nil 4613 4622 4625 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/tree/master/wqflask/wqflask/templates" :application nil :search-option nil) #("templates" 0 9 (:parent #371))) #("directory. In\nthe template you can find get the form gets filled by a Javascript\nroutine defined in " 0 100 (:parent #357)) (link (:standard-properties [4725 nil 4845 4864 4867 1 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/static/new/javascript/dataset_select_menu.js" :application nil :search-option nil) #("data" 0 4 (:parent #373)) (subscript (:standard-properties [4849 nil 4850 4856 4856 0 nil nil nil nil nil nil nil nil # nil nil #373] :use-brackets-p nil) #("select" 0 6 (:parent #377))) (subscript (:standard-properties [4856 nil 4857 4864 4864 0 nil nil nil nil nil nil nil nil # nil nil #373] :use-brackets-p nil) #("menu.js" 0 7 (:parent #378)))) #("which picks up a static JSON\nfile for the menu. This static file is generated with\n" 0 83 (:parent #357)) (link (:standard-properties [4950 nil 5051 5072 5074 0 nil nil nil nil nil nil nil nil # nil nil #357] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/maintenance/gen_select_dataset.py" :application nil :search-option nil) #("gen" 0 3 (:parent #375)) (subscript (:standard-properties [5054 nil 5055 5061 5061 0 nil nil nil nil nil nil nil nil # nil nil #375] :use-brackets-p nil) #("select" 0 6 (:parent #379))) (subscript (:standard-properties [5061 nil 5062 5072 5072 0 nil nil nil nil nil nil nil nil # nil nil #375] :use-brackets-p nil) #("dataset.py" 0 10 (:parent #380)))) #(". Note that this JSON data is served by\ngn" 0 43 (:parent #357)) (subscript (:standard-properties [5117 nil 5118 5124 5125 1 nil nil nil nil nil nil nil nil # nil nil #357] :use-brackets-p nil) #("server" 0 6 (:parent #377))) #("in the latest version, see " 0 27 (:parent #357)) (link (:standard-properties [5152 nil 5170 5185 5187 0 nil nil nil nil nil nil nil nil # nil nil #357] :type "custom-id" :type-explicit-p nil :path "gnserver-rest" :format bracket :raw-link "#gnserver-rest" :application nil :search-option nil) #("GnServer (REST)" 0 15 (:parent #379))) #(".\n" 0 2 (:parent #357))) (paragraph (:standard-properties [5190 5190 5190 5895 5896 1 nil nil nil nil nil nil nil nil # nil nil #354]) #("When you hit a search with, for example,\n'http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC" 0 127 (:parent #358)) (subscript (:standard-properties [5317 nil 5318 5320 5320 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("M2" 0 2 (:parent #362))) (subscript (:standard-properties [5320 nil 5321 5325 5325 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("0606" 0 4 (:parent #363))) (subscript (:standard-properties [5325 nil 5326 5327 5327 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("P" 0 1 (:parent #364))) #("&search" 0 7 (:parent #358)) (subscript (:standard-properties [5334 nil 5335 5340 5340 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("terms" 0 5 (:parent #366))) (subscript (:standard-properties [5340 nil 5341 5343 5343 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("or" 0 2 (:parent #367))) #("=&search" 0 8 (:parent #358)) (subscript (:standard-properties [5351 nil 5352 5357 5357 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("terms" 0 5 (:parent #369))) (subscript (:standard-properties [5357 nil 5358 5361 5361 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("and" 0 3 (:parent #370))) #("=MEAN%3D%2815+16%29+LRS%3D%2823+46%29+&FormID=searchResult'\nit has the menu items as parameters. According to the routing table,\nthe search is executed and Redis caching is used (we'll probably\nchange that to the level of the gn" 0 228 (:parent #358)) (subscript (:standard-properties [5589 nil 5590 5596 5596 0 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("server" 0 6 (:parent #372))) #("). The logic is in\nsearch" 0 25 (:parent #358)) (subscript (:standard-properties [5621 nil 5622 5631 5632 1 nil nil nil nil nil nil nil nil # nil nil #358] :use-brackets-p nil) #("result.py" 0 9 (:parent #374))) #("which invokes database functions in\nwqflask/dbFunction/webqtlDatabaseFunction.py, for example. The\nreceiving template lives at " 0 127 (:parent #358)) (link (:standard-properties [5759 nil 5868 5891 5893 0 nil nil nil nil nil nil nil nil # nil nil #358] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #376)) (subscript (:standard-properties [5874 nil 5875 5881 5881 0 nil nil nil nil nil nil nil nil # nil nil #376] :use-brackets-p nil) #("result" 0 6 (:parent #380))) (subscript (:standard-properties [5881 nil 5882 5891 5891 0 nil nil nil nil nil nil nil nil # nil nil #376] :use-brackets-p nil) #("page.html" 0 9 (:parent #381)))) #(".\n" 0 2 (:parent #358))) (paragraph (:standard-properties [5896 5896 5896 5957 5958 1 nil nil nil nil nil nil nil nil # nil nil #354]) #("For what happens at the database level see " 0 43 (:parent #359)) (link (:standard-properties [5939 nil nil nil 5955 0 nil nil nil nil nil nil nil nil # nil nil #359] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(".\n" 0 2 (:parent #359))) (paragraph (:standard-properties [5958 5958 5958 6563 6564 1 nil nil nil nil nil nil nil nil # nil nil #354]) #("A view consists of an HTML template with JS libraries for managing\nmenus, tables etc. For example, for the search results see the\n" 0 130 (:parent #360)) (link (:standard-properties [6088 nil 6197 6220 6223 1 nil nil nil nil nil nil nil nil # nil nil #360] :type "https" :type-explicit-p t :path "//github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :format bracket :raw-link "https://github.com/genenetwork/genenetwork2/blob/master/wqflask/wqflask/templates/search_result_page.html" :application nil :search-option nil) #("search" 0 6 (:parent #364)) (subscript (:standard-properties [6203 nil 6204 6210 6210 0 nil nil nil nil nil nil nil nil # nil nil #364] :use-brackets-p nil) #("result" 0 6 (:parent #368))) (subscript (:standard-properties [6210 nil 6211 6220 6220 0 nil nil nil nil nil nil nil nil # nil nil #364] :use-brackets-p nil) #("page.html" 0 9 (:parent #369)))) #("which is a Flask template. The first section\nputs the search in plain English, e.g. 'We searched Hippocampus\nConsortium M430v2 (Jun06) PDNN to find all records with MEAN between\n15 and 16 and with LRS between 23 and 46.'. Then the results are added\nto a table which is displayed using a JS " 0 290 (:parent #360)) (link (:standard-properties [6513 nil 6540 6559 6561 0 nil nil nil nil nil nil nil nil # nil nil #360] :type "https" :type-explicit-p t :path "//datatables.net/" :format bracket :raw-link "https://datatables.net/" :application nil :search-option nil) #("DataTable container" 0 19 (:parent #366))) #(".\n" 0 2 (:parent #360))))) (headline (:standard-properties [6564 6564 6583 7139 7139 0 (:title) nil nil nil nil 6585 7137 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 17) t] :title (#("GnServer (REST)" 0 15 (:parent #352))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [6583 6583 6583 7139 7139 0 nil section nil nil nil 6583 7139 nil # nil nil #352]) (paragraph (:standard-properties [6583 6583 6583 6905 6906 1 nil planning nil nil nil nil nil nil # nil nil #355]) #("The " 0 4 (:parent #358)) (link (:standard-properties [6587 nil 6631 6648 6651 1 nil nil nil nil nil nil nil nil # nil nil #358] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server" :format bracket :raw-link "https://github.com/genenetwork/gn_server" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #362))) #("is built on high performance " 0 29 (:parent #358)) (link (:standard-properties [6680 nil 6707 6713 6716 1 nil nil nil nil nil nil nil nil # nil nil #358] :type "http" :type-explicit-p t :path "//elixir-lang.org/" :format bracket :raw-link "http://elixir-lang.org/" :application nil :search-option nil) #("Elixir" 0 6 (:parent #364))) #("with " 0 5 (:parent #358)) (link (:standard-properties [6721 nil 6755 6759 6761 0 nil nil nil nil nil nil nil nil # nil nil #358] :type "https" :type-explicit-p t :path "//github.com/falood/maru" :format bracket :raw-link "https://github.com/falood/maru" :application nil :search-option nil) #("Maru" 0 4 (:parent #366))) #(".\nMainly the GnServer serves JSON requests, for example to fetch data\nfrom the database. To get the menu data in YAML you can do something like\n" 0 144 (:parent #358))) (fixed-width (:standard-properties [6906 6906 nil nil 6972 2 nil nil nil nil nil nil nil nil # nil nil #355] :value "curl localhost:8880/int/menu/main.json|ruby extra/json2yaml.rb")) (paragraph (:standard-properties [6972 6972 6972 7138 7139 1 nil nil nil nil nil nil nil nil # nil nil #355]) #("(json2yaml.rb is in the gn" 0 26 (:parent #360)) (subscript (:standard-properties [6998 nil 6999 7005 7006 1 nil nil nil nil nil nil nil nil # nil nil #360] :use-brackets-p nil) #("server" 0 6 (:parent #364))) #("repo). For the current API definition\nsee " 0 42 (:parent #360)) (link (:standard-properties [7048 nil 7103 7120 7123 1 nil nil nil nil nil nil nil nil # nil nil #360] :type "https" :type-explicit-p t :path "//github.com/genenetwork/gn_server/doc/API.md" :format bracket :raw-link "https://github.com/genenetwork/gn_server/doc/API.md" :application nil :search-option nil) #("GnServer REST API" 0 17 (:parent #366))) #("documentation.\n" 0 15 (:parent #360))))) (headline (:standard-properties [7139 7139 7149 7225 7225 0 (:title) nil nil nil nil 7151 7223 1 # nil nil #344] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (2 8) t] :title (#("GnExec" 0 6 (:parent #353))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7149 7149 7149 7225 7225 0 nil section nil nil nil 7149 7225 nil # nil nil #353]) (paragraph (:standard-properties [7149 7149 7149 7224 7225 1 nil planning nil nil nil nil nil nil # nil nil #356]) #("GnExec, also written in Elixir, executes commands using a separate\ndaemon.\n" 0 75 (:parent #359))))) (headline (:standard-properties [7225 7225 7236 12638 12638 0 (:title) nil nil nil nil 7238 12636 1 # nil nil #344] :pre-blank 0 :raw-value [org-element-deferred org-element--headline-raw-value (2 10) t] :title (#("Database" 0 8 (:parent #354))) :level 1 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (headline (:standard-properties [7236 7236 7251 7446 7446 0 (:title) section nil nil nil 7253 7444 2 # nil nil #354] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 13) t] :title (#("Phenotypes" 0 10 (:parent #357))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7251 7251 7251 7446 7446 0 nil section nil nil nil 7251 7446 nil # nil nil #357]) (paragraph (:standard-properties [7251 7251 7251 7445 7446 1 nil planning nil nil nil nil nil nil # nil nil #360]) #("Phenotypes are stored in the SQL database. For what happens at the\ndatabase level see " 0 87 (:parent #363)) (link (:standard-properties [7338 nil nil nil 7354 0 nil nil nil nil nil nil nil nil # nil nil #363] :type "fuzzy" :type-explicit-p nil :path "database.org" :format bracket :raw-link "database.org" :application nil :search-option nil)) #(". A test database can be downloaded -\nsee the installation " 0 59 (:parent #363)) (link (:standard-properties [7413 nil 7429 7441 7443 0 nil nil nil nil nil nil nil nil # nil nil #363] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #369))) #(".\n" 0 2 (:parent #363))))) (headline (:standard-properties [7446 7446 7460 12638 12638 0 (:title) nil nil nil nil 7462 12636 2 # nil nil #354] :pre-blank 1 :raw-value [org-element-deferred org-element--headline-raw-value (3 12) t] :title (#("Genotypes" 0 9 (:parent #358))) :level 2 :priority nil :tags nil :todo-keyword nil :todo-type nil :footnote-section-p [org-element-deferred org-element--headline-footnote-section-p nil nil] :archivedp [org-element-deferred org-element--headline-archivedp nil nil] :commentedp nil) (section (:standard-properties [7460 7460 7460 12638 12638 0 nil section nil nil nil 7460 12638 nil # nil nil #358]) (paragraph (:standard-properties [7460 7460 7460 7738 7739 1 nil planning nil nil nil nil nil nil # nil nil #361]) #("Genotypes are stored in genotype files. These are part of the GNU Guix\ndistribution, see the installation " 0 106 (:parent #364)) (link (:standard-properties [7566 nil 7582 7594 7596 0 nil nil nil nil nil nil nil nil # nil nil #364] :type "file" :type-explicit-p nil :path "./README.org" :format bracket :raw-link "./README.org" :application nil :search-option nil) #("instructions" 0 12 (:parent #368))) #(". Genotype files are\ncurrently in GN1 format, and will be aligned with the " 0 75 (:parent #364)) (link (:standard-properties [7671 nil 7720 7734 7736 0 nil nil nil nil nil nil nil nil # nil nil #364] :type "http" :type-explicit-p t :path "//kbroman.org/qtl2/pages/sampledata.html" :format bracket :raw-link "http://kbroman.org/qtl2/pages/sampledata.html" :application nil :search-option nil) #("R/qtl2 formats" 0 14 (:parent #370))) #(".\n" 0 2 (:parent #364))) (paragraph (:standard-properties [7739 7739 7739 7799 7800 1 nil nil nil nil nil nil nil nil # nil nil #361]) #("GN1-style (still default GN2) for the stored file BXD.geno:\n" 0 60 (:parent #365))) (src-block (:standard-properties [7800 7800 nil nil 8895 1 nil nil nil nil nil nil nil nil # nil nil #361] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 1084) t])) (paragraph (:standard-properties [8895 8895 8895 9194 9195 1 nil nil nil nil nil nil nil nil # nil nil #361]) #("and, for example, in the method run" 0 35 (:parent #367)) (subscript (:standard-properties [8930 nil 8931 8935 8935 0 nil nil nil nil nil nil nil nil # nil nil #367] :use-brackets-p nil) #("rqtl" 0 4 (:parent #371))) (subscript (:standard-properties [8935 nil 8936 8940 8941 1 nil nil nil nil nil nil nil nil # nil nil #367] :use-brackets-p nil) #("geno" 0 4 (:parent #372))) #("this file gets\nloaded. For GnServer, however, we only want to deal with standardized\nR/qtl formatted data, so with gn" 0 117 (:parent #367)) (subscript (:standard-properties [9058 nil 9059 9064 9065 1 nil nil nil nil nil nil nil nil # nil nil #367] :use-brackets-p nil) #("extra" 0 5 (:parent #374))) #("we convert the original format\ninto R/qtl format with geno2rqtl with one adaptation: the geno table\nis transposed so now becomes\n" 0 129 (:parent #367))) (src-block (:standard-properties [9195 9195 nil nil 12455 1 nil nil nil nil nil nil nil nil # nil nil #361] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 3249) t])) (paragraph (:standard-properties [12455 12455 12455 12490 12491 1 nil nil nil nil nil nil nil nil # nil nil #361]) #("Meanwhile the gmap file looks like\n" 0 35 (:parent #369))) (src-block (:standard-properties [12491 12491 nil nil 12638 0 nil nil nil nil nil nil nil nil # nil nil #361] :language "js" :switches nil :parameters nil :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value [org-element-deferred org-element--unescape-substring (15 137) t])))))) :headline-offset 0 :headline-numbering nil :id-alist nil :citations nil :id-local-cache #)) org-export-as(html nil nil t nil) org-export-to-buffer(html "*Org HTML Export*" nil nil nil t nil #f(compiled-function () #)) org-html-export-as-html(nil nil nil t) (progn (pipe-stdin-into-current-buffer) (org-html-export-as-html nil nil nil t) (princ (buffer-string))) (unwind-protect (progn (pipe-stdin-into-current-buffer) (org-html-export-as-html nil nil nil t) (princ (buffer-string))) (and (buffer-name temp-buffer) (kill-buffer temp-buffer))) (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn (pipe-stdin-into-current-buffer) (org-html-export-as-html nil nil nil t) (princ (buffer-string))) (and (buffer-name temp-buffer) (kill-buffer temp-buffer)))) (let ((temp-buffer (generate-new-buffer " *temp*" t))) (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn (pipe-stdin-into-current-buffer) (org-html-export-as-html nil nil nil t) (princ (buffer-string))) (and (buffer-name temp-buffer) (kill-buffer temp-buffer))))) eval-buffer(# nil "/gnu/store/0h55qvzlzmvwgigk6nrzcc6s2g30ddm0-org2html.el" nil t) #f(compiled-function (buffer file) #)(# "/gnu/store/0h55qvzlzmvwgigk6nrzcc6s2g30ddm0-org2html.el") load-with-code-conversion("/gnu/store/0h55qvzlzmvwgigk6nrzcc6s2g30ddm0-org2html.el" "/gnu/store/0h55qvzlzmvwgigk6nrzcc6s2g30ddm0-org2html.el" nil t #f(compiled-function (buffer file) #)) command-line--load-script("/gnu/store/0h55qvzlzmvwgigk6nrzcc6s2g30ddm0-org2html.el") command-line-1(("-scriptload" "/gnu/store/0h55qvzlzmvwgigk6nrzcc6s2g30ddm0-org2html.el")) command-line() normal-top-level()