Warning, file /include/root/RooAbsData.h was not indexed
or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #ifndef ROO_ABS_DATA
0017 #define ROO_ABS_DATA
0018
0019 #include "RooPrintable.h"
0020 #include "RooAbsCategory.h"
0021 #include "RooArgSet.h"
0022 #include "RooArgList.h"
0023 #include "RooNameReg.h"
0024 #include "RooFit/UniqueId.h"
0025 #include "RooFit/EvalContext.h"
0026
0027 #include <ROOT/RSpan.hxx>
0028
0029 #include <TMatrixDSym.h>
0030 #include <TNamed.h>
0031
0032 #include <map>
0033 #include <string>
0034
0035 class RooAbsReal ;
0036 class RooRealVar;
0037 class RooAbsRealLValue;
0038 class RooAbsCategoryLValue;
0039 class Roo1DTable ;
0040 class RooPlot;
0041 class RooArgList;
0042 class RooSimultaneous;
0043 class TH1;
0044 class TH2F;
0045 class RooAbsBinning ;
0046 class Roo1DTable ;
0047 class RooAbsDataStore ;
0048 class RooFormulaVar;
0049 namespace RooFit {
0050 namespace TestStatistics {
0051 class RooAbsL;
0052 struct ConstantTermsOptimizer;
0053 }
0054 }
0055
0056
0057 class RooAbsData : public TNamed, public RooPrintable {
0058 public:
0059
0060
0061 RooAbsData() ;
0062 RooAbsData(RooStringView name, RooStringView title, const RooArgSet& vars, RooAbsDataStore* store=nullptr) ;
0063 RooAbsData(const RooAbsData& other, const char* newname = nullptr) ;
0064
0065 RooAbsData& operator=(const RooAbsData& other);
0066 ~RooAbsData() override ;
0067 virtual RooFit::OwningPtr<RooAbsData> emptyClone(const char* newName=nullptr, const char* newTitle=nullptr, const RooArgSet* vars=nullptr, const char* wgtVarName=nullptr) const = 0 ;
0068
0069
0070 RooFit::OwningPtr<RooAbsData> reduce(const RooCmdArg& arg1,const RooCmdArg& arg2={},const RooCmdArg& arg3={},const RooCmdArg& arg4={},
0071 const RooCmdArg& arg5={},const RooCmdArg& arg6={},const RooCmdArg& arg7={},const RooCmdArg& arg8={}) const;
0072 RooFit::OwningPtr<RooAbsData> reduce(const char* cut) const;
0073 RooFit::OwningPtr<RooAbsData> reduce(const RooFormulaVar& cutVar) const;
0074 RooFit::OwningPtr<RooAbsData> reduce(const RooArgSet& varSubset, const char* cut=nullptr) const;
0075 RooFit::OwningPtr<RooAbsData> reduce(const RooArgSet& varSubset, const RooFormulaVar& cutVar) const;
0076
0077 RooAbsDataStore* store() { return _dstore.get(); }
0078 const RooAbsDataStore* store() const { return _dstore.get(); }
0079 const TTree* tree() const ;
0080 TTree *GetClonedTree() const;
0081
0082 void convertToVectorStore() ;
0083 virtual void convertToTreeStore();
0084
0085 void attachBuffers(const RooArgSet& extObs) ;
0086 void resetBuffers() ;
0087
0088
0089 void Draw(Option_t* option = "") override ;
0090
0091 void checkInit() const ;
0092
0093
0094 virtual bool changeObservableName(const char* from, const char* to) ;
0095
0096
0097 virtual void add(const RooArgSet& row, double weight=1) = 0 ;
0098 virtual void fill() ;
0099
0100
0101 virtual inline const RooArgSet* get() const {
0102
0103 return &_vars ;
0104 }
0105 virtual double weight() const = 0 ;
0106 virtual double weightSquared() const = 0 ;
0107
0108 enum ErrorType { Poisson, SumW2, None, Auto, Expected } ;
0109 static ErrorType errorTypeFromString(std::string const &name);
0110
0111
0112
0113
0114 virtual double weightError(ErrorType =Poisson) const {
0115
0116
0117 return 0.0;
0118 }
0119
0120
0121
0122
0123
0124 virtual void weightError(double& lo, double& hi, ErrorType =Poisson) const {
0125
0126
0127 lo=0;
0128 hi=0;
0129 }
0130
0131 virtual const RooArgSet* get(Int_t index) const ;
0132
0133 using RealSpans = std::map<RooFit::Detail::DataKey, std::span<const double>>;
0134 using CategorySpans = std::map<RooFit::Detail::DataKey, std::span<const RooAbsCategory::value_type>>;
0135
0136 RealSpans getBatches(std::size_t first = 0, std::size_t len = std::numeric_limits<std::size_t>::max()) const;
0137 CategorySpans getCategoryBatches(std::size_t first = 0, std::size_t len = std::numeric_limits<std::size_t>::max()) const;
0138
0139
0140
0141
0142
0143 virtual std::span<const double> getWeightBatch(std::size_t first, std::size_t len, bool sumW2=false) const = 0;
0144
0145
0146 virtual Int_t numEntries() const ;
0147
0148 virtual double sumEntries() const = 0 ;
0149
0150
0151
0152 virtual double sumEntries(const char* cutSpec, const char* cutRange=nullptr) const = 0 ;
0153 double sumEntriesW2() const;
0154 virtual bool isWeighted() const {
0155
0156 return false ;
0157 }
0158 virtual bool isNonPoissonWeighted() const {
0159
0160 return false ;
0161 }
0162 virtual void reset() ;
0163
0164
0165 bool getRange(const RooAbsRealLValue& var, double& lowest, double& highest, double marginFrac=0.0, bool symMode=false) const ;
0166
0167
0168 virtual Roo1DTable* table(const RooArgSet& catSet, const char* cuts="", const char* opts="") const ;
0169 virtual Roo1DTable* table(const RooAbsCategory& cat, const char* cuts="", const char* opts="") const ;
0170
0171 virtual RooPlot* plotOn(RooPlot* frame,
0172 const RooCmdArg& arg1={}, const RooCmdArg& arg2={},
0173 const RooCmdArg& arg3={}, const RooCmdArg& arg4={},
0174 const RooCmdArg& arg5={}, const RooCmdArg& arg6={},
0175 const RooCmdArg& arg7={}, const RooCmdArg& arg8={}) const ;
0176
0177 virtual RooPlot* plotOn(RooPlot* frame, const RooLinkedList& cmdList) const ;
0178
0179
0180 struct PlotOpt {
0181 const char* cuts = "";
0182 Option_t* drawOptions = "P";
0183 RooAbsBinning* bins = nullptr;
0184 RooAbsData::ErrorType etype = RooAbsData::Poisson;
0185 const char* cutRange = nullptr;
0186 const char* histName = nullptr;
0187 bool histInvisible = false;
0188 const char* addToHistName = nullptr;
0189 double addToWgtSelf = 1.0;
0190 double addToWgtOther = 1.0;
0191 double xErrorSize = 1.0;
0192 bool refreshFrameNorm = false;
0193 bool correctForBinWidth = true;
0194 double scaleFactor = 1.0;
0195 } ;
0196
0197
0198 std::vector<std::unique_ptr<RooAbsData>> split(const RooAbsCategory& splitCat, bool createEmptyDataSets=false) const;
0199
0200
0201 std::vector<std::unique_ptr<RooAbsData>> split(const RooSimultaneous& simpdf, bool createEmptyDataSets=false) const;
0202
0203
0204 bool canSplitFast() const ;
0205 RooAbsData* getSimData(const char* idxstate) ;
0206
0207
0208 TH1 *createHistogram(const char *name, const RooAbsRealLValue& xvar,
0209 const RooCmdArg& arg1={}, const RooCmdArg& arg2={},
0210 const RooCmdArg& arg3={}, const RooCmdArg& arg4={},
0211 const RooCmdArg& arg5={}, const RooCmdArg& arg6={},
0212 const RooCmdArg& arg7={}, const RooCmdArg& arg8={}) const ;
0213 TH1 *createHistogram(const char* varNameList,
0214 const RooCmdArg& binArgX={}, const RooCmdArg& binArgY={},
0215 const RooCmdArg& binArgZ={}) const;
0216
0217 TH1 *createHistogram(const char *name, const RooAbsRealLValue& xvar, const RooLinkedList& argList) const ;
0218 TH2F* createHistogram(const RooAbsRealLValue& var1, const RooAbsRealLValue& var2, const char* cuts="",
0219 const char *name= "hist") const;
0220 TH2F* createHistogram(const RooAbsRealLValue& var1, const RooAbsRealLValue& var2, int nx, int ny,
0221 const char* cuts="", const char *name="hist") const;
0222
0223
0224 virtual TH1 *fillHistogram(TH1 *hist, const RooArgList &plotVars, const char *cuts= "", const char* cutRange=nullptr) const;
0225
0226
0227 inline void Print(Option_t *options= nullptr) const override {
0228
0229 printStream(defaultPrintStream(),defaultPrintContents(options),defaultPrintStyle(options));
0230 }
0231
0232 void printName(std::ostream& os) const override ;
0233 void printTitle(std::ostream& os) const override ;
0234 void printClassName(std::ostream& os) const override ;
0235 void printMultiline(std::ostream& os, Int_t contents, bool verbose=false, TString indent="") const override ;
0236
0237 Int_t defaultPrintContents(Option_t* opt) const override ;
0238
0239
0240 virtual void printContents(std::ostream& os = std::cout) const = 0;
0241
0242 void setDirtyProp(bool flag) ;
0243
0244 double moment(const RooRealVar& var, double order, const char* cutSpec=nullptr, const char* cutRange=nullptr) const ;
0245 double moment(const RooRealVar& var, double order, double offset, const char* cutSpec=nullptr, const char* cutRange=nullptr) const ;
0246 double standMoment(const RooRealVar& var, double order, const char* cutSpec=nullptr, const char* cutRange=nullptr) const ;
0247
0248 double mean(const RooRealVar& var, const char* cutSpec=nullptr, const char* cutRange=nullptr) const { return moment(var,1,0,cutSpec,cutRange) ; }
0249 double sigma(const RooRealVar& var, const char* cutSpec=nullptr, const char* cutRange=nullptr) const { return sqrt(moment(var,2,cutSpec,cutRange)) ; }
0250 double skewness(const RooRealVar& var, const char* cutSpec=nullptr, const char* cutRange=nullptr) const { return standMoment(var,3,cutSpec,cutRange) ; }
0251 double kurtosis(const RooRealVar& var, const char* cutSpec=nullptr, const char* cutRange=nullptr) const { return standMoment(var,4,cutSpec,cutRange) ; }
0252
0253 double covariance(RooRealVar &x,RooRealVar &y, const char* cutSpec=nullptr, const char* cutRange=nullptr) const { return corrcov(x,y,cutSpec,cutRange,false) ; }
0254 double correlation(RooRealVar &x,RooRealVar &y, const char* cutSpec=nullptr, const char* cutRange=nullptr) const { return corrcov(x,y,cutSpec,cutRange,true) ; }
0255
0256 RooFit::OwningPtr<TMatrixDSym> covarianceMatrix(const char* cutSpec=nullptr, const char* cutRange=nullptr) const { return covarianceMatrix(*get(),cutSpec,cutRange) ; }
0257 RooFit::OwningPtr<TMatrixDSym> correlationMatrix(const char* cutSpec=nullptr, const char* cutRange=nullptr) const { return correlationMatrix(*get(),cutSpec,cutRange) ; }
0258 RooFit::OwningPtr<TMatrixDSym> covarianceMatrix(const RooArgList& vars, const char* cutSpec=nullptr, const char* cutRange=nullptr) const { return corrcovMatrix(vars,cutSpec,cutRange,false) ; }
0259 RooFit::OwningPtr<TMatrixDSym> correlationMatrix(const RooArgList& vars, const char* cutSpec=nullptr, const char* cutRange=nullptr) const { return corrcovMatrix(vars,cutSpec,cutRange,true) ; }
0260
0261 RooRealVar* meanVar(const RooRealVar &var, const char* cutSpec=nullptr, const char* cutRange=nullptr) const ;
0262 RooRealVar* rmsVar(const RooRealVar &var, const char* cutSpec=nullptr, const char* cutRange=nullptr) const ;
0263
0264 virtual RooPlot* statOn(RooPlot* frame,
0265 const RooCmdArg& arg1={}, const RooCmdArg& arg2={},
0266 const RooCmdArg& arg3={}, const RooCmdArg& arg4={},
0267 const RooCmdArg& arg5={}, const RooCmdArg& arg6={},
0268 const RooCmdArg& arg7={}, const RooCmdArg& arg8={}) ;
0269
0270 virtual RooPlot* statOn(RooPlot* frame, const char *what,
0271 const char *label= "", Int_t sigDigits= 2,
0272 Option_t *options= "NELU", double xmin=0.15,
0273 double xmax= 0.65,double ymax=0.85,
0274 const char* cutSpec=nullptr, const char* cutRange=nullptr,
0275 const RooCmdArg* formatCmd=nullptr);
0276
0277 void RecursiveRemove(TObject *obj) override;
0278
0279 bool hasFilledCache() const ;
0280
0281 void addOwnedComponent(const char* idxlabel, RooAbsData& data) ;
0282
0283 enum StorageType { Tree, Vector, Composite };
0284
0285 static void setDefaultStorageType(StorageType s) ;
0286
0287 static StorageType getDefaultStorageType();
0288
0289
0290
0291
0292
0293 RooArgSet const* getGlobalObservables() const { return _globalObservables.get(); }
0294 void setGlobalObservables(RooArgSet const& globalObservables);
0295
0296
0297
0298
0299
0300
0301
0302 inline const TNamed* namePtr() const {
0303 return _namePtr ;
0304 }
0305
0306 void SetName(const char* name) override ;
0307 void SetNameTitle(const char *name, const char *title) override ;
0308
0309
0310
0311
0312
0313 RooFit::UniqueId<RooAbsData> const& uniqueId() const { return _uniqueId; }
0314
0315 protected:
0316
0317 static StorageType defaultStorageType ;
0318
0319 StorageType storageType;
0320
0321 void initializeVars(RooArgSet const& vars);
0322
0323 double corrcov(const RooRealVar& x, const RooRealVar& y, const char* cutSpec, const char* cutRange, bool corr) const ;
0324 RooFit::OwningPtr<TMatrixDSym> corrcovMatrix(const RooArgList& vars, const char* cutSpec, const char* cutRange, bool corr) const ;
0325
0326 virtual void optimizeReadingWithCaching(RooAbsArg& arg, const RooArgSet& cacheList, const RooArgSet& keepObsList) ;
0327 bool allClientsCached(RooAbsArg*, const RooArgSet&) ;
0328
0329
0330
0331 virtual RooPlot *plotOn(RooPlot *frame, PlotOpt o) const ;
0332 virtual RooPlot *plotAsymOn(RooPlot* frame, const RooAbsCategoryLValue& asymCat, PlotOpt o) const ;
0333 virtual RooPlot *plotEffOn(RooPlot* frame, const RooAbsCategoryLValue& effCat, PlotOpt o) const ;
0334
0335
0336
0337 friend class RooAbsOptTestStatistic ;
0338 friend struct RooFit::TestStatistics::ConstantTermsOptimizer;
0339
0340 friend class RooFit::TestStatistics::RooAbsL;
0341
0342 virtual void cacheArgs(const RooAbsArg* owner, RooArgSet& varSet, const RooArgSet* nset=nullptr, bool skipZeroWeights=false) ;
0343 virtual void resetCache() ;
0344 virtual void setArgStatus(const RooArgSet& set, bool active) ;
0345 virtual void attachCache(const RooAbsArg* newOwner, const RooArgSet& cachedVars) ;
0346
0347 virtual std::unique_ptr<RooAbsData> reduceEng(const RooArgSet& varSubset, const RooFormulaVar* cutVar, const char* cutRange=nullptr,
0348 std::size_t nStart = 0, std::size_t = std::numeric_limits<std::size_t>::max()) const = 0 ;
0349
0350 RooRealVar* dataRealVar(const char* methodname, const RooRealVar& extVar) const ;
0351
0352
0353 RooArgSet _vars;
0354 RooArgSet _cachedVars ;
0355
0356 std::unique_ptr<RooAbsDataStore> _dstore;
0357
0358 std::map<std::string,RooAbsData*> _ownedComponents ;
0359
0360 std::unique_ptr<RooArgSet> _globalObservables;
0361
0362 mutable const TNamed * _namePtr = nullptr;
0363
0364 private:
0365 void copyImpl(const RooAbsData& other, const char* newname);
0366
0367 void copyGlobalObservables(const RooAbsData& other);
0368
0369 const RooFit::UniqueId<RooAbsData> _uniqueId;
0370
0371 ClassDefOverride(RooAbsData, 7)
0372 };
0373
0374 #endif