ROOT logo
#include "ScanRoot.h"
#include <iostream>
using namespace std;

ClassImp(ScanRoot)
ScanRoot::ScanRoot(TDirectory* dir):TNamed("ScanRoot","Scan for ROOT")
{
  mDir = dir;
	mDir->SetWritable(kTRUE);
  mIo = NULL;
  mKeepLast = false;
  setPath();
}
ScanRoot::ScanRoot(bool debug):TNamed("ScanRoot","Scan for ROOT")
{
  mDebug = debug;
  mIo = new PelIO();
  mIo->setDebug(mDebug);
  mDir = new TDirectory("Scan_Histograms","Scan Histograms directory");
	mDir->SetWritable(kTRUE);
  mKeepLast = false;
  setPath();
}      
void ScanRoot::setPath()
{
  // creating structure in the TBrowser object
  int i,n;
  gROOT->cd("/");
  TList* bl=gROOT->GetListOfBrowsables();
  n = bl->GetSize();
  TList *l = NULL;
  for(i=0;i<n;i++) if(!strcmp(bl->At(i)->ClassName(),"TList")) l = (TList*)bl->At(i);
  bl->Clear("nodelete");
  bl->Add(mDir);
  TSystemDirectory *dir = new TSystemDirectory(gSystem->pwd(),gSystem->pwd());
  bl->Add(dir);
  if(l)
  {
    l->SetName("ROOT Files");
    bl->Add(l);
  }
  
  // adding $PELLETRON/include to root include path
  TString path = gSystem->GetIncludePath(); 
  TString system = gSystem->GetBuildArch();
  if(!system.BeginsWith("win32")) path.Append(" -I$PELLETRON/include");
  gSystem->SetIncludePath(path.Data());
  
  //this is for the Zero option in the histogram menu
  mH1= false;
  mH2= false;
  
  gROOT->Add(this);
  mMaxNpar = 128;
  mHistLoaded = false;
  mL2Loaded = false;
  mHistLibrary = "";
  mL2Library = "";

  return;
}
ScanRoot::~ScanRoot()
{
  if(mIo) { delete mIo; mIo = NULL;}
}
int ScanRoot::go(int nEv)
{
  if(!mIo) return 0;
  int read=0;
  int stat = 0;
  long bytes = 0;
  bool ok = true;
  char line[400];
  int i;
  gROOT->cd();
  // loop de eventos
  // stat = 0 -> no IO
  // stat = 1 -> Ok
  // stat = 2 -> Problema ou fim de arquivo
  TStopwatch timing;
  timing.Start();
  do
  {
    // if set to true, keep the last event processed in the memory
    // good for event mixing studies
    if(mKeepLast)
    {
      mNparLast = mNpar;
      for(i = 0;i<mMaxNpar; i++) mParLast[i] = mPar[i];
    }
    stat = mIo->readEvent(mMaxNpar,mNpar,&mPar[0]);
    if(stat==1) 
    {
      bytes+= mIo->getCurrentEventSize();
      ok = process(mNpar,&mPar[0]);    
      if(ok) if(mIo->isOutputOpen(0)) mIo->writeEvent(0);
      read++;
    }
    if(nEv>0) if(read>=nEv) stat = 0;
  } while(stat==1);
  timing.Stop();  
  log("Processed %d events. Time used = %f seconds  CPU time = %f seconds",read,timing.RealTime(),timing.CpuTime());
  return read;
}
bool ScanRoot::process(short nPar, float* par)
{
  bool ok = true;
  if(mL2Loaded) ok = (*l2trigger)(nPar,par);
  if(ok) if(mHistLoaded) (*fillHistograms)(nPar,par);
  return ok;
}
int ScanRoot::loadHist(char* file)
{
  int st,i,n;
  int error,id;
  char line[200];
  unloadHist();
  
  mHistLibrary=file;
  TString system = gSystem->GetBuildArch();
   
  if(mHistLibrary.EndsWith(".cxx") || mHistLibrary.EndsWith(".C"))
  {
    TString lib;
    if(mHistLibrary.EndsWith(".cxx")) lib = mHistLibrary(0,mHistLibrary.Length()-4);
    else lib = mHistLibrary(0,mHistLibrary.Length()-2);
    st = gSystem->CompileMacro(mHistLibrary.Data(),"kfOc",lib.Data());
    //mHistLibrary = lib;
    if(st!=1)
    {
      log(2,"Problem Compiling histogram code");
      mHistLibrary="";
      mHistLoaded = false;
      return 1;
    }
    TString libso = lib;
	if(system.BeginsWith("linux")) libso+=".so";
	else libso+=".dll";
    gSystem->Load(libso.Data());
  }
  else 
  {
    if(mHistLibrary.EndsWith(".so") || mHistLibrary.EndsWith(".dll")) 
	{
	  gSystem->Load(mHistLibrary.Data());
    }
	else
    {
      log(1,"Not a valid histogram code");
      mHistLibrary="";
      mHistLoaded = false;
      return 2;      
    }
  }
  // cd... to the Reserved area for the SPM histograms
  cd();
  TList* l = mDir->GetList();
  if(l && l->GetSize()>0)
  {
    l->Delete();
    l->Clear();
  }
  
  cd();
  id = getROOTString("bookHistograms",line);
  if(id<0)
  {
    log(2,"Problem finding ScanRoot pointer");
    mHistLibrary="";
    mHistLoaded = false;
    return 3;
  }
  gROOT->ProcessLine(line,&error);
  if(error!=0)
  {
    log(2,"Problem booking histograms");
    mHistLibrary="";
    mHistLoaded = false;
    return 4;
  }
  gROOT->cd();
  mHistLoaded = true;
  prepareHistograms(mDir);
  log("Histograms loaded");
  return 0;
}
void ScanRoot::unloadHist()
{  
  if(mHistLoaded) 
  {
    TString lib = mHistLibrary;
    if(mHistLibrary.EndsWith(".cxx")) lib = mHistLibrary(0,mHistLibrary.Length()-4);
    else if(mHistLibrary.EndsWith(".C")) lib = mHistLibrary(0,mHistLibrary.Length()-2);
    else if(mHistLibrary.EndsWith(".so")) lib = mHistLibrary(0,mHistLibrary.Length()-3);
    else if(mHistLibrary.EndsWith(".dll")) lib = mHistLibrary(0,mHistLibrary.Length()-4);
    gSystem->Unload(lib.Data());
  }
  mHistLoaded = false;
  return;
}
void ScanRoot::unloadL2()
{  
  if(mL2Loaded) 
  {
    TString lib = mL2Library;
    if(mL2Library.EndsWith(".cxx")) lib = mL2Library(0,mHistLibrary.Length()-4);
    else if(mL2Library.EndsWith(".C")) lib = mL2Library(0,mHistLibrary.Length()-2);
    else if(mL2Library.EndsWith(".so")) lib = mL2Library(0,mHistLibrary.Length()-3);
    else if(mL2Library.EndsWith(".dll")) lib = mL2Library(0,mHistLibrary.Length()-4);
    gSystem->Unload(lib.Data());
  }
  mL2Loaded = false;
  return;
}
int ScanRoot::loadL2(char* file)
{
  int st,error,id;
  char line[200];
  
  unloadL2();  
  mL2Library=file;
   
  if(mL2Library.EndsWith(".cxx") || mL2Library.EndsWith(".C"))
  {
    TString lib;
    if(mL2Library.EndsWith(".cxx")) lib = mL2Library(0,mL2Library.Length()-4);
    else lib = mL2Library(0,mL2Library.Length()-2);
    st = gSystem->CompileMacro(mL2Library.Data(),"kfOc",lib.Data());
    //mL2Library = lib;
    if(st!=1)
    {
      log(2,"Problem Compiling Level 2 code");
      mL2Library="";
      mL2Loaded = false;
      return 1;
    }
    TString system = gSystem->GetBuildArch();
    TString libso = lib;
	if(system.BeginsWith("linux")) libso+=".so";
	else libso+=".dll";

    gSystem->Load(libso.Data());
  }
  else 
  {
    if(mL2Library.EndsWith(".so") || mL2Library.EndsWith(".dll")) gSystem->Load(mL2Library.Data());
    else
    {
      log(1,"Not a valid Level 2 code");
      mL2Library="";
      mL2Loaded = false;
      return 2;      
    }
  }
  id = getROOTString("configureL2",line);
  if(id<0)
  {
    log(2,"Problem finding ScanRoot pointer");
    mL2Library="";
    mL2Loaded = false;
    return 3;
  }
  gROOT->ProcessLine(line,&error);
  if(error!=0)
  {
    log(2,"Problem configuring Level 2");
    mHistLibrary="";
    mHistLoaded = false;
    return 4;
  }
  mL2Loaded = true;
  log("Level 2 loaded");
  return 0;
}
int ScanRoot::getROOTString(char* base,char*line)
{
  int id=-1;
  int n,i;
  TList *l = gROOT->GetList();
  n = l->GetSize();
  if(n==0) return -1;
  for(i=0;i<n;i++)
  {
    if(l->At(i)==this) { id=i; break;}
  }
  if(id==-1) return -1;
  sprintf(line,"%s((ScanRoot*)gROOT->GetList()->At(%d))",base,id);
  return id;
}
void ScanRoot::zero()
{
  zeroDir(mDir);
  return;
}
void ScanRoot::zero(char* name)
{
  TObject *o = findObject(mDir,name);
	mDir->cd();
  if(!o) return;
  TString n = o->ClassName();
  if(n.BeginsWith("TH2")) ((TH2*)o)->Reset();
  if(n.BeginsWith("TH1")) ((TH1*)o)->Reset();
  return;
}
void ScanRoot::zeroDir(TDirectory* dir)
{
  int n,i;
  TList* l = dir->GetList();
	//cout <<"Inside directory "<<dir->GetName()<<endl;
  if(l)
  {
    n = l->GetSize();
    if(n>0)
    {
      for(i=0;i<n;i++) 
      {
        TObject *o = l->At(i);
        TString c = o->ClassName();
        if(c.BeginsWith("TH1")) ((TH2*)o)->Reset();
        if(c.BeginsWith("TH2")) ((TH1*)o)->Reset();
				//if(c.BeginsWith("TH")) cout <<"    Zeroing histogram "<<o->GetName()<<endl;
        if(c.BeginsWith("TDirectory")) zeroDir((TDirectory*)o);
			}
		}
	}
}
void ScanRoot::prepareHistograms(TDirectory* dir)
{
  int i,nn;
  TList* l = dir->GetList();
  if(l)
  {
    nn = l->GetSize();
    if(nn>0)
    {
      for(i=0;i<nn;i++) 
      {
        TObject *o = l->At(i);
        TString n = o->ClassName();
	if(n.BeginsWith("TDirectory")) prepareHistograms((TDirectory*)o);
        if(n.BeginsWith("TH2")) 
        {
          ((TH2*)o)->SetOption("colz");
          if(!mH2)
          {
            TClass *c = ((TH2*)o)->IsA();
            TList *ll = c->GetMenuList();
            ll->AddLast(new TClassMenuItem(TClassMenuItem::kPopupUserFunction, c,"Zero","Reset", NULL,NULL,-1,kTRUE));
            mH2 = true;
          }
        }
        if(n.BeginsWith("TH1") && !mH1)
        {
          TClass *c = ((TH1*)o)->IsA();
          TList *ll = c->GetMenuList();
          ll->AddLast(new TClassMenuItem(TClassMenuItem::kPopupUserFunction, c,"Zero","Reset", NULL,NULL,-1,kTRUE));
          mH1 = true;
        }
      }
    }
  }
  return;
}

