Logo ROOT  
Reference Guide
RooAbsTestStatistic.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Project: RooFit *
3 * Package: RooFitCore *
4 * File: $Id: RooAbsGoodnessOfFit.h,v 1.15 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_ABS_TEST_STATISTIC
17#define ROO_ABS_TEST_STATISTIC
18
19#include "RooAbsReal.h"
20#include "RooSetProxy.h"
21#include "RooRealProxy.h"
22#include "TStopwatch.h"
23#include "Math/Util.h"
24
25#include <string>
26#include <vector>
27
28class RooArgSet ;
29class RooAbsData ;
30class RooAbsReal ;
31class RooSimultaneous ;
32class RooRealMPFE ;
33
38
40 friend class RooRealMPFE;
41public:
42
44 /// Stores the configuration parameters for RooAbsTestStatistic.
45 std::string rangeName = "";
46 std::string addCoefRangeName = "";
47 int nCPU = 1;
49 bool verbose = true;
50 bool splitCutRange = false;
51 bool cloneInputData = true;
53 bool binnedL = false;
54 };
55
56 // Constructors, assignment etc
58 RooAbsTestStatistic(const char *name, const char *title, RooAbsReal& real, RooAbsData& data,
59 const RooArgSet& projDeps, Configuration const& cfg);
60 RooAbsTestStatistic(const RooAbsTestStatistic& other, const char* name=0);
61 virtual ~RooAbsTestStatistic();
62 virtual RooAbsTestStatistic* create(const char *name, const char *title, RooAbsReal& real, RooAbsData& data,
63 const RooArgSet& projDeps, Configuration const& cfg) = 0;
64
65 virtual void constOptimizeTestStatistic(ConstOpCode opcode, Bool_t doAlsoTrackingOpt=kTRUE) ;
66
67 virtual Double_t combinedValue(RooAbsReal** gofArray, Int_t nVal) const = 0 ;
68 virtual Double_t globalNormalization() const {
69 // Default value of global normalization factor is 1.0
70 return 1.0 ;
71 }
72
73 Bool_t setData(RooAbsData& data, Bool_t cloneData=kTRUE) ;
74
75 void enableOffsetting(Bool_t flag) ;
76 Bool_t isOffsetting() const { return _doOffset ; }
77 virtual Double_t offset() const { return _offset.Sum() ; }
78 virtual Double_t offsetCarry() const { return _offset.Carry(); }
79
80protected:
81
82 virtual void printCompactTreeHook(std::ostream& os, const char* indent="") ;
83
84 virtual Bool_t redirectServersHook(const RooAbsCollection& newServerList, Bool_t mustReplaceAll, Bool_t nameChange, Bool_t isRecursive) ;
85 virtual Double_t evaluate() const ;
86
87 virtual Double_t evaluatePartition(std::size_t firstEvent, std::size_t lastEvent, std::size_t stepSize) const = 0 ;
88 virtual Double_t getCarry() const;
89
91 void setSimCount(Int_t simCount) {
92 // Store total number of components p.d.f. of a RooSimultaneous in this component test statistic
93 _simCount = simCount ;
94 }
95
96 void setEventCount(Int_t nEvents) {
97 // Store total number of events in this component test statistic
98 _nEvents = nEvents ;
99 }
100
101 Int_t numSets() const {
102 // Return total number of sets for parallel calculation
103 return _numSets ;
104 }
105 Int_t setNum() const {
106 // Return parallel calculation set number for this instance
107 return _setNum ;
108 }
109
110 RooSetProxy _paramSet ; // Parameters of the test statistic (=parameters of the input function)
111
114 // Return test statistic operation mode of this instance (SimMaster, MPMaster or Slave)
115 return _gofOpMode ;
116 }
117
118 // Original arguments
119 RooAbsReal* _func = nullptr; // Pointer to original input function
120 RooAbsData* _data = nullptr; // Pointer to original input dataset
121 const RooArgSet* _projDeps = nullptr; // Pointer to set with projected observables
122 std::string _rangeName ; // Name of range in which to calculate test statistic
123 std::string _addCoefRangeName ; // Name of reference to be used for RooAddPdf components
124 Bool_t _splitRange = false; // Split rangeName in RooSimultaneous index labels if true
125 Int_t _simCount = 1; // Total number of component p.d.f.s in RooSimultaneous (if any)
126 Bool_t _verbose = false; // Verbose messaging if true
127
128 virtual Bool_t setDataSlave(RooAbsData& /*data*/, Bool_t /*cloneData*/=kTRUE, Bool_t /*ownNewDataAnyway*/=kFALSE) { return kTRUE ; }
129
130 //private:
131
132
133 virtual Bool_t processEmptyDataSets() const { return kTRUE ; }
134
136 void initSimMode(RooSimultaneous* pdf, RooAbsData* data, const RooArgSet* projDeps, std::string const& rangeName, std::string const& addCoefRangeName) ;
137 void initMPMode(RooAbsReal* real, RooAbsData* data, const RooArgSet* projDeps, std::string const& rangeName, std::string const& addCoefRangeName) ;
138
139 mutable Bool_t _init = false; //! Is object initialized
140 GOFOpMode _gofOpMode = Slave; // Operation mode of test statistic instance
141
142 Int_t _nEvents = 0; // Total number of events in test statistic calculation
143 Int_t _setNum = 0; // Partition number of this instance in parallel calculation mode
144 Int_t _numSets = 1; // Total number of partitions in parallel calculation mode
145 Int_t _extSet = 0; //! Number of designated set to calculated extended term
146
147 // Simultaneous mode data
148 Int_t _nGof = 0 ; // Number of sub-contexts
149 pRooAbsTestStatistic* _gofArray = nullptr; //! Array of sub-contexts representing part of the combined test statistic
150 std::vector<RooFit::MPSplit> _gofSplitMode ; //! GOF MP Split mode specified by component (when Auto is active)
151
152 // Parallel mode data
153 Int_t _nCPU = 1; // Number of processors to use in parallel calculation mode
154 pRooRealMPFE* _mpfeArray = nullptr; //! Array of parallel execution frond ends
155
156 RooFit::MPSplit _mpinterl = RooFit::BulkPartition; // Use interleaving strategy rather than N-wise split for partioning of dataset for multiprocessor-split
157 Bool_t _doOffset = false; // Apply interval value offset to control numeric precision?
158 mutable ROOT::Math::KahanSum<double> _offset = 0.0; //! Offset as KahanSum to avoid loss of precision
159 mutable Double_t _evalCarry = 0.0; //! carry of Kahan sum in evaluatePartition
160
161 ClassDef(RooAbsTestStatistic,2) // Abstract base class for real-valued test statistics
162
163};
164
165#endif
int Int_t
Definition: CPyCppyy.h:43
RooAbsData * pRooAbsData
RooAbsTestStatistic * pRooAbsTestStatistic
RooRealMPFE * pRooRealMPFE
const Bool_t kFALSE
Definition: RtypesCore.h:101
bool Bool_t
Definition: RtypesCore.h:63
double Double_t
Definition: RtypesCore.h:59
const Bool_t kTRUE
Definition: RtypesCore.h:100
#define ClassDef(name, id)
Definition: Rtypes.h:325
static void indent(ostringstream &buf, int indent_level)
The Kahan summation is a compensated summation algorithm, which significantly reduces numerical error...
Definition: Util.h:122
RooAbsCollection is an abstract container object that can hold multiple RooAbsArg objects.
RooAbsData is the common abstract base class for binned and unbinned datasets.
Definition: RooAbsData.h:67
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
Definition: RooAbsReal.h:61
RooAbsTestStatistic is the abstract base class for all test statistics.
virtual Bool_t processEmptyDataSets() const
Int_t _nGof
Number of designated set to calculated extended term.
GOFOpMode operMode() const
Int_t _nCPU
GOF MP Split mode specified by component (when Auto is active)
RooFit::MPSplit _mpinterl
Array of parallel execution frond ends.
virtual void constOptimizeTestStatistic(ConstOpCode opcode, Bool_t doAlsoTrackingOpt=kTRUE)
Forward constant term optimization management calls to component test statistics.
pRooAbsTestStatistic * _gofArray
virtual Double_t globalNormalization() const
Bool_t setData(RooAbsData &data, Bool_t cloneData=kTRUE)
Change dataset that is used to given one.
void enableOffsetting(Bool_t flag)
virtual RooAbsTestStatistic * create(const char *name, const char *title, RooAbsReal &real, RooAbsData &data, const RooArgSet &projDeps, Configuration const &cfg)=0
GOFOpMode _gofOpMode
Is object initialized
void initMPMode(RooAbsReal *real, RooAbsData *data, const RooArgSet *projDeps, std::string const &rangeName, std::string const &addCoefRangeName)
Initialize multi-processor calculation mode.
ROOT::Math::KahanSum< double > _offset
virtual Double_t offsetCarry() const
void setSimCount(Int_t simCount)
virtual Bool_t redirectServersHook(const RooAbsCollection &newServerList, Bool_t mustReplaceAll, Bool_t nameChange, Bool_t isRecursive)
Forward server redirect calls to component test statistics.
void setEventCount(Int_t nEvents)
virtual Double_t getCarry() const
virtual Double_t evaluatePartition(std::size_t firstEvent, std::size_t lastEvent, std::size_t stepSize) const =0
virtual Bool_t setDataSlave(RooAbsData &, Bool_t=kTRUE, Bool_t=kFALSE)
virtual ~RooAbsTestStatistic()
Destructor.
const RooArgSet * _projDeps
void initSimMode(RooSimultaneous *pdf, RooAbsData *data, const RooArgSet *projDeps, std::string const &rangeName, std::string const &addCoefRangeName)
Initialize simultaneous p.d.f processing mode.
virtual Double_t combinedValue(RooAbsReal **gofArray, Int_t nVal) const =0
virtual Double_t evaluate() const
Calculate and return value of test statistic.
Bool_t isOffsetting() const
Double_t _evalCarry
Offset as KahanSum to avoid loss of precision.
virtual Double_t offset() const
std::vector< RooFit::MPSplit > _gofSplitMode
Array of sub-contexts representing part of the combined test statistic.
virtual void printCompactTreeHook(std::ostream &os, const char *indent="")
Add extra information on component test statistics when printing itself as part of a tree structure.
void setMPSet(Int_t setNum, Int_t numSets)
Set MultiProcessor set number identification of this instance.
Bool_t initialize()
One-time initialization of the test statistic.
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Definition: RooArgSet.h:35
RooRealMPFE is the multi-processor front-end for parallel calculation of RooAbsReal objects.
Definition: RooRealMPFE.h:30
RooSetProxy is the concrete proxy for RooArgSet objects.
Definition: RooSetProxy.h:23
RooSimultaneous facilitates simultaneous fitting of multiple PDFs to subsets of a given dataset.
static const std::string name("name")
@ BulkPartition
Definition: RooGlobalFunc.h:63
std::string rangeName
Stores the configuration parameters for RooAbsTestStatistic.