2 Merge calibration entry macro:
6 .L $ALICE_ROOT/ANALYSIS/macros/mergeCalibObjects.C
11 #if !defined(__CINT__) || defined(__MAKECINT__)
16 #include "TObjArray.h"
17 #include "AliSysInfo.h"
18 #include "AliTPCcalibBase.h"
20 #include "TMethodCall.h"
24 void IterTXT( const char * fileList="calib.list",Bool_t separate);
25 void Merge(TFile* fileIn, TObjArray * array);
26 void StoreResults(TObjArray * array);
29 void mergeCalibObjects( const char * fileList="calib.list",Bool_t separate=kFALSE){
33 IterTXT(fileList,separate );
38 // Loading the necessary libraries
40 gSystem->Load("libANALYSIS");
41 gSystem->Load("libTPCcalib");
48 // iterating over the files coming from an XML collection
54 void IterTXT( const char * fileList, Bool_t separate){
56 // Merge the files indicated in the list - fileList
57 // ASCII file opition example:
58 // find `pwd`/ | grep AliESDfriends_v1.root > calib.list
61 TObjArray * mergeArray= new TObjArray;
63 // Open the input stream
67 // Read the input list of files
72 if (!objfile.Contains("root")) continue; // protection
73 printf("Open file:Counter\t%d\tMerging file %s\n",counter++,objfile.Data());
74 TFile currentFile(objfile.Data());
75 Merge(¤tFile, mergeArray);
78 StoreSeparateResults(mergeArray);
80 StoreResults(mergeArray);
84 void StoreResults(TObjArray * array){
86 // Storing the results in one single file
88 TFile *f = new TFile("CalibObjects.root","recreate");
89 for (Int_t i=0; i<array->GetEntries(); i++){
90 TObject *object0 = array->At(i);
91 if (!object0) continue;
99 void StoreSeparateResults(TObjArray * array){
101 // Store the results in separate files (one per object)
103 for (Int_t i=0; i<array->GetEntries(); i++){
104 TObject *object0 = array->At(i);
105 if (!object0) continue;
106 TFile *f = new TFile(Form("CalibObjects_%s.root",object0->GetName()),"recreate");
115 void Merge(TFile* fileIn, TObjArray * array){
119 TObjArray *carray = new TObjArray; //array of the objects inside current file
120 carray->SetOwner(kTRUE);
122 // load all objects to memory
124 TList *farr = fileIn->GetListOfKeys();
126 for (Int_t ical=0; ical<farr->GetEntries(); ical++){
127 if (!farr->At(ical)) continue;
128 TObject *obj = fileIn->Get(farr->At(ical)->GetName());
129 if (obj) carray->AddLast(obj);
130 AliSysInfo::AddStamp(farr->At(ical)->GetName(),1,ical);
133 if (carray->GetEntries()==0) return;
136 for (Int_t i=0; i<carray->GetEntries(); i++){
138 TObjArray *templist = new TObjArray(1);
139 templist->SetOwner(kFALSE);
140 TObject *currentObject = carray->At(i);
141 if (!currentObject) continue;
142 printf("%s\n",currentObject->GetName());
143 callEnv.InitWithPrototype(currentObject->IsA(), "Merge", "TCollection*");
144 if (!callEnv.IsValid()) {continue;}
146 TObject *mergedObject = array->FindObject(currentObject->GetName());
148 array->AddLast(currentObject);
152 templist->AddLast(currentObject);
153 callEnv.SetParam((Long_t) templist);
154 callEnv.Execute(mergedObject);