39 ClassImp(RooStats::ConfidenceBelt); ;
41 using namespace RooStats;
47 ConfidenceBelt::ConfidenceBelt() :
48 TNamed(), fParameterPoints(0)
55 ConfidenceBelt::ConfidenceBelt(
const char* name) :
56 TNamed(name,name), fParameterPoints(0)
63 ConfidenceBelt::ConfidenceBelt(
const char* name,
const char* title) :
64 TNamed(name,title), fParameterPoints(0)
71 ConfidenceBelt::ConfidenceBelt(
const char* name, RooAbsData& data) :
72 TNamed(name,name), fParameterPoints((RooAbsData*)data.Clone(
"PointsToTestForBelt"))
79 ConfidenceBelt::ConfidenceBelt(
const char* name,
const char* title, RooAbsData& data) :
80 TNamed(name,title), fParameterPoints((RooAbsData*)data.Clone(
"PointsToTestForBelt"))
87 ConfidenceBelt::~ConfidenceBelt()
93 Double_t ConfidenceBelt::GetAcceptanceRegionMin(RooArgSet& parameterPoint, Double_t cl, Double_t leftside) {
94 if(cl>0 || leftside > 0) cout <<
"using default cl, leftside for now" <<endl;
95 AcceptanceRegion * region = GetAcceptanceRegion(parameterPoint, cl,leftside);
96 return (region) ? region->GetLowerLimit() : TMath::QuietNaN();
101 Double_t ConfidenceBelt::GetAcceptanceRegionMax(RooArgSet& parameterPoint, Double_t cl, Double_t leftside) {
102 if(cl>0 || leftside > 0) cout <<
"using default cl, leftside for now" <<endl;
103 AcceptanceRegion * region = GetAcceptanceRegion(parameterPoint, cl,leftside);
104 return (region) ? region->GetUpperLimit() : TMath::QuietNaN();
109 vector<Double_t> ConfidenceBelt::ConfidenceLevels()
const {
110 vector<Double_t> levels;
116 void ConfidenceBelt::AddAcceptanceRegion(RooArgSet& parameterPoint, Int_t dsIndex,
117 Double_t lower, Double_t upper,
118 Double_t cl, Double_t leftside){
119 if(cl>0 || leftside > 0) cout <<
"using default cl, leftside for now" <<endl;
121 RooDataSet* tree =
dynamic_cast<RooDataSet*
>( fParameterPoints );
122 RooDataHist* hist =
dynamic_cast<RooDataHist*
>( fParameterPoints );
126 if( !this->CheckParameters(parameterPoint) )
127 std::cout <<
"problem with parameters" << std::endl;
129 Int_t luIndex = fSamplingSummaryLookup.GetLookupIndex(cl, leftside);
132 fSamplingSummaryLookup.Add(cl,leftside);
133 luIndex = fSamplingSummaryLookup.GetLookupIndex(cl, leftside);
134 cout <<
"lookup index = " << luIndex << endl;
136 AcceptanceRegion* thisRegion =
new AcceptanceRegion(luIndex, lower, upper);
144 int index = hist->getIndex(parameterPoint);
148 if((Int_t)fSamplingSummaries.size() <= index) {
149 fSamplingSummaries.reserve( hist->numEntries() );
150 fSamplingSummaries.resize( hist->numEntries() );
154 fSamplingSummaries.at(index) = *thisRegion;
162 if((Int_t)fSamplingSummaries.size() <= index){
163 fSamplingSummaries.reserve( tree->numEntries() );
164 fSamplingSummaries.resize( tree->numEntries() );
168 fSamplingSummaries.at( index ) = *thisRegion;
174 void ConfidenceBelt::AddAcceptanceRegion(RooArgSet& parameterPoint, AcceptanceRegion region,
175 Double_t cl, Double_t leftside){
176 if(cl>0 || leftside > 0) cout <<
"using default cl, leftside for now" <<endl;
178 RooDataSet* tree =
dynamic_cast<RooDataSet*
>( fParameterPoints );
179 RooDataHist* hist =
dynamic_cast<RooDataHist*
>( fParameterPoints );
181 if( !this->CheckParameters(parameterPoint) )
182 std::cout <<
"problem with parameters" << std::endl;
191 int index = hist->getIndex(parameterPoint);
194 if((Int_t)fSamplingSummaries.size() < index) fSamplingSummaries.reserve( hist->numEntries() );
197 fSamplingSummaries.at(index) = region;
200 tree->add( parameterPoint );
201 int index = tree->numEntries() - 1;
203 if((Int_t)fSamplingSummaries.size() < index) fSamplingSummaries.reserve( tree->numEntries() );
206 fSamplingSummaries.at( index ) = region;
213 AcceptanceRegion* ConfidenceBelt::GetAcceptanceRegion(RooArgSet ¶meterPoint, Double_t cl, Double_t leftside)
215 if(cl>0 || leftside > 0) cout <<
"using default cl, leftside for now" <<endl;
217 RooDataSet* tree =
dynamic_cast<RooDataSet*
>( fParameterPoints );
218 RooDataHist* hist =
dynamic_cast<RooDataHist*
>( fParameterPoints );
220 if( !this->CheckParameters(parameterPoint) ){
221 std::cout <<
"problem with parameters" << std::endl;
231 int index = hist->getIndex(parameterPoint);
232 return &(fSamplingSummaries.at(index).GetAcceptanceRegion());
238 const RooArgSet* thisPoint = 0;
239 for(index=0; index<tree->numEntries(); ++index){
240 thisPoint = tree->get(index);
241 bool samePoint =
true;
242 TIter it = parameterPoint.createIterator();
244 while ( samePoint && (myarg = (RooRealVar *)it.Next())) {
245 if(myarg->getVal() != thisPoint->getRealValue(myarg->GetName()))
252 return &(fSamplingSummaries.at(index).GetAcceptanceRegion());
255 std::cout <<
"dataset is not initialized properly" << std::endl;
265 RooArgSet* ConfidenceBelt::GetParameters()
const
267 return new RooArgSet(*(fParameterPoints->get()));
272 Bool_t ConfidenceBelt::CheckParameters(RooArgSet ¶meterPoint)
const
274 if (parameterPoint.getSize() != fParameterPoints->get()->getSize() ) {
275 std::cout <<
"size is wrong, parameters don't match" << std::endl;
278 if ( ! parameterPoint.equals( *(fParameterPoints->get() ) ) ) {
279 std::cout <<
"size is ok, but parameters don't match" << std::endl;