16 #ifndef ROO_ABS_REAL_LVALUE
17 #define ROO_ABS_REAL_LVALUE
30 class RooAbsRealLValue :
public RooAbsReal,
public RooAbsLValue {
33 inline RooAbsRealLValue() { }
34 RooAbsRealLValue(
const char *name,
const char *title,
const char *unit=
"") ;
35 RooAbsRealLValue(
const RooAbsRealLValue& other,
const char* name=0);
36 RooAbsRealLValue& operator=(
const RooAbsRealLValue&) =
default;
37 virtual ~RooAbsRealLValue();
40 virtual void setVal(Double_t value)=0;
41 virtual RooAbsArg& operator=(
const RooAbsReal& other) ;
42 virtual RooAbsArg& operator=(Double_t newValue);
43 virtual RooAbsArg& operator=(Int_t ival) {
return operator=((Double_t)ival) ; }
46 virtual void setBin(Int_t ibin,
const char* rangeName=0) ;
47 virtual Int_t getBin(
const char* rangeName=0)
const {
return getBinning(rangeName).binNumber(getVal()) ; }
48 virtual Int_t numBins(
const char* rangeName=0)
const {
return getBins(rangeName) ; }
49 virtual Double_t getBinWidth(Int_t i,
const char* rangeName=0)
const {
return getBinning(rangeName).binWidth(i) ; }
50 virtual Double_t volume(
const char* rangeName)
const {
return getMax(rangeName)-getMin(rangeName) ; }
51 virtual void randomize(
const char* rangeName=0);
53 virtual const RooAbsBinning* getBinningPtr(
const char* rangeName)
const {
return &getBinning(rangeName) ; }
54 virtual Int_t getBin(
const RooAbsBinning* ptr)
const {
return ptr->binNumber(getVal()) ; }
56 virtual void setBin(Int_t ibin,
const RooAbsBinning& binning) ;
57 virtual Int_t getBin(
const RooAbsBinning& binning)
const {
return binning.binNumber(getVal()) ; }
58 virtual Int_t numBins(
const RooAbsBinning& binning)
const {
return binning.numBins() ; }
59 virtual Double_t getBinWidth(Int_t i,
const RooAbsBinning& binning)
const {
return binning.binWidth(i) ; }
60 virtual Double_t volume(
const RooAbsBinning& binning)
const {
return binning.highBound() - binning.lowBound() ; }
61 virtual void randomize(
const RooAbsBinning& binning) ;
64 virtual void setBinFast(Int_t ibin,
const RooAbsBinning& binning) ;
69 virtual const RooAbsBinning& getBinning(
const char* name=0, Bool_t verbose=kTRUE, Bool_t createOnTheFly=kFALSE)
const = 0 ;
71 virtual RooAbsBinning& getBinning(
const char* name=0, Bool_t verbose=kTRUE, Bool_t createOnTheFly=kFALSE) = 0 ;
73 virtual Bool_t hasBinning(
const char* name)
const = 0 ;
74 virtual Bool_t inRange(
const char* name)
const ;
77 virtual Int_t getBins(
const char* name=0)
const {
return getBinning(name).numBins(); }
80 virtual Double_t getMin(
const char* name=0)
const {
return getBinning(name).lowBound(); }
83 virtual Double_t getMax(
const char* name=0)
const {
return getBinning(name).highBound(); }
87 std::pair<double, double> getRange(
const char* name = 0)
const {
88 return {getMin(name), getMax(name)};
91 inline Bool_t hasMin(
const char* name=0)
const {
return !RooNumber::isInfinite(getMin(name)); }
93 inline Bool_t hasMax(
const char* name=0)
const {
return !RooNumber::isInfinite(getMax(name)); }
95 virtual Bool_t hasRange(
const char* name)
const {
return hasBinning(name) ; }
98 virtual Bool_t isJacobianOK(
const RooArgSet& depList)
const ;
99 virtual Double_t jacobian()
const {
return 1 ; }
101 inline virtual Bool_t isLValue()
const {
return kTRUE; }
104 Bool_t inRange(Double_t value,
const char* rangeName, Double_t* clippedValue=0)
const;
105 virtual Bool_t isValidReal(Double_t value, Bool_t printError=kFALSE)
const ;
108 inline void setConstant(Bool_t value= kTRUE) { setAttribute(
"Constant",value); setValueDirty() ; setShapeDirty() ; }
111 virtual Bool_t readFromStream(std::istream& is, Bool_t compact, Bool_t verbose=kFALSE) ;
112 virtual void writeToStream(std::ostream& os, Bool_t compact)
const ;
115 virtual void printMultiline(std::ostream& os, Int_t contents, Bool_t verbose=kFALSE, TString indent=
"")
const ;
119 RooPlot* frame(
const RooCmdArg& arg1,
const RooCmdArg& arg2=RooCmdArg::none(),
120 const RooCmdArg& arg3=RooCmdArg::none(),
const RooCmdArg& arg4=RooCmdArg::none(),
const RooCmdArg& arg5=RooCmdArg::none(),
121 const RooCmdArg& arg6=RooCmdArg::none(),
const RooCmdArg& arg7=RooCmdArg::none(),
const RooCmdArg& arg8=RooCmdArg::none())
const ;
122 RooPlot *frame(
const RooLinkedList& cmdList)
const ;
123 RooPlot *frame(Double_t lo, Double_t hi, Int_t nbins)
const;
124 RooPlot *frame(Double_t lo, Double_t hi)
const;
125 RooPlot *frame(Int_t nbins)
const;
126 RooPlot *frame()
const;
129 TH1 *createHistogram(
const char *name,
130 const RooCmdArg& arg1=RooCmdArg::none(),
const RooCmdArg& arg2=RooCmdArg::none(),
131 const RooCmdArg& arg3=RooCmdArg::none(),
const RooCmdArg& arg4=RooCmdArg::none(),
132 const RooCmdArg& arg5=RooCmdArg::none(),
const RooCmdArg& arg6=RooCmdArg::none(),
133 const RooCmdArg& arg7=RooCmdArg::none(),
const RooCmdArg& arg8=RooCmdArg::none())
const ;
134 TH1 *createHistogram(
const char *name,
const RooLinkedList& cmdList)
const ;
136 TH1F *createHistogram(
const char *name,
const char *yAxisLabel)
const ;
137 TH1F *createHistogram(
const char *name,
const char *yAxisLabel, Double_t xlo, Double_t xhi, Int_t nBins)
const ;
138 TH1F *createHistogram(
const char *name,
const char *yAxisLabel,
const RooAbsBinning& bins)
const ;
140 TH2F *createHistogram(
const char *name,
const RooAbsRealLValue &yvar,
const char *zAxisLabel=0,
141 Double_t* xlo=0, Double_t* xhi=0, Int_t* nBins=0)
const ;
142 TH2F *createHistogram(
const char *name,
const RooAbsRealLValue &yvar,
const char *zAxisLabel,
const RooAbsBinning** bins)
const ;
145 TH3F *createHistogram(
const char *name,
const RooAbsRealLValue &yvar,
const RooAbsRealLValue &zvar,
146 const char *tAxisLabel, Double_t* xlo=0, Double_t* xhi=0, Int_t* nBins=0)
const ;
147 TH3F *createHistogram(
const char *name,
const RooAbsRealLValue &yvar,
const RooAbsRealLValue &zvar,
const char* tAxisLabel,
const RooAbsBinning** bins)
const ;
149 static TH1* createHistogram(
const char *name, RooArgList &vars,
const char *tAxisLabel, Double_t* xlo, Double_t* xhi, Int_t* nBins) ;
150 static TH1* createHistogram(
const char *name, RooArgList &vars,
const char *tAxisLabel,
const RooAbsBinning** bins) ;
154 friend class RooRealBinding ;
156 virtual void setValFast(Double_t value) { setVal(value) ; }
158 virtual void setVal(Double_t value,
const char* ) {
160 return setVal(value) ;
162 Bool_t fitRangeOKForPlotting()
const ;
163 void copyCache(
const RooAbsArg* source, Bool_t valueOnly=kFALSE, Bool_t setValDirty=kTRUE) ;
165 ClassDef(RooAbsRealLValue,1)