ROOT logo
//
//Class (base) responsible for management of data:
//    - opening and closing proper files
//    - posting data to folders
//    - writing data from folders to proper files
//
//Author: Alice Offline Group http://alisoft.cern.ch
//Responsible: Piotr.Skowronski@cern.ch
//
#include "AliLoader.h"

//Root includes
#include <TROOT.h>
#include <TFile.h>
#include <TFolder.h>
#include <TString.h>

//AliRoot includes
#include "AliConfig.h"
#include "AliDetector.h"
#include "AliLog.h"
#include "AliRun.h"
#include "AliRunLoader.h"

const TString AliLoader::fgkDefaultHitsContainerName("TreeH");
const TString AliLoader::fgkDefaultDigitsContainerName = "TreeD";
const TString AliLoader::fgkDefaultSDigitsContainerName = "TreeS";
const TString AliLoader::fgkDefaultRecPointsContainerName = "TreeR";
const TString AliLoader::fgkDefaultTracksContainerName = "TreeT";
const TString AliLoader::fgkDefaultRecParticlesContainerName = "TreeP";
const TString AliLoader::fgkLoaderBaseName("Loader");

ClassImp(AliLoader)
//___________________________________________________________________
/////////////////////////////////////////////////////////////////////
//                                                                 //
//  class AliLoader                                                //
//                                                                 //
//  Base class for Loaders.                                        //
//  Loader provides base I/O fascilities for "standard" data.      //
//  Each detector has a laoder data member                         //
//  loader is accessible via folder structure as well              //
//                                                                 //
/////////////////////////////////////////////////////////////////////
 
/*****************************************************************************/ 

AliLoader::AliLoader():
 fDataLoaders(0x0),
 fDetectorName(""),
 fEventFolder(0x0),
 fDataFolder(0x0),
 fDetectorDataFolder(0x0),
 fModuleFolder(0x0)
{
  //default constructor
  
}
/******************************************************************/

AliLoader::AliLoader(const Char_t* detname,const Char_t* eventfoldername):
 fDataLoaders(new TObjArray(kNDataTypes)),
 fDetectorName(""),
 fEventFolder(0x0),
 fDataFolder(0x0),
 fDetectorDataFolder(0x0),
 fModuleFolder(0x0)
{
  //ctor
   AliDebug(1, Form("detname = %s eventfoldername = %s",detname,eventfoldername));

   //try to find folder eventfoldername in top alice folder
   //safe because GetTopFolder will abort in case of failure

   fDetectorName = detname;
   fName = fDetectorName+"Loader";
   InitDefaults();

   TObject* fobj = GetTopFolder()->FindObject(eventfoldername);
   fEventFolder = (fobj)?dynamic_cast<TFolder*>(fobj):0x0;//in case FindObject returns NULL dynamic cast cause seg. fault
   SetEventFolder(fEventFolder);
   
 }
/*****************************************************************************/ 

AliLoader::AliLoader(const Char_t * detname,TFolder* eventfolder):
 fDataLoaders(new TObjArray(kNDataTypes)),
 fDetectorName(detname),
 fEventFolder(0x0),
 fDataFolder(0x0),
 fDetectorDataFolder(0x0),
 fModuleFolder(0x0)
{
//constructor
   fDetectorName = detname;
   fName = fDetectorName+"Loader";
   InitDefaults();
   SetEventFolder(eventfolder);
   //fileoption's don't need to initialized because default TString ctor does it correctly
}

/*****************************************************************************/ 
AliLoader::~AliLoader()
{
//detructor
  if (fDataLoaders) fDataLoaders->SetOwner();
  delete fDataLoaders;
}
/*****************************************************************************/ 

