double sigmaEffective( const TH1F & hist) { TAxis *xaxis = hist.GetXaxis(); Int_t nb = xaxis->GetNbins(); if(nb < 10) { std::cout << "effsigma: Not a valid histo. nbins = " << nb << std::endl; return 0.; } Double_t bwid = xaxis->GetBinWidth(1); if(bwid == 0) { std::cout << "effsigma: Not a valid histo. bwid = " << bwid << std::endl; return 0.; } Double_t xmin = xaxis->GetXmin(); Double_t ave = hist.GetMean(); Double_t rms = hist.GetRMS(); Double_t total=0.; for(Int_t i=0; i nb/10) nrms=nb/10; // Could be tuned... Double_t widmin=9999999.; for(Int_t iscan=-nrms;iscan rlim) break; if(total > rlim) break; } else ierr=1; if(kbm > 0) { kbm--; xk-=bwid; bin=hist.GetBinContent(kbm); total+=bin; if(total > rlim) break; } else ierr=1; } Double_t dxf=(total-rlim)*bwid/bin; Double_t wid=(xj-xk+bwid-dxf)*0.5; if(wid < widmin) { widmin=wid; ismin=iscan; } } if(ismin == nrms || ismin == -nrms) ierr=3; if(ierr != 0) std::cout << "effsigma: Error of type " << ierr << std::endl; return widmin; }