source: sasview/src/sas/qtgui/Calculators/SlitSizeCalculator.py @ fa05c6c1

ESS_GUIESS_GUI_DocsESS_GUI_batch_fittingESS_GUI_bumps_abstractionESS_GUI_iss1116ESS_GUI_iss879ESS_GUI_iss959ESS_GUI_openclESS_GUI_orderingESS_GUI_sync_sascalc
Last change on this file since fa05c6c1 was fa05c6c1, checked in by Piotr Rozyczko <rozyczko@…>, 6 years ago

Minor stability fixes for some calculators

  • Property mode set to 100644
File size: 4.2 KB
RevLine 
[ab9984e]1"""
2Slit Size Calculator Panel
3"""
4import os
5import sys
[fbfc488]6import logging
[ab9984e]7
[4992ff2]8from PyQt5 import QtCore
9from PyQt5 import QtGui
10from PyQt5 import QtWidgets
[cd2cc745]11
12from sas.qtgui.UI import main_resources_rc
[b0c5e8c]13import sas.qtgui.Utilities.GuiUtils as GuiUtils
[cd2cc745]14
[b3e8629]15from .UI.SlitSizeCalculator import Ui_SlitSizeCalculator
[253e7170]16from sas.sascalc.dataloader.loader import Loader
[d1fb22ee]17from sas.sascalc.calculator.slit_length_calculator import SlitlengthCalculator
[253e7170]18
[d1fb22ee]19
[4992ff2]20class SlitSizeCalculator(QtWidgets.QDialog, Ui_SlitSizeCalculator):
[debf5c3]21    """
22    Provides the slit length calculator GUI.
23    """
[0532d7c1]24    def __init__(self, parent=None):
[d1fb22ee]25        super(SlitSizeCalculator, self).__init__()
26        self.setupUi(self)
27
28        self.setWindowTitle("Slit Size Calculator")
29        self._parent = parent
30
31        self.thickness = SlitlengthCalculator()
32
33        # signals
34        self.helpButton.clicked.connect(self.onHelp)
35        self.browseButton.clicked.connect(self.onBrowse)
36        self.closeButton.clicked.connect(self.onClose)
37
38        # no reason to have this widget resizable
39        self.setFixedSize(self.minimumSizeHint())
40
[0532d7c1]41
[d1fb22ee]42    def onHelp(self):
43        """
[debf5c3]44        Bring up the Slit Size Calculator calculator Documentation whenever
[d1fb22ee]45        the HELP button is clicked.
46        Calls DocumentationWindow with the path of the location within the
47        documentation tree (after /doc/ ....".
48        """
[aed0532]49        location = "/user/qtgui/Calculators/slit_calculator_help.html"
[e90988c]50        self._parent.showHelp(location)
[d1fb22ee]51
52    def onBrowse(self):
53        """
[debf5c3]54        Browse the file and calculate slit lenght upon loading
[d1fb22ee]55        """
[253e7170]56        path_str = self.chooseFile()
[d1fb22ee]57        if not path_str:
58            return
[253e7170]59        loader = Loader()
[fbfc488]60        try:
[53c771e]61            data = loader.load(path_str)
62            data = data[0]
[fbfc488]63        # Can return multiple exceptions - gather them all under one umbrella and complain
64        except Exception as ex:
65            logging.error(ex)
66            return
[d1fb22ee]67
[0532d7c1]68        self.data_file.setText(os.path.basename(path_str))
69        self.calculateSlitSize(data)
[d1fb22ee]70
[253e7170]71    def chooseFile(self):
[d1fb22ee]72        """
73        Shows the Open file dialog and returns the chosen path(s)
74        """
75
76        # Location is automatically saved - no need to keep track of the last dir
77        # But only with Qt built-in dialog (non-platform native)
[4992ff2]78        path = QtWidgets.QFileDialog.getOpenFileName(self, "Choose a file", "",
[b3e8629]79                                                 "SAXSess 1D data (*.txt *.TXT *.dat *.DAT)",
[4992ff2]80                                                 None,
[fbfc488]81                                                 QtWidgets.QFileDialog.DontUseNativeDialog)[0]
[253e7170]82        return path
[d1fb22ee]83
84    def onClose(self):
85        """
86        close the window containing this panel
87        """
88        self.close()
[a8ec5b1]89
[886d2f2c]90    def clearResults(self):
91        """
92        Clear the content of output LineEdits
93        """
94        self.slit_length_out.setText("ERROR!")
95        self.unit_out.clear()
96
[0532d7c1]97    def calculateSlitSize(self, data=None):
[a8ec5b1]98        """
[debf5c3]99        Computes slit lenght from given 1D data
[a8ec5b1]100        """
[253e7170]101        if data is None:
[886d2f2c]102            self.clearResults()
[253e7170]103            msg = "ERROR: Data hasn't been loaded correctly"
[fbfc488]104            logging.error(msg)
105            return
[253e7170]106
[debf5c3]107        if data.__class__.__name__ == 'Data2D':
[886d2f2c]108            self.clearResults()
[a8ec5b1]109            msg = "Slit Length cannot be computed for 2D Data"
[fbfc488]110            logging.error(msg)
111            return
[253e7170]112
[a8ec5b1]113        #compute the slit size
114        try:
[ab9984e]115            xdata = data.x
116            ydata = data.y
[fa05c6c1]117            if xdata == [] or xdata is None or ydata == [] or ydata is None:
[ab9984e]118                msg = "The current data is empty please check x and y"
[fbfc488]119                logging.error(msg)
120                return
[ab9984e]121            slit_length_calculator = SlitlengthCalculator()
122            slit_length_calculator.set_data(x=xdata, y=ydata)
123            slit_length = slit_length_calculator.calculate_slit_length()
[a8ec5b1]124        except:
[886d2f2c]125            self.clearResults()
[b3e8629]126            msg = "Slit Size Calculator: %s" % (sys.exc_info()[1])
[fbfc488]127            logging.error(msg)
128            return
[253e7170]129
[0532d7c1]130        slit_length_str = "{:.5f}".format(slit_length)
131        self.slit_length_out.setText(slit_length_str)
[debf5c3]132
133        #Display unit, which most likely needs to be 1/Ang but needs to be confirmed
[0532d7c1]134        self.unit_out.setText("[Unknown]")
[a8ec5b1]135
Note: See TracBrowser for help on using the repository browser.