rbbt-rest 1.1.5 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. checksums.yaml +8 -8
  2. data/lib/rbbt/rest/common/cache.rb +33 -14
  3. data/lib/rbbt/rest/common/locate.rb +8 -6
  4. data/lib/rbbt/rest/common/misc.rb +4 -0
  5. data/lib/rbbt/rest/common/render.rb +14 -4
  6. data/lib/rbbt/rest/common/resources.rb +1 -1
  7. data/lib/rbbt/rest/common/table.rb +37 -7
  8. data/lib/rbbt/rest/entity.rb +5 -3
  9. data/lib/rbbt/rest/entity/favourites.rb +4 -1
  10. data/lib/rbbt/rest/entity/helpers.rb +12 -0
  11. data/lib/rbbt/rest/entity/rest.rb +6 -2
  12. data/lib/rbbt/rest/helpers.rb +7 -0
  13. data/lib/rbbt/rest/knowledge_base.rb +338 -0
  14. data/lib/rbbt/rest/knowledge_base/helpers.rb +57 -0
  15. data/lib/rbbt/rest/main.rb +16 -3
  16. data/share/views/compass/_rbbt.sass +11 -0
  17. data/share/views/compass/actions.sass +48 -24
  18. data/share/views/compass/app.sass +72 -50
  19. data/share/views/compass/colors.sass +3 -229
  20. data/share/views/compass/entity_card.sass +44 -108
  21. data/share/views/compass/favourites.sass +17 -72
  22. data/share/views/compass/finder.sass +30 -0
  23. data/share/views/compass/foundation.sass +79 -0
  24. data/share/views/compass/functions.sass +27 -0
  25. data/share/views/compass/help.sass +3 -0
  26. data/share/views/compass/layout.sass +132 -0
  27. data/share/views/compass/rbbt/form.sass +84 -0
  28. data/share/views/compass/rbbt/fragment.sass +7 -0
  29. data/share/views/compass/rbbt/menu.sass +189 -0
  30. data/share/views/compass/rbbt/reveal.sass +46 -0
  31. data/share/views/compass/rbbt/table.sass +169 -0
  32. data/share/views/compass/skeleton.sass +2 -0
  33. data/share/views/compass/skeleton/_dependencies.sass +151 -0
  34. data/share/views/compass/skeleton/_functions.sass +4 -0
  35. data/share/views/compass/skeleton/_mixins.sass +25 -0
  36. data/share/views/compass/skeleton/_vars.sass +72 -0
  37. data/share/views/compass/skeleton/base.sass +333 -0
  38. data/share/views/compass/skeleton/layout.sass +51 -0
  39. data/share/views/compass/skeleton/skeleton.sass +105 -0
  40. data/share/views/compass/solarized.sass +56 -0
  41. data/share/views/compass/style.sass +2 -116
  42. data/share/views/compass/theme.sass +57 -44
  43. data/share/views/compass/top_menu.sass +121 -0
  44. data/share/views/compass/user.sass +7 -0
  45. data/share/views/compass/variables.sass +7 -0
  46. data/share/views/compass/workflow.sass +6 -14
  47. data/share/views/entity_partials/action_controller.haml +7 -4
  48. data/share/views/entity_partials/entity_card.haml +10 -5
  49. data/share/views/entity_partials/entity_list.haml +4 -7
  50. data/share/views/entity_partials/entity_list_card.haml +10 -3
  51. data/share/views/entity_partials/entity_map_card.haml +2 -2
  52. data/share/views/entity_partials/list_container.haml +31 -26
  53. data/share/views/error.haml +5 -7
  54. data/share/views/help.haml +75 -31
  55. data/share/views/help/entity.haml +191 -193
  56. data/share/views/help/workflow.haml +59 -63
  57. data/share/views/job_result.haml +23 -26
  58. data/share/views/layout.haml +41 -61
  59. data/share/views/layout/top_menu.haml +19 -0
  60. data/share/views/layout/top_menu/favourites.haml +45 -0
  61. data/share/views/layout/top_menu/finder.haml +4 -0
  62. data/share/views/layout/top_menu/user.haml +15 -0
  63. data/share/views/public/js/_ajax_replace.js +17 -5
  64. data/share/views/public/js/_ellipsis.js +7 -9
  65. data/share/views/public/js/app.js +50 -2
  66. data/share/views/public/js/foundation/foundation.abide.js +194 -0
  67. data/share/views/public/js/foundation/foundation.alerts.js +52 -0
  68. data/share/views/public/js/foundation/foundation.clearing.js +516 -0
  69. data/share/views/public/js/foundation/foundation.cookie.js +74 -0
  70. data/share/views/public/js/foundation/foundation.dropdown.js +177 -0
  71. data/share/views/public/js/foundation/foundation.forms.js +533 -0
  72. data/share/views/public/js/foundation/foundation.interchange.js +280 -0
  73. data/share/views/public/js/foundation/foundation.joyride.js +850 -0
  74. data/share/views/public/js/foundation/foundation.js +440 -0
  75. data/share/views/public/js/foundation/foundation.magellan.js +135 -0
  76. data/share/views/public/js/foundation/foundation.orbit.js +412 -0
  77. data/share/views/public/js/foundation/foundation.placeholder.js +179 -0
  78. data/share/views/public/js/foundation/foundation.reveal.js +330 -0
  79. data/share/views/public/js/foundation/foundation.section.js +400 -0
  80. data/share/views/public/js/foundation/foundation.tooltips.js +208 -0
  81. data/share/views/public/js/foundation/foundation.topbar.js +300 -0
  82. data/share/views/public/js/foundation/index.js +18 -0
  83. data/share/views/public/js/helpers.js +33 -2
  84. data/share/views/public/js/jquery-ui.js +313 -0
  85. data/share/views/public/js/rbbt/actions.js +264 -0
  86. data/share/views/public/js/{_dom_update.js → rbbt/dom_update.js} +0 -0
  87. data/share/views/public/js/rbbt/favourites.js +425 -0
  88. data/share/views/public/js/rbbt/fragment.js +13 -0
  89. data/share/views/public/js/rbbt/hide.js +60 -0
  90. data/share/views/public/js/rbbt/list.js +117 -0
  91. data/share/views/public/js/{maps.js → rbbt/map.js} +3 -2
  92. data/share/views/public/js/rbbt/menu.js +22 -0
  93. data/share/views/public/js/rbbt/modal.js +96 -0
  94. data/share/views/public/js/{entities.js → rbbt/page_type.js} +12 -9
  95. data/share/views/public/js/rbbt/reveal.js +19 -0
  96. data/share/views/public/js/rbbt/table.js +283 -0
  97. data/share/views/public/js/{workflow.js → rbbt/workflow.js} +0 -0
  98. data/share/views/tasks.haml +14 -15
  99. data/share/views/wait.haml +11 -12
  100. metadata +62 -33
  101. data/share/views/compass/_foundation_setup.sass +0 -74
  102. data/share/views/compass/dom.sass +0 -32
  103. data/share/views/compass/footer.sass +0 -4
  104. data/share/views/compass/form.sass +0 -41
  105. data/share/views/compass/fragment.sass +0 -8
  106. data/share/views/compass/list_container.sass +0 -34
  107. data/share/views/compass/lists.sass +0 -33
  108. data/share/views/compass/offcanvas.sass +0 -66
  109. data/share/views/compass/responsive_table.sass +0 -80
  110. data/share/views/compass/reveal.sass +0 -31
  111. data/share/views/compass/style_mixins.sass +0 -42
  112. data/share/views/compass/table.sass +0 -63
  113. data/share/views/compass/tabs.sass +0 -81
  114. data/share/views/compass/topbar.sass +0 -25
  115. data/share/views/compass/web-fonts.sass +0 -77
  116. data/share/views/layout/favourites.haml +0 -46
  117. data/share/views/layout/header.haml +0 -44
  118. data/share/views/public/js/_fix_tablesorter_science.js +0 -38
  119. data/share/views/public/js/_foundation.js +0 -42
  120. data/share/views/public/js/actions.js +0 -108
  121. data/share/views/public/js/base.js +0 -121
  122. data/share/views/public/js/favourites.js +0 -441
  123. data/share/views/public/js/lists.js +0 -117
  124. data/share/views/public/js/offcanvas.js +0 -35
  125. data/share/views/public/js/reveal.js +0 -48
  126. data/share/views/public/js/tables.js +0 -314
  127. data/share/views/public/js/tabs.js +0 -7
