ROOT logo
// ******* Example to Create or Read OADB Container 
// ******* for EMCal Run by Run calibration dependent 
// ******* on Temperature variations
// Author : Gustavo Conesa Balbastre (LPSC-Grenoble)

// rescale some 2011 runs slightly (0.5%):
const Float_t rescaleFactor = 1.005;
//const Float_t rescaleFactor = 0.9975;
const Int_t kFirst = 156620;
const Int_t kLast = 162740;

void CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection(Int_t opt = 1, Int_t runNumber = 170387)
{
  if(opt == 0) Read(runNumber);
  if(opt == 1) Create();
}

void Create()
{
  //Create OADB container for Temperature calibration parameters

  gSystem->Load("libOADB");            

  AliOADBContainer* con = new AliOADBContainer("AliEMCALRunDepTempCalibCorrections");
      
  // Get the list of run numbers to be added to the OADB, parameters provided usually in a 
  // root file per run
  // Tar ball with all the files can be found here
  // https://twiki.cern.ch/twiki/bin/viewauth/ALICE/EMCalTimeDependentCalibrations
  
  ifstream fList;
  fList.open("CorrectionFiles/runlist.txt");
  
  Int_t runNumber  = 0;
  Float_t multiplier = 10000; // allows us to store the values in TH1S with some precision
  TString string;
  Int_t nRuns=0;
  Int_t nSM = 12;

  AliEMCALGeometry* geom = AliEMCALGeometry::GetInstance("EMCAL_COMPLETE12SMV1");
 
  if (fList.good()) 
  {

    while( string.ReadLine(fList, kFALSE) ) 
    {
      sscanf(string.Data(), "%d",&runNumber);
      
      if     (runNumber < 140000) nSM = 4;
      else if(runNumber < 200000) nSM = 10;

      if(runNumber>100000){

      multiplier = 10000; // allows us to store the values in TH1S with some precision
      if (runNumber>=kFirst && runNumber<=kLast) { // rescale some runs
	multiplier *= rescaleFactor;
      }
      printf("Run %d multiplier %5.0f\n", runNumber, multiplier);

      // Access class that contains methods to read the content of 
      // the calibration file per run
      AliEMCALCalibTimeDepCorrection  *corr =  new AliEMCALCalibTimeDepCorrection();
      corr->ReadRootInfo(Form("CorrectionFiles/Run%d_Correction.root",runNumber));

      // Init the histogram
      TH1S *h = new TH1S(Form("h%d",runNumber),"",24*48*nSM,0,24*48*nSM);
            
      for(Int_t ism = 0; ism < nSM; ism++) {
        for(Int_t icol = 0; icol < 48; icol++) {
          for(Int_t irow = 0; irow < 24; irow++) {
            Float_t recalFactor = corr->GetCorrection(ism, icol,irow,0);            
            Int_t absID = geom->GetAbsCellIdFromCellIndexes(ism, irow, icol);
            
            h->SetBinContent(absID,(Short_t)(recalFactor*multiplier));
          }
        }
      }
      
      con->AddDefaultObject(h);
      
      //Establishing run number with the correct objects
      con->AppendObject(h,runNumber,runNumber);
      
      delete corr;
      
      nRuns++;
      }
    }
  }
  fList.close();
  printf(" *** nRuns ***  %d\n",nRuns);

  // add dummy object at the end of file:
  runNumber++;
  multiplier = 10000;
  // Init the histogram
  printf("Dummy/extra Run %d at EOF multiplier %5.0f\n", runNumber, multiplier);  
  TH1S *h = new TH1S(Form("h%d",runNumber),"",24*48*nSM,0,24*48*nSM);
            
  for(Int_t ism = 0; ism < nSM; ism++) {
    for(Int_t icol = 0; icol < 48; icol++) {
      for(Int_t irow = 0; irow < 24; irow++) {
	Float_t recalFactor = 1;
	Int_t absID = geom->GetAbsCellIdFromCellIndexes(ism, irow, icol);
            
	h->SetBinContent(absID,(Short_t)(recalFactor*multiplier));
      }
    }
  }
      
  con->AddDefaultObject(h);    
  //Establishing run number with the correct objects
  con->AppendObject(h,runNumber,runNumber);
  
  con->WriteToFile("EMCALTemperatureCorrCalib.root");   
    
}

