| 
									
										
										
										
											2021-10-20 15:34:52 +02:00
										 |  |  | # Java script function to replace gene IDs with Ensembl gene links. | 
					
						
							|  |  |  | js_link <- DT::JS("function(row, data) { | 
					
						
							| 
									
										
										
										
											2021-10-01 09:50:04 +02:00
										 |  |  |     let id = data[1]; | 
					
						
							|  |  |  |     var name = data[2]; | 
					
						
							|  |  |  |     if (!name) name = 'Unknown'; | 
					
						
							|  |  |  |     let url = `https://www.ensembl.org/Homo_sapiens/Gene/Summary?g=${id}`; | 
					
						
							|  |  |  |     $('td:eq(1)', row).html(`<a href=\"${url}\" target=\"_blank\">${name}</a>`); | 
					
						
							|  |  |  | }") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-16 17:02:39 +02:00
										 |  |  | server <- function(input, output, session) { | 
					
						
							| 
									
										
										
										
											2022-01-23 19:46:17 +01:00
										 |  |  |     input_reactives <- input_page_server("input_page") | 
					
						
							|  |  |  |     preset <- input_reactives$preset | 
					
						
							|  |  |  |     comparison_gene_ids <- input_reactives$comparison_gene_ids | 
					
						
							| 
									
										
										
										
											2021-11-02 14:28:04 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-25 16:27:18 +01:00
										 |  |  |     observe({ | 
					
						
							|  |  |  |         updateNavbarPage( | 
					
						
							|  |  |  |             session, | 
					
						
							|  |  |  |             "main_page", | 
					
						
							|  |  |  |             selected = "Results" | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |     }) |> bindEvent(preset(), ignoreInit = TRUE) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-20 15:34:52 +02:00
										 |  |  |     # Compute the results according to the preset. | 
					
						
							| 
									
										
										
										
											2021-10-19 16:44:29 +02:00
										 |  |  |     analysis <- reactive({ | 
					
						
							| 
									
										
										
										
											2021-10-21 14:56:19 +02:00
										 |  |  |         preset <- preset() | 
					
						
							| 
									
										
										
										
											2021-08-29 13:25:12 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-19 14:15:28 +02:00
										 |  |  |         # Perform the analysis cached based on the preset's hash. | 
					
						
							| 
									
										
										
										
											2021-11-14 22:34:46 +01:00
										 |  |  |         analysis <- withProgress( | 
					
						
							| 
									
										
										
										
											2021-10-19 15:05:01 +02:00
										 |  |  |             message = "Analyzing genes", | 
					
						
							| 
									
										
										
										
											2021-11-14 22:34:46 +01:00
										 |  |  |             value = 0.0, | 
					
						
							|  |  |  |             { # nolint | 
					
						
							| 
									
										
										
										
											2021-10-21 17:26:28 +02:00
										 |  |  |                 geposan::analyze(preset, function(progress) { | 
					
						
							|  |  |  |                     setProgress(progress) | 
					
						
							|  |  |  |                 }) | 
					
						
							| 
									
										
										
										
											2021-10-19 15:05:01 +02:00
										 |  |  |             } | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2021-10-19 14:15:28 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-14 22:34:46 +01:00
										 |  |  |         analysis | 
					
						
							|  |  |  |     }) | 
					
						
							| 
									
										
										
										
											2021-10-16 21:46:59 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-14 22:34:46 +01:00
										 |  |  |     # Rank the results. | 
					
						
							| 
									
										
										
										
											2022-01-25 13:05:04 +01:00
										 |  |  |     ranking <- methods_server("methods", analysis, comparison_gene_ids) | 
					
						
							| 
									
										
										
										
											2021-10-20 11:20:20 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-14 22:34:46 +01:00
										 |  |  |     # Add gene information to the results. | 
					
						
							|  |  |  |     results <- reactive({ | 
					
						
							|  |  |  |         merge( | 
					
						
							|  |  |  |             ranking(), | 
					
						
							|  |  |  |             geposan::genes, | 
					
						
							|  |  |  |             by.x = "gene", | 
					
						
							|  |  |  |             by.y = "id", | 
					
						
							|  |  |  |             sort = FALSE | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2021-08-26 11:20:50 +02:00
										 |  |  |     }) | 
					
						
							| 
									
										
										
										
											2021-08-25 15:01:18 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-02 13:41:03 +01:00
										 |  |  |     # Apply the filters. | 
					
						
							| 
									
										
										
										
											2021-11-02 14:28:04 +01:00
										 |  |  |     results_filtered <- filters_server("filters", results) | 
					
						
							| 
									
										
										
										
											2021-10-15 13:16:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-30 12:19:00 +01:00
										 |  |  |     # Server for the detailed results panel. | 
					
						
							|  |  |  |     results_server("results", results_filtered) | 
					
						
							| 
									
										
										
										
											2021-10-07 12:59:04 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-20 15:34:52 +02:00
										 |  |  |     output$rank_plot <- plotly::renderPlotly({ | 
					
						
							| 
									
										
										
										
											2021-12-02 17:22:27 +01:00
										 |  |  |         preset <- preset() | 
					
						
							|  |  |  |         gene_sets <- list("Reference genes" = preset$reference_gene_ids) | 
					
						
							|  |  |  |         comparison_gene_ids <- comparison_gene_ids() | 
					
						
							| 
									
										
										
										
											2021-11-15 14:22:33 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if (length(comparison_gene_ids) >= 1) { | 
					
						
							| 
									
										
										
										
											2021-12-02 17:22:27 +01:00
										 |  |  |             gene_sets <- c( | 
					
						
							|  |  |  |                 gene_sets, | 
					
						
							|  |  |  |                 list("Comparison genes" = comparison_gene_ids) | 
					
						
							|  |  |  |             ) | 
					
						
							| 
									
										
										
										
											2021-11-15 14:22:33 +01:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-15 09:35:47 +01:00
										 |  |  |         geposan::plot_scores( | 
					
						
							|  |  |  |             ranking(), | 
					
						
							| 
									
										
										
										
											2021-11-15 14:22:33 +01:00
										 |  |  |             gene_sets = gene_sets, | 
					
						
							| 
									
										
										
										
											2021-11-15 09:35:47 +01:00
										 |  |  |             max_rank = results_filtered()[, max(rank)] | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-06 14:24:31 +01:00
										 |  |  |     output$rankings_plot <- plotly::renderPlotly({ | 
					
						
							|  |  |  |         preset <- preset() | 
					
						
							| 
									
										
										
										
											2022-01-13 13:37:02 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         rankings <- list() | 
					
						
							|  |  |  |         methods <- preset$methods | 
					
						
							|  |  |  |         all <- ranking() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         for (method in methods) { | 
					
						
							|  |  |  |             weights <- list() | 
					
						
							|  |  |  |             weights[[method$id]] <- 1.0 | 
					
						
							|  |  |  |             rankings[[method$name]] <- geposan::ranking(all, weights) | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         rankings[["Combined"]] <- all | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-06 14:24:31 +01:00
										 |  |  |         gene_sets <- list("Reference genes" = preset$reference_gene_ids) | 
					
						
							|  |  |  |         comparison_gene_ids <- comparison_gene_ids() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (length(comparison_gene_ids) >= 1) { | 
					
						
							|  |  |  |             gene_sets <- c( | 
					
						
							|  |  |  |                 gene_sets, | 
					
						
							|  |  |  |                 list("Comparison genes" = comparison_gene_ids) | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         geposan::plot_rankings(rankings, gene_sets) | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-15 09:35:47 +01:00
										 |  |  |     output$boxplot <- plotly::renderPlotly({ | 
					
						
							| 
									
										
										
										
											2021-12-02 17:22:27 +01:00
										 |  |  |         preset <- preset() | 
					
						
							|  |  |  |         gene_sets <- list("Reference genes" = preset$reference_gene_ids) | 
					
						
							|  |  |  |         comparison_gene_ids <- comparison_gene_ids() | 
					
						
							| 
									
										
										
										
											2021-11-15 14:22:33 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if (length(comparison_gene_ids) >= 1) { | 
					
						
							| 
									
										
										
										
											2021-12-02 17:22:27 +01:00
										 |  |  |             gene_sets <- c( | 
					
						
							|  |  |  |                 gene_sets, | 
					
						
							|  |  |  |                 list("Comparison genes" = comparison_gene_ids) | 
					
						
							|  |  |  |             ) | 
					
						
							| 
									
										
										
										
											2021-11-15 14:22:33 +01:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-02 17:22:27 +01:00
										 |  |  |         geposan::plot_boxplot(ranking(), gene_sets) | 
					
						
							| 
									
										
										
										
											2021-10-15 15:03:40 +02:00
										 |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-08 14:38:38 +01:00
										 |  |  |     gost <- reactive({ | 
					
						
							| 
									
										
										
										
											2021-12-08 14:49:50 +01:00
										 |  |  |         withProgress( | 
					
						
							| 
									
										
										
										
											2021-12-08 14:38:38 +01:00
										 |  |  |             message = "Querying g:Profiler", | 
					
						
							|  |  |  |             value = 0.0, | 
					
						
							|  |  |  |             { # nolint | 
					
						
							|  |  |  |                 setProgress(0.2) | 
					
						
							|  |  |  |                 gprofiler2::gost(results_filtered()[, gene]) | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2021-12-08 14:49:50 +01:00
										 |  |  |         ) | 
					
						
							| 
									
										
										
										
											2021-12-08 14:38:38 +01:00
										 |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     output$gost_plot <- plotly::renderPlotly({ | 
					
						
							|  |  |  |         gprofiler2::gostplot( | 
					
						
							|  |  |  |             gost(), | 
					
						
							|  |  |  |             capped = FALSE, | 
					
						
							|  |  |  |             interactive = TRUE | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     output$gost_details <- DT::renderDT({ | 
					
						
							|  |  |  |         data <- data.table(gost()$result) | 
					
						
							|  |  |  |         setorder(data, p_value) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         data[, total_ratio := term_size / effective_domain_size] | 
					
						
							|  |  |  |         data[, query_ratio := intersection_size / query_size] | 
					
						
							| 
									
										
										
										
											2021-10-20 15:34:52 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-08 14:49:50 +01:00
										 |  |  |         data <- data[, .(source, term_name, total_ratio, query_ratio, p_value)] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-08 14:38:38 +01:00
										 |  |  |         dt <- DT::datatable( | 
					
						
							| 
									
										
										
										
											2021-12-08 14:49:50 +01:00
										 |  |  |             data, | 
					
						
							| 
									
										
										
										
											2021-12-08 14:38:38 +01:00
										 |  |  |             rownames = FALSE, | 
					
						
							|  |  |  |             colnames = c( | 
					
						
							|  |  |  |                 "Source", | 
					
						
							|  |  |  |                 "Term", | 
					
						
							|  |  |  |                 "Total ratio", | 
					
						
							|  |  |  |                 "Query ratio", | 
					
						
							| 
									
										
										
										
											2021-12-08 14:49:50 +01:00
										 |  |  |                 "p-value" | 
					
						
							| 
									
										
										
										
											2021-12-08 14:38:38 +01:00
										 |  |  |             ), | 
					
						
							|  |  |  |             style = "bootstrap", | 
					
						
							|  |  |  |             options = list( | 
					
						
							|  |  |  |                 pageLength = 25 | 
					
						
							| 
									
										
										
										
											2021-10-20 15:34:52 +02:00
										 |  |  |             ) | 
					
						
							| 
									
										
										
										
											2021-12-08 14:38:38 +01:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         dt <- DT::formatRound(dt, "p_value", digits = 4) | 
					
						
							|  |  |  |         dt <- DT::formatPercentage( | 
					
						
							|  |  |  |             dt, | 
					
						
							|  |  |  |             c("total_ratio", "query_ratio"), | 
					
						
							|  |  |  |             digits = 1 | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2021-10-07 12:18:47 +02:00
										 |  |  |     }) | 
					
						
							| 
									
										
										
										
											2021-12-08 14:49:50 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     output$disgenet <- DT::renderDT({ | 
					
						
							|  |  |  |         withProgress( | 
					
						
							|  |  |  |             message = "Querying DisGeNET", | 
					
						
							|  |  |  |             value = 0.0, | 
					
						
							|  |  |  |             { # nolint | 
					
						
							|  |  |  |                 setProgress(0.2) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 gene_names <- results_filtered()[, name] | 
					
						
							|  |  |  |                 gene_names <- unique(gene_names[gene_names != ""]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 diseases <- disgenet2r::disease_enrichment(gene_names) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 data <- data.table(diseases@qresult) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 data <- data[, .(Description, Ratio, BgRatio, pvalue)] | 
					
						
							|  |  |  |                 setorder(data, pvalue) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 dt <- DT::datatable( | 
					
						
							|  |  |  |                     data, | 
					
						
							|  |  |  |                     rownames = FALSE, | 
					
						
							|  |  |  |                     colnames = c( | 
					
						
							|  |  |  |                         "Disease", | 
					
						
							|  |  |  |                         "Query ratio", | 
					
						
							|  |  |  |                         "Total ratio", | 
					
						
							|  |  |  |                         "p-value" | 
					
						
							|  |  |  |                     ), | 
					
						
							|  |  |  |                     style = "bootstrap", | 
					
						
							|  |  |  |                     options = list( | 
					
						
							|  |  |  |                         pageLength = 25 | 
					
						
							|  |  |  |                     ) | 
					
						
							|  |  |  |                 ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 dt <- DT::formatRound(dt, "pvalue", digits = 4) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 dt | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |     }) | 
					
						
							| 
									
										
										
										
											2021-10-19 14:15:28 +02:00
										 |  |  | } |