Mike Miller wrote: > > Does anyone have a macro for rebinning two dimensional > histograms? > Hi Mike, Here is a macro to do this job. Rene Brun void rebin2(TH1 *h, Int_t ngx, Int_t ngy) { //Rebin 2-d histogram h, grouping ngx bins together along X //and ngy bins together along Y //NB: this macro ignores histogram errors if defined //make a clone of h TH1 *hold = (TH1*)h->Clone(); hold->SetDirectory(0); Int_t nbinsx = hold->GetXaxis()->GetNbins(); Int_t nbinsy = hold->GetYaxis()->GetNbins(); Float_t xmin = hold->GetXaxis()->GetXmin(); Float_t xmax = hold->GetXaxis()->GetXmax(); Float_t ymin = hold->GetYaxis()->GetXmin(); Float_t ymax = hold->GetYaxis()->GetXmax(); Int_t nx = nbinsx/ngx; Int_t ny = nbinsy/ngy; h->SetBins (nx,xmin,xmax,ny,ymin,ymax); //loop on all bins to reset contents and errors Double_t cu; Float_t bx,by; Int_t ix,iy,ibin,bin,binx,biny; for (biny=1;biny<=nbinsy;biny++) { for (binx=1;binx<=nbinsx;binx++) { ibin = h->GetBin(binx,biny); h->SetBinContent(ibin,0); } } //loop on all bins and refill for (biny=1;biny<=nbinsy;biny++) { by = hold->GetYaxis()->GetBinCenter(biny); iy = h->GetYaxis()->FindBin(by); for (binx=1;binx<=nbinsx;binx++) { bx = hold->GetXaxis()->GetBinCenter(binx); ix = h->GetXaxis()->FindBin(bx); bin = hold->GetBin(binx,biny); ibin= h->GetBin(ix,iy); cu = hold->GetBinContent(bin); h->AddBinContent(ibin,cu); } } delete hold; }
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:16 MET