Hi Rooters, When rebinning my histograms I ran into the following interesting behaviour: root [0] h = new TH1F("h","h",4695,0,700425) (class TH1F*)0x886f260 root [1] h->GetBinWidth(1) (Axis_t)1.49185303514376983e+02 root [2] h->Rebin(2) (class TH1*)0x886f260 root [3] h->GetBinWidth(1)/2. (double)1.49217085641244154e+02 In other words: the binwidth and thus the x-scale changes by as much as 213 parts-per-million, which is rather annoying if you try to measure a frequency to less than 1 ppm!!! I traced this down to TH1::Rebin (not so difficult) where I found: Int_t nbins = fXaxis.GetNbins(); Float_t xmin = fXaxis.GetXmin(); Float_t xmax = fXaxis.GetXmax(); ..... Int_t newbins = nbins/ngroup; ..... hnew->SetBins(newbins,xmin,xmax); This of course only works if nbins/ngroup is integer to begin with!!!! The fix for this would be to add the line xmax = fXaxis.GetBinUpEdge(newbins*ngroup); just before hnew->SetBins(newbins,xmin,xmax). And then it would be more elegant to not ignore the underflows and overflows, where the latter also contains the content of those bins that were lost in the rebinning. Greetings, -- Gerco Dr. C.J.G. Onderwater Nuclear Physics Laboratory 312 Loomis Laboratory of Physics University of Illinois at Urbana-Champaign 1110 West Green Street Urbana, IL 61801-3080 Phone : (217) 244-7363 Fax : (217) 333-1215 E-mail: onderwat@uiuc.edu
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:27 MET