43 ClassImp(RooErrorVar);
51 RooErrorVar::RooErrorVar(
const char *name,
const char *title,
const RooRealVar& input) :
52 RooAbsRealLValue(name,title),
53 _realVar(
"realVar",
"RooRealVar with error",this,(RooAbsReal&)input)
55 _binning =
new RooUniformBinning(-1,1,100) ;
62 RooErrorVar::RooErrorVar(
const RooErrorVar& other,
const char* name) :
63 RooAbsRealLValue(other,name),
64 _realVar(
"realVar",this,other._realVar)
66 _binning = other._binning->clone() ;
70 TIterator* iter = other._altBinning.MakeIterator() ;
71 RooAbsBinning* binning ;
72 while((binning=(RooAbsBinning*)iter->Next())) {
73 _altBinning.Add(binning->clone()) ;
83 RooErrorVar::~RooErrorVar()
93 Double_t RooErrorVar::getValV(
const RooArgSet*)
const
103 Bool_t RooErrorVar::hasBinning(
const char* name)
const
105 return _altBinning.FindObject(name) ? kTRUE : kFALSE ;
114 const RooAbsBinning& RooErrorVar::getBinning(
const char* name, Bool_t verbose, Bool_t createOnTheFly)
const
116 return const_cast<RooErrorVar*
>(
this)->getBinning(name,verbose,createOnTheFly) ;
125 RooAbsBinning& RooErrorVar::getBinning(
const char* name, Bool_t , Bool_t createOnTheFly)
133 RooAbsBinning* binning = (RooAbsBinning*) _altBinning.FindObject(name) ;
139 if (!createOnTheFly) {
144 binning =
new RooRangeBinning(getMin(),getMax(),name) ;
145 coutI(Contents) <<
"RooErrorVar::getBinning(" << GetName() <<
") new range named '"
146 << name <<
"' created with default bounds" << endl ;
148 _altBinning.Add(binning) ;
157 std::list<std::string> RooErrorVar::getBinningNames()
const
159 std::list<std::string> binningNames(1,
"");
161 RooFIter iter = _altBinning.fwdIterator();
162 const RooAbsArg* binning = 0;
163 while((binning = iter.next())) {
164 const char* name = binning->GetName();
165 binningNames.push_back(name);
173 void RooErrorVar::setBinning(
const RooAbsBinning& binning,
const char* name)
176 if (_binning)
delete _binning ;
177 _binning = binning.clone() ;
181 RooAbsBinning* oldBinning = (RooAbsBinning*) _altBinning.FindObject(name) ;
183 _altBinning.Remove(oldBinning) ;
188 RooAbsBinning* newBinning = binning.clone() ;
189 newBinning->SetName(name) ;
190 newBinning->SetTitle(name) ;
191 _altBinning.Add(newBinning) ;
204 void RooErrorVar::setMin(
const char* name, Double_t value)
207 RooAbsBinning& binning = getBinning(name) ;
210 if (value >= getMax()) {
211 coutW(InputArguments) <<
"RooErrorVar::setMin(" << GetName()
212 <<
"): Proposed new fit min. larger than max., setting min. to max." << endl ;
213 binning.setMin(getMax()) ;
215 binning.setMin(value) ;
221 if (!inRange(_value,0,&clipValue)) {
234 void RooErrorVar::setMax(
const char* name, Double_t value)
237 RooAbsBinning& binning = getBinning(name) ;
240 if (value < getMin()) {
241 coutW(InputArguments) <<
"RooErrorVar::setMax(" << GetName()
242 <<
"): Proposed new fit max. smaller than min., setting max. to min." << endl ;
243 binning.setMax(getMin()) ;
245 binning.setMax(value) ;
251 if (!inRange(_value,0,&clipValue)) {
265 void RooErrorVar::setRange(
const char* name, Double_t min, Double_t max)
267 Bool_t exists = name ? (_altBinning.FindObject(name)?kTRUE:kFALSE) : kTRUE ;
270 RooAbsBinning& binning = getBinning(name,kFALSE) ;
274 coutW(InputArguments) <<
"RooErrorVar::setRange(" << GetName()
275 <<
"): Proposed new fit max. smaller than min., setting max. to min." << endl ;
276 binning.setRange(min,min) ;
278 binning.setRange(min,max) ;
282 coutI(InputArguments) <<
"RooErrorVar::setRange(" << GetName()
283 <<
") new range named '" << name <<
"' created with bounds ["
284 << min <<
"," << max <<
"]" << endl ;
295 Bool_t RooErrorVar::readFromStream(istream& is, Bool_t , Bool_t verbose)
297 TString token,errorPrefix(
"RooErrorVar::readFromStream(") ;
298 errorPrefix.Append(GetName()) ;
299 errorPrefix.Append(
")") ;
300 RooStreamParser parser(is,errorPrefix) ;
304 if (parser.readDouble(value,verbose))
return kTRUE ;
305 if (isValidReal(value,verbose)) {
318 void RooErrorVar::writeToStream(ostream& os, Bool_t )
const
327 void RooErrorVar::syncCache(
const RooArgSet*)
329 _value = evaluate() ;