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

/////////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                             //
// AliCDBLocal										       //
// access class to a DataBase in a local storage  			                       //
//                                                                                             //
/////////////////////////////////////////////////////////////////////////////////////////////////

#include <cstdlib>
#include <stdexcept>
#include <fstream>

#include <TSystem.h>
#include <TObjString.h>
#include <TRegexp.h>
#include <TFile.h>
#include <TKey.h>

#include "AliCDBLocal.h"
#include "AliCDBEntry.h"
#include "AliLog.h"
using namespace std;

ClassImp(AliCDBLocal)

//_____________________________________________________________________________
AliCDBLocal::AliCDBLocal(const char* baseDir):
  fBaseDirectory(baseDir) 
{
  // constructor

  AliDebug(1, Form("fBaseDirectory = %s",fBaseDirectory.Data()));

  // check baseDire: trying to cd to baseDir; if it does not exist, create it
  void* dir = gSystem->OpenDirectory(baseDir);
  if (dir == NULL) {
    if (gSystem->mkdir(baseDir, kTRUE)) {
       AliError(Form("Can't open directory <%s>!", baseDir)); //!!!!!!!! to be commented out for testing
    }

  } else {
    AliDebug(2,Form("Folder <%s> found",fBaseDirectory.Data()));
    gSystem->FreeDirectory(dir);
  }
  fType="local";
  fBaseFolder = fBaseDirectory;
}

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

}


//_____________________________________________________________________________
Bool_t AliCDBLocal::FilenameToId(const char* filename, AliCDBRunRange& runRange,
    Int_t& version, Int_t& subVersion) {
  // build AliCDBId from filename numbers

  Ssiz_t mSize;

  // valid filename: Run#firstRun_#lastRun_v#version_s#subVersion.root
  TRegexp keyPattern("^Run[0-9]+_[0-9]+_v[0-9]+_s[0-9]+.root$");
  keyPattern.Index(filename, &mSize);
  if (!mSize) {
    AliDebug(2, Form("Bad filename <%s>.", filename));
    return kFALSE;
  }

  TString idString(filename);
  idString.Resize(idString.Length() - sizeof(".root") + 1);

  TObjArray* strArray = (TObjArray*) idString.Tokenize("_");

  TString firstRunString(((TObjString*) strArray->At(0))->GetString());
  runRange.SetFirstRun(atoi(firstRunString.Data() + 3));
  runRange.SetLastRun(atoi(((TObjString*) strArray->At(1))->GetString()));

  TString verString(((TObjString*) strArray->At(2))->GetString());
  version = atoi(verString.Data() + 1);

  TString subVerString(((TObjString*) strArray->At(3))->GetString());
  subVersion = atoi(subVerString.Data() + 1);

  delete strArray;

  return kTRUE;
}


//_____________________________________________________________________________
Bool_t AliCDBLocal::IdToFilename(const AliCDBId& id, TString& filename) const {
// build file name from AliCDBId data (run range, version, subVersion)

  AliDebug(1, Form("fBaseDirectory = %s",fBaseDirectory.Data()));

  if (!id.GetAliCDBRunRange().IsValid()) {
    AliDebug(2,Form("Invalid run range <%d, %d>.", 
          id.GetFirstRun(), id.GetLastRun()));
    return kFALSE;
  }

  if (id.GetVersion() < 0) {
    AliDebug(2,Form("Invalid version <%d>.", id.GetVersion()));
    return kFALSE;
  }

  if (id.GetSubVersion() < 0) {
    AliDebug(2,Form("Invalid subversion <%d>.", id.GetSubVersion()));
    return kFALSE;
  }

  filename = Form("Run%d_%d_v%d_s%d.root", id.GetFirstRun(), id.GetLastRun(),
      id.GetVersion(), id.GetSubVersion());

  filename.Prepend(fBaseDirectory +'/' + id.GetPath() + '/');

  return kTRUE;
}

