def onFitPeak(self, evt=None): gname = self.groupname dtext = [] model = self.fit_model.GetStringSelection().lower() dtext.append('Fit Model: %s' % model) bkg = self.fit_bkg.GetStringSelection() if bkg == 'None': bkg = None if bkg is None: dtext.append('No Background') else: dtext.append('Background: %s' % bkg) step = self.fit_step.GetStringSelection().lower() if model in ('step', 'rectangle'): dtext.append('Step form: %s' % step) try: lgroup = getattr(self.larch.symtable, gname) x = lgroup._xdat y = lgroup._ydat except AttributeError: self.write_message('need data to fit!') return if step.startswith('error'): step = 'erf' elif step.startswith('arctan'): step = 'atan' pgroup = fit_peak(x, y, model, background=bkg, step=step, _larch=self.larch) dtext = '\n'.join(dtext) dtext = '%s\n%s\n' % ( dtext, fit_report( pgroup.params, min_correl=0.25, _larch=self.larch)) self.fit_report.SetEditable(True) self.fit_report.SetValue(dtext) self.fit_report.SetEditable(False) lgroup.plot_yarrays = [(lgroup._ydat, PLOTOPTS_1, lgroup.plot_ylabel)] if bkg is None: lgroup._fit = pgroup.fit[:] lgroup.plot_yarrays.append((lgroup._fit, PLOTOPTS_2, 'fit')) else: lgroup._fit = pgroup.fit[:] lgroup._fit_bgr = pgroup.bkg[:] lgroup.plot_yarrays.append((lgroup._fit, PLOTOPTS_2, 'fit')) lgroup.plot_yarrays.append( (lgroup._fit_bgr, PLOTOPTS_2, 'background')) self.plot_group(gname, new=True)
def onFitPeak(self, evt=None): gname = self.groupname dtext = [] model = self.fit_model.GetStringSelection().lower() dtext.append('Fit Model: %s' % model) bkg = self.fit_bkg.GetStringSelection() if bkg == 'None': bkg = None if bkg is None: dtext.append('No Background') else: dtext.append('Background: %s' % bkg) step = self.fit_step.GetStringSelection().lower() if model in ('step', 'rectangle'): dtext.append('Step form: %s' % step) try: lgroup = getattr(self.larch.symtable, gname) x = lgroup._xdat_ y = lgroup._ydat_ except AttributeError: self.write_message('need data to fit!') return if step.startswith('error'): step = 'erf' elif step.startswith('arctan'): step = 'atan' pgroup = fit_peak(x, y, model, background=bkg, step=step, _larch=self.larch) dtext = '\n'.join(dtext) dtext = '%s\n%s\n' % (dtext, fit_report(pgroup.params, min_correl=0.25, _larch=self.larch)) self.fit_report.SetEditable(True) self.fit_report.SetValue(dtext) self.fit_report.SetEditable(False) popts1 = dict(style='solid', linewidth=3, marker='None', markersize=4) popts2 = dict(style='short dashed', linewidth=2, marker='None', markersize=4) lgroup.plot_yarrays = [(lgroup._ydat_, popts1, lgroup.plot_ylabel)] if bkg is None: lgroup._fit = pgroup.fit[:] lgroup.plot_yarrays.append((lgroup._fit, popts2, 'fit')) else: lgroup._fit = pgroup.fit[:] lgroup._fit_bgr = pgroup.bkg[:] lgroup.plot_yarrays.append((lgroup._fit, popts2, 'fit')) lgroup.plot_yarrays.append((lgroup._fit_bgr, popts2, 'background')) self.onPlot()
def onFitPeak(self, evt=None): gname = self.groupname if self.dtcorr.IsChecked(): print('fit needs to dt correct!') dtext = [] model = self.fit_model.GetStringSelection().lower() dtext.append('Fit Model: %s' % model) bkg = self.fit_bkg.GetStringSelection() if bkg == 'None': bkg = None if bkg is None: dtext.append('No Background') else: dtext.append('Background: %s' % bkg) step = self.fit_step.GetStringSelection().lower() if model in ('step', 'rectangle'): dtext.append('Step form: %s' % step) lgroup = getattr(self.larch.symtable, gname) x = lgroup._x1_ y = lgroup._y1_ pgroup = fit_peak(x, y, model, background=bkg, step=step, _larch=self.larch) text = fit_report(pgroup.params, _larch=self.larch) dtext.append('Parameters: ') for pname in dir(pgroup.params): par = getattr(pgroup.params, pname) if isParameter(par): ptxt = " %s= %.4f" % (par.name, par.value) if (hasattr(par, 'stderr') and par.stderr is not None): ptxt = "%s(%.4f)" % (ptxt, par.stderr) dtext.append(ptxt) dtext = '\n'.join(dtext) # plotframe = self.get_plotwindow() # plotframe.oplot(x, pgroup.fit, label='fit (%s)' % model) text = fit_report(pgroup.params, _larch=self.larch) self.fit_report.SetLabel(dtext)
def show_report(self, fitresult, evt=None): shown = False try: self.report_frame.Raise() shown = True except: del self.report_frame if not shown: self.report_frame = ReportFrame(self.wxparent) model_repr = fitresult.model._reprstring(long=True) report = fit_report(fitresult, show_correl=True, min_correl=0.25, sort_pars=True) self.report_frame.SetFont(Font(8)) self.report_frame.set_text(report) self.report_frame.SetFont(Font(8)) self.report_frame.Raise()
def onFitPeaks(self, event=None): opts = {} filters, peaks = [], [] sig, det, bgr = {}, {}, {} opts['flyield'] = self.wids.flyield_use.IsChecked() opts['xray_en'] = self.wids.xray_en.GetValue() opts['emin'] = self.wids.fit_emin.GetValue() opts['emax'] = self.wids.fit_emax.GetValue() det['use'] = self.wids.det_use.IsChecked() det['thickness'] = self.wids.det_thk.GetValue() det['material'] = self.wids.det_mat.GetStringSelection() bgr['use'] = self.wids.bgr_use.IsChecked() bgr['width'] = self.wids.bgr_width.GetValue() bgr['compress'] = int(self.wids.bgr_compress.GetStringSelection()) bgr['exponent'] = int(self.wids.bgr_exponent.GetStringSelection()) sig['offset'] = self.wids.sig_offset.param sig['slope'] = self.wids.sig_slope.param sig['quad'] = self.wids.sig_quad.param for k in self.wids.filters: f = (k[0].GetStringSelection(), k[1].GetValue(), k[2].param) filters.append(f) for k in self.wids.peaks: use = k[0].IsChecked() p = (k[0].IsChecked(), k[1].param, k[2].param, k[3].param) peaks.append(p) if not use: k[1].param.vary = False k[2].param.vary = False k[3].param.vary = False opts['det'] = det opts['bgr'] = bgr opts['sig'] = sig opts['filters'] = filters opts['peaks'] = peaks mca = self.mca mca.data = mca.counts * 1.0 energy = mca.energy _larch = self.parent.larch if bgr['use']: bgr.pop('use') xrf_background(energy=mca.energy, counts=mca.counts, group=mca, _larch=_larch, **bgr) opts['use_bgr'] = True opts['mca'] = mca if det['use']: mu = material_mu(det['material'], energy * 1000.0, _larch=_larch) / 10.0 t = det['thickness'] mca.det_atten = np.exp(-t * mu) fit = Minimizer(xrf_resid, self.paramgroup, toler=1.e-4, _larch=_larch, fcn_kws=opts) fit.leastsq() parent = self.parent parent.oplot(mca.energy, mca.model, label='fit', style='solid', color='#DD33DD') print(fitting.fit_report(self.paramgroup, _larch=_larch))
def onFitPeaks(self, event=None): opts = {} filters, peaks = [], [] sig, det, bgr = {}, {}, {} opts['flyield'] = self.wids.flyield_use.IsChecked() opts['xray_en'] = self.wids.xray_en.GetValue() opts['emin'] = self.wids.fit_emin.GetValue() opts['emax'] = self.wids.fit_emax.GetValue() det['use'] = self.wids.det_use.IsChecked() det['thickness'] = self.wids.det_thk.GetValue() det['material'] = self.wids.det_mat.GetStringSelection() bgr['use'] = self.wids.bgr_use.IsChecked() bgr['width'] = self.wids.bgr_width.GetValue() bgr['compress'] = int(self.wids.bgr_compress.GetStringSelection()) bgr['exponent'] = int(self.wids.bgr_exponent.GetStringSelection()) sig['offset'] = self.wids.sig_offset.param sig['slope'] = self.wids.sig_slope.param sig['quad'] = self.wids.sig_quad.param for k in self.wids.filters: f = (k[0].GetStringSelection(), k[1].GetValue(), k[2].param) filters.append(f) for k in self.wids.peaks: use = k[0].IsChecked() p = (k[0].IsChecked(), k[1].param, k[2].param, k[3].param) peaks.append(p) if not use: k[1].param.vary = False k[2].param.vary = False k[3].param.vary = False opts['det'] = det opts['bgr'] = bgr opts['sig'] = sig opts['filters'] = filters opts['peaks'] = peaks mca = self.mca mca.data = mca.counts*1.0 energy = mca.energy _larch = self.parent.larch if bgr['use']: bgr.pop('use') xrf_background(energy=mca.energy, counts=mca.counts, group=mca, _larch=_larch, **bgr) opts['use_bgr']=True opts['mca'] = mca if det['use']: mu = material_mu(det['material'], energy*1000.0, _larch=_larch)/10.0 t = det['thickness'] mca.det_atten = np.exp(-t*mu) fit = Minimizer(xrf_resid, self.paramgroup, toler=1.e-4, _larch=_larch, fcn_kws = opts) fit.leastsq() parent = self.parent parent.oplot(mca.energy, mca.model, label='fit', style='solid', color='#DD33DD') print( fitting.fit_report(self.paramgroup, _larch=_larch))
def fit_report(self, params=None, min_correl=0.2, **kws): if params is None: params = self.params return fitting.fit_report(params, min_correl=min_correl, _larch=self._larch, **kws)