00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef ROO_ERROR_VAR
00017 #define ROO_ERROR_VAR
00018
00019 #include "Riosfwd.h"
00020 #include <math.h>
00021 #include <float.h>
00022
00023 #include "RooNumber.h"
00024 #include "RooAbsReal.h"
00025 #include "RooRealVar.h"
00026 #include "RooRealProxy.h"
00027
00028 class RooErrorVar : public RooAbsRealLValue {
00029 public:
00030
00031 inline RooErrorVar() {
00032
00033 }
00034 RooErrorVar(const char *name, const char *title, const RooRealVar& input) ;
00035 RooErrorVar(const RooErrorVar& other, const char* name=0);
00036 virtual TObject* clone(const char* newname) const { return new RooErrorVar(*this,newname); }
00037 virtual ~RooErrorVar() ;
00038
00039 virtual Double_t getVal(const RooArgSet* set=0) const ;
00040
00041 virtual Double_t evaluate() const {
00042
00043 return ((RooRealVar&)_realVar.arg()).getError() ;
00044 }
00045
00046 virtual void setVal(Double_t value) {
00047
00048 ((RooRealVar&)_realVar.arg()).setVal(value) ;
00049 }
00050
00051 inline virtual Bool_t isFundamental() const {
00052
00053 return kTRUE ;
00054 }
00055
00056
00057 virtual Bool_t readFromStream(istream& is, Bool_t compact, Bool_t verbose=kFALSE) ;
00058 virtual void writeToStream(ostream& os, Bool_t compact) const ;
00059
00060
00061 inline void setMin(Double_t value) {
00062
00063 setMin(0,value) ;
00064 }
00065 inline void setMax(Double_t value) {
00066
00067 setMax(0,value) ;
00068 }
00069 inline void setRange(Double_t min, Double_t max) {
00070
00071 setRange(0,min,max) ;
00072 }
00073 void setMin(const char* name, Double_t value) ;
00074 void setMax(const char* name, Double_t value) ;
00075 void setRange(const char* name, Double_t min, Double_t max) ;
00076
00077 void setBins(Int_t nBins) {
00078
00079 setBinning(RooUniformBinning(getMin(),getMax(),nBins)) ;
00080 }
00081 void setBinning(const RooAbsBinning& binning, const char* name=0) ;
00082 const RooAbsBinning& getBinning(const char* name=0, Bool_t verbose=kTRUE, Bool_t createOnTheFly=kFALSE) const ;
00083 RooAbsBinning& getBinning(const char* name=0, Bool_t verbose=kTRUE, Bool_t createOnTheFly=kFALSE) ;
00084 Bool_t hasBinning(const char* name) const ;
00085
00086
00087 inline void removeMin(const char* name=0) {
00088
00089 getBinning(name).setMin(-RooNumber::infinity()) ;
00090 }
00091 inline void removeMax(const char* name=0) {
00092
00093 getBinning(name).setMax(RooNumber::infinity()) ;
00094 }
00095 inline void removeRange(const char* name=0) {
00096
00097
00098 getBinning(name).setRange(-RooNumber::infinity(),RooNumber::infinity()) ;
00099 }
00100
00101 using RooAbsRealLValue::operator= ;
00102 using RooAbsRealLValue::setVal ;
00103
00104 protected:
00105
00106 RooLinkedList _altBinning ;
00107
00108 void syncCache(const RooArgSet* set=0) ;
00109
00110 RooRealProxy _realVar ;
00111 RooAbsBinning* _binning ;
00112
00113 ClassDef(RooErrorVar,1)
00114 };
00115
00116 #endif