33 class RooAbsCategory ;
40 class RooDataHist :
public RooAbsData,
public RooDirItem {
45 RooDataHist(
const char *name,
const char *title,
const RooArgSet& vars,
const char* binningName=0) ;
46 RooDataHist(
const char *name,
const char *title,
const RooArgSet& vars,
const RooAbsData& data, Double_t initWgt=1.0) ;
47 RooDataHist(
const char *name,
const char *title,
const RooArgList& vars,
const TH1* hist, Double_t initWgt=1.0) ;
48 RooDataHist(
const char *name,
const char *title,
const RooArgList& vars, RooCategory& indexCat, std::map<std::string,TH1*> histMap, Double_t initWgt=1.0) ;
49 RooDataHist(
const char *name,
const char *title,
const RooArgList& vars, RooCategory& indexCat, std::map<std::string,RooDataHist*> dhistMap, Double_t wgt=1.0) ;
51 RooDataHist(
const char *name,
const char *title,
const RooArgList& vars,
const RooCmdArg& arg1,
const RooCmdArg& arg2=RooCmdArg(),
const RooCmdArg& arg3=RooCmdArg(),
52 const RooCmdArg& arg4=RooCmdArg(),
const RooCmdArg& arg5=RooCmdArg(),
const RooCmdArg& arg6=RooCmdArg(),
const RooCmdArg& arg7=RooCmdArg(),
const RooCmdArg& arg8=RooCmdArg()) ;
53 RooDataHist& operator=(
const RooDataHist&) =
delete;
55 RooDataHist(
const RooDataHist& other,
const char* newname = 0) ;
56 virtual TObject* Clone(
const char* newname=
"")
const {
57 return new RooDataHist(*
this, newname && newname[0] !=
'\0' ? newname : GetName());
59 virtual ~RooDataHist() ;
61 virtual RooAbsData* emptyClone(
const char* newName=0,
const char* newTitle=0,
const RooArgSet*vars=0,
const char* =0)
const {
63 return new RooDataHist(newName?newName:GetName(),newTitle?newTitle:GetTitle(),vars?*vars:*
get()) ;
67 virtual void add(
const RooArgSet& row, Double_t wgt=1.0) {
71 virtual void add(
const RooArgSet& row, Double_t weight, Double_t sumw2) ;
72 void set(Double_t weight, Double_t wgtErr=-1) ;
73 void set(
const RooArgSet& row, Double_t weight, Double_t wgtErr=-1) ;
74 void set(
const RooArgSet& row, Double_t weight, Double_t wgtErrLo, Double_t wgtErrHi) ;
76 void add(
const RooAbsData& dset,
const RooFormulaVar* cutVar=0, Double_t weight=1.0 ) ;
77 void add(
const RooAbsData& dset,
const char* cut, Double_t weight=1.0 ) ;
79 virtual const RooArgSet*
get()
const {
83 virtual const RooArgSet*
get(Int_t masterIdx)
const ;
84 virtual const RooArgSet*
get(
const RooArgSet& coord)
const ;
85 virtual Int_t numEntries()
const ;
86 virtual Double_t sumEntries()
const ;
87 virtual Double_t sumEntries(
const char* cutSpec,
const char* cutRange=0)
const ;
88 virtual Bool_t isWeighted()
const {
92 virtual Bool_t isNonPoissonWeighted()
const ;
94 virtual RooSpan<const double> getWeightBatch(std::size_t, std::size_t)
const {
96 std::cerr <<
"Retrieving weights in batches not yet implemented for RooDataHist." << std::endl;
102 Double_t sum(Bool_t correctForBinSize, Bool_t inverseCorr=kFALSE)
const ;
103 Double_t sum(
const RooArgSet& sumSet,
const RooArgSet& sliceSet, Bool_t correctForBinSize, Bool_t inverseCorr=kFALSE) ;
104 Double_t sum(
const RooArgSet& sumSet,
const RooArgSet& sliceSet, Bool_t correctForBinSize, Bool_t inverseCorr,
const std::map<
const RooAbsArg*, std::pair<Double_t, Double_t> >& ranges);
106 virtual Double_t weight()
const {
108 return get_curWeight();
110 Double_t weightSquared()
const ;
111 Double_t weight(
const RooArgSet& bin, Int_t intOrder=1, Bool_t correctForBinSize=kFALSE, Bool_t cdfBoundaries=kFALSE, Bool_t oneSafe=kFALSE) ;
112 Double_t binVolume()
const {
return _curVolume ; }
113 Double_t binVolume(
const RooArgSet& bin) ;
114 virtual Bool_t valid()
const ;
116 TIterator* sliceIterator(RooAbsArg& sliceArg,
const RooArgSet& otherArgs) ;
118 virtual void weightError(Double_t& lo, Double_t& hi, ErrorType etype=Poisson)
const ;
119 virtual Double_t weightError(ErrorType etype=Poisson)
const {
122 weightError(lo,hi,etype) ;
126 using RooAbsData::plotOn ;
127 virtual RooPlot *plotOn(RooPlot *frame, PlotOpt o)
const;
129 virtual void reset() ;
132 virtual void printMultiline(std::ostream& os, Int_t content, Bool_t verbose=kFALSE, TString indent=
"")
const ;
133 virtual void printArgs(std::ostream& os)
const ;
134 virtual void printValue(std::ostream& os)
const ;
136 void SetName(
const char *name) ;
137 void SetNameTitle(
const char *name,
const char* title) ;
139 Int_t getIndex(
const RooArgSet& coord, Bool_t fast=kFALSE) ;
141 void removeSelfFromDir() { removeFromDir(
this) ; }
145 friend class RooAbsCachedPdf ;
146 friend class RooAbsCachedReal ;
147 friend class RooDataHistSliceIter ;
148 friend class RooAbsOptTestStatistic ;
150 Int_t calcTreeIndex()
const ;
151 void cacheValidEntries() ;
153 void setAllWeights(Double_t value) ;
155 void initialize(
const char* binningName=0,Bool_t fillTree=kTRUE) ;
156 RooDataHist(
const char* name,
const char* title, RooDataHist* h,
const RooArgSet& varSubset,
157 const RooFormulaVar* cutVar,
const char* cutRange, Int_t nStart, Int_t nStop, Bool_t copyCache) ;
158 RooAbsData* reduceEng(
const RooArgSet& varSubset,
const RooFormulaVar* cutVar,
const char* cutRange=0,
159 Int_t nStart=0, Int_t nStop=2000000000, Bool_t copyCache=kTRUE) ;
160 Double_t interpolateDim(RooRealVar& dim,
const RooAbsBinning* binning, Double_t xval, Int_t intOrder, Bool_t correctForBinSize, Bool_t cdfBoundaries) ;
161 void calculatePartialBinVolume(
const RooArgSet& dimSet)
const ;
162 void checkBinBounds()
const;
164 void adjustBinning(
const RooArgList& vars,
const TH1& href, Int_t* offset=0) ;
165 void importTH1(
const RooArgList& vars,
const TH1& histo, Double_t initWgt, Bool_t doDensityCorrection) ;
166 void importTH1Set(
const RooArgList& vars, RooCategory& indexCat, std::map<std::string,TH1*> hmap, Double_t initWgt, Bool_t doDensityCorrection) ;
167 void importDHistSet(
const RooArgList& vars, RooCategory& indexCat, std::map<std::string,RooDataHist*> dmap, Double_t initWgt) ;
169 virtual RooAbsData* cacheClone(
const RooAbsArg* newCacheOwner,
const RooArgSet* newCacheVars,
const char* newName=0) ;
171 Double_t get_wgt(
const Int_t &idx)
const {
return _wgt[idx]; }
172 Double_t get_errLo(
const Int_t &idx)
const {
return _errLo[idx]; }
173 Double_t get_errHi(
const Int_t &idx)
const {
return _errHi[idx]; }
174 Double_t get_sumw2(
const Int_t &idx)
const {
return _sumw2[idx]; }
176 Double_t get_curWeight()
const {
return _curWeight; }
177 Double_t get_curWgtErrLo()
const {
return _curWgtErrLo; }
178 Double_t get_curWgtErrHi()
const {
return _curWgtErrHi; }
179 Double_t get_curSumW2()
const {
return _curSumW2; }
181 Int_t get_curIndex()
const {
return _curIndex; }
184 std::vector<Int_t> _idxMult ;
192 RooArgSet _realVars ;
195 mutable Double_t _curWeight{0.};
196 mutable Double_t _curWgtErrLo{0.};
197 mutable Double_t _curWgtErrHi{0.};
198 mutable Double_t _curSumW2{0.};
199 mutable Double_t _curVolume{0.};
200 mutable Int_t _curIndex{0};
202 mutable std::vector<Double_t>* _pbinv ;
203 mutable RooCacheManager<std::vector<Double_t> > _pbinvCacheMgr ;
204 std::vector<RooAbsLValue*> _lvvars ;
205 std::vector<const RooAbsBinning*> _lvbins ;
206 mutable std::vector<std::vector<Double_t> > _binbounds;
208 mutable Int_t _cache_sum_valid{0};
209 mutable Double_t _cache_sum{0.};
213 void _adjustBinning(RooRealVar &theirVar,
const TAxis &axis, RooRealVar *ourVar, Int_t *offset);
215 ClassDef(RooDataHist,4)