void AliLoader::InitDefaults()
{
  // H I T S 
  AliDataLoader* dl;
  dl = new AliDataLoader(fDetectorName + ".Hits.root",fgkDefaultHitsContainerName, "Hits" );
  fDataLoaders->AddAt(dl,kHits);
  
  
  // S U M M A B L E   D I G I T S
  dl = new AliDataLoader(fDetectorName + ".SDigits.root",fgkDefaultSDigitsContainerName, "Summable Digits");
  fDataLoaders->AddAt(dl,kSDigits);

  // D I G I T S  
  dl = new AliDataLoader(fDetectorName + ".Digits.root",fgkDefaultDigitsContainerName, "Digits");
  fDataLoaders->AddAt(dl,kDigits);
  
  // R E C O N S T R U C T E D   P O I N T S aka C L U S T E R S 
  dl = new AliDataLoader(fDetectorName + ".RecPoints.root",fgkDefaultRecPointsContainerName, "Reconstructed Points");
  fDataLoaders->AddAt(dl,kRecPoints);
  
  // T R A C K S
  dl = new AliDataLoader(fDetectorName + ".Tracks.root",fgkDefaultTracksContainerName, "Tracks");
  fDataLoaders->AddAt(dl,kTracks);
  
  // R E C O N S T R U C T E D   P O I N T S aka C L U S T E R S 
  dl = new AliDataLoader(fDetectorName + ".RecParticles.root",fgkDefaultRecParticlesContainerName, "Reconstructed Particles");
  fDataLoaders->AddAt(dl,kRecParticles);

 }
/*****************************************************************************/ 

AliDataLoader* AliLoader::GetDataLoader(const char* name)
{
//returns Data Loader with specified name
  return dynamic_cast<AliDataLoader*>(fDataLoaders->FindObject(name));
}
/*****************************************************************************/ 
void AliLoader::AddDataLoader(AliDataLoader* dl)
{
  //
  // Adds a data loader
  //
  if (dl == 0x0)
   {
     AliError("Pointer is NULL");
     return;
   }
  if (fDataLoaders->FindObject(dl->GetName()))
   {
     AliError("Such a loader exists");
     return;
   }
  fDataLoaders->AddLast(dl);
  dl->SetEventFolder(fEventFolder);
  dl->SetFolder(GetDetectorDataFolder()); //Must exists - ensure register is called before
}
/*****************************************************************************/ 

Int_t AliLoader::SetEvent()
{
 //basically the same that GetEvent but do not post data to folders
 TIter next(fDataLoaders);
 AliDataLoader* dl;
 while ((dl = (AliDataLoader*)next()))
  {
    dl->SetEvent();
  }
 return 0;
}
/******************************************************************/

void AliLoader::UnloadAll()
{
 //calls UnloadAll for all base laoders
 //Unloads everything
 TIter next(fDataLoaders);
 AliDataLoader* dl;
 while ((dl = (AliDataLoader*)next()))
  {
    dl->UnloadAll();
  }
}
/******************************************************************/

Int_t AliLoader::GetEvent()
{
 //changes to proper root  directory and tries to load data from files to folders
 // event number is defined in RunLoader
 // 
 //returns:
 //     0  - in case of no error
 //     1  - event not found
 //     
 
 Int_t retval;   
 TIter next(fDataLoaders);
 AliDataLoader* dl;
 while ((dl = (AliDataLoader*)next()))
  {
    retval = dl->GetEvent();
    if (retval)
     {
       AliError(Form("Error occured while GetEvent for %s",dl->GetName()));
       return retval;
     }
  }

 return 0;
}

/******************************************************************/

TFolder* AliLoader::GetTopFolder()
{
//returns TOP aliroot folder, just a simple interface to AliConfig (gives shorter notation)
 return AliConfig::Instance()->GetTopFolder();
}

/******************************************************************/

