def _threadFinished(self): result = self.thread.result self.thread = None if type(result) == type((1, )): #if we receive a tuple there was an error if len(result): if result[0] == "Exception": # somehow this exception is not caught raise Exception(result[1], result[2]) #, result[3]) return # Show results with result.bufferContext(update=True): imageNames = result.labels('roisum', labeltype='title') images = result['roisum'] self._widget = StackPluginResultsWindow.StackPluginResultsWindow(\ usetab=False) self._widget.buildAndConnectImageButtonBox(replace=True, multiple=True) qt = StackPluginResultsWindow.qt self._widget.sigMaskImageWidgetSignal.connect(self.mySlot) self._widget.setStackPluginResults(images, image_names=imageNames) self._showWidget() # Save results result.save()
def _threadFinished(self): result = self.thread.result self.thread = None if type(result) == type((1, )): #if we receive a tuple there was an error if len(result): if result[0] == "Exception": # somehow this exception is not caught raise Exception(result[1], result[2]) #, result[3]) return # Show results if 'massfractions' in result: imageNames = result.parameter_names + result.massfraction_names images = numpy.concatenate( (result['parameters'], result['massfractions']), axis=0) else: imageNames = result.parameter_names images = result['parameters'] nImages = images.shape[0] self._widget = StackPluginResultsWindow.StackPluginResultsWindow(\ usetab=False) self._widget.buildAndConnectImageButtonBox(replace=True, multiple=True) qt = StackPluginResultsWindow.qt self._widget.sigMaskImageWidgetSignal.connect(self.mySlot) self._widget.setStackPluginResults(images, image_names=imageNames) self._showWidget() # Save results result.save()
def threadFinished(self): if DEBUG: print("NNMAStackPlugin threadFinished") result = self.thread.result self.thread = None if type(result) == type((1,)): #if we receive a tuple there was an error if len(result): if type(result[0]) == type("Exception"): if result[0] == "Exception": self._status.setText("Ready after calculation error") self.configurationWidget.setEnabled(True) raise Exception(result[1], result[2]) return self._status.setText("Ready") curve = self.configurationWidget.getSpectrum(binned=True) if curve not in [None, []]: xValues = curve[0] else: xValues = None self.configurationWidget.setEnabled(True) self.configurationWidget.close() images, eigenValues, eigenVectors = result imageNames = None vectorNames = None nimages = images.shape[0] imageNames = [] vectorNames = [] vectorTitles = [] for i in range(nimages): imageNames.append("NNMA Image %02d" % i) vectorNames.append("NNMA Component %02d" % i) vectorTitles.append("%g %% explained intensity" %\ eigenValues[i]) if DEBUG: print("NNMAStackPlugin threadFinished. Create widget") self.widget = StackPluginResultsWindow.StackPluginResultsWindow(\ usetab=True) if DEBUG: print("NNMAStackPlugin threadFinished. Widget created") self.widget.buildAndConnectImageButtonBox(replace=True, multiple=True) qt = StackPluginResultsWindow.qt self.widget.sigMaskImageWidgetSignal.connect(self.mySlot) if xValues is not None: xValues = [xValues] * nimages self.widget.setStackPluginResults(images, spectra=eigenVectors, image_names=imageNames, xvalues=xValues, spectra_names=vectorNames, spectra_titles=vectorTitles) self._showWidget()
def threadFinished(self): result = self.thread.getResult() self.thread = None if type(result) == type((1, )): #if we receive a tuple there was an error if len(result): if result[0] == "Exception": self._status.setText("Ready after calculation error") self.configurationWidget.setEnabled(True) raise Exception(result[1], result[2]) return self._status.setText("Ready") curve = self.configurationWidget.getSpectrum(binned=True) if curve not in [None, []]: xValues = curve[0] else: xValues = None self.configurationWidget.setEnabled(True) self.configurationWidget.close() images, eigenValues, eigenVectors = result methodlabel = self.__methodlabel imageNames = None vectorNames = None nimages = images.shape[0] imageNames = [] vectorNames = [] itmp = nimages if " ICA " in methodlabel: itmp = int(nimages / 2) for i in range(itmp): imageNames.append("ICAimage %02d" % i) vectorNames.append("ICAvector %02d" % i) for i in range(itmp): imageNames.append("Eigenimage %02d" % i) vectorNames.append("Eigenvector %02d" % i) self.widget = StackPluginResultsWindow.StackPluginResultsWindow(\ usetab=True) self.widget.buildAndConnectImageButtonBox(replace=True, multiple=True) qt = StackPluginResultsWindow.qt self.widget.sigMaskImageWidgetSignal.connect(self.mySlot) if xValues is not None: xValues = [xValues] * nimages self.widget.setStackPluginResults(images, spectra=eigenVectors, image_names=imageNames, xvalues=xValues, spectra_names=vectorNames) self._showWidget()
def _threadFinished(self): result = self.thread.result self.thread = None if type(result) == type((1, )): #if we receive a tuple there was an error if len(result): if result[0] == "Exception": # somehow this exception is not caught raise Exception(result[1], result[2]) #, result[3]) return imageNames = result['names'] images = result["images"] nImages = images.shape[0] self._widget = StackPluginResultsWindow.StackPluginResultsWindow(\ usetab=False) self._widget.buildAndConnectImageButtonBox(replace=True, multiple=True) qt = StackPluginResultsWindow.qt self._widget.sigMaskImageWidgetSignal.connect(self.mySlot) self._widget.setStackPluginResults(images, image_names=imageNames) self._showWidget()
def _threadFinished(self): result = self.thread.result self.thread = None if type(result) == type((1, )): #if we receive a tuple there was an error if len(result): if result[0] == "Exception": # somehow this exception is not caught raise Exception(result[1], result[2]) #, result[3]) return if 'concentrations' in result: imageNames = result['names'] images = numpy.concatenate( (result['parameters'], result['concentrations']), axis=0) else: images = result['parameters'] imageNames = result['names'] nImages = images.shape[0] self._widget = StackPluginResultsWindow.StackPluginResultsWindow(\ usetab=False) self._widget.buildAndConnectImageButtonBox(replace=True, multiple=True) qt = StackPluginResultsWindow.qt self._widget.sigMaskImageWidgetSignal.connect(self.mySlot) self._widget.setStackPluginResults(images, image_names=imageNames) self._showWidget() # save to output directory parameters = self.configurationWidget.getParameters() outputDir = parameters["output_dir"] if outputDir in [None, ""]: if DEBUG: print("Nothing to be saved") return if parameters["file_root"] is None: fileRoot = "" else: fileRoot = parameters["file_root"].replace(" ", "") if fileRoot in [None, ""]: fileRoot = "images" if not os.path.exists(outputDir): os.mkdir(outputDir) imagesDir = os.path.join(outputDir, "IMAGES") if not os.path.exists(imagesDir): os.mkdir(imagesDir) imageList = [None] * (nImages + len(result['uncertainties'])) fileImageNames = [None] * (nImages + len(result['uncertainties'])) j = 0 for i in range(nImages): name = imageNames[i].replace(" ", "-") fileImageNames[j] = name imageList[j] = images[i] j += 1 if not imageNames[i].startswith("C("): # fitted parameter fileImageNames[j] = "s(%s)" % name imageList[j] = result['uncertainties'][i] j += 1 fileName = os.path.join(imagesDir, fileRoot + ".edf") ArraySave.save2DArrayListAsEDF(imageList, fileName, labels=fileImageNames) fileName = os.path.join(imagesDir, fileRoot + ".csv") ArraySave.save2DArrayListAsASCII(imageList, fileName, csv=True, labels=fileImageNames) if parameters["tiff"]: i = 0 for i in range(len(fileImageNames)): label = fileImageNames[i] if label.startswith("s("): continue elif label.startswith("C("): mass_fraction = "_" + label[2:-1] + "_mass_fraction" else: mass_fraction = "_" + label fileName = os.path.join(imagesDir, fileRoot + mass_fraction + ".tif") ArraySave.save2DArrayListAsMonochromaticTiff( [imageList[i]], fileName, labels=[label], dtype=numpy.float32)
def XASNormalize(self): stack = self.getStackDataObject() if not isinstance(stack.data, numpy.ndarray): text = "This method does not work with dynamically loaded stacks" raise TypeError(text) activeCurve = self.getActiveCurve() if activeCurve in [None, []]: return x, spectrum, legend, info = activeCurve if self.widget is None: self.widget = XASNormalizationWindow.XASNormalizationDialog( None, spectrum, energy=x) else: oldParameters = self.widget.getParameters() oldEnergy = self.widget.parametersWidget.energy oldEMin = oldEnergy.min() oldEMax = oldEnergy.max() self.widget.setData(spectrum, energy=x) if abs(oldEMin - x.min()) < 1: if abs(oldEMax - x.max()) < 1: self.widget.setParameters(oldParameters) ret = self.widget.exec() if ret: parameters = self.widget.getParameters() # TODO: this dictionary adaptation should be made # by the configuration if parameters['auto_edge']: edge = None else: edge = parameters['edge_energy'] energy = x pre_edge_regions = parameters['pre_edge']['regions'] post_edge_regions = parameters['post_edge']['regions'] algorithm = 'polynomial' algorithm_parameters = {} algorithm_parameters['pre_edge_order'] = parameters['pre_edge']\ ['polynomial'] algorithm_parameters['post_edge_order'] = parameters['post_edge']\ ['polynomial'] result = self.__replaceStackByXASNormalizedData( stack, energy=energy, edge=edge, pre_edge_regions=pre_edge_regions, post_edge_regions=post_edge_regions, algorithm=algorithm, algorithm_parameters=algorithm_parameters) if result[0] == 'Exception': # exception occurred raise Exception(result[1], result[2], result[3]) else: edges, jumps, errors = result images, names = self.getStackROIImagesAndNames() edges.shape = images[0].shape jumps.shape = images[0].shape errors.shape = images[0].shape self.setStack(stack) if self.imageWidget is None: self.imageWidget = StackPluginResultsWindow.StackPluginResultsWindow(\ usetab=False,profileselection=True) self.imageWidget.buildAndConnectImageButtonBox() qt = StackPluginResultsWindow.qt self.imageWidget.sigMaskImageWidgetSignal.connect(self.mySlot) self.methodDict["Show Images"] = [ self._showImageWidget, "Show calculated jump and edge position images", None ] self.__methodKeys.append("Show Images") self.imageWidget.setStackPluginResults( [jumps, errors, edges], image_names=['Jump', 'Errors', 'Edge Position']) self._showImageWidget()
def _loadImageFiles(self): if self.getStackDataObject() is None: return getfilter = True fileTypeList = [ "PNG Files (*png)", "JPEG Files (*jpg *jpeg)", "IMAGE Files (*)", "EDF Files (*edf)", "EDF Files (*ccd)", "EDF Files (*)" ] message = "Open image file" filenamelist, filefilter = PyMcaFileDialogs.getFileList( parent=None, filetypelist=fileTypeList, message=message, getfilter=getfilter, single=False, currentfilter=None) if len(filenamelist) < 1: return imagelist = [] imagenames = [] mask = self.getStackSelectionMask() if mask is None: r, n = self.getStackROIImagesAndNames() shape = r[0].shape else: shape = mask.shape if filefilter.split()[0] in ["EDF"]: for filename in filenamelist: #read the edf file edf = EDFStack.EdfFileDataSource.EdfFileDataSource(filename) #the list of images keylist = edf.getSourceInfo()['KeyList'] if len(keylist) < 1: msg = qt.QMessageBox(None) msg.setIcon(qt.QMessageBox.Critical) msg.setText("Cannot read image from file") msg.exec_() return for key in keylist: #get the data dataObject = edf.getDataObject(key) data = dataObject.data if data.shape[0] not in shape: continue if data.shape[1] not in shape: continue imagename = dataObject.info.get('Title', "") if imagename != "": imagename += " " imagename += os.path.basename(filename) + " " + key imagelist.append(data) imagenames.append(imagename) if len(imagelist) == 0: msg = qt.QMessageBox(None) msg.setIcon(qt.QMessageBox.Critical) msg.setText("Cannot read a valid image from the file") msg.exec_() return crop = False self.widget = StackPluginResultsWindow.StackPluginResultsWindow( parent=None, usetab=False) self.widget.buildAndConnectImageButtonBox() self.widget.sigMaskImageWidgetSignal.connect(self.mySlot) self.widget.setStackPluginResults(imagelist, image_names=imagenames) self._showWidget() return else: #Try pure Image formats for filename in filenamelist: image = qt.QImage(filename) if image.isNull(): msg = qt.QMessageBox(self) msg.setIcon(qt.QMessageBox.Critical) msg.setText("Cannot read file %s as an image" % filename) msg.exec_() return imagelist.append(image) imagenames.append(os.path.basename(filename)) if len(imagelist) == 0: msg = qt.QMessageBox(None) msg.setIcon(qt.QMessageBox.Critical) msg.setText("Cannot read a valid image from the file") msg.exec_() return self.widget = ExternalImagesWindow.ExternalImagesWindow( parent=None, rgbwidget=None, selection=True, colormap=True, imageicons=True, standalonesave=True) self.widget.buildAndConnectImageButtonBox() self.widget.sigMaskImageWidgetSignal.connect(self.mySlot) self.widget.setImageData(None) self.widget.setQImageList(imagelist, shape[1], shape[0], clearmask=False, data=None, imagenames=imagenames) #data=self.__stackImageData) self._showWidget() return
def _loadImageFiles(self): if self.getStackDataObject() is None: return getfilter = True fileTypeList = [ "PNG Files (*png)", "JPEG Files (*jpg *jpeg)", "IMAGE Files (*)", "DAT Files (*dat)", "CSV Files (*csv)", "EDF Files (*edf)", "EDF Files (*ccd)", "EDF Files (*)" ] message = "Open image file" filenamelist, filefilter = PyMcaFileDialogs.getFileList( parent=None, filetypelist=fileTypeList, message=message, getfilter=getfilter, single=False, currentfilter=None) if len(filenamelist) < 1: return imagelist = [] imagenames = [] mask = self.getStackSelectionMask() if mask is None: r, n = self.getStackROIImagesAndNames() shape = r[0].shape else: shape = mask.shape extension = qt.safe_str(os.path.splitext(filenamelist[0])[1]) if (filefilter.split()[0] in ["EDF"]) or \ (extension.upper() in [".EDF", ".TIF"]): for filename in filenamelist: #read the edf file edf = EDFStack.EdfFileDataSource.EdfFileDataSource(filename) #the list of images keylist = edf.getSourceInfo()['KeyList'] if len(keylist) < 1: msg = qt.QMessageBox(None) msg.setIcon(qt.QMessageBox.Critical) msg.setText("Cannot read image from file") msg.exec_() return for key in keylist: #get the data dataObject = edf.getDataObject(key) data = dataObject.data if data.shape[0] not in shape: continue if data.shape[1] not in shape: continue imagename = dataObject.info.get('Title', "") if imagename != "": imagename += " " imagename += os.path.basename(filename) + " " + key imagelist.append(data) imagenames.append(imagename) if len(imagelist) == 0: msg = qt.QMessageBox(None) msg.setIcon(qt.QMessageBox.Critical) msg.setText("Cannot read a valid image from the file") msg.exec_() return crop = False self.widget = StackPluginResultsWindow.StackPluginResultsWindow( parent=None, usetab=False) self.widget.buildAndConnectImageButtonBox() self.widget.sigMaskImageWidgetSignal.connect(self.mySlot) self.widget.setStackPluginResults(imagelist, image_names=imagenames) self._showWidget() return elif extension.lower() in [".csv", ".dat"]: # what to do if more than one file selected ? from PyMca5.PyMca import specfilewrapper as Specfile sf = Specfile.Specfile(filenamelist[0]) scan = sf[0] labels = scan.alllabels() data = scan.data() scan = None sf = None if "column" in labels: offset = labels.index("column") ncols = int(data[offset].max() + 1) offset += 1 else: raise IOError("Only images exported as csv supported") imagelist = [] imagenames = [] for i in range(offset, len(labels)): if labels[i].startswith("s("): continue tmpData = data[i] tmpData.shape = -1, ncols imagelist.append(tmpData) imagenames.append(labels[i]) crop = False self.widget = StackPluginResultsWindow.StackPluginResultsWindow( parent=None, usetab=False) self.widget.buildAndConnectImageButtonBox() self.widget.sigMaskImageWidgetSignal.connect(self.mySlot) self.widget.setStackPluginResults(imagelist, image_names=imagenames) self._showWidget() return else: #Try pure Image formats for filename in filenamelist: image = qt.QImage(filename) if image.isNull(): msg = qt.QMessageBox(None) msg.setIcon(qt.QMessageBox.Critical) msg.setText("Cannot read file %s as an image" % filename) msg.exec_() return imagelist.append(image) imagenames.append(os.path.basename(filename)) if len(imagelist) == 0: msg = qt.QMessageBox(None) msg.setIcon(qt.QMessageBox.Critical) msg.setText("Cannot read a valid image from the file") msg.exec_() return self.widget = ExternalImagesWindow.ExternalImagesWindow( parent=None, rgbwidget=None, selection=True, colormap=True, imageicons=True, standalonesave=True) self.widget.buildAndConnectImageButtonBox() self.widget.sigMaskImageWidgetSignal.connect(self.mySlot) self.widget.setImageData(None) self.widget.setQImageList(imagelist, shape[1], shape[0], clearmask=False, data=None, imagenames=imagenames) #data=self.__stackImageData) self._showWidget() return