Loading trame/air-sans/air_sans/app/utilities/file_load.py +1 −0 Original line number Diff line number Diff line Loading @@ -21,4 +21,5 @@ def load_mantid(file_path): for col in range(count): y_data = ws.readY(col) array[:,col] = y_data array.tofile("heatmap_gpsans.np", sep='', format='%s') return array trame/air-sans/air_sans/gpsans/core.py +38 −20 Original line number Diff line number Diff line import os import numpy import logging import time import asyncio from trame.app import get_server from trame.decorators import TrameApp, change from trame.decorators import TrameApp, change, controller from trame.ui.vuetify import SinglePageWithDrawerLayout from trame.widgets import vuetify, plotly from .ui import ( Directory, FileSelector, FigureControl, ) from .visualization import Visualization from .utilities import galaxy from .visualization import Visualization logger = logging.getLogger(__name__) Loading Loading @@ -47,7 +42,7 @@ class GpSans: self.state.staff_file = None self.server.state.ipts = None self.state.data = None self.ui = self._build_ui() self.ui = self.update_ui() @property def state(self): Loading @@ -57,26 +52,41 @@ class GpSans: def ctrl(self): return self.server.controller async def run_in_backgorund(self,user_file,staff_file,ipts): data=None error=None await asyncio.sleep(1) try: data = galaxy.run_gpsans(user_file, staff_file, ipts) except Exception as e: error = f"Cannot execute Galaxy job: {e}" self.server.state.galaxy_running = False self.server.state.figure_ready = True with self.server.state: self._viz.create_gpsans_fig(data, error) def run(self): user_file = self.server.state.user_file staff_file = self.server.state.staff_file ipts = self.server.state.ipts data = galaxy.run_gpsans(user_file,staff_file,ipts) self._viz.create_gpsans_fig(data) self.server.state.figure_ready = True self.server.state.galaxy_running = True self.server.state.figure_ready = False asyncio.create_task(self.run_in_backgorund(user_file,staff_file,ipts)) def _build_ui(self): def update_ui(self): self.state.trame__title = "gp-sans" with SinglePageWithDrawerLayout(self.server) as layout: with layout.icon: vuetify.VIcon("mdi-bullseye") with layout.title as title: title.set_text("GP-SANS") title.set_text("GP-SANS Data Reduction - Demo") title.classes = "font-weight-medium ml-0 pl-0" with layout.drawer as drawer: drawer.width = 350 drawer.classes = "ml-0 pl-0" vuetify.VFileInput( label="User Input File", v_model=("user_file", None), Loading @@ -89,17 +99,25 @@ class GpSans: label="IPTS Number", v_model=("ipts", None), ) vuetify.VBtn("Run in Galaxy",icon=False, click=self.run) vuetify.VBtn("Run in Galaxy", icon=False, disabled = ("galaxy_running", False), click=self.run) with layout.content: with vuetify.VContainer( fluid=True, classes="pa-0 fill-height", classes="pa-0 fill-height text-center", ): self.ctrl.update_d11 = plotly.Figure( display_mode_bar=("false",), v_show=("figure_ready", False), ).update with vuetify.VContainer( ): vuetify.VProgressCircular( v_show=("galaxy_running", False), indeterminate=True, ) return layout trame/air-sans/air_sans/gpsans/visualization.py +22 −9 Original line number Diff line number Diff line Loading @@ -15,24 +15,37 @@ class Visualization: def __init__(self, server): self.server = server def create_gpsans_fig(self, data): data = BytesIO(data) def create_gpsans_fig(self, data, error): if error: fig = go.Figure(data=None) fig.add_annotation( text=error, showarrow=False, xref="paper", yref="paper", x=0.5, y=0.5, font=dict(size=16), ) fig.update_xaxes(showgrid=False, zeroline=False, showticklabels=False) fig.update_yaxes(showgrid=False, zeroline=False, showticklabels=False) df = pd.read_csv(data, header=None, delim_whitespace=True, skiprows=4) values_df = df[[0, 1, 2]] values_df.replace('NAN', np.nan, inplace=True) self.server.controller.update_d11(fig) return fig x_values = values_df[0] y_values = values_df[1] z_values = values_df[2] data = BytesIO(data) # Replace 'NAN' values with NumPy NaN df = pd.read_csv(data, header=None, delim_whitespace=True, skiprows=4) x_values = df[0] y_values = df[1] z_values = df[2] # Create a heatmap using Plotly objects heatmap = go.Heatmap( x=x_values, y=y_values, z=z_values, zsmooth="best", colorscale='Viridis', # You can choose another colorscale colorbar=dict(title='Value'), ) Loading Loading
trame/air-sans/air_sans/app/utilities/file_load.py +1 −0 Original line number Diff line number Diff line Loading @@ -21,4 +21,5 @@ def load_mantid(file_path): for col in range(count): y_data = ws.readY(col) array[:,col] = y_data array.tofile("heatmap_gpsans.np", sep='', format='%s') return array
trame/air-sans/air_sans/gpsans/core.py +38 −20 Original line number Diff line number Diff line import os import numpy import logging import time import asyncio from trame.app import get_server from trame.decorators import TrameApp, change from trame.decorators import TrameApp, change, controller from trame.ui.vuetify import SinglePageWithDrawerLayout from trame.widgets import vuetify, plotly from .ui import ( Directory, FileSelector, FigureControl, ) from .visualization import Visualization from .utilities import galaxy from .visualization import Visualization logger = logging.getLogger(__name__) Loading Loading @@ -47,7 +42,7 @@ class GpSans: self.state.staff_file = None self.server.state.ipts = None self.state.data = None self.ui = self._build_ui() self.ui = self.update_ui() @property def state(self): Loading @@ -57,26 +52,41 @@ class GpSans: def ctrl(self): return self.server.controller async def run_in_backgorund(self,user_file,staff_file,ipts): data=None error=None await asyncio.sleep(1) try: data = galaxy.run_gpsans(user_file, staff_file, ipts) except Exception as e: error = f"Cannot execute Galaxy job: {e}" self.server.state.galaxy_running = False self.server.state.figure_ready = True with self.server.state: self._viz.create_gpsans_fig(data, error) def run(self): user_file = self.server.state.user_file staff_file = self.server.state.staff_file ipts = self.server.state.ipts data = galaxy.run_gpsans(user_file,staff_file,ipts) self._viz.create_gpsans_fig(data) self.server.state.figure_ready = True self.server.state.galaxy_running = True self.server.state.figure_ready = False asyncio.create_task(self.run_in_backgorund(user_file,staff_file,ipts)) def _build_ui(self): def update_ui(self): self.state.trame__title = "gp-sans" with SinglePageWithDrawerLayout(self.server) as layout: with layout.icon: vuetify.VIcon("mdi-bullseye") with layout.title as title: title.set_text("GP-SANS") title.set_text("GP-SANS Data Reduction - Demo") title.classes = "font-weight-medium ml-0 pl-0" with layout.drawer as drawer: drawer.width = 350 drawer.classes = "ml-0 pl-0" vuetify.VFileInput( label="User Input File", v_model=("user_file", None), Loading @@ -89,17 +99,25 @@ class GpSans: label="IPTS Number", v_model=("ipts", None), ) vuetify.VBtn("Run in Galaxy",icon=False, click=self.run) vuetify.VBtn("Run in Galaxy", icon=False, disabled = ("galaxy_running", False), click=self.run) with layout.content: with vuetify.VContainer( fluid=True, classes="pa-0 fill-height", classes="pa-0 fill-height text-center", ): self.ctrl.update_d11 = plotly.Figure( display_mode_bar=("false",), v_show=("figure_ready", False), ).update with vuetify.VContainer( ): vuetify.VProgressCircular( v_show=("galaxy_running", False), indeterminate=True, ) return layout
trame/air-sans/air_sans/gpsans/visualization.py +22 −9 Original line number Diff line number Diff line Loading @@ -15,24 +15,37 @@ class Visualization: def __init__(self, server): self.server = server def create_gpsans_fig(self, data): data = BytesIO(data) def create_gpsans_fig(self, data, error): if error: fig = go.Figure(data=None) fig.add_annotation( text=error, showarrow=False, xref="paper", yref="paper", x=0.5, y=0.5, font=dict(size=16), ) fig.update_xaxes(showgrid=False, zeroline=False, showticklabels=False) fig.update_yaxes(showgrid=False, zeroline=False, showticklabels=False) df = pd.read_csv(data, header=None, delim_whitespace=True, skiprows=4) values_df = df[[0, 1, 2]] values_df.replace('NAN', np.nan, inplace=True) self.server.controller.update_d11(fig) return fig x_values = values_df[0] y_values = values_df[1] z_values = values_df[2] data = BytesIO(data) # Replace 'NAN' values with NumPy NaN df = pd.read_csv(data, header=None, delim_whitespace=True, skiprows=4) x_values = df[0] y_values = df[1] z_values = df[2] # Create a heatmap using Plotly objects heatmap = go.Heatmap( x=x_values, y=y_values, z=z_values, zsmooth="best", colorscale='Viridis', # You can choose another colorscale colorbar=dict(title='Value'), ) Loading