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)