//_____________________________________________________________________________
Bool_t AliCDBLocal::PrepareId(AliCDBId& id) {
// prepare id (version, subVersion) of the object that will be stored (called by PutEntry)

  TString dirName = Form("%s/%s", fBaseDirectory.Data(), id.GetPath().Data());

  // go to the path; if directory does not exist, create it
  void* dirPtr = gSystem->OpenDirectory(dirName);
  if (!dirPtr) {
    gSystem->mkdir(dirName, kTRUE);
    dirPtr = gSystem->OpenDirectory(dirName);

    if (!dirPtr) {
      AliError(Form("Can't create directory <%s>!", 
            dirName.Data()));
      return kFALSE;
    }
  }

  const char* filename;
  AliCDBRunRange aRunRange; // the runRange got from filename
  AliCDBRunRange lastRunRange(-1,-1); // highest runRange found
  Int_t aVersion, aSubVersion; // the version subVersion got from filename
  Int_t lastVersion = 0, lastSubVersion = -1; // highest version and subVersion found

  if (!id.HasVersion()) { // version not specified: look for highest version & subVersion

    while ((filename = gSystem->GetDirEntry(dirPtr))) { // loop on the files

      TString aString(filename);
      if (aString == "." || aString == "..") continue;

      if (!FilenameToId(filename, aRunRange, aVersion, 
            aSubVersion)) {
        AliDebug(2,Form(
              "Bad filename <%s>! I'll skip it.", 
              filename));
        continue;
      }

      if (!aRunRange.Overlaps(id.GetAliCDBRunRange())) continue;
      if(aVersion < lastVersion) continue;
      if(aVersion > lastVersion) lastSubVersion = -1;
      if(aSubVersion < lastSubVersion) continue;
      lastVersion = aVersion;
      lastSubVersion = aSubVersion;
      lastRunRange = aRunRange;
    }

    id.SetVersion(lastVersion);
    id.SetSubVersion(lastSubVersion + 1);

  } else { // version specified, look for highest subVersion only

    while ((filename = gSystem->GetDirEntry(dirPtr))) { // loop on the files

      TString aString(filename);
      if (aString == "." || aString == "..") {
        continue;
      }

      if (!FilenameToId(filename, aRunRange, aVersion, 
            aSubVersion)) {
        AliDebug(2,Form(
              "Bad filename <%s>!I'll skip it.",
              filename));	
        continue;
      }

      if (aRunRange.Overlaps(id.GetAliCDBRunRange()) 
          && aVersion == id.GetVersion()
          && aSubVersion > lastSubVersion) {
        lastSubVersion = aSubVersion;
        lastRunRange = aRunRange;
      }

    }

    id.SetSubVersion(lastSubVersion + 1);
  }

  gSystem->FreeDirectory(dirPtr);

  TString lastStorage = id.GetLastStorage();
  if(lastStorage.Contains(TString("grid"), TString::kIgnoreCase) &&
      id.GetSubVersion() > 0 ){
    AliError(Form("Grid to Local Storage error! local object with version v%d_s%d found:",id.GetVersion(), id.GetSubVersion()-1));
    AliError(Form("This object has been already transferred from Grid (check v%d_s0)!",id.GetVersion()));
    return kFALSE;
  }

  if(lastStorage.Contains(TString("new"), TString::kIgnoreCase) &&
      id.GetSubVersion() > 0 ){
    AliDebug(2, Form("A NEW object is being stored with version v%d_s%d",
          id.GetVersion(),id.GetSubVersion()));
    AliDebug(2, Form("and it will hide previously stored object with v%d_s%d!",
          id.GetVersion(),id.GetSubVersion()-1));
  }

  if(!lastRunRange.IsAnyRange() && !(lastRunRange.IsEqual(& id.GetAliCDBRunRange()))) 
    AliWarning(Form("Run range modified w.r.t. previous version (Run%d_%d_v%d_s%d)",
          lastRunRange.GetFirstRun(), lastRunRange.GetLastRun(), 
          id.GetVersion(), id.GetSubVersion()-1));

  return kTRUE;
}


