Ejemplo n.º 1
0
 def loadPredictionSettings(self, file=None):
     if file is None:
         file = self.settingsFile
     predictionSettings = loadSetting(file, 'predictionSettings')
     if not predictionSettings is None:
         if isinstance(predictionSettings, str):
             print(
                 'Please save a new gui state to comply with the new version'
             )
             return
         self.predictionSettings = predictionSettings
Ejemplo n.º 2
0
    def loadGuiSettings(self, file=None):
        if file is None:
            file = self.settingsFile
        guiSettings = loadSetting(file, 'guiSettings')
        boxStates = guiSettings['boxStates']

        if not boxStates is None:
            for box, value in zip(self.boxContainers, boxStates):
                try:
                    if box.state != value:
                        box.on_pressed()
                except AttributeError:
                    pass
Ejemplo n.º 3
0
 def loadCheckBoxes(self,file=None):
     if file is None:
         file = self.settingsFile
     checkBoxString = loadSetting(file,'checkBoxes')
     if not checkBoxString is None:
         if isinstance(checkBoxString,str):
             print('Please save a new gui state to comply with the new version')
             return
         for item,value in checkBoxString.items():
             try:
                 getattr(self.ui,item).setChecked(value)
             except AttributeError:
                 pass
Ejemplo n.º 4
0
 def loadLineEdits(self,file=None):
     if file is None:
         file = self.settingsFile
     lineEditValueString = loadSetting(file,'lineEdits')
     if not lineEditValueString is None:
         if isinstance(lineEditValueString,str):
             print('Please save a new gui state to comply with the new version')
             return
         for item,value in lineEditValueString.items():
             try:
                 getattr(self.ui,item).setText(value)
             except AttributeError:
                 pass
Ejemplo n.º 5
0
    def __init__(self, AppContext):

        super(MJOLNIRMainWindow, self).__init__()

        self.ui = Ui_MainWindow()
        self.AppContext = AppContext
        self.version = self.AppContext.build_settings['version']
        ### Settings saved in .MJOLNIRGuiSettings
        self.settingsFile = path.join(home, '.MJOLNIRGuiSettings')
        self.views = []
        guiSettings = loadSetting(self.settingsFile, 'guiSettings')

        #if guiSettings is None:
        #    self.theme = 'light'
        #else:
        #    if not 'theme' in guiSettings:
        #        self.theme = 'light'
        #    else:
        #        self.theme = guiSettings['theme']

        self.ui.setupUi(self)
        self.update()

        icon = QtGui.QIcon()
        icon.addPixmap(
            QtGui.QPixmap(
                self.AppContext.get_resource('Icons/Own/MJOLNIR.png')))
        self.setWindowIcon(icon)

        # List to hold all views that need to be setup
        self.views = []
        ## Set up DataSetManager
        self.ui.dataSetManager = DataSetManager(self.ui.fixedOpen, self)
        self.update()
        self.views.append(self.ui.dataSetManager)

        # Lists of views in shown order
        self.nameList = [
            'View3D', 'QE line', 'Q plane', '1D cuts', '1D raw data', 'Masking'
        ]  # 'Normalization'
        self.viewClasses = [
            View3DManager, QELineManager, QPlaneManager, Cut1DManager,
            Raw1DManager
        ]  #[View3D,View3D,View3D,Cut1D,Raw1D] # NormalizationManager
        self.startState = [True, False, False, False, True,
                           False]  # If not collapsed #False

        # Find correct layout to insert views
        vlay = QtWidgets.QVBoxLayout(self.ui.collapsibleContainer)
        # Insert all views
        self.boxContainers = []
        for name, Type, state in zip(self.nameList, self.viewClasses,
                                     self.startState):
            self.update()
            box = CollapsibleBox(name, startState=state)
            self.boxContainers.append(box)
            vlay.addWidget(box)
            lay = QtWidgets.QVBoxLayout()

            widget = Type(guiWindow=self)
            #if Type == NormalizationManager: # Get a reference to the sample manager directly in self
            #    self.normalizationManager = widget
            self.views.append(widget)
            lay.addWidget(widget)

            box.setContentLayout(lay)
        vlay.addStretch()

        self.maskingManager = MaskManager(self)

        self.windows = []  # Holder for generated plotting windows

        self.dataSets = []

        self.current_timer = None

        self.blockItems = [
            getattr(self.ui, item) for item in self.ui.__dict__
            if '_button' in item[-7:]
        ]  # Collect all items to block on calls
        self.blockItems.append(self.ui.DataSet_binning_comboBox)

        self.lineEdits = [
            getattr(self.ui, item) for item in self.ui.__dict__
            if '_lineEdit' in item[-9:]
        ]  # Collect all lineedits
        self.radioButtons = [
            getattr(self.ui, item) for item in self.ui.__dict__
            if '_radioButton' in item
        ]  # Collect all radiobuttons
        self.spinBoxes = [
            getattr(self.ui, item) for item in self.ui.__dict__
            if '_spinBox' in item[-8:]
        ]  # Collect all spinboxes
        self.checkBoxes = [
            getattr(self.ui, item) for item in self.ui.__dict__
            if '_checkBox' in item[-9:]
        ]  # Collect all checkboxes

        self.update()
        initGenerateScript(self)

        for view in self.views:  # Run through all views to set them up
            view.setup()

        setupGenerateScript(self)
        self.update()
        self.setupMenu()
        self.update()
        self.setupStateMachine()
        self.update()
        self.stateMachine.run()
        self.update()
        self.loadFolder()  # Load last folder as default
        self.loadedGuiSettings = None
        self.ui.menubar.setNativeMenuBar(False)

        if sys.platform.lower() == 'darwin':
            ## Update image of arrows to correct style on mac
            correctedArrows = """QToolButton::down-arrow {
        image: url(""" + self.AppContext.get_resource('down.png') + """);
    }

    QToolButton::right-arrow {
        image: url(""" + self.AppContext.get_resource('right.png') + """);
    }"""

            self.setStyleSheet(self.styleSheet() + correctedArrows)
