diff --git a/drug-target/global.R b/drug-target/global.R index 1f5b5fb..e1c524c 100644 --- a/drug-target/global.R +++ b/drug-target/global.R @@ -305,771 +305,771 @@ consurf_colours = c( ) # if (true()){ -# if (interactive()){ -# options(shiny.launch.browser = FALSE) # i am a big girl and can tie my own laces -# options(shiny.port = 8000) # don't change the port every time -# options(shiny.host = '0.0.0.0') # This means "listen to all addresses on all interfaces" -# options(width=120) -# options(DT.options = list(scrollX = TRUE)) -# #### UI #### -# ui <- dashboardPage(skin="purple", -# dashboardHeader(title = "Drug/Target Explorer"), -# -# dashboardSidebar( -# sidebarMenu( id = "sidebar", -# selectInput( -# "switch_target", -# label="Switch to New Target", -# choices = c( -# "alr", -# "embb", -# "gid", -# "katg", -# "pnca", -# "rpob" -# ), -# selected="embb"), -# menuItem("LogoP SNP", tabName="LogoP SNP"), -# #menuItem("Lineage Sample Count", tabName="Lineage Sample Count"), -# menuItem("Site SNP count", tabName="Site SNP count"), -# menuItem("Stability SNP by site", tabName="Stability SNP by site"), -# menuItem("DM OM Plots", tabName="DM OM Plots"), -# menuItem("Correlation", tabName="Correlation"), -# #menuItem("Lineage Distribution", tabName="Lineage Distribution"), -# menuItem("Consurf", tabName="Consurf"), -# menuItem("LogoP OR", tabName="LogoP OR"), -# menuItem("Lineage", tabName="Lineage"), -# #menuItem('Stability count', tabName='Stability count'), -# -# # These conditionalPanel()s make extra settings appear in the sidebar when needed -# conditionalPanel( -# condition="input.sidebar == 'LogoP SNP'", -# textInput( -# "omit_snp_count", -# "Omit SNPs", -# value = c(0), -# placeholder = "1,3,6" -# ) -# ), -# # NOTE: -# # I *think* we can cheat here slightly and use the min/max from -# # merged_df3[['position']] for everything because the various -# # dataframes for a given gene/drug combination have the -# # same range of positions. May need fixing, especially -# # if we get/shrink the imported data files to something -# # more reasonable. -# conditionalPanel( -# condition=" -# input.sidebar == 'LogoP SNP'|| -# input.sidebar == 'Stability SNP by site' || -# input.sidebar == 'Consurf' || -# input.sidebar == 'LogoP OR'", -# sliderInput( -# "display_position_range" -# , "Display Positions" -# , min=1, max=150, value=c(1,150) # 150 is just a little less than the smallest pos_count -# ) -# ), -# -# conditionalPanel( -# condition=" -# input.sidebar == 'LogoP SNP' || -# input.sidebar == 'LogoP OR' || -# input.sidebar == 'LogoP ED'", -# selectInput( -# "logoplot_colour_scheme", -# label="Logo Plot Colour Scheme", -# choices = logoPlotSchemes, -# selected="chemistry" -# ) -# ), -# conditionalPanel( -# condition="input.sidebar == 'Correlation'", -# selectInput( -# "corr_method", -# label="Correlation Method", -# choices = list("spearman", -# "pearson", -# "kendall"), -# selected="spearman" -# ) -# ), -# conditionalPanel( -# condition="input.sidebar == 'Correlation'", -# numericInput( -# "corr_lig_dist" -# , "Ligand Distance Cutoff (Å)", value=1 -# ) -# ), -# conditionalPanel( -# condition="input.sidebar == 'Site SNP count'", -# numericInput( -# "snp_ligand_dist" -# , "Ligand Distance Cutoff (Å)", value=10 -# ) -# ), -# conditionalPanel( -# condition="input.sidebar == 'Site SNP count'", -# numericInput( -# "snp_interface_dist" -# , "Interface Distance Cutoff (Å)", value=10 -# ) -# ), -# conditionalPanel( -# condition="input.sidebar == 'Site SNP count'", -# numericInput( -# "snp_nca_dist" -# , "NCA Distance Cutoff (Å)", value=10 -# ) -# ), -# -# conditionalPanel( -# condition="input.sidebar == 'Correlation'", -# checkboxGroupInput( -# "corr_selected", -# "Parameters", -# choiceNames = c( -# "DeepDDG", -# "Dynamut2", -# "FoldX", -# "ConSurf"#, -# ), -# choiceValues = c( -# "DeepDDG", -# "Dynamut2", -# "FoldX", -# "ConSurf"#, -# ), -# selected = c( -# "DeepDDG", -# "Dynamut2", -# "FoldX", -# "ConSurf"#, -# ) -# ) -# ), -# -# # conditionalPanel( -# # condition="input.sidebar == 'DM OM Plots'", -# # selectInput( -# # "dm_om_param", -# # label="Stability Parameter", -# # choices = keys(dm_om_map), -# # selected="SNAP2") -# # ), -# # colour_categ -# conditionalPanel( -# condition="input.sidebar == 'Stability SNP by site'", -# selectInput( -# "stability_snp_param", -# label="Stability Parameter", -# choices = stability_boxes_df$stability_type, -# selected="Average") -# ), -# conditionalPanel( -# condition="input.sidebar == 'Stability SNP by site'", -# checkboxInput("reorder_custom_h", -# label="Reorder by SNP count", -# FALSE) -# ), -# conditionalPanel( -# condition="input.sidebar.match(/^Lineage.*/)", -# checkboxInput("all_lineages", -# label="All Lineages", -# FALSE) -# ), -# # an example of how you can match multiple things in frontend JS -# conditionalPanel( -# condition="input.sidebar == 'LogoP SNP' || -# input.sidebar =='Stability SNP by site' || -# input.sidebar =='Consurf' || -# input.sidebar =='LogoP OR'", -# actionButton("clear_ngl", -# "Clear Structure") -# ), -# conditionalPanel( -# condition="input.sidebar == 'LogoP SNP' || -# input.sidebar =='Stability SNP by site' || -# input.sidebar =='Consurf' || -# input.sidebar =='LogoP OR'", -# actionButton("test_ngl", -# "Test NGLViewR") -# )#, -# -# # downloadButton("save", -# # "Download Plot" -# # ) -# # actionButton( -# # "reload_target", -# # label="Reload Target\nData (slow!)" -# # ) -# -# ) -# ), -# #### body #### -# body <- dashboardBody( -# -# tabItems( -# tabItem(tabName = "dashboard", -# h2("Dashboard tab content") -# ), -# -# tabItem(tabName = "widgets", -# h2("Widgets tab content") -# ) -# ), -# # creates a 'Conditional Panel' containing a plot object from each of our -# # ggplot plot functions (and its associated data frame) -# fluidRow(column(width=12, -# lapply(plot_functions_df$tab_name, -# function(x){ -# -# plot_function=plot_functions_df[ -# plot_functions_df$tab_name==x, -# "plot_function"] -# -# plot_df=plot_functions_df[ -# plot_functions_df$tab_name==x, -# "plot_df"] -# cat(paste0('\nCreating output: ', x)) -# generate_conditionalPanel(x, plot_function, plot_df) -# -# } -# ) -# ) -# ), -# # Explicit fluidRow() for Lineage plots together -# fluidRow( -# column(conditionalPanel( -# condition="input.sidebar.match(/^Lineage.*/)", box( -# title="Lineage Distribution" -# , status = "info" -# , width=NULL -# , plotOutput("lineage_distP", height="700px") %>% withSpinner(color="#0dc5c1"), -# height=800 -# ) -# ), width=6 -# ), -# column(conditionalPanel( -# condition="input.sidebar.match(/^Lineage.*/)", box( -# title="Lineage SNP Diversity" -# , status = "info" -# , width=NULL -# , plotOutput("lin_sc", height="700px") %>% withSpinner(color="#0dc5c1"), -# height=800 -# ) -# ), width=6 -# ) -# -# ), -# # Explicit fluidRow() for Site SNP Count -# fluidRow( -# column(conditionalPanel( -# condition="input.sidebar == 'Site SNP count'", -# box( -# title="Site SNP count" -# , status = "info" -# , width=NULL -# , plotOutput("site_snp_count_bp") %>% withSpinner(color="#0dc5c1") -# ) -# ), width=6 -# ), -# column(conditionalPanel( -# condition="input.sidebar == 'Site SNP count'", -# box( -# title="Ligand Distance" -# , status = "info" -# , width=NULL -# , plotOutput("site_snp_count_bp_ligand") %>% withSpinner(color="#0dc5c1") -# ) -# ), width=6 -# ), -# column(conditionalPanel( -# condition="input.sidebar == 'Site SNP count'", -# box( -# title="Interface Distance" -# , status = "info" -# , width=NULL -# , plotOutput("site_snp_count_interface") %>% withSpinner(color="#0dc5c1") -# ) -# ), width=6 -# ), -# column(conditionalPanel( -# condition="input.sidebar == 'Site SNP count'", -# box( -# title="RNA Distance" -# , status = "info" -# , width=NULL -# , plotOutput("site_snp_count_nca") %>% withSpinner(color="#0dc5c1") -# ) -# ), width=6 -# ) -# ), -# -# # # Explicit fluidRow() for Stability Count -# # fluidRow( -# # column( -# # conditionalPanel( -# # condition="input.sidebar.match(/^Lineage.*/)", -# # lapply( -# # # FIXME: using a hardcoded target DF for this IS WRONG AND WILL BREAK -# # stability_boxes_df[stability_boxes_df$outcome_colname %in% colnames(embb_merged_df3),"outcome_colname"], -# # function(x){ -# # print(paste0("outcome_colname: ",x)) -# # box(plotOutput(x), width=4) -# # } -# # ), -# # width=12 -# # ) -# # ) -# # ), -# -# #### fluidRow()s for "Stability Count" in the sidebar #### -# fluidRow( -# conditionalPanel( -# condition=" -# input.sidebar == 'LogoP SNP' || -# input.sidebar =='Stability SNP by site' || -# input.sidebar =='Consurf' || -# input.sidebar =='LogoP OR'", -# column(NGLVieweROutput("structure"), -# width=3 -# ) -# ), -# conditionalPanel( -# condition=" -# input.sidebar == 'LogoP SNP' || -# input.sidebar == 'Stability SNP by site' || -# input.sidebar == 'Site SNP count' || -# input.sidebar == 'Consurf' || -# input.sidebar == 'LogoP OR'", -# column( -# DT::dataTableOutput('table'), -# width=9 -# ) -# ) -# ), -# ) -# ) -# server <- function(input, output, session) { -# -# #output$LogoPlotSnps = renderPlot(LogoPlotSnps(mutable_df3)) -# output$lin_sc = renderPlot( -# lin_sc( -# input$switch_target, -# all_lineages = input$all_lineages, -# my_xats = 12, # x axis text size -# my_yats = 12, # y axis text size -# my_xals = 12, # x axis label size -# my_yals = 12, # y axis label size -# my_lls = 12, # legend label size -# d_lab_size = 4 -# ) -# ) -# #### lineage_distP #### -# output$lineage_distP = renderPlot( -# lineage_distP( -# get(paste0(input$switch_target, '_merged_df2')), -# all_lineages = input$all_lineages, -# x_lab = "Average Stability", -# x_axis = "avg_stability_scaled", -# fill_categ_cols = c("red", "blue") -# ) -# ) -# -# -# #### observeEvent() Fun(tm) #### -# observeEvent(input$clear_ngl, { -# NGLVieweR_proxy("structure") %>% -# removeSelection("Pos") -# }) -# # Button to test adding a position -# observeEvent(input$test_ngl, { -# NGLVieweR_proxy("structure") %>% -# addSelection('ball+stick' -# , param = list( -# name = "Pos" -# , sele = "35" -# , color = "green") -# ) -# }) -# -# observeEvent( -# { -# input$display_position_range -# input$stability_snp_param -# input$logoplot_colour_scheme -# input$omit_snp_count -# input$switch_target -# input$snp_ligand_dist -# input$snp_nca_dist -# input$snp_interface_dist -# }, -# { -# print("entering main observeEvent()") -# # C O M P A T I B I L I T Y -# #gene=input$switch_target -# #drug=target_map[[gene]] -# target_gene = input$switch_target -# merged_df3 = cbind(get(paste0(input$switch_target, '_merged_df3'))) -# -# position_max=max(merged_df3[['position']]) -# position_min=min(merged_df3[['position']]) -# min_ligand_distance=min(merged_df3$ligand_distance) -# max_ligand_distance=max(merged_df3$ligand_distance) -# # FIXME: these are IMPORTANT -# # # add "pos_count" position count column -# # merged_df3=merged_df3 %>% dplyr::add_count(position) -# # merged_df3$pos_count=merged_df3$n -# # merged_df3$n=NULL -# # -# mutable_df3 = cbind(merged_df3) -# # -# # # re-sort the dataframe according to position count -# sorted_df = cbind(merged_df3) -# sorted_df = sorted_df %>% arrange(pos_count) -# -# # -# outdir = paste0(load_dir, "Data/", drug, '/output/') -# indir = paste0(load_dir, "Data/", drug , "/input/") -# -# -# #### nasty special-purpose merged_df3 variants #### -# # FIXME: SLOW -# # corr_plotdf = corr_data_extract( -# # merged_df3 -# # , gene = gene -# # , drug = drug -# # , extract_scaled_cols = F -# # ) -# -# #input$stability_snp_param -# -# updateCheckboxGroupInput( -# session, -# "corr_selected", -# choiceNames = colnames(get(paste0(input$switch_target,"_corr_df_m3_f"))), -# choiceValues = colnames(get(paste0(input$switch_target,"_corr_df_m3_f"))), -# selected = c("FoldX", "DeepDDG", "mCSM.DUET") -# ) -# -# updateSliderInput( -# session, -# "display_position_range", -# min = position_min, -# max = position_max -# #, value = c(position_min, position_min+150) -# ) -# -# updateNumericInput(session, "selected_logop_snp_position", min = position_min, max = position_max, value = position_min) -# updateNumericInput(session, "selected_logop_ed_position", min = position_min, max = position_max, value = position_min) -# updateNumericInput(session, "corr_lig_dist", min = min_ligand_distance, max = max_ligand_distance, value = min_ligand_distance) -# -# updateNumericInput(session, "snp_ligand_dist", min = min(merged_df3$ligand_distance), max = max(merged_df3$ligand_distance)) -# updateNumericInput(session, "snp_interface_dist", min = min(merged_df3$interface_dist), max = max(merged_df3$interface_dist)) -# updateNumericInput(session, "snp_nca_dist", min = min(merged_df3$nca_distance), max = max(merged_df3$nca_distance)) -# -# -# # different data ranges required for SNP distances -# snp_ligand_dist_df3 = merged_df3[merged_df3[['ligand_distance']]=plot_min & mutable_df3$position <=plot_max),] -# -# subset_mutable_df3=mutable_df3[(mutable_df3$position>=plot_min & mutable_df3$position <=plot_max),] -# subset_sorted_df=sorted_df[(sorted_df$position>=plot_min & sorted_df$position <=plot_max),] -# -# #### LogoPlotSnps #### -# output$LogoPlotSnps = renderPlot( -# LogoPlotSnps(subset_mutable_df3, -# aa_pos_drug = get(paste0(target_gene,"_aa_pos_drug")), -# active_aa_pos = get(paste0(target_gene,"_active_aa_pos")), -# aa_pos_lig1 = get(paste0(target_gene,"_aa_pos_lig1")), -# aa_pos_lig2 = get(paste0(target_gene,"_aa_pos_lig2")), -# aa_pos_lig3 = get(paste0(target_gene,"_aa_pos_lig3")), -# my_logo_col = logoplot_colour_scheme, -# omit_snp_count = omit_snp_count -# -# ) -# ) -# -# ### NGLViewer #### -# # Structure Viewer WebGL/NGLViewR window -# output$structure <- renderNGLVieweR({ -# #ngl_gene=isolate(input$switch_target) -# ngl_gene=input$switch_target -# ngl_drug=target_map[[ngl_gene]] -# ngl_pdb_file=paste0(load_dir, "Data/", ngl_drug, '/output/depth/', ngl_gene, '_complex.pdb') -# print(ngl_pdb_file) -# NGLVieweR(ngl_pdb_file) %>% -# addRepresentation("cartoon", -# param = list(name = "cartoon", -# color="tan" -# #, colorScheme = "chainid" -# ) -# ) %>% -# stageParameters(backgroundColor = "lightgrey") %>% -# setQuality("high") %>% -# setFocus(0) %>% -# setSpin(FALSE) -# }) -# -# -# #### Shared dataTable() #### -# output$table = DT::renderDataTable( -# datatable(subset_sorted_df[,table_columns], -# filter="top", -# selection = "single" -# ) -# ) -# -# #### bp_stability_hmap #### -# # red/blue tiles wala "Stability SNP by Site" -# output$bp_stability_hmap = renderPlot( -# bp_stability_hmap( -# subset_sorted_df, -# reorder_position = input$reorder_custom_h, -# p_title = NULL, -# yvar_colname = stability_colname, -# stability_colname = stability_colname, -# stability_outcome_colname = outcome_colname, -# my_ylab = NULL, -# y_max_override = max(sorted_df$pos_count), -# aa_pos_drug = get(paste0("embb","_aa_pos_drug")), -# active_aa_pos = get(paste0("embb","_active_aa_pos")), -# aa_pos_lig1 = get(paste0("embb","_aa_pos_lig1")), -# aa_pos_lig2 = get(paste0("embb","_aa_pos_lig2")), -# aa_pos_lig3 = get(paste0("embb","_aa_pos_lig3")) -# ) -# ) -# #### LogoPlotCustomH #### -# output$LogoPlotCustomH = renderPlot( -# LogoPlotCustomH( -# subset_sorted_df, -# my_logo_col = logoplot_colour_scheme, -# aa_pos_drug = get(paste0(target_gene,"_aa_pos_drug")), -# active_aa_pos = get(paste0(target_gene,"_active_aa_pos")), -# aa_pos_lig1 = get(paste0(target_gene,"_aa_pos_lig1")), -# aa_pos_lig2 = get(paste0(target_gene,"_aa_pos_lig2")), -# aa_pos_lig3 = get(paste0(target_gene,"_aa_pos_lig3")) -# ) -# ) -# -# #### wideP_consurf3 #### -# output$wideP_consurf3 = renderPlot( -# wideP_consurf3( -# subset_sorted_df, -# point_colours = consurf_colours, -# aa_pos_drug = get(paste0(target_gene,"_aa_pos_drug")), -# active_aa_pos = get(paste0(target_gene,"_active_aa_pos")), -# aa_pos_lig1 = get(paste0(target_gene,"_aa_pos_lig1")), -# aa_pos_lig2 = get(paste0(target_gene,"_aa_pos_lig2")), -# aa_pos_lig3 = get(paste0(target_gene,"_aa_pos_lig3")) -# ) -# ) -# -# #### site_snp_count_bp #### -# #mutable_df3[(mutable_df3$position>=plot_min & mutable_df3$position <=plot_max),] -# # ligand_distance -# # interface_dist -# # nca_distance -# # change to: multiple plots, all use site_snp_count_bp -# # 4 x plots side by side, one normal (no dist. filter), 2/3 filtered by distance columns above -# # use "subtitle text" from pos_count_bp_i.R -# -# output$site_snp_count_bp = renderPlot( -# site_snp_count_bp( -# mutable_df3, -# title_colour = 'black', -# subtitle_colour = "black", -# leg_text_size = 12, -# axis_label_size = 12, -# geom_ls = 4 -# ) -# ) -# output$site_snp_count_bp_ligand = renderPlot( -# site_snp_count_bp( -# snp_ligand_dist_df3, -# title_colour = 'black', -# subtitle_colour = "black", -# leg_text_size = 12, -# axis_label_size = 12, -# geom_ls = 4 -# ) -# ) -# -# # if ("interface_dist" %in% colnames(input$switch_target)) { -# output$site_snp_count_interface = renderPlot( -# site_snp_count_bp( -# snp_interface_dist_df3, -# title_colour = 'black', -# subtitle_colour = "black", -# leg_text_size = 12, -# axis_label_size = 12, -# geom_ls = 4 -# ) -# ) -# # } #else { -# # output$site_snp_count_interface = renderPlot( -# # ggplot() + annotate(x=1,y=1,"text", label="No interface data for this target")+theme_void() -# # ) -# # } -# -# output$site_snp_count_nca = renderPlot( #{ -# #if ("nca_distance" %in% colnames(input$switch_target)) { -# site_snp_count_bp( -# snp_nca_dist_df3, -# title_colour = 'black', -# subtitle_colour = "black", -# leg_text_size = 12, -# axis_label_size = 12, -# geom_ls = 4 -# ) -# # } else { -# # ggplot() + annotate(x=1,y=1,"text", label="No RNA data for this target")+theme_void() -# # } -# # } -# ) -# -# -# -# #### DM OM Plots #### -# #dm_om_param -# # order needs to be: -# # embb_lf_duet, embb_lf_foldx, embb_lf_deepddg, embb_lf_dynamut2, embb_lf_dist_gen, -# # embb_lf_consurf, embb_lf_provean, embb_lf_snap2, embb_lf_mcsm_lig, embb_lf_mmcsm_lig, -# # embb_lf_mcsm_ppi2, SOMETHING NA -# -# # embb_lf_mmcsm_lig SOMETHING NA, -# #dm_om_selection=input$dm_om_param -# #dm_om_df = dm_om_map[[dm_om_selection]] -# #output$lf_bp2 = renderPlot(lf_bp2(get(paste0(input$switch_target, '_', dm_om_df)))) -# -# output$lf_bp2 = renderPlot( -# cowplot::plot_grid( -# plotlist = lapply( -# ls(name=.GlobalEnv, -# pattern=paste0( -# target_gene, -# '_lf_' -# ) -# ), -# function(x){ -# lf_bp2(get(x)) -# } -# )#, nrow=3 -# ), height=800 -# ) -# } -# ) -# -# -# # FIXME: Doesn't add selected table rows correctly -# observeEvent( -# { -# input$table_rows_selected -# }, -# { -# # having to duplicate this is a bit annoying :-( -# ngl_merged_df3=cbind(get(paste0(input$switch_target, '_merged_df3'))) -# ngl_sorted_df = cbind(ngl_merged_df3) -# ngl_sorted_df = ngl_sorted_df %>% arrange(pos_count) -# -# position_max=max(ngl_merged_df3[['position']]) -# position_min=min(ngl_merged_df3[['position']]) -# display_position_range = input$display_position_range -# plot_min=display_position_range[1] -# plot_max=display_position_range[2] -# #ngl_subset_df=ngl_merged_df3[(ngl_merged_df3$position>=plot_min & ngl_merged_df3$position <=plot_max),] -# ngl_subset_df=ngl_sorted_df[(ngl_sorted_df$position>=plot_min & ngl_sorted_df$position <=plot_max),] -# -# -# #table_rows_selected = isolate(input$table_rows_selected) -# table_rows_selected = input$table_rows_selected -# class(table_rows_selected) -# #cat(paste0("Target: ", as.character(input$switch_target), "\nTable Rows for NGLViewR: ", as.character(table_rows_selected))) -# -# struct_pos=(as.character(ngl_subset_df[table_rows_selected,"position"])) -# cat(paste0('Table Index: ', table_rows_selected, "position: ", struct_pos)) -# -# NGLVieweR_proxy("structure") %>% -# #addSelection('ball+stick' -# addSelection('hyperball' -# , param = list( -# name = "Pos" -# , sele = struct_pos -# #, color = "#00ff00" -# , colorValue="00ff00" -# , colorScheme="element" -# ) -# ) -# #cat(paste0('Done NGLViewR addSelection for: ', positions_to_add)) -# } -# ) -# #### Correlation observeEvent #### -# # Yet another special-case observeEvent to handle the correlation pair plot -# -# observeEvent( -# { -# input$corr_selected -# input$corr_method -# input$corr_lig_dist -# }, -# { -# dist_cutoff_user = input$corr_lig_dist -# target_gene=input$switch_target -# plot_title=paste0(target_map[[target_gene]],"/",target_gene) -# -# corr_plot_df = get( -# paste0( -# input$switch_target,"_corr_df_m3_f" -# ) -# )[,c(input$corr_selected, "dst_mode")] -# -# #if ( dist_cutoff_user >= 2) { -# #corr_plotdf_subset = corr_plot_df[corr_plot_df[['Lig.Dist']] < dist_cutoff_user,] -# #} -# # else { -# # corr_plotdf_subset = corr_plot_df -# # } -# -# #### Correlation using ggpairs() #### -# output$my_corr_pairs = renderPlot( -# dashboard_ggpairs( -# corr_plot_df, -# plot_title = plot_title, -# method = input$corr_method, -# tt_args_size = 7, -# gp_args_size = 7 -# ), height = 900 -# ) -# } -# ) -# } -# -# -# app <- shinyApp(ui, server) -# runApp(app) -# } +if (interactive()){ + options(shiny.launch.browser = FALSE) # i am a big girl and can tie my own laces + options(shiny.port = 8000) # don't change the port every time + options(shiny.host = '0.0.0.0') # This means "listen to all addresses on all interfaces" + options(width=120) + options(DT.options = list(scrollX = TRUE)) + #### UI #### + # ui <- dashboardPage(skin="purple", + # dashboardHeader(title = "Drug/Target Explorer"), + # + # dashboardSidebar( + # sidebarMenu( id = "sidebar", + # selectInput( + # "switch_target", + # label="Switch to New Target", + # choices = c( + # "alr", + # "embb", + # "gid", + # "katg", + # "pnca", + # "rpob" + # ), + # selected="embb"), + # menuItem("LogoP SNP", tabName="LogoP SNP"), + # #menuItem("Lineage Sample Count", tabName="Lineage Sample Count"), + # menuItem("Site SNP count", tabName="Site SNP count"), + # menuItem("Stability SNP by site", tabName="Stability SNP by site"), + # menuItem("DM OM Plots", tabName="DM OM Plots"), + # menuItem("Correlation", tabName="Correlation"), + # #menuItem("Lineage Distribution", tabName="Lineage Distribution"), + # menuItem("Consurf", tabName="Consurf"), + # menuItem("LogoP OR", tabName="LogoP OR"), + # menuItem("Lineage", tabName="Lineage"), + # #menuItem('Stability count', tabName='Stability count'), + # + # # These conditionalPanel()s make extra settings appear in the sidebar when needed + # conditionalPanel( + # condition="input.sidebar == 'LogoP SNP'", + # textInput( + # "omit_snp_count", + # "Omit SNPs", + # value = c(0), + # placeholder = "1,3,6" + # ) + # ), + # # NOTE: + # # I *think* we can cheat here slightly and use the min/max from + # # merged_df3[['position']] for everything because the various + # # dataframes for a given gene/drug combination have the + # # same range of positions. May need fixing, especially + # # if we get/shrink the imported data files to something + # # more reasonable. + # conditionalPanel( + # condition=" + # input.sidebar == 'LogoP SNP'|| + # input.sidebar == 'Stability SNP by site' || + # input.sidebar == 'Consurf' || + # input.sidebar == 'LogoP OR'", + # sliderInput( + # "display_position_range" + # , "Display Positions" + # , min=1, max=150, value=c(1,150) # 150 is just a little less than the smallest pos_count + # ) + # ), + # + # conditionalPanel( + # condition=" + # input.sidebar == 'LogoP SNP' || + # input.sidebar == 'LogoP OR' || + # input.sidebar == 'LogoP ED'", + # selectInput( + # "logoplot_colour_scheme", + # label="Logo Plot Colour Scheme", + # choices = logoPlotSchemes, + # selected="chemistry" + # ) + # ), + # conditionalPanel( + # condition="input.sidebar == 'Correlation'", + # selectInput( + # "corr_method", + # label="Correlation Method", + # choices = list("spearman", + # "pearson", + # "kendall"), + # selected="spearman" + # ) + # ), + # conditionalPanel( + # condition="input.sidebar == 'Correlation'", + # numericInput( + # "corr_lig_dist" + # , "Ligand Distance Cutoff (Å)", value=1 + # ) + # ), + # conditionalPanel( + # condition="input.sidebar == 'Site SNP count'", + # numericInput( + # "snp_ligand_dist" + # , "Ligand Distance Cutoff (Å)", value=10 + # ) + # ), + # conditionalPanel( + # condition="input.sidebar == 'Site SNP count'", + # numericInput( + # "snp_interface_dist" + # , "Interface Distance Cutoff (Å)", value=10 + # ) + # ), + # conditionalPanel( + # condition="input.sidebar == 'Site SNP count'", + # numericInput( + # "snp_nca_dist" + # , "NCA Distance Cutoff (Å)", value=10 + # ) + # ), + # + # conditionalPanel( + # condition="input.sidebar == 'Correlation'", + # checkboxGroupInput( + # "corr_selected", + # "Parameters", + # choiceNames = c( + # "DeepDDG", + # "Dynamut2", + # "FoldX", + # "ConSurf"#, + # ), + # choiceValues = c( + # "DeepDDG", + # "Dynamut2", + # "FoldX", + # "ConSurf"#, + # ), + # selected = c( + # "DeepDDG", + # "Dynamut2", + # "FoldX", + # "ConSurf"#, + # ) + # ) + # ), + # + # # conditionalPanel( + # # condition="input.sidebar == 'DM OM Plots'", + # # selectInput( + # # "dm_om_param", + # # label="Stability Parameter", + # # choices = keys(dm_om_map), + # # selected="SNAP2") + # # ), + # # colour_categ + # conditionalPanel( + # condition="input.sidebar == 'Stability SNP by site'", + # selectInput( + # "stability_snp_param", + # label="Stability Parameter", + # choices = stability_boxes_df$stability_type, + # selected="Average") + # ), + # conditionalPanel( + # condition="input.sidebar == 'Stability SNP by site'", + # checkboxInput("reorder_custom_h", + # label="Reorder by SNP count", + # FALSE) + # ), + # conditionalPanel( + # condition="input.sidebar.match(/^Lineage.*/)", + # checkboxInput("all_lineages", + # label="All Lineages", + # FALSE) + # ), + # # an example of how you can match multiple things in frontend JS + # conditionalPanel( + # condition="input.sidebar == 'LogoP SNP' || + # input.sidebar =='Stability SNP by site' || + # input.sidebar =='Consurf' || + # input.sidebar =='LogoP OR'", + # actionButton("clear_ngl", + # "Clear Structure") + # ), + # conditionalPanel( + # condition="input.sidebar == 'LogoP SNP' || + # input.sidebar =='Stability SNP by site' || + # input.sidebar =='Consurf' || + # input.sidebar =='LogoP OR'", + # actionButton("test_ngl", + # "Test NGLViewR") + # )#, + # + # # downloadButton("save", + # # "Download Plot" + # # ) + # # actionButton( + # # "reload_target", + # # label="Reload Target\nData (slow!)" + # # ) + # + # ) + # ), + # #### body #### + # body <- dashboardBody( + # + # tabItems( + # tabItem(tabName = "dashboard", + # h2("Dashboard tab content") + # ), + # + # tabItem(tabName = "widgets", + # h2("Widgets tab content") + # ) + # ), + # # creates a 'Conditional Panel' containing a plot object from each of our + # # ggplot plot functions (and its associated data frame) + # fluidRow(column(width=12, + # lapply(plot_functions_df$tab_name, + # function(x){ + # + # plot_function=plot_functions_df[ + # plot_functions_df$tab_name==x, + # "plot_function"] + # + # plot_df=plot_functions_df[ + # plot_functions_df$tab_name==x, + # "plot_df"] + # cat(paste0('\nCreating output: ', x)) + # generate_conditionalPanel(x, plot_function, plot_df) + # + # } + # ) + # ) + # ), + # # Explicit fluidRow() for Lineage plots together + # fluidRow( + # column(conditionalPanel( + # condition="input.sidebar.match(/^Lineage.*/)", box( + # title="Lineage Distribution" + # , status = "info" + # , width=NULL + # , plotOutput("lineage_distP", height="700px") %>% withSpinner(color="#0dc5c1"), + # height=800 + # ) + # ), width=6 + # ), + # column(conditionalPanel( + # condition="input.sidebar.match(/^Lineage.*/)", box( + # title="Lineage SNP Diversity" + # , status = "info" + # , width=NULL + # , plotOutput("lin_sc", height="700px") %>% withSpinner(color="#0dc5c1"), + # height=800 + # ) + # ), width=6 + # ) + # + # ), + # # Explicit fluidRow() for Site SNP Count + # fluidRow( + # column(conditionalPanel( + # condition="input.sidebar == 'Site SNP count'", + # box( + # title="Site SNP count" + # , status = "info" + # , width=NULL + # , plotOutput("site_snp_count_bp") %>% withSpinner(color="#0dc5c1") + # ) + # ), width=6 + # ), + # column(conditionalPanel( + # condition="input.sidebar == 'Site SNP count'", + # box( + # title="Ligand Distance" + # , status = "info" + # , width=NULL + # , plotOutput("site_snp_count_bp_ligand") %>% withSpinner(color="#0dc5c1") + # ) + # ), width=6 + # ), + # column(conditionalPanel( + # condition="input.sidebar == 'Site SNP count'", + # box( + # title="Interface Distance" + # , status = "info" + # , width=NULL + # , plotOutput("site_snp_count_interface") %>% withSpinner(color="#0dc5c1") + # ) + # ), width=6 + # ), + # column(conditionalPanel( + # condition="input.sidebar == 'Site SNP count'", + # box( + # title="RNA Distance" + # , status = "info" + # , width=NULL + # , plotOutput("site_snp_count_nca") %>% withSpinner(color="#0dc5c1") + # ) + # ), width=6 + # ) + # ), + # + # # # Explicit fluidRow() for Stability Count + # # fluidRow( + # # column( + # # conditionalPanel( + # # condition="input.sidebar.match(/^Lineage.*/)", + # # lapply( + # # # FIXME: using a hardcoded target DF for this IS WRONG AND WILL BREAK + # # stability_boxes_df[stability_boxes_df$outcome_colname %in% colnames(embb_merged_df3),"outcome_colname"], + # # function(x){ + # # print(paste0("outcome_colname: ",x)) + # # box(plotOutput(x), width=4) + # # } + # # ), + # # width=12 + # # ) + # # ) + # # ), + # + # #### fluidRow()s for "Stability Count" in the sidebar #### + # fluidRow( + # conditionalPanel( + # condition=" + # input.sidebar == 'LogoP SNP' || + # input.sidebar =='Stability SNP by site' || + # input.sidebar =='Consurf' || + # input.sidebar =='LogoP OR'", + # column(NGLVieweROutput("structure"), + # width=3 + # ) + # ), + # conditionalPanel( + # condition=" + # input.sidebar == 'LogoP SNP' || + # input.sidebar == 'Stability SNP by site' || + # input.sidebar == 'Site SNP count' || + # input.sidebar == 'Consurf' || + # input.sidebar == 'LogoP OR'", + # column( + # DT::dataTableOutput('table'), + # width=9 + # ) + # ) + # ), + # ) + # ) + # server <- function(input, output, session) { + # + # #output$LogoPlotSnps = renderPlot(LogoPlotSnps(mutable_df3)) + # output$lin_sc = renderPlot( + # lin_sc( + # input$switch_target, + # all_lineages = input$all_lineages, + # my_xats = 12, # x axis text size + # my_yats = 12, # y axis text size + # my_xals = 12, # x axis label size + # my_yals = 12, # y axis label size + # my_lls = 12, # legend label size + # d_lab_size = 4 + # ) + # ) + # #### lineage_distP #### + # output$lineage_distP = renderPlot( + # lineage_distP( + # get(paste0(input$switch_target, '_merged_df2')), + # all_lineages = input$all_lineages, + # x_lab = "Average Stability", + # x_axis = "avg_stability_scaled", + # fill_categ_cols = c("red", "blue") + # ) + # ) + # + # + # #### observeEvent() Fun(tm) #### + # observeEvent(input$clear_ngl, { + # NGLVieweR_proxy("structure") %>% + # removeSelection("Pos") + # }) + # # Button to test adding a position + # observeEvent(input$test_ngl, { + # NGLVieweR_proxy("structure") %>% + # addSelection('ball+stick' + # , param = list( + # name = "Pos" + # , sele = "35" + # , color = "green") + # ) + # }) + # + # observeEvent( + # { + # input$display_position_range + # input$stability_snp_param + # input$logoplot_colour_scheme + # input$omit_snp_count + # input$switch_target + # input$snp_ligand_dist + # input$snp_nca_dist + # input$snp_interface_dist + # }, + # { + # print("entering main observeEvent()") + # # C O M P A T I B I L I T Y + # #gene=input$switch_target + # #drug=target_map[[gene]] + # target_gene = input$switch_target + # merged_df3 = cbind(get(paste0(input$switch_target, '_merged_df3'))) + # + # position_max=max(merged_df3[['position']]) + # position_min=min(merged_df3[['position']]) + # min_ligand_distance=min(merged_df3$ligand_distance) + # max_ligand_distance=max(merged_df3$ligand_distance) + # # FIXME: these are IMPORTANT + # # # add "pos_count" position count column + # # merged_df3=merged_df3 %>% dplyr::add_count(position) + # # merged_df3$pos_count=merged_df3$n + # # merged_df3$n=NULL + # # + # mutable_df3 = cbind(merged_df3) + # # + # # # re-sort the dataframe according to position count + # sorted_df = cbind(merged_df3) + # sorted_df = sorted_df %>% arrange(pos_count) + # + # # + # outdir = paste0(load_dir, "Data/", drug, '/output/') + # indir = paste0(load_dir, "Data/", drug , "/input/") + # + # + # #### nasty special-purpose merged_df3 variants #### + # # FIXME: SLOW + # # corr_plotdf = corr_data_extract( + # # merged_df3 + # # , gene = gene + # # , drug = drug + # # , extract_scaled_cols = F + # # ) + # + # #input$stability_snp_param + # + # updateCheckboxGroupInput( + # session, + # "corr_selected", + # choiceNames = colnames(get(paste0(input$switch_target,"_corr_df_m3_f"))), + # choiceValues = colnames(get(paste0(input$switch_target,"_corr_df_m3_f"))), + # selected = c("FoldX", "DeepDDG", "mCSM.DUET") + # ) + # + # updateSliderInput( + # session, + # "display_position_range", + # min = position_min, + # max = position_max + # #, value = c(position_min, position_min+150) + # ) + # + # updateNumericInput(session, "selected_logop_snp_position", min = position_min, max = position_max, value = position_min) + # updateNumericInput(session, "selected_logop_ed_position", min = position_min, max = position_max, value = position_min) + # updateNumericInput(session, "corr_lig_dist", min = min_ligand_distance, max = max_ligand_distance, value = min_ligand_distance) + # + # updateNumericInput(session, "snp_ligand_dist", min = min(merged_df3$ligand_distance), max = max(merged_df3$ligand_distance)) + # updateNumericInput(session, "snp_interface_dist", min = min(merged_df3$interface_dist), max = max(merged_df3$interface_dist)) + # updateNumericInput(session, "snp_nca_dist", min = min(merged_df3$nca_distance), max = max(merged_df3$nca_distance)) + # + # + # # different data ranges required for SNP distances + # snp_ligand_dist_df3 = merged_df3[merged_df3[['ligand_distance']]=plot_min & mutable_df3$position <=plot_max),] + # + # subset_mutable_df3=mutable_df3[(mutable_df3$position>=plot_min & mutable_df3$position <=plot_max),] + # subset_sorted_df=sorted_df[(sorted_df$position>=plot_min & sorted_df$position <=plot_max),] + # + # #### LogoPlotSnps #### + # output$LogoPlotSnps = renderPlot( + # LogoPlotSnps(subset_mutable_df3, + # aa_pos_drug = get(paste0(target_gene,"_aa_pos_drug")), + # active_aa_pos = get(paste0(target_gene,"_active_aa_pos")), + # aa_pos_lig1 = get(paste0(target_gene,"_aa_pos_lig1")), + # aa_pos_lig2 = get(paste0(target_gene,"_aa_pos_lig2")), + # aa_pos_lig3 = get(paste0(target_gene,"_aa_pos_lig3")), + # my_logo_col = logoplot_colour_scheme, + # omit_snp_count = omit_snp_count + # + # ) + # ) + # + # ### NGLViewer #### + # # Structure Viewer WebGL/NGLViewR window + # output$structure <- renderNGLVieweR({ + # #ngl_gene=isolate(input$switch_target) + # ngl_gene=input$switch_target + # ngl_drug=target_map[[ngl_gene]] + # ngl_pdb_file=paste0(load_dir, "Data/", ngl_drug, '/output/depth/', ngl_gene, '_complex.pdb') + # print(ngl_pdb_file) + # NGLVieweR(ngl_pdb_file) %>% + # addRepresentation("cartoon", + # param = list(name = "cartoon", + # color="tan" + # #, colorScheme = "chainid" + # ) + # ) %>% + # stageParameters(backgroundColor = "lightgrey") %>% + # setQuality("high") %>% + # setFocus(0) %>% + # setSpin(FALSE) + # }) + # + # + # #### Shared dataTable() #### + # output$table = DT::renderDataTable( + # datatable(subset_sorted_df[,table_columns], + # filter="top", + # selection = "single" + # ) + # ) + # + # #### bp_stability_hmap #### + # # red/blue tiles wala "Stability SNP by Site" + # output$bp_stability_hmap = renderPlot( + # bp_stability_hmap( + # subset_sorted_df, + # reorder_position = input$reorder_custom_h, + # p_title = NULL, + # yvar_colname = stability_colname, + # stability_colname = stability_colname, + # stability_outcome_colname = outcome_colname, + # my_ylab = NULL, + # y_max_override = max(sorted_df$pos_count), + # aa_pos_drug = get(paste0("embb","_aa_pos_drug")), + # active_aa_pos = get(paste0("embb","_active_aa_pos")), + # aa_pos_lig1 = get(paste0("embb","_aa_pos_lig1")), + # aa_pos_lig2 = get(paste0("embb","_aa_pos_lig2")), + # aa_pos_lig3 = get(paste0("embb","_aa_pos_lig3")) + # ) + # ) + # #### LogoPlotCustomH #### + # output$LogoPlotCustomH = renderPlot( + # LogoPlotCustomH( + # subset_sorted_df, + # my_logo_col = logoplot_colour_scheme, + # aa_pos_drug = get(paste0(target_gene,"_aa_pos_drug")), + # active_aa_pos = get(paste0(target_gene,"_active_aa_pos")), + # aa_pos_lig1 = get(paste0(target_gene,"_aa_pos_lig1")), + # aa_pos_lig2 = get(paste0(target_gene,"_aa_pos_lig2")), + # aa_pos_lig3 = get(paste0(target_gene,"_aa_pos_lig3")) + # ) + # ) + # + # #### wideP_consurf3 #### + # output$wideP_consurf3 = renderPlot( + # wideP_consurf3( + # subset_sorted_df, + # point_colours = consurf_colours, + # aa_pos_drug = get(paste0(target_gene,"_aa_pos_drug")), + # active_aa_pos = get(paste0(target_gene,"_active_aa_pos")), + # aa_pos_lig1 = get(paste0(target_gene,"_aa_pos_lig1")), + # aa_pos_lig2 = get(paste0(target_gene,"_aa_pos_lig2")), + # aa_pos_lig3 = get(paste0(target_gene,"_aa_pos_lig3")) + # ) + # ) + # + # #### site_snp_count_bp #### + # #mutable_df3[(mutable_df3$position>=plot_min & mutable_df3$position <=plot_max),] + # # ligand_distance + # # interface_dist + # # nca_distance + # # change to: multiple plots, all use site_snp_count_bp + # # 4 x plots side by side, one normal (no dist. filter), 2/3 filtered by distance columns above + # # use "subtitle text" from pos_count_bp_i.R + # + # output$site_snp_count_bp = renderPlot( + # site_snp_count_bp( + # mutable_df3, + # title_colour = 'black', + # subtitle_colour = "black", + # leg_text_size = 12, + # axis_label_size = 12, + # geom_ls = 4 + # ) + # ) + # output$site_snp_count_bp_ligand = renderPlot( + # site_snp_count_bp( + # snp_ligand_dist_df3, + # title_colour = 'black', + # subtitle_colour = "black", + # leg_text_size = 12, + # axis_label_size = 12, + # geom_ls = 4 + # ) + # ) + # + # # if ("interface_dist" %in% colnames(input$switch_target)) { + # output$site_snp_count_interface = renderPlot( + # site_snp_count_bp( + # snp_interface_dist_df3, + # title_colour = 'black', + # subtitle_colour = "black", + # leg_text_size = 12, + # axis_label_size = 12, + # geom_ls = 4 + # ) + # ) + # # } #else { + # # output$site_snp_count_interface = renderPlot( + # # ggplot() + annotate(x=1,y=1,"text", label="No interface data for this target")+theme_void() + # # ) + # # } + # + # output$site_snp_count_nca = renderPlot( #{ + # #if ("nca_distance" %in% colnames(input$switch_target)) { + # site_snp_count_bp( + # snp_nca_dist_df3, + # title_colour = 'black', + # subtitle_colour = "black", + # leg_text_size = 12, + # axis_label_size = 12, + # geom_ls = 4 + # ) + # # } else { + # # ggplot() + annotate(x=1,y=1,"text", label="No RNA data for this target")+theme_void() + # # } + # # } + # ) + # + # + # + # #### DM OM Plots #### + # #dm_om_param + # # order needs to be: + # # embb_lf_duet, embb_lf_foldx, embb_lf_deepddg, embb_lf_dynamut2, embb_lf_dist_gen, + # # embb_lf_consurf, embb_lf_provean, embb_lf_snap2, embb_lf_mcsm_lig, embb_lf_mmcsm_lig, + # # embb_lf_mcsm_ppi2, SOMETHING NA + # + # # embb_lf_mmcsm_lig SOMETHING NA, + # #dm_om_selection=input$dm_om_param + # #dm_om_df = dm_om_map[[dm_om_selection]] + # #output$lf_bp2 = renderPlot(lf_bp2(get(paste0(input$switch_target, '_', dm_om_df)))) + # + # output$lf_bp2 = renderPlot( + # cowplot::plot_grid( + # plotlist = lapply( + # ls(name=.GlobalEnv, + # pattern=paste0( + # target_gene, + # '_lf_' + # ) + # ), + # function(x){ + # lf_bp2(get(x)) + # } + # )#, nrow=3 + # ), height=800 + # ) + # } + # ) + # + # + # # FIXME: Doesn't add selected table rows correctly + # observeEvent( + # { + # input$table_rows_selected + # }, + # { + # # having to duplicate this is a bit annoying :-( + # ngl_merged_df3=cbind(get(paste0(input$switch_target, '_merged_df3'))) + # ngl_sorted_df = cbind(ngl_merged_df3) + # ngl_sorted_df = ngl_sorted_df %>% arrange(pos_count) + # + # position_max=max(ngl_merged_df3[['position']]) + # position_min=min(ngl_merged_df3[['position']]) + # display_position_range = input$display_position_range + # plot_min=display_position_range[1] + # plot_max=display_position_range[2] + # #ngl_subset_df=ngl_merged_df3[(ngl_merged_df3$position>=plot_min & ngl_merged_df3$position <=plot_max),] + # ngl_subset_df=ngl_sorted_df[(ngl_sorted_df$position>=plot_min & ngl_sorted_df$position <=plot_max),] + # + # + # #table_rows_selected = isolate(input$table_rows_selected) + # table_rows_selected = input$table_rows_selected + # class(table_rows_selected) + # #cat(paste0("Target: ", as.character(input$switch_target), "\nTable Rows for NGLViewR: ", as.character(table_rows_selected))) + # + # struct_pos=(as.character(ngl_subset_df[table_rows_selected,"position"])) + # cat(paste0('Table Index: ', table_rows_selected, "position: ", struct_pos)) + # + # NGLVieweR_proxy("structure") %>% + # #addSelection('ball+stick' + # addSelection('hyperball' + # , param = list( + # name = "Pos" + # , sele = struct_pos + # #, color = "#00ff00" + # , colorValue="00ff00" + # , colorScheme="element" + # ) + # ) + # #cat(paste0('Done NGLViewR addSelection for: ', positions_to_add)) + # } + # ) + # #### Correlation observeEvent #### + # # Yet another special-case observeEvent to handle the correlation pair plot + # + # observeEvent( + # { + # input$corr_selected + # input$corr_method + # input$corr_lig_dist + # }, + # { + # dist_cutoff_user = input$corr_lig_dist + # target_gene=input$switch_target + # plot_title=paste0(target_map[[target_gene]],"/",target_gene) + # + # corr_plot_df = get( + # paste0( + # input$switch_target,"_corr_df_m3_f" + # ) + # )[,c(input$corr_selected, "dst_mode")] + # + # #if ( dist_cutoff_user >= 2) { + # #corr_plotdf_subset = corr_plot_df[corr_plot_df[['Lig.Dist']] < dist_cutoff_user,] + # #} + # # else { + # # corr_plotdf_subset = corr_plot_df + # # } + # + # #### Correlation using ggpairs() #### + # output$my_corr_pairs = renderPlot( + # dashboard_ggpairs( + # corr_plot_df, + # plot_title = plot_title, + # method = input$corr_method, + # tt_args_size = 7, + # gp_args_size = 7 + # ), height = 900 + # ) + # } + # ) + # } + # + # + # app <- shinyApp(ui, server) + # runApp(app) +}