@@ -0,0 +1,121 @@
1
+ $padding_top_menu: 5px
2
+
3
+ #content
4
+ padding-top: 2 * $vindent + $size_menu_item
5
+
6
+ #top_menu
7
+
8
+ @media print
9
+ display: none
10
+
11
+ @media #{$not-large}
12
+ position: fixed
13
+ @media #{$only-large}
14
+ position: fixed
15
+ top: 0
16
+ width: 100%
17
+ z-index: 30
18
+
19
+ background-color: $color_top_menu
20
+ color: $color_menu_text
21
+ padding: $padding_top_menu
22
+ border-bottom: 1px solid darken($color_menu_bg, 15)
23
+ box-shadow: 0px 3px -4px 4px rgba(0, 0, 0, 0.1)
24
+ padding-left: 0px
25
+ & > ul
26
+ +grid_row()
27
+ +clean_list
28
+ +clearfix
29
+
30
+ @media #{$only-large}
31
+ & > li
32
+ margin-left: $indent
33
+
34
+ & > li.title
35
+ float: left
36
+ +rbbt_menu_item($color_top_menu)
37
+ padding-left: 0
38
+ padding-right: $indent
39
+ font-weight: bold
40
+
41
+ & > li.reload
42
+ float: left
43
+ +rbbt_menu_item($color_top_menu)
44
+ font-size: 1.2em
45
+ padding-left: 0
46
+ padding-right: 0px
47
+ display: inline-block
48
+ border: 1px $color_menu_border
49
+ cursor: pointer
50
+ width: auto
51
+
52
+ & > li.container
53
+ float: right
54
+
55
+ & > li.find
56
+ float: left
57
+
58
+ & > li.favourites, & > li.user
59
+
60
+ &.favourites
61
+ float: left
62
+ &.user
63
+ float: right
64
+ background-color: $color_menu_bg
65
+ dl.rbbt_menu > dd
66
+ box-shadow: 1px 3px -4px 4px rgba(0, 0, 0, 0.1)
67
+
68
+ dl.rbbt_vertical_menu
69
+ @media #{$only-large}
70
+ width: 50em
71
+
72
+ dt.star.active > i
73
+ color: gold !important
74
+
75
+ ul.new_list
76
+ +clean_list
77
+ padding: $vindent $indent
78
+ li
79
+ display: block !important
80
+
81
+ a.remove_element
82
+ margin-right: $indent
83
+
84
+ li.user
85
+ ul.jobs
86
+ @media #{$only-large}
87
+ min-width: 400px
88
+
89
+
90
+ @media #{$only-large}
91
+ li.container
92
+ display: none
93
+ @media #{$not-large}
94
+ li.hide
95
+ display: none !important
96
+
97
+ li.hide.shown
98
+ display: block !important
99
+ clear: both
100
+ width: 100% !important
101
+ margin-top: 5px
102
+ dl
103
+ width: 100% !important
104
+ padding-left: 0
105
+ margin-right: 0
106
+ margin-bottom: 0
107
+
108
+ li.hide.hidden
109
+ display: none !important
110
+
111
+ li.container
112
+ a.hide_toggle
113
+ display: inline-block
114
+ width: auto
115
+ +_rbbt_menu_item
116
+ border: 1px solid $color_menu_border
117
+ padding: 3px
118
+ margin: 3px
119
+
120
+
121
+
@@ -0,0 +1,7 @@
1
+ #top_menu
2
+ li.user
3
+ dl.rbbt_menu
4
+ dd
5
+ right: 0
6
+ margin-right: -1px
7
+ padding: $vindent $indent
@@ -0,0 +1,7 @@
1
+ $z-index_menu_content: 10
2
+ $margin_menu_item: 5px
3
+ $size_menu_item: 25px
4
+
5
+ $width_finder_button: 50px
6
+
7
+ $width_user_menu: 200px
@@ -1,10 +1,9 @@
1
+ ul.tasks > li
2
+ display: block !important
1
3
 
