Beispiel #1
0
 def menu_do_fit(self):
    """ Private method """
    degree = self.widgets.fit_type.index(
                              self.widgets.fit_type.getcurselection()) + 1
    use = []
    for i in range(self.nrois):
       if (self.roi[i].use): use.append(i)
    nuse = len(use)
    if ((degree == 1) and (nuse < 2)):
       tkMessageBox.showerror(title='mcaCalibateEnergy Error', 
          message='Must have at least two valid points for linear calibration')
       return
    elif ((degree == 2) and (nuse < 3)):
       tkMessageBox.showerror(title='mcaCalibateEnergy Error', 
          message='Must have at least three valid points for quadratic calibration')
       return
    chan=Numeric.zeros(nuse, Numeric.Float)
    energy=Numeric.zeros(nuse, Numeric.Float)
    weights=Numeric.ones(nuse, Numeric.Float)
    for i in range(nuse):
       chan[i] = self.roi[use[i]].centroid
       energy[i] = self.roi[use[i]].energy
    coeffs = CARSMath.polyfitw(chan, energy, weights, degree)
    self.calibration.offset = coeffs[0]
    self.widgets.cal_offset.setentry(str(self.calibration.offset))
    self.calibration.slope = coeffs[1]
    self.widgets.cal_slope.setentry(str(self.calibration.slope))
    if (degree == 2):
       self.calibration.quad = coeffs[2]
    else:
       self.calibration.quad = 0.0
    self.widgets.cal_quad.setentry(str(self.calibration.quad))
    self.mca.set_calibration(self.calibration)
    for i in range(self.nrois):
       energy_diff = (self.roi[i].energy -
                      self.mca.channel_to_energy(self.roi[i].centroid))
       self.widgets.energy_diff[i].configure(text=('%.4f' % energy_diff))
       # Recompute FWHM
       self.roi[i].fwhm = (self.mca.channel_to_energy(self.roi[i].centroid + 
                                 self.fwhm_chan[i]/2.) - 
                         self.mca.channel_to_energy(self.roi[i].centroid -
                                 self.fwhm_chan[i]/2.))
       self.widgets.fwhm[i].configure(text=('%.3f' % self.roi[i].fwhm))