//_____________________________________________________________________________
AliCDBId* AliCDBLocal::GetId(const AliCDBId& query) {
  // look for filename matching query (called by GetEntryId)

  // if querying for fRun and not specifying a version, look in the fValidFileIds list
  if(!AliCDBManager::Instance()->GetCvmfsOcdbTag().IsNull() && query.GetFirstRun() == fRun && !query.HasVersion()) {
  //if(query.GetFirstRun() == fRun && !query.HasVersion()) {
    // get id from fValidFileIds
    TIter iter(&fValidFileIds);

    AliCDBId *anIdPtr=0;
    AliCDBId* result=0;

    while((anIdPtr = dynamic_cast<AliCDBId*> (iter.Next()))){
      if(anIdPtr->GetPath() == query.GetPath()){
        result = new AliCDBId(*anIdPtr);
        break;
      }
    }
    return result;
  }

  // otherwise browse in the local filesystem CDB storage
  TString dirName = Form("%s/%s", fBaseDirectory.Data(), query.GetPath().Data());

  void* dirPtr = gSystem->OpenDirectory(dirName);
  if (!dirPtr) {
    AliDebug(2,Form("Directory <%s> not found", (query.GetPath()).Data()));
    AliDebug(2,Form("in DB folder %s", fBaseDirectory.Data()));
    return NULL;
  }

  const char* filename;
  AliCDBId *result = new AliCDBId();
  result->SetPath(query.GetPath());

  AliCDBRunRange aRunRange; // the runRange got from filename
  Int_t aVersion, aSubVersion; // the version and subVersion got from filename

  if (!query.HasVersion()) { // neither version and subversion specified -> look for highest version and subVersion

    while ((filename = gSystem->GetDirEntry(dirPtr))) { // loop on files

      TString aString(filename);
      if (aString.BeginsWith('.')) continue;

      if (!FilenameToId(filename, aRunRange, aVersion, aSubVersion)) continue;
      // aRunRange, aVersion, aSubVersion filled from filename

      if (!aRunRange.Comprises(query.GetAliCDBRunRange())) continue;
      // aRunRange contains requested run!

      AliDebug(1,Form("Filename %s matches\n",filename));

      if (result->GetVersion() < aVersion) {
        result->SetVersion(aVersion);
        result->SetSubVersion(aSubVersion);

        result->SetFirstRun(
            aRunRange.GetFirstRun());
        result->SetLastRun(
            aRunRange.GetLastRun());

      } else if (result->GetVersion() == aVersion
          && result->GetSubVersion()
          < aSubVersion) {

        result->SetSubVersion(aSubVersion);

        result->SetFirstRun(
            aRunRange.GetFirstRun());
        result->SetLastRun(
            aRunRange.GetLastRun());
      } else if (result->GetVersion() == aVersion
          && result->GetSubVersion() == aSubVersion){
        AliError(Form("More than one object valid for run %d, version %d_%d!",
              query.GetFirstRun(), aVersion, aSubVersion));
        gSystem->FreeDirectory(dirPtr);
        delete result;
        return NULL;
      }
    }

  } else if (!query.HasSubVersion()) { // version specified but not subversion -> look for highest subVersion
    result->SetVersion(query.GetVersion());

    while ((filename = gSystem->GetDirEntry(dirPtr))) { // loop on files

      TString aString(filename);
      if (aString.BeginsWith('.')) continue;

      if (!FilenameToId(filename, aRunRange, aVersion, aSubVersion)) continue;
      // aRunRange, aVersion, aSubVersion filled from filename

      if (!aRunRange.Comprises(query.GetAliCDBRunRange())) continue; 
      // aRunRange contains requested run!

      if(query.GetVersion() != aVersion) continue;
      // aVersion is requested version!

      if(result->GetSubVersion() == aSubVersion){
        AliError(Form("More than one object valid for run %d, version %d_%d!",
              query.GetFirstRun(), aVersion, aSubVersion));
        gSystem->FreeDirectory(dirPtr);
        delete result;
        return NULL;
      }
      if( result->GetSubVersion() < aSubVersion) {

        result->SetSubVersion(aSubVersion);

        result->SetFirstRun(
            aRunRange.GetFirstRun());
        result->SetLastRun(
            aRunRange.GetLastRun());
      } 
    }

  } else { // both version and subversion specified

    //AliCDBId dataId(queryId.GetAliCDBPath(), -1, -1, -1, -1);
    //Bool_t result;
    while ((filename = gSystem->GetDirEntry(dirPtr))) { // loop on files

      TString aString(filename);
      if (aString.BeginsWith('.')) continue;

      if (!FilenameToId(filename, aRunRange, aVersion, aSubVersion)){
        AliDebug(5, Form("Could not make id from file: %s", filename));
        continue;
      }
      // aRunRange, aVersion, aSubVersion filled from filename

      if (!aRunRange.Comprises(query.GetAliCDBRunRange())) continue;
      // aRunRange contains requested run!

      if(query.GetVersion() != aVersion || query.GetSubVersion() != aSubVersion){
          continue;
      }
      // aVersion and aSubVersion are requested version and subVersion!

      result->SetVersion(aVersion);
      result->SetSubVersion(aSubVersion);
      result->SetFirstRun(aRunRange.GetFirstRun());
      result->SetLastRun(aRunRange.GetLastRun());
      break;
    }
  }

  gSystem->FreeDirectory(dirPtr);

  return result;
}

//_____________________________________________________________________________
AliCDBEntry* AliCDBLocal::GetEntry(const AliCDBId& queryId) {
// get AliCDBEntry from the storage (the CDB file matching the query is
// selected by GetEntryId and the contained AliCDBid is passed here)

  AliCDBId* dataId = GetEntryId(queryId);

  TString errMessage(TString::Format("No valid CDB object found! request was: %s", queryId.ToString().Data()));
  if (!dataId || !dataId->IsSpecified()){
    AliError(Form("No file found matching this id!"));
    throw std::runtime_error(errMessage.Data());
    return NULL;
  }

  TString filename;
  if (!IdToFilename(*dataId, filename)) {
    AliError(Form("Bad data ID encountered!"));
    delete dataId;
    throw std::runtime_error(errMessage.Data());
    return NULL;
  }

  TFile file(filename, "READ"); // open file
  if (!file.IsOpen()) {
    AliError(Form("Can't open file <%s>!", filename.Data()));
    delete dataId;
    throw std::runtime_error(errMessage.Data());
    return NULL;
  }

  // get the only AliCDBEntry object from the file
  // the object in the file is an AliCDBEntry entry named "AliCDBEntry"

  AliCDBEntry* anEntry = dynamic_cast<AliCDBEntry*> (file.Get("AliCDBEntry"));
  if (!anEntry) {
    AliError(Form("Bad storage data: No AliCDBEntry in file!"));
    file.Close();
    delete dataId;
    throw std::runtime_error(errMessage.Data());
    return NULL;
  }

  AliCDBId& entryId = anEntry->GetId();

  // The object's Id are not reset during storage
  // If object's Id runRange or version do not match with filename,
  // it means that someone renamed file by hand. In this case a warning msg is issued.

  anEntry-> SetLastStorage("local");

  if(!entryId.IsEqual(dataId)){
    AliWarning(Form("Mismatch between file name and object's Id!"));
    AliWarning(Form("File name: %s", dataId->ToString().Data()));
    AliWarning(Form("Object's Id: %s", entryId.ToString().Data()));
  }

  // Check whether entry contains a TTree. In case load the tree in memory!
  LoadTreeFromFile(anEntry);

  // close file, return retrieved entry
  file.Close();
  delete dataId;

  return anEntry;
}

