Source code for hyperspy_gui_anywidget.microscope_parameters
"""Microscope parameter widgets for EELS and EDS using anywidget."""
import traitlets
from anywidget.widget import AnyWidget
from link_traits import link
from traits.api import Undefined
from hyperspy_gui_anywidget.custom_widgets import ContainerWidget, FloatTextWidget
from hyperspy_gui_anywidget.utils import add_display_arg, get_label
def _set_microscope_parameters(obj, **kwargs):
"""Build a widget for editing microscope parameters.
Parameters
----------
obj : hyperspy.microscope_parameters.MicroscopeParameters
The microscope parameters object.
**kwargs
Ignored. Kept for API compatibility.
Returns
-------
dict
``{"widget": ContainerWidget, "wdict": {...}}``.
"""
traits = obj.traits()
widgets = []
wdict = {}
for trait_name in obj.editable_traits():
if trait_name in ("mapping", "signal"):
continue
trait = traits[trait_name]
label = get_label(trait, trait_name)
value = getattr(obj, trait_name)
widget = FloatTextWidget(description=label)
if value is Undefined:
value = 0.0
widget.value = value
link((obj, trait_name), (widget, "value"))
widgets.append(widget)
wdict[trait_name] = widget
store_button = ButtonWidget(
description="Store",
tooltip="Store the values in metadata",
)
def on_click(change):
obj.store()
store_button.observe(on_click, names="clicks")
wdict["store_button"] = store_button
container = ContainerWidget(
children=widgets + [store_button],
layout="vertical",
)
return {
"widget": container,
"wdict": wdict,
}
[docs]
@add_display_arg
def eels_microscope_parameter_aw(obj, **kwargs):
"""Build a widget for EELS microscope parameters.
Parameters
----------
obj : hyperspy.microscope_parameters.MicroscopeParameters
The EELS microscope parameters object.
**kwargs
Passed through to the widget builder.
Returns
-------
dict or None
``{"widget": ContainerWidget, "wdict": {...}}`` when
``display=False``, otherwise ``None`` (widget displayed inline).
"""
return _set_microscope_parameters(obj=obj, **kwargs)
[docs]
@add_display_arg
def eds_sem_microscope_parameter_aw(obj, **kwargs):
"""Build a widget for EDS SEM microscope parameters.
Parameters
----------
obj : hyperspy.microscope_parameters.MicroscopeParameters
The EDS SEM microscope parameters object.
**kwargs
Passed through to the widget builder.
Returns
-------
dict or None
``{"widget": ContainerWidget, "wdict": {...}}`` when
``display=False``, otherwise ``None`` (widget displayed inline).
"""
return _set_microscope_parameters(obj=obj, **kwargs)
[docs]
@add_display_arg
def eds_tem_microscope_parameter_aw(obj, **kwargs):
"""Build a widget for EDS TEM microscope parameters.
Parameters
----------
obj : hyperspy.microscope_parameters.MicroscopeParameters
The EDS TEM microscope parameters object.
**kwargs
Passed through to the widget builder.
Returns
-------
dict or None
``{"widget": ContainerWidget, "wdict": {...}}`` when
``display=False``, otherwise ``None`` (widget displayed inline).
"""
return _set_microscope_parameters(obj=obj, **kwargs)