Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
RooDataSet.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Project: RooFit *
3 * Package: RooFitCore *
4 * File: $Id: RooDataSet.h,v 1.59 2007/05/11 09:11:30 verkerke Exp $
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_DATA_SET
17#define ROO_DATA_SET
18
20class RooCategory;
21class RooDataHist;
22class RooRealVar;
23
24class TDirectory;
25
26#include "RooAbsData.h"
27#include "RooDirItem.h"
28
29#include "ROOT/RStringView.hxx"
30
31#include <list>
32
33
34//#define USEMEMPOOLFORDATASET
35
36// In the past, a custom memory pool was used for RooDataSet objects on the
37// heap. This memoy pool guaranteed that no memory addresses were reused for
38// different RooDataSets, making it possible to uniquely identify manually
39// allocated RooDataSets by their memory address.
40//
41// However, the memoy pool for RooArgSets caused unexpected memory usage
42// increases, even if no memory leaks were present [1]. It was suspected that
43// the memory allocation pattern with the memory pool might cause some heap
44// fragmentation, which did not happen when the standard allocator was used.
45//
46// To solve that problem, the memory pool was disabled. It is not clear what
47// RooFit code actually relied on the unique memory addresses, but an
48// alternative mechanism to uniquely identify RooDataSet objects was
49// implemented for these usecases (see RooAbsData::uniqueId()) [2].
50//
51// [1] https://github.com/root-project/root/issues/8323
52// [2] https://github.com/root-project/root/pull/8324
53
54template <class RooSet_t, size_t>
56
57class RooDataSet : public RooAbsData, public RooDirItem {
58public:
59
60#ifdef USEMEMPOOLFORDATASET
61 void* operator new (size_t bytes);
62 void operator delete (void *ptr);
63#endif
64
65
66 // Constructors, factory methods etc.
67 RooDataSet() ;
68
69 RooDataSet(RooStringView name, RooStringView title, const RooArgSet& vars, const char* wgtVarName)
70 R__SUGGEST_ALTERNATIVE("Use RooDataSet(name, title, vars, RooFit::WeightVar(wgtVarName)).");
71
72 // Universal constructor
73 RooDataSet(RooStringView name, RooStringView title, const RooArgSet& vars, const RooCmdArg& arg1=RooCmdArg(), const RooCmdArg& arg2=RooCmdArg(),
74 const RooCmdArg& arg3=RooCmdArg(), const RooCmdArg& arg4=RooCmdArg(),const RooCmdArg& arg5=RooCmdArg(),
75 const RooCmdArg& arg6=RooCmdArg(),const RooCmdArg& arg7=RooCmdArg(),const RooCmdArg& arg8=RooCmdArg()) ;
76
77 // Constructor for subset of existing dataset
79 const char *cuts=nullptr, const char* wgtVarName=nullptr);
81 const RooFormulaVar& cutVar, const char* wgtVarName=nullptr) ;
82
83
84 // Constructor importing data from external ROOT Tree
86 const char *cuts=nullptr, const char* wgtVarName=nullptr);
88 const RooFormulaVar& cutVar, const char* wgtVarName=nullptr) ;
89
90 RooDataSet(RooDataSet const & other, const char* newname=nullptr) ;
91 TObject* Clone(const char* newname = "") const override {
92 return new RooDataSet(*this, newname && newname[0] != '\0' ? newname : GetName());
93 }
94 ~RooDataSet() override ;
95
96 RooAbsData* emptyClone(const char* newName=nullptr, const char* newTitle=nullptr, const RooArgSet* vars=nullptr, const char* wgtVarName=nullptr) const override;
97
98 RooDataHist* binnedClone(const char* newName=nullptr, const char* newTitle=nullptr) const ;
99
100 double sumEntries() const override;
101 double sumEntries(const char* cutSpec, const char* cutRange=nullptr) const override;
102
103 virtual RooPlot* plotOnXY(RooPlot* frame,
104 const RooCmdArg& arg1=RooCmdArg::none(), const RooCmdArg& arg2=RooCmdArg::none(),
105 const RooCmdArg& arg3=RooCmdArg::none(), const RooCmdArg& arg4=RooCmdArg::none(),
106 const RooCmdArg& arg5=RooCmdArg::none(), const RooCmdArg& arg6=RooCmdArg::none(),
107 const RooCmdArg& arg7=RooCmdArg::none(), const RooCmdArg& arg8=RooCmdArg::none()) const ;
108
109
110 /// Read data from a text file and create a dataset from it.
111 /// The possible options are: (D)ebug, (Q)uiet.
112 static RooDataSet *read(const char *filename, const RooArgList &variables,
113 const char *opts= "", const char* commonPath="",
114 const char *indexCatName=nullptr) ;
115 bool write(const char* filename) const;
116 bool write(std::ostream & ofs) const;
117
118
119 bool isWeighted() const override;
120 bool isNonPoissonWeighted() const override;
121
122 double weight() const override;
123 /// Returns a pointer to the weight variable (if set).
124 RooRealVar* weightVar() const { return _wgtVar; }
125 double weightSquared() const override;
126 void weightError(double& lo, double& hi,ErrorType etype=SumW2) const override;
127 double weightError(ErrorType etype=SumW2) const override;
128
129 const RooArgSet* get(Int_t index) const override;
130 const RooArgSet* get() const override;
131
132 RooSpan<const double> getWeightBatch(std::size_t first, std::size_t len, bool sumW2) const override;
133
134 /// Add one ore more rows of data
135 void add(const RooArgSet& row, double weight=1.0, double weightError=0.0) override;
136 virtual void add(const RooArgSet& row, double weight, double weightErrorLo, double weightErrorHi);
137
138 virtual void addFast(const RooArgSet& row, double weight=1.0, double weightError=0.0);
139
140 void append(RooDataSet& data) ;
141 bool merge(RooDataSet* data1, RooDataSet* data2=nullptr, RooDataSet* data3=nullptr,
142 RooDataSet* data4=nullptr, RooDataSet* data5=nullptr, RooDataSet* data6=nullptr) ;
143 bool merge(std::list<RooDataSet*> dsetList) ;
144
145 virtual RooAbsArg* addColumn(RooAbsArg& var, bool adjustRange=true) ;
146 virtual RooArgSet* addColumns(const RooArgList& varList) ;
147
148 void printMultiline(std::ostream& os, Int_t contents, bool verbose=false, TString indent="") const override;
149 void printArgs(std::ostream& os) const override;
150 void printValue(std::ostream& os) const override;
151
152 void SetName(const char *name) override;
153 void SetNameTitle(const char *name, const char* title) override;
154
155 static void cleanup();
156
157 void convertToTreeStore() override;
158
159protected:
160
161 friend class RooProdGenContext ;
162
163 void initialize(const char* wgtVarName) ;
164
165 // Cache copy feature is not publicly accessible
166 RooAbsData* reduceEng(const RooArgSet& varSubset, const RooFormulaVar* cutVar, const char* cutRange=nullptr,
167 std::size_t nStart=0, std::size_t nStop = std::numeric_limits<std::size_t>::max()) override;
169 const RooArgSet& vars, const RooFormulaVar* cutVar, const char* cutRange,
170 std::size_t nStart, std::size_t nStop);
171
172 RooArgSet _varsNoWgt; ///< Vars without weight variable
173 RooRealVar *_wgtVar = nullptr; ///< Pointer to weight variable (if set)
174
175private:
176
177 void loadValuesFromSlices(RooCategory &indexCat, std::map<std::string, RooAbsData *> const &slices,
178 const char *rangeName, RooFormulaVar const *cutVar, const char *cutSpec);
179
180#ifdef USEMEMPOOLFORDATASET
181 typedef MemPoolForRooSets<RooDataSet, 5*150> MemPool; ///< 150 = about 100kb
182 static MemPool * memPool();
183#endif
184 unsigned short _errorMsgCount{0}; ///<! Counter to silence error messages when filling dataset.
185 bool _doWeightErrorCheck{true}; ///<! When adding events with weights, check that weights can actually be stored.
186
187 mutable std::unique_ptr<std::vector<double>> _sumW2Buffer; ///<! Buffer for sumW2 in case a batch of values is requested.
188
189 ClassDefOverride(RooDataSet,2) // Unbinned data set
190};
191
192#endif
#define R__SUGGEST_ALTERNATIVE(ALTERNATIVE)
Definition RConfig.hxx:527
#define ClassDefOverride(name, id)
Definition Rtypes.h:341
static void indent(ostringstream &buf, int indent_level)
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char filename
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t index
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t UChar_t len
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t bytes
char name[80]
Definition TGX11.cxx:110
#define hi
Memory pool for RooArgSet and RooDataSet.
RooAbsArg is the common abstract base class for objects that represent a value and a "shape" in RooFi...
Definition RooAbsArg.h:74
RooAbsData is the common abstract base class for binned and unbinned datasets.
Definition RooAbsData.h:59
RooAbsRealLValue is the common abstract base class for objects that represent a real value that may a...
RooArgList is a container object that can hold multiple RooAbsArg objects.
Definition RooArgList.h:22
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Definition RooArgSet.h:55
RooCategory is an object to represent discrete states.
Definition RooCategory.h:28
RooCmdArg is a named container for two doubles, two integers two object points and three string point...
Definition RooCmdArg.h:26
static const RooCmdArg & none()
Return reference to null argument.
Definition RooCmdArg.cxx:51
The RooDataHist is a container class to hold N-dimensional binned data.
Definition RooDataHist.h:39
RooDataSet is a container class to hold unbinned data.
Definition RooDataSet.h:57
RooSpan< const double > getWeightBatch(std::size_t first, std::size_t len, bool sumW2) const override
RooAbsData * emptyClone(const char *newName=nullptr, const char *newTitle=nullptr, const RooArgSet *vars=nullptr, const char *wgtVarName=nullptr) const override
Return an empty clone of this dataset.
TObject * Clone(const char *newname="") const override
Make a clone of an object using the Streamer facility.
Definition RooDataSet.h:91
RooRealVar * _wgtVar
Pointer to weight variable (if set)
Definition RooDataSet.h:173
bool _doWeightErrorCheck
! When adding events with weights, check that weights can actually be stored.
Definition RooDataSet.h:185
static void cleanup()
RooArgSet _varsNoWgt
Vars without weight variable.
Definition RooDataSet.h:172
void loadValuesFromSlices(RooCategory &indexCat, std::map< std::string, RooAbsData * > const &slices, const char *rangeName, RooFormulaVar const *cutVar, const char *cutSpec)
void weightError(double &lo, double &hi, ErrorType etype=SumW2) const override
Return the asymmetric errors on the current weight.
const RooArgSet * get() const override
Return a RooArgSet with the coordinates of the current event.
void add(const RooArgSet &row, double weight=1.0, double weightError=0.0) override
Add one ore more rows of data.
void initialize(const char *wgtVarName)
Initialize the dataset.
void printArgs(std::ostream &os) const override
Print argument of dataset, i.e. the observable names.
void SetName(const char *name) override
Change the name of this dataset into the given name.
virtual void addFast(const RooArgSet &row, double weight=1.0, double weightError=0.0)
Add a data point, with its coordinates specified in the 'data' argset, to the data set.
bool merge(RooDataSet *data1, RooDataSet *data2=nullptr, RooDataSet *data3=nullptr, RooDataSet *data4=nullptr, RooDataSet *data5=nullptr, RooDataSet *data6=nullptr)
virtual RooAbsArg * addColumn(RooAbsArg &var, bool adjustRange=true)
Add a column with the values of the given (function) argument to this dataset.
bool write(const char *filename) const
Write the contents of this dataset to an ASCII file with the specified name.
double sumEntries() const override
Return effective number of entries in dataset, i.e., sum all weights.
RooAbsData * reduceEng(const RooArgSet &varSubset, const RooFormulaVar *cutVar, const char *cutRange=nullptr, std::size_t nStart=0, std::size_t nStop=std::numeric_limits< std::size_t >::max()) override
Implementation of RooAbsData virtual method that drives the RooAbsData::reduce() methods.
RooRealVar * weightVar() const
Returns a pointer to the weight variable (if set).
Definition RooDataSet.h:124
virtual RooArgSet * addColumns(const RooArgList &varList)
Add a column with the values of the given list of (function) argument to this dataset.
~RooDataSet() override
Destructor.
bool isNonPoissonWeighted() const override
Returns true if histogram contains bins with entries with a non-integer weight.
void SetNameTitle(const char *name, const char *title) override
Change the title of this dataset into the given name.
void printValue(std::ostream &os) const override
Print value of the dataset, i.e. the sum of weights contained in the dataset.
virtual RooPlot * plotOnXY(RooPlot *frame, const RooCmdArg &arg1=RooCmdArg::none(), const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none(), const RooCmdArg &arg6=RooCmdArg::none(), const RooCmdArg &arg7=RooCmdArg::none(), const RooCmdArg &arg8=RooCmdArg::none()) const
Special plot method for 'X-Y' datasets used in fitting.
void append(RooDataSet &data)
Add all data points of given data set to this data set.
RooDataSet()
Default constructor for persistence.
std::unique_ptr< std::vector< double > > _sumW2Buffer
! Buffer for sumW2 in case a batch of values is requested.
Definition RooDataSet.h:187
unsigned short _errorMsgCount
! Counter to silence error messages when filling dataset.
Definition RooDataSet.h:184
void convertToTreeStore() override
Convert vector-based storage to tree-based storage.
void printMultiline(std::ostream &os, Int_t contents, bool verbose=false, TString indent="") const override
Print info about this dataset to the specified output stream.
RooDataHist * binnedClone(const char *newName=nullptr, const char *newTitle=nullptr) const
Return binned clone of this dataset.
double weightSquared() const override
Return squared event weight of the current event.
double weight() const override
Return event weight of current event.
static RooDataSet * read(const char *filename, const RooArgList &variables, const char *opts="", const char *commonPath="", const char *indexCatName=nullptr)
Read data from a text file and create a dataset from it.
bool isWeighted() const override
Return true if dataset contains weighted events.
RooDirItem is a utility base class for RooFit objects that are to be attached to ROOT directories.
Definition RooDirItem.h:22
A RooFormulaVar is a generic implementation of a real-valued object, which takes a RooArgList of serv...
A RooPlot is a plot frame and a container for graphics objects within that frame.
Definition RooPlot.h:43
RooProdGenContext is an efficient implementation of the generator context specific for RooProdPdf PDF...
RooRealVar represents a variable that can be changed from the outside.
Definition RooRealVar.h:40
A simple container to hold a batch of data values.
Definition RooSpan.h:34
The RooStringView is a wrapper around a C-syle string that can also be constructed from a std::string...
Describe directory structure in memory.
Definition TDirectory.h:45
const char * GetName() const override
Returns name of object.
Definition TNamed.h:47
Mother of all ROOT objects.
Definition TObject.h:41
Basic string class.
Definition TString.h:139
A TTree represents a columnar dataset.
Definition TTree.h:79
Definition first.py:1
Definition tree.py:1