#include "TFile.h"
#include "TH1.h"
#include "TH1D.h"
#include "TMath.h"
#include <Riostream.h>
//
// Multiply two histos of variable bin width
//
TH1 * MultiplyHistos(TH1 *h1, TH1 *h2) {
Int_t nbins1 = h1->GetNbinsX();
Int_t nbins2 = h2->GetNbinsX();
Double_t binwidth1 = h1->GetBinWidth(1);
Double_t binwidth2 = h2->GetBinWidth(1);
if ( nbins1!=nbins2 || binwidth1!=binwidth2 ) {
cout << "Histos do not have the same binning, do not seem compatible" << endl;
return NULL;
}
//
// Get the bins & limits
Double_t *limits = new Double_t[nbins1+1];
Double_t xlow=0., binwidth=0.;
for (Int_t i=1; i<=nbins1; i++) {
binwidth = h1->GetBinWidth(i);
xlow = h1->GetBinLowEdge(i);
limits[i-1] = xlow;
}
limits[nbins1] = xlow + binwidth;
TH1D *hMultiply = new TH1D("hMultiply","hMultiply",nbins1,limits);
Double_t value=0., err=0.;
for (Int_t ibin=1; ibin<=nbins1; ibin++) {
value = h1->GetBinContent(ibin) * h2->GetBinContent(ibin);
err = value * TMath::Sqrt( (h1->GetBinError(ibin)/h1->GetBinContent(ibin)) * (h1->GetBinError(ibin)/h1->GetBinContent(ibin)) +
(h2->GetBinError(ibin)/h2->GetBinContent(ibin)) * (h2->GetBinError(ibin)/h2->GetBinContent(ibin)) );
hMultiply->SetBinContent(ibin,value);
hMultiply->SetBinError(ibin,err);
}
return (TH1*)hMultiply;
}
//
// Main function
//
void ComputeEfficiencyInputFromTwoSteps (const char* recolhc10d3filename="Distributions.root",
const char* recolhc10d3histoname="RECPIDpt",
const char* simuAcclhc10d3filename="Distributions.root",
const char* simuAcclhc10d3histoname="MCAccpt",
const char* simuLimAcclhc10d4filename="",
const char* simuLimAcclhc10d4histoname="MCLimAccpt",
const char* simuAcclhc10d4filename="",
const char* simuAcclhc10d4histoname="MCAccpt",
const char* outfilename="ComputeEfficiencyInputFromTwoSteps.root")
{
TFile *recolhc10d3file = new TFile(recolhc10d3filename,"read");
TH1D *hrecolhc10d3 = (TH1D*)recolhc10d3file->Get(recolhc10d3histoname);
TFile *simuAcclhc10d3file = new TFile(simuAcclhc10d3filename,"read");
TH1D *hsimuAcclhc10d3 = (TH1D*)simuAcclhc10d3file->Get(simuAcclhc10d3histoname);
TFile *simuLimAcclhc10d4file = new TFile(simuLimAcclhc10d4filename,"read");
TH1D *hsimuLimAcclhc10d4 = (TH1D*)simuLimAcclhc10d4file->Get(simuLimAcclhc10d4histoname);
TFile *simuAcclhc10d4file = new TFile(simuAcclhc10d4filename,"read");
TH1D *hsimuAcclhc10d4 = (TH1D*)simuAcclhc10d4file->Get(simuAcclhc10d4histoname);
TFile *out = new TFile(outfilename,"recreate");
TH1D *hRecoPIDCorr = (TH1D*)MultiplyHistos(hrecolhc10d3,hsimuAcclhc10d4);
hRecoPIDCorr->SetNameTitle("hRecoPIDCorr","hRecoPIDCorr");
TH1D *hSimuCorr = (TH1D*)MultiplyHistos(hsimuAcclhc10d3,hsimuLimAcclhc10d4);
hSimuCorr->SetNameTitle("hSimuCorr","hSimuCorr");
out->cd();
hRecoPIDCorr->Write();
hSimuCorr->Write();
out->Close();
}
ComputeEfficiencyInputFromTwoSteps.C:1 ComputeEfficiencyInputFromTwoSteps.C:2 ComputeEfficiencyInputFromTwoSteps.C:3 ComputeEfficiencyInputFromTwoSteps.C:4 ComputeEfficiencyInputFromTwoSteps.C:5 ComputeEfficiencyInputFromTwoSteps.C:6 ComputeEfficiencyInputFromTwoSteps.C:7 ComputeEfficiencyInputFromTwoSteps.C:8 ComputeEfficiencyInputFromTwoSteps.C:9 ComputeEfficiencyInputFromTwoSteps.C:10 ComputeEfficiencyInputFromTwoSteps.C:11 ComputeEfficiencyInputFromTwoSteps.C:12 ComputeEfficiencyInputFromTwoSteps.C:13 ComputeEfficiencyInputFromTwoSteps.C:14 ComputeEfficiencyInputFromTwoSteps.C:15 ComputeEfficiencyInputFromTwoSteps.C:16 ComputeEfficiencyInputFromTwoSteps.C:17 ComputeEfficiencyInputFromTwoSteps.C:18 ComputeEfficiencyInputFromTwoSteps.C:19 ComputeEfficiencyInputFromTwoSteps.C:20 ComputeEfficiencyInputFromTwoSteps.C:21 ComputeEfficiencyInputFromTwoSteps.C:22 ComputeEfficiencyInputFromTwoSteps.C:23 ComputeEfficiencyInputFromTwoSteps.C:24 ComputeEfficiencyInputFromTwoSteps.C:25 ComputeEfficiencyInputFromTwoSteps.C:26 ComputeEfficiencyInputFromTwoSteps.C:27 ComputeEfficiencyInputFromTwoSteps.C:28 ComputeEfficiencyInputFromTwoSteps.C:29 ComputeEfficiencyInputFromTwoSteps.C:30 ComputeEfficiencyInputFromTwoSteps.C:31 ComputeEfficiencyInputFromTwoSteps.C:32 ComputeEfficiencyInputFromTwoSteps.C:33 ComputeEfficiencyInputFromTwoSteps.C:34 ComputeEfficiencyInputFromTwoSteps.C:35 ComputeEfficiencyInputFromTwoSteps.C:36 ComputeEfficiencyInputFromTwoSteps.C:37 ComputeEfficiencyInputFromTwoSteps.C:38 ComputeEfficiencyInputFromTwoSteps.C:39 ComputeEfficiencyInputFromTwoSteps.C:40 ComputeEfficiencyInputFromTwoSteps.C:41 ComputeEfficiencyInputFromTwoSteps.C:42 ComputeEfficiencyInputFromTwoSteps.C:43 ComputeEfficiencyInputFromTwoSteps.C:44 ComputeEfficiencyInputFromTwoSteps.C:45 ComputeEfficiencyInputFromTwoSteps.C:46 ComputeEfficiencyInputFromTwoSteps.C:47 ComputeEfficiencyInputFromTwoSteps.C:48 ComputeEfficiencyInputFromTwoSteps.C:49 ComputeEfficiencyInputFromTwoSteps.C:50 ComputeEfficiencyInputFromTwoSteps.C:51 ComputeEfficiencyInputFromTwoSteps.C:52 ComputeEfficiencyInputFromTwoSteps.C:53 ComputeEfficiencyInputFromTwoSteps.C:54 ComputeEfficiencyInputFromTwoSteps.C:55 ComputeEfficiencyInputFromTwoSteps.C:56 ComputeEfficiencyInputFromTwoSteps.C:57 ComputeEfficiencyInputFromTwoSteps.C:58 ComputeEfficiencyInputFromTwoSteps.C:59 ComputeEfficiencyInputFromTwoSteps.C:60 ComputeEfficiencyInputFromTwoSteps.C:61 ComputeEfficiencyInputFromTwoSteps.C:62 ComputeEfficiencyInputFromTwoSteps.C:63 ComputeEfficiencyInputFromTwoSteps.C:64 ComputeEfficiencyInputFromTwoSteps.C:65 ComputeEfficiencyInputFromTwoSteps.C:66 ComputeEfficiencyInputFromTwoSteps.C:67 ComputeEfficiencyInputFromTwoSteps.C:68 ComputeEfficiencyInputFromTwoSteps.C:69 ComputeEfficiencyInputFromTwoSteps.C:70 ComputeEfficiencyInputFromTwoSteps.C:71 ComputeEfficiencyInputFromTwoSteps.C:72 ComputeEfficiencyInputFromTwoSteps.C:73 ComputeEfficiencyInputFromTwoSteps.C:74 ComputeEfficiencyInputFromTwoSteps.C:75 ComputeEfficiencyInputFromTwoSteps.C:76 ComputeEfficiencyInputFromTwoSteps.C:77 ComputeEfficiencyInputFromTwoSteps.C:78 ComputeEfficiencyInputFromTwoSteps.C:79 ComputeEfficiencyInputFromTwoSteps.C:80 ComputeEfficiencyInputFromTwoSteps.C:81 ComputeEfficiencyInputFromTwoSteps.C:82 ComputeEfficiencyInputFromTwoSteps.C:83 ComputeEfficiencyInputFromTwoSteps.C:84 ComputeEfficiencyInputFromTwoSteps.C:85 ComputeEfficiencyInputFromTwoSteps.C:86 ComputeEfficiencyInputFromTwoSteps.C:87