//_____________________________________________________________________________
AliCDBId* AliCDBLocal::GetEntryId(const AliCDBId& queryId) {
// get AliCDBId from the storage
// Via GetId, select the CDB file matching the query and return
// the contained AliCDBId

  AliCDBId* dataId = 0;

  // look for a filename matching query requests (path, runRange, version, subVersion)
  if (!queryId.HasVersion()) {
    // if version is not specified, first check the selection criteria list
    AliCDBId selectedId(queryId);
    GetSelection(&selectedId);
    dataId = GetId(selectedId);
  } else {
    dataId = GetId(queryId);
  }

  if (dataId && !dataId->IsSpecified()) {
    delete dataId;
    return NULL;
  }

  return dataId;
}

//_____________________________________________________________________________
void AliCDBLocal::GetEntriesForLevel0(const char* level0,
    const AliCDBId& queryId, TList* result) {
  // multiple request (AliCDBStorage::GetAll)

  TString level0Dir = Form("%s/%s", fBaseDirectory.Data(), level0);

  void* level0DirPtr = gSystem->OpenDirectory(level0Dir);
  if (!level0DirPtr) {
    AliDebug(2,Form("Can't open level0 directory <%s>!",
          level0Dir.Data()));
    return;
  }

  const char* level1;
  Long_t flag=0;
  while ((level1 = gSystem->GetDirEntry(level0DirPtr))) {

    TString level1Str(level1);
    // skip directories starting with a dot (".svn" and similar in old svn working copies)
    if (level1Str.BeginsWith('.')) {
      continue;
    }

    TString fullPath = Form("%s/%s",level0Dir.Data(), level1); 

    Int_t res=gSystem->GetPathInfo(fullPath.Data(), 0, (Long64_t*) 0, &flag, 0);

    if(res){
      AliDebug(2, Form("Error reading entry %s !",level1Str.Data()));
      continue;
    }
    if(!(flag&2)) continue; // bit 1 of flag = directory!

    if (queryId.GetAliCDBPath().Level1Comprises(level1)) {
      GetEntriesForLevel1(level0, level1, queryId, result);
    }
  }

  gSystem->FreeDirectory(level0DirPtr);
}

//_____________________________________________________________________________
void AliCDBLocal::GetEntriesForLevel1(const char* level0, const char* level1,
    const AliCDBId& queryId, TList* result) {
  // multiple request (AliCDBStorage::GetAll)

  TString level1Dir = Form("%s/%s/%s", fBaseDirectory.Data(), level0,level1);

  void* level1DirPtr = gSystem->OpenDirectory(level1Dir);
  if (!level1DirPtr) {
    AliDebug(2,Form("Can't open level1 directory <%s>!",
          level1Dir.Data()));
    return;
  }

  const char* level2;
  Long_t flag=0;
  while ((level2 = gSystem->GetDirEntry(level1DirPtr))) {

    TString level2Str(level2);
    // skip directories starting with a dot (".svn" and similar in old svn working copies)
    if (level2Str.BeginsWith('.')) {
      continue;
    }

    TString fullPath = Form("%s/%s",level1Dir.Data(), level2); 

    Int_t res=gSystem->GetPathInfo(fullPath.Data(), 0, (Long64_t*) 0, &flag, 0);

    if(res){
      AliDebug(2, Form("Error reading entry %s !",level2Str.Data()));
      continue;
    }
    if(!(flag&2)) continue; // skip if not a directory

    if (queryId.GetAliCDBPath().Level2Comprises(level2)) {

      AliCDBPath entryPath(level0, level1, level2);

      AliCDBId entryId(entryPath, queryId.GetAliCDBRunRange(),
          queryId.GetVersion(), queryId.GetSubVersion());

      // check filenames to see if any includes queryId.GetAliCDBRunRange()
      void* level2DirPtr = gSystem->OpenDirectory(fullPath);
      if (!level2DirPtr) {
        AliDebug(2,Form("Can't open level2 directory <%s>!", fullPath.Data()));
        return;
      }
      const char* level3;
      Long_t file_flag=0;
      while ((level3 = gSystem->GetDirEntry(level2DirPtr))) {
        TString fileName(level3);
        TString fullFileName = Form("%s/%s", fullPath.Data(), level3); 

        Int_t file_res=gSystem->GetPathInfo(fullFileName.Data(), 0, (Long64_t*) 0, &file_flag, 0);

        if(file_res){
          AliDebug(2, Form("Error reading entry %s !",level2Str.Data()));
          continue;
        }
        if(file_flag)
          continue; // it is not a regular file!

        // skip if result already contains an entry for this path
        Bool_t alreadyLoaded = kFALSE;
        Int_t nEntries = result->GetEntries();
        for(int i=0; i<nEntries; i++){
          AliCDBEntry *lEntry = (AliCDBEntry*) result->At(i);
          AliCDBId lId = lEntry->GetId();
          TString lPath = lId.GetPath();
          if(lPath.EqualTo(entryPath.GetPath())){
            alreadyLoaded = kTRUE;
            break;
          }
        }
        if (alreadyLoaded) continue;

        //skip filenames not matching the regex below
        TRegexp re("^Run[0-9]+_[0-9]+_");
        if(!fileName.Contains(re))
          continue;
        // Extract first- and last-run and version and subversion.
        // This allows to avoid quering for a calibration path if we did not find a filename with
        // run-range including the one specified in the query and
        // with version, subversion matching the query
        TString fn = fileName( 3, fileName.Length()-3 );
        TString firstRunStr = fn( 0, fn.First('_') );
        fn.Remove( 0, firstRunStr.Length()+1 );
        TString lastRunStr = fn( 0, fn.First('_') );
        fn.Remove( 0, lastRunStr.Length()+1 );
        TString versionStr = fn( 1, fn.First('_')-1 );
        fn.Remove( 0, versionStr.Length()+2 );
        TString subvStr = fn(1, fn.First('.')-1);
        Int_t firstRun = firstRunStr.Atoi();
        Int_t lastRun  = lastRunStr.Atoi();
        AliCDBRunRange rr(firstRun,lastRun);
        Int_t version = versionStr.Atoi();
        Int_t subVersion = subvStr.Atoi();

        AliCDBEntry* anEntry = 0;
        Bool_t versionOK = kTRUE, subVersionOK = kTRUE;
        if ( queryId.HasVersion() && version!=queryId.GetVersion())
          versionOK = kFALSE;
        if ( queryId.HasSubVersion() && subVersion!=queryId.GetSubVersion())
          subVersionOK = kFALSE;
        if (rr.Comprises(queryId.GetAliCDBRunRange()) && versionOK && subVersionOK )
        {
          anEntry = GetEntry(entryId);
          result->Add(anEntry);
        }
      }
    }
  }

  gSystem->FreeDirectory(level1DirPtr);
}

