TH1D *combine(TH1D *pure, TH1D *injected) {
TH1D *eff=new TH1D(*pure);
eff->SetLineColor(2);
eff->Add(injected);
eff->Scale(0.5);
for (Int_t i=1; i<16; i++) {
Double_t c=pure->GetBinContent(i);
Double_t e=pure->GetBinError(i);
eff->SetBinContent(i,c);
eff->SetBinError(i,e);
}
for (Int_t i=25; i<=eff->GetNbinsX(); i++) {
Double_t c=injected->GetBinContent(i);
Double_t e=injected->GetBinError(i);
eff->SetBinContent(i,c);
eff->SetBinError(i,e);
}
return eff;
}
void comb_eff(const Char_t *centr) {
TFile *non=TFile::Open("SpectraV0CutVariations_nonInj.root");
TFile *all=TFile::Open("SpectraV0CutVariations_all.root");
TFile *file=TFile::Open("comb_eff.root","update");
TString name;
TH1D *hnon, *hall, *comb, *r;
TCanvas *c=new TCanvas();
c->Divide(3,2);
non->cd();
name="eff_K0s_nonInj_"; name+=centr;
hnon=(TH1D*)gDirectory->Get(name.Data());
all->cd();
name="eff_K0s_"; name+=centr;
hall=(TH1D*)gDirectory->Get(name.Data());
comb=combine(hnon,hall);
name="eff_K0s_comb_"; name+=centr;
comb->SetName(name.Data());
c->cd(1);
hall->Draw(); comb->Draw("same");
c->cd(4); gPad->SetGridx(); gPad->SetGridy();
r=new TH1D(*hall); r->Divide(comb);
r->SetMinimum(0.8); r->SetMaximum(1.2); r->Draw();
file->cd(); comb->Write();
non->cd();
name="eff_Lambda_nonInj_"; name+=centr;
hnon=(TH1D*)gDirectory->Get(name.Data());
all->cd();
name="eff_Lambda_"; name+=centr;
hall=(TH1D*)gDirectory->Get(name.Data());
comb=combine(hnon,hall);
name="eff_Lambda_comb_"; name+=centr;
comb->SetName(name.Data());
c->cd(2);
hall->Draw(); comb->Draw("same");
c->cd(5); gPad->SetGridx(); gPad->SetGridy();
r=new TH1D(*hall); r->Divide(comb);
r->SetMinimum(0.8); r->SetMaximum(1.2); r->Draw();
file->cd(); comb->Write();
non->cd();
name="eff_LambdaBar_nonInj_"; name+=centr;
hnon=(TH1D*)gDirectory->Get(name.Data());
all->cd();
name="eff_LambdaBar_"; name+=centr;
hall=(TH1D*)gDirectory->Get(name.Data());
comb=combine(hnon,hall);
name="eff_LambdaBar_comb_"; name+=centr;
comb->SetName(name.Data());
c->cd(3);
hall->Draw(); comb->Draw("same");
c->cd(6); gPad->SetGridx(); gPad->SetGridy();
r=new TH1D(*hall); r->Divide(comb);
r->SetMinimum(0.8); r->SetMaximum(1.2); r->Draw();
file->cd(); comb->Write();
file->Close();
}
void Loop() {
const Char_t *cent[]={"0005","0010","1020","2040","4060","6080","8090"};
Int_t nCent=sizeof(cent)/sizeof(const Char_t *);
for (Int_t i=0; i<nCent; i++) {
cout<<cent[i]<<endl;
comb_eff(cent[i]);
}
}