void Read(Int_t runNumber = 170387)
{
  
  gSystem->Load("libOADB");            
  
  AliOADBContainer *cont=new AliOADBContainer("");
  cont->InitFromFile("$ALICE_ROOT/OADB/EMCAL/EMCALTemperatureCorrCalib.root", "AliEMCALRunDepTempCalibCorrections");
  
  //cout<<"_________--------------- dump ---------------------___________"<<endl;
  //cont->Dump();
  
  //cout<<"cont->GetDefaultList()->Print()"<<endl;
  //cont->GetDefaultList()->Print();
  
  TH1S *h=cont->GetObject(runNumber); //GetObject(int runnumber)
  
  if (h) {
    printf("runNumber %d found\n", runNumber);
  }
  else {
    printf("runNumber %d not found\n", runNumber);
    // let's get the closest runnumber
    Int_t lower = 0;
    Int_t ic = 0;
    Int_t maxEntry = cont->GetNumberOfEntries();

    while ( (ic < maxEntry) && (cont->UpperLimit(ic) < runNumber) ) {
      lower = ic;
      ic++; 
    }

    Int_t closest = lower;
    if ( (ic<maxEntry) && 
	 (cont->LowerLimit(ic)-runNumber) < (runNumber - cont->UpperLimit(lower)) ) {
	 closest = ic;
    }

    cout << "found closest id " << closest 
	 << " from run " << cont->LowerLimit(closest) << endl;
    h = (TH1S*) cont->GetObjectByIndex(closest); 
    h->Print(); // tmp debug
    cout << endl;
  }
  

  AliEMCALGeometry* geom = AliEMCALGeometry::GetInstance("EMCAL_COMPLETE12SMV1");
  
  // Read parameter file line-by-line  
  // Get number of lines first
  
  Int_t nSM = 10;
  
  for(Int_t iabsID = 0; iabsID < 24*48*nSM; iabsID++)
  {
    printf("absID %d, content %d\n",iabsID,h->GetBinContent(iabsID));
    
  }
  
  h->Draw();

}


 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:1
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:2
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:3
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:4
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:5
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:6
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:7
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:8
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:9
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:10
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:11
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:12
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:13
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:14
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:15
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:16
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:17
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:18
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:19
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:20
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:21
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:22
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:23
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:24
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:25
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:26
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:27
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:28
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:29
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:30
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:31
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:32
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:33
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:34
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:35
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:36
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:37
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:38
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:39
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:40
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:41
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:42
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:43
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:44
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:45
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:46
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:47
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:48
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:49
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:50
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:51
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:52
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:53
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:54
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:55
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:56
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:57
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:58
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:59
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:60
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:61
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:62
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:63
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:64
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:65
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:66
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:67
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:68
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:69
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:70
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:71
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:72
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:73
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:74
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:75
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:76
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:77
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:78
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:79
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:80
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:81
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:82
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:83
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:84
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:85
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:86
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:87
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:88
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:89
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:90
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:91
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:92
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:93
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:94
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:95
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:96
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:97
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:98
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:99
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:100
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:101
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:102
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:103
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:104
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:105
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:106
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:107
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:108
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:109
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:110
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:111
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:112
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:113
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:114
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:115
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:116
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:117
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:118
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:119
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:120
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:121
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:122
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:123
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:124
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:125
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:126
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:127
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:128
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:129
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:130
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:131
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:132
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:133
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:134
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:135
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:136
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:137
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:138
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:139
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:140
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:141
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:142
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:143
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:144
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:145
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:146
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:147
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:148
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:149
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:150
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:151
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:152
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:153
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:154
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:155
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:156
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:157
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:158
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:159
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:160
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:161
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:162
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:163
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:164
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:165
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:166
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:167
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:168
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:169
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:170
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:171
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:172
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:173
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:174
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:175
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:176
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:177
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:178
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:179
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:180
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:181
 CreateEMCAL_OADB_RunByRunTemperatureECalibCorrection.C:182