def updateGraph(self, ddict): self.__lastDict = ddict edgeEnergy = ddict['edge_energy'] preRegions = ddict['pre_edge']['regions'] postRegions = ddict['post_edge']['regions'] event = ddict.get('event', None) if event == "AutoEdgeEnergyClicked": try: # recalculate edge energy following region limits xmin = edgeEnergy + preRegions[0][0] xmax = edgeEnergy + postRegions[0][1] idx = numpy.nonzero((self.energy >= xmin) &\ (self.energy <= xmax))[0] x = numpy.take(self.energy, idx) y = numpy.take(self.spectrum, idx) edgeEnergy = XASNormalization.estimateXANESEdge(y, energy=x, full=False) self.parametersWidget.setEdgeEnergy(edgeEnergy, emin=self.energy.min(), emax=self.energy.max()) self.__lastDict['edge_energy'] = edgeEnergy except: pass parameters = {} parameters['pre_edge_order'] = ddict['pre_edge']['polynomial'] parameters['post_edge_order'] = ddict['post_edge']['polynomial'] algorithm = 'polynomial' self.updateMarkers(edgeEnergy, preRegions, postRegions, edge_auto=ddict['auto_edge']) try: normalizationResult = XASNormalization.XASNormalization( self.spectrum, self.energy, edge=edgeEnergy, pre_edge_regions=preRegions, post_edge_regions=postRegions, algorithm=algorithm, algorithm_parameters=parameters) except: msg = qt.QMessageBox(self) msg.setIcon(qt.QMessageBox.Critical) msg.setWindowTitle("Normalization Error") msg.setText("An error has occured while normalizing the data") msg.setInformativeText(str(sys.exc_info()[1])) msg.setDetailedText(traceback.format_exc()) msg.exec_() return nEnergy, nSpectrum, usedEdge, jump = normalizationResult[0:4] preEdgeFunction, preEdgeParameters = normalizationResult[4:6] postEdgeFunction, postEdgeParameters = normalizationResult[6:8] idx = self.energy > (usedEdge + preRegions[0][0]) x = self.energy[idx] yPre = preEdgeFunction(preEdgeParameters, x) yPost = postEdgeFunction(postEdgeParameters, x) self.graph.addCurve(x, yPre, legend="Pre-edge Polynomial") self.graph.addCurve(x, yPost + yPre, legend="Post-edge Polynomial")