def guess_parameters(self): fit = Fit(self.data, self.functions) y = np.array(fit.y) for f in self.functions: guess = f.module.guess(fit.x, y) map(lambda p, g: p.__setattr__('value', g), f.parameters, guess) y = y - f.module.values(fit.x, guess)
def mfit(data, xmin, xmax, ymin, ymax, dy): fs = [Function('Linear', linear), Function('Gaussian', gaussian)] x = np.linspace(xmin, xmax, 200) ylo, yhi = ymin, ymin + dy while yhi < ymax: slab = data[ylo:yhi, xmin:xmax] diff = slab.nxsignal.shape[0] cut = slab.sum([0]) cut.plot() fit = Fit(cut, fs, use_errors=True) y = np.array(fit.y) for f in fs: f.guess_parameters(fit.x, y) y = y - f.function_values(fit.x) fit.fit_data() NXdata(fit.get_model(x), x).oplot('-') if raw_input('Keep? [y,N] ') == 'y': data[ylo:yhi, xmin:xmax] = slab - fit.get_model(f=fs[1]) / diff ylo = yhi yhi = ylo + dy return data
def get_model(self, f=None): self.read_parameters() fit = Fit(self.data, self.functions) if self.plot_checkbox.isChecked(): x = fit.x else: x = np.linspace(float(self.plot_minbox.text()), float(self.plot_maxbox.text()), 1001) return NXdata(NXfield(fit.get_model(x, f), name='model'), NXfield(x, name=fit.data.nxaxes[0].nxname), title='Fit Results')
def fit_data(self): self.read_parameters() if self.fit_checkbox.isChecked(): use_errors = True else: use_errors = False from nexpy.gui.mainwindow import report_error try: self.fit = Fit(self.data, self.functions, use_errors) self.fit.fit_data() except Exception as error: report_error("Fitting Data", error) if self.fit.result.success: self.fit_label.setText('Fit Successful Chi^2 = %s' % self.fit.result.redchi) else: self.fit_label.setText('Fit Failed Chi^2 = %s' % self.fit.result.redchi) self.write_parameters() if not self.fitted: self.action_layout.addWidget(self.report_button) self.action_layout.addWidget(self.restore_button) self.save_button.setText('Save Fit') self.fitted = True