mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
148 lines
4.1 KiB
Python
148 lines
4.1 KiB
Python
"""Pre-configured iSEE options for selection by user.
|
|
|
|
Currently user configuration is NOT IMPLEMENTED - the code is here but option
|
|
is hidden from user in the tool form. Without ``custom`` selection, this simply
|
|
returns a DEFAULT iSEE configuration (defined at the bottom of this file).
|
|
|
|
These are preconfigured iSEE parameters that can be chosen by the user
|
|
as multiple choice (checkbox/select) input fields. Each parameter
|
|
(e.g. "initial") has a list of options whose indices should match the value of
|
|
the input field in the tool XML.
|
|
|
|
In all likelihood, the majority of options in
|
|
iSEE don't make sense without first being able to sniff the data and so are not
|
|
feasible to expose in the Galaxy tool form. Currently you will see that only
|
|
plot type and width can be exposed.
|
|
"""
|
|
|
|
|
|
def app():
|
|
"""Render R code to create iSEE app from user input."""
|
|
return DEFAULT
|
|
|
|
|
|
def render_plots(call, plots):
|
|
"""Render plot calls from user input."""
|
|
if not plots:
|
|
return call
|
|
plot_calls_list = [
|
|
get_render_func(plot)(
|
|
# user plot params as kwargs here
|
|
)
|
|
for plot in plots
|
|
]
|
|
plot_calls = ",\ninitial=c(\n" + ",\n".join(plot_calls_list) + ")"
|
|
return call + plot_calls
|
|
|
|
|
|
def get_render_func(plot):
|
|
"""Return the appropriate function to render plot."""
|
|
# This is probably broken and unused
|
|
return OPTIONS["plots"][plot["plot_types"]["plot_type"].value] # type: ignore[index]
|
|
|
|
|
|
def reduced_dimension_plot(pw="6L"):
|
|
"""Render a ReducedDimensionPlot object call."""
|
|
return f"""ReducedDimensionPlot(
|
|
PanelWidth={pw})"""
|
|
|
|
|
|
def feature_assay_plot(pw="6L"):
|
|
"""Render a FeatureAssayPlot object call."""
|
|
return f"""FeatureAssayPlot(
|
|
PanelWidth={pw})"""
|
|
|
|
|
|
def row_data_table(pw="12L"):
|
|
"""Render a RowDataTable object call."""
|
|
return f"RowDataTable(PanelWidth={pw})"
|
|
|
|
|
|
def column_data_plot(pw="6L"):
|
|
"""Render a ColumnDataPlot object call."""
|
|
return f"ColumnDataPlot(PanelWidth={pw})"
|
|
|
|
|
|
OPTIONS = {
|
|
"plots": {
|
|
"reduced_dimension_plot": reduced_dimension_plot,
|
|
"feature_assay_plot": feature_assay_plot,
|
|
"row_data_table": row_data_table,
|
|
"column_data_plot": column_data_plot,
|
|
},
|
|
"colormaps": {},
|
|
"extra": {},
|
|
}
|
|
|
|
|
|
DEFAULT = """
|
|
sce <- registerAppOptions(sce, color.maxlevels=40)
|
|
|
|
categorical_color_fun <- function(n){
|
|
if (n <= 37) {
|
|
# Less than 37 colours, use something from colour brewer
|
|
# (joining a bunch of palettes, best colours up front)
|
|
multiset <- c(
|
|
RColorBrewer::brewer.pal(9, "Set1"),
|
|
RColorBrewer::brewer.pal(8, "Set2"),
|
|
RColorBrewer::brewer.pal(12, "Set3"),
|
|
RColorBrewer::brewer.pal(8, "Dark2"))
|
|
return(multiset[1:n])
|
|
}
|
|
else {
|
|
# More that 37, well at least it looks pretty
|
|
return(rainbow(n))
|
|
}
|
|
}
|
|
|
|
|
|
ecm <- ExperimentColorMap(
|
|
|
|
# The default is viridis::viridis
|
|
# https://cran.r-project.org/web/packages/viridis/vignettes/intro-to-viridis.html#the-color-scales
|
|
# Setting continous is entirely a matter of taste
|
|
# Some find magma easier to read than viridis
|
|
|
|
all_continuous = list(
|
|
assays = viridis::magma,
|
|
colData = viridis::magma,
|
|
rowData = viridis::magma
|
|
),
|
|
all_discrete = list(
|
|
colData = categorical_color_fun,
|
|
rowData = categorical_color_fun
|
|
)
|
|
)
|
|
|
|
|
|
# These options are all sce-contents agnostic.
|
|
initial_plots <- c(
|
|
|
|
# Show umap with clusters by default
|
|
ReducedDimensionPlot(
|
|
DataBoxOpen=TRUE,
|
|
ColorBy="Column data",
|
|
VisualBoxOpen=TRUE,
|
|
PanelWidth=6L),
|
|
|
|
# Show gene expression plot separated (and coloured) by cluster, by default.
|
|
FeatureAssayPlot(XAxis = "Column data",
|
|
DataBoxOpen=TRUE,
|
|
VisualBoxOpen=TRUE,
|
|
ColorBy="Column data",
|
|
PanelWidth=6L
|
|
),
|
|
# Gene list is better wide
|
|
RowDataTable(PanelWidth=12L),
|
|
|
|
# For cell level observations (QC.)
|
|
ColumnDataPlot(PanelWidth=6L,
|
|
DataBoxOpen=TRUE,
|
|
VisualBoxOpen=TRUE )
|
|
)
|
|
|
|
app <- iSEE(sce,
|
|
colormap=ecm,
|
|
initial=initial_plots)
|
|
"""
|