ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */

//  Description:
//  This class is responsible for creating folder structure
//  All stuff of aliroot sits in one folder with name defined by
//  fgkTopFolderName data wich do not very trough event to event are
//  sitting in directly in "top folder" all data which changes from
//  event to event are sitting in one folder (which has more subfolders)
//  Idea is to have more than one event in folder structure which allows
//  usage of standard procedures in merging
//  Add(AliDetector*) calls Add(AliModule*) as AliDetector is a AliModule
//  as well and should be listed in module list

#include <TDatabasePDG.h>
#include <TFolder.h>
#include <TInterpreter.h>
#include <TObjString.h>
#include <TROOT.h>
#include <TString.h>
#include <TSystem.h>
#include <TVirtualMC.h>

#include "AliConfig.h"
#include "AliDetector.h"
#include "AliGenerator.h" 
#include "AliLoader.h"
#include "AliLog.h"

enum
 {
   kDetFolderData = 0,
   kDetFolderCalibration,
   kDetFolderAligmnet,
   kDetFolderLast
 };
ClassImp(AliConfig)

AliConfig* AliConfig::fgInstance = 0;

//0 level folder
const TString AliConfig::fgkTopFolderName("Folders");

//1st level folder
const TString AliConfig::fgkConstantsFolderName("Constants");
const TString AliConfig::fgkDefaultEventFolderName("Event");  //default folder for event, always used except merging

//2st level folder
//subfolder of event folder
const TString AliConfig::fgkDataFolderName("Data");//folder for data (hits, digits, points, tracks) grouped by detectors
const TString AliConfig::fgkModuleFolderName("Modules");//folder with modules objects
const TString AliConfig::fgkConditionsFolderName("Conditions");//folder with conditions (mag. field etc.)
const TString AliConfig::fgkConfigurationFolderName("Configuration");//folder with configuration (setup) of the detector
const TString AliConfig::fgkHeaderFolderName("Header");//folder with header and other MC information

//3rd level folder
//fgkConditionsFolderName subfolders
const TString AliConfig::fgkCalibrationFolderName("Calibration");
const TString AliConfig::fgkAligmentFolderName("Aligment");
  
//3rd level folder
//fgkConfigurationFolderName subfolders
const TString AliConfig::fgkFieldFolderName("Field");
const TString AliConfig::fgkGeneratorsFolderName("Generators");
const TString AliConfig::fgkVirtualMCFolderName("VirtualMC");


const TString AliConfig::fgkPDGFolderName("Constants/DatabasePDG");//folder with PDG Database
const TString AliConfig::fgkGeneratorFolderName("Configuration/Generators");//folder with generators
const TString AliConfig::fgkMCFolderName("Configuration/VirtualMC");

//____________________________________________________________________________
AliConfig* AliConfig::Instance ()
{
  //
  // Instance method for singleton class
  //
   if(fgInstance == 0) 
    {
     fgInstance = new AliConfig (fgkTopFolderName,"Alice data exchange board");
    }
   return fgInstance;
}
//____________________________________________________________________________

AliConfig::AliConfig(const char *name, const char *title): 
  TNamed(name,title), 
  fTopFolder(gROOT->GetRootFolder()->AddFolder(name,title)),
  fConstFolder(0x0),
  fDetectorFolder(new TString[kDetFolderLast+1])
{
// Constructor

  //Main AliRoot Folder
  if (fTopFolder == 0x0)
   {
     AliFatal("Can not create Top Alice Folder.");
     return;//never reached
   }
  fTopFolder->SetOwner();
  
  fDetectorFolder[kDetFolderData] = fgkDataFolderName;
  fDetectorFolder[kDetFolderCalibration] = fgkConditionsFolderName+"/"+fgkCalibrationFolderName;
  fDetectorFolder[kDetFolderAligmnet] = fgkConditionsFolderName+"/"+fgkAligmentFolderName;
  fDetectorFolder[kDetFolderLast] = "";
  
  gROOT->GetListOfBrowsables()->Add(fTopFolder, name);

  //Constants folder
  fConstFolder = fTopFolder->AddFolder (fgkConstantsFolderName, "Constant parameters");
  fConstFolder->AddFolder("DatabasePDG", "PDG database");
  
  fgInstance=this;
}