//_____________________________________________________________________________
TList* AliCDBLocal::GetEntries(const AliCDBId& queryId) {
// multiple request (AliCDBStorage::GetAll)

  TList* result = new TList();
  result->SetOwner();

  // if querying for fRun and not specifying a version, look in the fValidFileIds list
  if(queryId.GetFirstRun() == fRun && !queryId.HasVersion()) {
    // get id from fValidFileIds
    TIter *iter = new TIter(&fValidFileIds);
    TObjArray selectedIds;
    selectedIds.SetOwner(1);

    // loop on list of valid Ids to select the right version to get.
    // According to query and to the selection criteria list, version can be the highest or exact
    AliCDBId* anIdPtr=0;
    AliCDBId* dataId=0;
    AliCDBPath queryPath = queryId.GetAliCDBPath();
    while((anIdPtr = dynamic_cast<AliCDBId*> (iter->Next()))){
      AliCDBPath thisCDBPath = anIdPtr->GetAliCDBPath();
      if(!(queryPath.Comprises(thisCDBPath))){
        continue;
      }

      AliCDBId thisId(*anIdPtr);
      dataId = GetId(thisId);
      if(dataId)
        selectedIds.Add(dataId);
    }

    delete iter; iter=0;

    // selectedIds contains the Ids of the files matching all requests of query!
    // All the objects are now ready to be retrieved
    iter = new TIter(&selectedIds);
    while((anIdPtr = dynamic_cast<AliCDBId*> (iter->Next()))){
      AliCDBEntry* anEntry = GetEntry(*anIdPtr);
      if(anEntry) result->Add(anEntry);
    }
    delete iter; iter=0;
    return result;
  }

  void* storageDirPtr = gSystem->OpenDirectory(fBaseDirectory);
  if (!storageDirPtr) {
    AliDebug(2,Form("Can't open storage directory <%s>",
          fBaseDirectory.Data()));
    return NULL;
  }

  const char* level0;
  Long_t flag=0;
  while ((level0 = gSystem->GetDirEntry(storageDirPtr))) {

    TString level0Str(level0);
    // skip directories starting with a dot (".svn" and similar in old svn working copies)
    if (level0Str.BeginsWith('.')) {
      continue;
    }

    TString fullPath = Form("%s/%s",fBaseDirectory.Data(), level0); 

    Int_t res=gSystem->GetPathInfo(fullPath.Data(), 0, (Long64_t*) 0, &flag, 0);

    if(res){
      AliDebug(2, Form("Error reading entry %s !",level0Str.Data()));
      continue;
    }

    if(!(flag&2)) continue; // bit 1 of flag = directory!				

    if (queryId.GetAliCDBPath().Level0Comprises(level0)) {
      GetEntriesForLevel0(level0, queryId, result);
    }
  }

  gSystem->FreeDirectory(storageDirPtr);

  return result;	
}

