def _process(self,xDataSet, yDataSet): dyDataSet = Maths.derivative(xDataSet._jdataset(), yDataSet._jdataset(), self.smoothwidth) minVal, maxVal = dyDataSet.min(), dyDataSet.max() if maxVal - minVal == 0: raise ValueError("There is no edge") labels = [label if label != 'slope' else 'top' for label in self.labelList] return GaussianPeak(self.name, labels, self.formatString, self.plotPanel)._process(xDataSet, dyDataSet)
def _process(self, xDataSet, yDataSet): dyDataSet = dnp.array(Maths.derivative(xDataSet._jdataset(), yDataSet._jdataset(), self.smoothwidth)) uposC, ufwhmC, uareaC, dposC, dfwhmC, dareaC = self.coarseProcess(xDataSet, dyDataSet) gaussian = dnp.fit.function.gaussian if abs(dareaC) < 0.2 * uareaC: r = dnp.fit.fit([gaussian], xDataSet, dyDataSet, [uposC, ufwhmC, uareaC], bounds=[ (uposC - 2 * ufwhmC, uposC + 2 * ufwhmC), (0, 2 * ufwhmC), (0, 2 * uareaC)], ptol=1e-10, optimizer=self.optimizer) upos, ufwhm, _uarea = r.parameters results = {'upos': upos, 'ufwhm': ufwhm, 'area': _uarea, 'uarea': _uarea, 'fwhm': ufwhm} elif uareaC < 0.2 * abs(dareaC): r = dnp.fit.fit([gaussian], xDataSet, dyDataSet, [dposC, dfwhmC, dareaC], bounds=[ (dposC - 2 * dfwhmC, dposC + 2 * dfwhmC), (0, 2 * dfwhmC), (2 * dareaC, 0)], ptol=1e-10, optimizer=self.optimizer) dpos, dfwhm, _darea = r.parameters results = {'dpos': dpos, 'dfwhm': dfwhm, 'area': abs(_darea), 'darea': _darea, 'fwhm': dfwhm} else: r = dnp.fit.fit([gaussian, gaussian], xDataSet, dyDataSet, [uposC, ufwhmC, uareaC,dposC, dfwhmC, dareaC], bounds=[ (uposC - 2 * ufwhmC, uposC + 2 * ufwhmC), (0, 2 * ufwhmC), (0, 2 * uareaC), (dposC - 2 * dfwhmC, dposC + 2 * dfwhmC), (0, 2 * dfwhmC), (2 * dareaC, 0)], ptol=1e-10, optimizer=self.optimizer) upos, ufwhm, _uarea, dpos, dfwhm, _darea = r.parameters results = {'upos': upos, 'dpos': dpos, 'ufwhm': ufwhm, 'dfwhm': dfwhm, 'uarea': _uarea, 'darea': _darea, 'centre': (upos + dpos) / 2.0, 'width': abs(upos - dpos), 'area': (_uarea + abs(_darea)) / 2.0, 'fwhm': (ufwhm + dfwhm) / 2.0} self.plotResult(r) results['residual'] = r.residual return [results.get(label, float('NaN')) for label in self.labelList]
def _process(self, xDataSet, yDataSet): dyDataSet = dnp.array( Maths.derivative(xDataSet._jdataset(), yDataSet._jdataset(), self.smoothwidth)) uposC, ufwhmC, uareaC, dposC, dfwhmC, dareaC = self.coarseProcess( xDataSet, dyDataSet) gaussian = dnp.fit.function.gaussian if abs(dareaC) < 0.2 * uareaC: r = dnp.fit.fit([gaussian], xDataSet, dyDataSet, [uposC, ufwhmC, uareaC], bounds=[(uposC - 2 * ufwhmC, uposC + 2 * ufwhmC), (0, 2 * ufwhmC), (0, 2 * uareaC)], ptol=1e-10, optimizer=self.optimizer) upos, ufwhm, _uarea = r.parameters results = { 'upos': upos, 'ufwhm': ufwhm, 'area': _uarea, 'uarea': _uarea, 'fwhm': ufwhm } elif uareaC < 0.2 * abs(dareaC): r = dnp.fit.fit([gaussian], xDataSet, dyDataSet, [dposC, dfwhmC, dareaC], bounds=[(dposC - 2 * dfwhmC, dposC + 2 * dfwhmC), (0, 2 * dfwhmC), (2 * dareaC, 0)], ptol=1e-10, optimizer=self.optimizer) dpos, dfwhm, _darea = r.parameters results = { 'dpos': dpos, 'dfwhm': dfwhm, 'area': abs(_darea), 'darea': _darea, 'fwhm': dfwhm } else: r = dnp.fit.fit([gaussian, gaussian], xDataSet, dyDataSet, [uposC, ufwhmC, uareaC, dposC, dfwhmC, dareaC], bounds=[(uposC - 2 * ufwhmC, uposC + 2 * ufwhmC), (0, 2 * ufwhmC), (0, 2 * uareaC), (dposC - 2 * dfwhmC, dposC + 2 * dfwhmC), (0, 2 * dfwhmC), (2 * dareaC, 0)], ptol=1e-10, optimizer=self.optimizer) upos, ufwhm, _uarea, dpos, dfwhm, _darea = r.parameters results = { 'upos': upos, 'dpos': dpos, 'ufwhm': ufwhm, 'dfwhm': dfwhm, 'uarea': _uarea, 'darea': _darea, 'centre': (upos + dpos) / 2.0, 'width': abs(upos - dpos), 'area': (_uarea + abs(_darea)) / 2.0, 'fwhm': (ufwhm + dfwhm) / 2.0 } self.plotResult(r) results['residual'] = r.residual return [results.get(label, float('NaN')) for label in self.labelList]