Commit c0482e84 authored by Yakubov, Sergey's avatar Yakubov, Sergey
Browse files

add gpsans and vtk

parent 7da3559c
Loading
Loading
Loading
Loading
+46 −82
Original line number Diff line number Diff line
@@ -5,7 +5,7 @@ import logging
from trame.app import get_server
from trame.decorators import TrameApp, change
from trame.ui.vuetify import SinglePageWithDrawerLayout
from trame.widgets import vuetify, plotly
from trame.widgets import vuetify, vtk

from .ui import (
    DeviceSelector,
@@ -125,10 +125,22 @@ class AirSans:
                        fluid=True,
                        classes="pa-0 fill-height",
                ):
                    self.ctrl.update_d11 = plotly.Figure(
                        display_mode_bar=("false",),
                        v_show=("figure_ready", False),
                    ).update
                    with vuetify.VRow(classes="fill-height pa-0"):
                        with vuetify.VCol(cols=3, classes="pa-0"):
                            view = vtk.VtkRemoteView(
                                self._viz.left_render_window, interactive_ratio=1
                            )
                            self._viz.set_left_view(view)
                        with vuetify.VCol(cols=6, classes="pa-0"):
                            view = vtk.VtkRemoteView(
                                self._viz.center_render_window, interactive_ratio=1
                            )
                            self._viz.set_center_view(view)
                        with vuetify.VCol(cols=3, classes="pa-0"):
                            view = vtk.VtkRemoteView(
                                self._viz.right_render_window, interactive_ratio=1
                            )
                            self._viz.set_right_view(view)

            return layout