//____________________________________________________________________________
AliConfig::~AliConfig()
{ 
  // destructor
  delete [] fDetectorFolder ;  
  if (fTopFolder)
   {
    fTopFolder->SetOwner();
    delete fTopFolder; 
   }
}
//____________________________________________________________________________

void AliConfig::AddInFolder (const char *dir, TObject *obj)
{
  // Adds object "obj" to folder "dir"
  TFolder *folder = dynamic_cast<TFolder *>(fTopFolder->FindObject(dir));
  if (folder)
    folder->Add (static_cast<TObject *>(obj));
}

//____________________________________________________________________________
TObject* AliConfig::FindInFolder (const char *dir, const char *name)
{
  // Finds object with name "name" in folder "dir"
  if(!name) return(fTopFolder->FindObject(name));
  TFolder * folder = dynamic_cast<TFolder *>(fTopFolder->FindObject(dir));
  if (!folder) return (NULL);
  return(folder->FindObject(name));
}

//____________________________________________________________________________
void    AliConfig::Add (AliGenerator * obj,const char* eventfolder)
{
  // Adds generator "obj" to the event folder "eventfolder"
  TString path(eventfolder);
  path = path + "/" + fgkGeneratorsFolderName;
  AddInFolder(path,obj);
}

//____________________________________________________________________________
void AliConfig::Add (TVirtualMC * obj,const char* eventfolder)
{
  // Adds TVirtualMC object to the event folder
  TString path(eventfolder);
  path = path + "/" + fgkMCFolderName;
  AddInFolder(path, obj);
}

//____________________________________________________________________________
void  AliConfig::Add (TDatabasePDG * obj)
{
  // Adds TDataBase object
  AddInFolder(fgkPDGFolderName, obj);
}

//____________________________________________________________________________
void AliConfig::Add(AliModule* obj,const char* eventfolder)
{
  // Adds module to the event folder
  TString path(eventfolder);
  path = path + "/" + fgkModuleFolderName;
  AliDebug(1, Form("module name = %s, Ev. Fold. Name is %s.",
		   obj->GetName(),eventfolder));
  AddInFolder(path, obj);
}
//____________________________________________________________________________

Int_t AliConfig::AddDetector(TFolder* evntfolder, const char *name, const char* title)
{
//creates folders for the detector 'name'
 Int_t retval;//returned value
 retval = CreateDetectorFolders(evntfolder,name,title);
 if (retval)
  {
    AliError(Form("CreateDetectorFolders returned error for detector %s",name));
    return retval;
  }
 return 0; 
}
//____________________________________________________________________________

Int_t AliConfig::AddDetector(const char* evntfoldername,const char *name, const char* title)
{
//creates folders for the detector 'name'
 Int_t retval;//returned value
 retval = CreateDetectorFolders(evntfoldername,name,title);
 if (retval)
  {
    AliError(Form("CreateDetectorFolders returned error for detector %s",name));
    return retval;
  }
 return 0; 
}
//____________________________________________________________________________

void  AliConfig::Add(AliDetector * obj,const char* eventfolder)
{
  // Adds new AliDetector objest to the correspondent event folder
  AliDebug(1, Form("detector name = %s, Ev. Fold. Name is %s.",
		   obj->GetName(),eventfolder));

  TObject* foundobj = GetTopFolder()->FindObject(eventfolder);
  TFolder* evfolder = (foundobj)?dynamic_cast<TFolder*>(foundobj):0x0;
  if (evfolder == 0x0)
   {
     AliFatal(Form("Can not find folder %s while adding detector %s",eventfolder,obj->GetName()));
     return;
   } 
  CreateDetectorFolders(evfolder, obj->GetName(), obj->GetTitle());
  
}
//____________________________________________________________________________

