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

/////////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                             //
// AliCDBGrid										       //
// access class to a DataBase in an AliEn storage  			                       //
//                                                                                             //
/////////////////////////////////////////////////////////////////////////////////////////////////

#include <cstdlib>
#include <TGrid.h>
#include <TGridResult.h>
#include <TFile.h>
#include <TKey.h>
#include <TROOT.h>
#include <TList.h>
#include <TObjArray.h>
#include <TObjString.h>
#include <TMath.h>
#include <TRegexp.h>

#include "AliLog.h"
#include "AliCDBEntry.h"
#include "AliCDBGrid.h"
#include "AliCDBManager.h"


ClassImp(AliCDBGrid)

//_____________________________________________________________________________
AliCDBGrid::AliCDBGrid(const char *gridUrl, const char *user, const char *dbFolder,
    const char *se, const char* cacheFolder, Bool_t operateDisconnected,
    Long64_t cacheSize, Long_t cleanupInterval) :
  AliCDBStorage(),
  fGridUrl(gridUrl),
  fUser(user),
  fDBFolder(dbFolder),
  fSE(se),
  fMirrorSEs(""),
  fCacheFolder(cacheFolder),
  fOperateDisconnected(operateDisconnected),
  fCacheSize(cacheSize),
  fCleanupInterval(cleanupInterval)
{
// constructor //

  // if the same Grid is alreay active, skip connection
  if (!gGrid || fGridUrl != gGrid->GridUrl()
      || (( fUser != "" ) && ( fUser != gGrid->GetUser() )) ) {
    // connection to the Grid
    AliInfo("Connection to the Grid...");
    if(gGrid){
      AliInfo(Form("gGrid = %p; fGridUrl = %s; gGrid->GridUrl() = %s",gGrid,fGridUrl.Data(), gGrid->GridUrl()));
      AliInfo(Form("fUser = %s; gGrid->GetUser() = %s",fUser.Data(), gGrid->GetUser()));
    }
    TGrid::Connect(fGridUrl.Data(),fUser.Data());
  }

  if(!gGrid) {
    AliError("Connection failed!");
    return;
  }

  TString initDir(gGrid->Pwd(0));
  if (fDBFolder[0] != '/') {
    fDBFolder.Prepend(initDir);
  }

  // check DBFolder: trying to cd to DBFolder; if it does not exist, create it
  if(!gGrid->Cd(fDBFolder.Data(),0)){
    AliDebug(2,Form("Creating new folder <%s> ...",fDBFolder.Data()));
    TGridResult* res = gGrid->Command(Form("mkdir -p %s",fDBFolder.Data()));
    TString result = res->GetKey(0,"__result__");
    if(result == "0"){
      AliFatal(Form("Cannot create folder <%s> !",fDBFolder.Data()));
      return;
    }
  } else {
    AliDebug(2,Form("Folder <%s> found",fDBFolder.Data()));
  }

  // removes any '/' at the end of path, then append one '/'
  while(fDBFolder.EndsWith("/")) fDBFolder.Remove(fDBFolder.Last('/')); 
  fDBFolder+="/";

  fType="alien";
  fBaseFolder = fDBFolder;

  // Setting the cache

  // Check if local cache folder is already defined
  TString origCache(TFile::GetCacheFileDir());
  if(fCacheFolder.Length() > 0) {
    if(origCache.Length() == 0) {
      AliInfo(Form("Setting local cache to: %s", fCacheFolder.Data()));
    } else if(fCacheFolder != origCache) {
      AliWarning(Form("Local cache folder was already defined, changing it to: %s",
            fCacheFolder.Data()));
    }

    // default settings are: operateDisconnected=kTRUE, forceCacheread = kFALSE
    if(!TFile::SetCacheFileDir(fCacheFolder.Data(), fOperateDisconnected)) {
      AliError(Form("Could not set cache folder %s !", fCacheFolder.Data()));
      fCacheFolder = "";
    } else {
      // reset fCacheFolder because the function may have
      // slightly changed the folder name (e.g. '/' added)
      fCacheFolder = TFile::GetCacheFileDir();
    }

    // default settings are: cacheSize=1GB, cleanupInterval = 0
    if(!TFile::ShrinkCacheFileDir(fCacheSize, fCleanupInterval)) {
      AliError(Form("Could not set following values "
            "to ShrinkCacheFileDir: cacheSize = %lld, cleanupInterval = %ld !",
            fCacheSize, fCleanupInterval));
    }
  }

  // return to the initial directory
  gGrid->Cd(initDir.Data(),0);

  fNretry = 3;  // default
  fInitRetrySeconds = 5;   // default
}

//_____________________________________________________________________________
AliCDBGrid::~AliCDBGrid() {
// destructor
  delete gGrid; gGrid=0;

}

//_____________________________________________________________________________
Bool_t AliCDBGrid::FilenameToId(TString& filename, AliCDBId& id) {
// build AliCDBId from full path filename (fDBFolder/path/Run#x_#y_v#z_s0.root)

  if(filename.Contains(fDBFolder)){
    filename = filename(fDBFolder.Length(),filename.Length()-fDBFolder.Length());
  }

  TString idPath = filename(0,filename.Last('/'));
  id.SetPath(idPath);
  if(!id.IsValid()) return kFALSE;

  filename=filename(idPath.Length()+1,filename.Length()-idPath.Length());

  Ssiz_t mSize;
  // valid filename: Run#firstRun_#lastRun_v#version_s0.root
  TRegexp keyPattern("^Run[0-9]+_[0-9]+_v[0-9]+_s0.root$");
  keyPattern.Index(filename, &mSize);
  if (!mSize) {

    // TODO backward compatibility ... maybe remove later!
    Ssiz_t oldmSize;
    TRegexp oldKeyPattern("^Run[0-9]+_[0-9]+_v[0-9]+.root$");
    oldKeyPattern.Index(filename, &oldmSize);
    if(!oldmSize) {
      AliDebug(2,Form("Bad filename <%s>.", filename.Data()));
      return kFALSE;
    } else {
      AliDebug(2,Form("Old filename format <%s>.", filename.Data()));
      id.SetSubVersion(-11); // TODO trick to ensure backward compatibility
    }

  } else {
    id.SetSubVersion(-1); // TODO trick to ensure backward compatibility
  }

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

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

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

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

  delete strArray;

  return kTRUE;
}

//_____________________________________________________________________________
Bool_t AliCDBGrid::IdToFilename(const AliCDBId& id, TString& filename) const {
// build file name from AliCDBId (path, run range, version) and fDBFolder

  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;
  }

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

  if (id.GetSubVersion() != -11) filename += "_s0"; // TODO to ensure backward compatibility
  filename += ".root";

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

  return kTRUE;
}

//_____________________________________________________________________________
void AliCDBGrid::SetRetry(Int_t nretry, Int_t initsec) {

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

  AliWarning("WARNING!!! You are changing the exponential retry times and delay: this function should be used by experts!"); 
  fNretry = nretry;
  fInitRetrySeconds = initsec;
  AliDebug(2,Form("fNretry = %d, fInitRetrySeconds = %d", fNretry, fInitRetrySeconds));
} 


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

  TString initDir(gGrid->Pwd(0));

  TString dirName(fDBFolder);

  Bool_t dirExist=kFALSE;



  // go to the path; if directory does not exist, create it
  for(int i=0;i<3;i++){
    //TString cmd("find -d ");
    //cmd += Form("%s ",dirName);
    //cmd += 
    //gGrid->Command(cmd.Data());
    dirName+=Form("%s/",id.GetPathLevel(i).Data());
    dirExist=gGrid->Cd(dirName,0);
    if (!dirExist) {
      AliDebug(2,Form("Creating new folder <%s> ...",dirName.Data()));
      if(!gGrid->Mkdir(dirName,"",0)){
        AliError(Form("Cannot create directory <%s> !",dirName.Data()));
        gGrid->Cd(initDir.Data());
        return kFALSE;
      }

      // if folders are new add tags to them
      if(i == 1) {
        // TODO Currently disabled
        // add short lived tag!
        // AliInfo("Tagging level 1 folder with \"ShortLived\" tag");
        // if(!AddTag(dirName,"ShortLived_try")){
        //	AliError(Form("Could not tag folder %s !", dirName.Data()));
        //	if(!gGrid->Rmdir(dirName.Data())){
        //		AliError(Form("Unexpected: could not remove %s directory!", dirName.Data()));
        //	}
        //	return 0;
        //}

      } else if(i == 2) {
        AliDebug(2,"Tagging level 2 folder with \"CDB\" and \"CDB_MD\" tag");
        if(!AddTag(dirName,"CDB")){
          AliError(Form("Could not tag folder %s !", dirName.Data()));
          if(!gGrid->Rmdir(dirName.Data())){
            AliError(Form("Unexpected: could not remove %s directory!", dirName.Data()));
          }
          return 0;
        }
        if(!AddTag(dirName,"CDB_MD")){
          AliError(Form("Could not tag folder %s !", dirName.Data()));
          if(!gGrid->Rmdir(dirName.Data())){
            AliError(Form("Unexpected: could not remove %s directory!", dirName.Data()));
          }
          return 0;
        }

        // TODO Currently disabled
        // add short lived tag!
        // TString path=id.GetPath();
        // if(AliCDBManager::Instance()->IsShortLived(path.Data())) {
        //	AliInfo(Form("Tagging %s as short lived", dirName.Data()));
        //	if(!TagShortLived(dirName, kTRUE)){
        //		AliError(Form("Could not tag folder %s !", dirName.Data()));
        //		if(!gGrid->Rmdir(dirName.Data())){
        //			AliError(Form("Unexpected: could not remove %s directory!", dirName.Data()));
        //		}
        //		return 0;
        //	}
        // } else {
        //	AliInfo(Form("Tagging %s as long lived", dirName.Data()));
        //	if(!TagShortLived(dirName, kFALSE)){
        //		AliError(Form("Could not tag folder %s !", dirName.Data()));
        //		if(!gGrid->Rmdir(dirName.Data())){
        //			AliError(Form("Unexpected: could not remove %s directory!", dirName.Data()));
        //		}
        //		return 0;
        //	}
        // }
      }
    }
  }
  gGrid->Cd(initDir,0);

  TString filename;
  AliCDBId anId; // the id got from filename
  AliCDBRunRange lastRunRange(-1,-1); // highest runRange found
  Int_t lastVersion=0; // highest version found

  TGridResult *res = gGrid->Ls(dirName);

  //loop on the files in the directory, look for highest version
  for(int i=0; i < res->GetEntries(); i++){
    filename=res->GetFileNamePath(i);
    if (!FilenameToId(filename, anId)) continue;
    if (anId.GetAliCDBRunRange().Overlaps(id.GetAliCDBRunRange()) && anId.GetVersion() > lastVersion) {
      lastVersion = anId.GetVersion();
      lastRunRange = anId.GetAliCDBRunRange();
    }

  }
  delete res;

  // GRP entries with explicitly set version escape default incremental versioning
  if(id.GetPath().Contains("GRP") && id.HasVersion() && lastVersion!=0)
  {
    AliDebug(5,Form("Entry %s won't be put in the destination OCDB", id.ToString().Data()));
    return kFALSE;
  }

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

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

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

  return kTRUE;
}

//_____________________________________________________________________________
AliCDBId* AliCDBGrid::GetId(const TObjArray& validFileIds, const AliCDBId& query) {
// look for the Id that matches query's requests (highest or exact version)

  if(validFileIds.GetEntriesFast() < 1)
    return NULL;

  TIter iter(&validFileIds);

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

  while((anIdPtr = dynamic_cast<AliCDBId*> (iter.Next()))){
    if(anIdPtr->GetPath() != query.GetPath()) continue;

    //if(!CheckVersion(query, anIdPtr, result)) return NULL;

    if (!query.HasVersion()){ // look for highest version
      if(result && result->GetVersion() > anIdPtr->GetVersion()) continue;
      if(result && result->GetVersion() == anIdPtr->GetVersion()) {
        AliError(Form("More than one object valid for run %d, version %d!",
              query.GetFirstRun(), anIdPtr->GetVersion()));
        return NULL;
      }
      result = new AliCDBId(*anIdPtr);
    } else { // look for specified version
      if(query.GetVersion() != anIdPtr->GetVersion()) continue;
      if(result && result->GetVersion() == anIdPtr->GetVersion()){
        AliError(Form("More than one object valid for run %d, version %d!",
              query.GetFirstRun(), anIdPtr->GetVersion()));
        return NULL;
      }
      result = new AliCDBId(*anIdPtr);
    }

  }

  return result;
}

//_____________________________________________________________________________
AliCDBId* AliCDBGrid::GetEntryId(const AliCDBId& queryId) {
// get AliCDBId from the database
// User must delete returned object

  AliCDBId* dataId=0;

  AliCDBId selectedId(queryId);
  if (!selectedId.HasVersion()) {
    // if version is not specified, first check the selection criteria list
    GetSelection(&selectedId);
  }

  TObjArray validFileIds;
  validFileIds.SetOwner(1);

  // look for file matching query requests (path, runRange, version)
  if(selectedId.GetFirstRun() == fRun && fPathFilter.Comprises(selectedId.GetAliCDBPath()) &&
      fVersion == selectedId.GetVersion() && !fMetaDataFilter){
    // look into list of valid files previously loaded with AliCDBStorage::FillValidFileIds()
    AliDebug(2, Form("List of files valid for run %d was loaded. Looking there for fileids valid for path %s!",
          selectedId.GetFirstRun(), selectedId.GetPath().Data()));
    dataId = GetId(fValidFileIds, selectedId);

  } else {
    // List of files valid for reqested run was not loaded. Looking directly into CDB
    AliDebug(2, Form("List of files valid for run %d and version %d was not loaded. Looking directly into CDB for fileids valid for path %s!",
          selectedId.GetFirstRun(), selectedId.GetVersion(), selectedId.GetPath().Data()));

    TString filter;
    MakeQueryFilter(selectedId.GetFirstRun(), selectedId.GetLastRun(), 0, filter);

    TString pattern = ".root";
    TString optionQuery = "-y -m";
    if(selectedId.GetVersion() >= 0) {
      pattern.Prepend(Form("_v%d_s0",selectedId.GetVersion()));
      optionQuery = "";
    }

    TString folderCopy(Form("%s%s/Run",fDBFolder.Data(),selectedId.GetPath().Data()));

    if (optionQuery.Contains("-y")){
      AliInfo("Only latest version will be returned");
    }

    AliDebug(2,Form("** fDBFolder = %s, pattern = %s, filter = %s",folderCopy.Data(), pattern.Data(), filter.Data()));
    TGridResult *res = gGrid->Query(folderCopy, pattern, filter, optionQuery.Data());
    if (res) {
      for(int i=0; i<res->GetEntries(); i++){
        AliCDBId *validFileId = new AliCDBId();
        TString filename = res->GetKey(i, "lfn");
        if(filename == "") continue;
        if(FilenameToId(filename, *validFileId))
          validFileIds.AddLast(validFileId);
      }
      delete res;
    }else{
      return 0; // this should be only in case of file catalogue glitch
    }

    dataId = GetId(validFileIds, selectedId);
  }

  return dataId;
}

