ROOT logo
//This a modification in a code sent by Marco Bregant, which, originally, created the OADB for misalignment matrices

//In this macro, the histograms with Recalibraton Factors are loaded and some TObjarrays are filled with these histograms.
// At the end, a OADB container is created receiving these arrays.
// This UpdateEMCAL_OADB_Recalib updates the information of a original OADB file and writes the output to BetaRecalib.root


void UpdateEMCAL_OADB_Recalib(const char *fileNameOADB="$ALICE_ROOT/OADB/EMCAL/EMCALRecalib.root",
			      const char *fileName12="RecalDB/RecalibrationFactors2012_10SM_iter8.root")
{

gSystem->Load("libOADB");  

Bool_t is2012=1;
Bool_t is2013=1;

AliOADBContainer *con	= new AliOADBContainer("");
con->InitFromFile(fileNameOADB, "AliEMCALRecalib"); //Updating the original OADB file, output will be written into BetaRecalib.root 

// **** Loading the root files with Recalibration Factors:
TFile* f12=new TFile(fileName12);

TObjArray *array12_13 = new TObjArray(10); // 2012--2013 ---> Same R.F. for both 2012 and 1013 pass1.
array12_13->SetName("Recalib");

char name[30];


// Filling The objects above with the EMCALRecalFactors_SM Histos:
for (Int_t mod=0;mod<10;mod++){
    cout<<"SM "<< mod<<endl;
    // Recalib Objects for 2012: Still using 10 SM's
    sprintf(name,"EMCALRecalFactors_SM%d",mod);
    cout<<"Recalib2012 and 2013:"<<name<<endl;
    array12_13->Add(f12->Get(name));
    } //mod

// So far, SM11 and SM12 receive 1. 
TH2F *h0  = (TH2F*)f12->Get("EMCALRecalFactors_SM0");
TH2F *h10 = (TH2F*)h0->Clone("EMCALRecalFactors_SM10");
TH2F *h11 = (TH2F*)h0->Clone("EMCALRecalFactors_SM11");
h10->SetName("EMCALRecalFactors_SM10");
h10->SetTitle("EMCALRecalFactors_SM10");
h11->SetName("EMCALRecalFactors_SM11");
h11->SetTitle("EMCALRecalFactors_SM11");
int nbinsx = h10->GetNbinsX();
int nbinsy = h10->GetNbinsY();
for(int i=0;i<nbinsx;i++)
  for(int j=0;j<nbinsy;j++){
      h10->SetBinContent(i,j,1.);
      h11->SetBinContent(i,j,1.);
  }
if(is2012||is2013) array12_13->Add(h10);
if(is2012||is2013) array12_13->Add(h11);

//********************************************************************
// ******* 2012 -- 2013 ******************
// Setting Periods
//**** Adding pass object to period Object ****/
//When updating object that has already been created. For instance, adding pass2,3 etc.
//Just get the object and add new array. Append of runnumber is already done in this case.

TObjArray *array13b = (TObjArray*)con->GetObject(195345,"LHC13b");
TObjArray *array13c = (TObjArray*)con->GetObject(195529,"LHC13c");          
TObjArray *array13d = (TObjArray*)con->GetObject(195681,"LHC13d");
TObjArray *array13e = (TObjArray*)con->GetObject(195935,"LHC13e");
TObjArray *array13f = (TObjArray*)con->GetObject(196433,"LHC13f");


TObjArray *array13b_pass3 = new TObjArray(10); array13b_pass3->SetName("pass3");  array13b_pass3->Add(*&array12_13);
TObjArray *array13c_pass2 = new TObjArray(10); array13c_pass2->SetName("pass2");  array13c_pass2->Add(*&array12_13);
TObjArray *array13d_pass2 = new TObjArray(10); array13d_pass2->SetName("pass2");  array13d_pass2->Add(*&array12_13);
TObjArray *array13e_pass2 = new TObjArray(10); array13e_pass2->SetName("pass2");  array13e_pass2->Add(*&array12_13);
TObjArray *array13f_pass2 = new TObjArray(10); array13f_pass2->SetName("pass2");  array13f_pass2->Add(*&array12_13);

array13b->Add(*&array13b_pass3);
array13c->Add(*&array13c_pass2);
array13d->Add(*&array13d_pass2);
array13e->Add(*&array13e_pass2);
array13f->Add(*&array13f_pass2);

con->WriteToFile("BetaRecalib.root");

test(195935); // If someone wants to test container

}

void test(int runnumber=195345){
//
// let's read back the file
AliOADBContainer *cont=new AliOADBContainer("");
cont->InitFromFile("BetaRecalib.root", "AliEMCALRecalib");
// 
cout<<"_________--------------- dump ---------------------___________"<<endl;
cont->Dump();
cout<<"_________--------------- list ---------------------___________"<<endl;
//cont0.List();
cout<<"cont->GetDefaultList()->Print()"<<endl;
cont->GetDefaultList()->Print();

TObjArray *recal=cont->GetObject(runnumber); //GetObject(int runnumber)
recal->ls();

TObjArray *recalpass=recal->FindObject("pass1");

if(!recalpass){
  cout<<" norecalpass"<<endl;
  return;
}

TObjArray *recalib=recalpass->FindObject("Recalib");

if(!recalib){
  cout<<" no recalib found"<<endl;
  return;
}

TH2F *h2=(TH2F*)recalib->FindObject("EMCALRecalFactors_SM0");
if(!h2){
  return;
cout<<" no histo found"<<endl;
}
h2->DrawCopy("colz");
cout<<"That's all folks!"<<endl;

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