Int_t  AliConfig::CreateDetectorFolders(const char* evntfoldername,const char *name, const char* title)
{
//creates a folders for detector named 'name' and titled 'title'
//in a event folder named 'evntfoldername'
//list of folder names where new folders are created is defined in fDetectorFolder array 
//detector folders are named 'name' and titled 'title' as well

 TFolder* evfolder = dynamic_cast<TFolder*>(GetTopFolder()->FindObject(evntfoldername));
 if (evfolder == 0x0)
  {
   AliError(Form("Can not find folder %s while adding detector %s",evntfoldername,name));
   return 1;
  }
 return CreateDetectorFolders(evfolder,name,title);
}
//____________________________________________________________________________
Int_t  AliConfig::CreateDetectorFolders(TFolder* evntfolder,const char *name, const char* title)
{
//creates a folders for detector named 'name' and titled 'title'
//in a event folder 'evntfolder'
//list of folder names where new folders are created is defined in fDetectorFolder array 
//detector folders are named 'name' and titled 'title' as well
//Here we add only detector not an modules
 
 Int_t tmp;
 Int_t i = 0;//iterator
 while(!fDetectorFolder[i].IsNull())
  {
    tmp = AddSubFolder(evntfolder,fDetectorFolder[i],name,title);
    if (tmp)
     {
      AliError(Form("Failed to create subfolder of %s for detector %s",fDetectorFolder[i].Data(),name));
      return 1;
     }
    i++;
  }
 return 0;
}

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

TFolder* AliConfig::BuildEventFolder(const char* name,const char* title)
{
/*
 creates the folder structure for one event
 TopFolder
         |_
         | \
         |  Constants
         |_
         | \
         |  Event_
         |      | \
         |      |  Modules(detector objects)
         |      |_
         |      | \              
         |      |  Header
         |      |_
         |      | \              
         |      |  Data_
         |      |     | \ 
         |      |     |  TPC_
         |      |     |    | \
         |      |     |    |  Hits(object;e.g. tree)
         |      |     |    |_  
         |      |     |    | \ 
         |      |     |    |  SDigits(object)
         |      |     |    |_
         |      |     |    | \ 
         |      |     |    |  Digits(object)
         |      |     |    |_
         |      |     |    | \ 
         |      |     |    |  RecPoints(object)
         |      |     |    |_
         |      |     |      \ 
         |      |     |       Tracks(object)
         |      |     |_ 
         |      |       \
         |      |        ITS_
         |      |          | \
         |      |          |  Hits(object;e.g. tree)
         |      |          |_  
         |      |          | \ 
         |      |          |  SDigits(object)
         |      |          |_
         |      |          | \ 
         |      |          |  Digits(object)
         |      |          |_
         |      |          | \ 
         |      |          |  RecPoints(object)
         |      |          |_
         |      |            \ 
         |      |             Tracks(object)
         |      |_         
         |        \       
         |         Configuration
         |               
         |_
           \
            Event2_  (to be merged with event)
                |  \
                |   Modules(detector objects)
                |_
                | \              
                |  Header
                |_
                | \              
                |  Data_
                |     | \ 
                |     |  TPC_
                |     |    | \
                |     |    |  Hits(object;e.g. tree)
                |     |    |_  
                |     |    | \ 
                |     |    |  SDigits(object)
                |     |    |_
                |     |    | \ 
                |     |    |  Digits(object)
                |     |    |_
                |     |    | \ 
                |     |    |  RecPoints(object)
                |     |    |_
                |     |      \ 
                |     |       Tracks(object)
                |     |_ 
                |       \
                |        ITS_
                |          | \
                |          |  Hits(object;e.g. tree)
                |          |_  
                |          | \ 
                |          |  SDigits(object)
                |          |_
                |          | \ 
                |          |  Digits(object)
                |          |_
                |          | \ 
                |          |  RecPoints(object)
                |          |_
                |            \ 
                |             Tracks(object)
                |_         
                  \       
                   Configuration
                         
*/
  TFolder* eventfolder = fTopFolder->AddFolder(name,title); 
   
  //modules
  eventfolder->AddFolder(fgkModuleFolderName, "Detector objects");
  //event data
  eventfolder->AddFolder(fgkDataFolderName, "Detector data");
  
    //Conditions
  TFolder *conditions = eventfolder->AddFolder(fgkConditionsFolderName, "Run conditions");
  conditions->AddFolder(fgkCalibrationFolderName,"Detector calibration data");
  conditions->AddFolder(fgkAligmentFolderName,"Detector aligment");
  //Configuration
  TFolder *configuration = eventfolder->AddFolder(fgkConfigurationFolderName, "Run configuration");
  configuration->AddFolder(fgkFieldFolderName, "Magnetic field maps");
  configuration->AddFolder(fgkGeneratorsFolderName,"list of generator objects");
  //PH configuration->AddFolder(fgkVirtualMCFolderName,"the Virtual MC");

  eventfolder->AddFolder(fgkHeaderFolderName,"MonteCarlo event header");

  eventfolder->SetOwner();

  return eventfolder;
}

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