//_____________________________________________________________________________
AliCDBEntry* AliCDBGrid::GetEntry(const AliCDBId& queryId) {
// get AliCDBEntry from the database

  AliCDBId* dataId = GetEntryId(queryId);

  if (!dataId){
    AliFatal(TString::Format("No valid CDB object found! request was: %s", queryId.ToString().Data()));
    return NULL;
  }

  TString filename;
  if (!IdToFilename(*dataId, filename)) {
    AliDebug(2,Form("Bad data ID encountered! Subnormal error!"));
    delete dataId;
    AliFatal(TString::Format("No valid CDB object found! request was: %s", queryId.ToString().Data()));
  }

  AliCDBEntry* anEntry = GetEntryFromFile(filename, dataId);

  delete dataId;
  if(!anEntry)
    AliFatal(TString::Format("No valid CDB object found! request was: %s", queryId.ToString().Data()));

  return anEntry;
}

//_____________________________________________________________________________
AliCDBEntry* AliCDBGrid::GetEntryFromFile(TString& filename, AliCDBId* dataId){
// Get AliCBEntry object from file "filename"

  AliDebug(2,Form("Opening file: %s",filename.Data()));

  filename.Prepend("/alien");

  // if option="CACHEREAD" TFile will use the local caching facility!
  TString option="READ";
  if(fCacheFolder != ""){

    // Check if local cache folder was changed in the meanwhile
    TString origCache(TFile::GetCacheFileDir());
    if(fCacheFolder != origCache) {
      AliWarning(Form("Local cache folder has been overwritten!! fCacheFolder = %s origCache = %s",
            fCacheFolder.Data(), origCache.Data()));
      TFile::SetCacheFileDir(fCacheFolder.Data(), fOperateDisconnected);
      TFile::ShrinkCacheFileDir(fCacheSize, fCleanupInterval);
    }

    option.Prepend("CACHE");
  }

  AliDebug(2, Form("Option: %s", option.Data()));

  TFile *file = TFile::Open(filename, option);
  if (!file) {
    AliDebug(2,Form("Can't open file <%s>!", filename.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) {
    AliDebug(2,Form("Bad storage data: file does not contain an AliCDBEntry object!"));
    file->Close();
    return NULL;
  }

  // The object's Id is 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.

  if(anEntry){
    AliCDBId entryId = anEntry->GetId();
    Int_t tmpSubVersion = dataId->GetSubVersion();
    dataId->SetSubVersion(entryId.GetSubVersion()); // otherwise filename and id may mismatch
    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()));
    }
    dataId->SetSubVersion(tmpSubVersion);
  }

  anEntry->SetLastStorage("grid");

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

  // close file, return retieved entry
  file->Close(); delete file; file=0;

  return anEntry;
}

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

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

  TObjArray validFileIds;
  validFileIds.SetOwner(1);

  Bool_t alreadyLoaded = kFALSE;

  // look for file matching query requests (path, runRange)
  if(queryId.GetFirstRun() == fRun &&
      fPathFilter.Comprises(queryId.GetAliCDBPath()) && fVersion < 0 && !fMetaDataFilter){
    // look into list of valid files previously loaded with AliCDBStorage::FillValidFileIds()
    AliDebug(2,Form("List of files valid for run %d and for path %s was loaded. Looking there!",
          queryId.GetFirstRun(), queryId.GetPath().Data()));

    alreadyLoaded = kTRUE;

  } else {
    // List of files valid for reqested run was not loaded. Looking directly into CDB
    AliDebug(2,Form("List of files valid for run %d and for path %s was not loaded. Looking directly into CDB!",
          queryId.GetFirstRun(), queryId.GetPath().Data()));

    TString filter;
    MakeQueryFilter(queryId.GetFirstRun(), queryId.GetLastRun(), 0, filter);

    TString path = queryId.GetPath();

    TString pattern = "Run*.root";
    TString optionQuery = "-y";

    TString addFolder = "";
    if (!path.Contains("*")){
      if (!path.BeginsWith("/")) addFolder += "/";
      addFolder += path;
    }
    else{
      if (path.BeginsWith("/")) path.Remove(0,1);
      if (path.EndsWith("/")) path.Remove(path.Length()-1,1);	
      TObjArray* tokenArr = path.Tokenize("/");
      if (tokenArr->GetEntries() != 3) {
        AliError("Not a 3 level path! Keeping old query...");
        pattern.Prepend(path+"/");
      }
      else{
        TString str0 = ((TObjString*)tokenArr->At(0))->String();
        TString str1 = ((TObjString*)tokenArr->At(1))->String();
        TString str2 = ((TObjString*)tokenArr->At(2))->String();
        if (str0 != "*" && str1 != "*" && str2 == "*"){
          // e.g. "ITS/Calib/*"
          addFolder = "/"+str0+"/"+str1;
        }
        else if (str0 != "*" && str1 == "*" && str2 == "*"){	
          // e.g. "ITS/*/*"
          addFolder = "/"+str0;
        }
        else if (str0 == "*" && str1 == "*" && str2 == "*"){	
          // e.g. "*/*/*"
          // do nothing: addFolder is already an empty string;
        }
        else{
          // e.g. "ITS/*/RecoParam"
          pattern.Prepend(path+"/");
        }
      }
      delete tokenArr; tokenArr=0;
    }

    TString folderCopy(Form("%s%s",fDBFolder.Data(),addFolder.Data()));

    AliDebug(2,Form("fDBFolder = %s, pattern = %s, filter = %s",folderCopy.Data(), pattern.Data(), filter.Data()));

    TGridResult *res = gGrid->Query(folderCopy, pattern, filter, optionQuery.Data());  

    if (!res) {
      AliError("Grid query failed");
      return 0;
    }

    for(int i=0; i<res->GetEntries(); i++){
      AliCDBId *validFileId = new AliCDBId();
      TString filename = res->GetKey(i, "lfn");
      if(filename == "") continue;
      if(FilenameToId(filename, *validFileId))
        validFileIds.AddLast(validFileId);
    }
    delete res;
  }

  TIter *iter=0;
  if(alreadyLoaded){
    iter = new TIter(&fValidFileIds);
  } else {
    iter = new TIter(&validFileIds);
  }

  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
  AliCDBPath pathCopy;
  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)) || pathCopy.GetPath() == thisCDBPath.GetPath()) continue;
    pathCopy = thisCDBPath;

    // check the selection criteria list for this query
    AliCDBId thisId(*anIdPtr);
    thisId.SetVersion(queryId.GetVersion());
    if(!thisId.HasVersion()) GetSelection(&thisId);

    if(alreadyLoaded){
      dataId = GetId(fValidFileIds, thisId);
    } else {
      dataId = GetId(validFileIds, 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()))){
    TString filename;
    if (!IdToFilename(*anIdPtr, filename)) {
      AliDebug(2,Form("Bad data ID encountered! Subnormal error!"));
      continue;
    }

    AliCDBEntry* anEntry = GetEntryFromFile(filename, anIdPtr);

    if(anEntry) result->Add(anEntry);

  }
  delete iter; iter=0;

  return result;
}

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

  AliCDBId& id = entry->GetId();

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

  // build filename from entry's id
  TString filename;
  if (!IdToFilename(id, filename)) {
    AliError("Bad ID encountered, cannot make a file name out of it!");
    return kFALSE;
  }

  TString folderToTag = Form("%s%s",
      fDBFolder.Data(),
      id.GetPath().Data());

  TDirectory* saveDir = gDirectory;

  TString fullFilename = Form("/alien%s", filename.Data());
  TString seMirrors(mirrors);
  if(seMirrors.IsNull() || seMirrors.IsWhitespace()) seMirrors=GetMirrorSEs();
  // specify SE to filename
  // if a list of SEs was passed to this method or set via SetMirrorSEs, set the first as SE for opening the file.
  // The other SEs will be used in cascade in case of failure in opening the file.
  // The remaining SEs will be used to create replicas.
  TObjArray *arraySEs = seMirrors.Tokenize(',');
  Int_t nSEs = arraySEs->GetEntries();
  Int_t remainingSEs = 1;
  if(nSEs == 0){
    if (fSE != "default") fullFilename += Form("?se=%s",fSE.Data());
  }else{
    remainingSEs = nSEs;
  }

  // open file
  TFile *file = 0;
  TFile *reopenedFile = 0;
  AliDebug(2, Form("fNretry = %d, fInitRetrySeconds = %d",fNretry,fInitRetrySeconds));
  TString targetSE("");

  Bool_t result = kFALSE;
  Bool_t reOpenResult = kFALSE;
  Int_t reOpenAttempts=0;
  while( !reOpenResult && reOpenAttempts<2 ) { //loop to check the file after closing it, to catch the unlikely but possible case when the file
    // is cleaned up by alien just before closing as a consequence of a network disconnection while writing

    while( !file && remainingSEs>0 ) {
      if(nSEs!=0){
        TObjString *target = (TObjString*) arraySEs->At(nSEs-remainingSEs);
        targetSE=target->String();
        if ( !(targetSE.BeginsWith("ALICE::") && targetSE.CountChar(':')==4) ) {
          AliError( Form("\"%s\" is an invalid storage element identifier.",targetSE.Data()) );
          continue;
        }
        if ( fullFilename.Contains('?')) fullFilename.Remove(fullFilename.Last('?') );
        fullFilename += Form("?se=%s",targetSE.Data());
      }
      Int_t remainingAttempts=fNretry;
      Int_t nsleep = fInitRetrySeconds; // number of seconds between attempts. We let it increase exponentially
      AliDebug(2, Form("Uploading file into SE #%d: %s",nSEs-remainingSEs+1,targetSE.Data()));
      while(remainingAttempts > 0) {
        AliDebug(2, Form("Uploading file into OCDB at %s - Attempt #%d",targetSE.Data(),fNretry-remainingAttempts+1));
        remainingAttempts--;
        file = TFile::Open(fullFilename,"CREATE");
        if(!file || !file->IsWritable()){
          if(file) { // file is not writable
            file->Close(); delete file; file=0;
          }
          TString message(TString::Format("Attempt %d failed.",fNretry-remainingAttempts));
          if(remainingAttempts>0) {
            message += " Sleeping for "; message += nsleep; message += " seconds";
          }else{
            if(remainingSEs>0) message += " Trying to upload at next SE";
          }
          AliDebug(2, message.Data());
          if(remainingAttempts>0) sleep(nsleep);
        }else{
          remainingAttempts=0;
        }
        nsleep*=fInitRetrySeconds;
      }
      remainingSEs--;
    }
    if(!file){
      AliError(Form("All %d attempts have failed on all %d SEs. Returning...",fNretry,nSEs));
      return kFALSE;
    }

    file->cd();

    //SetTreeToFile(entry, file);
    entry->SetVersion(id.GetVersion());

    // write object (key name: "AliCDBEntry")
    result = (file->WriteTObject(entry, "AliCDBEntry") != 0);
    file->Close();
    if (!result) {
      AliError(Form("Can't write entry to file <%s>!", filename.Data()));
    } else {
      AliDebug(2, Form("Reopening file %s for checking its correctness",fullFilename.Data()));
      reopenedFile = TFile::Open(fullFilename.Data(),"READ");
      if(!reopenedFile){
        reOpenResult = kFALSE;
        AliInfo(Form("The file %s was closed successfully but cannot be reopened. Trying now to regenerate it (regeneration attempt number %d)",
              fullFilename.Data(),++reOpenAttempts));
        delete file; file=0;
        AliDebug(2, Form("Removing file %s", filename.Data()));
        if(!gGrid->Rm(filename.Data()))
          AliError("Can't delete file!");
        remainingSEs++;
      }else{
        reOpenResult = kTRUE;
        if ( ! AliCDBManager::Instance()->IsOCDBUploadMode() ) {
          reopenedFile->Close();
          delete reopenedFile; reopenedFile=0;
        }
      }
    }
  }

  if (saveDir) saveDir->cd(); else gROOT->cd();
  delete file; file=0;

  if(result && reOpenResult) {

    if(!TagFileId(filename, &id)){
      AliInfo(Form("CDB tagging failed. Deleting file %s!",filename.Data()));
      if(!gGrid->Rm(filename.Data()))
        AliError("Can't delete file!");
      return kFALSE;
    }

    TagFileMetaData(filename, entry->GetMetaData());
  }else{
    AliError("The file could not be opened or the object could not be written.");
    if(!gGrid->Rm(filename.Data()))
      AliError("Can't delete file!");
    return kFALSE;
  }

  AliInfo(Form("CDB object stored into file %s", filename.Data()));
  if(nSEs==0)
    AliInfo(Form("Storage Element: %s", fSE.Data()));
  else
    AliInfo(Form("Storage Element: %s", targetSE.Data()));

  //In case of other SEs specified by the user, mirror the file to the remaining SEs
  for(Int_t i=0; i<nSEs; i++){
    if(i==nSEs-remainingSEs-1) continue; // skip mirroring to the SE where the file was saved
    TString mirrorCmd("mirror ");
    mirrorCmd += filename;
    mirrorCmd += " ";
    TObjString *target = (TObjString*) arraySEs->At(i);
    TString mirrorSE(target->String());
    mirrorCmd += mirrorSE;
    AliDebug(5,Form("mirror command: \"%s\"",mirrorCmd.Data()));
    AliInfo(Form("Mirroring to storage element: %s", mirrorSE.Data()));
    gGrid->Command(mirrorCmd.Data());
  }
  arraySEs->Delete(); arraySEs=0;

  if ( AliCDBManager::Instance()->IsOCDBUploadMode() ) { // if uploading to OCDBs, add to cvmfs too
    if ( !filename.BeginsWith("/alice/data") && !filename.BeginsWith("/alice/simulation/2008/v4-15-Release") ) {
      AliError ( Form ( "Cannot upload to CVMFS OCDBs a non official CDB object: \"%s\"!", filename.Data() ) );
    } else {
      if ( !PutInCvmfs( filename, reopenedFile) )
        AliError( Form( "Could not upload AliEn file \"%s\" to CVMFS OCDB!", filename.Data() ) );
    }
    reopenedFile->Close();
    delete reopenedFile; reopenedFile=0;
  }

  return kTRUE;
}

