ROOT logo
#include "TPeakFitGUI.h"

ClassImp(TPeakFitGUI)

#define __FITGUIW__ 300
#define __FITGUIH__ 280
#define POS(A,B) A+B*16

TPeakFitGUI::TPeakFitGUI(TH1* hist, TVirtualPad* pad):TGTransientFrame(gClient->GetRoot(),gClient->GetRoot(),__FITGUIW__,__FITGUIH__)
{
  char title[200];
  int w = __FITGUIW__;
  int h = __FITGUIH__;
  TString system = gSystem->GetBuildArch();
  if(system.BeginsWith("linux"))
  {
    mFrame1 = new TGGroupFrame(this," Peaks ");
    mFrame1->MoveResize(4,4,w-8,77); 
    mFrame2 = new TGGroupFrame(this," Background ");
    mFrame2->MoveResize(4,80,w-8,77); 
  }
  else
  {
    TGHorizontal3DLine *h;
    TGVertical3DLine *v;
    TGLabel *l = new TGLabel(this," Peaks ");
    l->MoveResize(16,4); 
    int x = 4;
    int y = 10;
    int wid = w-8;
    int hei = 62;
    h = new TGHorizontal3DLine(this,wid); h->Move(x,y);
    h = new TGHorizontal3DLine(this,wid); h->Move(x,y+hei-1);
    v = new TGVertical3DLine(this,2,hei); v->Move(x,y);
    v = new TGVertical3DLine(this,2,hei); v->Move(x+wid-1,y);

    l = new TGLabel(this," Background ");
    l->MoveResize(16,80); 

    y = 86;
    h = new TGHorizontal3DLine(this,wid); h->Move(x,y);
    h = new TGHorizontal3DLine(this,wid); h->Move(x,y+hei-1);
    v = new TGVertical3DLine(this,2,hei); v->Move(x,y);
    v = new TGVertical3DLine(this,2,hei); v->Move(x+wid-1,y);
  }

  mP1 = new TGRadioButton(this,"Peaks",101);
  mP2 = new TGRadioButton(this,"Peaks + 1 width",102);
  mP3 = new TGRadioButton(this,"Peaks + width",103);
  mPC1 = new TGCheckButton(this,"Asymm. gaus",100);
  mPC2 = new TGCheckButton(this,"Same width",106);
  mP1->Move(8,POS(4,1));
  mP2->Move(8,POS(4,2));
  mP3->Move(8,POS(4,3));
  mPC1->Move(125,POS(4,1));
  mPC2->Move(125,POS(4,2));
    
  mB1 = new TGRadioButton(this,"None",201);
  mB2 = new TGRadioButton(this,"Const",202);
  mB3 = new TGRadioButton(this,"1st degree",203);
  mB4 = new TGRadioButton(this,"      degree",206);
  mBC1 = new TGCheckButton(this,"Independent",100);
  mBP = new TGTextEntry(this,"",-1);
  mB1->Move(8,POS(80,1));
  mB2->Move(8,POS(80,2));
  mB3->Move(8,POS(80,3));
  mB4->Move(125,POS(80,1));
  mBP->MoveResize(140,POS(80,1),24,16);
  mBC1->Move(125,POS(80,3));
  
  mPGrab = new TGTextButton(this,"Grab",104);
  mPReset = new TGTextButton(this,"Reset",105);
  mPGrab->MoveResize(230,POS(4,1),60,22);
  mPReset->MoveResize(230,POS(4,1)+26,60,22);
  
  mBGrab = new TGTextButton(this,"Grab",204);
  mBReset = new TGTextButton(this,"Reset",205);
  mBGrab->MoveResize(230,POS(80,1),60,22);
  mBReset->MoveResize(230,POS(80,1)+26,60,22);
  
  mDet = new TGTextButton(this,"Details",999);
  mFit = new TGTextButton(this,"Fit",1000);
  mImp = new TGTextButton(this,"Improve fit",1006);
  mReset = new TGTextButton(this,"Reset",1001);
  
  mDraw = new TGTextButton(this,"Draw",1003);
  mClear = new TGTextButton(this,"Clear",1004);
  mPrint = new TGTextButton(this,"Print",1005);
  
  mClose = new TGTextButton(this,"Close",1002);
  
  mDet->MoveResize(4,160,w/3-4,25);
  mReset->MoveResize(w/3+2,160,w/3-4,25);
  mClose->MoveResize(2*w/3,160,w/3-4,25);
  mDraw->MoveResize(4,190,w/3-4,25);
  mClear->MoveResize(w/3+2,190,w/3-4,25);
  mPrint->MoveResize(2*w/3,190,w/3-4,25);
  mFit->MoveResize(4,220,w-4,25);
  mImp->MoveResize(4,250,w-4,25);
  
  MapSubwindows();
  MapWindow();  
  SetWMSizeHints(w, h, w, h,1,1);
  
  mTrash1 = new TContainer();
  mTrash1->setSizeMax(500);
  mTrash2 = new TContainer();
  mTrash2->setSizeMax(500);
   
  mPeakFit = new TPeakFit();
  mPeakFit->setHist(hist);
  mGrabPad = pad;
  
  gROOT->Add(this);
  TList *l = gROOT->GetList();
  int n = l->GetSize();
  int id = -1;
  for(int i=0;i<n;i++) if(l->At(i)==this) { id=i; break;}
  if(id<0) cout<<"Could not find pointer to this class\n";
  else
  {
    mCommand = "((TPeakFitGUI*)(gROOT->GetList()->At(";
    mCommand+=id;
    mCommand+= ")))->grab();";
    //cout <<mCommand<<endl;
  }
  
  if(!hist) delete this;
  sprintf(title,"Peak fit - %s",hist->GetName());
  SetWindowName(title);
  
  reset();

}
TPeakFitGUI::~TPeakFitGUI()
{
  delete mPeakFit; mPeakFit = NULL;
  delete mTrash1; mTrash1 = NULL;
  delete mTrash2; mTrash2 = NULL;
  mGrabPad->Update();
  
  //GUI elements are deleted automatically????
  /*
  delete mFit;
  delete mP1;
  delete mP2;
  delete mP3;
  delete mB1;
  delete mB2;
  delete mB3;
  delete mB4;
  delete mPC1;
  delete mPC2;
  delete mBC1;
  delete mPGrab;
  delete mPReset;
  delete mBGrab;
  delete mBReset;
  delete mDet;
  delete mReset;
  delete mClose; 
  delete mFrame1;
  delete mFrame2;
  */ 
  
}
void TPeakFitGUI::reset(int mode)
{
  mFitDone = false;
  if(mode==0 || mode==1)
  {
    mP1->SetState(kButtonDown);
    mP2->SetState(kButtonUp);
    mP3->SetState(kButtonUp);
    mPC1->SetState(kButtonUp);
    mPC2->SetState(kButtonUp);
    mTrash1->empty();
    mNP = 0;
    mSI[0] = 5;
  }
  
  if(mode==0 || mode==2)
  {
    mB1->SetState(kButtonUp);
    mB2->SetState(kButtonUp);
    mB3->SetState(kButtonDown);
    mB4->SetState(kButtonUp);
    mBC1->SetState(kButtonUp);
    mTrash2->empty();
    mNB = 0;
  }
  if(mGrabPad) mGrabPad->Update();
}
void TPeakFitGUI::CloseWindow()
{
  delete this;
}
bool TPeakFitGUI::ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2)
{
  switch (GET_MSG(msg)) 
  {
    case kC_COMMAND:
      switch (GET_SUBMSG(msg)) 
      {
        case kCM_BUTTON:
          switch (parm1) 
          {
            case 104:
              if(!strcmp("Stop grab",(mPGrab->GetString()).Data()))
              { 
                mPGrab->SetText("Grab");
                mGrabPad->DeleteExec("grab");
              } else grabMode(1);
              break;
            case 105:
              reset(1);
              break;
            case 204:
              if(!strcmp("Stop grab",(mBGrab->GetString()).Data()))
              { 
                mBGrab->SetText("Grab");
                mGrabPad->DeleteExec("grab");
              } else grabMode(2);
              break;
            case 205:
              reset(2);
              break;
            case 999:
              details();
              break;
            case 1000:
              fit();
              break;
            case 1001:
              reset();
              break;
            case 1002:
              delete this;
              break;
            case 1003:
              draw();
              break;
            case 1004:
              clear();
              break;
            case 1005:
              print();
              break;
            case 1006:
              fit(1);
              break;
          }
          break;
        case kCM_RADIOBUTTON:
          switch (parm1) 
          {
            case 101:
              mP1->SetState(kButtonDown);
              mP2->SetState(kButtonUp);
              mP3->SetState(kButtonUp);
              break;
            case 102:
              mP1->SetState(kButtonUp);
              mP2->SetState(kButtonDown);
              mP3->SetState(kButtonUp);
              break;
            case 103:
              mP1->SetState(kButtonUp);
              mP2->SetState(kButtonUp);
              mP3->SetState(kButtonDown);
               break;
            case 201:
              mB1->SetState(kButtonDown);
              mB2->SetState(kButtonUp);
              mB3->SetState(kButtonUp);
              mB4->SetState(kButtonUp);
              break;
            case 202:
              mB1->SetState(kButtonUp);
              mB2->SetState(kButtonDown);
              mB3->SetState(kButtonUp);
              mB4->SetState(kButtonUp);
              break;
            case 203:
              mB1->SetState(kButtonUp);
              mB2->SetState(kButtonUp);
              mB3->SetState(kButtonDown);
              mB4->SetState(kButtonUp);
              break;
            case 206:
              mB1->SetState(kButtonUp);
              mB2->SetState(kButtonUp);
              mB3->SetState(kButtonUp);
              mB4->SetState(kButtonDown);
          }
          break;
     }
  }
  return true;
}
void TPeakFitGUI::grabMode(int mode)
{
  if(!mGrabPad) return;
  mGrabPad->cd();
  if(!strcmp("Stop grab",(mPGrab->GetString()).Data()))
  {
    mPGrab->SetText("Grab");
    mGrabPad->DeleteExec("grab");
    //mGrabPad = NULL;
  }
  if(!strcmp("Stop grab",(mBGrab->GetString()).Data()))
  {
    mBGrab->SetText("Grab");
    mGrabPad->DeleteExec("grab");
    //mGrabPad = NULL;
  }
  if(mode==1)
  {
    mGrabType = 1;
    mPGrab->SetText("Stop grab");
    if(mP1->GetState()==kButtonDown) mGrabMode = 0;
    if(mP2->GetState()==kButtonDown) mGrabMode = 1;
    if(mP3->GetState()==kButtonDown) mGrabMode = 2;
  }
  if(mode==2)
  {
    mBGrab->SetText("Stop grab");
    mGrabType = 2;
    mGrabMode = 0;
  }
  mFitDone = false;
  draw();
  mGrabPad->AddExec("grab",mCommand.Data());
  mFlag = 0;
   
}
void TPeakFitGUI::fit(int mode)
{
  int i;
  float y;
  float Y[MAXPOINTS];
  if(!mPeakFit) return;
  mGrabPad->cd();
  clear();
  
  mPeakFit->setXmin(mGrabPad->GetUxmin());
  mPeakFit->setXmax(mGrabPad->GetUxmax());
  
  if(mPC1->GetState()==kButtonDown)     mPeakFit->setAssymOnOff(true);
  else mPeakFit->setAssymOnOff(false);
  
  if(mPC2->GetState()==kButtonDown)     mPeakFit->setSameWidth(true);
  else mPeakFit->setSameWidth(false);
  
  if(mB1->GetState()==kButtonDown)      mPeakFit->setBackDegree(-1);
  else if(mB2->GetState()==kButtonDown) mPeakFit->setBackDegree(0);
  else if(mB3->GetState()==kButtonDown) mPeakFit->setBackDegree(1);
  else if(mB4->GetState()==kButtonDown) 
  {
    int d = atoi(mBP->GetText());
    if(d<1) {d = 1; mBP->SetText("1");}
    if(d>9) {d = 9; mBP->SetText("9");}
    mPeakFit->setBackDegree(d);
  }
  
  if(mBC1->GetState()==kButtonDown)     mPeakFit->setIndependentBack(true);
  else mPeakFit->setIndependentBack(false);
  
  if(mode==0 || !mFitDone)
  {
    mPeakFit->removeAll();
    mPeakFit->setBackground(mNB,mBX,mBY);
    mPeakFit->fitBack();
    TF1 *f=mPeakFit->getBack();
    for(i=0;i<mNP;i++)
    {
      y  = f->Eval(mPX[i]);
      Y[i] = mPY[i]-y;
      mPeakFit->addPeak(Y[i],mPX[i],mSI[i],1);
    }
  }
  mPeakFit->fit();
  mPeakFit->draw();
  mFitDone = true;
}
void TPeakFitGUI::details()
{
  TString l[20];
  TString v[20];
  int n = 7;
  int stat;
  int i;
  
  for(i=0;i<20;i++)
  {
    l[i]="";
    v[i]="";
  }
  
  l[0] = "      Max peak position shift (absolute)     ";
  l[1] = "Max width variation (absolute)";
  l[2] = "Min area (relative)";
  l[3] = "Max area (relavite)";
  l[4] = "Min asymmetry (absolute)";
  l[5] = "Max asymmetry (absolute)";
  l[6] = "Max Back parameters variation (relavite)";
  
  if(mPeakFit)
  {
    v[0]+=mPeakFit->getPeakVar();
    v[1]+=mPeakFit->getWidthVar();
    v[2]+=mPeakFit->getMinArea();
    v[3]+=mPeakFit->getMaxArea();
    v[4]+=mPeakFit->getMinAssym();
    v[5]+=mPeakFit->getMaxAssym();
    v[6]+=mPeakFit->getBackVar();
  }
    
  new TDialog("Fit details",n,l,v,&stat);
  if(stat!=1) return;
  if(mPeakFit)
  {
    mPeakFit->setPeakVar(atof(v[0].Data()));
    mPeakFit->setWidthVar(atof(v[1].Data()));
    mPeakFit->setMinArea(atof(v[2].Data()));
    mPeakFit->setMaxArea(atof(v[3].Data()));
    mPeakFit->setMinAssym(atof(v[4].Data()));
    mPeakFit->setMaxAssym(atof(v[5].Data()));
    mPeakFit->setBackVar(atof(v[6].Data()));
  }
  
}
void TPeakFitGUI::grab()
{
   if(!mGrabPad) return;
   //example of macro called when a pad is redrawn
   //one must create a TExec object in the following way
   // TExec ex("ex",".x exec1.C");
   // ex.Draw();
   // this macro prints the bin number and the bin content when one clicks
   //on the histogram contour of any histogram in a pad
   int   event = mGrabPad->GetEvent();
   int   px = mGrabPad->GetEventX();
   int   py = mGrabPad->GetEventY();
   float xx = mGrabPad->AbsPixeltoX(px);
   float x  = mGrabPad->PadtoX(xx);
   float yy = mGrabPad->AbsPixeltoY(py);
   float y  = mGrabPad->PadtoY(yy);
   float X1 = mGrabPad->GetUxmin();
   float X2 = mGrabPad->GetUxmax();
   float Y1 = mGrabPad->GetUymin();
   float Y2 = mGrabPad->GetUymax();
   
   float XXX = x;
   float YYY = y;
   if(atoi(gROOT->GetVersion())<4)
   {
     XXX = xx;
     YYY = yy;
   }
   //printf("event=%d, px=%d, xx=%f, x=%f py=%d, yy=%f, y=%f \n",event,px,xx,x,py,yy,y);
   if(xx>X1 && xx<X2 && yy>Y1 && yy<Y2) // inside histogram region
   {
    if(event == 11 || event == 24) // click or enter
    {
      if(mGrabMode==0 || mFlag==0) // grab only points
      {
        if(mGrabType==1) // grab peaks
        {
          mPX[mNP] = x;
          mPY[mNP] = y;
          TMarker *p = new TMarker(XXX,YYY,2);
          p->Draw();
          p->SetMarkerColor(6);
          mTrash1->add(p);
        }
        if(mGrabType==2) // grab background
        {
          mGrabMode = 0;
          mBX[mNB] = x;
          mBY[mNB] = y;
          mBpX[mNB] = XXX;
          mBpY[mNB] = YYY;
          TMarker *p = new TMarker(XXX,YYY,3);
          p->Draw();
          p->SetMarkerColor(8);
          mTrash2->add(p);
          if(mNB>0)
          {
            TLine* L = new TLine(mBpX[mNB-1],mBpY[mNB-1],mBpX[mNB],mBpY[mNB]);
            L->Draw();        
            L->SetLineColor(8);
            mTrash2->add(L);
          }
          mNB++;
        }
        if(mGrabMode==0 && mGrabType==1) { mSI[mNP] = mSI[0]; mNP++; }
        if(mGrabMode!=0) mFlag=1; // set mFlag to next level if mode != 0
        return;
      }
      if(mFlag==1) // grab first point of line
      {
        mXL = x;
        mYL = y;
        mpXL = XXX;
        mpYL = YYY;
        mFlag = 2;
        return;
      }
      if(mFlag==2) // grab last point
      {
        mSI[mNP] = fabs(mXL-x)/2.;
        mNP++;
        TLine* L = new TLine(mpXL,(mpYL+YYY)/2,XXX,(mpYL+YYY)/2);
        L->Draw();
        mTrash1->add(L);
        L->SetLineColor(6);
        mFlag = 0;
        if(mGrabMode==1) mGrabMode =0;
        return;
      }
    }
  }
}
void TPeakFitGUI::clear()
{
  int i;
  TList *l;
  if(!mGrabPad) return;
  l = mTrash1->getList();
  for(i=0;i<l->GetSize();i++) mGrabPad->RecursiveRemove(l->At(i));
  l = mTrash2->getList();
  for(i=0;i<l->GetSize();i++) mGrabPad->RecursiveRemove(l->At(i));
  mGrabPad->Update();
  return;
}
void TPeakFitGUI::draw()
{
  int i;
  TList *l;
  if(!mGrabPad) return;
  mGrabPad->cd();
  l = mTrash1->getList();
  for(i=0;i<l->GetSize();i++) l->At(i)->Draw();
  l = mTrash2->getList();
  for(i=0;i<l->GetSize();i++) l->At(i)->Draw();
  mGrabPad->Update();
  return;
}
void TPeakFitGUI::print()
{
  if(mPeakFit) mPeakFit->print();
  return;
}

 TPeakFitGUI.cxx:1
 TPeakFitGUI.cxx:2
 TPeakFitGUI.cxx:3
 TPeakFitGUI.cxx:4
 TPeakFitGUI.cxx:5
 TPeakFitGUI.cxx:6
 TPeakFitGUI.cxx:7
 TPeakFitGUI.cxx:8
 TPeakFitGUI.cxx:9
 TPeakFitGUI.cxx:10
 TPeakFitGUI.cxx:11
 TPeakFitGUI.cxx:12
 TPeakFitGUI.cxx:13
 TPeakFitGUI.cxx:14
 TPeakFitGUI.cxx:15
 TPeakFitGUI.cxx:16
 TPeakFitGUI.cxx:17
 TPeakFitGUI.cxx:18
 TPeakFitGUI.cxx:19
 TPeakFitGUI.cxx:20
 TPeakFitGUI.cxx:21
 TPeakFitGUI.cxx:22
 TPeakFitGUI.cxx:23
 TPeakFitGUI.cxx:24
 TPeakFitGUI.cxx:25
 TPeakFitGUI.cxx:26
 TPeakFitGUI.cxx:27
 TPeakFitGUI.cxx:28
 TPeakFitGUI.cxx:29
 TPeakFitGUI.cxx:30
 TPeakFitGUI.cxx:31
 TPeakFitGUI.cxx:32
 TPeakFitGUI.cxx:33
 TPeakFitGUI.cxx:34
 TPeakFitGUI.cxx:35
 TPeakFitGUI.cxx:36
 TPeakFitGUI.cxx:37
 TPeakFitGUI.cxx:38
 TPeakFitGUI.cxx:39
 TPeakFitGUI.cxx:40
 TPeakFitGUI.cxx:41
 TPeakFitGUI.cxx:42
 TPeakFitGUI.cxx:43
 TPeakFitGUI.cxx:44
 TPeakFitGUI.cxx:45
 TPeakFitGUI.cxx:46
 TPeakFitGUI.cxx:47
 TPeakFitGUI.cxx:48
 TPeakFitGUI.cxx:49
 TPeakFitGUI.cxx:50
 TPeakFitGUI.cxx:51
 TPeakFitGUI.cxx:52
 TPeakFitGUI.cxx:53
 TPeakFitGUI.cxx:54
 TPeakFitGUI.cxx:55
 TPeakFitGUI.cxx:56
 TPeakFitGUI.cxx:57
 TPeakFitGUI.cxx:58
 TPeakFitGUI.cxx:59
 TPeakFitGUI.cxx:60
 TPeakFitGUI.cxx:61
 TPeakFitGUI.cxx:62
 TPeakFitGUI.cxx:63
 TPeakFitGUI.cxx:64
 TPeakFitGUI.cxx:65
 TPeakFitGUI.cxx:66
 TPeakFitGUI.cxx:67
 TPeakFitGUI.cxx:68
 TPeakFitGUI.cxx:69
 TPeakFitGUI.cxx:70
 TPeakFitGUI.cxx:71
 TPeakFitGUI.cxx:72
 TPeakFitGUI.cxx:73
 TPeakFitGUI.cxx:74
 TPeakFitGUI.cxx:75
 TPeakFitGUI.cxx:76
 TPeakFitGUI.cxx:77
 TPeakFitGUI.cxx:78
 TPeakFitGUI.cxx:79
 TPeakFitGUI.cxx:80
 TPeakFitGUI.cxx:81
 TPeakFitGUI.cxx:82
 TPeakFitGUI.cxx:83
 TPeakFitGUI.cxx:84
 TPeakFitGUI.cxx:85
 TPeakFitGUI.cxx:86
 TPeakFitGUI.cxx:87
 TPeakFitGUI.cxx:88
 TPeakFitGUI.cxx:89
 TPeakFitGUI.cxx:90
 TPeakFitGUI.cxx:91
 TPeakFitGUI.cxx:92
 TPeakFitGUI.cxx:93
 TPeakFitGUI.cxx:94
 TPeakFitGUI.cxx:95
 TPeakFitGUI.cxx:96
 TPeakFitGUI.cxx:97
 TPeakFitGUI.cxx:98
 TPeakFitGUI.cxx:99
 TPeakFitGUI.cxx:100
 TPeakFitGUI.cxx:101
 TPeakFitGUI.cxx:102
 TPeakFitGUI.cxx:103
 TPeakFitGUI.cxx:104
 TPeakFitGUI.cxx:105
 TPeakFitGUI.cxx:106
 TPeakFitGUI.cxx:107
 TPeakFitGUI.cxx:108
 TPeakFitGUI.cxx:109
 TPeakFitGUI.cxx:110
 TPeakFitGUI.cxx:111
 TPeakFitGUI.cxx:112
 TPeakFitGUI.cxx:113
 TPeakFitGUI.cxx:114
 TPeakFitGUI.cxx:115
 TPeakFitGUI.cxx:116
 TPeakFitGUI.cxx:117
 TPeakFitGUI.cxx:118
 TPeakFitGUI.cxx:119
 TPeakFitGUI.cxx:120
 TPeakFitGUI.cxx:121
 TPeakFitGUI.cxx:122
 TPeakFitGUI.cxx:123
 TPeakFitGUI.cxx:124
 TPeakFitGUI.cxx:125
 TPeakFitGUI.cxx:126
 TPeakFitGUI.cxx:127
 TPeakFitGUI.cxx:128
 TPeakFitGUI.cxx:129
 TPeakFitGUI.cxx:130
 TPeakFitGUI.cxx:131
 TPeakFitGUI.cxx:132
 TPeakFitGUI.cxx:133
 TPeakFitGUI.cxx:134
 TPeakFitGUI.cxx:135
 TPeakFitGUI.cxx:136
 TPeakFitGUI.cxx:137
 TPeakFitGUI.cxx:138
 TPeakFitGUI.cxx:139
 TPeakFitGUI.cxx:140
 TPeakFitGUI.cxx:141
 TPeakFitGUI.cxx:142
 TPeakFitGUI.cxx:143
 TPeakFitGUI.cxx:144
 TPeakFitGUI.cxx:145
 TPeakFitGUI.cxx:146
 TPeakFitGUI.cxx:147
 TPeakFitGUI.cxx:148
 TPeakFitGUI.cxx:149
 TPeakFitGUI.cxx:150
 TPeakFitGUI.cxx:151
 TPeakFitGUI.cxx:152
 TPeakFitGUI.cxx:153
 TPeakFitGUI.cxx:154
 TPeakFitGUI.cxx:155
 TPeakFitGUI.cxx:156
 TPeakFitGUI.cxx:157
 TPeakFitGUI.cxx:158
 TPeakFitGUI.cxx:159
 TPeakFitGUI.cxx:160
 TPeakFitGUI.cxx:161
 TPeakFitGUI.cxx:162
 TPeakFitGUI.cxx:163
 TPeakFitGUI.cxx:164
 TPeakFitGUI.cxx:165
 TPeakFitGUI.cxx:166
 TPeakFitGUI.cxx:167
 TPeakFitGUI.cxx:168
 TPeakFitGUI.cxx:169
 TPeakFitGUI.cxx:170
 TPeakFitGUI.cxx:171
 TPeakFitGUI.cxx:172
 TPeakFitGUI.cxx:173
 TPeakFitGUI.cxx:174
 TPeakFitGUI.cxx:175
 TPeakFitGUI.cxx:176
 TPeakFitGUI.cxx:177
 TPeakFitGUI.cxx:178
 TPeakFitGUI.cxx:179
 TPeakFitGUI.cxx:180
 TPeakFitGUI.cxx:181
 TPeakFitGUI.cxx:182
 TPeakFitGUI.cxx:183
 TPeakFitGUI.cxx:184
 TPeakFitGUI.cxx:185
 TPeakFitGUI.cxx:186
 TPeakFitGUI.cxx:187
 TPeakFitGUI.cxx:188
 TPeakFitGUI.cxx:189
 TPeakFitGUI.cxx:190
 TPeakFitGUI.cxx:191
 TPeakFitGUI.cxx:192
 TPeakFitGUI.cxx:193
 TPeakFitGUI.cxx:194
 TPeakFitGUI.cxx:195
 TPeakFitGUI.cxx:196
 TPeakFitGUI.cxx:197
 TPeakFitGUI.cxx:198
 TPeakFitGUI.cxx:199
 TPeakFitGUI.cxx:200
 TPeakFitGUI.cxx:201
 TPeakFitGUI.cxx:202
 TPeakFitGUI.cxx:203
 TPeakFitGUI.cxx:204
 TPeakFitGUI.cxx:205
 TPeakFitGUI.cxx:206
 TPeakFitGUI.cxx:207
 TPeakFitGUI.cxx:208
 TPeakFitGUI.cxx:209
 TPeakFitGUI.cxx:210
 TPeakFitGUI.cxx:211
 TPeakFitGUI.cxx:212
 TPeakFitGUI.cxx:213
 TPeakFitGUI.cxx:214
 TPeakFitGUI.cxx:215
 TPeakFitGUI.cxx:216
 TPeakFitGUI.cxx:217
 TPeakFitGUI.cxx:218
 TPeakFitGUI.cxx:219
 TPeakFitGUI.cxx:220
 TPeakFitGUI.cxx:221
 TPeakFitGUI.cxx:222
 TPeakFitGUI.cxx:223
 TPeakFitGUI.cxx:224
 TPeakFitGUI.cxx:225
 TPeakFitGUI.cxx:226
 TPeakFitGUI.cxx:227
 TPeakFitGUI.cxx:228
 TPeakFitGUI.cxx:229
 TPeakFitGUI.cxx:230
 TPeakFitGUI.cxx:231
 TPeakFitGUI.cxx:232
 TPeakFitGUI.cxx:233
 TPeakFitGUI.cxx:234
 TPeakFitGUI.cxx:235
 TPeakFitGUI.cxx:236
 TPeakFitGUI.cxx:237
 TPeakFitGUI.cxx:238
 TPeakFitGUI.cxx:239
 TPeakFitGUI.cxx:240
 TPeakFitGUI.cxx:241
 TPeakFitGUI.cxx:242
 TPeakFitGUI.cxx:243
 TPeakFitGUI.cxx:244
 TPeakFitGUI.cxx:245
 TPeakFitGUI.cxx:246
 TPeakFitGUI.cxx:247
 TPeakFitGUI.cxx:248
 TPeakFitGUI.cxx:249
 TPeakFitGUI.cxx:250
 TPeakFitGUI.cxx:251
 TPeakFitGUI.cxx:252
 TPeakFitGUI.cxx:253
 TPeakFitGUI.cxx:254
 TPeakFitGUI.cxx:255
 TPeakFitGUI.cxx:256
 TPeakFitGUI.cxx:257
 TPeakFitGUI.cxx:258
 TPeakFitGUI.cxx:259
 TPeakFitGUI.cxx:260
 TPeakFitGUI.cxx:261
 TPeakFitGUI.cxx:262
 TPeakFitGUI.cxx:263
 TPeakFitGUI.cxx:264
 TPeakFitGUI.cxx:265
 TPeakFitGUI.cxx:266
 TPeakFitGUI.cxx:267
 TPeakFitGUI.cxx:268
 TPeakFitGUI.cxx:269
 TPeakFitGUI.cxx:270
 TPeakFitGUI.cxx:271
 TPeakFitGUI.cxx:272
 TPeakFitGUI.cxx:273
 TPeakFitGUI.cxx:274
 TPeakFitGUI.cxx:275
 TPeakFitGUI.cxx:276
 TPeakFitGUI.cxx:277
 TPeakFitGUI.cxx:278
 TPeakFitGUI.cxx:279
 TPeakFitGUI.cxx:280
 TPeakFitGUI.cxx:281
 TPeakFitGUI.cxx:282
 TPeakFitGUI.cxx:283
 TPeakFitGUI.cxx:284
 TPeakFitGUI.cxx:285
 TPeakFitGUI.cxx:286
 TPeakFitGUI.cxx:287
 TPeakFitGUI.cxx:288
 TPeakFitGUI.cxx:289
 TPeakFitGUI.cxx:290
 TPeakFitGUI.cxx:291
 TPeakFitGUI.cxx:292
 TPeakFitGUI.cxx:293
 TPeakFitGUI.cxx:294
 TPeakFitGUI.cxx:295
 TPeakFitGUI.cxx:296
 TPeakFitGUI.cxx:297
 TPeakFitGUI.cxx:298
 TPeakFitGUI.cxx:299
 TPeakFitGUI.cxx:300
 TPeakFitGUI.cxx:301
 TPeakFitGUI.cxx:302
 TPeakFitGUI.cxx:303
 TPeakFitGUI.cxx:304
 TPeakFitGUI.cxx:305
 TPeakFitGUI.cxx:306
 TPeakFitGUI.cxx:307
 TPeakFitGUI.cxx:308
 TPeakFitGUI.cxx:309
 TPeakFitGUI.cxx:310
 TPeakFitGUI.cxx:311
 TPeakFitGUI.cxx:312
 TPeakFitGUI.cxx:313
 TPeakFitGUI.cxx:314
 TPeakFitGUI.cxx:315
 TPeakFitGUI.cxx:316
 TPeakFitGUI.cxx:317
 TPeakFitGUI.cxx:318
 TPeakFitGUI.cxx:319
 TPeakFitGUI.cxx:320
 TPeakFitGUI.cxx:321
 TPeakFitGUI.cxx:322
 TPeakFitGUI.cxx:323
 TPeakFitGUI.cxx:324
 TPeakFitGUI.cxx:325
 TPeakFitGUI.cxx:326
 TPeakFitGUI.cxx:327
 TPeakFitGUI.cxx:328
 TPeakFitGUI.cxx:329
 TPeakFitGUI.cxx:330
 TPeakFitGUI.cxx:331
 TPeakFitGUI.cxx:332
 TPeakFitGUI.cxx:333
 TPeakFitGUI.cxx:334
 TPeakFitGUI.cxx:335
 TPeakFitGUI.cxx:336
 TPeakFitGUI.cxx:337
 TPeakFitGUI.cxx:338
 TPeakFitGUI.cxx:339
 TPeakFitGUI.cxx:340
 TPeakFitGUI.cxx:341
 TPeakFitGUI.cxx:342
 TPeakFitGUI.cxx:343
 TPeakFitGUI.cxx:344
 TPeakFitGUI.cxx:345
 TPeakFitGUI.cxx:346
 TPeakFitGUI.cxx:347
 TPeakFitGUI.cxx:348
 TPeakFitGUI.cxx:349
 TPeakFitGUI.cxx:350
 TPeakFitGUI.cxx:351
 TPeakFitGUI.cxx:352
 TPeakFitGUI.cxx:353
 TPeakFitGUI.cxx:354
 TPeakFitGUI.cxx:355
 TPeakFitGUI.cxx:356
 TPeakFitGUI.cxx:357
 TPeakFitGUI.cxx:358
 TPeakFitGUI.cxx:359
 TPeakFitGUI.cxx:360
 TPeakFitGUI.cxx:361
 TPeakFitGUI.cxx:362
 TPeakFitGUI.cxx:363
 TPeakFitGUI.cxx:364
 TPeakFitGUI.cxx:365
 TPeakFitGUI.cxx:366
 TPeakFitGUI.cxx:367
 TPeakFitGUI.cxx:368
 TPeakFitGUI.cxx:369
 TPeakFitGUI.cxx:370
 TPeakFitGUI.cxx:371
 TPeakFitGUI.cxx:372
 TPeakFitGUI.cxx:373
 TPeakFitGUI.cxx:374
 TPeakFitGUI.cxx:375
 TPeakFitGUI.cxx:376
 TPeakFitGUI.cxx:377
 TPeakFitGUI.cxx:378
 TPeakFitGUI.cxx:379
 TPeakFitGUI.cxx:380
 TPeakFitGUI.cxx:381
 TPeakFitGUI.cxx:382
 TPeakFitGUI.cxx:383
 TPeakFitGUI.cxx:384
 TPeakFitGUI.cxx:385
 TPeakFitGUI.cxx:386
 TPeakFitGUI.cxx:387
 TPeakFitGUI.cxx:388
 TPeakFitGUI.cxx:389
 TPeakFitGUI.cxx:390
 TPeakFitGUI.cxx:391
 TPeakFitGUI.cxx:392
 TPeakFitGUI.cxx:393
 TPeakFitGUI.cxx:394
 TPeakFitGUI.cxx:395
 TPeakFitGUI.cxx:396
 TPeakFitGUI.cxx:397
 TPeakFitGUI.cxx:398
 TPeakFitGUI.cxx:399
 TPeakFitGUI.cxx:400
 TPeakFitGUI.cxx:401
 TPeakFitGUI.cxx:402
 TPeakFitGUI.cxx:403
 TPeakFitGUI.cxx:404
 TPeakFitGUI.cxx:405
 TPeakFitGUI.cxx:406
 TPeakFitGUI.cxx:407
 TPeakFitGUI.cxx:408
 TPeakFitGUI.cxx:409
 TPeakFitGUI.cxx:410
 TPeakFitGUI.cxx:411
 TPeakFitGUI.cxx:412
 TPeakFitGUI.cxx:413
 TPeakFitGUI.cxx:414
 TPeakFitGUI.cxx:415
 TPeakFitGUI.cxx:416
 TPeakFitGUI.cxx:417
 TPeakFitGUI.cxx:418
 TPeakFitGUI.cxx:419
 TPeakFitGUI.cxx:420
 TPeakFitGUI.cxx:421
 TPeakFitGUI.cxx:422
 TPeakFitGUI.cxx:423
 TPeakFitGUI.cxx:424
 TPeakFitGUI.cxx:425
 TPeakFitGUI.cxx:426
 TPeakFitGUI.cxx:427
 TPeakFitGUI.cxx:428
 TPeakFitGUI.cxx:429
 TPeakFitGUI.cxx:430
 TPeakFitGUI.cxx:431
 TPeakFitGUI.cxx:432
 TPeakFitGUI.cxx:433
 TPeakFitGUI.cxx:434
 TPeakFitGUI.cxx:435
 TPeakFitGUI.cxx:436
 TPeakFitGUI.cxx:437
 TPeakFitGUI.cxx:438
 TPeakFitGUI.cxx:439
 TPeakFitGUI.cxx:440
 TPeakFitGUI.cxx:441
 TPeakFitGUI.cxx:442
 TPeakFitGUI.cxx:443
 TPeakFitGUI.cxx:444
 TPeakFitGUI.cxx:445
 TPeakFitGUI.cxx:446
 TPeakFitGUI.cxx:447
 TPeakFitGUI.cxx:448
 TPeakFitGUI.cxx:449
 TPeakFitGUI.cxx:450
 TPeakFitGUI.cxx:451
 TPeakFitGUI.cxx:452
 TPeakFitGUI.cxx:453
 TPeakFitGUI.cxx:454
 TPeakFitGUI.cxx:455
 TPeakFitGUI.cxx:456
 TPeakFitGUI.cxx:457
 TPeakFitGUI.cxx:458
 TPeakFitGUI.cxx:459
 TPeakFitGUI.cxx:460
 TPeakFitGUI.cxx:461
 TPeakFitGUI.cxx:462
 TPeakFitGUI.cxx:463
 TPeakFitGUI.cxx:464
 TPeakFitGUI.cxx:465
 TPeakFitGUI.cxx:466
 TPeakFitGUI.cxx:467
 TPeakFitGUI.cxx:468
 TPeakFitGUI.cxx:469
 TPeakFitGUI.cxx:470
 TPeakFitGUI.cxx:471
 TPeakFitGUI.cxx:472
 TPeakFitGUI.cxx:473
 TPeakFitGUI.cxx:474
 TPeakFitGUI.cxx:475
 TPeakFitGUI.cxx:476
 TPeakFitGUI.cxx:477
 TPeakFitGUI.cxx:478
 TPeakFitGUI.cxx:479
 TPeakFitGUI.cxx:480
 TPeakFitGUI.cxx:481
 TPeakFitGUI.cxx:482
 TPeakFitGUI.cxx:483
 TPeakFitGUI.cxx:484
 TPeakFitGUI.cxx:485
 TPeakFitGUI.cxx:486
 TPeakFitGUI.cxx:487
 TPeakFitGUI.cxx:488
 TPeakFitGUI.cxx:489
 TPeakFitGUI.cxx:490
 TPeakFitGUI.cxx:491
 TPeakFitGUI.cxx:492
 TPeakFitGUI.cxx:493
 TPeakFitGUI.cxx:494
 TPeakFitGUI.cxx:495
 TPeakFitGUI.cxx:496
 TPeakFitGUI.cxx:497
 TPeakFitGUI.cxx:498
 TPeakFitGUI.cxx:499
 TPeakFitGUI.cxx:500
 TPeakFitGUI.cxx:501
 TPeakFitGUI.cxx:502
 TPeakFitGUI.cxx:503
 TPeakFitGUI.cxx:504
 TPeakFitGUI.cxx:505
 TPeakFitGUI.cxx:506
 TPeakFitGUI.cxx:507
 TPeakFitGUI.cxx:508
 TPeakFitGUI.cxx:509
 TPeakFitGUI.cxx:510
 TPeakFitGUI.cxx:511
 TPeakFitGUI.cxx:512
 TPeakFitGUI.cxx:513
 TPeakFitGUI.cxx:514
 TPeakFitGUI.cxx:515
 TPeakFitGUI.cxx:516
 TPeakFitGUI.cxx:517
 TPeakFitGUI.cxx:518
 TPeakFitGUI.cxx:519
 TPeakFitGUI.cxx:520
 TPeakFitGUI.cxx:521
 TPeakFitGUI.cxx:522
 TPeakFitGUI.cxx:523
 TPeakFitGUI.cxx:524
 TPeakFitGUI.cxx:525
 TPeakFitGUI.cxx:526
 TPeakFitGUI.cxx:527
 TPeakFitGUI.cxx:528
 TPeakFitGUI.cxx:529
 TPeakFitGUI.cxx:530
 TPeakFitGUI.cxx:531
 TPeakFitGUI.cxx:532
 TPeakFitGUI.cxx:533
 TPeakFitGUI.cxx:534
 TPeakFitGUI.cxx:535
 TPeakFitGUI.cxx:536
 TPeakFitGUI.cxx:537
 TPeakFitGUI.cxx:538
 TPeakFitGUI.cxx:539
 TPeakFitGUI.cxx:540
 TPeakFitGUI.cxx:541
 TPeakFitGUI.cxx:542
 TPeakFitGUI.cxx:543
 TPeakFitGUI.cxx:544
 TPeakFitGUI.cxx:545
 TPeakFitGUI.cxx:546
 TPeakFitGUI.cxx:547
 TPeakFitGUI.cxx:548
 TPeakFitGUI.cxx:549
 TPeakFitGUI.cxx:550
 TPeakFitGUI.cxx:551
 TPeakFitGUI.cxx:552
 TPeakFitGUI.cxx:553
 TPeakFitGUI.cxx:554
 TPeakFitGUI.cxx:555