const TString& AliConfig::GetDataFolderName() const
{
//returns name of data folder path relative to event folder
 return fgkDataFolderName;
}

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

Int_t AliConfig::AddSubFolder(TFolder* topfolder, const char* infoler, 
                     const char* newfoldname, const char* newfoldtitle)
{
//helper method
//in topfolder looks for folder named 'infolder'
//and if it exist it creates inside a new folder named 'newfoldname' and titled 'newfoldtitle'

 if (topfolder == 0x0)//check if exists top folder
  {
   AliError("Parameter TFolder* points to NULL.");
   return 1;
  }
 
 TObject *obj;
 TFolder* folder;
 
 folder = dynamic_cast<TFolder*>(topfolder->FindObject(infoler));
 if (folder == 0x0) //check if we got inolder
  {
   AliError(Form("Can not find folder %s in folder %s.",infoler,topfolder->GetName()));
   return 1;
  }
 obj = folder->FindObject(newfoldname); //see if such a subfolder already exists
 if (obj == 0x0) //nope
  {
   TFolder *newfolder = folder->AddFolder(newfoldname,newfoldtitle);//add the desired subfolder
   if (newfolder == 0x0) //check if we managed
    {
     AliError(Form("Can not create folder %s in folder %s",newfoldname,infoler));
     return 2;
    }
   else return 0;//success
  }
 //such an object already exists
 TFolder* fol = dynamic_cast<TFolder*>(obj);
 if (fol == 0x0)
   {
     AliError(Form("Object named %s already exists in folder %s AND IT IS NOT A FOLDER",newfoldname,infoler));
     return 3;
   }
 AliWarning(Form("Folder named %s already exists in folder %s",newfoldname,infoler));
 return 0;
}
 AliConfig.cxx:1
 AliConfig.cxx:2
 AliConfig.cxx:3
 AliConfig.cxx:4
 AliConfig.cxx:5
 AliConfig.cxx:6
 AliConfig.cxx:7
 AliConfig.cxx:8
 AliConfig.cxx:9
 AliConfig.cxx:10
 AliConfig.cxx:11
 AliConfig.cxx:12
 AliConfig.cxx:13
 AliConfig.cxx:14
 AliConfig.cxx:15
 AliConfig.cxx:16
 AliConfig.cxx:17
 AliConfig.cxx:18
 AliConfig.cxx:19
 AliConfig.cxx:20
 AliConfig.cxx:21
 AliConfig.cxx:22
 AliConfig.cxx:23
 AliConfig.cxx:24
 AliConfig.cxx:25
 AliConfig.cxx:26
 AliConfig.cxx:27
 AliConfig.cxx:28
 AliConfig.cxx:29
 AliConfig.cxx:30
 AliConfig.cxx:31
 AliConfig.cxx:32
 AliConfig.cxx:33
 AliConfig.cxx:34
 AliConfig.cxx:35
 AliConfig.cxx:36
 AliConfig.cxx:37
 AliConfig.cxx:38
 AliConfig.cxx:39
 AliConfig.cxx:40
 AliConfig.cxx:41
 AliConfig.cxx:42
 AliConfig.cxx:43
 AliConfig.cxx:44
 AliConfig.cxx:45
 AliConfig.cxx:46
 AliConfig.cxx:47
 AliConfig.cxx:48
 AliConfig.cxx:49
 AliConfig.cxx:50
 AliConfig.cxx:51
 AliConfig.cxx:52
 AliConfig.cxx:53
 AliConfig.cxx:54
 AliConfig.cxx:55
 AliConfig.cxx:56
 AliConfig.cxx:57
 AliConfig.cxx:58
 AliConfig.cxx:59
 AliConfig.cxx:60
 AliConfig.cxx:61
 AliConfig.cxx:62
 AliConfig.cxx:63
 AliConfig.cxx:64
 AliConfig.cxx:65
 AliConfig.cxx:66
 AliConfig.cxx:67
 AliConfig.cxx:68
 AliConfig.cxx:69
 AliConfig.cxx:70
 AliConfig.cxx:71
 AliConfig.cxx:72
 AliConfig.cxx:73
 AliConfig.cxx:74
 AliConfig.cxx:75
 AliConfig.cxx:76
 AliConfig.cxx:77
 AliConfig.cxx:78
 AliConfig.cxx:79
 AliConfig.cxx:80
 AliConfig.cxx:81
 AliConfig.cxx:82
 AliConfig.cxx:83
 AliConfig.cxx:84
 AliConfig.cxx:85
 AliConfig.cxx:86
 AliConfig.cxx:87
 AliConfig.cxx:88
 AliConfig.cxx:89
 AliConfig.cxx:90
 AliConfig.cxx:91
 AliConfig.cxx:92
 AliConfig.cxx:93
 AliConfig.cxx:94
 AliConfig.cxx:95
 AliConfig.cxx:96
 AliConfig.cxx:97
 AliConfig.cxx:98
 AliConfig.cxx:99
 AliConfig.cxx:100
 AliConfig.cxx:101
 AliConfig.cxx:102
 AliConfig.cxx:103
 AliConfig.cxx:104
 AliConfig.cxx:105
 AliConfig.cxx:106
 AliConfig.cxx:107
 AliConfig.cxx:108
 AliConfig.cxx:109
 AliConfig.cxx:110
 AliConfig.cxx:111
 AliConfig.cxx:112
 AliConfig.cxx:113
 AliConfig.cxx:114
 AliConfig.cxx:115
 AliConfig.cxx:116
 AliConfig.cxx:117
 AliConfig.cxx:118
 AliConfig.cxx:119
 AliConfig.cxx:120
 AliConfig.cxx:121
 AliConfig.cxx:122
 AliConfig.cxx:123
 AliConfig.cxx:124
 AliConfig.cxx:125
 AliConfig.cxx:126
 AliConfig.cxx:127
 AliConfig.cxx:128
 AliConfig.cxx:129
 AliConfig.cxx:130
 AliConfig.cxx:131
 AliConfig.cxx:132
 AliConfig.cxx:133
 AliConfig.cxx:134
 AliConfig.cxx:135
 AliConfig.cxx:136
 AliConfig.cxx:137
 AliConfig.cxx:138
 AliConfig.cxx:139
 AliConfig.cxx:140
 AliConfig.cxx:141
 AliConfig.cxx:142
 AliConfig.cxx:143
 AliConfig.cxx:144
 AliConfig.cxx:145
 AliConfig.cxx:146
 AliConfig.cxx:147
 AliConfig.cxx:148
 AliConfig.cxx:149
 AliConfig.cxx:150
 AliConfig.cxx:151
 AliConfig.cxx:152
 AliConfig.cxx:153
 AliConfig.cxx:154
 AliConfig.cxx:155
 AliConfig.cxx:156
 AliConfig.cxx:157
 AliConfig.cxx:158
 AliConfig.cxx:159
 AliConfig.cxx:160
 AliConfig.cxx:161
 AliConfig.cxx:162
 AliConfig.cxx:163
 AliConfig.cxx:164
 AliConfig.cxx:165
 AliConfig.cxx:166
 AliConfig.cxx:167
 AliConfig.cxx:168
 AliConfig.cxx:169
 AliConfig.cxx:170
 AliConfig.cxx:171
 AliConfig.cxx:172
 AliConfig.cxx:173
 AliConfig.cxx:174
 AliConfig.cxx:175
 AliConfig.cxx:176
 AliConfig.cxx:177
 AliConfig.cxx:178
 AliConfig.cxx:179
 AliConfig.cxx:180
 AliConfig.cxx:181
 AliConfig.cxx:182
 AliConfig.cxx:183
 AliConfig.cxx:184
 AliConfig.cxx:185
 AliConfig.cxx:186
 AliConfig.cxx:187
 AliConfig.cxx:188
 AliConfig.cxx:189
 AliConfig.cxx:190
 AliConfig.cxx:191
 AliConfig.cxx:192
 AliConfig.cxx:193
 AliConfig.cxx:194
 AliConfig.cxx:195
 AliConfig.cxx:196
 AliConfig.cxx:197
 AliConfig.cxx:198
 AliConfig.cxx:199
 AliConfig.cxx:200
 AliConfig.cxx:201
 AliConfig.cxx:202
 AliConfig.cxx:203
 AliConfig.cxx:204
 AliConfig.cxx:205
 AliConfig.cxx:206
 AliConfig.cxx:207
 AliConfig.cxx:208
 AliConfig.cxx:209
 AliConfig.cxx:210
 AliConfig.cxx:211
 AliConfig.cxx:212
 AliConfig.cxx:213
 AliConfig.cxx:214
 AliConfig.cxx:215
 AliConfig.cxx:216
 AliConfig.cxx:217
 AliConfig.cxx:218
 AliConfig.cxx:219
 AliConfig.cxx:220
 AliConfig.cxx:221
 AliConfig.cxx:222
 AliConfig.cxx:223
 AliConfig.cxx:224
 AliConfig.cxx:225
 AliConfig.cxx:226
 AliConfig.cxx:227
 AliConfig.cxx:228
 AliConfig.cxx:229
 AliConfig.cxx:230
 AliConfig.cxx:231
 AliConfig.cxx:232
 AliConfig.cxx:233
 AliConfig.cxx:234
 AliConfig.cxx:235
 AliConfig.cxx:236
 AliConfig.cxx:237
 AliConfig.cxx:238
 AliConfig.cxx:239
 AliConfig.cxx:240
 AliConfig.cxx:241
 AliConfig.cxx:242
 AliConfig.cxx:243
 AliConfig.cxx:244
 AliConfig.cxx:245
 AliConfig.cxx:246
 AliConfig.cxx:247
 AliConfig.cxx:248
 AliConfig.cxx:249
 AliConfig.cxx:250
 AliConfig.cxx:251
 AliConfig.cxx:252
 AliConfig.cxx:253
 AliConfig.cxx:254
 AliConfig.cxx:255
 AliConfig.cxx:256
 AliConfig.cxx:257
 AliConfig.cxx:258
 AliConfig.cxx:259
 AliConfig.cxx:260
 AliConfig.cxx:261
 AliConfig.cxx:262
 AliConfig.cxx:263
 AliConfig.cxx:264
 AliConfig.cxx:265
 AliConfig.cxx:266
 AliConfig.cxx:267
 AliConfig.cxx:268
 AliConfig.cxx:269
 AliConfig.cxx:270
 AliConfig.cxx:271
 AliConfig.cxx:272
 AliConfig.cxx:273
 AliConfig.cxx:274
 AliConfig.cxx:275
 AliConfig.cxx:276
 AliConfig.cxx:277
 AliConfig.cxx:278
 AliConfig.cxx:279
 AliConfig.cxx:280
 AliConfig.cxx:281
 AliConfig.cxx:282
 AliConfig.cxx:283
 AliConfig.cxx:284
 AliConfig.cxx:285
 AliConfig.cxx:286
 AliConfig.cxx:287
 AliConfig.cxx:288
 AliConfig.cxx:289
 AliConfig.cxx:290
 AliConfig.cxx:291
 AliConfig.cxx:292
 AliConfig.cxx:293
 AliConfig.cxx:294
 AliConfig.cxx:295
 AliConfig.cxx:296
 AliConfig.cxx:297
 AliConfig.cxx:298
 AliConfig.cxx:299
 AliConfig.cxx:300
 AliConfig.cxx:301
 AliConfig.cxx:302
 AliConfig.cxx:303
 AliConfig.cxx:304
 AliConfig.cxx:305
 AliConfig.cxx:306
 AliConfig.cxx:307
 AliConfig.cxx:308
 AliConfig.cxx:309
 AliConfig.cxx:310
 AliConfig.cxx:311
 AliConfig.cxx:312
 AliConfig.cxx:313
 AliConfig.cxx:314
 AliConfig.cxx:315
 AliConfig.cxx:316
 AliConfig.cxx:317
 AliConfig.cxx:318
 AliConfig.cxx:319
 AliConfig.cxx:320
 AliConfig.cxx:321
 AliConfig.cxx:322
 AliConfig.cxx:323
 AliConfig.cxx:324
 AliConfig.cxx:325
 AliConfig.cxx:326
 AliConfig.cxx:327
 AliConfig.cxx:328
 AliConfig.cxx:329
 AliConfig.cxx:330
 AliConfig.cxx:331
 AliConfig.cxx:332
 AliConfig.cxx:333
 AliConfig.cxx:334
 AliConfig.cxx:335
 AliConfig.cxx:336
 AliConfig.cxx:337
 AliConfig.cxx:338
 AliConfig.cxx:339
 AliConfig.cxx:340
 AliConfig.cxx:341
 AliConfig.cxx:342
 AliConfig.cxx:343
 AliConfig.cxx:344
 AliConfig.cxx:345
 AliConfig.cxx:346
 AliConfig.cxx:347
 AliConfig.cxx:348
 AliConfig.cxx:349
 AliConfig.cxx:350
 AliConfig.cxx:351
 AliConfig.cxx:352
 AliConfig.cxx:353
 AliConfig.cxx:354
 AliConfig.cxx:355
 AliConfig.cxx:356
 AliConfig.cxx:357
 AliConfig.cxx:358
 AliConfig.cxx:359
 AliConfig.cxx:360
 AliConfig.cxx:361
 AliConfig.cxx:362
 AliConfig.cxx:363
 AliConfig.cxx:364
 AliConfig.cxx:365
 AliConfig.cxx:366
 AliConfig.cxx:367
 AliConfig.cxx:368
 AliConfig.cxx:369
 AliConfig.cxx:370
 AliConfig.cxx:371
 AliConfig.cxx:372
 AliConfig.cxx:373
 AliConfig.cxx:374
 AliConfig.cxx:375
 AliConfig.cxx:376
 AliConfig.cxx:377
 AliConfig.cxx:378
 AliConfig.cxx:379
 AliConfig.cxx:380
 AliConfig.cxx:381
 AliConfig.cxx:382
 AliConfig.cxx:383
 AliConfig.cxx:384
 AliConfig.cxx:385
 AliConfig.cxx:386
 AliConfig.cxx:387
 AliConfig.cxx:388
 AliConfig.cxx:389
 AliConfig.cxx:390
 AliConfig.cxx:391
 AliConfig.cxx:392
 AliConfig.cxx:393
 AliConfig.cxx:394
 AliConfig.cxx:395
 AliConfig.cxx:396
 AliConfig.cxx:397
 AliConfig.cxx:398
 AliConfig.cxx:399
 AliConfig.cxx:400
 AliConfig.cxx:401
 AliConfig.cxx:402
 AliConfig.cxx:403
 AliConfig.cxx:404
 AliConfig.cxx:405
 AliConfig.cxx:406
 AliConfig.cxx:407
 AliConfig.cxx:408
 AliConfig.cxx:409
 AliConfig.cxx:410
 AliConfig.cxx:411
 AliConfig.cxx:412
 AliConfig.cxx:413
 AliConfig.cxx:414
 AliConfig.cxx:415
 AliConfig.cxx:416
 AliConfig.cxx:417
 AliConfig.cxx:418
 AliConfig.cxx:419
 AliConfig.cxx:420
 AliConfig.cxx:421
 AliConfig.cxx:422
 AliConfig.cxx:423
 AliConfig.cxx:424
 AliConfig.cxx:425
 AliConfig.cxx:426
 AliConfig.cxx:427
 AliConfig.cxx:428
 AliConfig.cxx:429
 AliConfig.cxx:430
 AliConfig.cxx:431
 AliConfig.cxx:432
 AliConfig.cxx:433
 AliConfig.cxx:434
 AliConfig.cxx:435
 AliConfig.cxx:436
 AliConfig.cxx:437
 AliConfig.cxx:438
 AliConfig.cxx:439
 AliConfig.cxx:440
 AliConfig.cxx:441
 AliConfig.cxx:442
 AliConfig.cxx:443
 AliConfig.cxx:444
 AliConfig.cxx:445
 AliConfig.cxx:446
 AliConfig.cxx:447
 AliConfig.cxx:448
 AliConfig.cxx:449
 AliConfig.cxx:450
 AliConfig.cxx:451
 AliConfig.cxx:452
 AliConfig.cxx:453
 AliConfig.cxx:454
 AliConfig.cxx:455
 AliConfig.cxx:456
 AliConfig.cxx:457
 AliConfig.cxx:458
 AliConfig.cxx:459
 AliConfig.cxx:460
 AliConfig.cxx:461
 AliConfig.cxx:462
 AliConfig.cxx:463
 AliConfig.cxx:464
 AliConfig.cxx:465
 AliConfig.cxx:466