16 #ifndef ROO_TREE_DATA_STORE
17 #define ROO_TREE_DATA_STORE
29 class RooTreeDataStore :
public RooAbsDataStore {
33 RooTreeDataStore(TTree* t,
const RooArgSet& vars,
const char* wgtVarName=0) ;
36 RooTreeDataStore(
const char* name,
const char* title,
const RooArgSet& vars,
const char* wgtVarName=0) ;
37 virtual RooAbsDataStore* clone(
const char* newname=0)
const {
return new RooTreeDataStore(*
this,newname) ; }
38 virtual RooAbsDataStore* clone(
const RooArgSet& vars,
const char* newname=0)
const {
return new RooTreeDataStore(*
this,vars,newname) ; }
41 RooTreeDataStore(
const char* name,
const char* title,
const RooArgSet& vars, TTree& t,
const RooFormulaVar& select,
const char* wgtVarName=0) ;
42 RooTreeDataStore(
const char* name,
const char* title,
const RooArgSet& vars, TTree& t,
const char* selExpr=0,
const char* wgtVarName=0) ;
45 RooTreeDataStore(
const char* name,
const char* title,
const RooArgSet& vars,
const RooAbsDataStore& tds,
const RooFormulaVar& select,
const char* wgtVarName=0) ;
46 RooTreeDataStore(
const char* name,
const char* title,
const RooArgSet& vars,
const RooAbsDataStore& tds,
const char* selExpr=0,
const char* wgtVarName=0) ;
48 RooTreeDataStore(
const char *name,
const char *title, RooAbsDataStore& tds,
49 const RooArgSet& vars,
const RooFormulaVar* cutVar,
const char* cutRange,
50 Int_t nStart, Int_t nStop, Bool_t ,
const char* wgtVarName=0) ;
52 RooTreeDataStore(
const RooTreeDataStore& other,
const char* newname=0) ;
53 RooTreeDataStore(
const RooTreeDataStore& other,
const RooArgSet& vars,
const char* newname=0) ;
54 virtual ~RooTreeDataStore() ;
58 virtual Int_t fill() ;
61 using RooAbsDataStore::get ;
62 virtual const RooArgSet*
get(Int_t index)
const ;
63 virtual Double_t weight()
const ;
64 virtual Double_t weightError(RooAbsData::ErrorType etype=RooAbsData::Poisson)
const ;
65 virtual void weightError(Double_t& lo, Double_t& hi, RooAbsData::ErrorType etype=RooAbsData::Poisson)
const ;
66 virtual Double_t weight(Int_t index)
const ;
67 virtual Bool_t isWeighted()
const {
return (_wgtVar!=0||_extWgtArray!=0) ; }
69 virtual std::vector<RooSpan<const double>> getBatch(std::size_t first, std::size_t last)
const {
71 std::cerr <<
"This functionality is not yet implemented for tree data stores." << std::endl;
74 std::vector<double> vec(first, last);
75 return {RooSpan<const double>(vec)};
79 virtual Bool_t changeObservableName(
const char* from,
const char* to) ;
82 virtual RooAbsArg* addColumn(RooAbsArg& var, Bool_t adjustRange=kTRUE) ;
83 virtual RooArgSet* addColumns(
const RooArgList& varList) ;
86 RooAbsDataStore* merge(
const RooArgSet& allvars, std::list<RooAbsDataStore*> dstoreList) ;
89 virtual void append(RooAbsDataStore& other) ;
92 virtual Bool_t valid()
const ;
93 virtual Double_t sumEntries()
const ;
94 virtual Int_t numEntries()
const ;
95 virtual void reset() ;
98 virtual void attachBuffers(
const RooArgSet& extObs) ;
99 virtual void resetBuffers() ;
100 void restoreAlternateBuffers() ;
103 TTree& tree() {
return *_tree ; }
104 virtual const TTree* tree()
const {
return _tree ; }
107 Stat_t GetEntries()
const;
108 void Reset(Option_t* option=0);
110 Int_t GetEntry(Int_t entry = 0, Int_t getall = 0);
112 void Draw(Option_t* option =
"") ;
115 virtual void cacheArgs(
const RooAbsArg* owner, RooArgSet& varSet,
const RooArgSet* nset=0, Bool_t skipZeroWeights=kFALSE) ;
116 virtual const RooAbsArg* cacheOwner() {
return _cacheOwner ; }
117 virtual void setArgStatus(
const RooArgSet& set, Bool_t active) ;
118 virtual void resetCache() ;
120 void loadValues(
const TTree *t,
const RooFormulaVar* select=0,
const char* rangeName=0, Int_t nStart=0, Int_t nStop=2000000000) ;
121 void loadValues(
const RooAbsDataStore *tds,
const RooFormulaVar* select=0,
const char* rangeName=0, Int_t nStart=0, Int_t nStop=2000000000) ;
123 virtual void checkInit()
const;
125 void setExternalWeightArray(
const Double_t* arrayWgt,
const Double_t* arrayWgtErrLo,
126 const Double_t* arrayWgtErrHi,
const Double_t* arraySumW2) {
127 _extWgtArray = arrayWgt ;
128 _extWgtErrLoArray = arrayWgtErrLo ;
129 _extWgtErrHiArray = arrayWgtErrHi ;
130 _extSumW2Array = arraySumW2 ;
133 const RooArgSet& row() {
return _varsww ; }
137 friend class RooVectorDataStore ;
139 RooArgSet varsNoWeight(
const RooArgSet& allVars,
const char* wgtName=0) ;
140 RooRealVar* weightVar(
const RooArgSet& allVars,
const char* wgtName=0) ;
143 void attachCache(
const RooAbsArg* newOwner,
const RooArgSet& cachedVars) ;
146 void setBranchBufferSize(Int_t size) { _defTreeBufSize = size ; }
147 Int_t getBranchBufferSize()
const {
return _defTreeBufSize ; }
149 std::string makeTreeName()
const;
151 static Int_t _defTreeBufSize ;
153 void createTree(
const char* name,
const char* title) ;
156 const RooAbsArg* _cacheOwner ;
157 mutable Bool_t _defCtor ;
160 RooRealVar* _wgtVar ;
162 const Double_t* _extWgtArray{
nullptr};
163 const Double_t* _extWgtErrLoArray{
nullptr};
164 const Double_t* _extWgtErrHiArray{
nullptr};
165 const Double_t* _extSumW2Array{
nullptr};
167 mutable Double_t _curWgt ;
168 mutable Double_t _curWgtErrLo ;
169 mutable Double_t _curWgtErrHi ;
170 mutable Double_t _curWgtErr ;
172 RooArgSet _attachedBuffers ;
174 ClassDef(RooTreeDataStore, 2)