Logo ROOT  
Reference Guide
Loading...
Searching...
No Matches
MaxLikelihoodEstimateTestStat.h
Go to the documentation of this file.
1// @(#)root/roostats:$Id$
2// Author: Kyle Cranmer June 2010
3/*************************************************************************
4 * Copyright (C) 1995-2008, Rene Brun and Fons Rademakers. *
5 * All rights reserved. *
6 * *
7 * For the licensing terms see $ROOTSYS/LICENSE. *
8 * For the list of contributors see $ROOTSYS/README/CREDITS. *
9 *************************************************************************/
10
11#ifndef ROOSTATS_MaxLikelihoodEstimateTestStat
12#define ROOSTATS_MaxLikelihoodEstimateTestStat
13
14
15
16
17#include "Rtypes.h"
18
19#include "RooFitResult.h"
21#include "RooAbsPdf.h"
22#include "RooRealVar.h"
23#include "RooMinimizer.h"
26
27
28
29namespace RooStats {
30
31/** \class MaxLikelihoodEstimateTestStat
32 \ingroup Roostats
33MaxLikelihoodEstimateTestStat: TestStatistic that returns maximum likelihood
34estimate of a specified parameter.
35*/
36
38
39public:
41 : fStrategy(::ROOT::Math::MinimizerOptions::DefaultStrategy()),
42 fPrintLevel(::ROOT::Math::MinimizerOptions::DefaultPrintLevel())
43 {
44 }
45
47 : fPdf(&pdf),
48 fParameter(&parameter),
49 fStrategy(::ROOT::Math::MinimizerOptions::DefaultStrategy()),
50 fPrintLevel(::ROOT::Math::MinimizerOptions::DefaultPrintLevel())
51 {
52 }
53
54 //______________________________
55 double Evaluate(RooAbsData& data, RooArgSet& /*nullPOI*/) override {
56
57
60
61 /*
62 // this is more straight forward, but produces a lot of messages
63 RooFitResult* res = fPdf.fitTo(data, RooFit::CloneData(false),RooFit::Minos(0),RooFit::Hesse(false), RooFit::Save(1),RooFit::PrintLevel(-1),RooFit::PrintEvalErrors(0));
64 RooRealVar* mle = (RooRealVar*) res->floatParsFinal().find(fParameter.GetName());
65 double ret = mle->getVal();
66 delete res;
67 return ret;
68 */
69
70 std::unique_ptr<RooArgSet> allParams{fPdf->getParameters(data)};
72
73 // need to call constrain for RooSimultaneous until stripDisconnected problem fixed
74 std::unique_ptr<RooAbsReal> nll{fPdf->createNLL(data, RooFit::CloneData(false),RooFit::Constrain(*allParams),RooFit::ConditionalObservables(fConditionalObs))};
75
76 //RooAbsReal* nll = fPdf->createNLL(data, RooFit::CloneData(false));
77
78 // RooAbsReal* profile = nll->createProfile(RooArgSet());
79 // profile->getVal();
80 // RooArgSet* vars = profile->getVariables();
81 // RooMsgService::instance().setGlobalKillBelow(msglevel);
82 // double ret = vars->getRealValue(fParameter->GetName());
83 // return ret;
84
85
86 RooMinimizer minim(*nll);
88 //LM: RooMinimizer.setPrintLevel has +1 offset - so subtract here -1
90 int status = -1;
91 // minim.optimizeConst(true);
92 for (int tries = 0, maxtries = 4; tries <= maxtries; ++tries) {
93 // status = minim.minimize(fMinimizer, ROOT::Math::MinimizerOptions::DefaultMinimizerAlgo().c_str());
94 status = minim.minimize(fMinimizer, "Minimize");
95 if (status == 0) {
96 break;
97 } else {
98 if (tries > 1) {
99 std::cout << " ----> Doing a re-scan first\n";
100 minim.minimize(fMinimizer,"Scan");
101 }
102 if (tries > 2) {
103 std::cout << " ----> trying with strategy = 1\n";
104 minim.setStrategy(1);
105 }
106 }
107 }
108 //std::cout << "BEST FIT values " << std::endl;
109 //allParams->Print("V");
110
112
113 if (status != 0) return -1;
114 return fParameter->getVal();
115
116
117 }
118
119 const TString GetVarName() const override {
120 TString varName = Form("Maximum Likelihood Estimate of %s",fParameter->GetName());
121 return varName;
122 }
123
124
125 virtual void PValueIsRightTail(bool isright) { fUpperLimit = isright; }
126 bool PValueIsRightTail(void) const override { return fUpperLimit; }
127
128 // set the conditional observables which will be used when creating the NLL
129 // so the pdf's will not be normalized on the conditional observables when computing the NLL
131
132
133 private:
134 RooAbsPdf *fPdf = nullptr;
137 bool fUpperLimit = true;
141
142
143
144 protected:
146};
147
148}
149
150
151#endif
int Int_t
Signed integer 4 bytes (int).
Definition RtypesCore.h:59
#define ClassDefOverride(name, id)
Definition Rtypes.h:348
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
Definition TString.cxx:2496
Abstract base class for binned and unbinned datasets.
Definition RooAbsData.h:56
Abstract interface for all probability density functions.
Definition RooAbsPdf.h:32
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Definition RooArgSet.h:24
Wrapper class around ROOT::Math::Minimizer that provides a seamless interface between the minimizer f...
void setPrintLevel(int newLevel)
Change the MINUIT internal printing level.
int minimize(const char *type, const char *alg=nullptr)
Minimise the function passed in the constructor.
void setStrategy(int istrat)
Change MINUIT strategy to istrat.
static RooMsgService & instance()
Return reference to singleton instance.
void setGlobalKillBelow(RooFit::MsgLevel level)
RooFit::MsgLevel globalKillBelow() const
Variable that can be changed from the outside.
Definition RooRealVar.h:37
bool PValueIsRightTail(void) const override
Defines the sign convention of the test statistic. Overwrite function if necessary.
void SetConditionalObservables(const RooArgSet &set) override
interface to set conditional observables. If a test statistics needs them it will re-implement this f...
double Evaluate(RooAbsData &data, RooArgSet &) override
Main interface to evaluate the test statistic on a dataset given the values for the Null Parameters O...
MaxLikelihoodEstimateTestStat(RooAbsPdf &pdf, RooRealVar &parameter)
TestStatistic is an interface class to provide a facility for construction test statistics distributi...
Basic string class.
Definition TString.h:138
STL class.
RooCmdArg Constrain(const RooArgSet &params)
RooCmdArg CloneData(bool flag)
RooCmdArg ConditionalObservables(Args_t &&... argsOrArgSet)
Create a RooCmdArg to declare conditional observables.
Namespace for new Math classes and functions.
MsgLevel
Verbosity level for RooMsgService::StreamConfig in RooMsgService.
Namespace for the RooStats classes.
Definition CodegenImpl.h:66
void RemoveConstantParameters(RooArgSet *set)