41 ClassImp(RooParamBinning);
49 RooParamBinning::RooParamBinning(
const char* name) :
50 RooAbsBinning(name), _xlo(0), _xhi(0), _nbins(100), _binw(0), _lp(0), _owner(0)
60 RooParamBinning::RooParamBinning(RooAbsReal& xloIn, RooAbsReal& xhiIn, Int_t nBins,
const char* name) :
77 RooParamBinning::~RooParamBinning()
79 if (_array)
delete[] _array ;
89 RooParamBinning::RooParamBinning(
const RooParamBinning& other,
const char* name) :
90 RooAbsBinning(name), _binw(0), _owner(0)
96 _xlo = (RooAbsReal*) other._lp->at(0) ;
97 _xhi = (RooAbsReal*) other._lp->at(1) ;
107 _nbins = other._nbins ;
121 void RooParamBinning::insertHook(RooAbsRealLValue& owner)
const
136 _lp =
new RooListProxy(Form(
"range::%s",GetName()),
"lp",&owner,kFALSE,kTRUE) ;
151 void RooParamBinning::removeHook(RooAbsRealLValue& )
const
170 void RooParamBinning::setRange(Double_t newxlo, Double_t newxhi)
173 coutE(InputArguments) <<
"RooParamBinning::setRange: ERROR low bound > high bound" << endl ;
177 RooAbsRealLValue* xlolv =
dynamic_cast<RooAbsRealLValue*
>(xlo()) ;
179 xlolv->setVal(newxlo) ;
181 coutW(InputArguments) <<
"RooParamBinning::setRange: WARNING lower bound not represented by lvalue, cannot set lower bound value through setRange()" << endl ;
184 RooAbsRealLValue* xhilv =
dynamic_cast<RooAbsRealLValue*
>(xhi()) ;
186 xhilv->setVal(newxhi) ;
188 coutW(InputArguments) <<
"RooParamBinning::setRange: WARNING upper bound not represented by lvalue, cannot set upper bound value through setRange()" << endl ;
198 Int_t RooParamBinning::binNumber(Double_t x)
const
200 if (x >= xhi()->getVal())
return _nbins-1 ;
201 if (x < xlo()->getVal())
return 0 ;
203 return Int_t((x - xlo()->getVal())/averageBinWidth()) ;
211 Double_t RooParamBinning::binCenter(Int_t i)
const
213 if (i<0 || i>=_nbins) {
214 coutE(InputArguments) <<
"RooParamBinning::binCenter ERROR: bin index " << i
215 <<
" is out of range (0," << _nbins-1 <<
")" << endl ;
219 return xlo()->getVal() + (i + 0.5)*averageBinWidth() ;
228 Double_t RooParamBinning::binWidth(Int_t )
const
230 return (xhi()->getVal()-xlo()->getVal())/_nbins ;
238 Double_t RooParamBinning::binLow(Int_t i)
const
240 if (i<0 || i>=_nbins) {
241 coutE(InputArguments) <<
"RooParamBinning::binLow ERROR: bin index " << i
242 <<
" is out of range (0," << _nbins-1 <<
")" << endl ;
246 return xlo()->getVal() + i*binWidth(i) ;
254 Double_t RooParamBinning::binHigh(Int_t i)
const
256 if (i<0 || i>=_nbins) {
257 coutE(InputArguments) <<
"RooParamBinning::fitBinHigh ERROR: bin index " << i
258 <<
" is out of range (0," << _nbins-1 <<
")" << endl ;
262 return xlo()->getVal() + (i + 1)*binWidth(i) ;
270 Double_t* RooParamBinning::array()
const
272 if (_array)
delete[] _array ;
273 _array =
new Double_t[_nbins+1] ;
276 for (i=0 ; i<=_nbins ; i++) {
277 _array[i] = xlo()->getVal() + i*binWidth(i) ;
287 void RooParamBinning::printMultiline(ostream &os, Int_t , Bool_t , TString indent)
const
289 os << indent <<
"_xlo = " << _xlo << endl ;
290 os << indent <<
"_xhi = " << _xhi << endl ;
292 os << indent <<
"xlo() = " << xlo() << endl ;
293 os << indent <<
"xhi() = " << xhi() << endl ;