Ejemplo n.º 6
0
    def loadGui(self, presetFileLocation=None):

        # Load saveFile
        if not hasattr(self, 'loadedSettingsFolder'):
            folder = home
        else:
            folder = self.loadedSettingsFolder

        if presetFileLocation is None:  # When no file is provided, open file dialogue
            settingsFile, _ = QtWidgets.QFileDialog.getOpenFileName(
                self, "Open GUI settings file", folder,
                "Setting (*.MJOLNIRGuiSettings);;All Files (*)")
        else:
            settingsFile = presetFileLocation
        self.update()
        self.loadedSettingsFolder = os.path.dirname(settingsFile)
        self.loadedSettingsFile = settingsFile

        if settingsFile is None or settingsFile == '':
            return False

        self.setProgressBarLabelText('Deleating Old Data Sets and Files')
        while self.DataSetModel.rowCount(None) > 0:
            self.DataSetModel.delete(
                self.DataSetModel.getCurrentDatasetIndex())
        else:
            self.DataSetModel.layoutChanged.emit()
            self.DataFileModel.updateCurrentDataSetIndex()
        self.update()
        dataSetString = loadSetting(settingsFile, 'dataSet')

        totalFiles = np.sum([
            len(dsDict['files']) +
            np.sum(1 - np.array([d is None for d in dsDict['binning']])) + 1
            for dsDict in dataSetString
        ]) + 1
        # Get estimate of total number of data files
        self.setProgressBarMaximum(totalFiles)
        counter = 0

        for dsDict in dataSetString:
            self.setProgressBarLabelText('Loading Data Set')
            DSName = dsDict['name']
            files = dsDict['files']
            dfs = None
            if len(files) != 0:  # If files in dataset, continue
                dfs = []
                for dfLocation in files:
                    df = GuiDataFile(dfLocation)
                    self.update()
                    dfs.append(df)
                    counter += 1
                    self.setProgressBarValue(counter)
            if DSName == '':
                continue
            ds = GuiDataSet(name=DSName, dataFiles=dfs)
            if 'binning' in dsDict:
                if not np.any([b is None for b in dsDict['binning']]):
                    binnings = dsDict['binning']
                    for df, binning in zip(ds, binnings):
                        df.binning = binning
                    self.setProgressBarLabelText('Converting Data Set')
                    ds.convertDataFile(guiWindow=self,
                                       setProgressBarMaximum=False)
                    self.update()

            self.DataSetModel.append(ds)
            self.DataSetModel.layoutChanged.emit()
            self.update()
            counter += 1
            self.setProgressBarValue(counter)

        DataFileListInfos = loadSetting(settingsFile, 'infos')
        if not DataFileListInfos is None:
            self.DataFileInfoModel.infos = DataFileListInfos

        self.loadGuiSettings(file=settingsFile)
        self.loadLineEdits(file=settingsFile)
        self.loadRadioButtons(file=settingsFile)
        # self.loadSpinBoxes(file=settingsFile)
        # self.loadCheckBoxes(file=settingsFile)
        self.DataSetModel.layoutChanged.emit()
        self.DataFileInfoModel.layoutChanged.emit()
        self.DataFileModel.updateCurrentDataSetIndex()
        self.update()

        self.loadedGuiSettings = self.generateCurrentGuiSettings()
        return True
Ejemplo n.º 7
0
 def loadFolder(self):
     fileDir = loadSetting(self.settingsFile, 'fileDir')
     if not fileDir is None:
         self.setCurrentDirectory(fileDir)