//_____________________________________________________________________________
Bool_t AliCDBGrid::PutInCvmfs( TString& filename, TFile* cdbFile ) const
{
  // Add the CDB object to cvmfs OCDB

  TString cvmfsFilename( filename );
  // cvmfsFilename.Remove(TString::kTrailing, '/');
  TString basename = ( cvmfsFilename( cvmfsFilename.Last( '/' ) + 1, cvmfsFilename.Length() ) );
  TString cvmfsDirname = cvmfsFilename.Remove( cvmfsFilename.Last( '/' ), cvmfsFilename.Length() );
  TRegexp threeLevelsRE( "[^/]+/[^/]+/[^/]+$" );
  TString threeLevels = cvmfsDirname( threeLevelsRE );

  TRegexp re_RawFolder("^/alice/data/20[0-9]+/OCDB");
  TRegexp re_MCFolder("^/alice/simulation/2008/v4-15-Release");
  TString rawFolder = cvmfsDirname(re_RawFolder);
  TString mcFolder = cvmfsDirname(re_MCFolder);
  if ( !rawFolder.IsNull() ) {
    cvmfsDirname.Replace(0, 6, "/cvmfs/alice-ocdb.cern.ch/calibration");
  } else if ( !mcFolder.IsNull() ){
    cvmfsDirname.Replace(0,36,"/cvmfs/alice-ocdb.cern.ch/calibration/MC");
  } else {
    AliError(Form("OCDB folder set for an invalid OCDB storage:\n   %s", cvmfsDirname.Data()));
    return kFALSE;
  }
  // now cvmfsDirname is the full dirname in cvmfs
  AliDebug(3, Form("Publishing \"%s\" in \"%s\"", basename.Data(), cvmfsDirname.Data()));

  // Tar the file with the right prefix path. Include the directory structure in the tarball
  // to cover the case of a containing directory being new in cvmfs, plus a container directory
  // to avoid clashing with stuff present in the local directory
  TString firstLevel(threeLevels(0, threeLevels.First('/')));
  TString tempDir("tmpToCvmfsOcdbs");
  gSystem->Exec( Form("rm -r %s > /dev/null 2>&1", tempDir.Data()) ); //to be sure not to publish other stuff in cvmfs
  Int_t result = gSystem->Exec( Form("mkdir -p %s/%s", tempDir.Data(), threeLevels.Data()) );
  if ( result != 0 ) {
    AliError ( Form ( "Could not create the directory \"%s/%s\"", tempDir.Data(), threeLevels.Data() ) );
    return kFALSE;
  }
  cdbFile->Cp(Form("%s/%s/%s", tempDir.Data(), threeLevels.Data(), basename.Data() ));
  TString tarFileName("cdbObjectToAdd.tar.gz");
  TString cvmfsBaseFolder(cvmfsDirname(0, cvmfsDirname.Last('/')));
  cvmfsBaseFolder = cvmfsBaseFolder(0, cvmfsBaseFolder.Last('/'));
  cvmfsBaseFolder = cvmfsBaseFolder(0, cvmfsBaseFolder.Last('/'));
  // tarCommand should be e.g.: tar --transform 's,^,/cvmfs/alice-ocdb.cern.ch/calibration/data/2010/OCDB/,S' -cvzf objecttoadd.tar.gz basename
  result = gSystem->Exec ( Form( "tar --transform 's,^%s,%s,S' -cvzf %s %s", tempDir.Data(), cvmfsBaseFolder.Data(), tarFileName.Data(), tempDir.Data() ) );
  if ( result != 0 ) {
    AliError ( Form ( "Could not create the tarball for the object \"%s\"", filename.Data() ) );
    return kFALSE;
  }

  // Copy the file to cvmfs (requires to have the executable in the path and access to the server)
  result = gSystem->Exec( Form( "ocdb-cvmfs %s", tarFileName.Data() ) );
  if ( result != 0 ) {
    AliError ( Form ( "Could not execute \"ocdb-cvmfs %s\"", filename.Data() ) );
    return kFALSE;
  }

  // Remove the local file and the tar-file
  gSystem->Exec( Form( "rm -r %s", tempDir.Data() ) );
  gSystem->Exec( Form( "rm %s", tarFileName.Data() ) );

  return kTRUE;
}

//_____________________________________________________________________________
Bool_t AliCDBGrid::AddTag(TString& folderToTag, const char* tagname){
// add "tagname" tag (CDB or CDB_MD) to folder where object will be stored

  Bool_t result = kTRUE;
  AliDebug(2, Form("adding %s tag to folder %s", tagname, folderToTag.Data()));
  TString addTag = Form("addTag %s %s", folderToTag.Data(), tagname);
  TGridResult *gridres = gGrid->Command(addTag.Data());
  const char* resCode = gridres->GetKey(0,"__result__"); // '1' if success
  if(resCode[0] != '1') {
    AliError(Form("Couldn't add %s tags to folder %s !",
          tagname, folderToTag.Data()));
    result = kFALSE;
  }
  delete gridres;
  return result;
}

//_____________________________________________________________________________
Bool_t AliCDBGrid::TagFileId(TString& filename, const AliCDBId* id){
// tag stored object in CDB table using object Id's parameters


  TString dirname(filename);
  Int_t dirNumber = gGrid->Mkdir(dirname.Remove(dirname.Last('/')),"-d");

  TString addTagValue1 = Form("addTagValue %s CDB ", filename.Data());
  TString addTagValue2 = Form("first_run=%d last_run=%d version=%d ",
      id->GetFirstRun(),
      id->GetLastRun(),
      id->GetVersion());
  TString addTagValue3 = Form("path_level_0=\"%s\" path_level_1=\"%s\" path_level_2=\"%s\" ",
      id->GetPathLevel(0).Data(),
      id->GetPathLevel(1).Data(),
      id->GetPathLevel(2).Data());
  //TString addTagValue4 = Form("version_path=\"%s\" dir_number=%d",Form("%d_%s",id->GetVersion(),filename.Data()),dirNumber); 
  TString addTagValue4 = Form("version_path=\"%09d%s\" dir_number=%d",id->GetVersion(),filename.Data(),dirNumber); 
  TString addTagValue = Form("%s%s%s%s",
      addTagValue1.Data(),
      addTagValue2.Data(),
      addTagValue3.Data(),
      addTagValue4.Data());

  Bool_t result = kFALSE;
  AliDebug(2, Form("Tagging file. Tag command: %s", addTagValue.Data()));
  TGridResult* res = gGrid->Command(addTagValue.Data());
  const char* resCode = res->GetKey(0,"__result__"); // '1' if success
  if(resCode[0] != '1') {
    AliError(Form("Couldn't add CDB tag value to file %s !",
          filename.Data()));
    result = kFALSE;
  } else {
    AliDebug(2, "Object successfully tagged.");
    result = kTRUE;
  }
  delete res;
  return result;

}

//_____________________________________________________________________________
Bool_t AliCDBGrid::TagShortLived(TString& filename, Bool_t value){
// tag folder with ShortLived tag

  TString addTagValue = Form("addTagValue %s ShortLived_try value=%d", filename.Data(), value);

  Bool_t result = kFALSE;
  AliDebug(2, Form("Tagging file. Tag command: %s", addTagValue.Data()));
  TGridResult* res = gGrid->Command(addTagValue.Data());
  const char* resCode = res->GetKey(0,"__result__"); // '1' if success
  if(resCode[0] != '1') {
    AliError(Form("Couldn't add ShortLived tag value to file %s !", filename.Data()));
    result = kFALSE;
  } else {
    AliDebug(2,"Object successfully tagged.");
    result = kTRUE;
  }
  delete res;
  return result;

}

//_____________________________________________________________________________
Bool_t AliCDBGrid::TagFileMetaData(TString& filename, const AliCDBMetaData* md){
// tag stored object in CDB table using object Id's parameters

  TString addTagValue1 = Form("addTagValue %s CDB_MD ", filename.Data());
  TString addTagValue2 = Form("object_classname=\"%s\" responsible=\"%s\" beam_period=%d ",
      md->GetObjectClassName(),
      md->GetResponsible(),
      md->GetBeamPeriod());
  TString addTagValue3 = Form("aliroot_version=\"%s\" comment=\"%s\"",
      md->GetAliRootVersion(),
      md->GetComment());
  TString addTagValue = Form("%s%s%s",
      addTagValue1.Data(),
      addTagValue2.Data(),
      addTagValue3.Data());

  Bool_t result = kFALSE;
  AliDebug(2, Form("Tagging file. Tag command: %s", addTagValue.Data()));
  TGridResult* res = gGrid->Command(addTagValue.Data());
  const char* resCode = res->GetKey(0,"__result__"); // '1' if success
  if(resCode[0] != '1') {
    AliWarning(Form("Couldn't add CDB_MD tag value to file %s !",
          filename.Data()));
    result = kFALSE;
  } else {
    AliDebug(2,"Object successfully tagged.");
    result = kTRUE;
  }
  return result;
}

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

  TString turl(fileName);
  turl.Prepend("/alien" + fDBFolder);
  turl += "?se="; turl += fSE.Data();
  TFile *file = TFile::Open(turl);
  if (!file) {
    AliError(Form("Can't open selection file <%s>!", turl.Data()));
    return NULL;
  }

  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 AliCDBGrid::Contains(const char* path) const{
// check for path in storage's DBFolder

  TString initDir(gGrid->Pwd(0));
  TString dirName(fDBFolder);
  dirName += path; // dirName = fDBFolder/path
  Bool_t result=kFALSE;
  if (gGrid->Cd(dirName,0)) result=kTRUE;
  gGrid->Cd(initDir.Data(),0);
  return result;
}

//_____________________________________________________________________________
void AliCDBGrid::QueryValidFiles()
{
  // Query the CDB for files valid for AliCDBStorage::fRun
  // Fills list fValidFileIds with AliCDBId objects extracted from CDB files
  // selected from AliEn metadata.
  // If fVersion was not set, fValidFileIds is filled with highest versions. 

  TString filter;
  MakeQueryFilter(fRun, fRun, fMetaDataFilter, filter);

  TString path = fPathFilter.GetPath();

  TString pattern = "Run*";
  TString optionQuery = "-y";
  if(fVersion >= 0) {
    pattern += Form("_v%d_s0", fVersion);
    optionQuery = "";
  }
  pattern += ".root";
  AliDebug(2,Form("pattern: %s", pattern.Data()));

  TString addFolder = "";
  if (!path.Contains("*")){
    if (!path.BeginsWith("/")) addFolder += "/";
    addFolder += path;
  }
  else{
    if (path.BeginsWith("/")) path.Remove(0,1);
    if (path.EndsWith("/")) path.Remove(path.Length()-1,1);	
    TObjArray* tokenArr = path.Tokenize("/");
    if (tokenArr->GetEntries() != 3) {
      AliError("Not a 3 level path! Keeping old query...");
      pattern.Prepend(path+"/");
    }
    else{
      TString str0 = ((TObjString*)tokenArr->At(0))->String();
      TString str1 = ((TObjString*)tokenArr->At(1))->String();
      TString str2 = ((TObjString*)tokenArr->At(2))->String();
      if (str0 != "*" && str1 != "*" && str2 == "*"){
        // e.g. "ITS/Calib/*"
        addFolder = "/"+str0+"/"+str1;
      }
      else if (str0 != "*" && str1 == "*" && str2 == "*"){	
        // e.g. "ITS/*/*"
        addFolder = "/"+str0;
      }
      else if (str0 == "*" && str1 == "*" && str2 == "*"){	
        // e.g. "*/*/*"
        // do nothing: addFolder is already an empty string;
      }
      else{
        // e.g. "ITS/*/RecoParam"
        pattern.Prepend(path+"/");
      }
    }
    delete tokenArr; tokenArr=0;
  }

  TString folderCopy(Form("%s%s",fDBFolder.Data(),addFolder.Data()));

  AliDebug(2,Form("fDBFolder = %s, pattern = %s, filter = %s",folderCopy.Data(), pattern.Data(), filter.Data()));

  if (optionQuery == "-y"){
    AliInfo("Only latest version will be returned");
  } 

  TGridResult *res = gGrid->Query(folderCopy, pattern, filter, optionQuery.Data());  

  if (!res) {
    AliError("Grid query failed");
    return;
  }

  TIter next(res);
  TMap *map;
  while ((map = (TMap*)next())) {
    TObjString *entry;
    if ((entry = (TObjString *) ((TMap *)map)->GetValue("lfn"))) {
      TString& filename = entry->String();
      if(filename.IsNull()) continue;
      AliDebug(2,Form("Found valid file: %s", filename.Data()));
      AliCDBId *validFileId = new AliCDBId();
      Bool_t result = FilenameToId(filename, *validFileId);
      if(result) {
        fValidFileIds.AddLast(validFileId);
      }
      else {
        delete validFileId;
      }
    }
  }
  delete res;

}