//_____________________________________________________________________________
Bool_t AliCDBLocal::PutEntry(AliCDBEntry* entry, const char* mirrors) {
// put an AliCDBEntry object into the database

  AliCDBId& id = entry->GetId();

  // set version and subVersion for the entry to be stored
  if (!PrepareId(id)) return kFALSE;


  // build filename from entry's id
  TString filename="";
  if (!IdToFilename(id, filename)) {

    AliDebug(2,Form("Bad ID encountered! Subnormal error!"));
    return kFALSE;
  }

  TString mirrorsString(mirrors);
  if(!mirrorsString.IsNull())
    AliWarning("AliCDBLocal storage cannot take mirror SEs into account. They will be ignored.");

  // open file
  TFile file(filename, "CREATE");
  if (!file.IsOpen()) {
    AliError(Form("Can't open file <%s>!", filename.Data()));
    return kFALSE;
  }

  //SetTreeToFile(entry, &file);

  entry->SetVersion(id.GetVersion());
  entry->SetSubVersion(id.GetSubVersion());

  // write object (key name: "AliCDBEntry")
  Bool_t result = file.WriteTObject(entry, "AliCDBEntry");
  if (!result) AliDebug(2,Form("Can't write entry to file: %s", filename.Data()));

  file.Close();
  if(result) {
    if(!(id.GetPath().Contains("SHUTTLE/STATUS")))
      AliInfo(Form("CDB object stored into file %s",filename.Data()));
  }

  return result;
}

//_____________________________________________________________________________
TList* AliCDBLocal::GetIdListFromFile(const char* fileName){

  TString fullFileName(fileName);
  fullFileName.Prepend(fBaseDirectory+'/');
  TFile *file = TFile::Open(fullFileName);
  if (!file) {
    AliError(Form("Can't open selection file <%s>!", fullFileName.Data()));
    return NULL;
  }
  file->cd();

  TList *list = new TList();
  list->SetOwner();
  int i=0;
  TString keycycle;

  AliCDBId *id;
  while(1){
    i++;
    keycycle = "AliCDBId;";
    keycycle+=i;

    id = (AliCDBId*) file->Get(keycycle);
    if(!id) break;
    list->AddFirst(id);
  }
  file->Close(); delete file; file=0;	
  return list;
}

//_____________________________________________________________________________
Bool_t AliCDBLocal::Contains(const char* path) const{
// check for path in storage's fBaseDirectory

  TString dirName = Form("%s/%s", fBaseDirectory.Data(), path);
  Bool_t result=kFALSE;

  void* dirPtr = gSystem->OpenDirectory(dirName); 
  if (dirPtr) result=kTRUE;
  gSystem->FreeDirectory(dirPtr);

  return result;
}

//_____________________________________________________________________________
void AliCDBLocal::QueryValidFiles() {
// Query the CDB for files valid for AliCDBStorage::fRun.
// Fills list fValidFileIds with AliCDBId objects extracted from CDB files
// present in the local storage.
// If fVersion was not set, fValidFileIds is filled with highest versions.
// In the CVMFS case, the fValidFileIds is filled from the file containing
// the filepaths corresponding to the highest versions for the give OCDB tag
// by launching the script which extracts the last versions for the given run.
//

  if(fVersion != -1) AliWarning ("Version parameter is not used by local storage query!");
  if(fMetaDataFilter) {
    AliWarning ("CDB meta data parameters are not used by local storage query!");
    delete fMetaDataFilter; fMetaDataFilter=0;
  }

  // Check if in CVMFS case
  TString cvmfsOcdbTag(gSystem->Getenv("OCDB_PATH"));
  if (!cvmfsOcdbTag.IsNull()) {
    QueryValidCVMFSFiles(cvmfsOcdbTag);
    return;
  }

  void* storageDirPtr = gSystem->OpenDirectory(fBaseDirectory);

  const char* level0;
  while ((level0 = gSystem->GetDirEntry(storageDirPtr))) {

    TString level0Str(level0);
    if (level0Str.BeginsWith(".")) {
      continue;
    }

    if (fPathFilter.Level0Comprises(level0)) {
      TString level0Dir = Form("%s/%s",fBaseDirectory.Data(),level0);
      void* level0DirPtr = gSystem->OpenDirectory(level0Dir);
      const char* level1;
      while ((level1 = gSystem->GetDirEntry(level0DirPtr))) {

        TString level1Str(level1);
        if (level1Str.BeginsWith(".")) {
          continue;
        }

        if (fPathFilter.Level1Comprises(level1)) {
          TString level1Dir = Form("%s/%s/%s",
              fBaseDirectory.Data(),level0,level1);

          void* level1DirPtr = gSystem->OpenDirectory(level1Dir);
          const char* level2;
          while ((level2 = gSystem->GetDirEntry(level1DirPtr))) {

            TString level2Str(level2);
            if (level2Str.BeginsWith(".")) {
              continue;
            }

            if (fPathFilter.Level2Comprises(level2)) {
              TString dirName = Form("%s/%s/%s/%s", fBaseDirectory.Data(), level0, level1, level2);

              void* dirPtr = gSystem->OpenDirectory(dirName);

              const char* filename;

              AliCDBRunRange aRunRange; // the runRange got from filename
              AliCDBRunRange hvRunRange; // the runRange of the highest version valid file
              Int_t aVersion, aSubVersion; // the version and subVersion got from filename
              Int_t highestV=-1, highestSubV=-1; // the highest version and subVersion for this calibration type

              while ((filename = gSystem->GetDirEntry(dirPtr))) { // loop on files

                TString aString(filename);
                if (aString.BeginsWith(".")) continue;

                if (!FilenameToId(filename, aRunRange, aVersion, aSubVersion)) {
                  continue;
                }

                AliCDBRunRange runrg(fRun, fRun);
                if (!aRunRange.Comprises(runrg))
                  continue;

                // check to keep the highest version/subversion (in case of more than one)
                if (aVersion > highestV) {
                  highestV = aVersion;
                  highestSubV = aSubVersion;
                  hvRunRange = aRunRange;
                } else if (aVersion == highestV) {
                  if (aSubVersion > highestSubV) {
                    highestSubV = aSubVersion;
                    hvRunRange = aRunRange;
                  }
                }
              }
              if(highestV >= 0){
                AliCDBPath validPath(level0, level1, level2);
                AliCDBId *validId = new AliCDBId(validPath, hvRunRange, highestV, highestSubV);
                fValidFileIds.AddLast(validId);
              }

              gSystem->FreeDirectory(dirPtr);
            }
          }
          gSystem->FreeDirectory(level1DirPtr);
        }
      }
      gSystem->FreeDirectory(level0DirPtr);
    }
  }
  gSystem->FreeDirectory(storageDirPtr);

}

