Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
RooTreeDataStore.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * Project: RooFit *
3  * Package: RooFitCore *
4  * File: $Id$
5  * Authors: *
6  * WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu *
7  * DK, David Kirkby, UC Irvine, dkirkby@uci.edu *
8  * *
9  * Copyright (c) 2000-2005, Regents of the University of California *
10  * and Stanford University. All rights reserved. *
11  * *
12  * Redistribution and use in source and binary forms, *
13  * with or without modification, are permitted according to the terms *
14  * listed in LICENSE (http://roofit.sourceforge.net/license.txt) *
15  *****************************************************************************/
16 #ifndef ROO_TREE_DATA_STORE
17 #define ROO_TREE_DATA_STORE
18 
19 #include "RooAbsDataStore.h"
20 #include "TString.h"
21 
22 class RooAbsArg ;
23 class RooArgList ;
24 class TTree ;
25 class RooFormulaVar ;
26 class RooArgSet ;
27 
28 
29 class RooTreeDataStore : public RooAbsDataStore {
30 public:
31 
32  RooTreeDataStore() ;
33  RooTreeDataStore(TTree* t, const RooArgSet& vars, const char* wgtVarName=0) ;
34 
35  // Empty ctor
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) ; }
39 
40  // Ctors from TTree
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) ;
43 
44  // Ctors from DataStore
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) ;
47 
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 /*copyCache*/, const char* wgtVarName=0) ;
51 
52  RooTreeDataStore(const RooTreeDataStore& other, const char* newname=0) ;
53  RooTreeDataStore(const RooTreeDataStore& other, const RooArgSet& vars, const char* newname=0) ;
54  virtual ~RooTreeDataStore() ;
55 
56 
57  // Write current row
58  virtual Int_t fill() ;
59 
60  // Retrieve a row
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) ; }
68 
69  virtual std::vector<RooSpan<const double>> getBatch(std::size_t first, std::size_t last) const {
70  //TODO
71  std::cerr << "This functionality is not yet implemented for tree data stores." << std::endl;
72  assert(false);
73 
74  std::vector<double> vec(first, last);
75  return {RooSpan<const double>(vec)};
76  }
77 
78  // Change observable name
79  virtual Bool_t changeObservableName(const char* from, const char* to) ;
80 
81  // Add one or more columns
82  virtual RooAbsArg* addColumn(RooAbsArg& var, Bool_t adjustRange=kTRUE) ;
83  virtual RooArgSet* addColumns(const RooArgList& varList) ;
84 
85  // Merge column-wise
86  RooAbsDataStore* merge(const RooArgSet& allvars, std::list<RooAbsDataStore*> dstoreList) ;
87 
88  // Add rows
89  virtual void append(RooAbsDataStore& other) ;
90 
91  // General & bookkeeping methods
92  virtual Bool_t valid() const ;
93  virtual Double_t sumEntries() const ;
94  virtual Int_t numEntries() const ;
95  virtual void reset() ;
96 
97  // Buffer redirection routines used in inside RooAbsOptTestStatistics
98  virtual void attachBuffers(const RooArgSet& extObs) ;
99  virtual void resetBuffers() ;
100  void restoreAlternateBuffers() ;
101 
102  // Tree access
103  TTree& tree() { return *_tree ; }
104  virtual const TTree* tree() const { return _tree ; }
105 
106  // Forwarded from TTree
107  Stat_t GetEntries() const;
108  void Reset(Option_t* option=0);
109  Int_t Fill();
110  Int_t GetEntry(Int_t entry = 0, Int_t getall = 0);
111 
112  void Draw(Option_t* option = "") ;
113 
114  // Constant term optimizer interface
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() ;
119 
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) ;
122 
123  virtual void checkInit() const;
124 
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 ;
131  }
132 
133  const RooArgSet& row() { return _varsww ; }
134 
135  private:
136 
137  friend class RooVectorDataStore ;
138 
139  RooArgSet varsNoWeight(const RooArgSet& allVars, const char* wgtName=0) ;
140  RooRealVar* weightVar(const RooArgSet& allVars, const char* wgtName=0) ;
141 
142  void initialize();
143  void attachCache(const RooAbsArg* newOwner, const RooArgSet& cachedVars) ;
144 
145  // TTree Branch buffer size control
146  void setBranchBufferSize(Int_t size) { _defTreeBufSize = size ; }
147  Int_t getBranchBufferSize() const { return _defTreeBufSize ; }
148 
149  std::string makeTreeName() const;
150 
151  static Int_t _defTreeBufSize ;
152 
153  void createTree(const char* name, const char* title) ;
154  TTree *_tree ; // TTree holding the data points
155  TTree *_cacheTree ; //! TTree holding the cached function values
156  const RooAbsArg* _cacheOwner ; //! Object owning cache contents
157  mutable Bool_t _defCtor ;//! Was object constructed with default ctor?
158 
159  RooArgSet _varsww ;
160  RooRealVar* _wgtVar ; // Pointer to weight variable (if set)
161 
162  const Double_t* _extWgtArray{nullptr}; //! External weight array
163  const Double_t* _extWgtErrLoArray{nullptr}; //! External weight array - low error
164  const Double_t* _extWgtErrHiArray{nullptr}; //! External weight array - high error
165  const Double_t* _extSumW2Array{nullptr}; //! External sum of weights array
166 
167  mutable Double_t _curWgt ; // Weight of current event
168  mutable Double_t _curWgtErrLo ; // Weight of current event
169  mutable Double_t _curWgtErrHi ; // Weight of current event
170  mutable Double_t _curWgtErr ; // Weight of current event
171 
172  RooArgSet _attachedBuffers ; //! Currently attached buffers (if different from _varsww)
173 
174  ClassDef(RooTreeDataStore, 2) // TTree-based Data Storage class
175 };
176 
177 
178 #endif