示例#1
0
 def onedfit(self, usemoments=True, annotate=True, vheight=True, height=0, negamp=None,**kwargs):
     self.ngauss = 1
     self.auto = True
     self.setfitspec()
     if usemoments: # this can be done within gaussfit but I want to save them
         self.guesses = gaussfitter.onedmoments(
                 self.specplotter.vind[self.gx1:self.gx2],
                 self.spectofit[self.gx1:self.gx2],
                 vheight=vheight,negamp=negamp,**kwargs)
         if vheight is False: self.guesses = [height]+self.guesses
     else:
         if negamp: self.guesses = [height,-1,0,1]
         else:  self.guesses = [height,1,0,1]
     mpp,model,mpperr,chi2 = gaussfitter.onedgaussfit(
             self.specplotter.vind[self.gx1:self.gx2],
             self.spectofit[self.gx1:self.gx2],
             err=self.errspec[self.gx1:self.gx2],
             vheight=vheight,
             params=self.guesses,
             **self.fitkwargs)
     self.chi2 = chi2
     self.dof  = self.gx2-self.gx1-self.ngauss*3-vheight
     if vheight: 
         self.specplotter.baseline.baselinepars = mpp[:1] # first item in list form
         self.model = model - mpp[0]
     else: self.model = model
     self.residuals = self.spectofit[self.gx1:self.gx2] - self.model
     self.modelpars = mpp[1:].tolist()
     self.modelerrs = mpperr[1:].tolist()
     self.modelplot = self.specplotter.axis.plot(
             self.specplotter.vind[self.gx1:self.gx2],
             self.model+self.specplotter.offset, color=self.fitcolor, linewidth=0.5)
     if annotate:
         self.annotate()
         if vheight: self.specplotter.baseline.annotate()
示例#2
0
 def onedfit(self, usemoments=True, annotate=True, vheight=True, height=0, negamp=None,**kwargs):
     self.ngauss = 1
     self.auto = True
     self.setfitspec()
     if usemoments: # this can be done within gaussfit but I want to save them
         self.guesses = gaussfitter.onedmoments(
                 self.specplotter.vind[self.gx1:self.gx2],
                 self.spectofit[self.gx1:self.gx2],
                 vheight=vheight,negamp=negamp,**kwargs)
         if vheight is False: self.guesses = [height]+self.guesses
     else:
         if negamp: self.guesses = [height,-1,0,1]
         else:  self.guesses = [height,1,0,1]
     mpp,model,mpperr,chi2 = gaussfitter.onedgaussfit(
             self.specplotter.vind[self.gx1:self.gx2],
             self.spectofit[self.gx1:self.gx2],
             err=self.errspec[self.gx1:self.gx2],
             vheight=vheight,
             params=self.guesses,
             **self.fitkwargs)
     self.chi2 = chi2
     self.dof  = self.gx2-self.gx1-self.ngauss*3-vheight
     if vheight: 
         self.specplotter.baseline.baselinepars = mpp[:1] # first item in list form
         self.model = model - mpp[0]
     else: self.model = model
     self.residuals = self.spectofit[self.gx1:self.gx2] - self.model
     self.modelpars = mpp[1:].tolist()
     self.modelerrs = mpperr[1:].tolist()
     self.modelplot = self.specplotter.axis.plot(
             self.specplotter.vind[self.gx1:self.gx2],
             self.model+self.specplotter.offset, color=self.fitcolor, linewidth=0.5)
     if annotate:
         self.annotate()
         if vheight: self.specplotter.baseline.annotate()
示例#3
0
 def selectregion(self,event):
     if self.nclicks_b1 == 0:
         self.gx1 = argmin(abs(event.xdata-self.specplotter.vind))
         self.nclicks_b1 += 1
     elif self.nclicks_b1 == 1:
         self.gx2 = argmin(abs(event.xdata-self.specplotter.vind))
         self.nclicks_b1 -= 1
         if self.gx1 > self.gx2: self.gx1,self.gx2 = self.gx2,self.gx1
         if abs(self.gx1-self.gx2) > 3: # can't fit w/ fewer data than pars
             self.fitregion = self.specplotter.axis.plot(
                     self.specplotter.vind[self.gx1:self.gx2],
                     self.specplotter.spectrum[self.gx1:self.gx2]+self.specplotter.offset,
                     drawstyle='steps-mid',
                     color='c')
             if self.guesses == []:
                 self.guesses = gaussfitter.onedmoments(
                         self.specplotter.vind[self.gx1:self.gx2],
                         self.spectofit[self.gx1:self.gx2],
                         vheight=0)
                 self.ngauss = 1
                 self.auto = True
         else:
             print "Fitting region is too small (channels %i:%i).  Try again." % (self.gx1,self.gx2)
示例#4
0
 def selectregion(self,event):
     if self.nclicks_b1 == 0:
         self.gx1 = argmin(abs(event.xdata-self.specplotter.vind))
         self.nclicks_b1 += 1
     elif self.nclicks_b1 == 1:
         self.gx2 = argmin(abs(event.xdata-self.specplotter.vind))
         self.nclicks_b1 -= 1
         if self.gx1 > self.gx2: self.gx1,self.gx2 = self.gx2,self.gx1
         if abs(self.gx1-self.gx2) > 3: # can't fit w/ fewer data than pars
             self.fitregion = self.specplotter.axis.plot(
                     self.specplotter.vind[self.gx1:self.gx2],
                     self.specplotter.spectrum[self.gx1:self.gx2]+self.specplotter.offset,
                     drawstyle='steps-mid',
                     color='c')
             if self.guesses == []:
                 self.guesses = gaussfitter.onedmoments(
                         self.specplotter.vind[self.gx1:self.gx2],
                         self.spectofit[self.gx1:self.gx2],
                         vheight=0)
                 self.ngauss = 1
                 self.auto = True
         else:
             print("Fitting region is too small (channels %i:%i).  Try again." % (self.gx1,self.gx2))