Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/python/impactx/dashboard/Input/distribution/ui.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

from ... import ctrl, state, vuetify
from ...Input.components import CardBase, CardComponents, InputComponents
from ...Toolbar.file_imports.ui_populator import _apply_distribution_inputs
from .. import DashboardDefaults
from ..defaults_helper import InputDefaultsHelper
from ..utils import GeneralFunctions
Expand Down Expand Up @@ -62,6 +63,7 @@ def populate_distribution_parameters():

state.selected_distribution_parameters = params
errors_tracker.update_simulation_validation_status()
_apply_distribution_inputs()
return params


Expand Down
22 changes: 17 additions & 5 deletions src/python/impactx/dashboard/Toolbar/file_imports/ui_populator.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,19 @@ def on_import_file_change(import_file, **kwargs):
state.importing_file = False


def _apply_distribution_inputs():
"""
Push any cached distribution parameters into the UI.
"""

imported_params = getattr(state, "imported_distribution_parameters", None)
if imported_params:
for param_name, raw_value in imported_params.items():
if param_name in state.selected_distribution_parameters:
ctrl.update_distribution_parameter(param_name, raw_value)
state.imported_distribution_parameters = None


def populate_impactx_simulation_file_to_ui(file) -> None:
"""
Auto fills the dashboard with parsed inputs.
Expand All @@ -45,22 +58,21 @@ def populate_impactx_simulation_file_to_ui(file) -> None:
if hasattr(state, input_name) and input_name not in non_state_inputs:
setattr(state, input_name, input_value)

_populate_distribution_inputs_to_ui(imported_distribution_data)
_prepare_distribution_update(imported_distribution_data)
_populate_lattice_config_to_ui(imported_lattice_data)
_populate_lattice_config_variables_to_ui(parsed_variables)


@staticmethod
def _populate_distribution_inputs_to_ui(parsed_data):
def _prepare_distribution_update(parsed_data):
# the below two calls do not call state.change("distribution") or state.change("distribution_type")
# since they are both part of a nested state (ie. distribution_type=["Twiss","Quadratic"]).
parameters = parsed_data["parameters"]
state.imported_distribution_parameters = parameters.copy() if parameters else None
state.distribution = parsed_data["name"]
state.distribution_type = parsed_data["type"]
state.flush() # force calls state.change("distribution") and state.change("distribution_type")

for distr_param_name, distr_param_value in parsed_data["parameters"].items():
ctrl.update_distribution_parameter(distr_param_name, distr_param_value)


@staticmethod
def _populate_lattice_config_to_ui(parsed_data):
Expand Down
6 changes: 6 additions & 0 deletions src/python/impactx/dashboard/start.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
License: BSD-3-Clause-LBNL
"""

import asyncio

from . import server, state
from .app import application
from .Input.defaults import DashboardDefaults
Expand Down Expand Up @@ -42,6 +44,10 @@ class DashboardApp:

def start(self):
setup_dashboard()
try:
asyncio.get_running_loop()
except RuntimeError:
asyncio.set_event_loop(asyncio.new_event_loop())
server.start()
return 0

Expand Down
Loading