TFolder* AliLoader::GetEventFolder()
{
//get EVENT folder (data that are changing from event to event, even in single run)
  return fEventFolder;
}
/******************************************************************/
TFolder* AliLoader::GetDataFolder()
{
//returns the folder speciofic to given detector e.g. /Folders/Event/Data/
 if (!fDataFolder)
  {
   fDataFolder =  dynamic_cast<TFolder*>(GetEventFolder()->FindObject(AliConfig::Instance()->GetDataFolderName()));
   
   if (!fDataFolder)
    {
     AliFatal("Can not find AliRoot data folder. Aborting");
     return 0x0;
    }
  }
  return fDataFolder;
}

/*****************************************************************************/ 

TFolder* AliLoader::GetModulesFolder()
{
  //returns pointer to the folder containing modules
 if (!fModuleFolder)
  {
   fModuleFolder =  dynamic_cast<TFolder*>(GetEventFolder()->FindObjectAny(AliConfig::GetModulesFolderName()));
   
   if (!fModuleFolder)
    {
     AliFatal("Can not find modules folder. Aborting");
     return 0x0;
    }
  }
 return fModuleFolder;
   
}

/*****************************************************************************/ 

TDirectory* AliLoader::ChangeDir(TFile* file, Int_t eventno)
{
//changes the root directory in "file" to "dirname" which corresponds to event 'eventno'
//in case of success returns the pointer to directory
//else NULL
 
 if (file == 0x0)
  {
    AliErrorClass("File is null");
    return 0x0;
  }
 if (file->IsOpen() == kFALSE)
  {
    AliErrorClass("File is not opened");
    return 0x0;
  }

 TString dirname("Event");
 dirname+=eventno;
 AliDebugClass(1, Form("Changing Dir to %s in file %s.",dirname.Data(),file->GetName()));

 Bool_t result;
 
 TDirectory* dir = dynamic_cast<TDirectory*>(file->Get(dirname));

 if (dir == 0x0)
  {
    AliDebugClass(1, Form("Can not find directory %s in file %s, creating...",
		     dirname.Data(),file->GetName()));
    
    if (file->IsWritable() == kFALSE)
     {
       AliErrorClass(Form("Can not create directory. File %s in not writable.",
		     file->GetName()));
       return 0x0;
     }
            
    TDirectory* newdir = file->mkdir(dirname);
    if (newdir == 0x0)
     {
       AliErrorClass(Form("Failed to create new directory in file %s.",
		     file->GetName()));
       return 0x0;
     }
    result = file->cd(dirname);
    if (result == kFALSE)
     {
       return 0x0;
     }
  }
 else
  {
   file->cd();//make a file active 
   file->cd(dirname);//cd event dir
  }

 return gDirectory;
}
/*****************************************************************************/ 

TString AliLoader::GetUnixDir() const
 {
 //This Method will manage jumping through unix directories in case of 
 //run with more events per run than defined in gAlice
 
   TString dir;
   
   return dir;
 }
/*****************************************************************************/ 
/************************************************************/

void AliLoader::MakeTree(Option_t *option)
 {
//Makes a tree depending on option 
//   H: - Hits
//   D: - Digits
//   S: - Summable Digits
//   R: - Reconstructed Points (clusters)
//   T: - Tracks (tracklets)

  const char *oH = strstr(option,"H");
  const char *oD = strstr(option,"D");
  const char *oS = strstr(option,"S");
  const char *oR = strstr(option,"R");
  const char *oT = strstr(option,"T");
  const char *oP = strstr(option,"P");
  
  if (oH) MakeHitsContainer();
  if (oD) MakeDigitsContainer();
  if (oS) MakeSDigitsContainer();
  if (oR) MakeRecPointsContainer();
  if (oT) MakeTracksContainer();
  if (oP) MakeRecParticlesContainer();
 }

/*****************************************************************************/ 
Int_t  AliLoader::WriteHits(Option_t* opt) const
 {
   // Writes hits
   AliDataLoader* dl = GetHitsDataLoader();
   Int_t ret = dl->WriteData(opt);
   return ret;
 }
/*****************************************************************************/ 