@@ -162,92 +174,44 @@ class AirSans:
        state.file = file
        data = galaxy.load_mantid(state.file)

        # pixel_y = data["/entry0/D11/Detector 1/pixel_size_y"].nxdata[0].item()
        # pixel_x = data["/entry0/D11/Detector 1/pixel_size_x"].nxdata[0].item()
        # state.pixel_ratio = pixel_y / pixel_x
        # detector1 = data["/entry0/D11/Detector 1/data"]
        # detector1_2d = detector1[:, :, 0]
        ny, nx = data.shape
        state.pixel_ratio = 1
        state.center_ny = ny
        state.center_nx = nx
        # d1 = numpy.zeros(detector1_2d.shape, dtype=numpy.int32, order="C")
        # for i in range(0, nx - 1):
        #     for j in range(0, ny - 1):
        #         d1[j, i] = detector1_2d[j, i]
        #self._viz.set_center_data(d1.transpose())
        self._viz.set_center_data(data.transpose())

        # detector2 = data["/entry0/D11/Detector 2/data"]
        # detector2_2d = detector2[:, :, 0]
        # ny, nx = detector2_2d.shape
        # state.left_ny = ny
        # state.left_nx = nx
        # d2 = numpy.zeros(detector2_2d.shape, dtype=numpy.int32, order="C")
        # for i in range(0, nx - 1):
        #     for j in range(0, ny - 1):
        #         d2[j, i] = detector2_2d[j, i]
        # self._viz.set_left_data(d2.transpose())
        #
        # detector3 = data["/entry0/D11/Detector 3/data"]
        # detector3_2d = detector3[:, :, 0]
        # ny, nx = detector3_2d.shape
        # state.right_ny = ny
        # state.right_nx = nx
        # d3 = numpy.zeros(detector3_2d.shape, dtype=numpy.int32, order="C")
        # for i in range(0, nx - 1):
        #     for j in range(0, ny - 1):
        #         d3[j, i] = detector3_2d[j, i]
        # self._viz.set_right_data(d3.transpose())

        self._viz.create_gpsans_fig()
        self._viz.set_center_data(data.transpose(),1,1)
        state.figure_ready = True

    def selected_file_d11(self, file):
        state = self.server.state
        state.file = file
        data = galaxy.load(state.file)
        pixel_y = 1.0
        pixel_x = 1.0
        # print(pixel_y / pixel_x, pixel_x, type(pixel_x), pixel_y, type(pixel_y))
        pixel_y = data["/entry0/D11/Detector 1/pixel_size_y"].nxdata[0].item()
        pixel_x = data["/entry0/D11/Detector 1/pixel_size_x"].nxdata[0].item()
        # print(pixel_y / pixel_x, pixel_x, type(pixel_x), pixel_y, type(pixel_y))
        self._selected_device.read_file(self._active_directory, state.file)
        pixel_x = self._selected_device.pixel1_x
        pixel_y = self._selected_device.pixel1_y
        state.pixel_ratio = pixel_y / pixel_x
        # print(state.pixel_ratio)

        detector1 = data["/entry0/D11/Detector 1/data"]
        detector1_2d = detector1[:, :, 0]
        ny, nx = detector1_2d.shape
        state.center_ny = ny
        state.center_nx = nx
        d1 = numpy.zeros(detector1_2d.shape, dtype=numpy.int32, order="C")
        for i in range(0, nx - 1):
            for j in range(0, ny - 1):
                d1[j, i] = detector1_2d[j, i]
        self._viz.set_center_data(d1.transpose())

        detector2 = data["/entry0/D11/Detector 2/data"]
        detector2_2d = detector2[:, :, 0]
        ny, nx = detector2_2d.shape
        state.left_ny = ny
        state.left_nx = nx
        d2 = numpy.zeros(detector2_2d.shape, dtype=numpy.int32, order="C")
        for i in range(0, nx - 1):
            for j in range(0, ny - 1):
                d2[j, i] = detector2_2d[j, i]
        self._viz.set_left_data(d2.transpose())

        detector3 = data["/entry0/D11/Detector 3/data"]
        detector3_2d = detector3[:, :, 0]
        ny, nx = detector3_2d.shape
        state.right_ny = ny
        state.right_nx = nx
        d3 = numpy.zeros(detector3_2d.shape, dtype=numpy.int32, order="C")
        for i in range(0, nx - 1):
            for j in range(0, ny - 1):
                d3[j, i] = detector3_2d[j, i]
        self._viz.set_right_data(d3.transpose())
        state.center_ny = self._selected_device.ny1
        state.center_nx = self._selected_device.nx1
        self._viz.set_center_data(
            self._selected_device.det1_data,
            self._selected_device.pixel1_x,
            self._selected_device.pixel1_y,
        )

        state.left_ny = self._selected_device.ny2
        state.left_nx = self._selected_device.nx2
        self._viz.set_left_data(
            self._selected_device.det2_data,
            self._selected_device.pixel2_x,
            self._selected_device.pixel2_y,
        )

        state.right_ny = self._selected_device.ny3
        state.right_nx = self._selected_device.nx3
        self._viz.set_right_data(
            self._selected_device.det3_data,
            self._selected_device.pixel3_x,
            self._selected_device.pixel3_y,
        )

        self._viz.create_d11_fig()
        state.figure_ready = True
+372 −0
Original line number Diff line number Diff line
import numpy as np

import nexusformat.nexus as nexus

from pathlib import Path
from . import mat_files as mf
from ..utilities import galaxy

BASE = Path(__file__).parent

@@ -94,3 +97,372 @@ class D11_Plus:
        self.detector3_efficiency_error = mf.read_efficiency_mat_file_error(
            BASE / "det_efficiency" / "det3_d11_plus.mat"
        )

    def read_file(self, dir, path):
