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.                  *
 **************************************************************************/

#include <TKey.h>
#include <TH1.h>
#include <TTree.h>
#include <TNtuple.h>
#include <TFile.h>
#include "AliCDBStorage.h"
#include "AliCDBGrid.h"

#include "AliCDBEntry.h"
#include "AliLog.h"

ClassImp(AliCDBStorage)

//_____________________________________________________________________________
AliCDBStorage::AliCDBStorage():
  fValidFileIds(),
  fRun(-1),
  fPathFilter(),
  fVersion(-1),
  fMetaDataFilter(0),
  fSelections(),
  fURI(),
  fType(),
  fBaseFolder(),
  fNretry(0),
  fInitRetrySeconds(0)
{
  // constructor

  fValidFileIds.SetOwner(1);
  fSelections.SetOwner(1);
}

//_____________________________________________________________________________
AliCDBStorage::~AliCDBStorage() {
// destructor

  RemoveAllSelections();
  fValidFileIds.Clear();
  delete fMetaDataFilter;

}

//_____________________________________________________________________________
void AliCDBStorage::GetSelection(/*const*/ AliCDBId* id) {
// return required version and subversion from the list of selection criteria

  TIter iter(&fSelections);
  AliCDBId* aSelection;

  // loop on the list of selection criteria
  while ((aSelection = (AliCDBId*) iter.Next())) {
    // check if selection element contains id's path and run (range) 
    if (aSelection->Comprises(*id)) {
      AliDebug(2,Form("Using selection criterion: %s ", aSelection->ToString().Data()));
      // return required version and subversion

      id->SetVersion(aSelection->GetVersion());
      id->SetSubVersion(aSelection->GetSubVersion());
      return;  
    }
  }

  // no valid element is found in the list of selection criteria -> return
  AliDebug(2,"Looking for objects with most recent version");
  return;
}

//_____________________________________________________________________________
void AliCDBStorage::ReadSelectionFromFile(const char *fileName){
// read selection criteria list from file

  RemoveAllSelections();

  TList *list = GetIdListFromFile(fileName);
  if(!list) return;

  list->SetOwner();	
  Int_t nId = list->GetEntries();
  AliCDBId *id;
  TKey *key;

  for(int i=nId-1;i>=0;i--){
    key = (TKey*) list->At(i);
    id = (AliCDBId*) key->ReadObj();
    if(id) AddSelection(*id);
  }
  delete list;
  AliInfo(Form("Selection criteria list filled with %d entries",fSelections.GetEntries()));
  PrintSelectionList();

}

//_____________________________________________________________________________
void AliCDBStorage::AddSelection(const AliCDBId& selection) {
// add a selection criterion

  AliCDBPath path = selection.GetPath();
  if(!path.IsValid()) return;

  TIter iter(&fSelections);
  const AliCDBId *anId;
  while((anId = (AliCDBId*) iter.Next())){
    if(selection.Comprises(*anId)){
      AliWarning("This selection is more general than a previous one and will hide it!");
      AliWarning(Form("%s", (anId->ToString()).Data()));
      fSelections.AddBefore(anId, new AliCDBId(selection));
      return;
    }

  }
  fSelections.AddFirst(new AliCDBId(selection));
}

//_____________________________________________________________________________
void AliCDBStorage::AddSelection(const AliCDBPath& path,
    const AliCDBRunRange& runRange, Int_t version, Int_t subVersion){
  // add a selection criterion

  AddSelection(AliCDBId(path, runRange, version, subVersion));
}

//_____________________________________________________________________________
void AliCDBStorage::AddSelection(const AliCDBPath& path,
    Int_t firstRun, Int_t lastRun, Int_t version, Int_t subVersion){
  // add a selection criterion

  AddSelection(AliCDBId(path, firstRun, lastRun, version, subVersion));
}

//_____________________________________________________________________________
void AliCDBStorage::RemoveSelection(const AliCDBId& selection) {
// remove a selection criterion

  TIter iter(&fSelections);
  AliCDBId* aSelection;

  while ((aSelection = (AliCDBId*) iter.Next())) {
    if (selection.Comprises(*aSelection)) {
      fSelections.Remove(aSelection);
    }
  }
}

//_____________________________________________________________________________
void AliCDBStorage::RemoveSelection(const AliCDBPath& path, 
    const AliCDBRunRange& runRange){
  // remove a selection criterion

  RemoveSelection(AliCDBId(path, runRange, -1, -1));
}