2
- .workflow_task
3
- @include grid-row()
4
4
 
5
+ .workflow_task
5
6
  .title
6
- @include grid-column(12)
7
- @extend h4
8
7
  span.workflow
9
8
  font-weight: 600
10
9
 
@@ -15,19 +14,12 @@
15
14
  margin-left: 2em
16
15
 
17
16
  .form
18
- @include grid-column(12)
17
+ @extend .action_parameters
19
18
 
20
19
  dd.job_control
21
20
  ul
22
- @include inline-list()
23
- @include button-group-container()
21
+ +rbbt_button_list($color_bg: $base3)
22
+ width: auto
24
23
  li a
25
- @include button-base
26
- @include button-size
27
- @include button-style
28
- @include radius
29
- @include single-transition
30
- margin-bottom: 2px
31
- font-size: 0.8em
32
24
 
33
25
 
@@ -1,6 +1,5 @@
1
1
  - entity = controller.entity
2
2
  - if controller.actions.any?
3
-
4
3
  .action_controller
5
4
  %ul.controls
6
5
 
@@ -12,11 +11,15 @@
12
11
  %a(href="#")
13
12
  %i.general.foundicon-settings
14
13
 
15
- %ul.actions
16
- %li.select
14
+ %li.pin
17
15
  %a(href="#")
