diff --git a/src/python/impactx/dashboard/Analyze/analyzeFunctions.py b/src/python/impactx/dashboard/Analyze/analyzeFunctions.py index 66250768a..3c843b2c2 100644 --- a/src/python/impactx/dashboard/Analyze/analyzeFunctions.py +++ b/src/python/impactx/dashboard/Analyze/analyzeFunctions.py @@ -97,54 +97,41 @@ def filter_data(allData, selected_headers): filtered_row[key] = value filtered_data.append(filtered_row) return filtered_data - - # ----------------------------------------------------------------------------- + + # ----------------------------------------------------------------------------- # Function to print simulation output in terminal view # ----------------------------------------------------------------------------- + @staticmethod - async def outputTerminal (simulation_function_name): + def outputTerminal(): """ Function to print out simulation results in terminal view. (Not working as intended, 8/4/24) """ - ctrl.terminal_println(f"Running {simulation_function_name}...") - ctrl.terminal_println( - f"npart: {state.npart}\nkin_energy_MeV: {state.kin_energy_MeV}" - ) + ctrl.terminal_println(f"Running...") - # Define the command to run based on the simulation function name - if simulation_function_name == "run_simulation": - command = [ - "python", - "-c", - "from Analyze.plot_PhaseSpaceProjections.phaseSpace import run_simulation; run_simulation()", - ] - elif simulation_function_name == "run_optimize_triplet": - command = [ - "python", - "-c", - "from Analyze.plot_PhaseSpaceProjections.phaseSpace import run_optimize_triplet; run_optimize_triplet()", - ] - else: - ctrl.terminal_println( - f"Unknown simulation function: {simulation_function_name}" - ) - return + command = [ + "python", + "-m", + "impactx.dashboard.Analyze.plot_PhaseSpaceProjections.phaseSpace", + "run_simulation", + ] # Run the specified simulation function as a separate process - process = await asyncio.create_subprocess_exec( - *command, + process = subprocess.Popen( + command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, # Capture errors to the same stream as output + universal_newlines=True, # Return output as strings instead of bytes ) # Read output from the process and print it to the xterm widget while True: - output = await process.stdout.readline() - if output == b"" and await process.wait() is not None: + output = process.stdout.readline() + if output == "" and process.poll() is not None: break if output: - ctrl.terminal_println(output.decode().strip()) + ctrl.terminal_println(output.strip()) - ctrl.terminal_println(f"{simulation_function_name} complete.") + ctrl.terminal_println("complete.") diff --git a/src/python/impactx/dashboard/Input/latticeConfiguration/latticeMain.py b/src/python/impactx/dashboard/Input/latticeConfiguration/latticeMain.py index c4909b0ee..57aec2293 100644 --- a/src/python/impactx/dashboard/Input/latticeConfiguration/latticeMain.py +++ b/src/python/impactx/dashboard/Input/latticeConfiguration/latticeMain.py @@ -114,6 +114,7 @@ def parameter_input_checker_for_lattice(latticeElement): return parameter_input + def save_lattice_elements(): """ Writes user input for lattice element parameters parameters in suitable format for simulation code. diff --git a/src/python/impactx/dashboard/Toolbar/toolbarMain.py b/src/python/impactx/dashboard/Toolbar/toolbarMain.py index 68f83a079..e6fe1c4b3 100644 --- a/src/python/impactx/dashboard/Toolbar/toolbarMain.py +++ b/src/python/impactx/dashboard/Toolbar/toolbarMain.py @@ -2,7 +2,8 @@ from ..Input.trameFunctions import TrameFunctions from .exportTemplate import retrieve_state_content - +# from ..Analyze.plot_PhaseSpaceProjections.phaseSpace import outputTerminal +from ..Analyze.analyzeFunctions import AnalyzeFunctions # ----------------------------------------------------------------------------- # Trame setup # ----------------------------------------------------------------------------- @@ -103,8 +104,10 @@ def file_upload(): ) def run_simulation(): - ctrl.terminal_println("Running simulation...") - ctrl.terminal_println("Simulation complete.") + # ctrl.terminal_println("Running simulation...") + # ctrl.terminal_println("Simulation complete.") + AnalyzeFunctions.outputTerminal() + @staticmethod def kill_button(): diff --git a/src/python/impactx/dashboard/__main__.py b/src/python/impactx/dashboard/__main__.py index b30c4fddc..417f7883b 100644 --- a/src/python/impactx/dashboard/__main__.py +++ b/src/python/impactx/dashboard/__main__.py @@ -81,8 +81,8 @@ def application(): Toolbars.input_toolbar() with vuetify.Template(v_if="$route.path == '/Analyze'"): Toolbars.analyze_toolbar() - # with vuetify.Template(v_if="$route.path == '/Run'"): - # Toolbars.run_toolbar() + with vuetify.Template(v_if="$route.path == '/Run'"): + Toolbars.run_toolbar() with layout.drawer as drawer: drawer.width = 200 @@ -90,14 +90,14 @@ def application(): vuetify.VSubheader("Simulation") TrameFunctions.create_route("Input", "mdi-file-edit") # TrameFunctions.create_route("Optimize", "mdi-trending-up") - # TrameFunctions.create_route("Run", "mdi-play") + TrameFunctions.create_route("Run", "mdi-play") TrameFunctions.create_route("Analyze", "mdi-chart-box-multiple") with layout.content: router.RouterView() - # with xterm.XTerm(v_if="$route.path == '/Run'") as term: - # ctrl.clear = term.clear - # ctrl.terminal_println = term.writeln + with xterm.XTerm(v_if="$route.path == '/Run'") as term: + ctrl.clear = term.clear + ctrl.terminal_println = term.writeln return layout