#if !defined(__CINT__) || defined(__MAKECINT__)
#include "AliCDBManager.h"
#include "AliCDBStorage.h"
#include "AliCDBEntry.h"
#include "AliAlignObjParams.h"
#include <TString.h>
#include <TClonesArray.h>
#include <TFile.h>
#include <TError.h>
#endif
void MergeSetsOfAlignObjs(const char* filename1, const char* filename2, const char* det="ITS")
{
// example macro: building an array by merging the non-SSD entries
// from one file (or OCDB entry) with the remaining SSD entries taken
// from another file (or OCDB entry); the first two arguments can be local filenames
// or URLs of the OCDB folders
//
const char* macroname = "MergeSetsOfAlignObjs";
TClonesArray* array1 = 0;
TClonesArray* array2 = 0;
TString arName(det);
arName+="AlignObjs";
TString path(det);
path+="/Align/Data";
TString f1(filename1);
TString f2(filename2);
AliCDBStorage* stor1 = 0;
AliCDBStorage* stor2 = 0;
Bool_t fromOcdb1=kFALSE;
Bool_t fromOcdb2=kFALSE;
if(f1.Contains("alien://folder=") || f1.Contains("local://")) fromOcdb1=kTRUE;
if(f2.Contains("alien://folder=") || f2.Contains("local://")) fromOcdb2=kTRUE;
AliCDBManager* cdb = AliCDBManager::Instance();
cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
cdb->SetRun(0);
if(fromOcdb1){
stor1 = cdb->GetStorage(f1.Data());
AliCDBEntry* entry = stor1->Get(path.Data(),0);
array1 = (TClonesArray*) entry->GetObject();
}else{
TFile* filein1 = TFile::Open(f1.Data(),"READ");
if(!filein1)
{
Info(macroname,Form("Unable to open file %s! Exiting ...", f1.Data()));
return;
}
array1 = (TClonesArray*) filein1->Get(arName.Data());
}
if(array1){
Info(macroname,Form("First array has %d entries", array1->GetEntriesFast()));
}else{
Info(macroname,"Unable to get first array! Exiting ...");
return;
}
if(fromOcdb2){
stor2 = cdb->GetStorage(f2.Data());
AliCDBEntry* entry = stor2->Get(path.Data(),0);
array2 = (TClonesArray*) entry->GetObject();
}else{
TFile* filein2 = TFile::Open(f2.Data(),"READ");
if(!filein2)
{
Info(macroname,Form("Unable to open file %s! Exiting ...", f2.Data()));
return;
}
array2 = (TClonesArray*) filein2->Get(arName.Data());
}
if(array2){
Info(macroname,Form("Second array has %d entries", array2->GetEntriesFast()));
}else{
Info(macroname,"Unable to get second array! Exiting ...");
return;
}
TClonesArray *mergedArr = new TClonesArray("AliAlignObjParams",3000);
Info(macroname,"Merging objects for SPD and SDD from the first array ...");
// SSD starts from 500
for(Int_t i=0; i<500; i++)
{
(*mergedArr)[i] = (AliAlignObjParams*) array1->UncheckedAt(i);
}
Info(macroname,"Merging objects for SSD from the second array ...");
for(Int_t i=500; i<array2->GetEntriesFast(); i++)
{
(*mergedArr)[i] = (AliAlignObjParams*) array2->UncheckedAt(i);
}
TString foutName("merged");
foutName+=det;
foutName+="Alignment.root";
Info(macroname,Form("... in a single array into the file %s", foutName.Data()));
TFile* fileout = TFile::Open(foutName.Data(),"RECREATE");
fileout->cd();
fileout->WriteObject(mergedArr,arName.Data(),"kSingleKey");
fileout->Close();
mergedArr->Delete();
}
MergeSetsOfAlignObjs.C:10 MergeSetsOfAlignObjs.C:11 MergeSetsOfAlignObjs.C:12 MergeSetsOfAlignObjs.C:13 MergeSetsOfAlignObjs.C:14 MergeSetsOfAlignObjs.C:15 MergeSetsOfAlignObjs.C:16 MergeSetsOfAlignObjs.C:17 MergeSetsOfAlignObjs.C:18 MergeSetsOfAlignObjs.C:19 MergeSetsOfAlignObjs.C:20 MergeSetsOfAlignObjs.C:21 MergeSetsOfAlignObjs.C:22 MergeSetsOfAlignObjs.C:23 MergeSetsOfAlignObjs.C:24 MergeSetsOfAlignObjs.C:25 MergeSetsOfAlignObjs.C:26 MergeSetsOfAlignObjs.C:27 MergeSetsOfAlignObjs.C:28 MergeSetsOfAlignObjs.C:29 MergeSetsOfAlignObjs.C:30 MergeSetsOfAlignObjs.C:31 MergeSetsOfAlignObjs.C:32 MergeSetsOfAlignObjs.C:33 MergeSetsOfAlignObjs.C:34 MergeSetsOfAlignObjs.C:35 MergeSetsOfAlignObjs.C:36 MergeSetsOfAlignObjs.C:37 MergeSetsOfAlignObjs.C:38 MergeSetsOfAlignObjs.C:39 MergeSetsOfAlignObjs.C:40 MergeSetsOfAlignObjs.C:41 MergeSetsOfAlignObjs.C:42 MergeSetsOfAlignObjs.C:43 MergeSetsOfAlignObjs.C:44 MergeSetsOfAlignObjs.C:45 MergeSetsOfAlignObjs.C:46 MergeSetsOfAlignObjs.C:47 MergeSetsOfAlignObjs.C:48 MergeSetsOfAlignObjs.C:49 MergeSetsOfAlignObjs.C:50 MergeSetsOfAlignObjs.C:51 MergeSetsOfAlignObjs.C:52 MergeSetsOfAlignObjs.C:53 MergeSetsOfAlignObjs.C:54 MergeSetsOfAlignObjs.C:55 MergeSetsOfAlignObjs.C:56 MergeSetsOfAlignObjs.C:57 MergeSetsOfAlignObjs.C:58 MergeSetsOfAlignObjs.C:59 MergeSetsOfAlignObjs.C:60 MergeSetsOfAlignObjs.C:61 MergeSetsOfAlignObjs.C:62 MergeSetsOfAlignObjs.C:63 MergeSetsOfAlignObjs.C:64 MergeSetsOfAlignObjs.C:65 MergeSetsOfAlignObjs.C:66 MergeSetsOfAlignObjs.C:67 MergeSetsOfAlignObjs.C:68 MergeSetsOfAlignObjs.C:69 MergeSetsOfAlignObjs.C:70 MergeSetsOfAlignObjs.C:71 MergeSetsOfAlignObjs.C:72 MergeSetsOfAlignObjs.C:73 MergeSetsOfAlignObjs.C:74 MergeSetsOfAlignObjs.C:75 MergeSetsOfAlignObjs.C:76 MergeSetsOfAlignObjs.C:77 MergeSetsOfAlignObjs.C:78 MergeSetsOfAlignObjs.C:79 MergeSetsOfAlignObjs.C:80 MergeSetsOfAlignObjs.C:81 MergeSetsOfAlignObjs.C:82 MergeSetsOfAlignObjs.C:83 MergeSetsOfAlignObjs.C:84 MergeSetsOfAlignObjs.C:85 MergeSetsOfAlignObjs.C:86 MergeSetsOfAlignObjs.C:87 MergeSetsOfAlignObjs.C:88 MergeSetsOfAlignObjs.C:89 MergeSetsOfAlignObjs.C:90 MergeSetsOfAlignObjs.C:91 MergeSetsOfAlignObjs.C:92 MergeSetsOfAlignObjs.C:93 MergeSetsOfAlignObjs.C:94 MergeSetsOfAlignObjs.C:95 MergeSetsOfAlignObjs.C:96 MergeSetsOfAlignObjs.C:97 MergeSetsOfAlignObjs.C:98 MergeSetsOfAlignObjs.C:99 MergeSetsOfAlignObjs.C:100 MergeSetsOfAlignObjs.C:101 MergeSetsOfAlignObjs.C:102 MergeSetsOfAlignObjs.C:103 MergeSetsOfAlignObjs.C:104 MergeSetsOfAlignObjs.C:105 MergeSetsOfAlignObjs.C:106 MergeSetsOfAlignObjs.C:107 MergeSetsOfAlignObjs.C:108 MergeSetsOfAlignObjs.C:109 MergeSetsOfAlignObjs.C:110 MergeSetsOfAlignObjs.C:111 MergeSetsOfAlignObjs.C:112 MergeSetsOfAlignObjs.C:113 MergeSetsOfAlignObjs.C:114 MergeSetsOfAlignObjs.C:115