18
- %i.general.foundicon-plus
16
+ %i.general.foundicon-paper-clip
19
17
 
18
+ %li.url
19
+ %a(href="#")
20
+ %i.general.foundicon-flag
21
+
22
+ %ul.actions
20
23
  - last_resource = nil
21
24
  - controller.actions.each do |action, text, resource, params|
22
25
  %li(class="#{last_resource and last_resource != resource ? "new_resource" : ""}" attr-resource="#{resource}")
@@ -1,6 +1,7 @@
1
1
  - entity = card.entity
2
2
  - entity_id = "entity__" + entity.id
3
3
  .entity_card(id=entity_id)
4
+ /-- title --
4
5
  .title
5
6
  .name
6
7
  - case card.name
@@ -9,7 +10,7 @@
9
10
  - when String
10
11
  = card.name
11
12
  - when Proc
12
- = capture_haml &card.name
13
+ = fragment :name, &card.name
13
14
 
14
15
  .long_name
15
16
  - case card.long_name
@@ -18,9 +19,11 @@
18
19
  - when String
19
20
  = card.long_name
20
21
  - when Proc
21
- = capture_haml &card.long_name
22
+ = fragment :long_name, &card.long_name
22
23
 
23
24
  .card
25
+
26
+ /-- sidebar --
24
27
  .sidebar.offcanvas
25
28
  .meta
26
29
  .entity_info
@@ -33,11 +36,14 @@
33
36
  - when Hash
34
37
  = hash2dl(card.meta)
35
38
  - when Proc
36
- = capture_haml &card.meta
39
+ = fragment :meta, &card.meta
37
40
  - if card.list_container
38
41
  .entity_lists
39
42
  = list_container_render(card.list_container)
40
43
 
44
+
45
+
46
+ /-- content --
41
47
  .content
42
48
  .description
43
49
  - case card.description
@@ -46,10 +52,9 @@
46
52
  - when String
47
53
  %p= card.description
48
54
  - when Proc
49
- = capture_haml &card.description
55
+ = fragment :description, &card.description
50
56
 
51
57
  - if card.action_controller
52
58
  .actions
53
59
  = action_controller_render(card.action_controller)
54
60
 
55
-
@@ -1,8 +1,5 @@
1
1
 
2
- - text = :length if not defined? text or text.nil?
3
- .entity_list_button.button.split.dropdown
4
- = list.list_link text, list_id
5
- %span
6
- %ul.entities(style="max-height: 200px; overflow: auto")
7
- - list.each do |elem|
8
- %li= elem.link
2
+ %span
3
+ %ul.entities(style="max-height: 200px; overflow: auto")
4
+ - list.each do |elem|
5
+ %li= elem.link
@@ -10,6 +10,7 @@
10
10
  = Misc.humanize list_id
11
11
 
12
12
  .card
13
+
13
14
  .sidebar.offcanvas
14
15
  .meta
15
16
  .list_management
@@ -18,12 +19,17 @@
18
19
 
19
20
  %li
20
21
  %a.compare_list(href="#" data-reveal-id='modal1') Compare
22
+ %li
21
23
  %a.list_list(href="#{request.path_info + "?_format=list"}") List
22
- - if list.respond_to? :name
24
+ - if list.respond_to? :name
25
+ %li
23
26
  %a.name_list(href="#{request.path_info + "?_format=name"}") Name
24
- - if list.respond_to? :ensembl
27
+ - if list.respond_to? :ensembl
28
+ %li
25
29
  %a.ensembl_list(href="#{request.path_info + "?_format=ensembl"}") Ensembl
30
+ %li
26
31
  %a.download_list(href="#{request.path_info + "?_format=raw"}") Raw
32
+ %li
27
33
  %a.edit_list(href="#") Edit
