ROOT logo
/*
  // Macro for merging of the calibration classes:
//   marain.ivanov@cern.ch
//   //
//   //
//   Example usage:
//   1. Make a list of the calibration files
//   2. Load libraries
//   3. Merge - the output is stored in the current directory
//   //
//   
   gSystem->AddIncludePath("-I$ALICE_ROOT/TPC")
   gSystem->Load("libANALYSIS");
   gSystem->Load("libTPCcalib");
   .L $ALICE_ROOT/TPC/macros/CalibFileMerger.C+g 
//   CalibFileMerger();
*/

#include <fstream>
#include "TSystem.h"
#include "TFile.h"
#include "TObjArray.h"
#include "AliSysInfo.h"
#include "AliTPCcalibBase.h"

void CalibFileMerger(const char *oname, Int_t nmax=1000,const char* filename = "mergelist.txt") {

  gSystem->Load("libANALYSIS");
  gSystem->Load("libTPCcalib");
  TObjArray * mergeArray= 0;
  //
  // Open the input stream
  ifstream in;
  in.open(filename);
  
  // Read the input list of files 
  TString objfile;
  Int_t counter=0;
  while(in.good()) {
    in >> objfile;
    if (!objfile.Contains("root")) continue; // protection    
    TFile currentFile(objfile.Data());
    printf("Open file:Counter\t%d\tMerging file %s\n",counter,objfile.Data());
    TObjArray * carray =  (TObjArray*)currentFile.Get("TPCCalib");
    if (!carray) {
      carray = new TObjArray;
      TList *farr = currentFile.GetListOfKeys();
      if (!farr) continue;
      for (Int_t ical=0; ical<farr->GetEntries(); ical++){
	if (!farr->At(ical)) continue;
	TObject *obj = currentFile.Get(farr->At(ical)->GetName());
	if (obj) carray->AddLast(obj);
	AliSysInfo::AddStamp(farr->At(ical)->GetName(),1,ical,counter);
	// reading entries
      }
      if (carray->GetEntries()==0) continue;
    }
   
    if (!mergeArray) { mergeArray = carray; continue;}
    printf("Counter\t%d\tMerging file %s\n",counter,objfile.Data());
    for (Int_t icalib=0; icalib<mergeArray->GetEntries(); icalib++){
      AliTPCcalibBase *calib = ( AliTPCcalibBase *)mergeArray->At(icalib);
      //disable calib align
      if (!calib->InheritsFrom("AliTPCcalibBase")) continue;
      if (calib->InheritsFrom("AliTPCcalibTrigger")) continue;  // too big
      //
    //   if (counter>50&&counter%2>0){
// 	if (calib->InheritsFrom("AliTPCcalibCosmic")) continue;  // too big
//       }
//       if (counter>100&&counter%4>0){
// 	if (calib->InheritsFrom("AliTPCcalibCosmic")) continue;  // too big
//       }
//       if (counter>200&&counter%8>0){
// 	if (calib->InheritsFrom("AliTPCcalibCosmic")) continue;  // too big
//       }
      if (!calib) continue;
      printf("Merging\t%s\n",calib->GetName());
      TObjArray toMerge(1);
      TObject *objectMerge = carray->FindObject(calib->GetName());
      if (!objectMerge) {
	printf("Object not found\n");
	continue;
      }
      toMerge.AddAt(objectMerge,0);
      toMerge.SetOwner(kFALSE);
      calib->Merge(&toMerge);
      AliSysInfo::AddStamp(calib->GetName(),2,icalib,counter);
    }
    AliSysInfo::AddStamp(objfile.Data(),counter,counter,counter);
    if (carray){
      carray->SetOwner(kTRUE);
      carray->Delete();
      // for (Int_t i=0; i<carray->GetEntriesFast(); i++){
// 	TObject *o = carray->At(i);
// 	if (!o) continue;
// 	printf("Delete %s\n",o->GetName());
// 	AliSysInfo::AddStamp(o->GetName(),3,i,counter);
// 	delete o;
//       }
      delete carray;
    }
    counter++;
    currentFile.Close();
    if (counter>nmax) break;
  }

  in.close();
  if (mergeArray){
    for (Int_t icalib=0; icalib<mergeArray->GetEntries(); icalib++){
      TFile * output = new TFile(oname, "UPDATE");
      TObject * obj = mergeArray->At(icalib); 
      if (!obj) continue;
      obj->Write();
      delete obj;
      output->Close();
    }
  }
  //
  // problem to stop root
  // Make suicide
  //
  printf("Kill ourself\n");
  printf("Kill ourself\n");
  printf("Kill ourself\n");
  printf("Kill ourself\n");
  gSystem->Exec(Form("kill -9 %d",gSystem->GetPid()));
}


 CalibFileMerger.C:1
 CalibFileMerger.C:2
 CalibFileMerger.C:3
 CalibFileMerger.C:4
 CalibFileMerger.C:5
 CalibFileMerger.C:6
 CalibFileMerger.C:7
 CalibFileMerger.C:8
 CalibFileMerger.C:9
 CalibFileMerger.C:10
 CalibFileMerger.C:11
 CalibFileMerger.C:12
 CalibFileMerger.C:13
 CalibFileMerger.C:14
 CalibFileMerger.C:15
 CalibFileMerger.C:16
 CalibFileMerger.C:17
 CalibFileMerger.C:18
 CalibFileMerger.C:19
 CalibFileMerger.C:20
 CalibFileMerger.C:21
 CalibFileMerger.C:22
 CalibFileMerger.C:23
 CalibFileMerger.C:24
 CalibFileMerger.C:25
 CalibFileMerger.C:26
 CalibFileMerger.C:27
 CalibFileMerger.C:28
 CalibFileMerger.C:29
 CalibFileMerger.C:30
 CalibFileMerger.C:31
 CalibFileMerger.C:32
 CalibFileMerger.C:33
 CalibFileMerger.C:34
 CalibFileMerger.C:35
 CalibFileMerger.C:36
 CalibFileMerger.C:37
 CalibFileMerger.C:38
 CalibFileMerger.C:39
 CalibFileMerger.C:40
 CalibFileMerger.C:41
 CalibFileMerger.C:42
 CalibFileMerger.C:43
 CalibFileMerger.C:44
 CalibFileMerger.C:45
 CalibFileMerger.C:46
 CalibFileMerger.C:47
 CalibFileMerger.C:48
 CalibFileMerger.C:49
 CalibFileMerger.C:50
 CalibFileMerger.C:51
 CalibFileMerger.C:52
 CalibFileMerger.C:53
 CalibFileMerger.C:54
 CalibFileMerger.C:55
 CalibFileMerger.C:56
 CalibFileMerger.C:57
 CalibFileMerger.C:58
 CalibFileMerger.C:59
 CalibFileMerger.C:60
 CalibFileMerger.C:61
 CalibFileMerger.C:62
 CalibFileMerger.C:63
 CalibFileMerger.C:64
 CalibFileMerger.C:65
 CalibFileMerger.C:66
 CalibFileMerger.C:67
 CalibFileMerger.C:68
 CalibFileMerger.C:69
 CalibFileMerger.C:70
 CalibFileMerger.C:71
 CalibFileMerger.C:72
 CalibFileMerger.C:73
 CalibFileMerger.C:74
 CalibFileMerger.C:75
 CalibFileMerger.C:76
 CalibFileMerger.C:77
 CalibFileMerger.C:78
 CalibFileMerger.C:79
 CalibFileMerger.C:80
 CalibFileMerger.C:81
 CalibFileMerger.C:82
 CalibFileMerger.C:83
 CalibFileMerger.C:84
 CalibFileMerger.C:85
 CalibFileMerger.C:86
 CalibFileMerger.C:87
 CalibFileMerger.C:88
 CalibFileMerger.C:89
 CalibFileMerger.C:90
 CalibFileMerger.C:91
 CalibFileMerger.C:92
 CalibFileMerger.C:93
 CalibFileMerger.C:94
 CalibFileMerger.C:95
 CalibFileMerger.C:96
 CalibFileMerger.C:97
 CalibFileMerger.C:98
 CalibFileMerger.C:99
 CalibFileMerger.C:100
 CalibFileMerger.C:101
 CalibFileMerger.C:102
 CalibFileMerger.C:103
 CalibFileMerger.C:104
 CalibFileMerger.C:105
 CalibFileMerger.C:106
 CalibFileMerger.C:107
 CalibFileMerger.C:108
 CalibFileMerger.C:109
 CalibFileMerger.C:110
 CalibFileMerger.C:111
 CalibFileMerger.C:112
 CalibFileMerger.C:113
 CalibFileMerger.C:114
 CalibFileMerger.C:115
 CalibFileMerger.C:116
 CalibFileMerger.C:117
 CalibFileMerger.C:118
 CalibFileMerger.C:119
 CalibFileMerger.C:120
 CalibFileMerger.C:121
 CalibFileMerger.C:122
 CalibFileMerger.C:123
 CalibFileMerger.C:124
 CalibFileMerger.C:125
 CalibFileMerger.C:126
 CalibFileMerger.C:127
 CalibFileMerger.C:128
 CalibFileMerger.C:129
 CalibFileMerger.C:130