ROOT logo
#include "PelTools.h"

#ifndef DAMM
#define DAMM
struct drrheader
{
  char label[12];
	unsigned int nhis;
	unsigned int nhalfword;
	unsigned int year;
	unsigned int month;
	unsigned int day;
	unsigned int hour;
	unsigned int minute;
	unsigned int second;
	char title[40];
} DRRHEADER;

struct drrdir
{
  unsigned short histdim;
	unsigned short nhalfwordperchannel;
	unsigned short histpar[4];
	unsigned short lengthraw[4];
	unsigned short lengthscaled[4];
	unsigned short minchannel[4];
	unsigned short maxchannel[4];
	unsigned int offset;
	char xlabel[6];
	char ylabel[6];
	float calib[4];
	char title[4];
} DRRDIR;

#endif
ClassImp(PelTools)

PelTools::PelTools():TNamed("gPelTools","Pellectron Tools")
{
  int i;
  gROOT->Add(this);
  mCutF = NULL;
  mCut = NULL;
  mList = NULL;
	mBackLin = new TF1("___BACK___","[0]+[1]*x");
	
	fMainFrame1186 = 0;
	isGUIActive = false;
	
  mIndex = 0;
	mHist = new TContainer();
	mHist->empty();
}
PelTools::~PelTools()
{
  if(fMainFrame1186) delete fMainFrame1186;
	if(mBackLin) delete mBackLin;
	if(mHist) delete mHist;
}
TList* PelTools::makeList(char* name)
{
  int i,n;
  if(mList) {delete mList; mList = NULL;}
  mList = new TList();
  if(gPad)
  {
    TList *l = gPad->GetListOfPrimitives();
    if(l)
    {
      n = l->GetSize();
      if(n>0) for(i=0;i<n;i++)
      {
        TObject *o = l->At(i);
        TString n = o->ClassName();
				//cout <<"Found object "<<o<<"  clasname = "<<o->ClassName()<<endl;
        if(n.BeginsWith(name)) mList->AddLast(o);
      }
    }
  }
  n = mList->GetSize();
  if(n==0) { delete mList; mList = NULL;}
  return mList;
}  

void PelTools::del(char* name)
{
  //cout <<"Procurando objeto "<<name<<endl;
	//cout <<"gROOT = "<<gROOT<<endl;
	//cout <<"objeto = "<<gROOT->FindObject(name)<<endl;
	mHist->remove(name);
	//if(gROOT->FindObject(name)) delete gROOT->FindObject(name);
  return;
}
void PelTools::openFile(char *name, char* flag)
{
  if(mCutF) closeFile(); 
  mCutF = new TFile(name,flag);
}
void PelTools::createFile(char* name)
{
  openFile(name,"RECREATE");
}
void PelTools::createFileGUI()
{
  TGFileInfo fi;
  new TGFileDialog(gClient->GetRoot(),gClient->GetRoot(),kFDSave,&fi);
  if(fi.fFilename) openFile(fi.fFilename,"RECREATE");
}
void PelTools::openFileGUI()
{
  TGFileInfo fi;
  new TGFileDialog(gClient->GetRoot(),gClient->GetRoot(),kFDOpen,&fi);
  if(fi.fFilename)openFile(fi.fFilename,"UPDATE");
}
void PelTools::closeFile()
{
  if(mCutF) {mCutF->Close(); delete mCutF; mCutF=NULL;}
}
void PelTools::listFile()
{
  if(!mCutF) { message(1,"Warning","There is no cut file open"); return;}
  mCutF->ls();
}
void PelTools::saveCut(char* name)
{
  if(!mCutF) { message(1,"Warning","There is no cut file open"); return;}
  TCutG *cc = getCurrCut();
  if(!cc) { message(1,"Warning","There is no cut available for saving"); return;}
  cc->SetName(name);
  mCutF->cd();
  cc->Write();
}
TCutG* PelTools::getCurrCut()
{
	TCutG *cc = NULL;
  if(!cc) cc = mCut;
  if(!cc) cc = (TCutG*)gROOT->FindObjectAny("CUTG");
  mCut = cc;
  return cc;
}
void PelTools::printCurrCut()
{
  TCutG* cut = getCurrCut();
	if(cut) cut->Print();
}
void PelTools::drawCurrCut()
{
  TCutG* cut = getCurrCut();
	if(cut) cut->Draw();
	if(gPad) gPad->Update();
}
void PelTools::saveCutGUI()
{
  if(!mCutF) { message(1,"Warning","There is no cut file open"); return;}
  TCutG *cc = getCurrCut();
  if(!cc) { message(1,"Warning","There is no cut available for saving"); return;}
  
  char *title = " Save Cut";
  TString label = "   Enter the cut identifier   ";
  TString output = "";
  int stat;
  new TDialog(title,1,&label,&output,&stat);
  char* name = (char*)output.Data();
  if(stat==1) saveCut(name);
}
TCutG* PelTools::getCut(char* name)
{
  if(!mCutF) { message(1,"Warning","There is no cut file open"); return NULL;}
  mCut = (TCutG*)mCutF->Get(name);
  return mCut;
}
TCutG* PelTools::getCutGUI()
{
  if(!mCutF) { message(1,"Warning","There is no cut file open"); return NULL;}  
  char *title = " Load Cut";
  TString label = "   Enter the cut identifier   ";
  TString output = " ";
  int stat;
  new TDialog(title,1,&label,&output,&stat);
  char* name = (char*)output.Data();  
  if(stat==1) mCut = getCut(name);
  if(mCut) mCut->Draw();
	if(gPad) gPad->Update();
  return mCut;
}

TH2D* PelTools::extract(TH2D* h, TCutG* c)
{
  int i,j,nx,ny,bin;
  float X,Y,V;
  if(!h) return NULL;
  if(!c) return NULL;
  TAxis *x = h->GetXaxis();
  TAxis *y = h->GetYaxis();
  nx = x->GetNbins();
  ny = y->GetNbins();
  float xmin = x->GetBinLowEdge(1);
  float xmax = x->GetBinUpEdge(nx);
  float ymin = y->GetBinLowEdge(1);
  float ymax = y->GetBinUpEdge(ny);
  //TString name = h->GetName();
  //name+="_Cut";
	TString name="ZZZZ_temp_extract_TH2_Cut_asdfghjkl";
  del((char*)name.Data());
  TH2D *hnew = new TH2D(name.Data(),name.Data(),nx,xmin,xmax,ny,ymin,ymax);
  for(i=1; i<=nx;i++)
    for(j=1;j<=ny;j++)
    {
      bin = h->GetBin(i,j);
      X = x->GetBinCenter(i);
      Y = y->GetBinCenter(j);
      V = h->GetBinContent(bin);
      if(c->IsInside(X,Y)) hnew->Fill(X,Y,V);
    }
  hnew->SetName(name.Data());
  //gROOT->GetList()->RecursiveRemove(hnew);
	mHist->add(hnew);
  return hnew;
}

