#ifndef ROOSTATS_ProfileLikelihoodTestStat
#define ROOSTATS_ProfileLikelihoodTestStat
#ifndef ROOT_Rtypes
#include "Rtypes.h"
#endif
#include <vector>
#include "RooStats/SamplingDistribution.h"
#include "RooStats/TestStatistic.h"
#include "RooRealVar.h"
#include "RooProfileLL.h"
#include "RooNLLVar.h"
#include "RooMinuit.h"
namespace RooStats {
class ProfileLikelihoodTestStat : public TestStatistic{
public:
ProfileLikelihoodTestStat(RooAbsPdf& pdf) {
fPdf = &pdf;
fProfile = 0;
fNll = 0;
fCachedBestFitParams = 0;
fLastData = 0;
}
virtual ~ProfileLikelihoodTestStat() {
if(fProfile) delete fProfile;
if(fNll) delete fNll;
if(fCachedBestFitParams) delete fCachedBestFitParams;
}
virtual Double_t Evaluate(RooAbsData& data, RooArgSet& paramsOfInterest) {
if(!&data){ cout << "problem with data" << endl;}
RooMsgService::instance().setGlobalKillBelow(RooFit::FATAL) ;
bool needToRebuild = true;
if(fLastData == &data)
needToRebuild=false;
else
fLastData = &data;
needToRebuild = true;
if(needToRebuild){
if(fProfile) delete fProfile;
if (fNll) delete fNll;
RooArgSet* constrainedParams = fPdf->getParameters(data);
RemoveConstantParameters(constrainedParams);
RooNLLVar* nll = (RooNLLVar*) fPdf->createNLL(data, RooFit::CloneData(kFALSE),RooFit::Constrain(*constrainedParams));
fNll=nll;
fProfile = (RooProfileLL*) nll->createProfile(paramsOfInterest);
delete constrainedParams;
if(fCachedBestFitParams){
RooArgSet* origParamVals = (RooArgSet*) paramsOfInterest.snapshot();
SetParameters(fCachedBestFitParams, fProfile->getParameters(data) );
fProfile->getVal();
SetParameters(origParamVals, ¶msOfInterest );
delete origParamVals;
} else {
RooArgSet* origParamVals = (RooArgSet*) paramsOfInterest.snapshot();
Bool_t smode = RooMsgService::instance().silentMode() ;
RooMsgService::instance().setSilentMode(kTRUE) ;
RooMinuit minuit(*nll);
if (!smode) RooMsgService::instance().setSilentMode(kFALSE) ;
minuit.setPrintLevel(-999);
minuit.setNoWarn();
minuit.migrad();
fCachedBestFitParams = (RooArgSet*) (nll->getParameters(data)->snapshot());
SetParameters(origParamVals, ¶msOfInterest );
fProfile->getVal();
delete origParamVals;
}
}
if(!fProfile){ cout << "problem making profile" << endl;}
SetParameters(¶msOfInterest, fProfile->getParameters(data) );
Double_t value = fProfile->getVal();
if(value<0){
delete fNll;
delete fProfile;
RooArgSet* constrainedParams = fPdf->getParameters(data);
RemoveConstantParameters(constrainedParams);
RooNLLVar* nll = (RooNLLVar*) fPdf->createNLL(data, RooFit::CloneData(kFALSE),RooFit::Constrain(*constrainedParams));
fNll=nll;
fProfile = (RooProfileLL*) nll->createProfile(paramsOfInterest);
delete constrainedParams;
SetParameters(¶msOfInterest, fProfile->getParameters(data) );
value = fProfile->getVal();
}
RooMsgService::instance().setGlobalKillBelow(RooFit::DEBUG) ;
return value;
}
virtual const RooAbsArg* GetTestStatistic() const {return fProfile;}
virtual const TString GetVarName() const {return "Profile Likelihood Ratio";}
private:
RooProfileLL* fProfile;
RooAbsPdf* fPdf;
RooNLLVar* fNll;
const RooArgSet* fCachedBestFitParams;
RooAbsData* fLastData;
protected:
ClassDef(ProfileLikelihoodTestStat,1)
};
}
#endif
ProfileLikelihoodTestStat.h:1 ProfileLikelihoodTestStat.h:2 ProfileLikelihoodTestStat.h:3 ProfileLikelihoodTestStat.h:4 ProfileLikelihoodTestStat.h:5 ProfileLikelihoodTestStat.h:6 ProfileLikelihoodTestStat.h:7 ProfileLikelihoodTestStat.h:8 ProfileLikelihoodTestStat.h:9 ProfileLikelihoodTestStat.h:10 ProfileLikelihoodTestStat.h:11 ProfileLikelihoodTestStat.h:12 ProfileLikelihoodTestStat.h:13 ProfileLikelihoodTestStat.h:14 ProfileLikelihoodTestStat.h:15 ProfileLikelihoodTestStat.h:16 ProfileLikelihoodTestStat.h:17 ProfileLikelihoodTestStat.h:18 ProfileLikelihoodTestStat.h:19 ProfileLikelihoodTestStat.h:20 ProfileLikelihoodTestStat.h:21 ProfileLikelihoodTestStat.h:22 ProfileLikelihoodTestStat.h:23 ProfileLikelihoodTestStat.h:24 ProfileLikelihoodTestStat.h:25 ProfileLikelihoodTestStat.h:26 ProfileLikelihoodTestStat.h:27 ProfileLikelihoodTestStat.h:28 ProfileLikelihoodTestStat.h:29 ProfileLikelihoodTestStat.h:30 ProfileLikelihoodTestStat.h:31 ProfileLikelihoodTestStat.h:32 ProfileLikelihoodTestStat.h:33 ProfileLikelihoodTestStat.h:34 ProfileLikelihoodTestStat.h:35 ProfileLikelihoodTestStat.h:36 ProfileLikelihoodTestStat.h:37 ProfileLikelihoodTestStat.h:38 ProfileLikelihoodTestStat.h:39 ProfileLikelihoodTestStat.h:40 ProfileLikelihoodTestStat.h:41 ProfileLikelihoodTestStat.h:42 ProfileLikelihoodTestStat.h:43 ProfileLikelihoodTestStat.h:44 ProfileLikelihoodTestStat.h:45 ProfileLikelihoodTestStat.h:46 ProfileLikelihoodTestStat.h:47 ProfileLikelihoodTestStat.h:48 ProfileLikelihoodTestStat.h:49 ProfileLikelihoodTestStat.h:50 ProfileLikelihoodTestStat.h:51 ProfileLikelihoodTestStat.h:52 ProfileLikelihoodTestStat.h:53 ProfileLikelihoodTestStat.h:54 ProfileLikelihoodTestStat.h:55 ProfileLikelihoodTestStat.h:56 ProfileLikelihoodTestStat.h:57 ProfileLikelihoodTestStat.h:58 ProfileLikelihoodTestStat.h:59 ProfileLikelihoodTestStat.h:60 ProfileLikelihoodTestStat.h:61 ProfileLikelihoodTestStat.h:62 ProfileLikelihoodTestStat.h:63 ProfileLikelihoodTestStat.h:64 ProfileLikelihoodTestStat.h:65 ProfileLikelihoodTestStat.h:66 ProfileLikelihoodTestStat.h:67 ProfileLikelihoodTestStat.h:68 ProfileLikelihoodTestStat.h:69 ProfileLikelihoodTestStat.h:70 ProfileLikelihoodTestStat.h:71 ProfileLikelihoodTestStat.h:72 ProfileLikelihoodTestStat.h:73 ProfileLikelihoodTestStat.h:74 ProfileLikelihoodTestStat.h:75 ProfileLikelihoodTestStat.h:76 ProfileLikelihoodTestStat.h:77 ProfileLikelihoodTestStat.h:78 ProfileLikelihoodTestStat.h:79 ProfileLikelihoodTestStat.h:80 ProfileLikelihoodTestStat.h:81 ProfileLikelihoodTestStat.h:82 ProfileLikelihoodTestStat.h:83 ProfileLikelihoodTestStat.h:84 ProfileLikelihoodTestStat.h:85 ProfileLikelihoodTestStat.h:86 ProfileLikelihoodTestStat.h:87 ProfileLikelihoodTestStat.h:88 ProfileLikelihoodTestStat.h:89 ProfileLikelihoodTestStat.h:90 ProfileLikelihoodTestStat.h:91 ProfileLikelihoodTestStat.h:92 ProfileLikelihoodTestStat.h:93 ProfileLikelihoodTestStat.h:94 ProfileLikelihoodTestStat.h:95 ProfileLikelihoodTestStat.h:96 ProfileLikelihoodTestStat.h:97 ProfileLikelihoodTestStat.h:98 ProfileLikelihoodTestStat.h:99 ProfileLikelihoodTestStat.h:100 ProfileLikelihoodTestStat.h:101 ProfileLikelihoodTestStat.h:102 ProfileLikelihoodTestStat.h:103 ProfileLikelihoodTestStat.h:104 ProfileLikelihoodTestStat.h:105 ProfileLikelihoodTestStat.h:106 ProfileLikelihoodTestStat.h:107 ProfileLikelihoodTestStat.h:108 ProfileLikelihoodTestStat.h:109 ProfileLikelihoodTestStat.h:110 ProfileLikelihoodTestStat.h:111 ProfileLikelihoodTestStat.h:112 ProfileLikelihoodTestStat.h:113 ProfileLikelihoodTestStat.h:114 ProfileLikelihoodTestStat.h:115 ProfileLikelihoodTestStat.h:116 ProfileLikelihoodTestStat.h:117 ProfileLikelihoodTestStat.h:118 ProfileLikelihoodTestStat.h:119 ProfileLikelihoodTestStat.h:120 ProfileLikelihoodTestStat.h:121 ProfileLikelihoodTestStat.h:122 ProfileLikelihoodTestStat.h:123 ProfileLikelihoodTestStat.h:124 ProfileLikelihoodTestStat.h:125 ProfileLikelihoodTestStat.h:126 ProfileLikelihoodTestStat.h:127 ProfileLikelihoodTestStat.h:128 ProfileLikelihoodTestStat.h:129 ProfileLikelihoodTestStat.h:130 ProfileLikelihoodTestStat.h:131 ProfileLikelihoodTestStat.h:132 ProfileLikelihoodTestStat.h:133 ProfileLikelihoodTestStat.h:134 ProfileLikelihoodTestStat.h:135 ProfileLikelihoodTestStat.h:136 ProfileLikelihoodTestStat.h:137 ProfileLikelihoodTestStat.h:138 ProfileLikelihoodTestStat.h:139 ProfileLikelihoodTestStat.h:140 ProfileLikelihoodTestStat.h:141 ProfileLikelihoodTestStat.h:142 ProfileLikelihoodTestStat.h:143 ProfileLikelihoodTestStat.h:144 ProfileLikelihoodTestStat.h:145 ProfileLikelihoodTestStat.h:146 ProfileLikelihoodTestStat.h:147 ProfileLikelihoodTestStat.h:148 ProfileLikelihoodTestStat.h:149 ProfileLikelihoodTestStat.h:150 ProfileLikelihoodTestStat.h:151 ProfileLikelihoodTestStat.h:152 ProfileLikelihoodTestStat.h:153 ProfileLikelihoodTestStat.h:154 ProfileLikelihoodTestStat.h:155 ProfileLikelihoodTestStat.h:156 ProfileLikelihoodTestStat.h:157 ProfileLikelihoodTestStat.h:158 ProfileLikelihoodTestStat.h:159 ProfileLikelihoodTestStat.h:160 ProfileLikelihoodTestStat.h:161 ProfileLikelihoodTestStat.h:162 ProfileLikelihoodTestStat.h:163 ProfileLikelihoodTestStat.h:164 ProfileLikelihoodTestStat.h:165 ProfileLikelihoodTestStat.h:166 ProfileLikelihoodTestStat.h:167 ProfileLikelihoodTestStat.h:168 ProfileLikelihoodTestStat.h:169 ProfileLikelihoodTestStat.h:170 ProfileLikelihoodTestStat.h:171 ProfileLikelihoodTestStat.h:172 ProfileLikelihoodTestStat.h:173 ProfileLikelihoodTestStat.h:174 ProfileLikelihoodTestStat.h:175 ProfileLikelihoodTestStat.h:176 ProfileLikelihoodTestStat.h:177 ProfileLikelihoodTestStat.h:178 ProfileLikelihoodTestStat.h:179 ProfileLikelihoodTestStat.h:180 ProfileLikelihoodTestStat.h:181 ProfileLikelihoodTestStat.h:182 ProfileLikelihoodTestStat.h:183 ProfileLikelihoodTestStat.h:184 ProfileLikelihoodTestStat.h:185 ProfileLikelihoodTestStat.h:186 ProfileLikelihoodTestStat.h:187 ProfileLikelihoodTestStat.h:188 ProfileLikelihoodTestStat.h:189 ProfileLikelihoodTestStat.h:190 ProfileLikelihoodTestStat.h:191 ProfileLikelihoodTestStat.h:192 ProfileLikelihoodTestStat.h:193 ProfileLikelihoodTestStat.h:194 ProfileLikelihoodTestStat.h:195 ProfileLikelihoodTestStat.h:196 ProfileLikelihoodTestStat.h:197 ProfileLikelihoodTestStat.h:198 ProfileLikelihoodTestStat.h:199 ProfileLikelihoodTestStat.h:200 ProfileLikelihoodTestStat.h:201 ProfileLikelihoodTestStat.h:202 ProfileLikelihoodTestStat.h:203 ProfileLikelihoodTestStat.h:204 ProfileLikelihoodTestStat.h:205 ProfileLikelihoodTestStat.h:206 ProfileLikelihoodTestStat.h:207 ProfileLikelihoodTestStat.h:208 ProfileLikelihoodTestStat.h:209 ProfileLikelihoodTestStat.h:210 ProfileLikelihoodTestStat.h:211 ProfileLikelihoodTestStat.h:212 ProfileLikelihoodTestStat.h:213 ProfileLikelihoodTestStat.h:214 ProfileLikelihoodTestStat.h:215 ProfileLikelihoodTestStat.h:216 ProfileLikelihoodTestStat.h:217 ProfileLikelihoodTestStat.h:218 ProfileLikelihoodTestStat.h:219 ProfileLikelihoodTestStat.h:220 ProfileLikelihoodTestStat.h:221 ProfileLikelihoodTestStat.h:222 ProfileLikelihoodTestStat.h:223 ProfileLikelihoodTestStat.h:224 ProfileLikelihoodTestStat.h:225 ProfileLikelihoodTestStat.h:226 ProfileLikelihoodTestStat.h:227 ProfileLikelihoodTestStat.h:228 ProfileLikelihoodTestStat.h:229 ProfileLikelihoodTestStat.h:230 ProfileLikelihoodTestStat.h:231 ProfileLikelihoodTestStat.h:232 ProfileLikelihoodTestStat.h:233 ProfileLikelihoodTestStat.h:234 ProfileLikelihoodTestStat.h:235