ROOT  6.06/09
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 "Riosfwd.h"
20 #include "RooAbsReal.h"
21 #include "RooSetProxy.h"
22 #include "RooRealProxy.h"
23 #include "TStopwatch.h"
24 #include <string>
25 
26 class RooArgSet ;
27 class RooAbsData ;
28 class RooAbsReal ;
29 class RooSimultaneous ;
30 class RooRealMPFE ;
31 
36 
38  friend class RooRealMPFE;
39 public:
40 
41  // Constructors, assignment etc
43  RooAbsTestStatistic(const char *name, const char *title, RooAbsReal& real, RooAbsData& data,
44  const RooArgSet& projDeps, const char* rangeName=0, const char* addCoefRangeName=0,
45  Int_t nCPU=1, RooFit::MPSplit interleave=RooFit::BulkPartition, Bool_t verbose=kTRUE, Bool_t splitCutRange=kTRUE) ;
46  RooAbsTestStatistic(const RooAbsTestStatistic& other, const char* name=0);
47  virtual ~RooAbsTestStatistic();
48  virtual RooAbsTestStatistic* create(const char *name, const char *title, RooAbsReal& real, RooAbsData& data,
49  const RooArgSet& projDeps, const char* rangeName=0, const char* addCoefRangeName=0,
50  Int_t nCPU=1, RooFit::MPSplit interleave=RooFit::BulkPartition, Bool_t verbose=kTRUE, Bool_t splitCutRange=kFALSE, Bool_t binnedL=kFALSE) = 0 ;
51 
52  virtual void constOptimizeTestStatistic(ConstOpCode opcode, Bool_t doAlsoTrackingOpt=kTRUE) ;
53 
54  virtual Double_t combinedValue(RooAbsReal** gofArray, Int_t nVal) const = 0 ;
55  virtual Double_t globalNormalization() const {
56  // Default value of global normalization factor is 1.0
57  return 1.0 ;
58  }
59 
60  Bool_t setData(RooAbsData& data, Bool_t cloneData=kTRUE) ;
61 
62  void enableOffsetting(Bool_t flag) ;
63  Bool_t isOffsetting() const { return _doOffset ; }
64  virtual Double_t offset() const { return _offset ; }
65  virtual Double_t offsetCarry() const { return _offsetCarry; }
66 
67 protected:
68 
69  virtual void printCompactTreeHook(std::ostream& os, const char* indent="") ;
70 
71  virtual Bool_t redirectServersHook(const RooAbsCollection& newServerList, Bool_t mustReplaceAll, Bool_t nameChange, Bool_t isRecursive) ;
72  virtual Double_t evaluate() const ;
73 
74  virtual Double_t evaluatePartition(Int_t firstEvent, Int_t lastEvent, Int_t stepSize) const = 0 ;
75  virtual Double_t getCarry() const;
76 
78  void setSimCount(Int_t simCount) {
79  // Store total number of components p.d.f. of a RooSimultaneous in this component test statistic
80  _simCount = simCount ;
81  }
82 
84  // Store total number of events in this component test statistic
85  _nEvents = nEvents ;
86  }
87 
88  Int_t numSets() const {
89  // Return total number of sets for parallel calculation
90  return _numSets ;
91  }
92  Int_t setNum() const {
93  // Return parallel calculation set number for this instance
94  return _setNum ;
95  }
96 
97  RooSetProxy _paramSet ; // Parameters of the test statistic (=parameters of the input function)
98 
100  GOFOpMode operMode() const {
101  // Return test statistic operation mode of this instance (SimMaster, MPMaster or Slave)
102  return _gofOpMode ;
103  }
104 
105  // Original arguments
106  RooAbsReal* _func ; // Pointer to original input function
107  RooAbsData* _data ; // Pointer to original input dataset
108  const RooArgSet* _projDeps ; // Pointer to set with projected observables
109  std::string _rangeName ; // Name of range in which to calculate test statistic
110  std::string _addCoefRangeName ; // Name of reference to be used for RooAddPdf components
111  Bool_t _splitRange ; // Split rangeName in RooSimultaneous index labels if true
112  Int_t _simCount ; // Total number of component p.d.f.s in RooSimultaneous (if any)
113  Bool_t _verbose ; // Verbose messaging if true
114 
115  virtual Bool_t setDataSlave(RooAbsData& /*data*/, Bool_t /*cloneData*/=kTRUE, Bool_t /*ownNewDataAnyway*/=kFALSE) { return kTRUE ; }
116 
117  //private:
118 
119 
120  virtual Bool_t processEmptyDataSets() const { return kTRUE ; }
121 
122  Bool_t initialize() ;
123  void initSimMode(RooSimultaneous* pdf, RooAbsData* data, const RooArgSet* projDeps, const char* rangeName, const char* addCoefRangeName) ;
124  void initMPMode(RooAbsReal* real, RooAbsData* data, const RooArgSet* projDeps, const char* rangeName, const char* addCoefRangeName) ;
125 
126  mutable Bool_t _init ; //! Is object initialized
127  GOFOpMode _gofOpMode ; // Operation mode of test statistic instance
128 
129  Int_t _nEvents ; // Total number of events in test statistic calculation
130  Int_t _setNum ; // Partition number of this instance in parallel calculation mode
131  Int_t _numSets ; // Total number of partitions in parallel calculation mode
132  Int_t _extSet ; //! Number of designated set to calculated extended term
133 
134  // Simultaneous mode data
135  Int_t _nGof ; // Number of sub-contexts
136  pRooAbsTestStatistic* _gofArray ; //! Array of sub-contexts representing part of the combined test statistic
137  std::vector<RooFit::MPSplit> _gofSplitMode ; //! GOF MP Split mode specified by component (when Auto is active)
138 
139  // Parallel mode data
140  Int_t _nCPU ; // Number of processors to use in parallel calculation mode
141  pRooRealMPFE* _mpfeArray ; //! Array of parallel execution frond ends
142 
143  RooFit::MPSplit _mpinterl ; // Use interleaving strategy rather than N-wise split for partioning of dataset for multiprocessor-split
144  Bool_t _doOffset ; // Apply interval value offset to control numeric precision?
145  mutable Double_t _offset ; //! Offset
146  mutable Double_t _offsetCarry; //! avoids loss of precision
147  mutable Double_t _evalCarry; //! carry of Kahan sum in evaluatePartition
148 
149  ClassDef(RooAbsTestStatistic,2) // Abstract base class for real-valued test statistics
150 
151 };
152 
153 #endif
RooAbsTestStatistic * pRooAbsTestStatistic
virtual Double_t evaluate() const
Calculates and return value of test statistic.
Double_t _offsetCarry
Offset.
RooFit::MPSplit _mpinterl
Array of parallel execution frond ends.
void setSimCount(Int_t simCount)
GOFOpMode _gofOpMode
Is object initialized.
virtual void constOptimizeTestStatistic(ConstOpCode opcode, Bool_t doAlsoTrackingOpt=kTRUE)
Forward constant term optimization management calls to component test statistics. ...
void initMPMode(RooAbsReal *real, RooAbsData *data, const RooArgSet *projDeps, const char *rangeName, const char *addCoefRangeName)
Initialize multi-processor calculation mode.
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
virtual Double_t getCarry() const
const Bool_t kFALSE
Definition: Rtypes.h:92
std::vector< RooFit::MPSplit > _gofSplitMode
Array of sub-contexts representing part of the combined test statistic.
void initSimMode(RooSimultaneous *pdf, RooAbsData *data, const RooArgSet *projDeps, const char *rangeName, const char *addCoefRangeName)
Initialize simultaneous p.d.f processing mode.
void setMPSet(Int_t setNum, Int_t numSets)
Set MultiProcessor set number identification of this instance.
virtual Double_t offset() const
virtual Double_t offsetCarry() const
#define ClassDef(name, id)
Definition: Rtypes.h:254
pRooAbsTestStatistic * _gofArray
Double_t _evalCarry
avoids loss of precision
virtual ~RooAbsTestStatistic()
Destructor.
virtual Double_t combinedValue(RooAbsReal **gofArray, Int_t nVal) const =0
const RooArgSet * _projDeps
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...
Bool_t initialize()
One-time initialization of the test statistic.
virtual Bool_t redirectServersHook(const RooAbsCollection &newServerList, Bool_t mustReplaceAll, Bool_t nameChange, Bool_t isRecursive)
Forward server redirect calls to component test statistics.
const int nEvents
Definition: testRooFit.cxx:42
virtual Double_t evaluatePartition(Int_t firstEvent, Int_t lastEvent, Int_t stepSize) const =0
bool verbose
RooAbsData * pRooAbsData
static void indent(ostringstream &buf, int indent_level)
virtual Bool_t processEmptyDataSets() const
double Double_t
Definition: RtypesCore.h:55
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
Definition: RooAbsReal.h:53
virtual Double_t globalNormalization() const
Int_t _nGof
Number of designated set to calculated extended term.
void setEventCount(Int_t nEvents)
GOFOpMode operMode() const
Bool_t isOffsetting() const
#define name(a, b)
Definition: linkTestLib0.cpp:5
virtual RooAbsTestStatistic * create(const char *name, const char *title, RooAbsReal &real, RooAbsData &data, const RooArgSet &projDeps, const char *rangeName=0, const char *addCoefRangeName=0, Int_t nCPU=1, RooFit::MPSplit interleave=RooFit::BulkPartition, Bool_t verbose=kTRUE, Bool_t splitCutRange=kFALSE, Bool_t binnedL=kFALSE)=0
Bool_t setData(RooAbsData &data, Bool_t cloneData=kTRUE)
Change dataset that is used to given one.
RooRealMPFE * pRooRealMPFE
virtual Bool_t setDataSlave(RooAbsData &, Bool_t=kTRUE, Bool_t=kFALSE)
const Bool_t kTRUE
Definition: Rtypes.h:91
void enableOffsetting(Bool_t flag)
RooAbsTestStatistic()
Default constructor.
Int_t _nCPU
GOF MP Split mode specified by component (when Auto is active)