void PelTools::drawProjectionCut(int m)
{
  int i,id,n;
  TH2D *hh = NULL;
  TH2D *mHC = NULL;
  TH1D *mP = NULL;
  TCutG *cc = getCurrCut();
  if(!cc) { message(1,"Warning","There is no cut available in the memory"); return;}
  TList *l = makeList("TH2");
  if(l) 
  {
    n = l->GetSize();
    for(i=0;i<n;i++)
    {
      hh = (TH2D*)l->At(i);
      if(hh)
      {
				mHC = extract((TH2D*)hh,cc);
        if(mHC)
        {
          TString n = mHC->GetName();
          if(m==0) n+="_px";
          else n+="_py";
					n+=mIndex++;
          del((char*)n.Data());
          if(m==0) mP = mHC->ProjectionX();
          else mP = mHC->ProjectionY();
          mP->SetName(n.Data());
					mP->SetEntries(mP->Integral());
          mP->Draw();
					mHist->add(mP);
          //gROOT->GetList()->RecursiveRemove(mP);
        }
      }
    }
  } else { message(1,"Warning","There is no 2D histogram in the canvas"); return;}

	if(gPad) gPad->Update();

  return;
}
void PelTools::drawTH2Cut()
{
  int i,id,n;
  TH2D  *hh = NULL;
  TH2D *mHC = NULL;
  TCutG *cc = getCurrCut();
  if(!cc) { message(1,"Warning","There is no cut available in the memory"); return;}
  TList *l = makeList("TH2");
  if(l) 
  {
    n = l->GetSize();
    for(i=0;i<n;i++)
    {
      hh = (TH2D*)l->At(i);
      if(hh)
      {
        mHC = extract((TH2D*)hh,cc);
        if(mHC) { mHC->Draw(); mHC->SetEntries(mHC->Integral()); mCut = 0;}
      }
    }
  } else { message(1,"Warning","There is no 2D histogram in the canvas"); return;}
	
	if(gPad) gPad->Update();

  return;
}
void PelTools::fitGUI()
{
  int i,n=0;
  TPeakFitGUI *gui = NULL;
  if(!gPad) { message(1,"Warning","There is no TCanvas open"); return;}
  TList *l = makeList("TH1");
  TH1D *hh=NULL;
  if(l)
  {
    n = l->GetSize();
    //l->ls();
    for(i=0;i<n;i++)
    {
      hh = (TH1D*)l->At(i);
      if(hh) gui = new TPeakFitGUI(hh,gPad);
    }
  } else message(1,"Warning","There is no 1D histogram displayed");   
	
  return;
}
float PelTools::counts(TH1D* h,float x1,float x2)
{
  int bin1 = h->FindBin(x1);
  int bin2 = h->FindBin(x2);
  float integral = h->Integral(bin1,bin2-1);
  return integral;
}
float PelTools::counts(TH2D* h,float x1,float x2,float y1, float y2)
{
  int bin1 = h->GetXaxis()->FindBin(x1);
  int bin2 = h->GetXaxis()->FindBin(x2);
  int bin3 = h->GetYaxis()->FindBin(y1);
  int bin4 = h->GetYaxis()->FindBin(y2);
  float integral = h->Integral(bin1,bin2-1,bin3,bin4-1);
  return integral;
}
float PelTools::integral(TH1D* h,float x1,float x2)
{
  int bin1 = h->FindBin(x1);
  int bin2 = h->FindBin(x2);
  float integral = h->Integral(bin1,bin2-1,"width");
  return integral;
}
float PelTools::integral(TH2D* h,float x1,float x2,float y1, float y2)
{
  int bin1 = h->GetXaxis()->FindBin(x1);
  int bin2 = h->GetXaxis()->FindBin(x2);
  int bin3 = h->GetYaxis()->FindBin(y1);
  int bin4 = h->GetYaxis()->FindBin(y2);
  float integral = h->Integral(bin1,bin2-1,bin3,bin4-1,"width");
  return integral;
}
void  PelTools::integralDump(TH1D* h1, float xmin, float xmax, TLine *line)
{
	if(!h1) return;
			
	int i = 0, i1 = 0, i2 = 0;
	double x1 = 0, y1 = 0;
	double x2 = 0, y2 = 0;	
	double a = 0, b = 0;
	double value = 0, x = 0;
	double rms = 0;	
	double mean2 = 0;
	double mean  = 0;
	float  n = 0;
	double ct = 0;
	double it = 0;
		
	////////////////////////////////////////////////////
	// calculating integral with NO background	
	
	i1 = h1->FindBin(xmin);
	i2 = h1->FindBin(xmax)-1;
	for(i = i1; i<i2; i++)
	{
		x     = h1->GetBinCenter(i);
	  value = h1->GetBinContent(i);
		mean2 += fabs(value)*x*x;
		mean  += fabs(value)*x;
		n+=fabs(value);
	} 
	if(n>0) { mean/=n; mean2/=n;}
	rms = sqrt(mean2-mean*mean);
	
	log(10,"Histogram name: %s",h1->GetName());
	log(10,"   Values without background subtraction");
  log(10,"     x limits = (%e, %e)",xmin,xmax);
  log(10,"     Counts   = %e",counts(h1,xmin,xmax));
  log(10,"     Integral = %e  (multiplied by bin size)",integral(h1,xmin,xmax));
  log(10,"     RMS = %e     FWHM = %e",rms,rms*2.354);
			
	////////////////////////////////////////////////////
	// calculating background as option S in DAMN	
	i1 = h1->FindBin(xmin);
	i2 = h1->FindBin(xmax)-1;
	x1 = h1->GetBinCenter(i1);
	x2 = h1->GetBinCenter(i2);
	y1 = h1->GetBinContent(i1);
	y2 = h1->GetBinContent(i2);
	if((x2-x1)!=0) a = (y2-y1)/(x2-x1);
	b = y1 - a*xmin;
	
	mBackLin->SetParameter(0,b);
  mBackLin->SetParameter(1,a);
	mBackLin->SetRange(x1,x2);
	mean2 = 0;
	mean  = 0;
	n = 0;
	rms = 0;
	ct = 0;
	it = 0;
	for(i = i1; i<i2; i++)
	{
		x     = h1->GetBinCenter(i);
	  value = h1->GetBinContent(i)-mBackLin->Eval(x);
		mean2 += fabs(value)*x*x;
		mean  += fabs(value)*x;		
		n+=fabs(value);
		ct += value;
		it += value*h1->GetBinWidth(i);
	}
	if(n>0) { mean/=n; mean2/=n;}
	rms = sqrt(mean2-mean*mean);
	
	log(10,"   Values with background subtraction (option 'S' from DAMN)");
  log(10,"     x limits = (%e, %e)",xmin,xmax);
	log(10,"     Counts = %e",ct);
  log(10,"     Integral = %e  (multiplied by bin size)",it);
  log(10,"     RMS = %e     FWHM = %e",rms,rms*2.354);
	
	////////////////////////////////////////////////////
	
	////////////////////////////////////////////////////
	// calculating background as option A in DAMN, 
	// defined in a TLine object
	if(line)
	{
	  x1 = line->GetX1();
	  x2 = line->GetX2();
	  y1 = line->GetY1();
	  y2 = line->GetY2();
	  i1 = h1->FindBin(x1);
	  i2 = h1->FindBin(x2);
		a = 0;		
	  if((x2-x1)!=0) a = (y2-y1)/(x2-x1);
	  b = y1 - a*x1;
	
	  mBackLin->SetParameter(0,b);
	  mBackLin->SetParameter(1,a);
	  mBackLin->SetRange(x1,x2);
	  mean2 = 0;
	  mean  = 0;
		n = 0;
	  rms = 0;
	  ct = 0;
	  it = 0;
	  for(i = i1; i<i2; i++)
	  {
		  x     = h1->GetBinCenter(i);
	    value = h1->GetBinContent(i)-mBackLin->Eval(x);
		  mean2 += fabs(value)*x*x;
		  mean  += fabs(value)*x;		
		  n+=fabs(value);
		  ct += value;
		  it += value*h1->GetBinWidth(i);
	  }		
	  if(n>0) { mean/=n; mean2/=n;}
	  rms = sqrt(mean2-mean*mean);
		
	  log(10,"   Values with background subtraction from TLine (option 'A' from DAMN)");
    log(10,"     x limits = (%e, %e)",x1,x2);
	  log(10,"     Counts = %e",ct);
    log(10,"     Integral = %e  (multiplied by bin size)",it);
    log(10,"     RMS = %e     FWHM = %e",rms,rms*2.354);	  
		
	}	
	////////////////////////////////////////////////////
	
}
void  PelTools::integralDump(TH2D* h2, float xmin, float xmax, float ymin, float ymax)
{
  if(!h2) return;
	double rmsx = h2->GetRMS(1);
	double rmsy = h2->GetRMS(2);
  log(10,"Histogram name: %s",h2->GetName());
  log(10,"   x = (%e, %e)",xmin,xmax);
  log(10,"   y = (%e, %e)",ymin,ymax);
  log(10,"   Counts   = %e",counts(h2,xmin,xmax,ymin,ymax));
  log(10,"   Integral = %e  (multiplied by bin size)",integral(h2,xmin,xmax,ymin,ymax));
  log(10,"   RMS X = %e     FWHM X = %e",rmsx,rmsx*2.354);
  log(10,"   RMS Y = %e     FWHM Y = %e",rmsy,rmsy*2.354);
}
void PelTools::integralGUI()
{
  int i,id,n;
  float xmin,xmax,ymin,ymax;
  TList *l = NULL;
	TLine *LINE = NULL;
  bool noHist = true;
  char line[200];
  if(!gPad) { message(1,"Warning","There is no TCanvas open"); return;}
  TH1D *h1=NULL;
  TH2D *h2=NULL;
  xmin = gPad->GetUxmin();
  xmax = gPad->GetUxmax();
  ymin = gPad->GetUymin();
  ymax = gPad->GetUymax();
	
	l = makeList("TLine");
	if(l)
	{
		LINE = (TLine*)l->At(l->LastIndex());
	}
  
  l = makeList("TH1");
  if(l)
  {
    noHist = false;
    n = l->GetSize();
    for(i=0;i<n;i++) 
    {
      h1 = (TH1D*) l->At(i);
      if(h1) 
      {
        log(10,"");
        log(10,"Integral of 1D histogram");
        log(10,"------------------------");
				integralDump((TH1D*)h1,xmin,xmax,LINE);
      }
    }
  }
  l = makeList("TH2");
  if(l)
  {
    noHist = false;
    n = l->GetSize();
    for(i=0;i<n;i++) 
    {
      h2 = (TH2D*) l->At(i);
      if(h2)
      {
        log(10,"");
        log(10,"Integral of 2D histogram");
        log(10,"------------------------");
				integralDump((TH2D*)h2,xmin,xmax,ymin,ymax);
      }
    }
  }
  if(noHist) message(1,"Warning","There is no histogram in the current Canvas/pad");
  return ;
}
void PelTools::integralCutGUI()
{
  int i,id,n;
  float xmin,xmax,ymin,ymax;
  TList *l = NULL;
  char line[200];
  if(!gPad) { message(1,"Warning","There is no TCanvas open"); return;}
  TH2D *h2=NULL;
  TH2D *h3=NULL;
  xmin = gPad->GetUxmin();
  xmax = gPad->GetUxmax();
  ymin = gPad->GetUymin();
  ymax = gPad->GetUymax();
  TCutG *cc = getCurrCut();
  if(!cc) { message(1,"Warning","There is no cut available in the memory"); return;}
  l = makeList("TH2");
  if(l)
  {
    n = l->GetSize();
    for(i=0;i<n;i++) 
    {
      h2 = (TH2D*) l->At(i);
      if(h2)
      {
        h3 = (TH2D*)extract(h2,cc);
        log(10,"Integral of a 2D histogram inside the graphical cut");
        log(10,"---------------------------------------------------");
				integralDump(h3,xmin,xmax,ymin,ymax);				
				delete h3;
      }
    }
  }
  else message(1,"Warning","There is no 2D histogram in the current Canvas/pad");
  return ;
}
void PelTools::exportAsciiGUI()
{  
  int i,n;
  if(!yesno("Export .DAT","This function will export  \nall histograms in the current PAD  \nto an ASCII file  \n\nWould you like to continue?  ")) return;
  if(!gPad) { message(1,"Warning","No active PAD"); return;}
  TList *l = makeList("TH1");
  if(!l) { message(1,"Warning","There is no 1D histograms in the current PAD"); return;}
  n = l->GetSize();
  float xmin = gPad->GetUxmin();
  float xmax = gPad->GetUxmax();
  for(i=0;i<n;i++)
  {
    TH1D *h = (TH1D*)l->At(i);
    if(h)
    {
      TString name = h->GetName();
      name+=".dat";
			name.ReplaceAll(" ","_");
			name.ReplaceAll("/","_");
			name.ReplaceAll("{","_");
			name.ReplaceAll("}","_");
			name.ReplaceAll("(","_");
			name.ReplaceAll(")","_");
			name.ReplaceAll("<","_");
			name.ReplaceAll(">","_");
			name.ReplaceAll(";","_");
			name.ReplaceAll("*","_");
			name.ReplaceAll("&","_");
			name.ReplaceAll("%","_");
			name.ReplaceAll("@","_");
			name.ReplaceAll("#","_");
      exportAscii(h,(char*)name.Data(),xmin,xmax);
    }
  }
}
void PelTools::exportAscii(TH1D* h, char* file, float xmin, float xmax)
{  
  int j;
  float x,y,e;
  if(h)
  {
    int ibin_min = h->FindBin(xmin);
    int ibin_max = h->FindBin(xmax);
    ofstream out(file);
    char line[100];
    for(j=ibin_min; j<=ibin_max;j++)
    {
      x = h->GetBinCenter(j);
      y = h->GetBinContent(j);
      e = h->GetBinError(j);
      sprintf(line,"%6.4e     %6.4e     %6.4e",x,y,e);
      out << line<<endl;
    }
    out.close();
    log(10,"%s is exported to file << %s >> ",h->GetName(),file);
    log(10,"   limits in x = (%e, %e)",xmin,xmax);
  }
}
void PelTools::importAsciiGUI()
{  
  TGFileInfo fi;
  if(!yesno("Import .DAT","This function will import  \nthe data in an ASCII file and will  \ncreate an histogram.  \n\nWould you like to continue?  ")) return;
  new TGFileDialog(gClient->GetRoot(),gClient->GetRoot(),kFDOpen,&fi);
  if(fi.fFilename)
  {
    TDirectory *dir = (TDirectory*)gROOT->Get("Scan_Histograms");
    if(!dir) dir = (TDirectory*)gROOT->Get("SPM_Histograms");
    if(dir) dir->cd();
    else gROOT->cd();
    importAscii(fi.fFilename);
  }
}
void PelTools::importDammGUI()
{  
  TGFileInfo fi;
  if(!yesno("Import DAMM/HIS","This function will import  \nthe data in an DAMM/HIS file and will  \ncreate histograms.  \n\nWould you like to continue?  ")) return;
  new TGFileDialog(gClient->GetRoot(),gClient->GetRoot(),kFDOpen,&fi);
  if(fi.fFilename)
  {
    TDirectory *dir = (TDirectory*)gROOT->Get("Scan_Histograms");
    if(!dir) dir = (TDirectory*)gROOT->Get("SPM_Histograms");
    if(dir) dir->cd();
    else gROOT->cd();
    importDamm(fi.fFilename);
  }
	return;
}
TH1D* PelTools::importAscii(char* file)
{
  int np = 0;
  int i,j;
  float x[4096],y[4096],e[4096];
  char line[100];
	TDirectory *dir = (TDirectory*)gROOT->Get("Scan_Histograms");
  if(!dir) dir = (TDirectory*)gROOT->Get("SPM_Histograms");
  if(dir) dir->cd();
  else gROOT->cd();

  TH1D* hist = NULL;
  TString token=";, \t";
  ifstream input(file);
  log(10,"Importing file << %s >> ",file);
  while(!input.eof())
  {
    input.getline(line,100);
    TString L = line;
    TObjArray *o = L.Tokenize(token);
    int ni = 0;
    int no = o->GetSize();
    for(i=0;i<no;i++) if(!o->At(i)) {ni = i; break;}
    if(ni>0)
    {
      if(ni<2) log(10,"  *** Line %d has less than 2 columns. Skipping...",np+1);
      else
      {
        if(ni>3) log(10,"  *** Line %d has more than 3 columns. Will discard extra columns.",np+1);
	
	TString item = ((TObjString*)o->At(0))->GetString();
	x[np] = atof(item.Data());
	
	item = ((TObjString*)o->At(1))->GetString();
	y[np] = atof(item.Data());
	
	if(ni>=3)
	{
	  item = ((TObjString*)o->At(2))->GetString();
	  e[np] = atof(item.Data());
	}
	else e[np] = 0;
	np++;
      }
    }
    delete o; 
  }
  log(10,"  *** read %d lines from file. Creating histogram...",np);
  x[np] = x[np-1]+0.01;
  hist = new TH1D(file,file,np,x);
  for(i = 0;i<np;i++)
  {
    hist->SetBinContent(i+1,y[i]);
    hist->SetBinError(i+1,e[i]);
  }
  return hist;
}
void PelTools::importDamm(char* file)
{

	char bloco[128];
	drrheader header;
	drrdir dir;
  size_t tmp;

	TDirectory *DIR = (TDirectory*)gROOT->Get("Scan_Histograms");
  if(!DIR) DIR = (TDirectory*)gROOT->Get("SPM_Histograms");
  if(DIR) DIR->cd();
  else gROOT->cd();

  log(10,"Importing DAMM file << %s >> ",file);
	mF = file;
	mF.ToLower();
	if(!mF.EndsWith(".his")) { message(1,"Warning","You must select a .his file"); return;}
	
	mF = file;
	mF.Remove(mF.Length()-4,4);
	
	mFHIS = mF + ".his";
	mFDRR = mF + ".drr";
		
	FILE *fhis = fopen(mFHIS.Data(),"rb");
	FILE *fdrr = fopen(mFDRR.Data(),"rb");
	//FILE *fhis = fopen("/auto/home/alexsuaide/16Oxi_trans/1660385.his","rb");
	//FILE *fdrr = fopen("/auto/home/alexsuaide/16Oxi_trans/1660385.drr","rb");
	
	if(!fhis) { message(1,"Warning","Could not find .his file"); return;}
	if(!fdrr) { message(1,"Warning","Could not find .drr file"); return;}
	
	tmp = fread(bloco,128,1,fdrr);
	
	memcpy(&header,bloco,128);
		
	log(10,"Number of histograms in HIS = %d",header.nhis);
	log(10,"Number of words in HIS = %d",2*(header.nhalfword));
	
	for(int i = 0; i<header.nhis;i++)
	{
	  tmp = fread(bloco,128,1,fdrr);
		memcpy(&dir,bloco,128);
		log(10,"Histogram number %d",i+1);
		log(10,"   Dimension = %d",dir.histdim);
		log(10,"   Size of bin = %d",dir.nhalfwordperchannel);
		for(int j = 0; j<dir.histdim && j<4; j++) 
		{
		  log(10,"   Paramenter %d = %d",j+1,dir.histpar[j]);
		  log(10,"      Length RAW = %d",dir.lengthraw[j]);
		  log(10,"      Length Scaled = %d",dir.lengthscaled[j]);
		}
		log(10,"   Offset = %d",dir.offset); 
		
		if(dir.histdim==1)
		{
		  int size = dir.lengthscaled[0];
		  int raw = dir.lengthraw[0];
			int nbytes = 2*size*dir.nhalfwordperchannel;
		  log(10,"   Bytes read = %d",nbytes); 
			fseek(fhis,dir.offset*2,0);
      TH1F *h = new TH1F(Form("HIST_%d_PX_%d",i,dir.histpar[0]),
			                   Form("Histogram for PX = %d",dir.histpar[0]),
												 size,0,raw);

			if(dir.nhalfwordperchannel==1) 
			{
			  unsigned short *data = new unsigned short[size];
				tmp = fread((char*)data,nbytes,1,fhis);
				for(int j = 0; j<size;j++) h->SetBinContent(j+1,data[j]);
				delete [] data;
			}
			else
			{
			  unsigned int   *data = new unsigned int[size];
				tmp = fread((char*)data,nbytes,1,fhis);			
				for(int j = 0; j<size;j++) h->SetBinContent(j+1,data[j]);
				delete [] data;
			}
		}
		else if(dir.histdim==2)
		{
		  int sizeX = dir.lengthscaled[0];
		  int rawX = dir.lengthraw[0];
		  int sizeY = dir.lengthscaled[1];
		  int rawY = dir.lengthraw[1];
			int nbytes  = 2*(sizeX*sizeY)*dir.nhalfwordperchannel;
			int nbytesX = 2*sizeX*dir.nhalfwordperchannel;
		  log(10,"   Bytes read = %d",nbytes); 
			fseek(fhis,dir.offset*2,0);
      TH2F *h = new TH2F(Form("HIST_%d_PX_%d_PY_%d",i,dir.histpar[0],dir.histpar[1]),
			                   Form("Histogram for PX = %d  PY = %d",dir.histpar[0],dir.histpar[1]),
												 sizeX,0,rawX,
												 sizeY,0,rawY);
			
			if(dir.nhalfwordperchannel==1) 
			{
			  unsigned short *data = new unsigned short[sizeX];
				for(int binY = 1; binY <= sizeY; binY++)
				{
				  tmp = fread((char*)data,nbytesX,1,fhis);			
				  for(int j = 0; j<sizeX; j++)  h->SetBinContent(j + 1, binY, data[j]);
				}
				delete [] data;
			}
			else
			{
			  unsigned int   *data = new unsigned int[sizeX];
				for(int binY = 1; binY <= sizeY; binY++)
				{
				  tmp = fread((char*)data,nbytesX,1,fhis);			
				  for(int j = 0; j<sizeX; j++)  h->SetBinContent(j + 1, binY, data[j]);
				}
				delete [] data;
			}

		}
		else log(10,"This dimension is not supported by the conversion filter. Sorry!");

		log(10,"   ");

	}
	
	log(10,"*** Finished DAMM conversion");
	
	fclose(fhis);
	fclose(fdrr);
	//delete fhis;
	//delete fdrr;
		
  return;
}
void PelTools::createCut()
{  
  mCut = NULL;
  gROOT->SetEditorMode("CutG");
}
TGTextButton* PelTools::addButton(TGCompositeFrame* frame, 
                                  char* label, char* tip,
                                  int x, int y, int w, int h,
												          int textColor, int backColor)
{
   TGTextButton *button = new TGTextButton(frame,label);
   button->SetTextJustify(36);
   button->MoveResize(x,y,w,h);
   button->SetToolTipText(tip);
   frame->AddFrame(button, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
   button->SetTextColor(textColor);
   button->SetBackgroundColor(backColor);
   return button;
}
void PelTools::dynamicalProjGUI(int mode)
{
  int n;
	TList *l = makeList("TH2");
  if(l) 
  {
    n = l->GetSize();
    if(n>0)
    {
      TH2D* hh = (TH2D*)l->At(0);
      if(hh)
      {
        new TDynamicSlice((TH2*)hh, (TPad*)gPad, mode);
      } else { message(1,"Warning","There is no 2D histogram in the canvas"); return;}
    } else { message(1,"Warning","There is no 2D histogram in the canvas"); return;}
  } else { message(1,"Warning","There is no 2D histogram in the canvas"); return;}
  
	return;
}

void PelTools::closeMenu()
{
  isGUIActive = false;
	if(fMainFrame1186)
	{
	  fMainFrame1186->Cleanup();
		delete fMainFrame1186;
		fMainFrame1186 = 0;
	} 
}
void PelTools::menu()
{  
  	
	 if(isGUIActive) return;
	
	 isGUIActive = true;
	
   // main frame
   fMainFrame1186 = new TGMainFrame(gClient->GetRoot(),10,10,kMainFrame | kVerticalFrame);
   fMainFrame1186->SetLayoutBroken(kTRUE);

   // composite frame
   TGCompositeFrame *fMainFrame656 = new TGCompositeFrame(fMainFrame1186,200,635,kVerticalFrame);
   fMainFrame656->SetLayoutBroken(kTRUE);

   // composite frame
   TGCompositeFrame *fCompositeFrame657 = new TGCompositeFrame(fMainFrame656,203,637,kVerticalFrame);
   fCompositeFrame657->SetLayoutBroken(kTRUE);

   TGFont *ufont;         // will reflect user font changes
   ufont = gClient->GetFont("-*-helvetica-bold-r-*-*-14-*-*-*-*-*-*-*");

   TGGC   *uGC;           // will reflect user GC changes
   // graphics context changes
   GCValues_t valButton658;
   valButton658.fMask = kGCForeground | kGCBackground | kGCFillStyle | kGCFont | kGCGraphicsExposures;
   gClient->GetColorByName("#0000ff",valButton658.fForeground);
   gClient->GetColorByName("#c0c0c0",valButton658.fBackground);
   valButton658.fFillStyle = kFillSolid;
   valButton658.fFont = ufont->GetFontHandle();
   valButton658.fGraphicsExposures = kFALSE;
   uGC = gClient->GetGC(&valButton658, kTRUE);
   TGTextButton *fTextButton658 = new TGTextButton(fCompositeFrame657,"Browser",-1,uGC->GetGC(),ufont->GetFontStruct());
   fTextButton658->SetTextJustify(36);
   fTextButton658->Resize(88,40);
   fTextButton658->SetToolTipText("Opens a new TBrowser");
   fCompositeFrame657->AddFrame(fTextButton658, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
   fTextButton658->MoveResize(8,8,88,40);

   ufont = gClient->GetFont("-*-helvetica-bold-r-*-*-14-*-*-*-*-*-*-*");

   // graphics context changes
   GCValues_t valButton661;
   valButton661.fMask = kGCForeground | kGCBackground | kGCFillStyle | kGCFont | kGCGraphicsExposures;
   gClient->GetColorByName("#0000ff",valButton661.fForeground);
   gClient->GetColorByName("#c0c0c0",valButton661.fBackground);
   valButton661.fFillStyle = kFillSolid;
   valButton661.fFont = ufont->GetFontHandle();
   valButton661.fGraphicsExposures = kFALSE;
   uGC = gClient->GetGC(&valButton661, kTRUE);
   TGTextButton *fTextButton661 = new TGTextButton(fCompositeFrame657,"Canvas",-1,uGC->GetGC(),ufont->GetFontStruct());
   fTextButton661->SetTextJustify(36);
   fTextButton661->Resize(88,40);
   fTextButton661->SetToolTipText("Opens a new TCanvas");
   fCompositeFrame657->AddFrame(fTextButton661, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
   fTextButton661->MoveResize(104,8,88,40);

   ///////////////////////////////////////////////////////////////////////////////////////
   // shutter
   ///////////////////////////////////////////////////////////////////////////////////////
   TGShutter *fShutter666 = new TGShutter(fCompositeFrame657,kSunkenFrame);

   ///////////////////////////////////////////////////////////////////////////////////////
   // "Import/export" shutter item 
   ///////////////////////////////////////////////////////////////////////////////////////
   TGShutterItem *fShutterItem667 = new TGShutterItem(fShutter666, new TGHotString("Import/export"),1000,kVerticalFrame);
	 
   TGCompositeFrame *fVerticalFrame679 = (TGCompositeFrame *)fShutterItem667->GetContainer();
	 fVerticalFrame679->SetLayoutBroken(kTRUE);
	 
	 int i = 0;
	 int j = 0;

   TGTextButton *fTextButton1001 = addButton(fVerticalFrame679,"Import ASCII","Import 1D data from an ASCII file into a TH1F histogram",10,5+i*30+10*j,164,25); i++;
   //TGTextButton *fTextButton1002 = addButton(fVerticalFrame679,"Import from SPK","Import single or multiple 1D histograms from a SPK file",10,5+i*30+10*j,164,25); i++;
   //j++;
	 TGTextButton *fTextButton1003 = addButton(fVerticalFrame679,"Export to ASCII","Export a TH1 histogram to ASCII file",10,5+i*30+10*j,164,25); i++; 
   //TGTextButton *fTextButton1004 = addButton(fVerticalFrame679,"Export to SPK","Export single or multiple TH1 histograms to SPK file",10,5+i*30+10*j,164,25); i++;
	 TGTextButton *fTextButton1005 = addButton(fVerticalFrame679,"Import from DAMM/HIS file","Import histograms from DAMM/HIS files",10,5+i*30+10*j,164,25); i++; 
	 
	 
   
	 fShutter666->AddItem(fShutterItem667);

   ///////////////////////////////////////////////////////////////////////////////////////
   // "Graphical cuts" shutter item 
   ///////////////////////////////////////////////////////////////////////////////////////
   TGShutterItem *fShutterItem692 = new TGShutterItem(fShutter666, new TGHotString("Graphical cuts"),1001,kVerticalFrame);
   TGCompositeFrame *fVerticalFrame704 = (TGCompositeFrame *)fShutterItem692->GetContainer();
	 fVerticalFrame704->SetLayoutBroken(kTRUE);
	 
	 i = 0;
	 j = 0;
	 
   TGTextButton *fTextButton2000 = addButton(fVerticalFrame704,"Create cut file","Create a cut file for writing",10,5+i*30+10*j,164,25); i++;
   TGTextButton *fTextButton2001 = addButton(fVerticalFrame704,"Open cut file","Open a cut file for read/write",10,5+i*30+10*j,164,25); i++;
   TGTextButton *fTextButton2002 = addButton(fVerticalFrame704,"Close cut file","Close cut file",10,5+i*30+10*j,164,25); i++;
   TGTextButton *fTextButton2003 = addButton(fVerticalFrame704,"List cut file","List the contents of a cut file",10,5+i*30+10*j,164,25); i++;
	 j++;
   TGTextButton *fTextButton2004 = addButton(fVerticalFrame704,"Create cut","Create a new cut and keep in the memory",10,5+i*30+10*j,164,25); i++;
   TGTextButton *fTextButton2005 = addButton(fVerticalFrame704,"Save current cut","Save the current cut in a open file",10,5+i*30+10*j,164,25); i++;
   TGTextButton *fTextButton2006 = addButton(fVerticalFrame704,"Load cut","Load a cut from file and set as current",10,5+i*30+10*j,164,25); i++;
   TGTextButton *fTextButton2007 = addButton(fVerticalFrame704,"Print cut","Print the coordinates of the current cut",10,5+i*30+10*j,164,25); i++;
   TGTextButton *fTextButton2008 = addButton(fVerticalFrame704,"Draw Cut","Draw the current cut in the current pad",10,5+i*30+10*j,164,25); i++;
	 
   fShutter666->AddItem(fShutterItem692);

   ///////////////////////////////////////////////////////////////////////////////////////
   // "analysis tools" shutter item 
   ///////////////////////////////////////////////////////////////////////////////////////
   TGShutterItem *fShutterItem711 = new TGShutterItem(fShutter666, new TGHotString("analysis tools"),1002,kVerticalFrame);
   TGCompositeFrame *fVerticalFrame723 = (TGCompositeFrame *)fShutterItem711->GetContainer();
	 fVerticalFrame723->SetLayoutBroken(kTRUE);
	 
	 i = 0;
	 j = 0;
	 
   TGTextButton *fTextButton3001 = addButton(fVerticalFrame723,"Draw TH2 (Cut)","Draw TH2 data within the cut (from current pad) ",10,5+i*30+10*j,164,25); i++;
   TGTextButton *fTextButton3002 = addButton(fVerticalFrame723,"Draw PX (Cut)","Draw projection-X of TH2 data within the cut (from current pad) ",10,5+i*30+10*j,164,25); i++;
   TGTextButton *fTextButton3003 = addButton(fVerticalFrame723,"Draw PY (Cut)","Draw projection-Y of TH2 data within the cut (from current pad) ",10,5+i*30+10*j,164,25); i++;
	 j++;
   TGTextButton *fTextButton3004 = addButton(fVerticalFrame723,"Dynamical PX","Dynamical (mouse) projection-X",10,5+i*30+10*j,164,25); i++;
   TGTextButton *fTextButton3005 = addButton(fVerticalFrame723,"Dynamical PY","Dynamical (mouse) projection-Y",10,5+i*30+10*j,164,25); i++;
	 j++;
   TGTextButton *fTextButton3006 = addButton(fVerticalFrame723,"Integral","Integral of histograms (1 and 2D) from current pad",10,5+i*30+10*j,164,25); i++;
   TGTextButton *fTextButton3007 = addButton(fVerticalFrame723,"Integral TH2 (Cut)","Integral of 2D histograms within cut (from current pad)",10,5+i*30+10*j,164,25); i++;
	 j++;
   TGTextButton *fTextButton3008 = addButton(fVerticalFrame723,"Fit peaks","Fit 1D gaussian peaks (histograms within pad)",10,5+i*30+10*j,164,25); i++;
	    
	 fShutter666->AddItem(fShutterItem711);


   ///////////////////////////////////////////////////////////////////////////////////////
   // final 
   ///////////////////////////////////////////////////////////////////////////////////////
   fShutter666->SetSelectedItem(fShutterItem711);
   fShutter666->Resize(186,568);
   fCompositeFrame657->AddFrame(fShutter666, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
   fShutter666->MoveResize(8,56,186,568);

   ///////////////////////////////////////////////////////////////////////////////////////
   // final 
   ///////////////////////////////////////////////////////////////////////////////////////
	 fMainFrame1186->SetWindowName("PelTools");
	 fMainFrame1186->SetIconName("PelTools");
   fMainFrame656->AddFrame(fCompositeFrame657, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
   fCompositeFrame657->MoveResize(0,0,203,637);

   fMainFrame1186->AddFrame(fMainFrame656, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
   fMainFrame656->MoveResize(0,0,200,635);

   fMainFrame1186->MapSubwindows();

   fMainFrame1186->Resize(fMainFrame1186->GetDefaultSize());
   fMainFrame1186->MapWindow();
   fMainFrame1186->Resize(204,635);
		
	 ////////////////////////////////////////
	 // connecting buttons to commands.
	
	 fMainFrame1186->Connect("CloseWindow()","PelTools",this,"closeMenu()"); // quit scanroot
	 
	 fTextButton658->Connect("Clicked()","PelTools",this,"browser()"); // new TBrowser
	 fTextButton661->Connect("Clicked()","PelTools",this,"canvas()"); // new TCanvas
	
   // "Import/export" shutter item 

   fTextButton1001->Connect("Clicked()","PelTools",this,"importAsciiGUI()"); // Import ASCII
   //fTextButton1002->Connect("Clicked()","PelTools",this,"zeroGUI()"); // Import SPK
   fTextButton1003->Connect("Clicked()","PelTools",this,"exportAsciiGUI()"); // Export ASCII
   //fTextButton1004->Connect("Clicked()","PelTools",this,"zeroGUI()"); // Export SPK
   fTextButton1005->Connect("Clicked()","PelTools",this,"importDammGUI()"); // Import DAMM
	
   // "Graphical cuts" shutter item 
   
	 fTextButton2000->Connect("Clicked()","PelTools",this,"createFileGUI()"); // Create Cut file
	 fTextButton2001->Connect("Clicked()","PelTools",this,"openFileGUI()"); // Open Cut file
	 fTextButton2002->Connect("Clicked()","PelTools",this,"closeFile()"); // Close Cut file
	 fTextButton2003->Connect("Clicked()","PelTools",this,"listFile()"); // List Cut file
	 fTextButton2004->Connect("Clicked()","PelTools",this,"createCut()"); // Create cut
	 fTextButton2005->Connect("Clicked()","PelTools",this,"saveCutGUI()"); // Save Cut
	 fTextButton2006->Connect("Clicked()","PelTools",this,"getCutGUI()"); // load cut
	 fTextButton2007->Connect("Clicked()","PelTools",this,"printCurrCut()"); // print cut
	 fTextButton2008->Connect("Clicked()","PelTools",this,"drawCurrCut()"); // draw cut

   // "analysis tools" shutter item 
	 
	 fTextButton3001->Connect("Clicked()","PelTools",this,"drawTH2Cut()"); // Draw TH2(Cut)
	 fTextButton3002->Connect("Clicked()","PelTools",this,"drawProjectionCut(=0)"); // Draw PX(Cut)
	 fTextButton3003->Connect("Clicked()","PelTools",this,"drawProjectionCut(=1)"); // Draw PY(Cut)
	 fTextButton3004->Connect("Clicked()","PelTools",this,"dynamicalProjGUI(=0)"); // Dynamical PX
	 fTextButton3005->Connect("Clicked()","PelTools",this,"dynamicalProjGUI(=1)"); // Dynamical PY
	 fTextButton3006->Connect("Clicked()","PelTools",this,"integralGUI()"); // Integral
	 fTextButton3007->Connect("Clicked()","PelTools",this,"integralCutGUI()"); // Integral TH2(Cut)
	 fTextButton3008->Connect("Clicked()","PelTools",this,"fitGUI()"); // Fit peaks
	 	
	return;
}
 PelTools.cxx:1
 PelTools.cxx:2
 PelTools.cxx:3
 PelTools.cxx:4
 PelTools.cxx:5
 PelTools.cxx:6
 PelTools.cxx:7
 PelTools.cxx:8
 PelTools.cxx:9
 PelTools.cxx:10
 PelTools.cxx:11
 PelTools.cxx:12
 PelTools.cxx:13
 PelTools.cxx:14
 PelTools.cxx:15
 PelTools.cxx:16
 PelTools.cxx:17
 PelTools.cxx:18
 PelTools.cxx:19
 PelTools.cxx:20
 PelTools.cxx:21
 PelTools.cxx:22
 PelTools.cxx:23
 PelTools.cxx:24
 PelTools.cxx:25
 PelTools.cxx:26
 PelTools.cxx:27
 PelTools.cxx:28
 PelTools.cxx:29
 PelTools.cxx:30
 PelTools.cxx:31
 PelTools.cxx:32
 PelTools.cxx:33
 PelTools.cxx:34
 PelTools.cxx:35
 PelTools.cxx:36
 PelTools.cxx:37
 PelTools.cxx:38
 PelTools.cxx:39
 PelTools.cxx:40
 PelTools.cxx:41
 PelTools.cxx:42
 PelTools.cxx:43
 PelTools.cxx:44
 PelTools.cxx:45
 PelTools.cxx:46
 PelTools.cxx:47
 PelTools.cxx:48
 PelTools.cxx:49
 PelTools.cxx:50
 PelTools.cxx:51
 PelTools.cxx:52
 PelTools.cxx:53
 PelTools.cxx:54
 PelTools.cxx:55
 PelTools.cxx:56
 PelTools.cxx:57
 PelTools.cxx:58
 PelTools.cxx:59
 PelTools.cxx:60
 PelTools.cxx:61
 PelTools.cxx:62
 PelTools.cxx:63
 PelTools.cxx:64
 PelTools.cxx:65
 PelTools.cxx:66
 PelTools.cxx:67
 PelTools.cxx:68
 PelTools.cxx:69
 PelTools.cxx:70
 PelTools.cxx:71
 PelTools.cxx:72
 PelTools.cxx:73
 PelTools.cxx:74
 PelTools.cxx:75
 PelTools.cxx:76
 PelTools.cxx:77
 PelTools.cxx:78
 PelTools.cxx:79
 PelTools.cxx:80
 PelTools.cxx:81
 PelTools.cxx:82
 PelTools.cxx:83
 PelTools.cxx:84
 PelTools.cxx:85
 PelTools.cxx:86
 PelTools.cxx:87
 PelTools.cxx:88
 PelTools.cxx:89
 PelTools.cxx:90
 PelTools.cxx:91
 PelTools.cxx:92
 PelTools.cxx:93
 PelTools.cxx:94
 PelTools.cxx:95
 PelTools.cxx:96
 PelTools.cxx:97
 PelTools.cxx:98
 PelTools.cxx:99
 PelTools.cxx:100
 PelTools.cxx:101
 PelTools.cxx:102
 PelTools.cxx:103
 PelTools.cxx:104
 PelTools.cxx:105
 PelTools.cxx:106
 PelTools.cxx:107
 PelTools.cxx:108
 PelTools.cxx:109
 PelTools.cxx:110
 PelTools.cxx:111
 PelTools.cxx:112
 PelTools.cxx:113
 PelTools.cxx:114
 PelTools.cxx:115
 PelTools.cxx:116
 PelTools.cxx:117
 PelTools.cxx:118
 PelTools.cxx:119
 PelTools.cxx:120
 PelTools.cxx:121
 PelTools.cxx:122
 PelTools.cxx:123
 PelTools.cxx:124
 PelTools.cxx:125
 PelTools.cxx:126
 PelTools.cxx:127
 PelTools.cxx:128
 PelTools.cxx:129
 PelTools.cxx:130
 PelTools.cxx:131
 PelTools.cxx:132
 PelTools.cxx:133
 PelTools.cxx:134
 PelTools.cxx:135
 PelTools.cxx:136
 PelTools.cxx:137
 PelTools.cxx:138
 PelTools.cxx:139
 PelTools.cxx:140
 PelTools.cxx:141
 PelTools.cxx:142
 PelTools.cxx:143
 PelTools.cxx:144
 PelTools.cxx:145
 PelTools.cxx:146
 PelTools.cxx:147
 PelTools.cxx:148
 PelTools.cxx:149
 PelTools.cxx:150
 PelTools.cxx:151
 PelTools.cxx:152
 PelTools.cxx:153
 PelTools.cxx:154
 PelTools.cxx:155
 PelTools.cxx:156
 PelTools.cxx:157
 PelTools.cxx:158
 PelTools.cxx:159
 PelTools.cxx:160
 PelTools.cxx:161
 PelTools.cxx:162
 PelTools.cxx:163
 PelTools.cxx:164
 PelTools.cxx:165
 PelTools.cxx:166
 PelTools.cxx:167
 PelTools.cxx:168
 PelTools.cxx:169
 PelTools.cxx:170
 PelTools.cxx:171
 PelTools.cxx:172
 PelTools.cxx:173
 PelTools.cxx:174
 PelTools.cxx:175
 PelTools.cxx:176
 PelTools.cxx:177
 PelTools.cxx:178
 PelTools.cxx:179
 PelTools.cxx:180
 PelTools.cxx:181
 PelTools.cxx:182
 PelTools.cxx:183
 PelTools.cxx:184
 PelTools.cxx:185
 PelTools.cxx:186
 PelTools.cxx:187
 PelTools.cxx:188
 PelTools.cxx:189
 PelTools.cxx:190
 PelTools.cxx:191
 PelTools.cxx:192
 PelTools.cxx:193
 PelTools.cxx:194
 PelTools.cxx:195
 PelTools.cxx:196
 PelTools.cxx:197
 PelTools.cxx:198
 PelTools.cxx:199
 PelTools.cxx:200
 PelTools.cxx:201
 PelTools.cxx:202
 PelTools.cxx:203
 PelTools.cxx:204
 PelTools.cxx:205
 PelTools.cxx:206
 PelTools.cxx:207
 PelTools.cxx:208
 PelTools.cxx:209
 PelTools.cxx:210
 PelTools.cxx:211
 PelTools.cxx:212
 PelTools.cxx:213
 PelTools.cxx:214
 PelTools.cxx:215
 PelTools.cxx:216
 PelTools.cxx:217
 PelTools.cxx:218
 PelTools.cxx:219
 PelTools.cxx:220
 PelTools.cxx:221
 PelTools.cxx:222
 PelTools.cxx:223
 PelTools.cxx:224
 PelTools.cxx:225
 PelTools.cxx:226
 PelTools.cxx:227
 PelTools.cxx:228
 PelTools.cxx:229
 PelTools.cxx:230
 PelTools.cxx:231
 PelTools.cxx:232
 PelTools.cxx:233
 PelTools.cxx:234
 PelTools.cxx:235
 PelTools.cxx:236
 PelTools.cxx:237
 PelTools.cxx:238
 PelTools.cxx:239
 PelTools.cxx:240
 PelTools.cxx:241
 PelTools.cxx:242
 PelTools.cxx:243
 PelTools.cxx:244
 PelTools.cxx:245
 PelTools.cxx:246
 PelTools.cxx:247
 PelTools.cxx:248
 PelTools.cxx:249
 PelTools.cxx:250
 PelTools.cxx:251
 PelTools.cxx:252
 PelTools.cxx:253
 PelTools.cxx:254
 PelTools.cxx:255
 PelTools.cxx:256
 PelTools.cxx:257
 PelTools.cxx:258
 PelTools.cxx:259
 PelTools.cxx:260
 PelTools.cxx:261
 PelTools.cxx:262
 PelTools.cxx:263
 PelTools.cxx:264
 PelTools.cxx:265
 PelTools.cxx:266
 PelTools.cxx:267
 PelTools.cxx:268
 PelTools.cxx:269
 PelTools.cxx:270
 PelTools.cxx:271
 PelTools.cxx:272
 PelTools.cxx:273
 PelTools.cxx:274
 PelTools.cxx:275
 PelTools.cxx:276
 PelTools.cxx:277
 PelTools.cxx:278
 PelTools.cxx:279
 PelTools.cxx:280
 PelTools.cxx:281
 PelTools.cxx:282
 PelTools.cxx:283
 PelTools.cxx:284
 PelTools.cxx:285
 PelTools.cxx:286
 PelTools.cxx:287
 PelTools.cxx:288
 PelTools.cxx:289
 PelTools.cxx:290
 PelTools.cxx:291
 PelTools.cxx:292
 PelTools.cxx:293
 PelTools.cxx:294
 PelTools.cxx:295
 PelTools.cxx:296
 PelTools.cxx:297
 PelTools.cxx:298
 PelTools.cxx:299
 PelTools.cxx:300
 PelTools.cxx:301
 PelTools.cxx:302
 PelTools.cxx:303
 PelTools.cxx:304
 PelTools.cxx:305
 PelTools.cxx:306
 PelTools.cxx:307
 PelTools.cxx:308
 PelTools.cxx:309
 PelTools.cxx:310
 PelTools.cxx:311
 PelTools.cxx:312
 PelTools.cxx:313
 PelTools.cxx:314
 PelTools.cxx:315
 PelTools.cxx:316
 PelTools.cxx:317
 PelTools.cxx:318
 PelTools.cxx:319
 PelTools.cxx:320
 PelTools.cxx:321
 PelTools.cxx:322
 PelTools.cxx:323
 PelTools.cxx:324
 PelTools.cxx:325
 PelTools.cxx:326
 PelTools.cxx:327
 PelTools.cxx:328
 PelTools.cxx:329
 PelTools.cxx:330
 PelTools.cxx:331
 PelTools.cxx:332
 PelTools.cxx:333
 PelTools.cxx:334
 PelTools.cxx:335
 PelTools.cxx:336
 PelTools.cxx:337
 PelTools.cxx:338
 PelTools.cxx:339
 PelTools.cxx:340
 PelTools.cxx:341
 PelTools.cxx:342
 PelTools.cxx:343
 PelTools.cxx:344
 PelTools.cxx:345
 PelTools.cxx:346
 PelTools.cxx:347
 PelTools.cxx:348
 PelTools.cxx:349
 PelTools.cxx:350
 PelTools.cxx:351
 PelTools.cxx:352
 PelTools.cxx:353
 PelTools.cxx:354
 PelTools.cxx:355
 PelTools.cxx:356
 PelTools.cxx:357
 PelTools.cxx:358
 PelTools.cxx:359
 PelTools.cxx:360
 PelTools.cxx:361
 PelTools.cxx:362
 PelTools.cxx:363
 PelTools.cxx:364
 PelTools.cxx:365
 PelTools.cxx:366
 PelTools.cxx:367
 PelTools.cxx:368
 PelTools.cxx:369
 PelTools.cxx:370
 PelTools.cxx:371
 PelTools.cxx:372
 PelTools.cxx:373
 PelTools.cxx:374
 PelTools.cxx:375
 PelTools.cxx:376
 PelTools.cxx:377
 PelTools.cxx:378
 PelTools.cxx:379
 PelTools.cxx:380
 PelTools.cxx:381
 PelTools.cxx:382
 PelTools.cxx:383
 PelTools.cxx:384
 PelTools.cxx:385
 PelTools.cxx:386
 PelTools.cxx:387
 PelTools.cxx:388
 PelTools.cxx:389
 PelTools.cxx:390
 PelTools.cxx:391
 PelTools.cxx:392
 PelTools.cxx:393
 PelTools.cxx:394
 PelTools.cxx:395
 PelTools.cxx:396
 PelTools.cxx:397
 PelTools.cxx:398
 PelTools.cxx:399
 PelTools.cxx:400
 PelTools.cxx:401
 PelTools.cxx:402
 PelTools.cxx:403
 PelTools.cxx:404
 PelTools.cxx:405
 PelTools.cxx:406
 PelTools.cxx:407
 PelTools.cxx:408
 PelTools.cxx:409
 PelTools.cxx:410
 PelTools.cxx:411
 PelTools.cxx:412
 PelTools.cxx:413
 PelTools.cxx:414
 PelTools.cxx:415
 PelTools.cxx:416
 PelTools.cxx:417
 PelTools.cxx:418
 PelTools.cxx:419
 PelTools.cxx:420
 PelTools.cxx:421
 PelTools.cxx:422
 PelTools.cxx:423
 PelTools.cxx:424
 PelTools.cxx:425
 PelTools.cxx:426
 PelTools.cxx:427
 PelTools.cxx:428
 PelTools.cxx:429
 PelTools.cxx:430
 PelTools.cxx:431
 PelTools.cxx:432
 PelTools.cxx:433
 PelTools.cxx:434
 PelTools.cxx:435
 PelTools.cxx:436
 PelTools.cxx:437
 PelTools.cxx:438
 PelTools.cxx:439
 PelTools.cxx:440
 PelTools.cxx:441
 PelTools.cxx:442
 PelTools.cxx:443
 PelTools.cxx:444
 PelTools.cxx:445
 PelTools.cxx:446
 PelTools.cxx:447
 PelTools.cxx:448
 PelTools.cxx:449
 PelTools.cxx:450
 PelTools.cxx:451
 PelTools.cxx:452
 PelTools.cxx:453
 PelTools.cxx:454
 PelTools.cxx:455
 PelTools.cxx:456
 PelTools.cxx:457
 PelTools.cxx:458
 PelTools.cxx:459
 PelTools.cxx:460
 PelTools.cxx:461
 PelTools.cxx:462
 PelTools.cxx:463
 PelTools.cxx:464
 PelTools.cxx:465
 PelTools.cxx:466
 PelTools.cxx:467
 PelTools.cxx:468
 PelTools.cxx:469
 PelTools.cxx:470
 PelTools.cxx:471
 PelTools.cxx:472
 PelTools.cxx:473
 PelTools.cxx:474
 PelTools.cxx:475
 PelTools.cxx:476
 PelTools.cxx:477
 PelTools.cxx:478
 PelTools.cxx:479
 PelTools.cxx:480
 PelTools.cxx:481
 PelTools.cxx:482
 PelTools.cxx:483
 PelTools.cxx:484
 PelTools.cxx:485
 PelTools.cxx:486
 PelTools.cxx:487
 PelTools.cxx:488
 PelTools.cxx:489
 PelTools.cxx:490
 PelTools.cxx:491
 PelTools.cxx:492
 PelTools.cxx:493
 PelTools.cxx:494
 PelTools.cxx:495
 PelTools.cxx:496
 PelTools.cxx:497
 PelTools.cxx:498
 PelTools.cxx:499
 PelTools.cxx:500
 PelTools.cxx:501
 PelTools.cxx:502
 PelTools.cxx:503
 PelTools.cxx:504
 PelTools.cxx:505
 PelTools.cxx:506
 PelTools.cxx:507
 PelTools.cxx:508
 PelTools.cxx:509
 PelTools.cxx:510
 PelTools.cxx:511
 PelTools.cxx:512
 PelTools.cxx:513
 PelTools.cxx:514
 PelTools.cxx:515
 PelTools.cxx:516
 PelTools.cxx:517
 PelTools.cxx:518
 PelTools.cxx:519
 PelTools.cxx:520
 PelTools.cxx:521
 PelTools.cxx:522
 PelTools.cxx:523
 PelTools.cxx:524
 PelTools.cxx:525
 PelTools.cxx:526
 PelTools.cxx:527
 PelTools.cxx:528
 PelTools.cxx:529
 PelTools.cxx:530
 PelTools.cxx:531
 PelTools.cxx:532
 PelTools.cxx:533
 PelTools.cxx:534
 PelTools.cxx:535
 PelTools.cxx:536
 PelTools.cxx:537
 PelTools.cxx:538
 PelTools.cxx:539
 PelTools.cxx:540
 PelTools.cxx:541
 PelTools.cxx:542
 PelTools.cxx:543
 PelTools.cxx:544
 PelTools.cxx:545
 PelTools.cxx:546
 PelTools.cxx:547
 PelTools.cxx:548
 PelTools.cxx:549
 PelTools.cxx:550
 PelTools.cxx:551
 PelTools.cxx:552
 PelTools.cxx:553
 PelTools.cxx:554
 PelTools.cxx:555
 PelTools.cxx:556
 PelTools.cxx:557
 PelTools.cxx:558
 PelTools.cxx:559
 PelTools.cxx:560
 PelTools.cxx:561
 PelTools.cxx:562
 PelTools.cxx:563
 PelTools.cxx:564
 PelTools.cxx:565
 PelTools.cxx:566
 PelTools.cxx:567
 PelTools.cxx:568
 PelTools.cxx:569
 PelTools.cxx:570
 PelTools.cxx:571
 PelTools.cxx:572
 PelTools.cxx:573
 PelTools.cxx:574
 PelTools.cxx:575
 PelTools.cxx:576
 PelTools.cxx:577
 PelTools.cxx:578
 PelTools.cxx:579
 PelTools.cxx:580
 PelTools.cxx:581
 PelTools.cxx:582
 PelTools.cxx:583
 PelTools.cxx:584
 PelTools.cxx:585
 PelTools.cxx:586
 PelTools.cxx:587
 PelTools.cxx:588
 PelTools.cxx:589
 PelTools.cxx:590
 PelTools.cxx:591
 PelTools.cxx:592
 PelTools.cxx:593
 PelTools.cxx:594
 PelTools.cxx:595
 PelTools.cxx:596
 PelTools.cxx:597
 PelTools.cxx:598
 PelTools.cxx:599
 PelTools.cxx:600
 PelTools.cxx:601
 PelTools.cxx:602
 PelTools.cxx:603
 PelTools.cxx:604
 PelTools.cxx:605
 PelTools.cxx:606
 PelTools.cxx:607
 PelTools.cxx:608
 PelTools.cxx:609
 PelTools.cxx:610
 PelTools.cxx:611
 PelTools.cxx:612
 PelTools.cxx:613
 PelTools.cxx:614
 PelTools.cxx:615
 PelTools.cxx:616
 PelTools.cxx:617
 PelTools.cxx:618
 PelTools.cxx:619
 PelTools.cxx:620
 PelTools.cxx:621
 PelTools.cxx:622
 PelTools.cxx:623
 PelTools.cxx:624
 PelTools.cxx:625
 PelTools.cxx:626
 PelTools.cxx:627
 PelTools.cxx:628
 PelTools.cxx:629
 PelTools.cxx:630
 PelTools.cxx:631
 PelTools.cxx:632
 PelTools.cxx:633
 PelTools.cxx:634
 PelTools.cxx:635
 PelTools.cxx:636
 PelTools.cxx:637
 PelTools.cxx:638
 PelTools.cxx:639
 PelTools.cxx:640
 PelTools.cxx:641
 PelTools.cxx:642
 PelTools.cxx:643
 PelTools.cxx:644
 PelTools.cxx:645
 PelTools.cxx:646
 PelTools.cxx:647
 PelTools.cxx:648
 PelTools.cxx:649
 PelTools.cxx:650
 PelTools.cxx:651
 PelTools.cxx:652
 PelTools.cxx:653
 PelTools.cxx:654
 PelTools.cxx:655
 PelTools.cxx:656
 PelTools.cxx:657
 PelTools.cxx:658
 PelTools.cxx:659
 PelTools.cxx:660
 PelTools.cxx:661
 PelTools.cxx:662
 PelTools.cxx:663
 PelTools.cxx:664
 PelTools.cxx:665
 PelTools.cxx:666
 PelTools.cxx:667
 PelTools.cxx:668
 PelTools.cxx:669
 PelTools.cxx:670
 PelTools.cxx:671
 PelTools.cxx:672
 PelTools.cxx:673
 PelTools.cxx:674
 PelTools.cxx:675
 PelTools.cxx:676
 PelTools.cxx:677
 PelTools.cxx:678
 PelTools.cxx:679
 PelTools.cxx:680
 PelTools.cxx:681
 PelTools.cxx:682
 PelTools.cxx:683
 PelTools.cxx:684
 PelTools.cxx:685
 PelTools.cxx:686
 PelTools.cxx:687
 PelTools.cxx:688
 PelTools.cxx:689
 PelTools.cxx:690
 PelTools.cxx:691
 PelTools.cxx:692
 PelTools.cxx:693
 PelTools.cxx:694
 PelTools.cxx:695
 PelTools.cxx:696
 PelTools.cxx:697
 PelTools.cxx:698
 PelTools.cxx:699
 PelTools.cxx:700
 PelTools.cxx:701
 PelTools.cxx:702
 PelTools.cxx:703
 PelTools.cxx:704
 PelTools.cxx:705
 PelTools.cxx:706
 PelTools.cxx:707
 PelTools.cxx:708
 PelTools.cxx:709
 PelTools.cxx:710
 PelTools.cxx:711
 PelTools.cxx:712
 PelTools.cxx:713
 PelTools.cxx:714
 PelTools.cxx:715
 PelTools.cxx:716
 PelTools.cxx:717
 PelTools.cxx:718
 PelTools.cxx:719
 PelTools.cxx:720
 PelTools.cxx:721
 PelTools.cxx:722
 PelTools.cxx:723
 PelTools.cxx:724
 PelTools.cxx:725
 PelTools.cxx:726
 PelTools.cxx:727
 PelTools.cxx:728
 PelTools.cxx:729
 PelTools.cxx:730
 PelTools.cxx:731
 PelTools.cxx:732
 PelTools.cxx:733
 PelTools.cxx:734
 PelTools.cxx:735
 PelTools.cxx:736
 PelTools.cxx:737
 PelTools.cxx:738
 PelTools.cxx:739
 PelTools.cxx:740
 PelTools.cxx:741
 PelTools.cxx:742
 PelTools.cxx:743
 PelTools.cxx:744
 PelTools.cxx:745
 PelTools.cxx:746
 PelTools.cxx:747
 PelTools.cxx:748
 PelTools.cxx:749
 PelTools.cxx:750
 PelTools.cxx:751
 PelTools.cxx:752
 PelTools.cxx:753
 PelTools.cxx:754
 PelTools.cxx:755
 PelTools.cxx:756
 PelTools.cxx:757
 PelTools.cxx:758
 PelTools.cxx:759
 PelTools.cxx:760
 PelTools.cxx:761
 PelTools.cxx:762
 PelTools.cxx:763
 PelTools.cxx:764
 PelTools.cxx:765
 PelTools.cxx:766
 PelTools.cxx:767
 PelTools.cxx:768
 PelTools.cxx:769
 PelTools.cxx:770
 PelTools.cxx:771
 PelTools.cxx:772
 PelTools.cxx:773
 PelTools.cxx:774
 PelTools.cxx:775
 PelTools.cxx:776
 PelTools.cxx:777
 PelTools.cxx:778
 PelTools.cxx:779
 PelTools.cxx:780
 PelTools.cxx:781
 PelTools.cxx:782
 PelTools.cxx:783
 PelTools.cxx:784
 PelTools.cxx:785
 PelTools.cxx:786
 PelTools.cxx:787
 PelTools.cxx:788
 PelTools.cxx:789
 PelTools.cxx:790
 PelTools.cxx:791
 PelTools.cxx:792
 PelTools.cxx:793
 PelTools.cxx:794
 PelTools.cxx:795
 PelTools.cxx:796
 PelTools.cxx:797
 PelTools.cxx:798
 PelTools.cxx:799
 PelTools.cxx:800
 PelTools.cxx:801
 PelTools.cxx:802
 PelTools.cxx:803
 PelTools.cxx:804
 PelTools.cxx:805
 PelTools.cxx:806
 PelTools.cxx:807
 PelTools.cxx:808
 PelTools.cxx:809
 PelTools.cxx:810
 PelTools.cxx:811
 PelTools.cxx:812
 PelTools.cxx:813
 PelTools.cxx:814
 PelTools.cxx:815
 PelTools.cxx:816
 PelTools.cxx:817
 PelTools.cxx:818
 PelTools.cxx:819
 PelTools.cxx:820
 PelTools.cxx:821
 PelTools.cxx:822
 PelTools.cxx:823
 PelTools.cxx:824
 PelTools.cxx:825
 PelTools.cxx:826
 PelTools.cxx:827
 PelTools.cxx:828
 PelTools.cxx:829
 PelTools.cxx:830
 PelTools.cxx:831
 PelTools.cxx:832
 PelTools.cxx:833
 PelTools.cxx:834
 PelTools.cxx:835
 PelTools.cxx:836
 PelTools.cxx:837
 PelTools.cxx:838
 PelTools.cxx:839
 PelTools.cxx:840
 PelTools.cxx:841
 PelTools.cxx:842
 PelTools.cxx:843
 PelTools.cxx:844
 PelTools.cxx:845
 PelTools.cxx:846
 PelTools.cxx:847
 PelTools.cxx:848
 PelTools.cxx:849
 PelTools.cxx:850
 PelTools.cxx:851
 PelTools.cxx:852
 PelTools.cxx:853
 PelTools.cxx:854
 PelTools.cxx:855
 PelTools.cxx:856
 PelTools.cxx:857
 PelTools.cxx:858
 PelTools.cxx:859
 PelTools.cxx:860
 PelTools.cxx:861
 PelTools.cxx:862
 PelTools.cxx:863
 PelTools.cxx:864
 PelTools.cxx:865
 PelTools.cxx:866
 PelTools.cxx:867
 PelTools.cxx:868
 PelTools.cxx:869
 PelTools.cxx:870
 PelTools.cxx:871
 PelTools.cxx:872
 PelTools.cxx:873
 PelTools.cxx:874
 PelTools.cxx:875
 PelTools.cxx:876
 PelTools.cxx:877
 PelTools.cxx:878
 PelTools.cxx:879
 PelTools.cxx:880
 PelTools.cxx:881
 PelTools.cxx:882
 PelTools.cxx:883
 PelTools.cxx:884
 PelTools.cxx:885
 PelTools.cxx:886
 PelTools.cxx:887
 PelTools.cxx:888
 PelTools.cxx:889
 PelTools.cxx:890
 PelTools.cxx:891
 PelTools.cxx:892
 PelTools.cxx:893
 PelTools.cxx:894
 PelTools.cxx:895
 PelTools.cxx:896
 PelTools.cxx:897
 PelTools.cxx:898
 PelTools.cxx:899
 PelTools.cxx:900
 PelTools.cxx:901
 PelTools.cxx:902
 PelTools.cxx:903
 PelTools.cxx:904
 PelTools.cxx:905
 PelTools.cxx:906
 PelTools.cxx:907
 PelTools.cxx:908
 PelTools.cxx:909
 PelTools.cxx:910
 PelTools.cxx:911
 PelTools.cxx:912
 PelTools.cxx:913
 PelTools.cxx:914
 PelTools.cxx:915
 PelTools.cxx:916
 PelTools.cxx:917
 PelTools.cxx:918
 PelTools.cxx:919
 PelTools.cxx:920
 PelTools.cxx:921
 PelTools.cxx:922
 PelTools.cxx:923
 PelTools.cxx:924
 PelTools.cxx:925
 PelTools.cxx:926
 PelTools.cxx:927
 PelTools.cxx:928
 PelTools.cxx:929
 PelTools.cxx:930
 PelTools.cxx:931
 PelTools.cxx:932
 PelTools.cxx:933
 PelTools.cxx:934
 PelTools.cxx:935
 PelTools.cxx:936
 PelTools.cxx:937
 PelTools.cxx:938
 PelTools.cxx:939
 PelTools.cxx:940
 PelTools.cxx:941
 PelTools.cxx:942
 PelTools.cxx:943
 PelTools.cxx:944
 PelTools.cxx:945
 PelTools.cxx:946
 PelTools.cxx:947
 PelTools.cxx:948
 PelTools.cxx:949
 PelTools.cxx:950
 PelTools.cxx:951
 PelTools.cxx:952
 PelTools.cxx:953
 PelTools.cxx:954
 PelTools.cxx:955
 PelTools.cxx:956
 PelTools.cxx:957
 PelTools.cxx:958
 PelTools.cxx:959
 PelTools.cxx:960
 PelTools.cxx:961
 PelTools.cxx:962
 PelTools.cxx:963
 PelTools.cxx:964
 PelTools.cxx:965
 PelTools.cxx:966
 PelTools.cxx:967
 PelTools.cxx:968
 PelTools.cxx:969
 PelTools.cxx:970
 PelTools.cxx:971
 PelTools.cxx:972
 PelTools.cxx:973
 PelTools.cxx:974
 PelTools.cxx:975
 PelTools.cxx:976
 PelTools.cxx:977
 PelTools.cxx:978
 PelTools.cxx:979
 PelTools.cxx:980
 PelTools.cxx:981
 PelTools.cxx:982
 PelTools.cxx:983
 PelTools.cxx:984
 PelTools.cxx:985
 PelTools.cxx:986
 PelTools.cxx:987
 PelTools.cxx:988
 PelTools.cxx:989
 PelTools.cxx:990
 PelTools.cxx:991
 PelTools.cxx:992
 PelTools.cxx:993
 PelTools.cxx:994
 PelTools.cxx:995
 PelTools.cxx:996
 PelTools.cxx:997
 PelTools.cxx:998
 PelTools.cxx:999
 PelTools.cxx:1000
 PelTools.cxx:1001
 PelTools.cxx:1002
 PelTools.cxx:1003
 PelTools.cxx:1004
 PelTools.cxx:1005
 PelTools.cxx:1006
 PelTools.cxx:1007
 PelTools.cxx:1008
 PelTools.cxx:1009
 PelTools.cxx:1010
 PelTools.cxx:1011
 PelTools.cxx:1012
 PelTools.cxx:1013
 PelTools.cxx:1014
 PelTools.cxx:1015
 PelTools.cxx:1016
 PelTools.cxx:1017
 PelTools.cxx:1018
 PelTools.cxx:1019
 PelTools.cxx:1020
 PelTools.cxx:1021
 PelTools.cxx:1022
 PelTools.cxx:1023
 PelTools.cxx:1024
 PelTools.cxx:1025
 PelTools.cxx:1026
 PelTools.cxx:1027
 PelTools.cxx:1028
 PelTools.cxx:1029
 PelTools.cxx:1030
 PelTools.cxx:1031
 PelTools.cxx:1032
 PelTools.cxx:1033
 PelTools.cxx:1034
 PelTools.cxx:1035
 PelTools.cxx:1036
 PelTools.cxx:1037
 PelTools.cxx:1038
 PelTools.cxx:1039
 PelTools.cxx:1040
 PelTools.cxx:1041
 PelTools.cxx:1042
 PelTools.cxx:1043
 PelTools.cxx:1044
 PelTools.cxx:1045
 PelTools.cxx:1046
 PelTools.cxx:1047
 PelTools.cxx:1048
 PelTools.cxx:1049
 PelTools.cxx:1050
 PelTools.cxx:1051
 PelTools.cxx:1052
 PelTools.cxx:1053
 PelTools.cxx:1054
 PelTools.cxx:1055
 PelTools.cxx:1056
 PelTools.cxx:1057
 PelTools.cxx:1058
 PelTools.cxx:1059
 PelTools.cxx:1060
 PelTools.cxx:1061
 PelTools.cxx:1062
 PelTools.cxx:1063
 PelTools.cxx:1064
 PelTools.cxx:1065
 PelTools.cxx:1066
 PelTools.cxx:1067
 PelTools.cxx:1068
 PelTools.cxx:1069
 PelTools.cxx:1070
 PelTools.cxx:1071
 PelTools.cxx:1072
 PelTools.cxx:1073
 PelTools.cxx:1074
 PelTools.cxx:1075
 PelTools.cxx:1076
 PelTools.cxx:1077
 PelTools.cxx:1078
 PelTools.cxx:1079
 PelTools.cxx:1080
 PelTools.cxx:1081
 PelTools.cxx:1082
 PelTools.cxx:1083
 PelTools.cxx:1084
 PelTools.cxx:1085
 PelTools.cxx:1086
 PelTools.cxx:1087
 PelTools.cxx:1088
 PelTools.cxx:1089
 PelTools.cxx:1090
 PelTools.cxx:1091
 PelTools.cxx:1092
 PelTools.cxx:1093
 PelTools.cxx:1094
 PelTools.cxx:1095
 PelTools.cxx:1096