diff --git a/src/python/impactx/dashboard/Input/inputParameters/inputMain.py b/src/python/impactx/dashboard/Input/inputParameters/inputMain.py index f7a46f19a..b6944b824 100644 --- a/src/python/impactx/dashboard/Input/inputParameters/inputMain.py +++ b/src/python/impactx/dashboard/Input/inputParameters/inputMain.py @@ -7,67 +7,22 @@ """ from ... import setup_server, vuetify -from .. import CardComponents, DashboardDefaults, InputComponents, generalFunctions +from .. import CardComponents, InputComponents from . import InputFunctions server, state, ctrl = setup_server() -# ----------------------------------------------------------------------------- -# Callbacks -# ----------------------------------------------------------------------------- - - -input_parameters_defaults = list(DashboardDefaults.INPUT_PARAMETERS.keys()) -space_charge_defaults = list(DashboardDefaults.CSR.keys()) -INPUT_DEFAULTS = input_parameters_defaults + space_charge_defaults - - -@state.change(*INPUT_DEFAULTS) -def on_input_state_change(**_): - state_changes = state.modified_keys & set(INPUT_DEFAULTS) - for state_name in state_changes: - if type(state[state_name]) is str: - print( - f"{state_name} = {state[state_name]} and type: {type(state[state_name])}" - ) - value = getattr(state, state_name) - desired_type = DashboardDefaults.TYPES.get(state_name, None) - validation_name = f"{state_name}_error_message" - conditions = DashboardDefaults.VALIDATION_CONDITION.get(state_name, None) - - validation_result = generalFunctions.validate_against( - value, desired_type, conditions - ) - setattr(state, validation_name, validation_result) - generalFunctions.update_simulation_validation_status() - - if validation_result == []: - converted_value = generalFunctions.convert_to_correct_type( - value, desired_type - ) - - if getattr(state, state_name) != converted_value: - setattr(state, state_name, converted_value) - if state_name == "kin_energy_on_ui": - on_kin_energy_unit_change() - - -@state.change("kin_energy_unit") -def on_kin_energy_unit_change(**kwargs) -> None: - if state.kin_energy_on_ui != 0: - InputFunctions.update_kin_energy_sim_value() - - -# ----------------------------------------------------------------------------- -# Content -# ----------------------------------------------------------------------------- - class InputParameters: """ User-Input section for beam properties. """ + @state.change("kin_energy_unit") + def on_kin_energy_unit_change(**kwargs) -> None: + if state.kin_energy_on_ui != 0: + InputFunctions.update_kin_energy_sim_value() + def card(self): """ Creates UI content for beam properties. diff --git a/src/python/impactx/dashboard/Input/shared.py b/src/python/impactx/dashboard/Input/shared.py new file mode 100644 index 000000000..5165fbafe --- /dev/null +++ b/src/python/impactx/dashboard/Input/shared.py @@ -0,0 +1,44 @@ +from .. import setup_server +from ..Input.inputParameters.inputMain import InputParameters +from . import DashboardDefaults, generalFunctions + +server, state, ctrl = setup_server() + + +input_parameters_defaults = list(DashboardDefaults.INPUT_PARAMETERS.keys()) +space_charge_defaults = list(DashboardDefaults.CSR.keys()) +INPUT_DEFAULTS = input_parameters_defaults + space_charge_defaults + + +class SharedUtilities: + @staticmethod + @state.change(*INPUT_DEFAULTS) + def on_input_state_change(**_): + state_changes = state.modified_keys & set(INPUT_DEFAULTS) + for state_name in state_changes: + if type(state[state_name]) is str: + print( + f"{state_name} = {state[state_name]} and type: {type(state[state_name])}" + ) + value = getattr(state, state_name) + desired_type = DashboardDefaults.TYPES.get(state_name, None) + validation_name = f"{state_name}_error_message" + conditions = DashboardDefaults.VALIDATION_CONDITION.get( + state_name, None + ) + + validation_result = generalFunctions.validate_against( + value, desired_type, conditions + ) + setattr(state, validation_name, validation_result) + generalFunctions.update_simulation_validation_status() + + if validation_result == []: + converted_value = generalFunctions.convert_to_correct_type( + value, desired_type + ) + + if getattr(state, state_name) != converted_value: + setattr(state, state_name, converted_value) + if state_name == "kin_energy_on_ui": + InputParameters.on_kin_energy_unit_change() diff --git a/src/python/impactx/dashboard/__main__.py b/src/python/impactx/dashboard/__main__.py index ba172c8f3..b31b89358 100644 --- a/src/python/impactx/dashboard/__main__.py +++ b/src/python/impactx/dashboard/__main__.py @@ -28,9 +28,9 @@ server, state, ctrl = setup_server() -# ----------------------------------------------------------------------------- -# Router Views -# ----------------------------------------------------------------------------- +from .Input.shared import SharedUtilities + +shared_utilities = SharedUtilities() inputParameters = InputParameters()