Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
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
Exemplo n.º 3
0
 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')
Exemplo n.º 4
0
 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