ROOT logo
#include "ARVersion.h"
#if !defined(__CINT__) || defined(__MAKECINT__)
#include "AliCDBManager.h"
#include "AliCDBStorage.h"
#include "AliCDBId.h"
#include "AliCDBMetaData.h"
#include <TTree.h>
#include <TList.h>
#include <TObjString.h>
#include <TString.h>
#endif

void makeCDBSnapshotFromUserInfo(const char* defaultStorage, const char* esdFile, const char* snapshotFile)
{
    // read UserInfo from an esd tree and build the corresponding single-key snapshot from it
    // ATTENTION: it works if we are happy that all objects will be taken from the default CDB
    // Example input esd file: "alien:///alice/data/2011/LHC11h_2/000168984/ESDs/pass2/11000168984001.12/AliESDs.root"
    //

    AliCDBManager *cdb = AliCDBManager::Instance();
    cdb->SetDefaultStorage(defaultStorage);
    
    TFile *f = TFile::Open(esdFile);
    if(!f){
	Printf("Unable to open file \"%s\". Exiting.",esdFile);
	return;
    }
    TTree *tree = (TTree*) f->Get("esdTree");
    if(!tree){
	Printf("Could not get tree from file. Exiting.");
	return;
    }
    TList *ui = (TList*) tree->GetUserInfo();
    if(!ui){
	Printf("Could not get user info from tree. Exiting.");
	return;
    }
    TList *ids = (TList*) ui->At(2);
    if(!ids){
	Printf("Could not get CDB objects' ids from user info. Exiting.");
	return;
    }
    
    TListIter lIter(ids);
    TObjString *oStr = 0;
    while ((oStr = dynamic_cast<TObjString*> (lIter.Next()))) {
	TString printedId = oStr->GetString();
	// add here lines like the following if you don't want a given object in the snapshot
	// this should not be needed because the specific storages overwrite the snapshot-mode
	//if(printedId.Contains("ITS/Align/Data")||printedId.Contains("MUON/Align/Data")) 
	//    continue;
	printedId.Remove(0,printedId.First('"')+1);
	TString path = printedId(0,printedId.First('"'));
	printedId.Remove(0,printedId.First('[')+1);
	TString fRun = printedId(0,printedId.First(','));
	printedId.Remove(0,printedId.First(',')+1);
	Int_t firstRun = fRun.Atoi();
	TString lRun = printedId(0,printedId.First(']'));
	Int_t lastRun = lRun.Atoi();
	printedId.Remove(0,printedId.First(':')+1);
	printedId.Remove(0,2);
	printedId.Remove(printedId.First('_'),printedId.Length());
	Int_t version = printedId.Atoi();
	AliCDBId id(path.Data(),firstRun,lastRun,version);
	id.Print();
	AliCDBEntry *e = cdb->Get(id,kTRUE);
    }

    cdb->DumpToSnapshotFile(snapshotFile,kFALSE);
}
 makeCDBSnapshotFromUserInfo.C:1
 makeCDBSnapshotFromUserInfo.C:2
 makeCDBSnapshotFromUserInfo.C:3
 makeCDBSnapshotFromUserInfo.C:4
 makeCDBSnapshotFromUserInfo.C:5
 makeCDBSnapshotFromUserInfo.C:6
 makeCDBSnapshotFromUserInfo.C:7
 makeCDBSnapshotFromUserInfo.C:8
 makeCDBSnapshotFromUserInfo.C:9
 makeCDBSnapshotFromUserInfo.C:10
 makeCDBSnapshotFromUserInfo.C:11
 makeCDBSnapshotFromUserInfo.C:12
 makeCDBSnapshotFromUserInfo.C:13
 makeCDBSnapshotFromUserInfo.C:14
 makeCDBSnapshotFromUserInfo.C:15
 makeCDBSnapshotFromUserInfo.C:16
 makeCDBSnapshotFromUserInfo.C:17
 makeCDBSnapshotFromUserInfo.C:18
 makeCDBSnapshotFromUserInfo.C:19
 makeCDBSnapshotFromUserInfo.C:20
 makeCDBSnapshotFromUserInfo.C:21
 makeCDBSnapshotFromUserInfo.C:22
 makeCDBSnapshotFromUserInfo.C:23
 makeCDBSnapshotFromUserInfo.C:24
 makeCDBSnapshotFromUserInfo.C:25
 makeCDBSnapshotFromUserInfo.C:26
 makeCDBSnapshotFromUserInfo.C:27
 makeCDBSnapshotFromUserInfo.C:28
 makeCDBSnapshotFromUserInfo.C:29
 makeCDBSnapshotFromUserInfo.C:30
 makeCDBSnapshotFromUserInfo.C:31
 makeCDBSnapshotFromUserInfo.C:32
 makeCDBSnapshotFromUserInfo.C:33
 makeCDBSnapshotFromUserInfo.C:34
 makeCDBSnapshotFromUserInfo.C:35
 makeCDBSnapshotFromUserInfo.C:36
 makeCDBSnapshotFromUserInfo.C:37
 makeCDBSnapshotFromUserInfo.C:38
 makeCDBSnapshotFromUserInfo.C:39
 makeCDBSnapshotFromUserInfo.C:40
 makeCDBSnapshotFromUserInfo.C:41
 makeCDBSnapshotFromUserInfo.C:42
 makeCDBSnapshotFromUserInfo.C:43
 makeCDBSnapshotFromUserInfo.C:44
 makeCDBSnapshotFromUserInfo.C:45
 makeCDBSnapshotFromUserInfo.C:46
 makeCDBSnapshotFromUserInfo.C:47
 makeCDBSnapshotFromUserInfo.C:48
 makeCDBSnapshotFromUserInfo.C:49
 makeCDBSnapshotFromUserInfo.C:50
 makeCDBSnapshotFromUserInfo.C:51
 makeCDBSnapshotFromUserInfo.C:52
 makeCDBSnapshotFromUserInfo.C:53
 makeCDBSnapshotFromUserInfo.C:54
 makeCDBSnapshotFromUserInfo.C:55
 makeCDBSnapshotFromUserInfo.C:56
 makeCDBSnapshotFromUserInfo.C:57
 makeCDBSnapshotFromUserInfo.C:58
 makeCDBSnapshotFromUserInfo.C:59
 makeCDBSnapshotFromUserInfo.C:60
 makeCDBSnapshotFromUserInfo.C:61
 makeCDBSnapshotFromUserInfo.C:62
 makeCDBSnapshotFromUserInfo.C:63
 makeCDBSnapshotFromUserInfo.C:64
 makeCDBSnapshotFromUserInfo.C:65
 makeCDBSnapshotFromUserInfo.C:66
 makeCDBSnapshotFromUserInfo.C:67
 makeCDBSnapshotFromUserInfo.C:68
 makeCDBSnapshotFromUserInfo.C:69
 makeCDBSnapshotFromUserInfo.C:70
 makeCDBSnapshotFromUserInfo.C:71