Int_t AliLoader::WriteSDigits(Option_t* opt) const
 {
   // Writes summable digits
   AliDataLoader* dl = GetSDigitsDataLoader();
   Int_t ret = dl->WriteData(opt);
   return ret;
 }
 
/*****************************************************************************/ 

TObject** AliLoader::GetDetectorDataRef(TObject *obj)
{
  // Returns pointer to an entry in the list of folders pointing to "obj"
 if (obj == 0x0)
  {
    return 0x0;
  }
 return GetDetectorDataFolder()->GetListOfFolders()->GetObjectRef(obj) ;
}

/*****************************************************************************/ 
void AliLoader::CleanFolders()
 {
 //Cleans all posted objects == removes from folders and deletes them
   TIter next(fDataLoaders);
   AliDataLoader* dl;
   while ((dl = (AliDataLoader*)next()))
    { 
      AliDebug(1, Form("name = %s cleaning",dl->GetName()));
      dl->Clean();
    }
 }

/*****************************************************************************/ 

Int_t AliLoader::ReloadAll()
{
  // Calling Reload function for all the data loaders
 TIter next(fDataLoaders);
 AliDataLoader* dl;
 
 while((dl = (AliDataLoader*)next()))
  {
   Int_t err = dl->Reload();
   if (err)
    {
      AliError(Form("Reload returned error for %s",dl->GetName()));
      return err;
    }
  }
 return 0;
}
/*****************************************************************************/ 

void AliLoader::CloseFiles()
{
//close files for data loaders
 TIter next(fDataLoaders);
 AliDataLoader* dl;
 while((dl = (AliDataLoader*)next()))
  {
   dl->CloseFile();
  }
}
/*****************************************************************************/ 

Int_t  AliLoader::SetEventFolder(TFolder* eventfolder)
{
  //sets the event folder
 if (eventfolder == 0x0)
  {
    AliError("Stupid joke. Argument is NULL");
    return 1;
  }

 fEventFolder = eventfolder;
 TIter next(fDataLoaders);
 AliDataLoader* dl;
 
 while((dl = (AliDataLoader*)next()))
  {
    dl->SetEventFolder(fEventFolder);
    dl->SetFolder(GetDetectorDataFolder()); //Must exists - ensure register is called before
  }

 return 0;
}//sets the event folder
/*****************************************************************************/ 

Int_t AliLoader::Register(TFolder* eventFolder)
{
//triggers creation of subfolders for a given detector
//this method is called when session is read from disk
//
//warning: AliDetector in constructor (not default) calls
//creation of folder structure as well (some detectors needs folders 
//alrady in constructors)

 AliDebug(1, Form("Name is %s.",GetName()));
 if (eventFolder == 0x0)
  {
    AliError("Event folder is not set.");
    return 1;
  }
 Int_t retval = AliConfig::Instance()->AddDetector(eventFolder,fDetectorName,fDetectorName);
 if(retval)
  {
    AliError(Form("Can not create folders for %s. Event folder name is %s",
		  fDetectorName.Data(),eventFolder->GetName()));
    return retval;
  }
 SetEventFolder(eventFolder);
 return 0;
}
/*****************************************************************************/ 
AliRunLoader* AliLoader::GetRunLoader()
{
//gets the run-loader from event folder
  AliRunLoader* rg = 0x0;
  TObject * obj = GetEventFolder()->FindObject(AliRunLoader::GetRunLoaderName());
  if (obj) rg = dynamic_cast<AliRunLoader*>(obj);
  return rg;
}
/*****************************************************************************/ 
Bool_t  AliLoader::TestFileOption(Option_t* opt)
{
//tests the TFile::Option
//if file is truncated at opening moment ("recreate", "new" or "create") returns kFALSE;
//else kTRUE (means opened with "read" or "update" mode)
  TString option(opt);
  if (option.CompareTo("recreate",TString::kIgnoreCase) == 0) return kFALSE;
  if (option.CompareTo("new",TString::kIgnoreCase) == 0) return kFALSE;
  if (option.CompareTo("create",TString::kIgnoreCase) == 0) return kFALSE;
  return kTRUE;
}
/*****************************************************************************/ 
void  AliLoader::SetDirName(TString& dirname)
{
//adds "dirname" to each file. Dirname should end with "#","/", or ":" 
  TIter next(fDataLoaders);
  AliDataLoader* dl;
  while((dl = (AliDataLoader*)next()))
   {
    dl->SetDirName(dirname);
   }
}