Ejemplo n.º 8
0
    def loadGui(self, presetFileLocation=None):

        # Load saveFile
        if not hasattr(self, 'loadedSettingsFolder'):
            folder = home
        else:
            folder = self.loadedSettingsFolder

        if presetFileLocation is None:  # When no file is provided, open file dialogue
            settingsFile, _ = QtWidgets.QFileDialog.getOpenFileName(
                self, "Open GUI settings file", folder,
                "Setting (*.MJOLNIRGuiSettings);;All Files (*)")
        else:
            settingsFile = presetFileLocation
        self.update()
        self.loadedSettingsFolder = os.path.dirname(settingsFile)
        self.loadedSettingsFile = settingsFile

        if settingsFile is None or settingsFile == '':
            return False

        self.setProgressBarLabelText('Deleating Old Data Sets and Files')
        while self.DataSetModel.rowCount(None) > 0:
            self.DataSetModel.delete(
                self.DataSetModel.getCurrentDatasetIndex())
        else:
            self.DataSetModel.layoutChanged.emit()
            self.DataFileModel.updateCurrentDataSetIndex()
        self.update()
        dataSetString = loadSetting(settingsFile, 'dataSet')

        totalFiles = np.sum([
            len(dsDict['files']) +
            np.sum(1 - np.array([d is None for d in dsDict['binning']])) + 1
            for dsDict in dataSetString
        ]) + 1
        # Get estimate of total number of data files
        self.setProgressBarMaximum(totalFiles)

        self.setProgressBarValue(0)

        for dsDict in dataSetString:
            DSName = dsDict['name']
            self.setProgressBarLabelText('Loading Data Set \'' + DSName + '\'')
            files = dsDict['files']  # data or foreground data
            if 'background' in dsDict:  # Data set is a subtracted set!
                background = dsDict['background']
                if len(files) != 0:  # If files in dataset, continue
                    dfs = []
                    for dfLocation in files:
                        df = GuiDataFile(dfLocation)
                        self.update()
                        dfs.append(df)
                        self.addProgressBarValue(0.5)
                    dfsBG = []
                    for dfLocation in background:
                        df = GuiDataFile(dfLocation)
                        self.update()
                        dfsBG.append(df)
                        self.addProgressBarValue(0.5)

                    foreground_ds = GuiDataSet(name='fg', dataFiles=dfs)
                    background_ds = GuiDataSet(name='bg', dataFiles=dfsBG)
                    binnings = dsDict['binning']
                    if dsDict['convertBeforeSubtract']:
                        self.setProgressBarLabelText('Converting Data Set \'' +
                                                     DSName + '\'')
                        for df, binning in zip(
                                foreground_ds,
                                binnings):  # Give the correct binning
                            df.binning = binning
                        foreground_ds.convertDataFile(
                            guiWindow=self,
                            setProgressBarMaximum=False,
                            progressUpdate=0.5,
                            printFunction=self.writeToStatus)
                        self.update()
                        for df, binning in zip(
                                background_ds, binnings
                        ):  # Assume binning is the same across data sets
                            df.binning = binning
                        background_ds.convertDataFile(
                            guiWindow=self,
                            setProgressBarMaximum=False,
                            progressUpdate=0.5,
                            printFunction=self.writeToStatus)
                        self.update()

                    temp = foreground_ds - background_ds

                    ds = GuiDataSet(name=DSName, dataSet=temp)

                    ds.background = background
                    ds.convertBeforeSubtract = dsDict['convertBeforeSubtract']

                    if not ds.convertBeforeSubtract:  # Convert after subtraction if needed
                        if not np.any([b is None for b in dsDict['binning']]):
                            self.setProgressBarLabelText(
                                'Converting Data Set \'' + DSName + '\'')
                            ds.convertDataFile(
                                guiWindow=self,
                                setProgressBarMaximum=False,
                                printFunction=self.writeToStatus)
                            self.update()

            else:  # Regular dataset

                dfs = None
                if len(files) != 0:  # If files in dataset, continue
                    dfs = []
                    for dfLocation in files:
                        df = GuiDataFile(dfLocation)
                        self.update()
                        dfs.append(df)
                        self.addProgressBarValue(1)
                ds = GuiDataSet(name=DSName, dataFiles=dfs)
                if 'binning' in dsDict:
                    if not np.any([b is None for b in dsDict['binning']]):
                        binnings = dsDict['binning']
                        for df, binning in zip(ds, binnings):
                            df.binning = binning
                        self.setProgressBarLabelText('Converting Data Set \'' +
                                                     DSName + '\'')
                        ds.convertDataFile(guiWindow=self,
                                           setProgressBarMaximum=False,
                                           printFunction=self.writeToStatus)
                        self.update()

            self.DataSetModel.append(ds)
            self.DataSetModel.layoutChanged.emit()
            self.update()
            self.addProgressBarValue(1)

        DataFileListInfos = loadSetting(settingsFile, 'infos')
        if not DataFileListInfos is None:
            self.DataFileInfoModel.infos = DataFileListInfos

        self.loadGuiSettings(file=settingsFile)
        self.loadLineEdits(file=settingsFile)
        self.loadRadioButtons(file=settingsFile)
        # self.loadSpinBoxes(file=settingsFile)
        # self.loadCheckBoxes(file=settingsFile)
        self.loadPredictionSettings(file=settingsFile)
        self.DataSetModel.layoutChanged.emit()
        self.DataFileInfoModel.layoutChanged.emit()
        self.DataFileModel.updateCurrentDataSetIndex()
        self.update()

        self.loadedGuiSettings = self.generateCurrentGuiSettings()
        return True