Source code for sas.qtgui.Calculators.SlitSizeCalculator

"""
Slit Size Calculator Panel
"""
import os
import sys
import logging

from PyQt5 import QtCore
from PyQt5 import QtGui
from PyQt5 import QtWidgets

from sas.qtgui.UI import main_resources_rc
import sas.qtgui.Utilities.GuiUtils as GuiUtils

from .UI.SlitSizeCalculator import Ui_SlitSizeCalculator
from sas.sascalc.dataloader.loader import Loader
from sas.sascalc.calculator.slit_length_calculator import SlitlengthCalculator


[docs]class SlitSizeCalculator(QtWidgets.QDialog, Ui_SlitSizeCalculator): """ Provides the slit length calculator GUI. """
[docs] def __init__(self, parent=None): super(SlitSizeCalculator, self).__init__() self.setupUi(self) # disable the context help icon self.setWindowFlags(self.windowFlags() & ~QtCore.Qt.WindowContextHelpButtonHint) self.setWindowTitle("Slit Size Calculator") self._parent = parent self.thickness = SlitlengthCalculator() # signals self.helpButton.clicked.connect(self.onHelp) self.browseButton.clicked.connect(self.onBrowse) self.closeButton.clicked.connect(self.onClose) # no reason to have this widget resizable self.setFixedSize(self.minimumSizeHint())
[docs] def onHelp(self): """ Bring up the Slit Size Calculator calculator Documentation whenever the HELP button is clicked. Calls DocumentationWindow with the path of the location within the documentation tree (after /doc/ ....". """ location = "/user/qtgui/Calculators/slit_calculator_help.html" self._parent.showHelp(location)
[docs] def onBrowse(self): """ Browse the file and calculate slit lenght upon loading """ path_str = self.chooseFile() if not path_str: return loader = Loader() try: data = loader.load(path_str) data = data[0] # Can return multiple exceptions - gather them all under one umbrella and complain except Exception as ex: logging.error(ex) return self.data_file.setText(os.path.basename(path_str)) self.calculateSlitSize(data)
[docs] def chooseFile(self): """ Shows the Open file dialog and returns the chosen path(s) """ # Location is automatically saved - no need to keep track of the last dir # But only with Qt built-in dialog (non-platform native) path = QtWidgets.QFileDialog.getOpenFileName(self, "Choose a file", "", "SAXSess 1D data (*.txt *.TXT *.dat *.DAT)", None, QtWidgets.QFileDialog.DontUseNativeDialog)[0] return path
[docs] def onClose(self): """ close the window containing this panel """ self.close()
[docs] def clearResults(self): """ Clear the content of output LineEdits """ self.slit_length_out.setText("ERROR!") self.unit_out.clear()
[docs] def calculateSlitSize(self, data=None): """ Computes slit lenght from given 1D data """ if data is None: self.clearResults() msg = "ERROR: Data hasn't been loaded correctly" logging.error(msg) return if data.__class__.__name__ == 'Data2D': self.clearResults() msg = "Slit Length cannot be computed for 2D Data" logging.error(msg) return #compute the slit size try: xdata = data.x ydata = data.y if xdata == [] or xdata is None or ydata == [] or ydata is None: msg = "The current data is empty please check x and y" logging.error(msg) return slit_length_calculator = SlitlengthCalculator() slit_length_calculator.set_data(x=xdata, y=ydata) slit_length = slit_length_calculator.calculate_slit_length() except: self.clearResults() msg = "Slit Size Calculator: %s" % (sys.exc_info()[1]) logging.error(msg) return slit_length_str = "{:.5f}".format(slit_length) self.slit_length_out.setText(slit_length_str) #Display unit, which most likely needs to be 1/Ang but needs to be confirmed self.unit_out.setText("[Unknown]")