85LikelihoodInterval::LikelihoodInterval(
const char*
name) :
86 ConfInterval(
name), fBestFitParams(0), fLikelihoodRatio(0), fConfidenceLevel(0.95)
97 fBestFitParams(bestParams),
99 fConfidenceLevel(0.95)
124 std::cout <<
"parameters don't match" << std::endl;
131 std::cout <<
"likelihood ratio not set" << std::endl;
144 std::cout <<
"The likelihood ratio is < 0, indicates a bad minimum or numerical precision problems. Will return true" << std::endl;
177 std::cout <<
"size is wrong, parameters don't match" << std::endl;
181 std::cout <<
"size is ok, but parameters don't match" << std::endl;
231 if (!profilell)
return false;
246 for (
int i = 0; i < params.
getSize(); ++i) {
259 if (config.useLikelihoodOffset) {
260 ccoutI(
InputArguments) <<
"LikelihoodInterval: using nll offset - set all RooAbsReal to hide the offset " << std::endl;
266 std::transform(minimType.begin(), minimType.end(), minimType.begin(), (
int(*)(
int)) tolower );
267 *minimType.begin() = toupper( *minimType.begin());
269 if (minimType !=
"Minuit" && minimType !=
"Minuit2") {
270 ccoutE(
InputArguments) << minimType <<
" is wrong type of minimizer for getting interval limits or contours - must use Minuit or Minuit2" << std::endl;
280 fMinFunc = std::static_pointer_cast<ROOT::Math::IMultiGenFunction>(
287 for (
unsigned int i = 0; i <
fMinFunc->NDim(); ++i) {
289 fMinimizer->SetLimitedVariable( i,
v.GetName(),
v.getVal(),
v.getError(),
v.getMin(),
v.getMax() );
315 lower = itrl->second;
316 upper = itru->second;
325 int ix = params.
index(¶m);
327 ccoutE(
InputArguments) <<
"Error - invalid parameter " << param.
GetName() <<
" specified for finding the interval limits " << std::endl;
334 ccoutE(
Eval) <<
"Error returned from minimization of likelihood function - cannot find interval limits " << std::endl;
342 err_level = err_level/2;
345 unsigned int ivarX = ix;
349 ret =
fMinimizer->GetMinosError(ivarX, elow, eup );
389 int ix = params.
index(¶mX);
390 int iy = params.
index(¶mY);
391 if (ix < 0 || iy < 0) {
392 coutE(
InputArguments) <<
"LikelihoodInterval - Error - invalid parameters specified for finding the contours; parX = " << paramX.
GetName()
393 <<
" parY = " << paramY.
GetName() << std::endl;
400 coutE(
Eval) <<
"LikelihoodInterval - Error returned creating minimizer for likelihood function - cannot find contour points " << std::endl;
408 cont_level = cont_level/2;
411 unsigned int ncp = npoints;
412 unsigned int ivarX = ix;
413 unsigned int ivarY = iy;
414 coutI(
Minimization) <<
"LikelihoodInterval - Finding the contour of " << paramX.
GetName() <<
" ( " << ivarX <<
" ) and " << paramY.
GetName() <<
" ( " << ivarY <<
" ) " << std::endl;
420 if (
int(ncp) < npoints) {
421 coutW(
Minimization) <<
"LikelihoodInterval -Warning - Less points calculated in contours np = " << ncp <<
" / " << npoints << std::endl;
static ROOT::Math::Minimizer * CreateMinimizer(const std::string &minimizerType="", const std::string &algoType="")
static method to create the corrisponding Minimizer given the string Supported Minimizers types are: ...
static const std::string & DefaultMinimizerType()
Template class to wrap any C++ callable object implementing operator() (const double * x) in a multi-...
RooArgSet * getVariables(Bool_t stripDisconnected=kTRUE) const
Return RooArgSet with all variables (tree leaf nodes of expresssion tree)
Int_t index(const RooAbsArg *arg) const
Returns index of given arg, or -1 if arg is not in the collection.
Bool_t equals(const RooAbsCollection &otherColl) const
Check if this and other collection have identically-named contents.
RooAbsArg * find(const char *name) const
Find object with given name in list.
virtual Double_t getMax(const char *name=0) const
Get maximum of currently defined range.
virtual Double_t getMin(const char *name=0) const
Get miniminum of currently defined range.
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
static void setHideOffset(Bool_t flag)
Double_t getVal(const RooArgSet *normalisationSet=nullptr) const
Evaluate object.
RooArgList is a container object that can hold multiple RooAbsArg objects.
RooArgSet is a container object that can hold multiple RooAbsArg objects.
static RooMsgService & instance()
Return reference to singleton instance.
void setGlobalKillBelow(RooFit::MsgLevel level)
RooFit::MsgLevel globalKillBelow() const
Class RooProfileLL implements the profile likelihood estimator for a given likelihood and set of para...
RooRealVar represents a variable that can be changed from the outside.
void setError(Double_t value)
Double_t getError() const
virtual void setVal(Double_t value)
Set value of variable to 'value'.
ConfInterval is an interface class for a generic interval in the RooStats framework.
LikelihoodInterval is a concrete implementation of the RooStats::ConfInterval interface.
virtual RooArgSet * GetParameters() const
return a cloned list of parameters of interest. User manages the return object
Double_t LowerLimit(const RooRealVar ¶m)
return the lower bound of the interval on a given parameter
void ResetLimits()
reset the cached limit values
bool CreateMinimizer()
internal function to create the minimizer for finding the contours
Int_t GetContourPoints(const RooRealVar ¶mX, const RooRealVar ¶mY, Double_t *x, Double_t *y, Int_t npoints=30)
return the 2D-contour points for the given subset of parameters by default make the contour using 30 ...
Bool_t CheckParameters(const RooArgSet &) const
check if parameters are correct (i.e. they are the POI of this interval)
Double_t fConfidenceLevel
likelihood ratio function used to make contours (managed internally)
RooArgSet * fBestFitParams
parameters of interest for this interval
virtual Double_t ConfidenceLevel() const
return confidence level
std::shared_ptr< RooFunctor > fFunctor
transient pointer to minimizer class used to find limits and contour
Bool_t FindLimits(const RooRealVar ¶m, double &lower, double &upper)
find both lower and upper interval boundaries for a given parameter return false if the bounds have n...
Double_t UpperLimit(const RooRealVar ¶m)
return the upper bound of the interval on a given parameter
std::map< std::string, double > fLowerLimits
Requested confidence level (eg. 0.95 for 95% CL)
LikelihoodInterval(const char *name=0)
default constructor
RooAbsReal * fLikelihoodRatio
snapshot of the model parameters with best fit value (managed internally)
std::map< std::string, double > fUpperLimits
map with cached lower bound values
std::shared_ptr< ROOT::Math::Minimizer > fMinimizer
map with cached upper bound values
virtual ~LikelihoodInterval()
destructor
virtual Bool_t IsInInterval(const RooArgSet &) const
check if given point is in the interval
std::shared_ptr< ROOT::Math::IMultiGenFunction > fMinFunc
transient pointer to functor class used by the minimizer
static bool UseStaticMinuit(bool on=true)
static function to switch on/off usage of static global TMinuit instance (gMinuit) By default it is u...
virtual const char * GetName() const
Returns name of object.
MsgLevel
Verbosity level for RooMsgService::StreamConfig in RooMsgService.
Namespace for the RooStats classes.
void SetParameters(const RooArgSet *desiredVals, RooArgSet *paramsToChange)
void RemoveConstantParameters(RooArgSet *set)
RooStatsConfig & GetGlobalRooStatsConfig()
Retrieve the config object which can be used to set flags for things like offsetting the likelihood o...
Double_t Prob(Double_t chi2, Int_t ndf)
Computation of the probability for a certain Chi-squared (chi2) and number of degrees of freedom (ndf...
Double_t ChisquareQuantile(Double_t p, Double_t ndf)
Evaluate the quantiles of the chi-squared probability distribution function.