//_____________________________________________________________________________
void AliCDBStorage::RemoveSelection(const AliCDBPath& path,
    Int_t firstRun, Int_t lastRun){
  // remove a selection criterion

  RemoveSelection(AliCDBId(path, firstRun, lastRun, -1, -1));
}

//_____________________________________________________________________________
void AliCDBStorage::RemoveSelection(int position){
// remove a selection criterion from its position in the list

  delete fSelections.RemoveAt(position);
}

//_____________________________________________________________________________
void AliCDBStorage::RemoveAllSelections(){
// remove all selection criteria

  fSelections.Clear();
}

//_____________________________________________________________________________
void AliCDBStorage::PrintSelectionList(){
// prints the list of selection criteria

  TIter iter(&fSelections);
  AliCDBId* aSelection;

  // loop on the list of selection criteria
  int index=0;
  while ((aSelection = (AliCDBId*) iter.Next())) {
    AliInfo(Form("index %d -> selection: %s",index++, aSelection->ToString().Data()));
  }

}

//_____________________________________________________________________________
AliCDBEntry* AliCDBStorage::Get(const AliCDBId& query) {
// get an AliCDBEntry object from the database

  // check if query's path and runRange are valid
  // query is invalid also if version is not specified and subversion is!
  if (!query.IsValid()) {
    AliError(Form("Invalid query: %s", query.ToString().Data()));
    return NULL;
  }

  // query is not specified if path contains wildcard or runrange = [-1,-1]
  if (!query.IsSpecified()) {
    AliError(Form("Unspecified query: %s",
          query.ToString().Data()));
    return NULL;
  }

  // This is needed otherwise TH1  objects (histos, TTree's) are lost when file is closed!
  Bool_t oldStatus = TH1::AddDirectoryStatus();
  TH1::AddDirectory(kFALSE);

  AliCDBEntry* entry = GetEntry(query);

  if (oldStatus != kFALSE)
    TH1::AddDirectory(kTRUE);

  // if drain storage is set, drain entry into drain storage
  if(entry && (AliCDBManager::Instance())->IsDrainSet())
    AliCDBManager::Instance()->Drain(entry);

  return entry;
}

//_____________________________________________________________________________
AliCDBEntry* AliCDBStorage::Get(const AliCDBPath& path, Int_t runNumber,
    Int_t version, Int_t subVersion) {
  // get an AliCDBEntry object from the database

  return Get(AliCDBId(path, runNumber, runNumber, version, subVersion));
}

//_____________________________________________________________________________
AliCDBEntry* AliCDBStorage::Get(const AliCDBPath& path,
    const AliCDBRunRange& runRange, Int_t version,
    Int_t subVersion) {
  // get an AliCDBEntry object from the database

  return Get(AliCDBId(path, runRange, version, subVersion));
}

//_____________________________________________________________________________
TList* AliCDBStorage::GetAll(const AliCDBId& query) {
// get multiple AliCDBEntry objects from the database


  if (!query.IsValid()) {
    AliError(Form("Invalid query: %s", query.ToString().Data()));
    return NULL;
  }

  if (query.IsAnyRange()) {
    AliError(Form("Unspecified run or runrange: %s",
          query.ToString().Data())); 	
    return NULL;
  }	

  // This is needed otherwise TH1  objects (histos, TTree's) are lost when file is closed!
  Bool_t oldStatus = TH1::AddDirectoryStatus();
  TH1::AddDirectory(kFALSE);

  TList *result = GetEntries(query);

  if (oldStatus != kFALSE)
    TH1::AddDirectory(kTRUE);

  Int_t nEntries = result->GetEntries();

  AliInfo(Form("%d objects retrieved. Request was: %s",
        nEntries, query.ToString().Data()));
  for(int i=0; i<nEntries;i++){
    AliCDBEntry *entry = (AliCDBEntry*) result->At(i);
    AliInfo(Form("%s",entry->GetId().ToString().Data()));
  }


  // if drain storage is set, drain entries into drain storage
  if((AliCDBManager::Instance())->IsDrainSet()){
    for(int i = 0; i<result->GetEntries(); i++){
      AliCDBEntry* entry = (AliCDBEntry*) result->At(i);
      AliCDBManager::Instance()->Drain(entry);
    }
  }


  return result;
}

//_____________________________________________________________________________
TList* AliCDBStorage::GetAll(const AliCDBPath& path, Int_t runNumber, 
    Int_t version, Int_t subVersion) {
  // get multiple AliCDBEntry objects from the database

  return GetAll(AliCDBId(path, runNumber, runNumber, version, 	
        subVersion));
}

