| 
									
										
										
										
											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) { | 
					
						
							| 
									
										
										
										
											2021-10-21 14:56:19 +02:00
										 |  |  |     preset <- preset_editor_server("preset_editor") | 
					
						
							| 
									
										
										
										
											2021-11-02 14:28:04 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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. | 
					
						
							| 
									
										
										
										
											2021-11-17 22:58:55 +01:00
										 |  |  |     ranking <- methods_server("methods", analysis) | 
					
						
							| 
									
										
										
										
											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-10-20 15:34:52 +02:00
										 |  |  |     output$genes <- DT::renderDT({ | 
					
						
							| 
									
										
										
										
											2021-10-15 11:46:15 +02:00
										 |  |  |         columns <- c("rank", "gene", "name", "chromosome", method_ids, "score") | 
					
						
							|  |  |  |         column_names <- c("", "Gene", "", "Chromosome", method_names, "Score") | 
					
						
							| 
									
										
										
										
											2021-10-15 09:26:57 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-20 15:34:52 +02:00
										 |  |  |         dt <- DT::datatable( | 
					
						
							| 
									
										
										
										
											2021-10-15 15:03:40 +02:00
										 |  |  |             results_filtered()[, ..columns], | 
					
						
							| 
									
										
										
										
											2021-08-26 12:51:43 +02:00
										 |  |  |             rownames = FALSE, | 
					
						
							| 
									
										
										
										
											2021-10-15 09:26:57 +02:00
										 |  |  |             colnames = column_names, | 
					
						
							| 
									
										
										
										
											2021-10-01 09:50:04 +02:00
										 |  |  |             style = "bootstrap", | 
					
						
							|  |  |  |             options = list( | 
					
						
							|  |  |  |                 rowCallback = js_link, | 
					
						
							| 
									
										
										
										
											2021-10-15 11:46:15 +02:00
										 |  |  |                 columnDefs = list(list(visible = FALSE, targets = 2)), | 
					
						
							| 
									
										
										
										
											2021-11-17 23:08:20 +01:00
										 |  |  |                 pageLength = 25 | 
					
						
							| 
									
										
										
										
											2021-10-01 09:50:04 +02:00
										 |  |  |             ) | 
					
						
							| 
									
										
										
										
											2021-06-24 22:38:16 +02:00
										 |  |  |         ) | 
					
						
							| 
									
										
										
										
											2021-09-30 13:25:39 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-20 15:34:52 +02:00
										 |  |  |         DT::formatPercentage(dt, c(method_ids, "score"), digits = 1) | 
					
						
							| 
									
										
										
										
											2021-06-24 22:38:16 +02:00
										 |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-07 12:59:04 +02:00
										 |  |  |     output$copy <- renderUI({ | 
					
						
							| 
									
										
										
										
											2021-10-15 15:03:40 +02:00
										 |  |  |         results <- results_filtered() | 
					
						
							| 
									
										
										
										
											2021-10-07 12:59:04 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         gene_ids <- results[, gene] | 
					
						
							|  |  |  |         names <- results[name != "", name] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         genes_text <- paste(gene_ids, collapse = "\n") | 
					
						
							|  |  |  |         names_text <- paste(names, collapse = "\n") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         splitLayout( | 
					
						
							| 
									
										
										
										
											2021-10-15 13:59:00 +02:00
										 |  |  |             cellWidths = "auto", | 
					
						
							| 
									
										
										
										
											2021-10-20 15:34:52 +02:00
										 |  |  |             rclipboard::rclipButton( | 
					
						
							| 
									
										
										
										
											2021-10-07 12:59:04 +02:00
										 |  |  |                 "copy_ids_button", | 
					
						
							|  |  |  |                 "Copy gene IDs", | 
					
						
							|  |  |  |                 genes_text, | 
					
						
							| 
									
										
										
										
											2021-10-15 13:59:00 +02:00
										 |  |  |                 icon = icon("clipboard") | 
					
						
							| 
									
										
										
										
											2021-10-07 12:59:04 +02:00
										 |  |  |             ), | 
					
						
							| 
									
										
										
										
											2021-10-20 15:34:52 +02:00
										 |  |  |             rclipboard::rclipButton( | 
					
						
							| 
									
										
										
										
											2021-10-07 12:59:04 +02:00
										 |  |  |                 "copy_names_button", | 
					
						
							|  |  |  |                 "Copy gene names", | 
					
						
							|  |  |  |                 names_text, | 
					
						
							| 
									
										
										
										
											2021-10-15 13:59:00 +02:00
										 |  |  |                 icon = icon("clipboard") | 
					
						
							| 
									
										
										
										
											2021-10-07 12:59:04 +02:00
										 |  |  |             ) | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-20 15:34:52 +02:00
										 |  |  |     output$scatter <- plotly::renderPlotly({ | 
					
						
							| 
									
										
										
										
											2021-11-15 15:12:42 +01:00
										 |  |  |         preset <- preset() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         gene_sets <- list(preset$reference_gene_ids) | 
					
						
							|  |  |  |         labels <- c("Reference genes") | 
					
						
							| 
									
										
										
										
											2021-08-29 13:25:12 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-15 15:12:42 +01:00
										 |  |  |         comparison_gene_ids <- results_filtered()[ | 
					
						
							|  |  |  |             input$genes_rows_selected, | 
					
						
							|  |  |  |             gene | 
					
						
							|  |  |  |         ] | 
					
						
							| 
									
										
										
										
											2021-08-29 13:25:12 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-15 15:12:42 +01:00
										 |  |  |         if (length(comparison_gene_ids) >= 1) { | 
					
						
							|  |  |  |             gene_sets <- c(gene_sets, list(comparison_gene_ids)) | 
					
						
							|  |  |  |             labels <- c(labels, "Comparison genes") | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         geposan::plot_positions( | 
					
						
							|  |  |  |             preset$species_ids, | 
					
						
							|  |  |  |             gene_sets = gene_sets, | 
					
						
							|  |  |  |             labels = labels, | 
					
						
							|  |  |  |             use_positions = input$use_positions | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2021-06-24 22:38:16 +02:00
										 |  |  |     }) | 
					
						
							| 
									
										
										
										
											2021-10-07 12:18:47 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-15 15:03:40 +02:00
										 |  |  |     output$assessment_synopsis <- renderText({ | 
					
						
							| 
									
										
										
										
											2021-10-21 14:56:19 +02:00
										 |  |  |         reference_gene_ids <- preset()$reference_gene_ids | 
					
						
							| 
									
										
										
										
											2021-10-15 15:03:40 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-20 11:30:32 +02:00
										 |  |  |         included_reference_count <- results_filtered()[ | 
					
						
							| 
									
										
										
										
											2021-10-15 15:03:40 +02:00
										 |  |  |             gene %chin% reference_gene_ids, | 
					
						
							|  |  |  |             .N | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         reference_results <- results()[gene %chin% reference_gene_ids] | 
					
						
							| 
									
										
										
										
											2021-10-20 11:30:32 +02:00
										 |  |  |         total_reference_count <- nrow(reference_results) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (total_reference_count > 0) { | 
					
						
							|  |  |  |             mean_rank <- as.character(round( | 
					
						
							|  |  |  |                 reference_results[, mean(rank)], | 
					
						
							|  |  |  |                 digits = 1 | 
					
						
							|  |  |  |             )) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-21 11:43:34 +02:00
										 |  |  |             min_rank <- as.character(reference_results[, min(rank)]) | 
					
						
							| 
									
										
										
										
											2021-10-20 11:30:32 +02:00
										 |  |  |             max_rank <- as.character(reference_results[, max(rank)]) | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             mean_rank <- "Unknown" | 
					
						
							| 
									
										
										
										
											2021-10-21 11:43:34 +02:00
										 |  |  |             min_rank <- "Unknown" | 
					
						
							| 
									
										
										
										
											2021-10-20 11:30:32 +02:00
										 |  |  |             max_rank <- "Unknown" | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-10-15 15:03:40 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         sprintf( | 
					
						
							|  |  |  |             "Included reference genes: %i/%i<br> \ | 
					
						
							| 
									
										
										
										
											2021-10-20 11:30:32 +02:00
										 |  |  |             Mean rank of reference genes: %s<br> \ | 
					
						
							| 
									
										
										
										
											2021-10-21 11:43:34 +02:00
										 |  |  |             First rank of reference genes: %s<br> \ | 
					
						
							|  |  |  |             Last rank of reference genes: %s", | 
					
						
							| 
									
										
										
										
											2021-10-20 11:30:32 +02:00
										 |  |  |             included_reference_count, | 
					
						
							|  |  |  |             total_reference_count, | 
					
						
							|  |  |  |             mean_rank, | 
					
						
							| 
									
										
										
										
											2021-10-21 11:43:34 +02:00
										 |  |  |             min_rank, | 
					
						
							| 
									
										
										
										
											2021-10-20 11:30:32 +02:00
										 |  |  |             max_rank | 
					
						
							| 
									
										
										
										
											2021-10-15 15:03:40 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-20 15:34:52 +02:00
										 |  |  |     output$rank_plot <- plotly::renderPlotly({ | 
					
						
							| 
									
										
										
										
											2021-11-15 14:22:33 +01:00
										 |  |  |         gene_sets <- list(preset()$reference_gene_ids) | 
					
						
							|  |  |  |         labels <- c("Reference genes") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-15 15:12:42 +01:00
										 |  |  |         comparison_gene_ids <- results_filtered()[ | 
					
						
							|  |  |  |             input$genes_rows_selected, | 
					
						
							|  |  |  |             gene | 
					
						
							|  |  |  |         ] | 
					
						
							| 
									
										
										
										
											2021-11-15 14:22:33 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if (length(comparison_gene_ids) >= 1) { | 
					
						
							|  |  |  |             gene_sets <- c(gene_sets, list(comparison_gene_ids)) | 
					
						
							|  |  |  |             labels <- c(labels, "Comparison genes") | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-15 09:35:47 +01:00
										 |  |  |         geposan::plot_scores( | 
					
						
							|  |  |  |             ranking(), | 
					
						
							| 
									
										
										
										
											2021-11-15 14:22:33 +01:00
										 |  |  |             gene_sets = gene_sets, | 
					
						
							|  |  |  |             labels = labels, | 
					
						
							| 
									
										
										
										
											2021-11-15 09:35:47 +01:00
										 |  |  |             max_rank = results_filtered()[, max(rank)] | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     output$boxplot <- plotly::renderPlotly({ | 
					
						
							| 
									
										
										
										
											2021-11-15 14:22:33 +01:00
										 |  |  |         gene_sets <- list(preset()$reference_gene_ids) | 
					
						
							|  |  |  |         labels <- c("Reference genes") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-15 15:12:42 +01:00
										 |  |  |         comparison_gene_ids <- results_filtered()[ | 
					
						
							|  |  |  |             input$genes_rows_selected, | 
					
						
							|  |  |  |             gene | 
					
						
							|  |  |  |         ] | 
					
						
							| 
									
										
										
										
											2021-11-15 14:22:33 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if (length(comparison_gene_ids) >= 1) { | 
					
						
							|  |  |  |             gene_sets <- c(gene_sets, list(comparison_gene_ids)) | 
					
						
							|  |  |  |             labels <- c(labels, "Comparison genes") | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-15 09:35:47 +01:00
										 |  |  |         geposan::plot_boxplot( | 
					
						
							|  |  |  |             ranking(), | 
					
						
							| 
									
										
										
										
											2021-11-15 14:22:33 +01:00
										 |  |  |             gene_sets = gene_sets, | 
					
						
							|  |  |  |             labels = labels | 
					
						
							| 
									
										
										
										
											2021-10-15 15:03:40 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-20 15:34:52 +02:00
										 |  |  |     output$gost <- plotly::renderPlotly({ | 
					
						
							| 
									
										
										
										
											2021-10-07 12:42:36 +02:00
										 |  |  |         if (input$enable_gost) { | 
					
						
							| 
									
										
										
										
											2021-10-20 15:34:52 +02:00
										 |  |  |             result <- gprofiler2::gost( | 
					
						
							|  |  |  |                 results_filtered()[, gene], | 
					
						
							|  |  |  |                 ordered_query = TRUE | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             gprofiler2::gostplot( | 
					
						
							|  |  |  |                 result, | 
					
						
							|  |  |  |                 capped = FALSE, | 
					
						
							|  |  |  |                 interactive = TRUE | 
					
						
							|  |  |  |             ) | 
					
						
							| 
									
										
										
										
											2021-10-07 12:42:36 +02:00
										 |  |  |         } else { | 
					
						
							|  |  |  |             NULL | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-10-07 12:18:47 +02:00
										 |  |  |     }) | 
					
						
							| 
									
										
										
										
											2021-10-19 14:15:28 +02:00
										 |  |  | } |