28
34
 
29
35
  .entity_info
@@ -58,6 +64,8 @@
58
64
  .entity_lists
59
65
  = list_container_render(card.list_container)
60
66
 
67
+
68
+
61
69
  .content
62
70
  .description
63
71
  - case card.description
@@ -74,4 +82,3 @@
74
82
  - if card.action_controller
75
83
  .actions
76
84
  = action_controller_render(card.action_controller)
77
-
@@ -10,6 +10,7 @@
10
10
  = Misc.humanize map_id
11
11
 
12
12
  .card
13
+
13
14
  .sidebar.offcanvas
14
15
  .meta
15
16
  .map_management
@@ -47,7 +48,7 @@
47
48
  %li
48
49
  - $page_entity_base_type = page_entity_base_type
49
50
  - $page_entity_map_column = page_entity_map_column
50
- = reveal :rank_products do
51
+ = reveal :rank_products, :title => "Rank Product" do
51
52
  = action_parameters nil, :class => 'rank_products' do
52
53
  - input :map, :select, "Select map to use", nil, :html_options => {:class => 'favourite_maps', :type => $page_entity_base_type, :column => $page_entity_map_column}
53
54
 
@@ -60,4 +61,3 @@
60
61
  - if card.action_controller
61
62
  .actions
62
63
  = action_controller_render(card.action_controller)
63
-
@@ -1,31 +1,36 @@
1
- %dl.list_container
1
+ %dl.rbbt_accordion
2
2
  - container.lists.each do |id, list, text, options|
3
- %section.section.accordion(data-section)
4
- - if Proc === list
5
- = fragment do
6
- - list = list.call
7
- - next if list.nil?
8
- %dt
9
- = list.list_link :length, id
10
- %span.title
11
- = text || id
12
- %dd.content
13
- %p
14
- - if (defined? force and force) or list.length < 500
15
- = list.link * ", "
16
- - else
17
- = modal_fragment "Too many entities to list" do
18
- = list.link * ", "
19
- - else
20
- %dt
3
+ - if Proc === list
4
+ = fragment do
5
+ - list = list.call
6
+ - next if list.nil?
7
+ %dt.next
21
8
  = list.list_link :length, id
22
9
  %span.title
23
10
  = text || id
24
- %dd.content
25
- %p
26
- - if (defined? force and force) or list.length < 500
11
+ %dd
12
+ - if (defined? force and force) or list.length < 500
13
+ = list.link * ", "
14
+ - else
15
+ = modal_fragment "Too many entities to list" do
27
16
  = list.link * ", "
28
- - else
29
- = reveal "Too many entities to list" do
30
- = fragment do
31
- = list.link * ", "
17
+ - else
18
+ - if list.empty?
19
+ %dt
20
+ = 0
21
+ %span.title
22
+ = text || id
23
+ - else
24
+ %dt.next
25
+ = list.list_link :length, id
26
+ %span.title
27
+ = text || id
28
+ %dd
29
+ - if (defined? force and force) or list.length < 500
30
+ = list.link * ", "
31
+ - else
32
+ = reveal "Too many entities to list" do
33
+ = fragment do
34
+ = list.link * ", "
35
+
36
+
@@ -1,10 +1,8 @@
1
- .row
2
- .column.small-12
3
- %h5 Error processing #{File.basename(job.name)}
4
- - if job.messages and job.messages.any?
5
- %span.error_message
6
- %pre= job.messages[-2]
7
- - backtrace = job.info[:backtrace]
1
+ %h5 Error processing #{File.basename(job.name)}
2
+ - if job.messages and job.messages.any?
3
+ %span.error_message
4
+ %pre= job.messages[-2]
5
+ - backtrace = job.info[:backtrace]
8
6
 
9
7
  %hr
10
8
 
