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))