ROOT logo
#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:1
 MergeSetsOfAlignObjs.C:2
 MergeSetsOfAlignObjs.C:3
 MergeSetsOfAlignObjs.C:4
 MergeSetsOfAlignObjs.C:5
 MergeSetsOfAlignObjs.C:6
 MergeSetsOfAlignObjs.C:7
 MergeSetsOfAlignObjs.C:8
 MergeSetsOfAlignObjs.C:9
 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