13#ifndef ROO_ABS_TEST_STATISTIC
14#define ROO_ABS_TEST_STATISTIC
30class RooAbsTestStatistic ;
32typedef RooRealMPFE* pRooRealMPFE ;
35 friend class RooRealMPFE;
38 struct Configuration {
40 std::string rangeName;
41 std::string addCoefRangeName;
45 bool splitCutRange =
false;
46 bool cloneInputData =
true;
47 double integrateOverBinsPrecision = -1.;
49 bool takeGlobalObservablesFromData =
false;
53 RooAbsTestStatistic(
const char *
name,
const char *title, RooAbsReal& real, RooAbsData& data,
54 const RooArgSet& projDeps, Configuration
const& cfg);
55 RooAbsTestStatistic(
const RooAbsTestStatistic& other,
const char*
name=
nullptr);
56 ~RooAbsTestStatistic()
override;
57 virtual RooAbsTestStatistic* create(
const char *
name,
const char *title, RooAbsReal& real, RooAbsData& data,
58 const RooArgSet& projDeps, Configuration
const& cfg) = 0;
60 void constOptimizeTestStatistic(ConstOpCode opcode,
bool doAlsoTrackingOpt=
true)
override ;
62 virtual double combinedValue(RooAbsReal** gofArray,
Int_t nVal)
const = 0 ;
63 virtual double globalNormalization()
const {
68 bool setData(RooAbsData& data,
bool cloneData=
true)
override ;
70 void enableOffsetting(
bool flag)
override ;
71 bool isOffsetting()
const override {
return _doOffset ; }
72 double offset()
const override {
return _offset.Sum() ; }
73 virtual double offsetCarry()
const {
return _offset.Carry(); }
75 enum GOFOpMode { SimMaster,MPMaster,Slave } ;
76 GOFOpMode operMode()
const {
83 void printCompactTreeHook(std::ostream& os,
const char*
indent=
"")
override ;
85 bool redirectServersHook(
const RooAbsCollection& newServerList,
bool mustReplaceAll,
bool nameChange,
bool isRecursive)
override ;
88 virtual double evaluatePartition(std::size_t firstEvent, std::size_t lastEvent, std::size_t stepSize)
const = 0 ;
89 virtual double getCarry()
const;
92 virtual void runRecalculateCache(std::size_t , std::size_t , std::size_t )
const {}
95 void setSimCount(
Int_t simCount) {
97 _simCount = simCount ;
100 void setEventCount(
Int_t nEvents) {
105 Int_t numSets()
const {
109 Int_t setNum()
const {
118 RooAbsReal* _func =
nullptr;
119 RooAbsData* _data =
nullptr;
120 const RooArgSet* _projDeps =
nullptr;
121 std::string _rangeName ;
122 std::string _addCoefRangeName ;
123 bool _splitRange =
false;
125 bool _verbose =
false;
127 virtual bool setDataSlave(RooAbsData& ,
bool =
true,
bool =
false) {
return true ; }
132 virtual bool processEmptyDataSets()
const {
return true ; }
135 void initSimMode(RooSimultaneous* pdf, RooAbsData* data,
const RooArgSet* projDeps, std::string
const& rangeName, std::string
const& addCoefRangeName) ;
136 void initMPMode(RooAbsReal* real, RooAbsData* data,
const RooArgSet* projDeps, std::string
const& rangeName, std::string
const& addCoefRangeName) ;
138 mutable bool _init =
false;
139 GOFOpMode _gofOpMode = Slave;
147 std::vector<std::unique_ptr<RooAbsTestStatistic>> _gofArray;
151 pRooRealMPFE* _mpfeArray =
nullptr;
154 bool _doOffset =
false;
155 const bool _takeGlobalObservablesFromData =
false;
156 mutable ROOT::Math::KahanSum<double> _offset {0.0};
157 mutable double _evalCarry = 0.0;
RooCollectionProxy< RooArgSet > RooSetProxy
double evaluate() const override
int Int_t
Signed integer 4 bytes (int).
static void indent(ostringstream &buf, int indent_level)
Abstract base class for binned and unbinned datasets.
Abstract base class for objects that represent a real value and implements functionality common to al...
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Facilitates simultaneous fitting of multiple PDFs to subsets of a given dataset.