예제 #1
0
	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)
예제 #2
0
	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]
예제 #3
0
    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]