#ifndef RooStats_ProfileLikelihoodCalculator
#include "RooStats/ProfileLikelihoodCalculator.h"
#endif
#ifndef RooStats_RooStatsUtils
#include "RooStats/RooStatsUtils.h"
#endif
#include "RooStats/LikelihoodInterval.h"
#include "RooStats/HypoTestResult.h"
#include "RooFitResult.h"
#include "RooRealVar.h"
#include "RooProfileLL.h"
#include "RooNLLVar.h"
#include "RooGlobalFunc.h"
#include "RooProdPdf.h"
ClassImp(RooStats::ProfileLikelihoodCalculator) ;
using namespace RooFit;
using namespace RooStats;
ProfileLikelihoodCalculator::ProfileLikelihoodCalculator() :
CombinedCalculator(), fFitResult(0)
{
}
ProfileLikelihoodCalculator::ProfileLikelihoodCalculator(RooAbsData& data, RooAbsPdf& pdf, const RooArgSet& paramsOfInterest,
Double_t size, const RooArgSet* nullParams ) :
CombinedCalculator(data,pdf, paramsOfInterest, size, nullParams ),
fFitResult(0)
{
}
ProfileLikelihoodCalculator::ProfileLikelihoodCalculator(RooAbsData& data, ModelConfig& model, Double_t size) :
CombinedCalculator(data, model, size),
fFitResult(0)
{
assert(model.GetPdf() );
if (model.GetPriorPdf() ) {
std::string name = std::string("Costrained_") + (model.GetPdf())->GetName() + std::string("_with_") + (model.GetPriorPdf())->GetName();
fPdf = new RooProdPdf(name.c_str(),name.c_str(), *(model.GetPdf()), *(model.GetPriorPdf()) );
model.SetPdf(*fPdf);
}
}
ProfileLikelihoodCalculator::~ProfileLikelihoodCalculator(){
if (fFitResult) delete fFitResult;
}
void ProfileLikelihoodCalculator::DoReset() const {
if (fFitResult) delete fFitResult;
fFitResult = 0;
}
void ProfileLikelihoodCalculator::DoGlobalFit() const {
DoReset();
RooAbsPdf * pdf = GetPdf();
RooAbsData* data = GetData();
if (!data || !pdf ) return;
RooArgSet* constrainedParams = pdf->getParameters(*data);
if (!constrainedParams) return ;
RemoveConstantParameters(constrainedParams);
RooFitResult* fit = pdf->fitTo(*data, Constrain(*constrainedParams),Strategy(1),Hesse(kTRUE),Save(kTRUE),PrintLevel(-1),Warnings(kFALSE));
fit->Print();
delete constrainedParams;
fFitResult = fit;
}
LikelihoodInterval* ProfileLikelihoodCalculator::GetInterval() const {
RooAbsPdf * pdf = GetPdf();
RooAbsData* data = GetData();
if (!data || !pdf || fPOI.getSize() == 0) return 0;
RooArgSet* constrainedParams = pdf->getParameters(*data);
RemoveConstantParameters(constrainedParams);
RooAbsReal* nll = pdf->createNLL(*data, CloneData(kTRUE), Constrain(*constrainedParams));
RooAbsReal* profile = nll->createProfile(fPOI);
profile->addOwnedComponents(*nll) ;
if (!fFitResult) DoGlobalFit();
if (!fFitResult) return 0;
const RooArgList & fitParams = fFitResult->floatParsFinal();
for (int i = 0; i < fitParams.getSize(); ++i) {
RooRealVar & fitPar = (RooRealVar &) fitParams[i];
RooRealVar * par = (RooRealVar*) fPOI.find( fitPar.GetName() );
if (par) {
par->setVal( fitPar.getVal() );
par->setError( fitPar.getError() );
}
}
profile->getVal();
TString name = TString("LikelihoodInterval_") + TString(GetName() );
TIter iter = fPOI.createIterator();
RooArgSet fitParSet(fitParams);
RooArgSet * bestPOI = new RooArgSet();
while (RooAbsArg * arg = (RooAbsArg*) iter.Next() ) {
RooAbsArg * p = fitParSet.find( arg->GetName() );
if (p) bestPOI->addClone(*p);
else bestPOI->addClone(*arg);
}
LikelihoodInterval* interval = new LikelihoodInterval(name, profile, &fPOI, bestPOI);
interval->SetConfidenceLevel(1.-fSize);
delete constrainedParams;
return interval;
}
HypoTestResult* ProfileLikelihoodCalculator::GetHypoTest() const {
RooAbsPdf * pdf = GetPdf();
RooAbsData* data = GetData();
if (!data || !pdf) return 0;
if (fNullParams.getSize() == 0) return 0;
if (!fFitResult) DoGlobalFit();
if (!fFitResult) return 0;
RooArgSet* constrainedParams = pdf->getParameters(*data);
RemoveConstantParameters(constrainedParams);
if (!fFitResult) DoGlobalFit();
Double_t NLLatMLE= fFitResult->minNll();
RooArgList poiList;
poiList.add(fNullParams);
std::vector<double> oldValues(poiList.getSize() );
for (unsigned int i = 0; i < oldValues.size(); ++i) {
RooRealVar * mytarget = (RooRealVar*) constrainedParams->find(poiList[i].GetName());
if (mytarget) {
oldValues[i] = mytarget->getVal();
mytarget->setVal( ( (RooRealVar&) poiList[i] ).getVal() );
mytarget->setConstant(kTRUE);
}
}
RooArgSet nuisParams(*constrainedParams);
RemoveConstantParameters(&nuisParams);
bool existVarParams = false;
TIter it = nuisParams.createIterator();
RooRealVar * myarg = 0;
while ((myarg = (RooRealVar *)it.Next())) {
if ( !myarg->isConstant() ) {
existVarParams = true;
break;
}
}
Double_t NLLatCondMLE = NLLatMLE;
if (existVarParams) {
RooFitResult* fit2 = pdf->fitTo(*data,Constrain(*constrainedParams),Hesse(kFALSE),Strategy(0), Minos(kFALSE), Save(kTRUE),PrintLevel(-1),Warnings(kFALSE));
NLLatCondMLE = fit2->minNll();
fit2->Print();
}
else {
RooAbsReal* nll = pdf->createNLL(*data, CloneData(kTRUE), Constrain(*constrainedParams));
NLLatCondMLE = nll->getVal();
delete nll;
}
Double_t deltaNLL = std::max( NLLatCondMLE-NLLatMLE, 0.);
TString name = TString("ProfileLRHypoTestResult_") + TString(GetName() );
HypoTestResult* htr =
new HypoTestResult(name, SignificanceToPValue(sqrt( 2*deltaNLL)), 0 );
for (unsigned int i = 0; i < oldValues.size(); ++i) {
RooRealVar * mytarget = (RooRealVar*) constrainedParams->find(poiList[i].GetName());
if (mytarget) {
mytarget->setVal(oldValues[i] );
mytarget->setConstant(false);
}
}
delete constrainedParams;
return htr;
}
ProfileLikelihoodCalculator.cxx:1 ProfileLikelihoodCalculator.cxx:2 ProfileLikelihoodCalculator.cxx:3 ProfileLikelihoodCalculator.cxx:4 ProfileLikelihoodCalculator.cxx:5 ProfileLikelihoodCalculator.cxx:6 ProfileLikelihoodCalculator.cxx:7 ProfileLikelihoodCalculator.cxx:8 ProfileLikelihoodCalculator.cxx:9 ProfileLikelihoodCalculator.cxx:10 ProfileLikelihoodCalculator.cxx:11 ProfileLikelihoodCalculator.cxx:12 ProfileLikelihoodCalculator.cxx:13 ProfileLikelihoodCalculator.cxx:14 ProfileLikelihoodCalculator.cxx:15 ProfileLikelihoodCalculator.cxx:16 ProfileLikelihoodCalculator.cxx:17 ProfileLikelihoodCalculator.cxx:18 ProfileLikelihoodCalculator.cxx:19 ProfileLikelihoodCalculator.cxx:20 ProfileLikelihoodCalculator.cxx:21 ProfileLikelihoodCalculator.cxx:22 ProfileLikelihoodCalculator.cxx:23 ProfileLikelihoodCalculator.cxx:24 ProfileLikelihoodCalculator.cxx:25 ProfileLikelihoodCalculator.cxx:26 ProfileLikelihoodCalculator.cxx:27 ProfileLikelihoodCalculator.cxx:28 ProfileLikelihoodCalculator.cxx:29 ProfileLikelihoodCalculator.cxx:30 ProfileLikelihoodCalculator.cxx:31 ProfileLikelihoodCalculator.cxx:32 ProfileLikelihoodCalculator.cxx:33 ProfileLikelihoodCalculator.cxx:34 ProfileLikelihoodCalculator.cxx:35 ProfileLikelihoodCalculator.cxx:36 ProfileLikelihoodCalculator.cxx:37 ProfileLikelihoodCalculator.cxx:38 ProfileLikelihoodCalculator.cxx:39 ProfileLikelihoodCalculator.cxx:40 ProfileLikelihoodCalculator.cxx:41 ProfileLikelihoodCalculator.cxx:42 ProfileLikelihoodCalculator.cxx:43 ProfileLikelihoodCalculator.cxx:44 ProfileLikelihoodCalculator.cxx:45 ProfileLikelihoodCalculator.cxx:46 ProfileLikelihoodCalculator.cxx:47 ProfileLikelihoodCalculator.cxx:48 ProfileLikelihoodCalculator.cxx:49 ProfileLikelihoodCalculator.cxx:50 ProfileLikelihoodCalculator.cxx:51 ProfileLikelihoodCalculator.cxx:52 ProfileLikelihoodCalculator.cxx:53 ProfileLikelihoodCalculator.cxx:54 ProfileLikelihoodCalculator.cxx:55 ProfileLikelihoodCalculator.cxx:56 ProfileLikelihoodCalculator.cxx:57 ProfileLikelihoodCalculator.cxx:58 ProfileLikelihoodCalculator.cxx:59 ProfileLikelihoodCalculator.cxx:60 ProfileLikelihoodCalculator.cxx:61 ProfileLikelihoodCalculator.cxx:62 ProfileLikelihoodCalculator.cxx:63 ProfileLikelihoodCalculator.cxx:64 ProfileLikelihoodCalculator.cxx:65 ProfileLikelihoodCalculator.cxx:66 ProfileLikelihoodCalculator.cxx:67 ProfileLikelihoodCalculator.cxx:68 ProfileLikelihoodCalculator.cxx:69 ProfileLikelihoodCalculator.cxx:70 ProfileLikelihoodCalculator.cxx:71 ProfileLikelihoodCalculator.cxx:72 ProfileLikelihoodCalculator.cxx:73 ProfileLikelihoodCalculator.cxx:74 ProfileLikelihoodCalculator.cxx:75 ProfileLikelihoodCalculator.cxx:76 ProfileLikelihoodCalculator.cxx:77 ProfileLikelihoodCalculator.cxx:78 ProfileLikelihoodCalculator.cxx:79 ProfileLikelihoodCalculator.cxx:80 ProfileLikelihoodCalculator.cxx:81 ProfileLikelihoodCalculator.cxx:82 ProfileLikelihoodCalculator.cxx:83 ProfileLikelihoodCalculator.cxx:84 ProfileLikelihoodCalculator.cxx:85 ProfileLikelihoodCalculator.cxx:86 ProfileLikelihoodCalculator.cxx:87 ProfileLikelihoodCalculator.cxx:88 ProfileLikelihoodCalculator.cxx:89 ProfileLikelihoodCalculator.cxx:90 ProfileLikelihoodCalculator.cxx:91 ProfileLikelihoodCalculator.cxx:92 ProfileLikelihoodCalculator.cxx:93 ProfileLikelihoodCalculator.cxx:94 ProfileLikelihoodCalculator.cxx:95 ProfileLikelihoodCalculator.cxx:96 ProfileLikelihoodCalculator.cxx:97 ProfileLikelihoodCalculator.cxx:98 ProfileLikelihoodCalculator.cxx:99 ProfileLikelihoodCalculator.cxx:100 ProfileLikelihoodCalculator.cxx:101 ProfileLikelihoodCalculator.cxx:102 ProfileLikelihoodCalculator.cxx:103 ProfileLikelihoodCalculator.cxx:104 ProfileLikelihoodCalculator.cxx:105 ProfileLikelihoodCalculator.cxx:106 ProfileLikelihoodCalculator.cxx:107 ProfileLikelihoodCalculator.cxx:108 ProfileLikelihoodCalculator.cxx:109 ProfileLikelihoodCalculator.cxx:110 ProfileLikelihoodCalculator.cxx:111 ProfileLikelihoodCalculator.cxx:112 ProfileLikelihoodCalculator.cxx:113 ProfileLikelihoodCalculator.cxx:114 ProfileLikelihoodCalculator.cxx:115 ProfileLikelihoodCalculator.cxx:116 ProfileLikelihoodCalculator.cxx:117 ProfileLikelihoodCalculator.cxx:118 ProfileLikelihoodCalculator.cxx:119 ProfileLikelihoodCalculator.cxx:120 ProfileLikelihoodCalculator.cxx:121 ProfileLikelihoodCalculator.cxx:122 ProfileLikelihoodCalculator.cxx:123 ProfileLikelihoodCalculator.cxx:124 ProfileLikelihoodCalculator.cxx:125 ProfileLikelihoodCalculator.cxx:126 ProfileLikelihoodCalculator.cxx:127 ProfileLikelihoodCalculator.cxx:128 ProfileLikelihoodCalculator.cxx:129 ProfileLikelihoodCalculator.cxx:130 ProfileLikelihoodCalculator.cxx:131 ProfileLikelihoodCalculator.cxx:132 ProfileLikelihoodCalculator.cxx:133 ProfileLikelihoodCalculator.cxx:134 ProfileLikelihoodCalculator.cxx:135 ProfileLikelihoodCalculator.cxx:136 ProfileLikelihoodCalculator.cxx:137 ProfileLikelihoodCalculator.cxx:138 ProfileLikelihoodCalculator.cxx:139 ProfileLikelihoodCalculator.cxx:140 ProfileLikelihoodCalculator.cxx:141 ProfileLikelihoodCalculator.cxx:142 ProfileLikelihoodCalculator.cxx:143 ProfileLikelihoodCalculator.cxx:144 ProfileLikelihoodCalculator.cxx:145 ProfileLikelihoodCalculator.cxx:146 ProfileLikelihoodCalculator.cxx:147 ProfileLikelihoodCalculator.cxx:148 ProfileLikelihoodCalculator.cxx:149 ProfileLikelihoodCalculator.cxx:150 ProfileLikelihoodCalculator.cxx:151 ProfileLikelihoodCalculator.cxx:152 ProfileLikelihoodCalculator.cxx:153 ProfileLikelihoodCalculator.cxx:154 ProfileLikelihoodCalculator.cxx:155 ProfileLikelihoodCalculator.cxx:156 ProfileLikelihoodCalculator.cxx:157 ProfileLikelihoodCalculator.cxx:158 ProfileLikelihoodCalculator.cxx:159 ProfileLikelihoodCalculator.cxx:160 ProfileLikelihoodCalculator.cxx:161 ProfileLikelihoodCalculator.cxx:162 ProfileLikelihoodCalculator.cxx:163 ProfileLikelihoodCalculator.cxx:164 ProfileLikelihoodCalculator.cxx:165 ProfileLikelihoodCalculator.cxx:166 ProfileLikelihoodCalculator.cxx:167 ProfileLikelihoodCalculator.cxx:168 ProfileLikelihoodCalculator.cxx:169 ProfileLikelihoodCalculator.cxx:170 ProfileLikelihoodCalculator.cxx:171 ProfileLikelihoodCalculator.cxx:172 ProfileLikelihoodCalculator.cxx:173 ProfileLikelihoodCalculator.cxx:174 ProfileLikelihoodCalculator.cxx:175 ProfileLikelihoodCalculator.cxx:176 ProfileLikelihoodCalculator.cxx:177 ProfileLikelihoodCalculator.cxx:178 ProfileLikelihoodCalculator.cxx:179 ProfileLikelihoodCalculator.cxx:180 ProfileLikelihoodCalculator.cxx:181 ProfileLikelihoodCalculator.cxx:182 ProfileLikelihoodCalculator.cxx:183 ProfileLikelihoodCalculator.cxx:184 ProfileLikelihoodCalculator.cxx:185 ProfileLikelihoodCalculator.cxx:186 ProfileLikelihoodCalculator.cxx:187 ProfileLikelihoodCalculator.cxx:188 ProfileLikelihoodCalculator.cxx:189 ProfileLikelihoodCalculator.cxx:190 ProfileLikelihoodCalculator.cxx:191 ProfileLikelihoodCalculator.cxx:192 ProfileLikelihoodCalculator.cxx:193 ProfileLikelihoodCalculator.cxx:194 ProfileLikelihoodCalculator.cxx:195 ProfileLikelihoodCalculator.cxx:196 ProfileLikelihoodCalculator.cxx:197 ProfileLikelihoodCalculator.cxx:198 ProfileLikelihoodCalculator.cxx:199 ProfileLikelihoodCalculator.cxx:200 ProfileLikelihoodCalculator.cxx:201 ProfileLikelihoodCalculator.cxx:202 ProfileLikelihoodCalculator.cxx:203 ProfileLikelihoodCalculator.cxx:204 ProfileLikelihoodCalculator.cxx:205 ProfileLikelihoodCalculator.cxx:206 ProfileLikelihoodCalculator.cxx:207 ProfileLikelihoodCalculator.cxx:208 ProfileLikelihoodCalculator.cxx:209 ProfileLikelihoodCalculator.cxx:210 ProfileLikelihoodCalculator.cxx:211 ProfileLikelihoodCalculator.cxx:212 ProfileLikelihoodCalculator.cxx:213 ProfileLikelihoodCalculator.cxx:214 ProfileLikelihoodCalculator.cxx:215 ProfileLikelihoodCalculator.cxx:216 ProfileLikelihoodCalculator.cxx:217 ProfileLikelihoodCalculator.cxx:218 ProfileLikelihoodCalculator.cxx:219 ProfileLikelihoodCalculator.cxx:220 ProfileLikelihoodCalculator.cxx:221 ProfileLikelihoodCalculator.cxx:222 ProfileLikelihoodCalculator.cxx:223 ProfileLikelihoodCalculator.cxx:224 ProfileLikelihoodCalculator.cxx:225 ProfileLikelihoodCalculator.cxx:226 ProfileLikelihoodCalculator.cxx:227 ProfileLikelihoodCalculator.cxx:228 ProfileLikelihoodCalculator.cxx:229 ProfileLikelihoodCalculator.cxx:230 ProfileLikelihoodCalculator.cxx:231 ProfileLikelihoodCalculator.cxx:232 ProfileLikelihoodCalculator.cxx:233 ProfileLikelihoodCalculator.cxx:234 ProfileLikelihoodCalculator.cxx:235 ProfileLikelihoodCalculator.cxx:236 ProfileLikelihoodCalculator.cxx:237 ProfileLikelihoodCalculator.cxx:238 ProfileLikelihoodCalculator.cxx:239 ProfileLikelihoodCalculator.cxx:240 ProfileLikelihoodCalculator.cxx:241 ProfileLikelihoodCalculator.cxx:242 ProfileLikelihoodCalculator.cxx:243 ProfileLikelihoodCalculator.cxx:244 ProfileLikelihoodCalculator.cxx:245 ProfileLikelihoodCalculator.cxx:246 ProfileLikelihoodCalculator.cxx:247 ProfileLikelihoodCalculator.cxx:248 ProfileLikelihoodCalculator.cxx:249 ProfileLikelihoodCalculator.cxx:250 ProfileLikelihoodCalculator.cxx:251 ProfileLikelihoodCalculator.cxx:252 ProfileLikelihoodCalculator.cxx:253 ProfileLikelihoodCalculator.cxx:254 ProfileLikelihoodCalculator.cxx:255 ProfileLikelihoodCalculator.cxx:256 ProfileLikelihoodCalculator.cxx:257 ProfileLikelihoodCalculator.cxx:258 ProfileLikelihoodCalculator.cxx:259 ProfileLikelihoodCalculator.cxx:260 ProfileLikelihoodCalculator.cxx:261 ProfileLikelihoodCalculator.cxx:262 ProfileLikelihoodCalculator.cxx:263 ProfileLikelihoodCalculator.cxx:264 ProfileLikelihoodCalculator.cxx:265 ProfileLikelihoodCalculator.cxx:266 ProfileLikelihoodCalculator.cxx:267 ProfileLikelihoodCalculator.cxx:268 ProfileLikelihoodCalculator.cxx:269 ProfileLikelihoodCalculator.cxx:270 ProfileLikelihoodCalculator.cxx:271 ProfileLikelihoodCalculator.cxx:272 ProfileLikelihoodCalculator.cxx:273 ProfileLikelihoodCalculator.cxx:274 ProfileLikelihoodCalculator.cxx:275 ProfileLikelihoodCalculator.cxx:276 ProfileLikelihoodCalculator.cxx:277 ProfileLikelihoodCalculator.cxx:278 ProfileLikelihoodCalculator.cxx:279 ProfileLikelihoodCalculator.cxx:280 ProfileLikelihoodCalculator.cxx:281 ProfileLikelihoodCalculator.cxx:282 ProfileLikelihoodCalculator.cxx:283 ProfileLikelihoodCalculator.cxx:284 ProfileLikelihoodCalculator.cxx:285 ProfileLikelihoodCalculator.cxx:286 ProfileLikelihoodCalculator.cxx:287 ProfileLikelihoodCalculator.cxx:288 ProfileLikelihoodCalculator.cxx:289 ProfileLikelihoodCalculator.cxx:290 ProfileLikelihoodCalculator.cxx:291 ProfileLikelihoodCalculator.cxx:292 ProfileLikelihoodCalculator.cxx:293 ProfileLikelihoodCalculator.cxx:294 ProfileLikelihoodCalculator.cxx:295 ProfileLikelihoodCalculator.cxx:296 ProfileLikelihoodCalculator.cxx:297 ProfileLikelihoodCalculator.cxx:298 ProfileLikelihoodCalculator.cxx:299 ProfileLikelihoodCalculator.cxx:300 ProfileLikelihoodCalculator.cxx:301 ProfileLikelihoodCalculator.cxx:302 ProfileLikelihoodCalculator.cxx:303 ProfileLikelihoodCalculator.cxx:304 ProfileLikelihoodCalculator.cxx:305 ProfileLikelihoodCalculator.cxx:306 ProfileLikelihoodCalculator.cxx:307 ProfileLikelihoodCalculator.cxx:308 ProfileLikelihoodCalculator.cxx:309 ProfileLikelihoodCalculator.cxx:310 ProfileLikelihoodCalculator.cxx:311 ProfileLikelihoodCalculator.cxx:312 ProfileLikelihoodCalculator.cxx:313 ProfileLikelihoodCalculator.cxx:314 ProfileLikelihoodCalculator.cxx:315 ProfileLikelihoodCalculator.cxx:316 ProfileLikelihoodCalculator.cxx:317 ProfileLikelihoodCalculator.cxx:318 ProfileLikelihoodCalculator.cxx:319 ProfileLikelihoodCalculator.cxx:320 ProfileLikelihoodCalculator.cxx:321 ProfileLikelihoodCalculator.cxx:322 ProfileLikelihoodCalculator.cxx:323 ProfileLikelihoodCalculator.cxx:324 ProfileLikelihoodCalculator.cxx:325 ProfileLikelihoodCalculator.cxx:326 ProfileLikelihoodCalculator.cxx:327