def fit_curve(): global Plot1 ds = Plot1.ds if len(ds) == 0: print 'Error: no curve to fit in Plot1.' return for d in ds: if d.title == 'fitting': Plot1.remove_dataset(d) d0 = ds[0] fitting = Fitting(GAUSSIAN_FITTING) try: fitting.set_histogram(d0) res = fitting.fit() res.var[:] = 0 res.title = 'fitting' Plot1.add_dataset(res) mean = fitting.params['mean'] mean_err = fitting.error['mean'] print 'POS_OF_PEAK=' + str(mean) + '+/-' + str(mean_err) print 'FWHM=' + str(2.35482 * math.fabs(fitting.params['sigma'])) \ + '+/-' + str(5.54518 * fitting.error['sigma']) print 'Chi2=' + str(fitting.fitter.getQuality()) peak_pos.value = fitting.mean except: print 'can not fit'
def plot2_fit_curve(): global Plot2 ds = Plot2.ds if len(ds) == 0: log('Error: no curve to fit in Plot2.\n') return for d in ds: if d.title == 'fitting': Plot2.remove_dataset(d) if len(ds) == 1: sds = ds[0] else: sds = Plot2.get_selected_dataset() if sds is None: open_error( 'Please select a curve to fit. Right click on the plot to focus on a curve. Or use CTRL + Mouse Click on a curve to select one.' ) return fitting = Fitting(GAUSSIAN_FITTING) try: fitting.set_histogram(sds, plot2_fit_min.value, plot2_fit_max.value) val = plot2_peak_pos.value if val == val: fitting.set_param('mean', val) val = plot2_FWHM.value if val == val: fitting.set_param('sigma', math.fabs(val / 2.35482)) res = fitting.fit() res.var[:] = 0 res.title = 'fitting' Plot2.add_dataset(res) Plot2.pv.getPlot().setCurveMarkerVisible(Plot2.__get_NXseries__(res), False) mean = fitting.params['mean'] log('POS_OF_PEAK=' + str(mean)) log('FWHM=' + str(2.35482 * math.fabs(fitting.params['sigma']))) log('Chi2 = ' + str(fitting.fitter.getQuality())) plot2_peak_pos.value = fitting.mean plot2_FWHM.value = 2.35482 * math.fabs(fitting.params['sigma']) # print fitting.params except: # traceback.print_exc(file = sys.stdout) log('can not fit\n')
def fit_curve(): global Plot1 ds = Plot1.ds if len(ds) == 0: log('Error: no curve to fit in Plot1.\n') return for d in ds: if d.title == 'fitting': Plot1.remove_dataset(d) d0 = ds[0] fitting = Fitting(GAUSSIAN_FITTING) try: fitting.set_histogram(d0, fit_min.value, fit_max.value) val = peak_pos.value if val == val: fitting.set_param('mean', val) val = FWHM.value if val == val: fitting.set_param('sigma', math.fabs(val / 2.35482)) res = fitting.fit() res.var[:] = 0 res.title = 'fitting' Plot1.add_dataset(res) mean = fitting.params['mean'] mean_err = fitting.errors['mean'] FWHM.value = 2.35482 * math.fabs(fitting.params['sigma']) FWHM_err = 5.54518 * math.fabs(fitting.errors['sigma']) log('POS_OF_PEAK=' + str(mean) + ' +/- ' + str(mean_err)) log('FWHM=' + str(FWHM.value) + ' +/- ' + str(FWHM_err)) log('Chi2 = ' + str(fitting.fitter.getQuality())) peak_pos.value = fitting.mean # print fitting.params except: # traceback.print_exc(file = sys.stdout) log('can not fit\n')