/*****************************************************************************/ 

void AliLoader::SetDigitsFileNameSuffix(const TString& suffix) const
{
  //adds the suffix before ".root", 
  //e.g. TPC.Digits.root -> TPC.DigitsMerged.root
  //made on Jiri Chudoba demand
  GetDigitsDataLoader()->SetFileNameSuffix(suffix);
}
/*****************************************************************************/ 

void AliLoader::SetCompressionLevel(Int_t cl)
{
//sets comression level for data defined by di
  TIter next(fDataLoaders);
  AliDataLoader* dl;
  while((dl = (AliDataLoader*)next()))
   {
     dl->SetCompressionLevel(cl);
   }
}
/*****************************************************************************/ 

void AliLoader::Clean()
{
//Cleans all data loaders
  TIter next(fDataLoaders);
  AliDataLoader* dl;
  while((dl = (AliDataLoader*)next()))
   {
     dl->Clean();
   }
}
/*****************************************************************************/

void AliLoader::Clean(const TString& name)
{
  // Removes object with "name" from the detector's data folder
  // and from the memory
  TObject* obj = GetDetectorDataFolder()->FindObject(name);
  if(obj)
   {
     AliDebug(1, Form("name=%s, cleaning %s.",GetName(),name.Data()));
     GetDetectorDataFolder()->Remove(obj);
     delete obj;
   }
}

/*****************************************************************************/ 

Bool_t AliLoader::IsOptionWritable(const TString& opt)
{
  // Returns "true" if the option means also "writable"
  if (opt.CompareTo("recreate",TString::kIgnoreCase)) return kTRUE;
  if (opt.CompareTo("new",TString::kIgnoreCase)) return kTRUE;
  if (opt.CompareTo("create",TString::kIgnoreCase)) return kTRUE;
  if (opt.CompareTo("update",TString::kIgnoreCase)) return kTRUE;
  return kFALSE;
}

/*****************************************************************************/ 

void AliLoader::SetDebug(Int_t deb)
{
  // Sets debug level
  AliLog::SetClassDebugLevel("AliRunLoader", deb);
  AliLog::SetClassDebugLevel("AliLoader", deb);
  AliLog::SetClassDebugLevel("AliDataLoader", deb);
  AliLog::SetClassDebugLevel("AliBaseLoader", deb);
  AliLog::SetClassDebugLevel("AliObjectLoader", deb);
  AliLog::SetClassDebugLevel("AliTreeLoader", deb);
  AliLog::SetClassDebugLevel("AliConfig", deb);
}
/*****************************************************************************/ 

void AliLoader::SetTAddrInDet()
{
  //calls SetTreeAddress for corresponding detector
  AliRunLoader* rl = GetRunLoader();   
  if (rl == 0x0) return;
  AliRun* ar = rl->GetAliRun();
  if (ar == 0x0) return;
  AliDetector* det = ar->GetDetector(fDetectorName);  
  if (det == 0x0) return;
  det->SetTreeAddress();
}
/*****************************************************************************/ 

void AliLoader::Synchronize()
{
  //synchrinizes all writtable files 
 TIter next(fDataLoaders);
 AliDataLoader* dl;
 while ((dl = (AliDataLoader*)next()))
  {
    dl->Synchronize();
  }
  
}
/*****************************************************************************/ 
/*****************************************************************************/ 
/*****************************************************************************/ 

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