//_____________________________________________________________________________
void AliCDBGrid::MakeQueryFilter(Int_t firstRun, Int_t lastRun,
    const AliCDBMetaData* md, TString& result) const
{
  // create filter for file query

  result = Form("CDB:first_run<=%d and CDB:last_run>=%d", firstRun, lastRun);

  //	if(version >= 0) {
  //		result += Form(" and CDB:version=%d", version);
  //	}
  //	if(pathFilter.GetLevel0() != "*") {
  //		result += Form(" and CDB:path_level_0=\"%s\"", pathFilter.GetLevel0().Data());
  //	}
  //	if(pathFilter.GetLevel1() != "*") {
  //		result += Form(" and CDB:path_level_1=\"%s\"", pathFilter.GetLevel1().Data());
  //	}
  //	if(pathFilter.GetLevel2() != "*") {
  //		result += Form(" and CDB:path_level_2=\"%s\"", pathFilter.GetLevel2().Data());
  //	}

  if(md){
    if(md->GetObjectClassName()[0] != '\0') {
      result += Form(" and CDB_MD:object_classname=\"%s\"", md->GetObjectClassName());
    }
    if(md->GetResponsible()[0] != '\0') {
      result += Form(" and CDB_MD:responsible=\"%s\"", md->GetResponsible());
    }
    if(md->GetBeamPeriod() != 0) {
      result += Form(" and CDB_MD:beam_period=%d", md->GetBeamPeriod());
    }
    if(md->GetAliRootVersion()[0] != '\0') {
      result += Form(" and CDB_MD:aliroot_version=\"%s\"", md->GetAliRootVersion());
    }
    if(md->GetComment()[0] != '\0') {
      result += Form(" and CDB_MD:comment=\"%s\"", md->GetComment());
    }
  }
  AliDebug(2, Form("filter: %s",result.Data()));

}


/////////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                             //
// AliCDBGrid factory  			                                                       //
//                                                                                             //
/////////////////////////////////////////////////////////////////////////////////////////////////

ClassImp(AliCDBGridFactory)

  //_____________________________________________________________________________
  Bool_t AliCDBGridFactory::Validate(const char* gridString) {
    // check if the string is valid Grid URI

    TRegexp gridPattern("^alien://.+$");

    return TString(gridString).Contains(gridPattern);
  }

//_____________________________________________________________________________
AliCDBParam* AliCDBGridFactory::CreateParameter(const char* gridString) {
  // create AliCDBGridParam class from the URI string

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

  TString buffer(gridString);

  TString gridUrl 	= "alien://";
  TString user 		= "";
  TString dbFolder 	= "";
  TString se		= "default";
  TString cacheFolder	= "";
  Bool_t  operateDisconnected = kTRUE;
  Long64_t cacheSize          = (UInt_t) 1024*1024*1024; // 1GB
  Long_t cleanupInterval      = 0;

  TObjArray *arr = buffer.Tokenize('?');
  TIter iter(arr);
  TObjString *str = 0;

  while((str = (TObjString*) iter.Next())){
    TString entry(str->String());
    Int_t indeq = entry.Index('=');
    if(indeq == -1) {
      if(entry.BeginsWith("alien://")) { // maybe it's a gridUrl!
        gridUrl = entry;
        continue;
      } else {
        AliError(Form("Invalid entry! %s",entry.Data()));
        continue;
      }
    }

    TString key = entry(0,indeq);
    TString value = entry(indeq+1,entry.Length()-indeq);

    if(key.Contains("grid",TString::kIgnoreCase)) {
      gridUrl += value;
    }
    else if (key.Contains("user",TString::kIgnoreCase)){
      user = value;
    }
    else if (key.Contains("se",TString::kIgnoreCase)){
      se = value;
    }
    else if (key.Contains("cacheF",TString::kIgnoreCase)){
      cacheFolder = value;
      if (!cacheFolder.IsNull() && !cacheFolder.EndsWith("/"))
        cacheFolder += "/";
    }
    else if (key.Contains("folder",TString::kIgnoreCase)){
      dbFolder = value;
    }
    else if (key.Contains("operateDisc",TString::kIgnoreCase)){
      if(value == "kTRUE") {
        operateDisconnected = kTRUE;
      } else if (value == "kFALSE") {
        operateDisconnected = kFALSE;
      } else if (value == "0" || value == "1") {
        operateDisconnected = (Bool_t) value.Atoi();
      } else {
        AliError(Form("Invalid entry! %s",entry.Data()));
        return NULL;
      }
    }
    else if (key.Contains("cacheS",TString::kIgnoreCase)){
      if(value.IsDigit()) {
        cacheSize = value.Atoi();
      } else {
        AliError(Form("Invalid entry! %s",entry.Data()));
        return NULL;
      }
    }
    else if (key.Contains("cleanupInt",TString::kIgnoreCase)){
      if(value.IsDigit()) {
        cleanupInterval = value.Atoi();
      } else {
        AliError(Form("Invalid entry! %s",entry.Data()));
        return NULL;
      }
    }
    else{
      AliError(Form("Invalid entry! %s",entry.Data()));
      return NULL;
    }
  }
  delete arr; arr=0;

  AliDebug(2, Form("gridUrl:	%s", gridUrl.Data()));
  AliDebug(2, Form("user:	%s", user.Data()));
  AliDebug(2, Form("dbFolder:	%s", dbFolder.Data()));
  AliDebug(2, Form("s.e.:	%s", se.Data()));
  AliDebug(2, Form("local cache folder: %s", cacheFolder.Data()));
  AliDebug(2, Form("local cache operate disconnected: %d", operateDisconnected));
  AliDebug(2, Form("local cache size: %lld", cacheSize));
  AliDebug(2, Form("local cache cleanup interval: %ld", cleanupInterval));

  if(dbFolder == ""){
    AliError("Base folder must be specified!");
    return NULL;
  }

  return new AliCDBGridParam(gridUrl.Data(), user.Data(),
      dbFolder.Data(), se.Data(), cacheFolder.Data(),
      operateDisconnected, cacheSize, cleanupInterval);
}

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

  AliCDBGrid *grid = 0;
  if (AliCDBGridParam::Class() == param->IsA()) {

    const AliCDBGridParam* gridParam = (const AliCDBGridParam*) param;
    grid = new AliCDBGrid(gridParam->GridUrl().Data(),
        gridParam->GetUser().Data(),
        gridParam->GetDBFolder().Data(),
        gridParam->GetSE().Data(),
        gridParam->GetCacheFolder().Data(),
        gridParam->GetOperateDisconnected(),
        gridParam->GetCacheSize(),
        gridParam->GetCleanupInterval());

  }

  if(!gGrid && grid) {
    delete grid; grid=0;
  }

  return grid;
}

/////////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                             //
// AliCDBGrid Parameter class  			                                               //                                         //
//                                                                                             //
/////////////////////////////////////////////////////////////////////////////////////////////////

ClassImp(AliCDBGridParam)

  //_____________________________________________________________________________
  AliCDBGridParam::AliCDBGridParam():
    AliCDBParam(),
    fGridUrl(),
    fUser(),
    fDBFolder(),
    fSE(),
    fCacheFolder(),
    fOperateDisconnected(),
    fCacheSize(),
    fCleanupInterval()

{
  // default constructor

}

