Rebin

Rebin a variable bin-width histogram.

This tutorial illustrates how to:

  • create a variable bin-width histogram with a binning such that the population per bin is about the same.
  • rebin a variable bin-width histogram into another one.

Author: Rene Brun
This notebook tutorial was automatically generated with ROOTBOOK-izer from the macro found in the ROOT repository on Thursday, May 19, 2022 at 08:15 AM.

In [1]:
%%cpp -d
#include "TH1.h"
#include "TCanvas.h"

Create a fix bin histogram

In [2]:
TH1F *h = new TH1F("h","test rebin",100,-3,3);
Int_t nentries = 1000;
h->FillRandom("gaus",nentries);
Double_t xbins[1001];
Int_t k=0;
TAxis *axis = h->GetXaxis();
for (Int_t i=1;i<=100;i++) {
   Int_t y = (Int_t)h->GetBinContent(i);
   if (y <=0) continue;
   Double_t dx = axis->GetBinWidth(i)/y;
   Double_t xmin = axis->GetBinLowEdge(i);
   for (Int_t j=0;j<y;j++) {
      xbins[k] = xmin +j*dx;
      k++;
   }
}
xbins[k] = axis->GetXmax();

Create a variable bin-width histogram out of fix bin histogram new rebinned histogram should have about 10 entries per bin

In [3]:
TH1F *hnew = new TH1F("hnew","rebinned",k,xbins);
hnew->FillRandom("gaus",10*nentries);

Rebin hnew keeping only 50% of the bins

In [4]:
Double_t xbins2[501];
Int_t kk=0;
for (Int_t j=0;j<k;j+=2) {
   xbins2[kk] = xbins[j];
   kk++;
}
xbins2[kk] = xbins[k];
TH1F *hnew2 = (TH1F*)hnew->Rebin(kk,"hnew2",xbins2);

Draw the 3 histograms

In [5]:
TCanvas *c1 = new TCanvas("c1","c1",800,1000);
c1->Divide(1,3);
c1->cd(1);
h->Draw();
c1->cd(2);
hnew->Draw();
c1->cd(3);
hnew2->Draw();

Draw all canvases

In [6]:
%jsroot on
gROOT->GetListOfCanvases()->Draw()