79 ConfInterval(
name), fBestFitParams(nullptr), fLikelihoodRatio(nullptr), fConfidenceLevel(0.95)
90 fBestFitParams(bestParams),
92 fConfidenceLevel(0.95)
117 std::cout <<
"parameters don't match" << std::endl;
124 std::cout <<
"likelihood ratio not set" << std::endl;
137 std::cout <<
"The likelihood ratio is < 0, indicates a bad minimum or numerical precision problems. Will return true" << std::endl;
170 std::cout <<
"size is wrong, parameters don't match" << std::endl;
174 std::cout <<
"size is ok, but parameters don't match" << std::endl;
224 if (!profilell)
return false;
230 std::unique_ptr<RooArgSet> partmp{profilell->
getVariables()};
238 for (
int i = 0; i < params.
getSize(); ++i) {
251 if (config.useLikelihoodOffset) {
252 ccoutI(InputArguments) <<
"LikelihoodInterval: using nll offset - set all RooAbsReal to hide the offset " << std::endl;
258 std::transform(minimType.begin(), minimType.end(), minimType.begin(), (
int(*)(
int)) tolower );
259 *minimType.begin() = toupper( *minimType.begin());
261 if (minimType !=
"Minuit" && minimType !=
"Minuit2") {
262 ccoutE(InputArguments) << minimType <<
" is wrong type of minimizer for getting interval limits or contours - must use Minuit or Minuit2" << std::endl;
272 fMinFunc = std::static_pointer_cast<ROOT::Math::IMultiGenFunction>(
279 for (
unsigned int i = 0; i <
fMinFunc->NDim(); ++i) {
281 fMinimizer->SetLimitedVariable( i,
v.GetName(),
v.getVal(),
v.getError(),
v.getMin(),
v.getMax() );
286 ccoutE(Minimization) <<
"Error: Minimization failed " << std::endl;
307 lower = itrl->second;
308 upper = itru->second;
316 int ix = params.
index(¶m);
318 ccoutE(InputArguments) <<
"Error - invalid parameter " << param.
GetName() <<
" specified for finding the interval limits " << std::endl;
325 ccoutE(Eval) <<
"Error returned from minimization of likelihood function - cannot find interval limits " << std::endl;
333 err_level = err_level/2;
336 unsigned int ivarX = ix;
340 ret =
fMinimizer->GetMinosError(ivarX, elow, eup );
345 ccoutW(Minimization) <<
"Warning: lower value for " << param.
GetName() <<
" is at limit " << lower << std::endl;
351 ccoutW(Minimization) <<
"Warning: upper value for " << param.
GetName() <<
" is at limit " << upper << std::endl;
375 int ix = params.
index(¶mX);
376 int iy = params.
index(¶mY);
377 if (ix < 0 || iy < 0) {
378 coutE(InputArguments) <<
"LikelihoodInterval - Error - invalid parameters specified for finding the contours; parX = " << paramX.
GetName()
379 <<
" parY = " << paramY.
GetName() << std::endl;
386 coutE(Eval) <<
"LikelihoodInterval - Error returned creating minimizer for likelihood function - cannot find contour points " << std::endl;
394 cont_level = cont_level/2;
397 unsigned int ncp = npoints;
398 unsigned int ivarX = ix;
399 unsigned int ivarY = iy;
400 coutI(Minimization) <<
"LikelihoodInterval - Finding the contour of " << paramX.
GetName() <<
" ( " << ivarX <<
" ) and " << paramY.
GetName() <<
" ( " << ivarY <<
" ) " << std::endl;
403 coutE(Minimization) <<
"LikelihoodInterval - Error finding contour for parameters " << paramX.
GetName() <<
" and " << paramY.
GetName() << std::endl;
406 if (
int(ncp) < npoints) {
407 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 corresponding 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-...
RooFit::OwningPtr< RooArgSet > getVariables(bool stripDisconnected=true) const
Return RooArgSet with all variables (tree leaf nodes of expression tree)
bool equals(const RooAbsCollection &otherColl) const
Check if this and other collection have identically-named contents.
Int_t getSize() const
Return the number of elements in the collection.
Int_t index(const RooAbsArg *arg) const
Returns index of given arg, or -1 if arg is not in the collection.
RooAbsArg * find(const char *name) const
Find object with given name in list.
virtual double getMax(const char *name=nullptr) const
Get maximum of currently defined range.
virtual double getMin(const char *name=nullptr) const
Get minimum of currently defined range.
Abstract base class for objects that represent a real value and implements functionality common to al...
double getVal(const RooArgSet *normalisationSet=nullptr) const
Evaluate object.
static void setHideOffset(bool flag)
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 setVal(double value) override
Set value of variable to 'value'.
void setError(double value)
ConfInterval is an interface class for a generic interval in the RooStats framework.
LikelihoodInterval is a concrete implementation of the RooStats::ConfInterval interface.
double ConfidenceLevel() const override
return confidence level
double UpperLimit(const RooRealVar ¶m)
return the upper bound of the interval on a given parameter
Int_t GetContourPoints(const RooRealVar ¶mX, const RooRealVar ¶mY, double *x, double *y, Int_t npoints=30)
return the 2D-contour points for the given subset of parameters by default make the contour using 30 ...
void ResetLimits()
reset the cached limit values
bool CreateMinimizer()
internal function to create the minimizer for finding the contours
RooArgSet * GetParameters() const override
return a cloned list of parameters of interest. User manages the return object
RooArgSet * fBestFitParams
snapshot of the model parameters with best fit value (managed internally)
RooArgSet fParameters
parameters of interest for this interval
~LikelihoodInterval() override
destructor
double LowerLimit(const RooRealVar ¶m)
return the lower bound of the interval on a given parameter
std::shared_ptr< RooFunctor > fFunctor
! transient pointer to functor class used by the minimizer
bool 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 fConfidenceLevel
Requested confidence level (eg. 0.95 for 95% CL)
std::map< std::string, double > fLowerLimits
map with cached lower bound values
bool IsInInterval(const RooArgSet &) const override
check if given point is in the interval
bool CheckParameters(const RooArgSet &) const override
check if parameters are correct (i.e. they are the POI of this interval)
RooAbsReal * fLikelihoodRatio
likelihood ratio function used to make contours (managed internally)
std::map< std::string, double > fUpperLimits
map with cached upper bound values
std::shared_ptr< ROOT::Math::Minimizer > fMinimizer
! transient pointer to minimizer class used to find limits and contour
LikelihoodInterval(const char *name=nullptr)
default constructor
std::shared_ptr< ROOT::Math::IMultiGenFunction > fMinFunc
! transient pointer to the minimization function
static bool UseStaticMinuit(bool on=true)
static function to switch on/off usage of static global TMinuit instance (gMinuit) By default it is u...
const char * GetName() const override
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.