@@ -1,34 +1,78 @@
1
- .row.help
2
- .column.small-12
3
- :markdown
4
-
5
- Overview
6
- ========
7
-
8
- The objective of this page is to offer a collection of functionalities in
9
- a uniform interface. It has two operation modes: Centered on the
10
- functionalities or centered on the data. The first operation mode is
11
- based on *Workflows*, the second on *Entities*. The Entity subsystem is
12
- probably the most interesting one, so let us begin there.
13
-
14
- We will devote this document to describe the most general aspects of the
15
- application. The information presented and the analysis available depend
16
- on the configuration of the application and will be covered elsewhere.
17
-
18
-
19
- #### A word on performance
20
-
21
- This application is intended to allow interactive investigation. But be
22
- aware, some analysis are slow and will not feel that much interactive.
23
- Some process may require plenty of infrastructure: downloading of
24
- datasets, building databases, computing preliminary results, etc. A lot
25
- of this processing is reused system-wide. This means that the application
26
- starts slow but get quicker. Unlike other applications with a more limited scope
27
- this system cannot foresee what the user will be interested in, so not all
28
- this infrastructure can be built before hand and must be built on demand.
29
- We pay a price for flexibility by sacrificing responsiveness. But the system
30
- has plenty of tricks to be as efficient as possible and to reuse as much
31
- as possible.
1
+ :markdown
32
2
 
3
+ Overview
4
+ ========
5
+
6
+ This application is designed for integration of data and functionalities.
7
+ It design is based on the idea of the `Entity`: any thing that can be
8
+ unambiguously identified and be subject of investigation. Examples of
9
+ entities are: genes, proteins, SNPs, samples, pathways, etc.
10
+
11
+ Each entity has a report, which depends on the type of entity it is.
12
+ All reports are computed on the fly and cached. In addition to the main
13
+ report, entities have `actions`, which are sub-reports that implement
14
+ particular analysis. For instance, for gene entities, one of the actions
15
+ is to display a summary of the relevance of that gene across the collection
16
+ of studies that you have access to.
17
+
18
+ ## Miscellaneous comments
19
+
20
+ ### A word on performance
21
+
22
+ This application is intended to allow interactive investigation. But be
23
+ aware, some analysis are slow and will not feel that much interactive. Some
24
+ process may require plenty of infrastructure: downloading of datasets,
25
+ building databases, computing preliminary results, etc. A lot of this
26
+ processing is reused system-wide. This means that the application starts slow
27
+ but gets quicker. Unlike other applications with a more limited scope this
28
+ system cannot foresee what the user will be interested in, so not all this
29
+ infrastructure can be built before hand and must be built on demand. We pay
30
+ a price for flexibility by sacrificing responsiveness. But the system has
31
+ plenty of tricks to be as efficient as possible and to reuse as much as
32
+ possible.
33
+
34
+ ### Entity annotations
35
+
36
+ The `Entity` subsystem annotates identifiers for entities with additional information
37
+ to help their complete and unambiguous identification.
38
+
39
+ #### Organisms and builds
40
+
41
+ When you identify a gene with the string `TP53` we might think that the gene
42
+ is unambiguously identified, however, it is not. First of all, we need to
43
+ know to which organism this gene belongs to, each TP53 gene from different
44
+ organisms is a different gene. Not only that, but the TP53 gene changes
45
+ slightly from build to build, in particular, its chromosomal position may
46
+ shift. For that reason genes are not only characterized by the organism they
47
+ belong to but also by the version of the build we are considering.
48
+
49
+ We annotate entities with their organism and build using the following
50
+ convention. The organism is specified with a three letter code, the first is
51
+ uppercase and is the first letter of the first term in the organism name ("H"
52
+ for Homo) and the last two the first two letter of the second term ("sa" for
53
+ sapiens); this is the convention followed by KeGG, it is succinct and
54
+ collision free in our experience. The build is specified afterwards with a
55
+ date code; "Hsa/may2009" represents the _Homo s._ organism as was known in
56
+ May 2009 i.e. hg18 build; whereas "Hsa/jan2013" corresponds to a recent
57
+ version of the hg19 build.
58
+
59
+
60
+ #### Identifier formats
61
+
62
+ Genes can be identified through a substantial number of identifier formats:
63
+ Ensembl Gene ID, Entrez Gene ID, Associated Gene Name (gene symbol). We use
64
+ the Ensembl BioMart to download an identifier translation resource. The name
65
+ of the formats corresponds to the names used in the Ensembl BioMart and must
66
+ be *followed to the letter including case*. The gene `Entity` is prepared to handle all the
67
+ necessary translations between identifiers across different resources
68
+ transparently. But the user *must* be aware of this fact or may run into
69
+ trouble.
70
+
71
+
72
+ %h2 Subsystems
73
+ %ul
74
+ %li
33
75
  %a(href='/help/entity' class="help") Entity subsystem
76
+
77
+ %li
34
78
  %a(href='/help/workflow' class="help") Workflow subsystem