12 #ifndef ROOSTATS_ProfileLikelihoodTestStat
13 #define ROOSTATS_ProfileLikelihoodTestStat
32 class ProfileLikelihoodTestStat :
public TestStatistic{
34 enum LimitType {twoSided, oneSided, oneSidedDiscovery};
37 ProfileLikelihoodTestStat() {
41 fCachedBestFitParams = 0;
43 fLimitType = twoSided;
45 fDetailedOutputWithErrorsAndPulls =
false;
46 fDetailedOutputEnabled =
false;
47 fDetailedOutput = NULL;
48 fLOffset = RooStats::IsNLLOffset() ;
50 fVarName =
"Profile Likelihood Ratio";
52 fMinimizer=::ROOT::Math::MinimizerOptions::DefaultMinimizerType().c_str();
53 fStrategy=::ROOT::Math::MinimizerOptions::DefaultStrategy();
54 fTolerance=TMath::Max(1.,::ROOT::Math::MinimizerOptions::DefaultTolerance());
55 fPrintLevel=::ROOT::Math::MinimizerOptions::DefaultPrintLevel();
58 ProfileLikelihoodTestStat(RooAbsPdf& pdf) {
61 fCachedBestFitParams = 0;
63 fLimitType = twoSided;
65 fDetailedOutputWithErrorsAndPulls =
false;
66 fDetailedOutputEnabled =
false;
67 fDetailedOutput = NULL;
68 fLOffset = RooStats::IsNLLOffset() ;
70 fVarName =
"Profile Likelihood Ratio";
72 fMinimizer=::ROOT::Math::MinimizerOptions::DefaultMinimizerType().c_str();
73 fStrategy=::ROOT::Math::MinimizerOptions::DefaultStrategy();
75 fTolerance=TMath::Max(1.,::ROOT::Math::MinimizerOptions::DefaultTolerance());
76 fPrintLevel=::ROOT::Math::MinimizerOptions::DefaultPrintLevel();
79 virtual ~ProfileLikelihoodTestStat() {
81 if(fCachedBestFitParams)
delete fCachedBestFitParams;
82 if(fDetailedOutput)
delete fDetailedOutput;
87 void SetOneSided(Bool_t flag=
true) {fLimitType = (flag ? oneSided : twoSided);}
88 void SetOneSidedDiscovery(Bool_t flag=
true) {fLimitType = (flag ? oneSidedDiscovery : twoSided);}
89 void SetSigned(Bool_t flag=
true) {fSigned = flag;}
92 bool IsTwoSided()
const {
return fLimitType == twoSided; }
93 bool IsOneSidedDiscovery()
const {
return fLimitType == oneSidedDiscovery; }
95 static void SetAlwaysReuseNLL(Bool_t flag);
97 void SetReuseNLL(Bool_t flag) { fReuseNll = flag ; }
98 void SetLOffset(Bool_t flag=kTRUE) { fLOffset = flag ; }
100 void SetMinimizer(
const char* minimizer){ fMinimizer=minimizer;}
101 void SetStrategy(Int_t strategy){fStrategy=strategy;}
102 void SetTolerance(
double tol){fTolerance=tol;}
103 void SetPrintLevel(Int_t printlevel){fPrintLevel=printlevel;}
106 virtual Double_t Evaluate(RooAbsData& data, RooArgSet& paramsOfInterest) {
107 return EvaluateProfileLikelihood(0, data, paramsOfInterest);
111 virtual Double_t EvaluateProfileLikelihood(
int type, RooAbsData &data, RooArgSet & paramsOfInterest);
113 virtual void EnableDetailedOutput(
bool e=
true,
bool withErrorsAndPulls=
false ) {
114 fDetailedOutputEnabled = e;
115 fDetailedOutputWithErrorsAndPulls = withErrorsAndPulls;
116 delete fDetailedOutput;
117 fDetailedOutput = NULL;
119 virtual const RooArgSet* GetDetailedOutput(
void)
const {
126 return fDetailedOutput;
131 virtual void SetConditionalObservables(
const RooArgSet& set) {fConditionalObs.removeAll(); fConditionalObs.add(set);}
135 virtual void SetGlobalObservables(
const RooArgSet& set) {fGlobalObs.removeAll(); fGlobalObs.add(set);}
137 virtual void SetVarName(
const char* name) { fVarName = name; }
138 virtual const TString GetVarName()
const {
return fVarName;}
140 virtual RooAbsPdf * GetPdf()
const {
return fPdf; }
147 RooFitResult* GetMinNLL();
153 const RooArgSet* fCachedBestFitParams;
154 RooAbsData* fLastData;
156 LimitType fLimitType;
161 bool fDetailedOutputEnabled;
162 bool fDetailedOutputWithErrorsAndPulls;
163 RooArgSet* fDetailedOutput;
164 RooArgSet fConditionalObs;
165 RooArgSet fGlobalObs;
169 static Bool_t fgAlwaysReuseNll ;
179 ClassDef(ProfileLikelihoodTestStat,10)