#include "TH1.h" #include "TCanvas.h" #include "TRandom3.h" int plot_rebin_divide() { TRandom3 rand(47); TH1F * numer = new TH1F("numer", "numer", 40, 0., 200.); for ( int j = 0; j < 200; ++j ) numer->Fill(rand.Gaus(80,30)); TH1F * denom = new TH1F("denom", "denom", 40, 0., 200.); for ( int j = 0; j < 1400; ++j ) denom->Fill(rand.Gaus(80,170)); TCanvas *can = new TCanvas("can", "", 700, 500); can->Divide(2,2); can->cd(1); numer->Draw(); can->cd(2); denom->Draw(); int nbins = 6; double bins[] = {0.0, 40.0, 80.0, 90.0, 150.0, 200.0}; numer = (TH1F*) numer->Rebin(nbins-1, "%s_rebin_number", bins); can->cd(3); numer->Draw(); denom = (TH1F*) denom->Rebin(nbins-1, "%s_rebin_denom", bins); can->cd(4); denom->Draw(); TH1F * ratioFails = new TH1F("ratioFails", "ratioFails", numer->GetXaxis()->GetNbins(), numer->GetXaxis()->GetXmin(), numer->GetXaxis()->GetXmax() ); ratioFails->SetMarkerStyle(8); ratioFails->Divide(numer, denom, 1.0, 1.0); TCanvas* c2 = new TCanvas("can2", "", 700, 500); c2->Divide(1,2); c2->cd(1); ratioFails->Draw(); TH1F* ratioWorks = (TH1F*) numer->Clone(); ratioWorks->SetMarkerStyle(8); ratioWorks->Divide(denom); c2->cd(2); ratioWorks->Draw(); return 0; }