//_____________________________________________________________________________
TList* AliCDBStorage::GetAll(const AliCDBPath& path, 
    const AliCDBRunRange& runRange, Int_t version, Int_t subVersion) {
  // get multiple AliCDBEntry objects from the database

  return GetAll(AliCDBId(path, runRange, version, subVersion));
}

//_____________________________________________________________________________
AliCDBId* AliCDBStorage::GetId(const AliCDBId& query) {
// get the Id of the valid object from the database (does not open the file)

  // check if query's path and runRange are valid
  // query is invalid also if version is not specified and subversion is!
  if (!query.IsValid()) {
    AliError(Form("Invalid query: %s", query.ToString().Data()));
    return NULL;
  }

  // query is not specified if path contains wildcard or runrange = [-1,-1]
  if (!query.IsSpecified()) {
    AliError(Form("Unspecified query: %s",
          query.ToString().Data()));
    return NULL;
  }

  AliCDBId* id = GetEntryId(query);

  return id;
}

//_____________________________________________________________________________
AliCDBId* AliCDBStorage::GetId(const AliCDBPath& path, Int_t runNumber,
    Int_t version, Int_t subVersion) {
  // get the Id of the valid object from the database (does not open the file)

  return GetId(AliCDBId(path, runNumber, runNumber, version, subVersion));
}

//_____________________________________________________________________________
AliCDBId* AliCDBStorage::GetId(const AliCDBPath& path,
    const AliCDBRunRange& runRange, Int_t version,
    Int_t subVersion) {
  // get the Id of the valid object from the database (does not open the file)

  return GetId(AliCDBId(path, runRange, version, subVersion));
}

//_____________________________________________________________________________
Bool_t AliCDBStorage::Put(TObject* object, AliCDBId& id, AliCDBMetaData* metaData, const char* mirrors, AliCDBManager::DataType type) {
// store an AliCDBEntry object into the database

  if (object==0x0) {
    AliError("Null Entry! No storage will be done!");
    return kFALSE;
  } 

  AliCDBEntry anEntry(object, id, metaData);

  return Put(&anEntry, mirrors, type);
}

//_____________________________________________________________________________
Bool_t AliCDBStorage::Put(AliCDBEntry* entry, const char* mirrors, AliCDBManager::DataType type) {
// store an AliCDBEntry object into the database

  if (!entry){
    AliError("No entry!");
    return kFALSE;
  }

  if (entry->GetObject()==0x0){
    AliError("No valid object in CDB entry!");
    return kFALSE;
  }

  if (!entry->GetId().IsValid()) {
    AliError(Form("Invalid entry ID: %s",
          entry->GetId().ToString().Data()));
    return kFALSE;
  }	

  if (!entry->GetId().IsSpecified()) {
    AliError(Form("Unspecified entry ID: %s",
          entry->GetId().ToString().Data()));
    return kFALSE;
  }

  AliCDBManager::DataType expectedType = GetDataType();

  if(expectedType != AliCDBManager::kPrivate && type != expectedType) {
    AliError(Form("It is forbidden to store %s data into a folder of type %s!",
          AliCDBManager::GetDataTypeName(type),
          AliCDBManager::GetDataTypeName(expectedType)));
    return 0;
  }


  TString strMirrors(mirrors);
  if(!strMirrors.IsNull() && !strMirrors.IsWhitespace())
    return PutEntry(entry, mirrors);
  else
    return PutEntry(entry);
}

//_____________________________________________________________________________
void AliCDBStorage::QueryCDB(Int_t run, const char* pathFilter,
    Int_t version, AliCDBMetaData* md){
// query CDB for files valid for given run, and fill list fValidFileIds
// Actual query is done in virtual function QueryValidFiles()
// If version is not specified, the query will fill fValidFileIds
// with highest versions

  fRun = run;

  fPathFilter = pathFilter;
  if(!fPathFilter.IsValid()) {
    AliError(Form("Filter not valid: %s", pathFilter));
    fPathFilter = "*";
    return;
  }

  fVersion = version;

  AliInfo(Form("Querying files valid for run %d and path \"%s\" into CDB storage  \"%s://%s\"",
        fRun, pathFilter, fType.Data(), fBaseFolder.Data()));

  // In fValidFileIds, clear id for the same 3level path, if any
  AliDebug(3, Form("Clearing list of CDB Id's previously loaded for path \"%s\"", pathFilter));
  AliCDBPath filter(pathFilter);
  for (Int_t i=fValidFileIds.GetEntries()-1; i>=0; --i) {
    AliCDBId *rmMe = dynamic_cast<AliCDBId*>(fValidFileIds.At(i));
    AliCDBPath rmPath = rmMe->GetAliCDBPath();
    if (filter.Comprises(rmPath)) {
      AliDebug(3,Form("Removing id \"%s\" matching: \"%s\"", rmPath.GetPath().Data(), pathFilter));
      delete fValidFileIds.RemoveAt(i);
    }
  }

  if(fMetaDataFilter) {delete fMetaDataFilter; fMetaDataFilter=0;}
  if(md) fMetaDataFilter = dynamic_cast<AliCDBMetaData*> (md->Clone());

  QueryValidFiles();

  AliInfo(Form("%d valid files found!", fValidFileIds.GetEntries()));

}

