2 // Macro for merging of the calibration classes:
3 // marain.ivanov@cern.ch
7 // 1. Make a list of the calibration files
9 // 3. Merge - the output is stored in the current directory
12 gSystem->AddIncludePath("-I$ALICE_ROOT/TPC")
13 gSystem->Load("libANALYSIS");
14 gSystem->Load("libTPCcalib");
15 .L $ALICE_ROOT/TPC/macros/CalibFileMerger.C+g
22 #include "TObjArray.h"
23 #include "AliSysInfo.h"
24 #include "AliTPCcalibBase.h"
26 void CalibFileMerger(const char *oname, Int_t nmax=1000,const char* filename = "mergelist.txt") {
28 gSystem->Load("libANALYSIS");
29 gSystem->Load("libTPCcalib");
30 TObjArray * mergeArray= 0;
32 // Open the input stream
36 // Read the input list of files
41 if (!objfile.Contains("root")) continue; // protection
42 TFile currentFile(objfile.Data());
43 printf("Open file:Counter\t%d\tMerging file %s\n",counter,objfile.Data());
44 TObjArray * carray = (TObjArray*)currentFile.Get("TPCCalib");
46 carray = new TObjArray;
47 TList *farr = currentFile.GetListOfKeys();
49 for (Int_t ical=0; ical<farr->GetEntries(); ical++){
50 if (!farr->At(ical)) continue;
51 TObject *obj = currentFile.Get(farr->At(ical)->GetName());
52 if (obj) carray->AddLast(obj);
53 AliSysInfo::AddStamp(farr->At(ical)->GetName(),1,ical,counter);
56 if (carray->GetEntries()==0) continue;
59 if (!mergeArray) { mergeArray = carray; continue;}
60 printf("Counter\t%d\tMerging file %s\n",counter,objfile.Data());
61 for (Int_t icalib=0; icalib<mergeArray->GetEntries(); icalib++){
62 AliTPCcalibBase *calib = ( AliTPCcalibBase *)mergeArray->At(icalib);
64 if (!calib->InheritsFrom("AliTPCcalibBase")) continue;
65 if (calib->InheritsFrom("AliTPCcalibTrigger")) continue; // too big
67 // if (counter>50&&counter%2>0){
68 // if (calib->InheritsFrom("AliTPCcalibCosmic")) continue; // too big
70 // if (counter>100&&counter%4>0){
71 // if (calib->InheritsFrom("AliTPCcalibCosmic")) continue; // too big
73 // if (counter>200&&counter%8>0){
74 // if (calib->InheritsFrom("AliTPCcalibCosmic")) continue; // too big
77 printf("Merging\t%s\n",calib->GetName());
79 TObject *objectMerge = carray->FindObject(calib->GetName());
81 printf("Object not found\n");
84 toMerge.AddAt(objectMerge,0);
85 toMerge.SetOwner(kFALSE);
86 calib->Merge(&toMerge);
87 AliSysInfo::AddStamp(calib->GetName(),2,icalib,counter);
89 AliSysInfo::AddStamp(objfile.Data(),counter,counter,counter);
91 carray->SetOwner(kTRUE);
93 // for (Int_t i=0; i<carray->GetEntriesFast(); i++){
94 // TObject *o = carray->At(i);
96 // printf("Delete %s\n",o->GetName());
97 // AliSysInfo::AddStamp(o->GetName(),3,i,counter);
104 if (counter>nmax) break;
109 for (Int_t icalib=0; icalib<mergeArray->GetEntries(); icalib++){
110 TFile * output = new TFile(oname, "UPDATE");
111 TObject * obj = mergeArray->At(icalib);
119 // problem to stop root
122 printf("Kill ourself\n");
123 printf("Kill ourself\n");
124 printf("Kill ourself\n");
125 printf("Kill ourself\n");
126 gSystem->Exec(Form("kill -9 %d",gSystem->GetPid()));