11 #ifndef RooStats_ConfidenceBelt
12 #define RooStats_ConfidenceBelt
30 class SamplingSummaryLookup :
public TObject {
32 typedef std::pair<Double_t, Double_t> AcceptanceCriteria;
33 typedef std::map<Int_t, AcceptanceCriteria> LookupTable;
36 SamplingSummaryLookup() {}
37 virtual ~SamplingSummaryLookup() {}
39 void Add(Double_t cl, Double_t leftside){
41 AcceptanceCriteria tmp(cl, leftside);
44 if(GetLookupIndex(cl,leftside) >=0 ){
45 std::cout<<
"SamplingSummaryLookup::Add, already in lookup table" << std::endl;
47 fLookupTable[fLookupTable.size()]= tmp;
50 Int_t GetLookupIndex(Double_t cl, Double_t leftside){
52 AcceptanceCriteria tmp(cl, leftside);
54 Double_t tolerance = 1E-6;
55 LookupTable::iterator it = fLookupTable.begin();
57 for(; it!= fLookupTable.end(); ++it) {
59 if( TMath::Abs( (*it).second.first - cl ) < tolerance &&
60 TMath::Abs( (*it).second.second - leftside ) < tolerance )
65 if(index == (Int_t)fLookupTable.size())
71 Double_t GetConfidenceLevel(Int_t index){
72 if(index<0 || index>(Int_t)fLookupTable.size()) {
73 std::cout <<
"SamplingSummaryLookup::GetConfidenceLevel, index not in lookup table" << std::endl;
76 return fLookupTable[index].first;
79 Double_t GetLeftSideTailFraction(Int_t index){
80 if(index<0 || index>(Int_t)fLookupTable.size()) {
81 std::cout <<
"SamplingSummaryLookup::GetLeftSideTailFraction, index not in lookup table" << std::endl;
84 return fLookupTable[index].second;
88 LookupTable fLookupTable;
91 ClassDef(SamplingSummaryLookup,1)
96 class AcceptanceRegion :
public TObject{
98 AcceptanceRegion() : fLookupIndex(0), fLowerLimit(0), fUpperLimit(0) {}
99 virtual ~AcceptanceRegion() {}
101 AcceptanceRegion(Int_t lu, Double_t ll, Double_t ul){
106 Int_t GetLookupIndex(){
return fLookupIndex;}
107 Double_t GetLowerLimit(){
return fLowerLimit;}
108 Double_t GetUpperLimit(){
return fUpperLimit;}
112 Double_t fLowerLimit;
113 Double_t fUpperLimit;
116 ClassDef(AcceptanceRegion,1)
122 class SamplingSummary :
public TObject {
124 SamplingSummary() : fParameterPointIndex(0) {}
125 virtual ~SamplingSummary() {}
126 SamplingSummary(AcceptanceRegion& ar) : fParameterPointIndex(0) {
127 AddAcceptanceRegion(ar);
129 Int_t GetParameterPointIndex(){
return fParameterPointIndex;}
130 SamplingDistribution* GetSamplingDistribution(){
131 return (SamplingDistribution*) fSamplingDistribution.GetObject();
133 AcceptanceRegion& GetAcceptanceRegion(Int_t index=0){
return fAcceptanceRegions[index];}
135 void AddAcceptanceRegion(AcceptanceRegion& ar){
136 Int_t index = ar.GetLookupIndex();
137 if( fAcceptanceRegions.count(index) !=0) {
138 std::cout <<
"SamplingSummary::AddAcceptanceRegion, need to implement merging protocol" << std::endl;
140 fAcceptanceRegions[index]=ar;
145 Int_t fParameterPointIndex;
146 TRef fSamplingDistribution;
147 std::map<Int_t, AcceptanceRegion> fAcceptanceRegions;
150 ClassDef(SamplingSummary,1)
156 class ConfidenceBelt :
public TNamed {
159 SamplingSummaryLookup fSamplingSummaryLookup;
160 std::vector<SamplingSummary> fSamplingSummaries;
161 RooAbsData* fParameterPoints;
167 ConfidenceBelt(
const char* name);
168 ConfidenceBelt(
const char* name,
const char* title);
169 ConfidenceBelt(
const char* name, RooAbsData&);
170 ConfidenceBelt(
const char* name,
const char* title, RooAbsData&);
171 virtual ~ConfidenceBelt();
174 void AddAcceptanceRegion(RooArgSet&, AcceptanceRegion region, Double_t cl=-1., Double_t leftside=-1.);
177 void AddAcceptanceRegion(RooArgSet& point, Int_t dataSetIndex, Double_t lower, Double_t upper, Double_t cl=-1., Double_t leftside=-1.);
179 AcceptanceRegion* GetAcceptanceRegion(RooArgSet&, Double_t cl=-1., Double_t leftside=-1.);
180 Double_t GetAcceptanceRegionMin(RooArgSet&, Double_t cl=-1., Double_t leftside=-1.);
181 Double_t GetAcceptanceRegionMax(RooArgSet&, Double_t cl=-1., Double_t leftside=-1.);
182 std::vector<Double_t> ConfidenceLevels()
const ;
189 virtual RooArgSet* GetParameters()
const;
192 Bool_t CheckParameters(RooArgSet&)
const ;
195 ClassDef(ConfidenceBelt,1)