//_____________________________________________________________________________
void AliCDBStorage::PrintQueryCDB(){
// print parameters used to load list of CDB Id's (fRun, fPathFilter, fVersion)

  AliCDBId paramId(fPathFilter, fRun, fRun, fVersion);
  AliInfo(Form("**** QueryCDB Parameters **** \n\t<%s>\n",
        paramId.ToString().Data()));

  if(fMetaDataFilter) fMetaDataFilter->PrintMetaData();


  TString message = "**** Id's of valid objects found *****\n";
  TIter iter(&fValidFileIds);
  AliCDBId* anId=0;

  // loop on the list of selection criteria
  while ((anId = dynamic_cast<AliCDBId*>(iter.Next()))) {
    message += Form("\t%s\n", anId->ToString().Data());
  }
  message += Form("\n\tTotal: %d objects found\n", fValidFileIds.GetEntriesFast());
  AliInfo(Form("%s", message.Data()));
}

//_____________________________________________________________________________
AliCDBManager::DataType AliCDBStorage::GetDataType() const {
// returns the type of the data that should be stored into this storage:
// kConditions: conditions data; kReference: reference data; kPrivate: private (user-defined) data type

  if(GetType() != "alien") return AliCDBManager::kPrivate;

  TString condFolder = ((AliCDBGridParam*) AliCDBManager::Instance()->GetCondParam())->GetDBFolder();
  TString refFolder = ((AliCDBGridParam*) AliCDBManager::Instance()->GetRefParam())->GetDBFolder();

  if(GetBaseFolder().Contains(condFolder)) return AliCDBManager::kCondition;
  if(GetBaseFolder().Contains(refFolder)) return AliCDBManager::kReference;

  return AliCDBManager::kPrivate;
}

//_____________________________________________________________________________
void AliCDBStorage::SetMirrorSEs(const char* mirrors) {
// if the current storage is not of "alien" type, just issue a warning
// AliCDBGrid implements its own SetMirrorSEs method, classes for other storage types do not

  TString storageType = GetType();
  if(storageType != "alien"){
    AliWarning(Form("The current storage is of type \"%s\". Setting of SEs to \"%s\" skipped!",storageType.Data(),mirrors));
    return;
  }
  AliError("We should never get here!! AliCDBGrid must have masked this virtual method!");
  return;
}

//_____________________________________________________________________________
const char* AliCDBStorage::GetMirrorSEs() const {
// if the current storage is not of "alien" type, just issue a warning
// AliCDBGrid implements its own GetMirrorSEs method, classes for other storage types do not

  TString storageType = GetType();
  if(storageType != "alien"){
    AliWarning(Form("The current storage is of type \"%s\" and cannot handle SEs. Returning empty string!",storageType.Data()));
    return "";
  }
  AliError("We should never get here!! AliCDBGrid must have masked this virtual method!");
  return "";
}

//_____________________________________________________________________________
void AliCDBStorage::LoadTreeFromFile(AliCDBEntry *entry) const {
// Checks whether entry contains a TTree and in case loads it into memory

  TObject *obj = (TObject*) entry->GetObject();
  if (!obj) {
    AliError("Cannot retrieve the object:");
    entry->PrintMetaData();
    return;
  }

  if (!strcmp(obj->ClassName(),TTree::Class_Name())) {

    AliWarning("Entry contains a TTree! Loading baskets...");

    TTree* tree = dynamic_cast<TTree*> (obj);

    if(!tree) return;

    tree->LoadBaskets();
    tree->SetDirectory(0);
  }
  else if (!strcmp(obj->ClassName(),TNtuple::Class_Name())){

    AliWarning("Entry contains a TNtuple! Loading baskets...");

    TNtuple* ntu = dynamic_cast<TNtuple*> (obj);

    if(!ntu) return;

    ntu->LoadBaskets();
    ntu->SetDirectory(0);
  }

  return;
}

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