Simplify colormap handling

This commit is contained in:
usov_i 2023-01-27 14:40:56 +01:00
parent 64baeb0373
commit 1860bce4c2
2 changed files with 42 additions and 123 deletions

View File

@ -24,7 +24,6 @@ from bokeh.models import (
TableColumn,
Tabs,
)
from bokeh.palettes import Cividis256, Greys256, Plasma256
from bokeh.plotting import figure
import pyzebra
@ -269,11 +268,6 @@ def create():
proj_display_min_spinner.value = im_min
proj_display_max_spinner.value = im_max
proj_x_image_glyph.color_mapper.low = im_min
proj_y_image_glyph.color_mapper.low = im_min
proj_x_image_glyph.color_mapper.high = im_max
proj_y_image_glyph.color_mapper.high = im_max
frame_range.start = 0
frame_range.end = n_im
frame_range.reset_start = 0
@ -297,6 +291,7 @@ def create():
# shared frame ranges
frame_range = Range1d(0, 1, bounds=(0, 1))
scanning_motor_range = Range1d(0, 1, bounds=(0, 1))
color_mapper_proj = LinearColorMapper()
det_x_range = Range1d(0, IMAGE_W, bounds=(0, IMAGE_W))
proj_x_plot = figure(
@ -319,7 +314,7 @@ def create():
dict(image=[np.zeros((1, 1), dtype="float32")], x=[0], y=[0], dw=[IMAGE_W], dh=[1])
)
proj_x_image_glyph = proj_x_plot.image(source=proj_x_image_source).glyph
proj_x_plot.image(source=proj_x_image_source, color_mapper=color_mapper_proj)
det_y_range = Range1d(0, IMAGE_H, bounds=(0, IMAGE_H))
proj_y_plot = figure(
@ -344,24 +339,18 @@ def create():
dict(image=[np.zeros((1, 1), dtype="float32")], x=[0], y=[0], dw=[IMAGE_H], dh=[1])
)
proj_y_image_glyph = proj_y_plot.image(source=proj_y_image_source).glyph
proj_y_plot.image(source=proj_y_image_source, color_mapper=color_mapper_proj)
cmap_dict = {
"gray": Greys256,
"gray_reversed": Greys256[::-1],
"plasma": Plasma256,
"cividis": Cividis256,
}
def colormap_select_callback(_attr, _old, new):
color_mapper_proj.palette = new
def colormap_callback(_attr, _old, new):
proj_x_image_glyph.color_mapper = LinearColorMapper(palette=cmap_dict[new])
proj_y_image_glyph.color_mapper = LinearColorMapper(palette=cmap_dict[new])
colormap = Select(title="Colormap:", options=list(cmap_dict.keys()), width=210)
colormap.on_change("value", colormap_callback)
colormap.value = "plasma"
PROJ_STEP = 1
colormap_select = Select(
title="Colormap:",
options=[("Greys256", "greys"), ("Plasma256", "plasma"), ("Cividis256", "cividis")],
width=210,
)
colormap_select.on_change("value", colormap_select_callback)
colormap_select.value = "Plasma256"
def proj_auto_checkbox_callback(state):
if state:
@ -379,37 +368,18 @@ def create():
proj_auto_checkbox.on_click(proj_auto_checkbox_callback)
def proj_display_max_spinner_callback(_attr, _old_value, new_value):
proj_display_min_spinner.high = new_value - PROJ_STEP
proj_x_image_glyph.color_mapper.high = new_value
proj_y_image_glyph.color_mapper.high = new_value
_update_proj_plots()
color_mapper_proj.high = new_value
proj_display_max_spinner = Spinner(
low=0 + PROJ_STEP,
value=1,
step=PROJ_STEP,
disabled=bool(proj_auto_checkbox.active),
width=100,
height=31,
value=1, disabled=bool(proj_auto_checkbox.active), mode="int", width=100, height=31
)
proj_display_max_spinner.on_change("value", proj_display_max_spinner_callback)
def proj_display_min_spinner_callback(_attr, _old_value, new_value):
proj_display_max_spinner.low = new_value + PROJ_STEP
proj_x_image_glyph.color_mapper.low = new_value
proj_y_image_glyph.color_mapper.low = new_value
_update_proj_plots()
color_mapper_proj.low = new_value
proj_display_min_spinner = Spinner(
low=0,
high=1 - PROJ_STEP,
value=0,
step=PROJ_STEP,
disabled=bool(proj_auto_checkbox.active),
width=100,
height=31,
value=0, disabled=bool(proj_auto_checkbox.active), mode="int", width=100, height=31
)
proj_display_min_spinner.on_change("value", proj_display_min_spinner_callback)
@ -510,7 +480,7 @@ def create():
proc_button.on_click(proc_button_callback)
layout_controls = row(
colormap,
colormap_select,
column(proj_auto_checkbox, row(proj_display_min_spinner, proj_display_max_spinner)),
proc_button,
proc_all_button,

View File

@ -29,7 +29,6 @@ from bokeh.models import (
TableColumn,
Tabs,
)
from bokeh.palettes import Cividis256, Greys256, Plasma256
from bokeh.plotting import figure
import pyzebra
@ -275,7 +274,7 @@ def create():
export = [scan["export"] for scan in dataset]
scan_table_source.data.update(export=export)
def monitor_spinner_callback(_attr, old, new):
def monitor_spinner_callback(_attr, _old, new):
if dataset:
pyzebra.normalize_dataset(dataset, new)
_update_image()
@ -334,9 +333,6 @@ def create():
display_min_spinner.value = im_min
display_max_spinner.value = im_max
image_glyph.color_mapper.low = im_min
image_glyph.color_mapper.high = im_max
if "mf" in scan:
metadata_table_source.data.update(mf=[scan["mf"][index]])
else:
@ -401,11 +397,6 @@ def create():
proj_display_min_spinner.value = im_min
proj_display_max_spinner.value = im_max
proj_x_image_glyph.color_mapper.low = im_min
proj_y_image_glyph.color_mapper.low = im_min
proj_x_image_glyph.color_mapper.high = im_max
proj_y_image_glyph.color_mapper.high = im_max
frame_range.start = 0
frame_range.end = n_im
frame_range.reset_start = 0
@ -492,7 +483,8 @@ def create():
)
)
image_glyph = plot.image(source=image_source).glyph
color_mapper = LinearColorMapper()
plot.image(source=image_source, color_mapper=color_mapper)
plot.image(source=image_source, image="h", global_alpha=0)
plot.image(source=image_source, image="k", global_alpha=0)
plot.image(source=image_source, image="l", global_alpha=0)
@ -581,6 +573,7 @@ def create():
# shared frame ranges
frame_range = Range1d(0, 1, bounds=(0, 1))
scanning_motor_range = Range1d(0, 1, bounds=(0, 1))
color_mapper_proj = LinearColorMapper()
det_x_range = Range1d(0, IMAGE_W, bounds=(0, IMAGE_W))
gamma_range = Range1d(0, 1, bounds=(0, 1))
@ -607,7 +600,7 @@ def create():
dict(image=[np.zeros((1, 1), dtype="float32")], x=[0], y=[0], dw=[IMAGE_W], dh=[1])
)
proj_x_image_glyph = proj_x_plot.image(source=proj_x_image_source).glyph
proj_x_plot.image(source=proj_x_image_source, color_mapper=color_mapper_proj)
det_y_range = Range1d(0, IMAGE_H, bounds=(0, IMAGE_H))
nu_range = Range1d(0, 1, bounds=(0, 1))
@ -636,7 +629,7 @@ def create():
dict(image=[np.zeros((1, 1), dtype="float32")], x=[0], y=[0], dw=[IMAGE_H], dh=[1])
)
proj_y_image_glyph = proj_y_plot.image(source=proj_y_image_source).glyph
proj_y_plot.image(source=proj_y_image_source, color_mapper=color_mapper_proj)
# ROI slice plot
roi_avg_plot = figure(plot_height=150, plot_width=IMAGE_PLOT_W, tools="", toolbar_location=None)
@ -644,23 +637,17 @@ def create():
roi_avg_plot_line_source = ColumnDataSource(dict(x=[], y=[]))
roi_avg_plot.line(source=roi_avg_plot_line_source, line_color="steelblue")
cmap_dict = {
"gray": Greys256,
"gray_reversed": Greys256[::-1],
"plasma": Plasma256,
"cividis": Cividis256,
}
def colormap_select_callback(_attr, _old, new):
color_mapper.palette = new
color_mapper_proj.palette = new
def colormap_callback(_attr, _old, new):
image_glyph.color_mapper = LinearColorMapper(palette=cmap_dict[new])
proj_x_image_glyph.color_mapper = LinearColorMapper(palette=cmap_dict[new])
proj_y_image_glyph.color_mapper = LinearColorMapper(palette=cmap_dict[new])
colormap = Select(title="Colormap:", options=list(cmap_dict.keys()), width=210)
colormap.on_change("value", colormap_callback)
colormap.value = "plasma"
STEP = 1
colormap_select = Select(
title="Colormap:",
options=[("Greys256", "greys"), ("Plasma256", "plasma"), ("Cividis256", "cividis")],
width=210,
)
colormap_select.on_change("value", colormap_select_callback)
colormap_select.value = "Plasma256"
def main_auto_checkbox_callback(state):
if state:
@ -678,40 +665,21 @@ def create():
main_auto_checkbox.on_click(main_auto_checkbox_callback)
def display_max_spinner_callback(_attr, _old_value, new_value):
display_min_spinner.high = new_value - STEP
image_glyph.color_mapper.high = new_value
_update_image()
color_mapper.high = new_value
display_max_spinner = Spinner(
low=0 + STEP,
value=1,
step=STEP,
disabled=bool(main_auto_checkbox.active),
width=100,
height=31,
value=1, disabled=bool(main_auto_checkbox.active), mode="int", width=100, height=31
)
display_max_spinner.on_change("value", display_max_spinner_callback)
def display_min_spinner_callback(_attr, _old_value, new_value):
display_max_spinner.low = new_value + STEP
image_glyph.color_mapper.low = new_value
_update_image()
color_mapper.low = new_value
display_min_spinner = Spinner(
low=0,
high=1 - STEP,
value=0,
step=STEP,
disabled=bool(main_auto_checkbox.active),
width=100,
height=31,
value=0, disabled=bool(main_auto_checkbox.active), mode="int", width=100, height=31
)
display_min_spinner.on_change("value", display_min_spinner_callback)
PROJ_STEP = 1
def proj_auto_checkbox_callback(state):
if state:
proj_display_min_spinner.disabled = True
@ -728,37 +696,18 @@ def create():
proj_auto_checkbox.on_click(proj_auto_checkbox_callback)
def proj_display_max_spinner_callback(_attr, _old_value, new_value):
proj_display_min_spinner.high = new_value - PROJ_STEP
proj_x_image_glyph.color_mapper.high = new_value
proj_y_image_glyph.color_mapper.high = new_value
_update_proj_plots()
color_mapper_proj.high = new_value
proj_display_max_spinner = Spinner(
low=0 + PROJ_STEP,
value=1,
step=PROJ_STEP,
disabled=bool(proj_auto_checkbox.active),
width=100,
height=31,
value=1, disabled=bool(proj_auto_checkbox.active), mode="int", width=100, height=31
)
proj_display_max_spinner.on_change("value", proj_display_max_spinner_callback)
def proj_display_min_spinner_callback(_attr, _old_value, new_value):
proj_display_max_spinner.low = new_value + PROJ_STEP
proj_x_image_glyph.color_mapper.low = new_value
proj_y_image_glyph.color_mapper.low = new_value
_update_proj_plots()
color_mapper_proj.low = new_value
proj_display_min_spinner = Spinner(
low=0,
high=1 - PROJ_STEP,
value=0,
step=PROJ_STEP,
disabled=bool(proj_auto_checkbox.active),
width=100,
height=31,
value=0, disabled=bool(proj_auto_checkbox.active), mode="int", width=100, height=31
)
proj_display_min_spinner.on_change("value", proj_display_min_spinner_callback)
@ -932,7 +881,7 @@ def create():
layout_image = column(gridplot([[proj_v, None], [plot, proj_h]], merge_tools=False))
colormap_layout = column(
colormap,
colormap_select,
main_auto_checkbox,
row(display_min_spinner, display_max_spinner),
proj_auto_checkbox,