//_____________________________________________________________________________
AliCDBGridParam::AliCDBGridParam(const char* gridUrl, const char* user, const char* dbFolder,
    const char* se, const char* cacheFolder, Bool_t operateDisconnected,
    Long64_t cacheSize, Long_t cleanupInterval):
  AliCDBParam(),
  fGridUrl(gridUrl),
  fUser(user),
  fDBFolder(dbFolder),
  fSE(se),
  fCacheFolder(cacheFolder),
  fOperateDisconnected(operateDisconnected),
  fCacheSize(cacheSize),
  fCleanupInterval(cleanupInterval)
{
  // constructor

  SetType("alien");

  TString uri = Form("%s?User=%s?DBFolder=%s?SE=%s?CacheFolder=%s"
      "?OperateDisconnected=%d?CacheSize=%lld?CleanupInterval=%ld",
      fGridUrl.Data(), fUser.Data(),
      fDBFolder.Data(), fSE.Data(), fCacheFolder.Data(),
      fOperateDisconnected, fCacheSize, fCleanupInterval);

  SetURI(uri.Data());
}

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

}

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

  return new AliCDBGridParam(fGridUrl.Data(), fUser.Data(),
      fDBFolder.Data(), fSE.Data(), fCacheFolder.Data(),
      fOperateDisconnected, fCacheSize, fCleanupInterval);
}

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

  return fGridUrl.Hash()+fUser.Hash()+fDBFolder.Hash()+fSE.Hash()+fCacheFolder.Hash();
}

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

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

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

  AliCDBGridParam* other = (AliCDBGridParam*) obj;

  if(fGridUrl != other->fGridUrl) return kFALSE;
  if(fUser != other->fUser) return kFALSE;
  if(fDBFolder != other->fDBFolder) return kFALSE;
  if(fSE != other->fSE) return kFALSE;
  if(fCacheFolder != other->fCacheFolder) return kFALSE;
  if(fOperateDisconnected != other->fOperateDisconnected) return kFALSE;
  if(fCacheSize != other->fCacheSize) return kFALSE;
  if(fCleanupInterval != other->fCleanupInterval) return kFALSE;
  return kTRUE;
}

 AliCDBGrid.cxx:1
 AliCDBGrid.cxx:2
 AliCDBGrid.cxx:3
 AliCDBGrid.cxx:4
 AliCDBGrid.cxx:5
 AliCDBGrid.cxx:6
 AliCDBGrid.cxx:7
 AliCDBGrid.cxx:8
 AliCDBGrid.cxx:9
 AliCDBGrid.cxx:10
 AliCDBGrid.cxx:11
 AliCDBGrid.cxx:12
 AliCDBGrid.cxx:13
 AliCDBGrid.cxx:14
 AliCDBGrid.cxx:15
 AliCDBGrid.cxx:16
 AliCDBGrid.cxx:17
 AliCDBGrid.cxx:18
 AliCDBGrid.cxx:19
 AliCDBGrid.cxx:20
 AliCDBGrid.cxx:21
 AliCDBGrid.cxx:22
 AliCDBGrid.cxx:23
 AliCDBGrid.cxx:24
 AliCDBGrid.cxx:25
 AliCDBGrid.cxx:26
 AliCDBGrid.cxx:27
 AliCDBGrid.cxx:28
 AliCDBGrid.cxx:29
 AliCDBGrid.cxx:30
 AliCDBGrid.cxx:31
 AliCDBGrid.cxx:32
 AliCDBGrid.cxx:33
 AliCDBGrid.cxx:34
 AliCDBGrid.cxx:35
 AliCDBGrid.cxx:36
 AliCDBGrid.cxx:37
 AliCDBGrid.cxx:38
 AliCDBGrid.cxx:39
 AliCDBGrid.cxx:40
 AliCDBGrid.cxx:41
 AliCDBGrid.cxx:42
 AliCDBGrid.cxx:43
 AliCDBGrid.cxx:44
 AliCDBGrid.cxx:45
 AliCDBGrid.cxx:46
 AliCDBGrid.cxx:47
 AliCDBGrid.cxx:48
 AliCDBGrid.cxx:49
 AliCDBGrid.cxx:50
 AliCDBGrid.cxx:51
 AliCDBGrid.cxx:52
 AliCDBGrid.cxx:53
 AliCDBGrid.cxx:54
 AliCDBGrid.cxx:55
 AliCDBGrid.cxx:56
 AliCDBGrid.cxx:57
 AliCDBGrid.cxx:58
 AliCDBGrid.cxx:59
 AliCDBGrid.cxx:60
 AliCDBGrid.cxx:61
 AliCDBGrid.cxx:62
 AliCDBGrid.cxx:63
 AliCDBGrid.cxx:64
 AliCDBGrid.cxx:65
 AliCDBGrid.cxx:66
 AliCDBGrid.cxx:67
 AliCDBGrid.cxx:68
 AliCDBGrid.cxx:69
 AliCDBGrid.cxx:70
 AliCDBGrid.cxx:71
 AliCDBGrid.cxx:72
 AliCDBGrid.cxx:73
 AliCDBGrid.cxx:74
 AliCDBGrid.cxx:75
 AliCDBGrid.cxx:76
 AliCDBGrid.cxx:77
 AliCDBGrid.cxx:78
 AliCDBGrid.cxx:79
 AliCDBGrid.cxx:80
 AliCDBGrid.cxx:81
 AliCDBGrid.cxx:82
 AliCDBGrid.cxx:83
 AliCDBGrid.cxx:84
 AliCDBGrid.cxx:85
 AliCDBGrid.cxx:86
 AliCDBGrid.cxx:87
 AliCDBGrid.cxx:88
 AliCDBGrid.cxx:89
 AliCDBGrid.cxx:90
 AliCDBGrid.cxx:91
 AliCDBGrid.cxx:92
 AliCDBGrid.cxx:93
 AliCDBGrid.cxx:94
 AliCDBGrid.cxx:95
 AliCDBGrid.cxx:96
 AliCDBGrid.cxx:97
 AliCDBGrid.cxx:98
 AliCDBGrid.cxx:99
 AliCDBGrid.cxx:100
 AliCDBGrid.cxx:101
 AliCDBGrid.cxx:102
 AliCDBGrid.cxx:103
 AliCDBGrid.cxx:104
 AliCDBGrid.cxx:105
 AliCDBGrid.cxx:106
 AliCDBGrid.cxx:107
 AliCDBGrid.cxx:108
 AliCDBGrid.cxx:109
 AliCDBGrid.cxx:110
 AliCDBGrid.cxx:111
 AliCDBGrid.cxx:112
 AliCDBGrid.cxx:113
 AliCDBGrid.cxx:114
 AliCDBGrid.cxx:115
 AliCDBGrid.cxx:116
 AliCDBGrid.cxx:117
 AliCDBGrid.cxx:118
 AliCDBGrid.cxx:119
 AliCDBGrid.cxx:120
 AliCDBGrid.cxx:121
 AliCDBGrid.cxx:122
 AliCDBGrid.cxx:123
 AliCDBGrid.cxx:124
 AliCDBGrid.cxx:125
 AliCDBGrid.cxx:126
 AliCDBGrid.cxx:127
 AliCDBGrid.cxx:128
 AliCDBGrid.cxx:129
 AliCDBGrid.cxx:130
 AliCDBGrid.cxx:131
 AliCDBGrid.cxx:132
 AliCDBGrid.cxx:133
 AliCDBGrid.cxx:134
 AliCDBGrid.cxx:135
 AliCDBGrid.cxx:136
 AliCDBGrid.cxx:137
 AliCDBGrid.cxx:138
 AliCDBGrid.cxx:139
 AliCDBGrid.cxx:140
 AliCDBGrid.cxx:141
 AliCDBGrid.cxx:142
 AliCDBGrid.cxx:143
 AliCDBGrid.cxx:144
 AliCDBGrid.cxx:145
 AliCDBGrid.cxx:146
 AliCDBGrid.cxx:147
 AliCDBGrid.cxx:148
 AliCDBGrid.cxx:149
 AliCDBGrid.cxx:150
 AliCDBGrid.cxx:151
 AliCDBGrid.cxx:152
 AliCDBGrid.cxx:153
 AliCDBGrid.cxx:154
 AliCDBGrid.cxx:155
 AliCDBGrid.cxx:156
 AliCDBGrid.cxx:157
 AliCDBGrid.cxx:158
 AliCDBGrid.cxx:159
 AliCDBGrid.cxx:160
 AliCDBGrid.cxx:161
 AliCDBGrid.cxx:162
 AliCDBGrid.cxx:163
 AliCDBGrid.cxx:164
 AliCDBGrid.cxx:165
 AliCDBGrid.cxx:166
 AliCDBGrid.cxx:167
 AliCDBGrid.cxx:168
 AliCDBGrid.cxx:169
 AliCDBGrid.cxx:170
 AliCDBGrid.cxx:171
 AliCDBGrid.cxx:172
 AliCDBGrid.cxx:173
 AliCDBGrid.cxx:174
 AliCDBGrid.cxx:175
 AliCDBGrid.cxx:176
 AliCDBGrid.cxx:177
 AliCDBGrid.cxx:178
 AliCDBGrid.cxx:179
 AliCDBGrid.cxx:180
 AliCDBGrid.cxx:181
 AliCDBGrid.cxx:182
 AliCDBGrid.cxx:183
 AliCDBGrid.cxx:184
 AliCDBGrid.cxx:185
 AliCDBGrid.cxx:186
 AliCDBGrid.cxx:187
 AliCDBGrid.cxx:188
 AliCDBGrid.cxx:189
 AliCDBGrid.cxx:190
 AliCDBGrid.cxx:191
 AliCDBGrid.cxx:192
 AliCDBGrid.cxx:193
 AliCDBGrid.cxx:194
 AliCDBGrid.cxx:195
 AliCDBGrid.cxx:196
 AliCDBGrid.cxx:197
 AliCDBGrid.cxx:198
 AliCDBGrid.cxx:199
 AliCDBGrid.cxx:200
 AliCDBGrid.cxx:201
 AliCDBGrid.cxx:202
 AliCDBGrid.cxx:203
 AliCDBGrid.cxx:204
 AliCDBGrid.cxx:205
 AliCDBGrid.cxx:206
 AliCDBGrid.cxx:207
 AliCDBGrid.cxx:208
 AliCDBGrid.cxx:209
 AliCDBGrid.cxx:210
 AliCDBGrid.cxx:211
 AliCDBGrid.cxx:212
 AliCDBGrid.cxx:213
 AliCDBGrid.cxx:214
 AliCDBGrid.cxx:215
 AliCDBGrid.cxx:216
 AliCDBGrid.cxx:217
 AliCDBGrid.cxx:218
 AliCDBGrid.cxx:219
 AliCDBGrid.cxx:220
 AliCDBGrid.cxx:221
 AliCDBGrid.cxx:222
 AliCDBGrid.cxx:223
 AliCDBGrid.cxx:224
 AliCDBGrid.cxx:225
 AliCDBGrid.cxx:226
 AliCDBGrid.cxx:227
 AliCDBGrid.cxx:228
 AliCDBGrid.cxx:229
 AliCDBGrid.cxx:230
 AliCDBGrid.cxx:231
 AliCDBGrid.cxx:232
 AliCDBGrid.cxx:233
 AliCDBGrid.cxx:234
 AliCDBGrid.cxx:235
 AliCDBGrid.cxx:236
 AliCDBGrid.cxx:237
 AliCDBGrid.cxx:238
 AliCDBGrid.cxx:239
 AliCDBGrid.cxx:240
 AliCDBGrid.cxx:241
 AliCDBGrid.cxx:242
 AliCDBGrid.cxx:243
 AliCDBGrid.cxx:244
 AliCDBGrid.cxx:245
 AliCDBGrid.cxx:246
 AliCDBGrid.cxx:247
 AliCDBGrid.cxx:248
 AliCDBGrid.cxx:249
 AliCDBGrid.cxx:250
 AliCDBGrid.cxx:251
 AliCDBGrid.cxx:252
 AliCDBGrid.cxx:253
 AliCDBGrid.cxx:254
 AliCDBGrid.cxx:255
 AliCDBGrid.cxx:256
 AliCDBGrid.cxx:257
 AliCDBGrid.cxx:258
 AliCDBGrid.cxx:259
 AliCDBGrid.cxx:260
 AliCDBGrid.cxx:261
 AliCDBGrid.cxx:262
 AliCDBGrid.cxx:263
 AliCDBGrid.cxx:264
 AliCDBGrid.cxx:265
 AliCDBGrid.cxx:266
 AliCDBGrid.cxx:267
 AliCDBGrid.cxx:268
 AliCDBGrid.cxx:269
 AliCDBGrid.cxx:270
 AliCDBGrid.cxx:271
 AliCDBGrid.cxx:272
 AliCDBGrid.cxx:273
 AliCDBGrid.cxx:274
 AliCDBGrid.cxx:275
 AliCDBGrid.cxx:276
 AliCDBGrid.cxx:277
 AliCDBGrid.cxx:278
 AliCDBGrid.cxx:279
 AliCDBGrid.cxx:280
 AliCDBGrid.cxx:281
 AliCDBGrid.cxx:282
 AliCDBGrid.cxx:283
 AliCDBGrid.cxx:284
 AliCDBGrid.cxx:285
 AliCDBGrid.cxx:286
 AliCDBGrid.cxx:287
 AliCDBGrid.cxx:288
 AliCDBGrid.cxx:289
 AliCDBGrid.cxx:290
 AliCDBGrid.cxx:291
 AliCDBGrid.cxx:292
 AliCDBGrid.cxx:293
 AliCDBGrid.cxx:294
 AliCDBGrid.cxx:295
 AliCDBGrid.cxx:296
 AliCDBGrid.cxx:297
 AliCDBGrid.cxx:298
 AliCDBGrid.cxx:299
 AliCDBGrid.cxx:300
 AliCDBGrid.cxx:301
 AliCDBGrid.cxx:302
 AliCDBGrid.cxx:303
 AliCDBGrid.cxx:304
 AliCDBGrid.cxx:305
 AliCDBGrid.cxx:306
 AliCDBGrid.cxx:307
 AliCDBGrid.cxx:308
 AliCDBGrid.cxx:309
 AliCDBGrid.cxx:310
 AliCDBGrid.cxx:311
 AliCDBGrid.cxx:312
 AliCDBGrid.cxx:313
 AliCDBGrid.cxx:314
 AliCDBGrid.cxx:315
 AliCDBGrid.cxx:316
 AliCDBGrid.cxx:317
 AliCDBGrid.cxx:318
 AliCDBGrid.cxx:319
 AliCDBGrid.cxx:320
 AliCDBGrid.cxx:321
 AliCDBGrid.cxx:322
 AliCDBGrid.cxx:323
 AliCDBGrid.cxx:324
 AliCDBGrid.cxx:325
 AliCDBGrid.cxx:326
 AliCDBGrid.cxx:327
 AliCDBGrid.cxx:328
 AliCDBGrid.cxx:329
 AliCDBGrid.cxx:330
 AliCDBGrid.cxx:331
 AliCDBGrid.cxx:332
 AliCDBGrid.cxx:333
 AliCDBGrid.cxx:334
 AliCDBGrid.cxx:335
 AliCDBGrid.cxx:336
 AliCDBGrid.cxx:337
 AliCDBGrid.cxx:338
 AliCDBGrid.cxx:339
 AliCDBGrid.cxx:340
 AliCDBGrid.cxx:341
 AliCDBGrid.cxx:342
 AliCDBGrid.cxx:343
 AliCDBGrid.cxx:344
 AliCDBGrid.cxx:345
 AliCDBGrid.cxx:346
 AliCDBGrid.cxx:347
 AliCDBGrid.cxx:348
 AliCDBGrid.cxx:349
 AliCDBGrid.cxx:350
 AliCDBGrid.cxx:351
 AliCDBGrid.cxx:352
 AliCDBGrid.cxx:353
 AliCDBGrid.cxx:354
 AliCDBGrid.cxx:355
 AliCDBGrid.cxx:356
 AliCDBGrid.cxx:357
 AliCDBGrid.cxx:358
 AliCDBGrid.cxx:359
 AliCDBGrid.cxx:360
 AliCDBGrid.cxx:361
 AliCDBGrid.cxx:362
 AliCDBGrid.cxx:363
 AliCDBGrid.cxx:364
 AliCDBGrid.cxx:365
 AliCDBGrid.cxx:366
 AliCDBGrid.cxx:367
 AliCDBGrid.cxx:368
 AliCDBGrid.cxx:369
 AliCDBGrid.cxx:370
 AliCDBGrid.cxx:371
 AliCDBGrid.cxx:372
 AliCDBGrid.cxx:373
 AliCDBGrid.cxx:374
 AliCDBGrid.cxx:375
 AliCDBGrid.cxx:376
 AliCDBGrid.cxx:377
 AliCDBGrid.cxx:378
 AliCDBGrid.cxx:379
 AliCDBGrid.cxx:380
 AliCDBGrid.cxx:381
 AliCDBGrid.cxx:382
 AliCDBGrid.cxx:383
 AliCDBGrid.cxx:384
 AliCDBGrid.cxx:385
 AliCDBGrid.cxx:386
 AliCDBGrid.cxx:387
 AliCDBGrid.cxx:388
 AliCDBGrid.cxx:389
 AliCDBGrid.cxx:390
 AliCDBGrid.cxx:391
 AliCDBGrid.cxx:392
 AliCDBGrid.cxx:393
 AliCDBGrid.cxx:394
 AliCDBGrid.cxx:395
 AliCDBGrid.cxx:396
 AliCDBGrid.cxx:397
 AliCDBGrid.cxx:398
 AliCDBGrid.cxx:399
 AliCDBGrid.cxx:400
 AliCDBGrid.cxx:401
 AliCDBGrid.cxx:402
 AliCDBGrid.cxx:403
 AliCDBGrid.cxx:404
 AliCDBGrid.cxx:405
 AliCDBGrid.cxx:406
 AliCDBGrid.cxx:407
 AliCDBGrid.cxx:408
 AliCDBGrid.cxx:409
 AliCDBGrid.cxx:410
 AliCDBGrid.cxx:411
 AliCDBGrid.cxx:412
 AliCDBGrid.cxx:413
 AliCDBGrid.cxx:414
 AliCDBGrid.cxx:415
 AliCDBGrid.cxx:416
 AliCDBGrid.cxx:417
 AliCDBGrid.cxx:418
 AliCDBGrid.cxx:419
 AliCDBGrid.cxx:420
 AliCDBGrid.cxx:421
 AliCDBGrid.cxx:422
 AliCDBGrid.cxx:423
 AliCDBGrid.cxx:424
 AliCDBGrid.cxx:425
 AliCDBGrid.cxx:426
 AliCDBGrid.cxx:427
 AliCDBGrid.cxx:428
 AliCDBGrid.cxx:429
 AliCDBGrid.cxx:430
 AliCDBGrid.cxx:431
 AliCDBGrid.cxx:432
 AliCDBGrid.cxx:433
 AliCDBGrid.cxx:434
 AliCDBGrid.cxx:435
 AliCDBGrid.cxx:436
 AliCDBGrid.cxx:437
 AliCDBGrid.cxx:438
 AliCDBGrid.cxx:439
 AliCDBGrid.cxx:440
 AliCDBGrid.cxx:441
 AliCDBGrid.cxx:442
 AliCDBGrid.cxx:443
 AliCDBGrid.cxx:444
 AliCDBGrid.cxx:445
 AliCDBGrid.cxx:446
 AliCDBGrid.cxx:447
 AliCDBGrid.cxx:448
 AliCDBGrid.cxx:449
 AliCDBGrid.cxx:450
 AliCDBGrid.cxx:451
 AliCDBGrid.cxx:452
 AliCDBGrid.cxx:453
 AliCDBGrid.cxx:454
 AliCDBGrid.cxx:455
 AliCDBGrid.cxx:456
 AliCDBGrid.cxx:457
 AliCDBGrid.cxx:458
 AliCDBGrid.cxx:459
 AliCDBGrid.cxx:460
 AliCDBGrid.cxx:461
 AliCDBGrid.cxx:462
 AliCDBGrid.cxx:463
 AliCDBGrid.cxx:464
 AliCDBGrid.cxx:465
 AliCDBGrid.cxx:466
 AliCDBGrid.cxx:467
 AliCDBGrid.cxx:468
 AliCDBGrid.cxx:469
 AliCDBGrid.cxx:470
 AliCDBGrid.cxx:471
 AliCDBGrid.cxx:472
 AliCDBGrid.cxx:473
 AliCDBGrid.cxx:474
 AliCDBGrid.cxx:475
 AliCDBGrid.cxx:476
 AliCDBGrid.cxx:477
 AliCDBGrid.cxx:478
 AliCDBGrid.cxx:479
 AliCDBGrid.cxx:480
 AliCDBGrid.cxx:481
 AliCDBGrid.cxx:482
 AliCDBGrid.cxx:483
 AliCDBGrid.cxx:484
 AliCDBGrid.cxx:485
 AliCDBGrid.cxx:486
 AliCDBGrid.cxx:487
 AliCDBGrid.cxx:488
 AliCDBGrid.cxx:489
 AliCDBGrid.cxx:490
 AliCDBGrid.cxx:491
 AliCDBGrid.cxx:492
 AliCDBGrid.cxx:493
 AliCDBGrid.cxx:494
 AliCDBGrid.cxx:495
 AliCDBGrid.cxx:496
 AliCDBGrid.cxx:497
 AliCDBGrid.cxx:498
 AliCDBGrid.cxx:499
 AliCDBGrid.cxx:500
 AliCDBGrid.cxx:501
 AliCDBGrid.cxx:502
 AliCDBGrid.cxx:503
 AliCDBGrid.cxx:504
 AliCDBGrid.cxx:505
 AliCDBGrid.cxx:506
 AliCDBGrid.cxx:507
 AliCDBGrid.cxx:508
 AliCDBGrid.cxx:509
 AliCDBGrid.cxx:510
 AliCDBGrid.cxx:511
 AliCDBGrid.cxx:512
 AliCDBGrid.cxx:513
 AliCDBGrid.cxx:514
 AliCDBGrid.cxx:515
 AliCDBGrid.cxx:516
 AliCDBGrid.cxx:517
 AliCDBGrid.cxx:518
 AliCDBGrid.cxx:519
 AliCDBGrid.cxx:520
 AliCDBGrid.cxx:521
 AliCDBGrid.cxx:522
 AliCDBGrid.cxx:523
 AliCDBGrid.cxx:524
 AliCDBGrid.cxx:525
 AliCDBGrid.cxx:526
 AliCDBGrid.cxx:527
 AliCDBGrid.cxx:528
 AliCDBGrid.cxx:529
 AliCDBGrid.cxx:530
 AliCDBGrid.cxx:531
 AliCDBGrid.cxx:532
 AliCDBGrid.cxx:533
 AliCDBGrid.cxx:534
 AliCDBGrid.cxx:535
 AliCDBGrid.cxx:536
 AliCDBGrid.cxx:537
 AliCDBGrid.cxx:538
 AliCDBGrid.cxx:539
 AliCDBGrid.cxx:540
 AliCDBGrid.cxx:541
 AliCDBGrid.cxx:542
 AliCDBGrid.cxx:543
 AliCDBGrid.cxx:544
 AliCDBGrid.cxx:545
 AliCDBGrid.cxx:546
 AliCDBGrid.cxx:547
 AliCDBGrid.cxx:548
 AliCDBGrid.cxx:549
 AliCDBGrid.cxx:550
 AliCDBGrid.cxx:551
 AliCDBGrid.cxx:552
 AliCDBGrid.cxx:553
 AliCDBGrid.cxx:554
 AliCDBGrid.cxx:555
 AliCDBGrid.cxx:556
 AliCDBGrid.cxx:557
 AliCDBGrid.cxx:558
 AliCDBGrid.cxx:559
 AliCDBGrid.cxx:560
 AliCDBGrid.cxx:561
 AliCDBGrid.cxx:562
 AliCDBGrid.cxx:563
 AliCDBGrid.cxx:564
 AliCDBGrid.cxx:565
 AliCDBGrid.cxx:566
 AliCDBGrid.cxx:567
 AliCDBGrid.cxx:568
 AliCDBGrid.cxx:569
 AliCDBGrid.cxx:570
 AliCDBGrid.cxx:571
 AliCDBGrid.cxx:572
 AliCDBGrid.cxx:573
 AliCDBGrid.cxx:574
 AliCDBGrid.cxx:575
 AliCDBGrid.cxx:576
 AliCDBGrid.cxx:577
 AliCDBGrid.cxx:578
 AliCDBGrid.cxx:579
 AliCDBGrid.cxx:580
 AliCDBGrid.cxx:581
 AliCDBGrid.cxx:582
 AliCDBGrid.cxx:583
 AliCDBGrid.cxx:584
 AliCDBGrid.cxx:585
 AliCDBGrid.cxx:586
 AliCDBGrid.cxx:587
 AliCDBGrid.cxx:588
 AliCDBGrid.cxx:589
 AliCDBGrid.cxx:590
 AliCDBGrid.cxx:591
 AliCDBGrid.cxx:592
 AliCDBGrid.cxx:593
 AliCDBGrid.cxx:594
 AliCDBGrid.cxx:595
 AliCDBGrid.cxx:596
 AliCDBGrid.cxx:597
 AliCDBGrid.cxx:598
 AliCDBGrid.cxx:599
 AliCDBGrid.cxx:600
 AliCDBGrid.cxx:601
 AliCDBGrid.cxx:602
 AliCDBGrid.cxx:603
 AliCDBGrid.cxx:604
 AliCDBGrid.cxx:605
 AliCDBGrid.cxx:606
 AliCDBGrid.cxx:607
 AliCDBGrid.cxx:608
 AliCDBGrid.cxx:609
 AliCDBGrid.cxx:610
 AliCDBGrid.cxx:611
 AliCDBGrid.cxx:612
 AliCDBGrid.cxx:613
 AliCDBGrid.cxx:614
 AliCDBGrid.cxx:615
 AliCDBGrid.cxx:616
 AliCDBGrid.cxx:617
 AliCDBGrid.cxx:618
 AliCDBGrid.cxx:619
 AliCDBGrid.cxx:620
 AliCDBGrid.cxx:621
 AliCDBGrid.cxx:622
 AliCDBGrid.cxx:623
 AliCDBGrid.cxx:624
 AliCDBGrid.cxx:625
 AliCDBGrid.cxx:626
 AliCDBGrid.cxx:627
 AliCDBGrid.cxx:628
 AliCDBGrid.cxx:629
 AliCDBGrid.cxx:630
 AliCDBGrid.cxx:631
 AliCDBGrid.cxx:632
 AliCDBGrid.cxx:633
 AliCDBGrid.cxx:634
 AliCDBGrid.cxx:635
 AliCDBGrid.cxx:636
 AliCDBGrid.cxx:637
 AliCDBGrid.cxx:638
 AliCDBGrid.cxx:639
 AliCDBGrid.cxx:640
 AliCDBGrid.cxx:641
 AliCDBGrid.cxx:642
 AliCDBGrid.cxx:643
 AliCDBGrid.cxx:644
 AliCDBGrid.cxx:645
 AliCDBGrid.cxx:646
 AliCDBGrid.cxx:647
 AliCDBGrid.cxx:648
 AliCDBGrid.cxx:649
 AliCDBGrid.cxx:650
 AliCDBGrid.cxx:651
 AliCDBGrid.cxx:652
 AliCDBGrid.cxx:653
 AliCDBGrid.cxx:654
 AliCDBGrid.cxx:655
 AliCDBGrid.cxx:656
 AliCDBGrid.cxx:657
 AliCDBGrid.cxx:658
 AliCDBGrid.cxx:659
 AliCDBGrid.cxx:660
 AliCDBGrid.cxx:661
 AliCDBGrid.cxx:662
 AliCDBGrid.cxx:663
 AliCDBGrid.cxx:664
 AliCDBGrid.cxx:665
 AliCDBGrid.cxx:666
 AliCDBGrid.cxx:667
 AliCDBGrid.cxx:668
 AliCDBGrid.cxx:669
 AliCDBGrid.cxx:670
 AliCDBGrid.cxx:671
 AliCDBGrid.cxx:672
 AliCDBGrid.cxx:673
 AliCDBGrid.cxx:674
 AliCDBGrid.cxx:675
 AliCDBGrid.cxx:676
 AliCDBGrid.cxx:677
 AliCDBGrid.cxx:678
 AliCDBGrid.cxx:679
 AliCDBGrid.cxx:680
 AliCDBGrid.cxx:681
 AliCDBGrid.cxx:682
 AliCDBGrid.cxx:683
 AliCDBGrid.cxx:684
 AliCDBGrid.cxx:685
 AliCDBGrid.cxx:686
 AliCDBGrid.cxx:687
 AliCDBGrid.cxx:688
 AliCDBGrid.cxx:689
 AliCDBGrid.cxx:690
 AliCDBGrid.cxx:691
 AliCDBGrid.cxx:692
 AliCDBGrid.cxx:693
 AliCDBGrid.cxx:694
 AliCDBGrid.cxx:695
 AliCDBGrid.cxx:696
 AliCDBGrid.cxx:697
 AliCDBGrid.cxx:698
 AliCDBGrid.cxx:699
 AliCDBGrid.cxx:700
 AliCDBGrid.cxx:701
 AliCDBGrid.cxx:702
 AliCDBGrid.cxx:703
 AliCDBGrid.cxx:704
 AliCDBGrid.cxx:705
 AliCDBGrid.cxx:706
 AliCDBGrid.cxx:707
 AliCDBGrid.cxx:708
 AliCDBGrid.cxx:709
 AliCDBGrid.cxx:710
 AliCDBGrid.cxx:711
 AliCDBGrid.cxx:712
 AliCDBGrid.cxx:713
 AliCDBGrid.cxx:714
 AliCDBGrid.cxx:715
 AliCDBGrid.cxx:716
 AliCDBGrid.cxx:717
 AliCDBGrid.cxx:718
 AliCDBGrid.cxx:719
 AliCDBGrid.cxx:720
 AliCDBGrid.cxx:721
 AliCDBGrid.cxx:722
 AliCDBGrid.cxx:723
 AliCDBGrid.cxx:724
 AliCDBGrid.cxx:725
 AliCDBGrid.cxx:726
 AliCDBGrid.cxx:727
 AliCDBGrid.cxx:728
 AliCDBGrid.cxx:729
 AliCDBGrid.cxx:730
 AliCDBGrid.cxx:731
 AliCDBGrid.cxx:732
 AliCDBGrid.cxx:733
 AliCDBGrid.cxx:734
 AliCDBGrid.cxx:735
 AliCDBGrid.cxx:736
 AliCDBGrid.cxx:737
 AliCDBGrid.cxx:738
 AliCDBGrid.cxx:739
 AliCDBGrid.cxx:740
 AliCDBGrid.cxx:741
 AliCDBGrid.cxx:742
 AliCDBGrid.cxx:743
 AliCDBGrid.cxx:744
 AliCDBGrid.cxx:745
 AliCDBGrid.cxx:746
 AliCDBGrid.cxx:747
 AliCDBGrid.cxx:748
 AliCDBGrid.cxx:749
 AliCDBGrid.cxx:750
 AliCDBGrid.cxx:751
 AliCDBGrid.cxx:752
 AliCDBGrid.cxx:753
 AliCDBGrid.cxx:754
 AliCDBGrid.cxx:755
 AliCDBGrid.cxx:756
 AliCDBGrid.cxx:757
 AliCDBGrid.cxx:758
 AliCDBGrid.cxx:759
 AliCDBGrid.cxx:760
 AliCDBGrid.cxx:761
 AliCDBGrid.cxx:762
 AliCDBGrid.cxx:763
 AliCDBGrid.cxx:764
 AliCDBGrid.cxx:765
 AliCDBGrid.cxx:766
 AliCDBGrid.cxx:767
 AliCDBGrid.cxx:768
 AliCDBGrid.cxx:769
 AliCDBGrid.cxx:770
 AliCDBGrid.cxx:771
 AliCDBGrid.cxx:772
 AliCDBGrid.cxx:773
 AliCDBGrid.cxx:774
 AliCDBGrid.cxx:775
 AliCDBGrid.cxx:776
 AliCDBGrid.cxx:777
 AliCDBGrid.cxx:778
 AliCDBGrid.cxx:779
 AliCDBGrid.cxx:780
 AliCDBGrid.cxx:781
 AliCDBGrid.cxx:782
 AliCDBGrid.cxx:783
 AliCDBGrid.cxx:784
 AliCDBGrid.cxx:785
 AliCDBGrid.cxx:786
 AliCDBGrid.cxx:787
 AliCDBGrid.cxx:788
 AliCDBGrid.cxx:789
 AliCDBGrid.cxx:790
 AliCDBGrid.cxx:791
 AliCDBGrid.cxx:792
 AliCDBGrid.cxx:793
 AliCDBGrid.cxx:794
 AliCDBGrid.cxx:795
 AliCDBGrid.cxx:796
 AliCDBGrid.cxx:797
 AliCDBGrid.cxx:798
 AliCDBGrid.cxx:799
 AliCDBGrid.cxx:800
 AliCDBGrid.cxx:801
 AliCDBGrid.cxx:802
 AliCDBGrid.cxx:803
 AliCDBGrid.cxx:804
 AliCDBGrid.cxx:805
 AliCDBGrid.cxx:806
 AliCDBGrid.cxx:807
 AliCDBGrid.cxx:808
 AliCDBGrid.cxx:809
 AliCDBGrid.cxx:810
 AliCDBGrid.cxx:811
 AliCDBGrid.cxx:812
 AliCDBGrid.cxx:813
 AliCDBGrid.cxx:814
 AliCDBGrid.cxx:815
 AliCDBGrid.cxx:816
 AliCDBGrid.cxx:817
 AliCDBGrid.cxx:818
 AliCDBGrid.cxx:819
 AliCDBGrid.cxx:820
 AliCDBGrid.cxx:821
 AliCDBGrid.cxx:822
 AliCDBGrid.cxx:823
 AliCDBGrid.cxx:824
 AliCDBGrid.cxx:825
 AliCDBGrid.cxx:826
 AliCDBGrid.cxx:827
 AliCDBGrid.cxx:828
 AliCDBGrid.cxx:829
 AliCDBGrid.cxx:830
 AliCDBGrid.cxx:831
 AliCDBGrid.cxx:832
 AliCDBGrid.cxx:833
 AliCDBGrid.cxx:834
 AliCDBGrid.cxx:835
 AliCDBGrid.cxx:836
 AliCDBGrid.cxx:837
 AliCDBGrid.cxx:838
 AliCDBGrid.cxx:839
 AliCDBGrid.cxx:840
 AliCDBGrid.cxx:841
 AliCDBGrid.cxx:842
 AliCDBGrid.cxx:843
 AliCDBGrid.cxx:844
 AliCDBGrid.cxx:845
 AliCDBGrid.cxx:846
 AliCDBGrid.cxx:847
 AliCDBGrid.cxx:848
 AliCDBGrid.cxx:849
 AliCDBGrid.cxx:850
 AliCDBGrid.cxx:851
 AliCDBGrid.cxx:852
 AliCDBGrid.cxx:853
 AliCDBGrid.cxx:854
 AliCDBGrid.cxx:855
 AliCDBGrid.cxx:856
 AliCDBGrid.cxx:857
 AliCDBGrid.cxx:858
 AliCDBGrid.cxx:859
 AliCDBGrid.cxx:860
 AliCDBGrid.cxx:861
 AliCDBGrid.cxx:862
 AliCDBGrid.cxx:863
 AliCDBGrid.cxx:864
 AliCDBGrid.cxx:865
 AliCDBGrid.cxx:866
 AliCDBGrid.cxx:867
 AliCDBGrid.cxx:868
 AliCDBGrid.cxx:869
 AliCDBGrid.cxx:870
 AliCDBGrid.cxx:871
 AliCDBGrid.cxx:872
 AliCDBGrid.cxx:873
 AliCDBGrid.cxx:874
 AliCDBGrid.cxx:875
 AliCDBGrid.cxx:876
 AliCDBGrid.cxx:877
 AliCDBGrid.cxx:878
 AliCDBGrid.cxx:879
 AliCDBGrid.cxx:880
 AliCDBGrid.cxx:881
 AliCDBGrid.cxx:882
 AliCDBGrid.cxx:883
 AliCDBGrid.cxx:884
 AliCDBGrid.cxx:885
 AliCDBGrid.cxx:886
 AliCDBGrid.cxx:887
 AliCDBGrid.cxx:888
 AliCDBGrid.cxx:889
 AliCDBGrid.cxx:890
 AliCDBGrid.cxx:891
 AliCDBGrid.cxx:892
 AliCDBGrid.cxx:893
 AliCDBGrid.cxx:894
 AliCDBGrid.cxx:895
 AliCDBGrid.cxx:896
 AliCDBGrid.cxx:897
 AliCDBGrid.cxx:898
 AliCDBGrid.cxx:899
 AliCDBGrid.cxx:900
 AliCDBGrid.cxx:901
 AliCDBGrid.cxx:902
 AliCDBGrid.cxx:903
 AliCDBGrid.cxx:904
 AliCDBGrid.cxx:905
 AliCDBGrid.cxx:906
 AliCDBGrid.cxx:907
 AliCDBGrid.cxx:908
 AliCDBGrid.cxx:909
 AliCDBGrid.cxx:910
 AliCDBGrid.cxx:911
 AliCDBGrid.cxx:912
 AliCDBGrid.cxx:913
 AliCDBGrid.cxx:914
 AliCDBGrid.cxx:915
 AliCDBGrid.cxx:916
 AliCDBGrid.cxx:917
 AliCDBGrid.cxx:918
 AliCDBGrid.cxx:919
 AliCDBGrid.cxx:920
 AliCDBGrid.cxx:921
 AliCDBGrid.cxx:922
 AliCDBGrid.cxx:923
 AliCDBGrid.cxx:924
 AliCDBGrid.cxx:925
 AliCDBGrid.cxx:926
 AliCDBGrid.cxx:927
 AliCDBGrid.cxx:928
 AliCDBGrid.cxx:929
 AliCDBGrid.cxx:930
 AliCDBGrid.cxx:931
 AliCDBGrid.cxx:932
 AliCDBGrid.cxx:933
 AliCDBGrid.cxx:934
 AliCDBGrid.cxx:935
 AliCDBGrid.cxx:936
 AliCDBGrid.cxx:937
 AliCDBGrid.cxx:938
 AliCDBGrid.cxx:939
 AliCDBGrid.cxx:940
 AliCDBGrid.cxx:941
 AliCDBGrid.cxx:942
 AliCDBGrid.cxx:943
 AliCDBGrid.cxx:944
 AliCDBGrid.cxx:945
 AliCDBGrid.cxx:946
 AliCDBGrid.cxx:947
 AliCDBGrid.cxx:948
 AliCDBGrid.cxx:949
 AliCDBGrid.cxx:950
 AliCDBGrid.cxx:951
 AliCDBGrid.cxx:952
 AliCDBGrid.cxx:953
 AliCDBGrid.cxx:954
 AliCDBGrid.cxx:955
 AliCDBGrid.cxx:956
 AliCDBGrid.cxx:957
 AliCDBGrid.cxx:958
 AliCDBGrid.cxx:959
 AliCDBGrid.cxx:960
 AliCDBGrid.cxx:961
 AliCDBGrid.cxx:962
 AliCDBGrid.cxx:963
 AliCDBGrid.cxx:964
 AliCDBGrid.cxx:965
 AliCDBGrid.cxx:966
 AliCDBGrid.cxx:967
 AliCDBGrid.cxx:968
 AliCDBGrid.cxx:969
 AliCDBGrid.cxx:970
 AliCDBGrid.cxx:971
 AliCDBGrid.cxx:972
 AliCDBGrid.cxx:973
 AliCDBGrid.cxx:974
 AliCDBGrid.cxx:975
 AliCDBGrid.cxx:976
 AliCDBGrid.cxx:977
 AliCDBGrid.cxx:978
 AliCDBGrid.cxx:979
 AliCDBGrid.cxx:980
 AliCDBGrid.cxx:981
 AliCDBGrid.cxx:982
 AliCDBGrid.cxx:983
 AliCDBGrid.cxx:984
 AliCDBGrid.cxx:985
 AliCDBGrid.cxx:986
 AliCDBGrid.cxx:987
 AliCDBGrid.cxx:988
 AliCDBGrid.cxx:989
 AliCDBGrid.cxx:990
 AliCDBGrid.cxx:991
 AliCDBGrid.cxx:992
 AliCDBGrid.cxx:993
 AliCDBGrid.cxx:994
 AliCDBGrid.cxx:995
 AliCDBGrid.cxx:996
 AliCDBGrid.cxx:997
 AliCDBGrid.cxx:998
 AliCDBGrid.cxx:999
 AliCDBGrid.cxx:1000
 AliCDBGrid.cxx:1001
 AliCDBGrid.cxx:1002
 AliCDBGrid.cxx:1003
 AliCDBGrid.cxx:1004
 AliCDBGrid.cxx:1005
 AliCDBGrid.cxx:1006
 AliCDBGrid.cxx:1007
 AliCDBGrid.cxx:1008
 AliCDBGrid.cxx:1009
 AliCDBGrid.cxx:1010
 AliCDBGrid.cxx:1011
 AliCDBGrid.cxx:1012
 AliCDBGrid.cxx:1013
 AliCDBGrid.cxx:1014
 AliCDBGrid.cxx:1015
 AliCDBGrid.cxx:1016
 AliCDBGrid.cxx:1017
 AliCDBGrid.cxx:1018
 AliCDBGrid.cxx:1019
 AliCDBGrid.cxx:1020
 AliCDBGrid.cxx:1021
 AliCDBGrid.cxx:1022
 AliCDBGrid.cxx:1023
 AliCDBGrid.cxx:1024
 AliCDBGrid.cxx:1025
 AliCDBGrid.cxx:1026
 AliCDBGrid.cxx:1027
 AliCDBGrid.cxx:1028
 AliCDBGrid.cxx:1029
 AliCDBGrid.cxx:1030
 AliCDBGrid.cxx:1031
 AliCDBGrid.cxx:1032
 AliCDBGrid.cxx:1033
 AliCDBGrid.cxx:1034
 AliCDBGrid.cxx:1035
 AliCDBGrid.cxx:1036
 AliCDBGrid.cxx:1037
 AliCDBGrid.cxx:1038
 AliCDBGrid.cxx:1039
 AliCDBGrid.cxx:1040
 AliCDBGrid.cxx:1041
 AliCDBGrid.cxx:1042
 AliCDBGrid.cxx:1043
 AliCDBGrid.cxx:1044
 AliCDBGrid.cxx:1045
 AliCDBGrid.cxx:1046
 AliCDBGrid.cxx:1047
 AliCDBGrid.cxx:1048
 AliCDBGrid.cxx:1049
 AliCDBGrid.cxx:1050
 AliCDBGrid.cxx:1051
 AliCDBGrid.cxx:1052
 AliCDBGrid.cxx:1053
 AliCDBGrid.cxx:1054
 AliCDBGrid.cxx:1055
 AliCDBGrid.cxx:1056
 AliCDBGrid.cxx:1057
 AliCDBGrid.cxx:1058
 AliCDBGrid.cxx:1059
 AliCDBGrid.cxx:1060
 AliCDBGrid.cxx:1061
 AliCDBGrid.cxx:1062
 AliCDBGrid.cxx:1063
 AliCDBGrid.cxx:1064
 AliCDBGrid.cxx:1065
 AliCDBGrid.cxx:1066
 AliCDBGrid.cxx:1067
 AliCDBGrid.cxx:1068
 AliCDBGrid.cxx:1069
 AliCDBGrid.cxx:1070
 AliCDBGrid.cxx:1071
 AliCDBGrid.cxx:1072
 AliCDBGrid.cxx:1073
 AliCDBGrid.cxx:1074
 AliCDBGrid.cxx:1075
 AliCDBGrid.cxx:1076
 AliCDBGrid.cxx:1077
 AliCDBGrid.cxx:1078
 AliCDBGrid.cxx:1079
 AliCDBGrid.cxx:1080
 AliCDBGrid.cxx:1081
 AliCDBGrid.cxx:1082
 AliCDBGrid.cxx:1083
 AliCDBGrid.cxx:1084
 AliCDBGrid.cxx:1085
 AliCDBGrid.cxx:1086
 AliCDBGrid.cxx:1087
 AliCDBGrid.cxx:1088
 AliCDBGrid.cxx:1089
 AliCDBGrid.cxx:1090
 AliCDBGrid.cxx:1091
 AliCDBGrid.cxx:1092
 AliCDBGrid.cxx:1093
 AliCDBGrid.cxx:1094
 AliCDBGrid.cxx:1095
 AliCDBGrid.cxx:1096
 AliCDBGrid.cxx:1097
 AliCDBGrid.cxx:1098
 AliCDBGrid.cxx:1099
 AliCDBGrid.cxx:1100
 AliCDBGrid.cxx:1101
 AliCDBGrid.cxx:1102
 AliCDBGrid.cxx:1103
 AliCDBGrid.cxx:1104
 AliCDBGrid.cxx:1105
 AliCDBGrid.cxx:1106
 AliCDBGrid.cxx:1107
 AliCDBGrid.cxx:1108
 AliCDBGrid.cxx:1109
 AliCDBGrid.cxx:1110
 AliCDBGrid.cxx:1111
 AliCDBGrid.cxx:1112
 AliCDBGrid.cxx:1113
 AliCDBGrid.cxx:1114
 AliCDBGrid.cxx:1115
 AliCDBGrid.cxx:1116
 AliCDBGrid.cxx:1117
 AliCDBGrid.cxx:1118
 AliCDBGrid.cxx:1119
 AliCDBGrid.cxx:1120
 AliCDBGrid.cxx:1121
 AliCDBGrid.cxx:1122
 AliCDBGrid.cxx:1123
 AliCDBGrid.cxx:1124
 AliCDBGrid.cxx:1125
 AliCDBGrid.cxx:1126
 AliCDBGrid.cxx:1127
 AliCDBGrid.cxx:1128
 AliCDBGrid.cxx:1129
 AliCDBGrid.cxx:1130
 AliCDBGrid.cxx:1131
 AliCDBGrid.cxx:1132
 AliCDBGrid.cxx:1133
 AliCDBGrid.cxx:1134
 AliCDBGrid.cxx:1135
 AliCDBGrid.cxx:1136
 AliCDBGrid.cxx:1137
 AliCDBGrid.cxx:1138
 AliCDBGrid.cxx:1139
 AliCDBGrid.cxx:1140
 AliCDBGrid.cxx:1141
 AliCDBGrid.cxx:1142
 AliCDBGrid.cxx:1143
 AliCDBGrid.cxx:1144
 AliCDBGrid.cxx:1145
 AliCDBGrid.cxx:1146
 AliCDBGrid.cxx:1147
 AliCDBGrid.cxx:1148
 AliCDBGrid.cxx:1149
 AliCDBGrid.cxx:1150
 AliCDBGrid.cxx:1151
 AliCDBGrid.cxx:1152
 AliCDBGrid.cxx:1153
 AliCDBGrid.cxx:1154
 AliCDBGrid.cxx:1155
 AliCDBGrid.cxx:1156
 AliCDBGrid.cxx:1157
 AliCDBGrid.cxx:1158
 AliCDBGrid.cxx:1159
 AliCDBGrid.cxx:1160
 AliCDBGrid.cxx:1161
 AliCDBGrid.cxx:1162
 AliCDBGrid.cxx:1163
 AliCDBGrid.cxx:1164
 AliCDBGrid.cxx:1165
 AliCDBGrid.cxx:1166
 AliCDBGrid.cxx:1167
 AliCDBGrid.cxx:1168
 AliCDBGrid.cxx:1169
 AliCDBGrid.cxx:1170
 AliCDBGrid.cxx:1171
 AliCDBGrid.cxx:1172
 AliCDBGrid.cxx:1173
 AliCDBGrid.cxx:1174
 AliCDBGrid.cxx:1175
 AliCDBGrid.cxx:1176
 AliCDBGrid.cxx:1177
 AliCDBGrid.cxx:1178
 AliCDBGrid.cxx:1179
 AliCDBGrid.cxx:1180
 AliCDBGrid.cxx:1181
 AliCDBGrid.cxx:1182
 AliCDBGrid.cxx:1183
 AliCDBGrid.cxx:1184
 AliCDBGrid.cxx:1185
 AliCDBGrid.cxx:1186
 AliCDBGrid.cxx:1187
 AliCDBGrid.cxx:1188
 AliCDBGrid.cxx:1189
 AliCDBGrid.cxx:1190
 AliCDBGrid.cxx:1191
 AliCDBGrid.cxx:1192
 AliCDBGrid.cxx:1193
 AliCDBGrid.cxx:1194
 AliCDBGrid.cxx:1195
 AliCDBGrid.cxx:1196
 AliCDBGrid.cxx:1197
 AliCDBGrid.cxx:1198
 AliCDBGrid.cxx:1199
 AliCDBGrid.cxx:1200
 AliCDBGrid.cxx:1201
 AliCDBGrid.cxx:1202
 AliCDBGrid.cxx:1203
 AliCDBGrid.cxx:1204
 AliCDBGrid.cxx:1205
 AliCDBGrid.cxx:1206
 AliCDBGrid.cxx:1207
 AliCDBGrid.cxx:1208
 AliCDBGrid.cxx:1209
 AliCDBGrid.cxx:1210
 AliCDBGrid.cxx:1211
 AliCDBGrid.cxx:1212
 AliCDBGrid.cxx:1213
 AliCDBGrid.cxx:1214
 AliCDBGrid.cxx:1215
 AliCDBGrid.cxx:1216
 AliCDBGrid.cxx:1217
 AliCDBGrid.cxx:1218
 AliCDBGrid.cxx:1219
 AliCDBGrid.cxx:1220
 AliCDBGrid.cxx:1221
 AliCDBGrid.cxx:1222
 AliCDBGrid.cxx:1223
 AliCDBGrid.cxx:1224
 AliCDBGrid.cxx:1225
 AliCDBGrid.cxx:1226
 AliCDBGrid.cxx:1227
 AliCDBGrid.cxx:1228
 AliCDBGrid.cxx:1229
 AliCDBGrid.cxx:1230
 AliCDBGrid.cxx:1231
 AliCDBGrid.cxx:1232
 AliCDBGrid.cxx:1233
 AliCDBGrid.cxx:1234
 AliCDBGrid.cxx:1235
 AliCDBGrid.cxx:1236
 AliCDBGrid.cxx:1237
 AliCDBGrid.cxx:1238
 AliCDBGrid.cxx:1239
 AliCDBGrid.cxx:1240
 AliCDBGrid.cxx:1241
 AliCDBGrid.cxx:1242
 AliCDBGrid.cxx:1243
 AliCDBGrid.cxx:1244
 AliCDBGrid.cxx:1245
 AliCDBGrid.cxx:1246
 AliCDBGrid.cxx:1247
 AliCDBGrid.cxx:1248
 AliCDBGrid.cxx:1249
 AliCDBGrid.cxx:1250
 AliCDBGrid.cxx:1251
 AliCDBGrid.cxx:1252
 AliCDBGrid.cxx:1253
 AliCDBGrid.cxx:1254
 AliCDBGrid.cxx:1255
 AliCDBGrid.cxx:1256
 AliCDBGrid.cxx:1257
 AliCDBGrid.cxx:1258
 AliCDBGrid.cxx:1259
 AliCDBGrid.cxx:1260
 AliCDBGrid.cxx:1261
 AliCDBGrid.cxx:1262
 AliCDBGrid.cxx:1263
 AliCDBGrid.cxx:1264
 AliCDBGrid.cxx:1265
 AliCDBGrid.cxx:1266
 AliCDBGrid.cxx:1267
 AliCDBGrid.cxx:1268
 AliCDBGrid.cxx:1269
 AliCDBGrid.cxx:1270
 AliCDBGrid.cxx:1271
 AliCDBGrid.cxx:1272
 AliCDBGrid.cxx:1273
 AliCDBGrid.cxx:1274
 AliCDBGrid.cxx:1275
 AliCDBGrid.cxx:1276
 AliCDBGrid.cxx:1277
 AliCDBGrid.cxx:1278
 AliCDBGrid.cxx:1279
 AliCDBGrid.cxx:1280
 AliCDBGrid.cxx:1281
 AliCDBGrid.cxx:1282
 AliCDBGrid.cxx:1283
 AliCDBGrid.cxx:1284
 AliCDBGrid.cxx:1285
 AliCDBGrid.cxx:1286
 AliCDBGrid.cxx:1287
 AliCDBGrid.cxx:1288
 AliCDBGrid.cxx:1289
 AliCDBGrid.cxx:1290
 AliCDBGrid.cxx:1291
 AliCDBGrid.cxx:1292
 AliCDBGrid.cxx:1293
 AliCDBGrid.cxx:1294
 AliCDBGrid.cxx:1295
 AliCDBGrid.cxx:1296
 AliCDBGrid.cxx:1297
 AliCDBGrid.cxx:1298
 AliCDBGrid.cxx:1299
 AliCDBGrid.cxx:1300
 AliCDBGrid.cxx:1301
 AliCDBGrid.cxx:1302
 AliCDBGrid.cxx:1303
 AliCDBGrid.cxx:1304
 AliCDBGrid.cxx:1305
 AliCDBGrid.cxx:1306
 AliCDBGrid.cxx:1307
 AliCDBGrid.cxx:1308
 AliCDBGrid.cxx:1309
 AliCDBGrid.cxx:1310
 AliCDBGrid.cxx:1311
 AliCDBGrid.cxx:1312
 AliCDBGrid.cxx:1313
 AliCDBGrid.cxx:1314
 AliCDBGrid.cxx:1315
 AliCDBGrid.cxx:1316
 AliCDBGrid.cxx:1317
 AliCDBGrid.cxx:1318
 AliCDBGrid.cxx:1319
 AliCDBGrid.cxx:1320
 AliCDBGrid.cxx:1321
 AliCDBGrid.cxx:1322
 AliCDBGrid.cxx:1323
 AliCDBGrid.cxx:1324
 AliCDBGrid.cxx:1325
 AliCDBGrid.cxx:1326
 AliCDBGrid.cxx:1327
 AliCDBGrid.cxx:1328
 AliCDBGrid.cxx:1329
 AliCDBGrid.cxx:1330
 AliCDBGrid.cxx:1331
 AliCDBGrid.cxx:1332
 AliCDBGrid.cxx:1333
 AliCDBGrid.cxx:1334
 AliCDBGrid.cxx:1335
 AliCDBGrid.cxx:1336
 AliCDBGrid.cxx:1337
 AliCDBGrid.cxx:1338
 AliCDBGrid.cxx:1339
 AliCDBGrid.cxx:1340
 AliCDBGrid.cxx:1341
 AliCDBGrid.cxx:1342
 AliCDBGrid.cxx:1343
 AliCDBGrid.cxx:1344
 AliCDBGrid.cxx:1345
 AliCDBGrid.cxx:1346
 AliCDBGrid.cxx:1347
 AliCDBGrid.cxx:1348
 AliCDBGrid.cxx:1349
 AliCDBGrid.cxx:1350
 AliCDBGrid.cxx:1351
 AliCDBGrid.cxx:1352
 AliCDBGrid.cxx:1353
 AliCDBGrid.cxx:1354
 AliCDBGrid.cxx:1355
 AliCDBGrid.cxx:1356
 AliCDBGrid.cxx:1357
 AliCDBGrid.cxx:1358
 AliCDBGrid.cxx:1359
 AliCDBGrid.cxx:1360
 AliCDBGrid.cxx:1361
 AliCDBGrid.cxx:1362
 AliCDBGrid.cxx:1363
 AliCDBGrid.cxx:1364
 AliCDBGrid.cxx:1365
 AliCDBGrid.cxx:1366
 AliCDBGrid.cxx:1367
 AliCDBGrid.cxx:1368
 AliCDBGrid.cxx:1369
 AliCDBGrid.cxx:1370
 AliCDBGrid.cxx:1371
 AliCDBGrid.cxx:1372
 AliCDBGrid.cxx:1373
 AliCDBGrid.cxx:1374
 AliCDBGrid.cxx:1375
 AliCDBGrid.cxx:1376
 AliCDBGrid.cxx:1377
 AliCDBGrid.cxx:1378
 AliCDBGrid.cxx:1379
 AliCDBGrid.cxx:1380
 AliCDBGrid.cxx:1381
 AliCDBGrid.cxx:1382
 AliCDBGrid.cxx:1383
 AliCDBGrid.cxx:1384
 AliCDBGrid.cxx:1385
 AliCDBGrid.cxx:1386
 AliCDBGrid.cxx:1387
 AliCDBGrid.cxx:1388
 AliCDBGrid.cxx:1389
 AliCDBGrid.cxx:1390
 AliCDBGrid.cxx:1391
 AliCDBGrid.cxx:1392
 AliCDBGrid.cxx:1393
 AliCDBGrid.cxx:1394
 AliCDBGrid.cxx:1395
 AliCDBGrid.cxx:1396
 AliCDBGrid.cxx:1397
 AliCDBGrid.cxx:1398
 AliCDBGrid.cxx:1399
 AliCDBGrid.cxx:1400
 AliCDBGrid.cxx:1401
 AliCDBGrid.cxx:1402
 AliCDBGrid.cxx:1403
 AliCDBGrid.cxx:1404
 AliCDBGrid.cxx:1405
 AliCDBGrid.cxx:1406
 AliCDBGrid.cxx:1407
 AliCDBGrid.cxx:1408
 AliCDBGrid.cxx:1409
 AliCDBGrid.cxx:1410
 AliCDBGrid.cxx:1411
 AliCDBGrid.cxx:1412
 AliCDBGrid.cxx:1413
 AliCDBGrid.cxx:1414
 AliCDBGrid.cxx:1415
 AliCDBGrid.cxx:1416
 AliCDBGrid.cxx:1417
 AliCDBGrid.cxx:1418
 AliCDBGrid.cxx:1419
 AliCDBGrid.cxx:1420
 AliCDBGrid.cxx:1421
 AliCDBGrid.cxx:1422
 AliCDBGrid.cxx:1423
 AliCDBGrid.cxx:1424
 AliCDBGrid.cxx:1425
 AliCDBGrid.cxx:1426
 AliCDBGrid.cxx:1427
 AliCDBGrid.cxx:1428
 AliCDBGrid.cxx:1429
 AliCDBGrid.cxx:1430
 AliCDBGrid.cxx:1431
 AliCDBGrid.cxx:1432
 AliCDBGrid.cxx:1433
 AliCDBGrid.cxx:1434
 AliCDBGrid.cxx:1435
 AliCDBGrid.cxx:1436
 AliCDBGrid.cxx:1437
 AliCDBGrid.cxx:1438
 AliCDBGrid.cxx:1439
 AliCDBGrid.cxx:1440
 AliCDBGrid.cxx:1441
 AliCDBGrid.cxx:1442
 AliCDBGrid.cxx:1443
 AliCDBGrid.cxx:1444
 AliCDBGrid.cxx:1445
 AliCDBGrid.cxx:1446
 AliCDBGrid.cxx:1447
 AliCDBGrid.cxx:1448
 AliCDBGrid.cxx:1449
 AliCDBGrid.cxx:1450
 AliCDBGrid.cxx:1451
 AliCDBGrid.cxx:1452
 AliCDBGrid.cxx:1453
 AliCDBGrid.cxx:1454
 AliCDBGrid.cxx:1455
 AliCDBGrid.cxx:1456
 AliCDBGrid.cxx:1457
 AliCDBGrid.cxx:1458
 AliCDBGrid.cxx:1459
 AliCDBGrid.cxx:1460
 AliCDBGrid.cxx:1461
 AliCDBGrid.cxx:1462
 AliCDBGrid.cxx:1463
 AliCDBGrid.cxx:1464
 AliCDBGrid.cxx:1465
 AliCDBGrid.cxx:1466
 AliCDBGrid.cxx:1467
 AliCDBGrid.cxx:1468
 AliCDBGrid.cxx:1469
 AliCDBGrid.cxx:1470
 AliCDBGrid.cxx:1471
 AliCDBGrid.cxx:1472
 AliCDBGrid.cxx:1473
 AliCDBGrid.cxx:1474
 AliCDBGrid.cxx:1475
 AliCDBGrid.cxx:1476
 AliCDBGrid.cxx:1477
 AliCDBGrid.cxx:1478
 AliCDBGrid.cxx:1479
 AliCDBGrid.cxx:1480
 AliCDBGrid.cxx:1481
 AliCDBGrid.cxx:1482
 AliCDBGrid.cxx:1483
 AliCDBGrid.cxx:1484
 AliCDBGrid.cxx:1485
 AliCDBGrid.cxx:1486
 AliCDBGrid.cxx:1487
 AliCDBGrid.cxx:1488
 AliCDBGrid.cxx:1489
 AliCDBGrid.cxx:1490
 AliCDBGrid.cxx:1491
 AliCDBGrid.cxx:1492
 AliCDBGrid.cxx:1493
 AliCDBGrid.cxx:1494
 AliCDBGrid.cxx:1495
 AliCDBGrid.cxx:1496
 AliCDBGrid.cxx:1497
 AliCDBGrid.cxx:1498
 AliCDBGrid.cxx:1499
 AliCDBGrid.cxx:1500
 AliCDBGrid.cxx:1501
 AliCDBGrid.cxx:1502
 AliCDBGrid.cxx:1503
 AliCDBGrid.cxx:1504
 AliCDBGrid.cxx:1505
 AliCDBGrid.cxx:1506
 AliCDBGrid.cxx:1507
 AliCDBGrid.cxx:1508
 AliCDBGrid.cxx:1509
 AliCDBGrid.cxx:1510
 AliCDBGrid.cxx:1511
 AliCDBGrid.cxx:1512