def test(): from silx.math.fit import fittheories from silx.math.fit import fitmanager from silx.math.fit import functions from silx.gui.plot.PlotWindow import PlotWindow import numpy a = qt.QApplication([]) x = numpy.arange(1000) y1 = functions.sum_gauss(x, 100, 400, 100) fit = fitmanager.FitManager(x=x, y=y1) fitfuns = fittheories.FitTheories() fit.addtheory(name="Gaussian", function=functions.sum_gauss, parameters=("height", "peak center", "fwhm"), estimate=fitfuns.estimate_height_position_fwhm) fit.settheory('Gaussian') fit.configure( PositiveFwhmFlag=True, PositiveHeightAreaFlag=True, AutoFwhm=True, ) # Fit fit.estimate() fit.runfit() w = ParametersTab() w.show() w.fillFromFit(fit.fit_results, view='Gaussians') y2 = functions.sum_splitgauss(x, 100, 400, 100, 40, 10, 600, 50, 500, 80, 850, 10, 50) fit.setdata(x=x, y=y2) # Define new theory fit.addtheory(name="Asymetric gaussian", function=functions.sum_splitgauss, parameters=("height", "peak center", "left fwhm", "right fwhm"), estimate=fitfuns.estimate_splitgauss) fit.settheory('Asymetric gaussian') # Fit fit.estimate() fit.runfit() w.fillFromFit(fit.fit_results, view='Asymetric gaussians') # Plot pw = PlotWindow(control=True) pw.addCurve(x, y1, "Gaussians") pw.addCurve(x, y2, "Asymetric gaussians") pw.show() a.exec_()
def test(): from silx.math.fit import fittheories from silx.math.fit import fitmanager from silx.math.fit import functions from silx.gui.plot.PlotWindow import PlotWindow import numpy a = qt.QApplication([]) x = numpy.arange(1000) y1 = functions.sum_gauss(x, 100, 400, 100) fit = fitmanager.FitManager(x=x, y=y1) fitfuns = fittheories.FitTheories() fit.addtheory(name="Gaussian", function=functions.sum_gauss, parameters=("height", "peak center", "fwhm"), estimate=fitfuns.estimate_height_position_fwhm) fit.settheory('Gaussian') fit.configure(PositiveFwhmFlag=True, PositiveHeightAreaFlag=True, AutoFwhm=True,) # Fit fit.estimate() fit.runfit() w = ParametersTab() w.show() w.fillFromFit(fit.fit_results, view='Gaussians') y2 = functions.sum_splitgauss(x, 100, 400, 100, 40, 10, 600, 50, 500, 80, 850, 10, 50) fit.setdata(x=x, y=y2) # Define new theory fit.addtheory(name="Asymetric gaussian", function=functions.sum_splitgauss, parameters=("height", "peak center", "left fwhm", "right fwhm"), estimate=fitfuns.estimate_splitgauss) fit.settheory('Asymetric gaussian') # Fit fit.estimate() fit.runfit() w.fillFromFit(fit.fit_results, view='Asymetric gaussians') # Plot pw = PlotWindow(control=True) pw.addCurve(x, y1, "Gaussians") pw.addCurve(x, y2, "Asymetric gaussians") pw.show() a.exec_()
def test(): from .functions import sum_gauss from . import fittheories from . import bgtheories # Create synthetic data with a sum of gaussian functions x = numpy.arange(1000).astype(numpy.float) p = [1000, 100., 250, 255, 690., 45, 1500, 800.5, 95] y = 0.5 * x + 13 + sum_gauss(x, *p) # Fitting fit = FitManager() # more sensitivity necessary to resolve # overlapping peaks at x=690 and x=800.5 fit.setdata(x=x, y=y) fit.loadtheories(fittheories) fit.settheory('Gaussians') fit.loadbgtheories(bgtheories) fit.setbackground('Linear') fit.estimate() fit.runfit() print("Searched parameters = ", p) print("Obtained parameters : ") dummy_list = [] for param in fit.fit_results: print(param['name'], ' = ', param['fitresult']) dummy_list.append(param['fitresult']) print("chisq = ", fit.chisq) # Plot constant, slope = dummy_list[:2] p1 = dummy_list[2:] print(p1) y2 = slope * x + constant + sum_gauss(x, *p1) try: from silx.gui import qt from silx.gui.plot.PlotWindow import PlotWindow app = qt.QApplication([]) pw = PlotWindow(control=True) pw.addCurve(x, y, "Original") pw.addCurve(x, y2, "Fit result") pw.legendsDockWidget.show() pw.show() app.exec_() except ImportError: _logger.warning("Could not import qt to display fit result as curve")