//_____________________________________________________________________________
void AliCDBLocal::QueryValidCVMFSFiles(TString& cvmfsOcdbTag) {
// Called in the CVMFS case to fill the fValidFileIds from the file containing
// the filepaths corresponding to the highest versions for the given OCDB tag
// by launching the script which extracts the last versions for the given run.
//

  TString command = cvmfsOcdbTag;
  AliDebug(3, Form("Getting valid files from CVMFS-OCDB tag \"%s\"", cvmfsOcdbTag.Data()));
  // CVMFS-OCDB tag. This is the file $OCDB_PATH/catalogue/20??.list.gz
  // containing all CDB file paths (for the given AR tag)
  cvmfsOcdbTag.Strip(TString::kTrailing, '/');
  cvmfsOcdbTag.Append("/");
  gSystem->ExpandPathName(cvmfsOcdbTag);
  if ( gSystem->AccessPathName(cvmfsOcdbTag) )
    AliFatal(Form("cvmfs OCDB set to an invalid path: %s", cvmfsOcdbTag.Data()));

  // The file containing the list of valid files for the current run has to be generated
  // by running the (shell+awk) script on the CVMFS OCDB tag file.

  // the script in cvmfs to extract CDB filepaths for the given run has the following fullpath
  // w.r.t. $OCDB_PATH: bin/OCDBperRun.sh
  command = command.Strip(TString::kTrailing, '/');
  command.Append("/bin/getOCDBFilesPerRun.sh "); 
  command += cvmfsOcdbTag;
  // from URI define the last two levels of the path of the cvmfs ocdb tag (e.g. data/2012.list.gz)
  TString uri(GetURI());
  uri.Remove(TString::kTrailing, '/');
  TObjArray * osArr = uri.Tokenize('/');
  TObjString* mcdata_os = dynamic_cast<TObjString*>(osArr->At(osArr->GetEntries()-3));
  TObjString* yeartype_os = 0;
  TString mcdata = mcdata_os->GetString();
  if( mcdata == TString("data")) {
    yeartype_os = dynamic_cast<TObjString*>(osArr->At(osArr->GetEntries()-2));
  } else {
    mcdata_os = dynamic_cast<TObjString*>(osArr->At(osArr->GetEntries()-2));
    yeartype_os = dynamic_cast<TObjString*>(osArr->At(osArr->GetEntries()-1));
  }
  mcdata = mcdata_os->GetString();
  TString yeartype = yeartype_os->GetString();
  command += mcdata;
  command += '/';
  command += yeartype;
  command += ".list.gz cvmfs ";
  command += TString::Itoa(fRun,10);
  command += ' ';
  command += TString::Itoa(fRun,10);
  command += " -y > ";
  TString runValidFile(gSystem->WorkingDirectory());
  runValidFile += '/';
  runValidFile += mcdata;
  runValidFile += '_';
  runValidFile += yeartype;
  runValidFile += '_';
  runValidFile += TString::Itoa(fRun,10);
  command += runValidFile;
  AliDebug(3, Form("Running command: \"%s\"",command.Data()));
  Int_t result = gSystem->Exec(command.Data());
  if(result != 0) {
    AliError(Form("Was not able to execute \"%s\"", command.Data()));
  }

  // We expect the file with valid paths for this run to be generated in the current directory
  // and to be named as the CVMFS OCDB tag, without .gz, with '_runnumber' appended
  // Fill fValidFileIds from file
  std::ifstream file (runValidFile.Data());
  if (!file.is_open()) {
    AliFatal(Form("Error opening file \"%s\"!", runValidFile.Data()));
  }
  TString filepath;
  while (filepath.ReadLine(file)) {
    // skip line in case it is not a root file path
    if(! filepath.EndsWith(".root")) {
      continue;
    }
    //extract three-level path and basename
    TObjArray *tokens = filepath.Tokenize('/');
    if (tokens->GetEntries() < 5) {
      AliError(Form("\"%s\" is not a valid cvmfs path for an OCDB object", filepath.Data()));
      continue;
    }
    TObjString *baseNameOstr = (TObjString*) tokens->At(tokens->GetEntries()-1);
    TString baseName(baseNameOstr->String());
    TObjString *l0oStr = (TObjString*) tokens->At(tokens->GetEntries()-4);
    TObjString *l1oStr = (TObjString*) tokens->At(tokens->GetEntries()-3);
    TObjString *l2oStr = (TObjString*) tokens->At(tokens->GetEntries()-2);
    TString l0(l0oStr->String());
    TString l1(l1oStr->String());
    TString l2(l2oStr->String());
    TString threeLevels = l0 + '/' + l1 + '/' + l2;

    AliCDBPath validPath(threeLevels);
    //use basename and three-level path to create Id
    AliCDBRunRange aRunRange; // the runRange got from filename
    Int_t aVersion, aSubVersion; // the version and subVersion got from filename
    if ( !FilenameToId(baseName, aRunRange, aVersion, aSubVersion) )
      AliError( Form("Could not create a valid CDB id from path: \"%s\"", filepath.Data()) );

    AliCDBRunRange runrg(fRun,fRun);
    if (!aRunRange.Comprises(runrg)) continue; // should never happen (would mean awk script wrong output)
    // aRunRange contains requested run!
    AliCDBId *validId = new AliCDBId(validPath,aRunRange,aVersion,aSubVersion);
    fValidFileIds.AddLast(validId);
  }

  file.close();
  gSystem->Exec( Form( "rm %s", runValidFile.Data() ) );
  return;
}