TObject* ScanRoot::findObject(TDirectory* dir, char* name)
{
  int i = 0, n = 0;
  TObject *oo = 0;
  TDirectory *D = dir;
  //cout <<"Inside directory "<<dir->GetName()<<endl;
	
  TList* l = dir->GetList();
  if(l)
  {
    n = l->GetSize();
    if(n>0)
    {
      for(i=0;i<n;i++) 
      {
        TObject *o = l->At(i);
        TString c = o->ClassName();
        if(c.BeginsWith("TDirectory"))
	{
	  if(!oo) oo = findObject((TDirectory*)o,name);
	} 
	else if(!strcmp(name, o->GetName())) 
	{ 
          //cout <<"    Found object "<<o->GetName()<<"  at  "<<o<<endl;
	  oo=o; 
	  return oo;
	}
      }
    }
  }	
  D->cd();
  return oo;
}

void ScanRoot::saveDir(TFile* f, TDirectory* parent, TDirectory* dir, bool root)
{
  int n, i;
	TDirectory *D = 0;
	if(root) D = parent;
	else
	{
	  D = parent->mkdir(dir->GetName());
		D->cd();
	}
	TList* l = dir->GetList();
	if(l)
	{
    n = l->GetSize();
    if(n>0)
    {
      for(i=0;i<n;i++) 
      {
        TObject *o = l->At(i);
        TString n = o->ClassName();
        if(n.BeginsWith("TDirectory")) 
				{
				  saveDir(f,D,(TDirectory*)o, false);
				}
				else o->Write();
      }
    }	  
	}
	parent->cd();
}

