//This macro shows how to divide and add 1D histograms. Based on ROOT 5 primer page number 33 (5.2) void format_hist(TH1F *h, int linecolor){ h->SetLineWidth(3); h->SetLineColor(linecolor); } void histexample3() { gROOT->Reset(); //If I do not include this line, after running the macro three times, it starts behaving weird. Try it. //These lines help potential memory leaks. Note that line 16 and 17 are both required. Why? Cause of its use in line 24 and 44. Same for 14 and 15. delete gROOT->FindObject("sig_h"); delete gROOT->FindObject("gaus_h1"); delete gROOT->FindObject("gaus_h1"); delete gROOT->FindObject("gaus_h2"); delete gROOT->FindObject("exp_h"); delete gROOT->FindObject("exp_h"); //four histograms TH1F* sig_h = new TH1F("sig_h","Signal Histogram",50,0,10); TH1F* gaus_h1 = new TH1F("gaus_h1","Gaus Histogram 1",30, 0, 10); TH1F* gaus_h2 = new TH1F("gaus_h2", "Gaus Histogram 2", 30,0,10); TH1F* bkg_h = new TH1F("exp_h", "Exponential Histogram",50,0,10); TRandom3 rndgen(0); for (int imeas=0;imeas<4000;imeas++){ exp_h->Fill(rndgen.Exp(4)); if (imeas%4==0) {gaus_h1->Fill(rndgen.Gaus(5,2));} if (imeas%4==0) {gaus_h2->Fill(rndgen.Gaus(5,2));} if (imeas%10==0) {sig_h->Fill(rndgen.Gaus(5,.5));} } //Format Histograms TH1F* histograms[4] = {sig_h,bkg_h,gaus_h1,gaus_h2}; for (int i = 0; i<4;++i){ histograms[i]->Sumw2(); format_hist(histograms[i],i+1); } //Sum of histograms TH1F* sum_h = new TH1F(*bkg_h); sum_h->Add(sig_h,1.); sum_h->SetTitle("Exponential + Gaussian"); format_hist(sum_h,kBlue); TCanvas* c_sum = new TCanvas(); sum_h->Draw("hist"); bkg_h->Draw("SameHist"); sig_h->Draw("SameHist"); //Divide TH1F* dividend = new TH1F(*gaus_h1); dividend->Divide(gaus_h2); dividend ->SetTitle(";X axis;Gaus Histo 1/Gaus Histo 2"); format_hist(dividend,kOrange); gaus_h1->SetTitle(";;Gaus Histo 1 and Gaus Histo 2"); gStyle->SetOptStat(0); TCanvas *c_divide = new TCanvas(); c_divide->Divide(1,2,0,0); c_divide->cd(1); c_divide->GetPad(1)->SetRightMargin(.01); gaus_h1->DrawNormalized("Hist"); gaus_h2->DrawNormalized("HistSame"); }