/////////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                             //
// AliCDBLocal factory  			                                               //
//                                                                                             //
/////////////////////////////////////////////////////////////////////////////////////////////////

ClassImp(AliCDBLocalFactory)

//_____________________________________________________________________________
Bool_t AliCDBLocalFactory::Validate(const char* dbString) {
// check if the string is valid local URI

  TRegexp dbPatternLocal("^local://.+$");

  return (TString(dbString).Contains(dbPatternLocal) || TString(dbString).BeginsWith("snapshot://folder="));
}

//_____________________________________________________________________________
AliCDBParam* AliCDBLocalFactory::CreateParameter(const char* dbString) {
// create AliCDBLocalParam class from the URI string

  if (!Validate(dbString)) {
    return NULL;
  }

  TString checkSS(dbString);
  if(checkSS.BeginsWith("snapshot://"))
  {
    TString snapshotPath("OCDB");
    snapshotPath.Prepend(TString(gSystem->WorkingDirectory()) + '/');
    checkSS.Remove(0,checkSS.First(':')+3);
    return new AliCDBLocalParam(snapshotPath,checkSS);
  }

  // if the string argument is not a snapshot URI, than it is a plain local URI
  TString pathname(dbString + sizeof("local://") - 1);

  if(gSystem->ExpandPathName(pathname))
    return NULL;

  if (pathname[0] != '/') {
    pathname.Prepend(TString(gSystem->WorkingDirectory()) + '/');
  }
  //pathname.Prepend("local://");

  return new AliCDBLocalParam(pathname);
}

//_____________________________________________________________________________
AliCDBStorage* AliCDBLocalFactory::Create(const AliCDBParam* param) {
// create AliCDBLocal storage instance from parameters

  if (AliCDBLocalParam::Class() == param->IsA()) {

    const AliCDBLocalParam* localParam = 
      (const AliCDBLocalParam*) param;

    return new AliCDBLocal(localParam->GetPath());
  }

  return NULL;
}
//_____________________________________________________________________________
void AliCDBLocal::SetRetry(Int_t /* nretry */, Int_t /* initsec */) {

  // Function to set the exponential retry for putting entries in the OCDB

  AliInfo("This function sets the exponential retry for putting entries in the OCDB - to be used ONLY for AliCDBGrid --> returning without doing anything");
  return;
} 



/////////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                             //
// AliCDBLocal Parameter class  			                                       //                                          //
//                                                                                             //
/////////////////////////////////////////////////////////////////////////////////////////////////

ClassImp(AliCDBLocalParam)

  //_____________________________________________________________________________
  AliCDBLocalParam::AliCDBLocalParam():
    AliCDBParam(),
    fDBPath()
{
  // default constructor

}

//_____________________________________________________________________________
AliCDBLocalParam::AliCDBLocalParam(const char* dbPath):
  AliCDBParam(),
  fDBPath(dbPath)
{
  // constructor

  SetType("local");
  SetURI(TString("local://") + dbPath);
}

//_____________________________________________________________________________
AliCDBLocalParam::AliCDBLocalParam(const char* dbPath, const char* uri):
  AliCDBParam(),
  fDBPath(dbPath)
{
  // constructor

  SetType("local");
  SetURI(TString("alien://") + uri);
}

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

}

//_____________________________________________________________________________
AliCDBParam* AliCDBLocalParam::CloneParam() const {
  // clone parameter

  return new AliCDBLocalParam(fDBPath);
}

//_____________________________________________________________________________
ULong_t AliCDBLocalParam::Hash() const {
  // return Hash function

  return fDBPath.Hash();
}

//_____________________________________________________________________________
Bool_t AliCDBLocalParam::IsEqual(const TObject* obj) const {
  // check if this object is equal to AliCDBParam obj

  if (this == obj) {
    return kTRUE;
  }

  if (AliCDBLocalParam::Class() != obj->IsA()) {
    return kFALSE;
  }

  AliCDBLocalParam* other = (AliCDBLocalParam*) obj;

  return fDBPath == other->fDBPath;
}

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