void ScanRoot::saveHist(char* file)
{

	TFile *f = new TFile(file,"RECREATE");
  f->cd();
	TDirectory *parent = gDirectory;
	saveDir(f,parent,mDir, true);
  f->Close();
  delete f;
	return;	
}
void ScanRoot::addHist(char* file)
{
  int n,i;
  TFile *f = new TFile(file);
  if(!f) { log(2,"Error opening file or file does not exist"); return;}
  f->cd();
  TList* l = mDir->GetList();
  if(l)
  {
    n = l->GetSize();
    if(n>0)
    {
      for(i=0;i<n;i++) 
      {
        TObject *o = l->At(i);
        TString n = o->ClassName();
        if(n.BeginsWith("TH1")) if(f->Get(o->GetName())) ((TH1*)o)->Add((TH1*)f->Get(o->GetName()),1);
        if(n.BeginsWith("TH2")) if(f->Get(o->GetName())) ((TH2*)o)->Add((TH2*)f->Get(o->GetName()),1);
      }
    }
  }
  f->Close();
  delete f;
  return;
}
void ScanRoot::init()
{
  int error;
  if(mHistLoaded) gROOT->ProcessLineFast("init()",&error);  
  if(mL2Loaded)   gROOT->ProcessLineFast("initL2()",&error);  
  return;
}
void ScanRoot::finish()
{
  int error;
  if(mHistLoaded) gROOT->ProcessLineFast("finish()",&error);  
  if(mL2Loaded)   gROOT->ProcessLineFast("finishL2()",&error);  
  return;
}
void ScanRoot::stat()
{
  int i = 0;
  log(10,"\n------------------------------------------");
  log("ScanRoot statistics");
  if(mIo->isInputOpen()) 
  {
    log(10,"Input file name (.FIL) = %s",mIo->getFileName());
    log(10,"NEvents read from file = %d",mIo->getNRead());
  }
  bool ok = false;
  for(i = 0;i<mIo->getMaxOutput();i++)
    if(mIo->isOutputOpen(i)) 
    {
      log(10,"Output file (.FIL) = %s",mIo->getFileNameOutput(i));
      log(10,"   NEvents written = %d",mIo->getNSaved(i));
      ok = true;
    }
  if(getIO())
  {
		if(getIO()->isSmearing()) 
      log(10,"Smearing mode = ON");
    else
      log(10,"Smearing mode = OFF");
    
		if(ok)
		{
      if(getIO()->isSaveOnlyNewPar()) 
        log(10,"Output saving mode = SAVE ONLY NEW PARAMETERS");
      else
        log(10,"Output saving mode = SAVE ALL PARAMETERS");
    }
  }
  if(mHistLoaded) log(10,"Histogram library = %s",(char*)mHistLibrary.Data());
  if(mL2Loaded) log(10,"Level 2 library = %s",(char*)mL2Library.Data());
  log(10,"Max number of parameters = %d",getNPar());  
  log(10,"------------------------------------------\n");
  return;
}
 ScanRoot.cxx:1
 ScanRoot.cxx:2
 ScanRoot.cxx:3
 ScanRoot.cxx:4
 ScanRoot.cxx:5
 ScanRoot.cxx:6
 ScanRoot.cxx:7
 ScanRoot.cxx:8
 ScanRoot.cxx:9
 ScanRoot.cxx:10
 ScanRoot.cxx:11
 ScanRoot.cxx:12
 ScanRoot.cxx:13
 ScanRoot.cxx:14
 ScanRoot.cxx:15
 ScanRoot.cxx:16
 ScanRoot.cxx:17
 ScanRoot.cxx:18
 ScanRoot.cxx:19
 ScanRoot.cxx:20
 ScanRoot.cxx:21
 ScanRoot.cxx:22
 ScanRoot.cxx:23
 ScanRoot.cxx:24
 ScanRoot.cxx:25
 ScanRoot.cxx:26
 ScanRoot.cxx:27
 ScanRoot.cxx:28
 ScanRoot.cxx:29
 ScanRoot.cxx:30
 ScanRoot.cxx:31
 ScanRoot.cxx:32
 ScanRoot.cxx:33
 ScanRoot.cxx:34
 ScanRoot.cxx:35
 ScanRoot.cxx:36
 ScanRoot.cxx:37
 ScanRoot.cxx:38
 ScanRoot.cxx:39
 ScanRoot.cxx:40
 ScanRoot.cxx:41
 ScanRoot.cxx:42
 ScanRoot.cxx:43
 ScanRoot.cxx:44
 ScanRoot.cxx:45
 ScanRoot.cxx:46
 ScanRoot.cxx:47
 ScanRoot.cxx:48
 ScanRoot.cxx:49
 ScanRoot.cxx:50
 ScanRoot.cxx:51
 ScanRoot.cxx:52
 ScanRoot.cxx:53
 ScanRoot.cxx:54
 ScanRoot.cxx:55
 ScanRoot.cxx:56
 ScanRoot.cxx:57
 ScanRoot.cxx:58
 ScanRoot.cxx:59
 ScanRoot.cxx:60
 ScanRoot.cxx:61
 ScanRoot.cxx:62
 ScanRoot.cxx:63
 ScanRoot.cxx:64
 ScanRoot.cxx:65
 ScanRoot.cxx:66
 ScanRoot.cxx:67
 ScanRoot.cxx:68
 ScanRoot.cxx:69
 ScanRoot.cxx:70
 ScanRoot.cxx:71
 ScanRoot.cxx:72
 ScanRoot.cxx:73
 ScanRoot.cxx:74
 ScanRoot.cxx:75
 ScanRoot.cxx:76
 ScanRoot.cxx:77
 ScanRoot.cxx:78
 ScanRoot.cxx:79
 ScanRoot.cxx:80
 ScanRoot.cxx:81
 ScanRoot.cxx:82
 ScanRoot.cxx:83
 ScanRoot.cxx:84
 ScanRoot.cxx:85
 ScanRoot.cxx:86
 ScanRoot.cxx:87
 ScanRoot.cxx:88
 ScanRoot.cxx:89
 ScanRoot.cxx:90
 ScanRoot.cxx:91
 ScanRoot.cxx:92
 ScanRoot.cxx:93
 ScanRoot.cxx:94
 ScanRoot.cxx:95
 ScanRoot.cxx:96
 ScanRoot.cxx:97
 ScanRoot.cxx:98
 ScanRoot.cxx:99
 ScanRoot.cxx:100
 ScanRoot.cxx:101
 ScanRoot.cxx:102
 ScanRoot.cxx:103
 ScanRoot.cxx:104
 ScanRoot.cxx:105
 ScanRoot.cxx:106
 ScanRoot.cxx:107
 ScanRoot.cxx:108
 ScanRoot.cxx:109
 ScanRoot.cxx:110
 ScanRoot.cxx:111
 ScanRoot.cxx:112
 ScanRoot.cxx:113
 ScanRoot.cxx:114
 ScanRoot.cxx:115
 ScanRoot.cxx:116
 ScanRoot.cxx:117
 ScanRoot.cxx:118
 ScanRoot.cxx:119
 ScanRoot.cxx:120
 ScanRoot.cxx:121
 ScanRoot.cxx:122
 ScanRoot.cxx:123
 ScanRoot.cxx:124
 ScanRoot.cxx:125
 ScanRoot.cxx:126
 ScanRoot.cxx:127
 ScanRoot.cxx:128
 ScanRoot.cxx:129
 ScanRoot.cxx:130
 ScanRoot.cxx:131
 ScanRoot.cxx:132
 ScanRoot.cxx:133
 ScanRoot.cxx:134
 ScanRoot.cxx:135
 ScanRoot.cxx:136
 ScanRoot.cxx:137
 ScanRoot.cxx:138
 ScanRoot.cxx:139
 ScanRoot.cxx:140
 ScanRoot.cxx:141
 ScanRoot.cxx:142
 ScanRoot.cxx:143
 ScanRoot.cxx:144
 ScanRoot.cxx:145
 ScanRoot.cxx:146
 ScanRoot.cxx:147
 ScanRoot.cxx:148
 ScanRoot.cxx:149
 ScanRoot.cxx:150
 ScanRoot.cxx:151
 ScanRoot.cxx:152
 ScanRoot.cxx:153
 ScanRoot.cxx:154
 ScanRoot.cxx:155
 ScanRoot.cxx:156
 ScanRoot.cxx:157
 ScanRoot.cxx:158
 ScanRoot.cxx:159
 ScanRoot.cxx:160
 ScanRoot.cxx:161
 ScanRoot.cxx:162
 ScanRoot.cxx:163
 ScanRoot.cxx:164
 ScanRoot.cxx:165
 ScanRoot.cxx:166
 ScanRoot.cxx:167
 ScanRoot.cxx:168
 ScanRoot.cxx:169
 ScanRoot.cxx:170
 ScanRoot.cxx:171
 ScanRoot.cxx:172
 ScanRoot.cxx:173
 ScanRoot.cxx:174
 ScanRoot.cxx:175
 ScanRoot.cxx:176
 ScanRoot.cxx:177
 ScanRoot.cxx:178
 ScanRoot.cxx:179
 ScanRoot.cxx:180
 ScanRoot.cxx:181
 ScanRoot.cxx:182
 ScanRoot.cxx:183
 ScanRoot.cxx:184
 ScanRoot.cxx:185
 ScanRoot.cxx:186
 ScanRoot.cxx:187
 ScanRoot.cxx:188
 ScanRoot.cxx:189
 ScanRoot.cxx:190
 ScanRoot.cxx:191
 ScanRoot.cxx:192
 ScanRoot.cxx:193
 ScanRoot.cxx:194
 ScanRoot.cxx:195
 ScanRoot.cxx:196
 ScanRoot.cxx:197
 ScanRoot.cxx:198
 ScanRoot.cxx:199
 ScanRoot.cxx:200
 ScanRoot.cxx:201
 ScanRoot.cxx:202
 ScanRoot.cxx:203
 ScanRoot.cxx:204
 ScanRoot.cxx:205
 ScanRoot.cxx:206
 ScanRoot.cxx:207
 ScanRoot.cxx:208
 ScanRoot.cxx:209
 ScanRoot.cxx:210
 ScanRoot.cxx:211
 ScanRoot.cxx:212
 ScanRoot.cxx:213
 ScanRoot.cxx:214
 ScanRoot.cxx:215
 ScanRoot.cxx:216
 ScanRoot.cxx:217
 ScanRoot.cxx:218
 ScanRoot.cxx:219
 ScanRoot.cxx:220
 ScanRoot.cxx:221
 ScanRoot.cxx:222
 ScanRoot.cxx:223
 ScanRoot.cxx:224
 ScanRoot.cxx:225
 ScanRoot.cxx:226
 ScanRoot.cxx:227
 ScanRoot.cxx:228
 ScanRoot.cxx:229
 ScanRoot.cxx:230
 ScanRoot.cxx:231
 ScanRoot.cxx:232
 ScanRoot.cxx:233
 ScanRoot.cxx:234
 ScanRoot.cxx:235
 ScanRoot.cxx:236
 ScanRoot.cxx:237
 ScanRoot.cxx:238
 ScanRoot.cxx:239
 ScanRoot.cxx:240
 ScanRoot.cxx:241
 ScanRoot.cxx:242
 ScanRoot.cxx:243
 ScanRoot.cxx:244
 ScanRoot.cxx:245
 ScanRoot.cxx:246
 ScanRoot.cxx:247
 ScanRoot.cxx:248
 ScanRoot.cxx:249
 ScanRoot.cxx:250
 ScanRoot.cxx:251
 ScanRoot.cxx:252
 ScanRoot.cxx:253
 ScanRoot.cxx:254
 ScanRoot.cxx:255
 ScanRoot.cxx:256
 ScanRoot.cxx:257
 ScanRoot.cxx:258
 ScanRoot.cxx:259
 ScanRoot.cxx:260
 ScanRoot.cxx:261
 ScanRoot.cxx:262
 ScanRoot.cxx:263
 ScanRoot.cxx:264
 ScanRoot.cxx:265
 ScanRoot.cxx:266
 ScanRoot.cxx:267
 ScanRoot.cxx:268
 ScanRoot.cxx:269
 ScanRoot.cxx:270
 ScanRoot.cxx:271
 ScanRoot.cxx:272
 ScanRoot.cxx:273
 ScanRoot.cxx:274
 ScanRoot.cxx:275
 ScanRoot.cxx:276
 ScanRoot.cxx:277
 ScanRoot.cxx:278
 ScanRoot.cxx:279
 ScanRoot.cxx:280
 ScanRoot.cxx:281
 ScanRoot.cxx:282
 ScanRoot.cxx:283
 ScanRoot.cxx:284
 ScanRoot.cxx:285
 ScanRoot.cxx:286
 ScanRoot.cxx:287
 ScanRoot.cxx:288
 ScanRoot.cxx:289
 ScanRoot.cxx:290
 ScanRoot.cxx:291
 ScanRoot.cxx:292
 ScanRoot.cxx:293
 ScanRoot.cxx:294
 ScanRoot.cxx:295
 ScanRoot.cxx:296
 ScanRoot.cxx:297
 ScanRoot.cxx:298
 ScanRoot.cxx:299
 ScanRoot.cxx:300
 ScanRoot.cxx:301
 ScanRoot.cxx:302
 ScanRoot.cxx:303
 ScanRoot.cxx:304
 ScanRoot.cxx:305
 ScanRoot.cxx:306
 ScanRoot.cxx:307
 ScanRoot.cxx:308
 ScanRoot.cxx:309
 ScanRoot.cxx:310
 ScanRoot.cxx:311
 ScanRoot.cxx:312
 ScanRoot.cxx:313
 ScanRoot.cxx:314
 ScanRoot.cxx:315
 ScanRoot.cxx:316
 ScanRoot.cxx:317
 ScanRoot.cxx:318
 ScanRoot.cxx:319
 ScanRoot.cxx:320
 ScanRoot.cxx:321
 ScanRoot.cxx:322
 ScanRoot.cxx:323
 ScanRoot.cxx:324
 ScanRoot.cxx:325
 ScanRoot.cxx:326
 ScanRoot.cxx:327
 ScanRoot.cxx:328
 ScanRoot.cxx:329
 ScanRoot.cxx:330
 ScanRoot.cxx:331
 ScanRoot.cxx:332
 ScanRoot.cxx:333
 ScanRoot.cxx:334
 ScanRoot.cxx:335
 ScanRoot.cxx:336
 ScanRoot.cxx:337
 ScanRoot.cxx:338
 ScanRoot.cxx:339
 ScanRoot.cxx:340
 ScanRoot.cxx:341
 ScanRoot.cxx:342
 ScanRoot.cxx:343
 ScanRoot.cxx:344
 ScanRoot.cxx:345
 ScanRoot.cxx:346
 ScanRoot.cxx:347
 ScanRoot.cxx:348
 ScanRoot.cxx:349
 ScanRoot.cxx:350
 ScanRoot.cxx:351
 ScanRoot.cxx:352
 ScanRoot.cxx:353
 ScanRoot.cxx:354
 ScanRoot.cxx:355
 ScanRoot.cxx:356
 ScanRoot.cxx:357
 ScanRoot.cxx:358
 ScanRoot.cxx:359
 ScanRoot.cxx:360
 ScanRoot.cxx:361
 ScanRoot.cxx:362
 ScanRoot.cxx:363
 ScanRoot.cxx:364
 ScanRoot.cxx:365
 ScanRoot.cxx:366
 ScanRoot.cxx:367
 ScanRoot.cxx:368
 ScanRoot.cxx:369
 ScanRoot.cxx:370
 ScanRoot.cxx:371
 ScanRoot.cxx:372
 ScanRoot.cxx:373
 ScanRoot.cxx:374
 ScanRoot.cxx:375
 ScanRoot.cxx:376
 ScanRoot.cxx:377
 ScanRoot.cxx:378
 ScanRoot.cxx:379
 ScanRoot.cxx:380
 ScanRoot.cxx:381
 ScanRoot.cxx:382
 ScanRoot.cxx:383
 ScanRoot.cxx:384
 ScanRoot.cxx:385
 ScanRoot.cxx:386
 ScanRoot.cxx:387
 ScanRoot.cxx:388
 ScanRoot.cxx:389
 ScanRoot.cxx:390
 ScanRoot.cxx:391
 ScanRoot.cxx:392
 ScanRoot.cxx:393
 ScanRoot.cxx:394
 ScanRoot.cxx:395
 ScanRoot.cxx:396
 ScanRoot.cxx:397
 ScanRoot.cxx:398
 ScanRoot.cxx:399
 ScanRoot.cxx:400
 ScanRoot.cxx:401
 ScanRoot.cxx:402
 ScanRoot.cxx:403
 ScanRoot.cxx:404
 ScanRoot.cxx:405
 ScanRoot.cxx:406
 ScanRoot.cxx:407
 ScanRoot.cxx:408
 ScanRoot.cxx:409
 ScanRoot.cxx:410
 ScanRoot.cxx:411
 ScanRoot.cxx:412
 ScanRoot.cxx:413
 ScanRoot.cxx:414
 ScanRoot.cxx:415
 ScanRoot.cxx:416
 ScanRoot.cxx:417
 ScanRoot.cxx:418
 ScanRoot.cxx:419
 ScanRoot.cxx:420
 ScanRoot.cxx:421
 ScanRoot.cxx:422
 ScanRoot.cxx:423
 ScanRoot.cxx:424
 ScanRoot.cxx:425
 ScanRoot.cxx:426
 ScanRoot.cxx:427
 ScanRoot.cxx:428
 ScanRoot.cxx:429
 ScanRoot.cxx:430
 ScanRoot.cxx:431
 ScanRoot.cxx:432
 ScanRoot.cxx:433
 ScanRoot.cxx:434
 ScanRoot.cxx:435
 ScanRoot.cxx:436
 ScanRoot.cxx:437
 ScanRoot.cxx:438
 ScanRoot.cxx:439
 ScanRoot.cxx:440
 ScanRoot.cxx:441
 ScanRoot.cxx:442
 ScanRoot.cxx:443
 ScanRoot.cxx:444
 ScanRoot.cxx:445
 ScanRoot.cxx:446
 ScanRoot.cxx:447
 ScanRoot.cxx:448
 ScanRoot.cxx:449
 ScanRoot.cxx:450
 ScanRoot.cxx:451
 ScanRoot.cxx:452
 ScanRoot.cxx:453
 ScanRoot.cxx:454
 ScanRoot.cxx:455
 ScanRoot.cxx:456
 ScanRoot.cxx:457
 ScanRoot.cxx:458
 ScanRoot.cxx:459
 ScanRoot.cxx:460
 ScanRoot.cxx:461
 ScanRoot.cxx:462
 ScanRoot.cxx:463
 ScanRoot.cxx:464
 ScanRoot.cxx:465
 ScanRoot.cxx:466
 ScanRoot.cxx:467
 ScanRoot.cxx:468
 ScanRoot.cxx:469
 ScanRoot.cxx:470
 ScanRoot.cxx:471
 ScanRoot.cxx:472
 ScanRoot.cxx:473
 ScanRoot.cxx:474
 ScanRoot.cxx:475
 ScanRoot.cxx:476
 ScanRoot.cxx:477
 ScanRoot.cxx:478
 ScanRoot.cxx:479
 ScanRoot.cxx:480
 ScanRoot.cxx:481
 ScanRoot.cxx:482
 ScanRoot.cxx:483
 ScanRoot.cxx:484
 ScanRoot.cxx:485
 ScanRoot.cxx:486
 ScanRoot.cxx:487
 ScanRoot.cxx:488
 ScanRoot.cxx:489
 ScanRoot.cxx:490
 ScanRoot.cxx:491
 ScanRoot.cxx:492
 ScanRoot.cxx:493
 ScanRoot.cxx:494
 ScanRoot.cxx:495
 ScanRoot.cxx:496
 ScanRoot.cxx:497
 ScanRoot.cxx:498
 ScanRoot.cxx:499
 ScanRoot.cxx:500
 ScanRoot.cxx:501
 ScanRoot.cxx:502
 ScanRoot.cxx:503
 ScanRoot.cxx:504
 ScanRoot.cxx:505
 ScanRoot.cxx:506
 ScanRoot.cxx:507
 ScanRoot.cxx:508
 ScanRoot.cxx:509
 ScanRoot.cxx:510
 ScanRoot.cxx:511
 ScanRoot.cxx:512
 ScanRoot.cxx:513
 ScanRoot.cxx:514
 ScanRoot.cxx:515
 ScanRoot.cxx:516
 ScanRoot.cxx:517
 ScanRoot.cxx:518