Commit 2e682f8f authored by Yakubov, Sergey's avatar Yakubov, Sergey
Browse files

refactor gp-sans app

parent 2e6e7265
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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
+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__)
@@ -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):
@@ -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),
@@ -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
+22 −9
Original line number Diff line number Diff line
@@ -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'),
        )