ROOT   Reference Guide
Searching...
No Matches
ConfidenceBelt.h
Go to the documentation of this file.
1// @(#)root/roostats:$Id$
2// Author: Kyle Cranmer, Lorenzo Moneta, Gregory Schott, Wouter Verkerke
3/*************************************************************************
6 * *
7 * For the licensing terms see $ROOTSYS/LICENSE. * 8 * For the list of contributors see$ROOTSYS/README/CREDITS. *
9 *************************************************************************/
10
11#ifndef RooStats_ConfidenceBelt
12#define RooStats_ConfidenceBelt
13
14#include "RooArgSet.h"
15#include "RooAbsData.h"
17
19
20#include "TRef.h"
21
22#include <vector>
23#include <map>
24
25
26namespace RooStats {
27
28////////////////////////////////////////////////////////////////////////////////
29
31
32 typedef std::pair<double, double> AcceptanceCriteria; // defined by Confidence level, leftside tail probability
33 typedef std::map<Int_t, AcceptanceCriteria> LookupTable; // map ( Index, ( CL, leftside tail prob) )
34
35 public:
37
38 void Add(double cl, double leftside){
39 // add cl,leftside pair to lookup table
40 AcceptanceCriteria tmp(cl, leftside);
41
42 // should check to see if this is already in the map
43 if(GetLookupIndex(cl,leftside) >=0 ){
45 } else
46 fLookupTable[fLookupTable.size()]= tmp;
47 }
48
49 Int_t GetLookupIndex(double cl, double leftside){
50 // get index for cl,leftside pair
51 AcceptanceCriteria tmp(cl, leftside);
52
53 double tolerance = 1E-6; // some small number to protect floating point comparison. What is better way?
54 LookupTable::iterator it = fLookupTable.begin();
55 Int_t index = -1;
56 for(; it!= fLookupTable.end(); ++it) {
57 index++;
58 if( std::abs( (*it).second.first - cl ) < tolerance &&
59 std::abs( (*it).second.second - leftside ) < tolerance )
60 break; // exit loop, found
61 }
62
63 // check that it was found
64 if(index == (Int_t)fLookupTable.size())
65 index = -1;
66
67 return index;
68 }
69
71 if(index<0 || index>(Int_t)fLookupTable.size()) {
72 std::cout << "SamplingSummaryLookup::GetConfidenceLevel, index not in lookup table" << std::endl;
73 return -1;
74 }
75 return fLookupTable[index].first;
76 }
77
79 if(index<0 || index>(Int_t)fLookupTable.size()) {
80 std::cout << "SamplingSummaryLookup::GetLeftSideTailFraction, index not in lookup table" << std::endl;
81 return -1;
82 }
83 return fLookupTable[index].second;
84 }
85
86 private:
87 LookupTable fLookupTable; ///< map ( Index, ( CL, leftside tail prob) )
88
89 protected:
90 ClassDefOverride(SamplingSummaryLookup,1) // A simple class used by ConfidenceBelt
91 };
92
93
94 ///////////////////////////
95 class AcceptanceRegion : public TObject{
96 public:
98
99 AcceptanceRegion(Int_t lu, double ll, double ul) : fLookupIndex(lu), fLowerLimit(ll), fUpperLimit(ul) {}
101 double GetLowerLimit() { return fLowerLimit; }
102 double GetUpperLimit() { return fUpperLimit; }
103
104 private:
105 Int_t fLookupIndex; // want a small footprint reference to the RooArgSet for particular parameter point
106 double fLowerLimit; // lower limit on test statistic
107 double fUpperLimit; // upper limit on test statistic
108
109 protected:
110 ClassDefOverride(AcceptanceRegion,1) // A simple class for acceptance regions used for ConfidenceBelt
111
112 };
113
114////////////////////////////////////////////////////////////////////////////////
115
116 class SamplingSummary : public TObject {
117 public:
121 }
124 return (SamplingDistribution*) fSamplingDistribution.GetObject(); // dereference TRef
125 }
127
130 if( fAcceptanceRegions.count(index) !=0) {
131 std::cout << "SamplingSummary::AddAcceptanceRegion, need to implement merging protocol" << std::endl;
132 } else {
134 }
135 }
136
137 private:
138 Int_t fParameterPointIndex; // want a small footprint reference to the RooArgSet for particular parameter point
139 TRef fSamplingDistribution; // persistent pointer to a SamplingDistribution
140 std::map<Int_t, AcceptanceRegion> fAcceptanceRegions;
141
142 protected:
143 ClassDefOverride(SamplingSummary,1) // A summary of acceptance regions for confidence belt
144
145 };
146
147////////////////////////////////////////////////////////////////////////////////
148
149 class ConfidenceBelt : public TNamed {
150
151 private:
153 std::vector<SamplingSummary> fSamplingSummaries; // composite of several AcceptanceRegions
154 RooAbsData* fParameterPoints = nullptr; // either a histogram (RooDataHist) or a tree (RooDataSet)
155
156
157 public:
158 // constructors,destructors
159 ConfidenceBelt() = default;
160 ConfidenceBelt(const char* name);
161 ConfidenceBelt(const char* name, const char* title);
162 ConfidenceBelt(const char* name, RooAbsData&);
163 ConfidenceBelt(const char* name, const char* title, RooAbsData&);
164
165 /// add after creating a region
166 void AddAcceptanceRegion(RooArgSet&, AcceptanceRegion region, double cl=-1., double leftside=-1.);
167
168 /// add without creating a region, more useful for clients
169 void AddAcceptanceRegion(RooArgSet& point, Int_t dataSetIndex, double lower, double upper, double cl=-1., double leftside=-1.);
170
171 AcceptanceRegion* GetAcceptanceRegion(RooArgSet&, double cl=-1., double leftside=-1.);
172 double GetAcceptanceRegionMin(RooArgSet&, double cl=-1., double leftside=-1.);
173 double GetAcceptanceRegionMax(RooArgSet&, double cl=-1., double leftside=-1.);
174 std::vector<double> ConfidenceLevels() const ;
175
176 /// do we want it to return list of parameters
177 virtual RooArgSet* GetParameters() const;
178
179 /// check if parameters are correct. (dummy implementation to start)
180 bool CheckParameters(RooArgSet&) const ;
181
182 protected:
183 ClassDefOverride(ConfidenceBelt,1) // A confidence belt for the Neyman Construction
184
185 };
186}
187
188#endif
#define ClassDefOverride(name, id)
Definition Rtypes.h:341
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
char name[80]
Definition TGX11.cxx:110
Abstract base class for binned and unbinned datasets.
Definition RooAbsData.h:57
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Definition RooArgSet.h:55
AcceptanceRegion(Int_t lu, double ll, double ul)
ConfidenceBelt is a concrete implementation of the ConfInterval interface.
std::vector< SamplingSummary > fSamplingSummaries
virtual RooArgSet * GetParameters() const
do we want it to return list of parameters
AcceptanceRegion * GetAcceptanceRegion(RooArgSet &, double cl=-1., double leftside=-1.)
Method to determine if a parameter point is in the interval.
double GetAcceptanceRegionMax(RooArgSet &, double cl=-1., double leftside=-1.)
void AddAcceptanceRegion(RooArgSet &, AcceptanceRegion region, double cl=-1., double leftside=-1.)
SamplingSummaryLookup fSamplingSummaryLookup
std::vector< double > ConfidenceLevels() const
double GetAcceptanceRegionMin(RooArgSet &, double cl=-1., double leftside=-1.)
bool CheckParameters(RooArgSet &) const
check if parameters are correct. (dummy implementation to start)
This class simply holds a sampling distribution of some test statistic.
Int_t GetLookupIndex(double cl, double leftside)
double GetLeftSideTailFraction(Int_t index)
std::map< Int_t, AcceptanceCriteria > LookupTable
std::pair< double, double > AcceptanceCriteria
double GetConfidenceLevel(Int_t index)
LookupTable fLookupTable
map ( Index, ( CL, leftside tail prob) )
std::map< Int_t, AcceptanceRegion > fAcceptanceRegions
SamplingDistribution * GetSamplingDistribution()
AcceptanceRegion & GetAcceptanceRegion(Int_t index=0)