#        self.path = dir + "/" + path
#        root = nexus.nxload(self.path)
        root = galaxy.load(path)
        entry = root.NXentry[0].nxpath
        if entry is None:
            print("Bad file")
            return
        else:
            self.read_parameters(root, entry)

    def read_parameters(self, root, entry):
        # Run
        self.run_number = self.read_value(root, entry, "/run_number")
        self.user = self.read_value(root, entry, "/user/name")
        self.start_time = self.read_value(root, entry, "/start_time")
        self.end_time = self.read_value(root, entry, "/end_time")
        self.duration = self.read_value(root, entry, "/duration")
        self.experiment_identifier = self.read_value(
            root, entry, "/experiment_identifier"
        )
        self.experiment_title = self.read_value(root, entry, "/experiment_title")
        self.sample_description = self.read_value(root, entry, "/sample_description")

        # Detector Distance & Motors
        self.pixel1_y = self.read_value(root, entry, "/D11/Detector 1/pixel_size_y")
        self.pixel1_x = self.read_value(root, entry, "/D11/Detector 1/pixel_size_x")
        # Detector rate
        self.det1_rate = self.read_value(root, entry, "/D11/Detector 1/det1_rate")
        # Detector motors
        self.det1_actual = self.read_value(root, entry, "/D11/Detector 1/det1_actual")
        if self.det1_actual is None:
            self.det1_actual = self.read_value(
                root, entry, "/D11/Detector 1/det_actual"
            )
        self.det1_calc = self.read_value(root, entry, "/D11/Detector 1/det1_calc")
        if self.det1_calc is None:
            self.det1_calc = self.read_value(root, entry, "/D11/Detector 1/det_calc")
        self.dan1_actual = self.read_value(root, entry, "/D11/Detector 1/dan1_actual")
        if self.dan1_actual is None:
            self.dan1_actual = self.read_value(
                root, entry, "/D11/Detector 1/dan_actual"
            )
        self.dtr1_actual = self.read_value(root, entry, "/D11/Detector 1/dtr1_actual")
        if self.dtr1_actual is None:
            self.dtr1_actual = self.read_value(
                root, entry, "/D11/Detector 1/dtr_actual"
            )
        # BeamStop
        self.bx1_actual = self.read_value(root, entry, "/D11//beamstop/bx1_actual")
        if self.bx1_actual is None:
            self.bx1_actual = self.read_value(root, entry, "/D11//beamstop/bx_actual")
        if self.bx1_actual is None:
            self.bx1_actual = 0.0
        print("/D11//beamstop/bx1_actual", self.bx1_actual)
        self.by1_actual = self.read_value(root, entry, "/D11//beamstop/by1_actual")
        if self.by1_actual is None:
            self.by1_actual = self.read_value(root, entry, "/D11//beamstop/by_actual")
        if self.by1_actual is None:
            self.by1_actual = 0.0
        print("/D11//beamstop/by1_actual", self.by1_actual)

        self.pixel2_y = self.read_value(root, entry, "/D11/Detector 2/pixel_size_y")
        self.pixel2_x = self.read_value(root, entry, "/D11/Detector 2/pixel_size_x")
        # Detector rate
        self.det2_rate = self.read_value(root, entry, "/D11/Detector 2/det2_rate")
        # Detector motors
        self.det2_actual = self.read_value(root, entry, "/D11/Detector 2/det2_actual")
        if self.det2_actual is None:
            self.det2_actual = self.read_value(
                root, entry, "/D11/Detector 2/det_actual"
            )
        self.det2_calc = self.read_value(root, entry, "/D11/Detector 2/det2_calc")
        if self.det2_calc is None:
            self.det2_calc = self.read_value(root, entry, "/D11/Detector 2/det_calc")
        self.dan2_actual = self.read_value(root, entry, "/D11/Detector 2/dan2_actual")
        if self.dan2_actual is None:
            self.dan2_actual = self.read_value(
                root, entry, "/D11/Detector 2/dan_actual"
            )
        self.dtr2_actual = self.read_value(root, entry, "/D11/Detector 2/dtr2_actual")
        if self.dtr2_actual is None:
            self.dtr2_actual = self.read_value(
                root, entry, "/D11/Detector 2/dtr_actual"
            )
        # BeamStop
        self.bx2_actual = self.read_value(root, entry, "/D11//beamstop/bx2_actual")
        if self.bx2_actual is None:
            self.bx2_actual = self.read_value(root, entry, "/D11//beamstop/bx_actual")
        if self.bx2_actual is None:
            self.bx2_actual = 0.0
        print("/D11//beamstop/bx2_actual", self.bx2_actual)
        self.by2_actual = self.read_value(root, entry, "/D11//beamstop/by2_actual")
        if self.by2_actual is None:
            self.by2_actual = self.read_value(root, entry, "/D11//beamstop/by_actual")
        if self.by2_actual is None:
            self.by2_actual = 0.0
        print("/D11//beamstop/by2_actual", self.by2_actual)

        self.pixel3_y = self.read_value(root, entry, "/D11/Detector 3/pixel_size_y")
        self.pixel3_x = self.read_value(root, entry, "/D11/Detector 3/pixel_size_x")
        # Detector rate
        self.det3_rate = self.read_value(root, entry, "/D11/Detector 3/det3_rate")
        # Detector motors
        self.det3_actual = self.read_value(root, entry, "/D11/Detector 3/det3_actual")
        if self.det3_actual is None:
            self.det3_actual = self.read_value(
                root, entry, "/D11/Detector 3/det_actual"
            )
        self.det3_calc = self.read_value(root, entry, "/D11/Detector 3/det3_calc")
        if self.det3_calc is None:
            self.det3_calc = self.read_value(root, entry, "/D11/Detector 3/det_calc")
        self.dan3_actual = self.read_value(root, entry, "/D11/Detector 3/dan3_actual")
        if self.dan3_actual is None:
            self.dan3_actual = self.read_value(
                root, entry, "/D11/Detector 3/dan_actual"
            )
        self.dtr3_actual = self.read_value(root, entry, "/D11/Detector 3/dtr3_actual")
        if self.dtr3_actual is None:
            self.dtr3_actual = self.read_value(
                root, entry, "/D11/Detector 3/dtr_actual"
            )
        # BeamStop
        self.bx3_actual = self.read_value(root, entry, "/D11//beamstop/bx3_actual")
        self.bx3_actual = self.read_value(root, entry, "/D11//beamstop/bx3_actual")
        if self.bx3_actual is None:
            self.bx3_actual = self.read_value(root, entry, "/D11//beamstop/bx_actual")
        if self.bx3_actual is None:
            self.bx3_actual = 0.0
        print("/D11//beamstop/bx3_actual", self.bx3_actual)
        self.by3_actual = self.read_value(root, entry, "/D11//beamstop/by3_actual")
        if self.by3_actual is None:
            self.by3_actual = self.read_value(root, entry, "/D11//beamstop/by_actual")
        if self.by3_actual is None:
            self.by3_actual = 0.0
        print("/D11//beamstop/by3_actual", self.by3_actual)

        # Wavelength
        self.wavelength = self.read_value(root, entry, "/D11/selector/wavelength")
        self.wavelength_res = (
            self.read_value(root, entry, "/D11/selector/wavelength_res") / 100
        )
        if self.wavelength_res is None:
            self.wavelength_res = 0.1
        self.rotation_speed = self.read_value(
            root, entry, "/D11/selector/rotation_speed"
        )
        self.seltrs_actual = self.read_value(root, entry, "/D11/selector/seltrs_actual")

        # Attenuator
        self.attenuator_position = self.read_value(
            root, entry, "/D11/attenuator/position"
        )
        if self.attenuator_position is None:
            self.attenuator_position = 0
        self.attenuation_coefficient = self.read_value(
            root, entry, "/D11/attenuator/attenuation_coefficient"
        )
        self.attenuation_value = self.read_value(
            root, entry, "/D11/attenuator/attenuation_value"
        )
        if self.attenuation_value is None:
            self.attenuation_value = [
                self.attenuators[1],
                self.attenuators[2],
                self.attenuators[3],
            ]
        print("/D11/attenuator/attenuation_value", self.attenuation_value)

        # Collimation
        self.collimation_actual_position = self.read_value(
            root, entry, "/D11/collimation/actual_position"
        )
        # Source Size
        temp = self.read_value(root, entry, "/D11/collimation/ap_size")
        if temp is not None:
            self.collimation_ap_size_x = temp[0] / 1000
            self.collimation_ap_size_y = temp[1] / 1000
        else:
            self.collimation_ap_size_x = self.guide_size[0]
            self.collimation_ap_size_y = self.guide_size[1]
        print(
            "/D11/collimation/ap_size",
            self.collimation_ap_size_x,
            self.collimation_ap_size_y,
        )

        # Reactor Power
        self.reactor_power = self.read_value(root, entry, "/reactor_power")

        # Sample
        self.sample_thickness = self.read_value(root, entry, "/sample/thickness")

        # Sample Motors
        self.sample_san_actual = self.read_value(root, entry, "/sample/san_actual")
        self.sample_phi_actual = self.read_value(root, entry, "/sample/phi_actual")
        self.sample_sdi1_actual = self.read_value(root, entry, "/sample/sdi1_actual")
        self.sample_sdi_actual = self.read_value(root, entry, "/sample/sdi_actual")
        self.sample_sdi2_actual = self.read_value(root, entry, "/sample/sdi2_actual")
        self.sample_trs_actual = self.read_value(root, entry, "/sample/trs_actual")
        self.sample_sht_actual = self.read_value(root, entry, "/sample/sht_actual")
        self.sample_str_actual = self.read_value(root, entry, "/sample/str_actual")
        self.sample_changer_value = self.read_value(
            root, entry, "/sample/sample_changer_value"
        )
        self.sample_omega_actual = self.read_value(root, entry, "/sample/omega_actual")
        self.sample_TrMicro_actual = self.read_value(
            root, entry, "/sample/TrMicro_actual"
        )
        self.sample_TrMicro_offset = self.read_value(
            root, entry, "/sample/TrMicro_offset"
        )
        self.sample_TrMicro_requested = self.read_value(
            root, entry, "/sample/TrMicro_requested"
        )

        # Sample environment
        self.sample_temperature = self.read_value(root, entry, "/sample/temperature")
        self.sample_regulation_temperature = self.read_value(
            root, entry, "/sample/regulation_temperature"
        )
        self.sample_setpoint_temperature = self.read_value(
            root, entry, "/sample/setpoint_temperature"
        )
        self.sample_bath1_regulation_temperature = self.read_value(
            root, entry, "/sample/bath1_regulation_temperature"
        )
        self.sample_bath1_setpoint_temperature = self.read_value(
            root, entry, "/sample/bath1_setpoint_temperature"
        )
        self.sample_bath2_regulation_temperature = self.read_value(
            root, entry, "/sample/bath2_regulation_temperature"
        )
        self.sample_bath2_setpoint_temperature = self.read_value(
            root, entry, "/sample/bath2_setpoint_temperature"
        )
        self.sample_bath_selector_actual = self.read_value(
            root, entry, "/sample/bath_selector_actual"
        )
        self.sample_air_temperature = self.read_value(
            root, entry, "/sample/air_temperature"
        )
        self.sample_rack_temperature = self.read_value(
            root, entry, "/sample/rack_temperature"
        )

        # Power Supplies
        self.sample_ps1_current = self.read_value(root, entry, "/sample/ps1_current")
        self.sample_ps1_voltage = self.read_value(root, entry, "/sample/ps1_voltage")
        self.sample_ps2_current = self.read_value(root, entry, "/sample/ps2_current")
        self.sample_ps2_voltage = self.read_value(root, entry, "/sample/ps2_voltage")
        self.sample_ps3_current = self.read_value(root, entry, "/sample/ps3_current")
        self.sample_ps3_voltage = self.read_value(root, entry, "/sample/ps3_voltage")

        # Magnet
        self.sample_field_actual = self.read_value(root, entry, "/sample/field_actual")

        # Shear
        self.sample_shearrate_actual = self.read_value(
            root, entry, "/sample/shearrate_actual"
        )

        # Read Detector Data, Monitor and Time Slices
        self.detector_detsum = self.read_value(root, entry, "/detector/detsum")
        self.detector_detrate = self.read_value(root, entry, "/detector/detrate")

        # Determine Measurement Mode, Single, Kinetic or TOF
        self.mode = self.read_value(root, entry, "/mode")
        if temp is not None:
            self.mode = int(temp)
        else:
            self.mode = 0
        if self.mode == 0:
            self.file_type = "mono"
        elif self.mode == 1:
            self.file_type = "tof"
            tof_params = self.read_value(root, entry, "/monitor1/time_of_flight")
            if tof_params is not None:
                self.tof_width = tof_params[0]
                self.tof_channels = tof_params[1]
                self.tof_delay = tof_params[2]
                self.pickups = self.read_value(root, entry, "/monitor1/nbpickup")
                self.tof_period = (self.tof_width * self.tof_channels) + self.tof_delay
                self.tof_mode = self.read_value(root, entry, "/tof/tof_mode")
                if self.tof_mode is None:
                    self.tof_mode = 0
        elif self.mode == 22:
            self.file_type = "tof"
            tof_params = self.read_value(root, entry, "/monitor1/time_of_flight")
            if tof_params is not None:
                self.tof_width = tof_params[0]
                self.tof_channels = tof_params[1]
                self.tof_delay = tof_params[2]
                self.pickups = self.read_value(root, entry, "/monitor1/nbpickup")
                self.tof_period = (self.tof_width * self.tof_channels) + self.tof_delay
                self.tof_mode = self.read_value(root, entry, "/tof/tof_mode")
                if self.tof_mode is None:
                    self.tof_mode = 0
        elif self.mode == 3:
            self.file_type = "kinetic"
            self.slices = self.read_value(root, entry, "/slices")
            if self.slices is not None:
                # time lapse of the first frame - added to below with subsequent frames
                self.frame_time = self.slices[0] / 2
                self.pickups = self.read_value(root, entry, "/nbrepaint")
        elif self.mode == 4:
            self.file_type = "tof_inelastic"
            tof_params = self.read_value(root, entry, "/monitor1/time_of_flight")
            if tof_params is not None:
                self.tof_width = tof_params[0]
                self.tof_channels = tof_params[1]
                self.tof_delay = tof_params[2]
                self.pickups = self.read_value(root, entry, "/monitor1/nbpickup")
                self.tof_period = (self.tof_width * self.tof_channels) + self.tof_delay
        else:
            self.file_type = "unknown"

        # Detector Distance & Motors

        det = self.read_array(
            root, entry, "/D11/Detector 1/data1", "/D11/Detector 1/data"
        )
        det_size = det.shape
        if len(det_size) < 3:
            det_size[2] = 1
        if self.file_type == "mono":
            det = det.reshape([det_size[2], det_size[0], det_size[1]])
            self.n_frames = det_size[2]
            self.det1_data = det[0, :, :].nxvalue.transpose()
            self.nx1, self.ny1 = self.det1_data.shape
        det = self.read_array(
            root, entry, "/D11/Detector 2/data2", "/D11/Detector 2/data"
        )
        det_size = det.shape
        if len(det_size) < 3:
            det_size[2] = 1
        if self.file_type == "mono":
            det = det.reshape([det_size[2], det_size[0], det_size[1]])
            self.det2_data = det[0, :, :].nxvalue.transpose()
            self.nx2, self.ny2 = self.det2_data.shape
        det = self.read_array(
            root, entry, "/D11/Detector 3/data3", "/D11/Detector 3/data"
        )
        det_size = det.shape
        if len(det_size) < 3:
            det_size[2] = 1
        if self.file_type == "mono":
            det = det.reshape([det_size[2], det_size[0], det_size[1]])
            self.det3_data = det[0, :, :].nxvalue.transpose()
            self.nx3, self.ny3 = self.det3_data.shape

    def read_value(self, root, entry, item):
        try:
            value = root[entry + item]
        except Exception:
            return None
        return value.nxdata[0].item()

    def read_array(self, root, entry, item, fallback_item):
        try:
            value = root[entry + item]
        except Exception:
            try:
                value = root[entry + fallback_item]
            except Exception:
                print("Bad file")
                return None
        return value
+49 −13

File changed.

Preview size limit exceeded, changes collapsed.

+89 −0

File added.

Preview size limit exceeded, changes collapsed.