Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
RooErrorVar.cxx
Go to the documentation of this file.
1/*****************************************************************************
2 * Project: RooFit *
3 * Package: RooFitCore *
4 * @(#)root/roofitcore:$Id$
5 * Authors: *
6 * WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu *
7 * DK, David Kirkby, UC Irvine, dkirkby@uci.edu *
8 * *
9 * Copyright (c) 2000-2005, Regents of the University of California *
10 * and Stanford University. All rights reserved. *
11 * *
12 * Redistribution and use in source and binary forms, *
13 * with or without modification, are permitted according to the terms *
14 * listed in LICENSE (http://roofit.sourceforge.net/license.txt) *
15 *****************************************************************************/
16
17/**
18\file RooErrorVar.cxx
19\class RooErrorVar
20\ingroup Roofitcore
21
22Auxiliary class that represents the error
23of a RooRealVar as a separate object. The main reason of
24existence of this class is to facilitate the reuse of existing
25techniques to perform calculations that involve a RooRealVars
26error, such as calculating the pull value.
27**/
28
29#include "RooErrorVar.h"
30#include "RooAbsBinning.h"
31#include "RooStreamParser.h"
32#include "RooRangeBinning.h"
33#include "RooMsgService.h"
34#include "RooUniformBinning.h"
35
36using std::endl, std::istream, std::ostream;
37
38
39
40////////////////////////////////////////////////////////////////////////////////
41/// Construct an lvalue variable representing the error of RooRealVar input
42
43RooErrorVar::RooErrorVar(const char *name, const char *title, const RooRealVar& input) :
45 _realVar("realVar","RooRealVar with error",this,(RooAbsReal&)input)
46{
47 _binning = std::make_unique<RooUniformBinning>(-1,1,100) ;
48}
49
50
51
52////////////////////////////////////////////////////////////////////////////////
53
56 _realVar("realVar",this,other._realVar)
57{
58 _binning = std::unique_ptr<RooAbsBinning>{other._binning->clone()};
59
60 // Copy constructor
61 for(auto * binning : static_range_cast<RooAbsBinning*>(other._altBinning)) _altBinning.Add(binning->clone());
62}
63
65
66////////////////////////////////////////////////////////////////////////////////
67/// Return value, i.e. error on input variable
68
69double RooErrorVar::getValV(const RooArgSet*) const
70{
71 return evaluate();
72}
73
74
75
76////////////////////////////////////////////////////////////////////////////////
77/// Return true if we have binning with given name
78
79bool RooErrorVar::hasBinning(const char* name) const
80{
82}
83
84
85////////////////////////////////////////////////////////////////////////////////
86/// Return binning with given name. If no binning exists with such a name, clone the default
87/// binning on the fly if so requested
88
89const RooAbsBinning& RooErrorVar::getBinning(const char* name, bool verbose, bool createOnTheFly) const
90{
91 return const_cast<RooErrorVar*>(this)->getBinning(name,verbose,createOnTheFly) ;
92}
93
94
95
96////////////////////////////////////////////////////////////////////////////////
97/// Return binning with given name. If no binning exists with such a name, clone the default
98/// binning on the fly if so requested
99
100RooAbsBinning& RooErrorVar::getBinning(const char* name, bool /*verbose*/, bool createOnTheFly)
101{
102 // Return default (normalization) binning and range if no name is specified
103 if (name==nullptr) {
104 return *_binning ;
105 }
106
107 // Check if binning with this name has been created already
108 RooAbsBinning* binning = static_cast<RooAbsBinning*>(_altBinning.FindObject(name)) ;
109 if (binning) {
110 return *binning ;
111 }
112
113 // Return default binning if binning is not found and no creation is requested
114 if (!createOnTheFly) {
115 return *_binning ;
116 }
117
118 // Create a new RooRangeBinning with this name with default range
119 binning = new RooRangeBinning(getMin(),getMax(),name) ;
120 coutI(Contents) << "RooErrorVar::getBinning(" << GetName() << ") new range named '"
121 << name << "' created with default bounds" << std::endl ;
122
123 _altBinning.Add(binning) ;
124
125 return *binning ;
126}
127
128////////////////////////////////////////////////////////////////////////////////
129/// Get a list of all binning names. An empty name implies the default binning.
130/// A 0 pointer should be passed to getBinning in this case.
131
132std::list<std::string> RooErrorVar::getBinningNames() const
133{
134 std::list<std::string> binningNames(1, "");
135
136 for(auto * binning : _altBinning) {
137 const char* name = binning->GetName();
138 binningNames.push_back(name);
139 }
140 return binningNames;
141}
142
143
144/// Remove lower bound from named binning, or default binning if name is null
145void RooErrorVar::removeMin(const char* name) {
147}
148
149
150/// Remove upper bound from named binning, or default binning if name is null
151void RooErrorVar::removeMax(const char* name) {
153}
154
155
156/// Remove both upper and lower bounds from named binning, or
157/// default binning if name is null
161
162
163////////////////////////////////////////////////////////////////////////////////
164/// Store given binning with this variable under the given name
165
166void RooErrorVar::setBinning(const RooAbsBinning& binning, const char* name)
167{
168 if (!name) {
169 _binning = std::unique_ptr<RooAbsBinning>{binning.clone()};
170 } else {
171
172 // Remove any old binning with this name
173 if (std::unique_ptr<RooAbsBinning> oldBinning{static_cast<RooAbsBinning*>(_altBinning.FindObject(name))}) {
175 }
176
177 // Insert new binning in list of alternative binnings
178 RooAbsBinning* newBinning = binning.clone() ;
179 newBinning->SetName(name) ;
180 newBinning->SetTitle(name) ;
182
183 }
184
185
186}
187
188
189
190////////////////////////////////////////////////////////////////////////////////
191/// Set the lower bound of the range with the given name to the given value
192/// If name is a null pointer, set the lower bound of the default range
193
194void RooErrorVar::setMin(const char* name, double value)
195{
196 // Set new minimum of fit range
197 RooAbsBinning& binning = getBinning(name) ;
198
199 // Check if new limit is consistent
200 if (value >= getMax()) {
201 coutW(InputArguments) << "RooErrorVar::setMin(" << GetName()
202 << "): Proposed new fit min. larger than max., setting min. to max." << std::endl ;
203 binning.setMin(getMax()) ;
204 } else {
205 binning.setMin(value) ;
206 }
207
208 // Clip current value in window if it fell out
209 if (!name) {
210 double clipValue ;
211 if (!inRange(_value,nullptr,&clipValue)) {
213 }
214 }
215
216 setShapeDirty() ;
217}
218
219
220////////////////////////////////////////////////////////////////////////////////
221/// Set the upper bound of the range with the given name to the given value
222/// If name is a null pointer, set the upper bound of the default range
223
224void RooErrorVar::setMax(const char* name, double value)
225{
226 // Set new maximum of fit range
227 RooAbsBinning& binning = getBinning(name) ;
228
229 // Check if new limit is consistent
230 if (value < getMin()) {
231 coutW(InputArguments) << "RooErrorVar::setMax(" << GetName()
232 << "): Proposed new fit max. smaller than min., setting max. to min." << std::endl ;
233 binning.setMax(getMin()) ;
234 } else {
235 binning.setMax(value) ;
236 }
237
238 // Clip current value in window if it fell out
239 if (!name) {
240 double clipValue ;
241 if (!inRange(_value,nullptr,&clipValue)) {
243 }
244 }
245
246 setShapeDirty() ;
247}
248
249/// Set default binning to nBins uniform bins
253
254////////////////////////////////////////////////////////////////////////////////
255/// Set the upper and lower lower bound of the range with the given name to the given values
256/// If name is a null pointer, set the upper and lower bounds of the default range
257
258void RooErrorVar::setRange( const char* name, double min, double max)
259{
260 bool exists = name ? (_altBinning.FindObject(name)?true:false) : true ;
261
262 // Set new fit range
263 RooAbsBinning& binning = getBinning(name,false) ;
264
265 // Check if new limit is consistent
266 if (min>max) {
267 coutW(InputArguments) << "RooErrorVar::setRange(" << GetName()
268 << "): Proposed new fit max. smaller than min., setting max. to min." << std::endl ;
269 binning.setRange(min,min) ;
270 } else {
271 binning.setRange(min,max) ;
272 }
273
274 if (!exists) {
275 coutI(InputArguments) << "RooErrorVar::setRange(" << GetName()
276 << ") new range named '" << name << "' created with bounds ["
277 << min << "," << max << "]" << std::endl ;
278 }
279
280 setShapeDirty() ;
281}
282
283
284
285////////////////////////////////////////////////////////////////////////////////
286/// Read object contents from given stream
287
288bool RooErrorVar::readFromStream(istream& is, bool /*compact*/, bool verbose)
289{
291 TString errorPrefix("RooErrorVar::readFromStream(");
292 errorPrefix.Append(GetName()) ;
293 errorPrefix.Append(")") ;
295 double value(0) ;
296
297 // Compact mode: Read single token
298 if (parser.readDouble(value,verbose)) return true ;
299 if (isValidReal(value,verbose)) {
300 setVal(value) ;
301 return false ;
302 } else {
303 return true ;
304 }
305}
306
307
308
309////////////////////////////////////////////////////////////////////////////////
310/// Write value to stream
311
312void RooErrorVar::writeToStream(ostream& os, bool /*compact*/) const
313{
314 os << getVal() ;
315}
316
317
318////////////////////////////////////////////////////////////////////////////////
319/// Force the internal value cache to be up to date
320
322{
323 _value = evaluate() ;
324}
325
326
327
#define coutI(a)
#define coutW(a)
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void input
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
char name[80]
Definition TGX11.cxx:110
void setShapeDirty()
Notify that a shape-like property (e.g. binning) has changed.
Definition RooAbsArg.h:436
Abstract base class for RooRealVar binning definitions.
virtual void setRange(double xlo, double xhi)=0
virtual void setMin(double xlo)
Change lower bound to xlo.
virtual void setMax(double xhi)
Change upper bound to xhi.
virtual RooAbsBinning * clone(const char *name=nullptr) const =0
Abstract base class for objects that represent a real value that may appear on the left hand side of ...
bool isValidReal(double value, bool printError=false) const override
Check if given value is valid.
virtual double getMax(const char *name=nullptr) const
Get maximum of currently defined range.
virtual double getMin(const char *name=nullptr) const
Get minimum of currently defined range.
bool inRange(const char *name) const override
Check if current value is inside range with given name.
Abstract base class for objects that represent a real value and implements functionality common to al...
Definition RooAbsReal.h:59
double getVal(const RooArgSet *normalisationSet=nullptr) const
Evaluate object.
Definition RooAbsReal.h:103
double _value
Cache for current value of object.
Definition RooAbsReal.h:535
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Definition RooArgSet.h:24
Auxiliary class that represents the error of a RooRealVar as a separate object.
Definition RooErrorVar.h:28
bool hasBinning(const char *name) const override
Return true if we have binning with given name.
void removeMin(const char *name=nullptr)
Remove lower bound from named binning, or default binning if name is null.
void setBinning(const RooAbsBinning &binning, const char *name=nullptr)
Store given binning with this variable under the given name.
~RooErrorVar() override
void removeRange(const char *name=nullptr)
Remove both upper and lower bounds from named binning, or default binning if name is null.
void setMax(double value)
Set upper bound of default range to value.
Definition RooErrorVar.h:66
std::list< std::string > getBinningNames() const override
Get a list of all binning names.
RooLinkedList _altBinning
! Optional alternative ranges and binnings
Definition RooErrorVar.h:94
void setRange(double min, double max)
Set default ranges to [min,max].
Definition RooErrorVar.h:70
void setVal(double value) override
Set the current value of the object. Needs to be overridden by implementations.
Definition RooErrorVar.h:46
double getValV(const RooArgSet *set=nullptr) const override
Return value, i.e. error on input variable.
std::unique_ptr< RooAbsBinning > _binning
! Pointer to default binning definition
Definition RooErrorVar.h:99
RooErrorVar()
Default constructor.
Definition RooErrorVar.h:32
void setMin(double value)
Set lower bound of default range to value.
Definition RooErrorVar.h:62
void syncCache(const RooArgSet *set=nullptr) override
Force the internal value cache to be up to date.
void writeToStream(std::ostream &os, bool compact) const override
Write value to stream.
void removeMax(const char *name=nullptr)
Remove upper bound from named binning, or default binning if name is null.
const RooAbsBinning & getBinning(const char *name=nullptr, bool verbose=true, bool createOnTheFly=false) const override
Return binning with given name.
double evaluate() const override
Evaluate this PDF / function / constant. Needs to be overridden by all derived classes.
Definition RooErrorVar.h:41
bool readFromStream(std::istream &is, bool compact, bool verbose=false) override
Read object contents from given stream.
void setBins(Int_t nBins)
Set default binning to nBins uniform bins.
virtual void Add(TObject *arg)
TObject * FindObject(const char *name) const override
Return pointer to object with given name.
virtual bool Remove(TObject *arg)
Remove object from collection.
static constexpr double infinity()
Return internal infinity representation.
Definition RooNumber.h:25
Binning/range definition that only defines a range but no binning.
Variable that can be changed from the outside.
Definition RooRealVar.h:37
bool readDouble(double &value, bool zapOnError=false)
Read the next token and convert it to a double.
Implementation of RooAbsBinning that provides a uniform binning in 'n' bins between the range end poi...
const char * GetName() const override
Returns name of object.
Definition TNamed.h:49
Basic string class.
Definition TString.h:139