ROOT logo
#if !defined(__CINT__) || defined(__MAKECINT__)
#include <TH1F.h>
#include <TH2F.h>
#include <TF1.h>
#include <TPad.h>
#include <TGraphErrors.h>
#include <TROOT.h>
#include <TFile.h>
#include <TTree.h>
#include <TGrid.h>
#include <TGridResult.h>
#include <TMath.h>
#include <TCanvas.h>
#include <TStyle.h>
#include <TLatex.h>
#include <AliCDBEntry.h>
#include <AliITSresponseSDD.h>

#endif

// Inputs: Output of MakeSDDCalib.C + AliITSresponseSDD Object used to produce the cpass1 (default Run192772_192779_v0_s0.root)
// Outputs: new ADCtoKeV and ADCvsDriftTimeHistos
// Launch as: aliroot MakeCorrectionFromOutputCalib.C+

void MakeOCDBCorrectionFromOutputADCCalib(TString fname=".",TString OCDBname="Run192772_192779_v0_s0")
{
  Printf("Opening file CalibResults.root in %s/",fname.Data());
  TFile *fin = new TFile(Form("%s/SDDADCCalibResults.root",fname.Data()));
    
  TH1F *hmpvModpar0=(TH1F*)fin->Get("hmpvModpar0");
  TH1F *hmpvModpar1=(TH1F*)fin->Get("hmpvModpar1");
  Float_t s=0.0101;//Default ADC vs drift time
  // getting ADC2keV
  TFile* fr=TFile::Open(Form("%s.root",OCDBname.Data()));
  AliCDBEntry* e=(AliCDBEntry*)fr->Get("AliCDBEntry");
  AliITSresponseSDD* r=(AliITSresponseSDD*)e->GetObject();
  TH1F* hADCtokeV=new TH1F("hADCtokeV","",260,239.5,499.5);
  TH1F* hADCvsDriftTime=new TH1F("hADCvsDriftTime","",260,239.5,499.5);
  r->ls();
    
  for(Int_t iMod=240; iMod<500; iMod++){
    Float_t ak=r->GetADCtokeV(iMod);
    Float_t adcdrtime=r->GetADCvsDriftTime(iMod);
    printf("mod %d\nadc->keV=%f ",iMod,ak);
    hADCtokeV->SetBinContent(iMod-240+1,ak);
    hADCvsDriftTime->SetBinContent(iMod-240+1,adcdrtime);
    //calculate new ADC2KeV
    Double_t kprim=hmpvModpar0->GetBinContent(hmpvModpar0->FindBin(iMod));
    if(kprim==0)kprim=84;
    if(iMod==376)kprim=84;
    Double_t Corr=kprim*ak/84;
    printf("mpv=%f | Corr(adc->keV*mpv/84)=%f\n",kprim,Corr);
    hmpvModpar0->SetBinContent(hmpvModpar0->FindBin(iMod),Corr);
    //Calculate new ADCvsDrTime
    Double_t sprim=hmpvModpar1->GetBinContent(hmpvModpar1->FindBin(iMod));
    if(iMod==376){
      sprim=0;
    }
    Double_t Corr2=adcdrtime-(sprim*ak/2);
    hmpvModpar1->SetBinContent(hmpvModpar1->FindBin(iMod),Corr2);
    printf("ADCvsDriftTime=%f | Corr(ADCvsDriftTime_old-(ADCvsDriftTime_new*adc->keV/2))=%f\n",adcdrtime,Corr2);
  }
    
  hmpvModpar0->GetYaxis()->SetTitle("K^{*}=KK'/84");
  hmpvModpar1->GetYaxis()->SetTitle("S^{*}=S-S'K/2");
  hmpvModpar0->SetTitle("hADCtokeV - New");
  hmpvModpar0->SetName("hADCtokeV");
  hADCtokeV->SetTitle("hADCtokeV - Run166530_999999999_v4_s0");
  hADCtokeV->SetLineColor(2);
  TCanvas *c0=new TCanvas("c0","c0");
  c0->cd(1);
  hmpvModpar0->DrawClone("HIST");
  hADCtokeV->DrawClone("HISTSAME");
  gPad->BuildLegend();
    
    
  hmpvModpar1->SetTitle("hADCvsDriftTime - New");
  hmpvModpar1->SetName("hADCvsDriftTime");
  hADCvsDriftTime->SetTitle("hADCvsDriftTime - Run166530_999999999_v4_s0");
  hADCvsDriftTime->SetLineColor(2);
  TCanvas *c1=new TCanvas("c1","c1");
  hmpvModpar1->DrawClone("HIST");
  hADCvsDriftTime->DrawClone("HISTSAME");
  c1->BuildLegend();
  TFile *out=new TFile(Form("%s/CorrectiondEdxSDD_%s_%s.root",fname.Data(),fname.Data(),OCDBname.Data()),"recreate");
  hmpvModpar0->Write();
  hmpvModpar1->Write();
  out->Close();
  delete out;
    
} //end main

 MakeOCDBCorrectionFromOutputADCCalib.C:1
 MakeOCDBCorrectionFromOutputADCCalib.C:2
 MakeOCDBCorrectionFromOutputADCCalib.C:3
 MakeOCDBCorrectionFromOutputADCCalib.C:4
 MakeOCDBCorrectionFromOutputADCCalib.C:5
 MakeOCDBCorrectionFromOutputADCCalib.C:6
 MakeOCDBCorrectionFromOutputADCCalib.C:7
 MakeOCDBCorrectionFromOutputADCCalib.C:8
 MakeOCDBCorrectionFromOutputADCCalib.C:9
 MakeOCDBCorrectionFromOutputADCCalib.C:10
 MakeOCDBCorrectionFromOutputADCCalib.C:11
 MakeOCDBCorrectionFromOutputADCCalib.C:12
 MakeOCDBCorrectionFromOutputADCCalib.C:13
 MakeOCDBCorrectionFromOutputADCCalib.C:14
 MakeOCDBCorrectionFromOutputADCCalib.C:15
 MakeOCDBCorrectionFromOutputADCCalib.C:16
 MakeOCDBCorrectionFromOutputADCCalib.C:17
 MakeOCDBCorrectionFromOutputADCCalib.C:18
 MakeOCDBCorrectionFromOutputADCCalib.C:19
 MakeOCDBCorrectionFromOutputADCCalib.C:20
 MakeOCDBCorrectionFromOutputADCCalib.C:21
 MakeOCDBCorrectionFromOutputADCCalib.C:22
 MakeOCDBCorrectionFromOutputADCCalib.C:23
 MakeOCDBCorrectionFromOutputADCCalib.C:24
 MakeOCDBCorrectionFromOutputADCCalib.C:25
 MakeOCDBCorrectionFromOutputADCCalib.C:26
 MakeOCDBCorrectionFromOutputADCCalib.C:27
 MakeOCDBCorrectionFromOutputADCCalib.C:28
 MakeOCDBCorrectionFromOutputADCCalib.C:29
 MakeOCDBCorrectionFromOutputADCCalib.C:30
 MakeOCDBCorrectionFromOutputADCCalib.C:31
 MakeOCDBCorrectionFromOutputADCCalib.C:32
 MakeOCDBCorrectionFromOutputADCCalib.C:33
 MakeOCDBCorrectionFromOutputADCCalib.C:34
 MakeOCDBCorrectionFromOutputADCCalib.C:35
 MakeOCDBCorrectionFromOutputADCCalib.C:36
 MakeOCDBCorrectionFromOutputADCCalib.C:37
 MakeOCDBCorrectionFromOutputADCCalib.C:38
 MakeOCDBCorrectionFromOutputADCCalib.C:39
 MakeOCDBCorrectionFromOutputADCCalib.C:40
 MakeOCDBCorrectionFromOutputADCCalib.C:41
 MakeOCDBCorrectionFromOutputADCCalib.C:42
 MakeOCDBCorrectionFromOutputADCCalib.C:43
 MakeOCDBCorrectionFromOutputADCCalib.C:44
 MakeOCDBCorrectionFromOutputADCCalib.C:45
 MakeOCDBCorrectionFromOutputADCCalib.C:46
 MakeOCDBCorrectionFromOutputADCCalib.C:47
 MakeOCDBCorrectionFromOutputADCCalib.C:48
 MakeOCDBCorrectionFromOutputADCCalib.C:49
 MakeOCDBCorrectionFromOutputADCCalib.C:50
 MakeOCDBCorrectionFromOutputADCCalib.C:51
 MakeOCDBCorrectionFromOutputADCCalib.C:52
 MakeOCDBCorrectionFromOutputADCCalib.C:53
 MakeOCDBCorrectionFromOutputADCCalib.C:54
 MakeOCDBCorrectionFromOutputADCCalib.C:55
 MakeOCDBCorrectionFromOutputADCCalib.C:56
 MakeOCDBCorrectionFromOutputADCCalib.C:57
 MakeOCDBCorrectionFromOutputADCCalib.C:58
 MakeOCDBCorrectionFromOutputADCCalib.C:59
 MakeOCDBCorrectionFromOutputADCCalib.C:60
 MakeOCDBCorrectionFromOutputADCCalib.C:61
 MakeOCDBCorrectionFromOutputADCCalib.C:62
 MakeOCDBCorrectionFromOutputADCCalib.C:63
 MakeOCDBCorrectionFromOutputADCCalib.C:64
 MakeOCDBCorrectionFromOutputADCCalib.C:65
 MakeOCDBCorrectionFromOutputADCCalib.C:66
 MakeOCDBCorrectionFromOutputADCCalib.C:67
 MakeOCDBCorrectionFromOutputADCCalib.C:68
 MakeOCDBCorrectionFromOutputADCCalib.C:69
 MakeOCDBCorrectionFromOutputADCCalib.C:70
 MakeOCDBCorrectionFromOutputADCCalib.C:71
 MakeOCDBCorrectionFromOutputADCCalib.C:72
 MakeOCDBCorrectionFromOutputADCCalib.C:73
 MakeOCDBCorrectionFromOutputADCCalib.C:74
 MakeOCDBCorrectionFromOutputADCCalib.C:75
 MakeOCDBCorrectionFromOutputADCCalib.C:76
 MakeOCDBCorrectionFromOutputADCCalib.C:77
 MakeOCDBCorrectionFromOutputADCCalib.C:78
 MakeOCDBCorrectionFromOutputADCCalib.C:79
 MakeOCDBCorrectionFromOutputADCCalib.C:80
 MakeOCDBCorrectionFromOutputADCCalib.C:81
 MakeOCDBCorrectionFromOutputADCCalib.C:82
 MakeOCDBCorrectionFromOutputADCCalib.C:83
 MakeOCDBCorrectionFromOutputADCCalib.C:84
 MakeOCDBCorrectionFromOutputADCCalib.C:85
 MakeOCDBCorrectionFromOutputADCCalib.C:86
 MakeOCDBCorrectionFromOutputADCCalib.C:87
 MakeOCDBCorrectionFromOutputADCCalib.C:88
 MakeOCDBCorrectionFromOutputADCCalib.C:89
 MakeOCDBCorrectionFromOutputADCCalib.C:90
 MakeOCDBCorrectionFromOutputADCCalib.C:91
 MakeOCDBCorrectionFromOutputADCCalib.C:92
 MakeOCDBCorrectionFromOutputADCCalib.C:93