83using std::string, std::unique_ptr;
98 std::unique_ptr<RooFitResult> *fitResult =
nullptr);
123 fNLLObs(0), fNLLAsimov(0),
138 oocoutI(
nullptr,InputArguments) <<
"AsymptotiCalculator: Minimum of POI is " <<
muNull->getMin() <<
" corresponds to null snapshot - default configuration is one-sided discovery formulae " << std::endl;
158 oocoutP(
nullptr,Eval) <<
"AsymptoticCalculator::Initialize...." << std::endl;
163 oocoutE(
nullptr,InputArguments) <<
"AsymptoticCalculator::Initialize - ModelConfig has not a pdf defined" << std::endl;
168 oocoutE(
nullptr,InputArguments) <<
"AsymptoticCalculator::Initialize - data set has not been defined" << std::endl;
176 if (!poi || poi->
empty()) {
177 oocoutE(
nullptr,InputArguments) <<
"AsymptoticCalculator::Initialize - ModelConfig has not POI defined." << std::endl;
180 if (poi->
size() > 1) {
181 oocoutW(
nullptr,InputArguments) <<
"AsymptoticCalculator::Initialize - ModelConfig has more than one POI defined \n\t"
182 <<
"The asymptotic calculator works for only one POI - consider as POI only the first parameter"
190 oocoutE(
nullptr,InputArguments) <<
"AsymptoticCalculator::Initialize - Null model needs a snapshot. Set using modelconfig->SetSnapshot(poi)." << std::endl;
217 oocoutP(
nullptr,Eval) <<
"AsymptoticCalculator::Initialize - Find best unconditional NLL on observed data" << std::endl;
228 oocoutP(
nullptr,Eval) <<
"Best fitted POI value = " <<
muBest->getVal() <<
" +/- " <<
muBest->getError() << std::endl;
235 oocoutE(
nullptr,InputArguments) <<
"Alt (Background) model needs a snapshot. Set using modelconfig->SetSnapshot(poi)." << std::endl;
241 oocoutP(
nullptr,Eval) <<
"AsymptoticCalculator: Building Asimov data Set" << std::endl;
252 if (
data.numEntries() !=
xobs->getBins() ) {
254 oocoutW(
nullptr,InputArguments) <<
"AsymptoticCalculator: number of bins in " <<
xobs->GetName() <<
" are different than data bins "
255 <<
" set the same data bins " <<
data.numEntries() <<
" in range "
256 <<
" [ " <<
xobs->getMin() <<
" , " <<
xobs->getMax() <<
" ]" << std::endl;
264 oocoutI(
nullptr,InputArguments) <<
"AsymptoticCalculator: Asimov data will be generated using fitted nuisance parameter values" << std::endl;
272 oocoutI(
nullptr,InputArguments) <<
"AsymptoticCalculator: Asimovdata set will be generated using nominal (current) nuisance parameter values" << std::endl;
278 oocoutE(
nullptr,InputArguments) <<
"AsymptoticCalculator: Error : Asimov data set could not be generated " << std::endl;
301 <<
"AsymptoticCalculator::Initialize Find best conditional NLL on ASIMOV data set for given alt POI ( "
302 <<
muAlt->GetName() <<
" ) = " <<
muAlt->getVal() << std::endl;
327 std::unique_ptr<RooFitResult> *fitResult)
362 oocoutW(
nullptr,InputArguments) <<
"Model with more than one POI are not supported - ignore extra parameters, consider only first one" << std::endl;
401 minim.setEvalErrorWall(config.useEvalErrorWall);
409 minim.optimizeConst(2);
414 oocoutP(
nullptr,Eval) <<
"AsymptoticCalculator::EvaluateNLL ........ using " << minimizer <<
" / " <<
algorithm
415 <<
" with strategy " <<
strategy <<
" and tolerance " <<
tol << std::endl;
426 oocoutW(
nullptr,Minimization) <<
" ----> Doing a re-scan first" << std::endl;
427 minim.minimize(minimizer,
"Scan");
431 oocoutW(
nullptr,Minimization) <<
" ----> trying with strategy = 1" << std::endl;
432 minim.setStrategy(1);
438 oocoutW(
nullptr,Minimization) <<
" ----> trying with improve" << std::endl;
439 minimizer =
"Minuit";
447 std::unique_ptr<RooFitResult>
result{
minim.save()};
450 if (status >= 0 &&
result) {
461 oocoutE(
nullptr,Fitting) <<
"FIT FAILED !- return a NaN NLL " << std::endl;
466 *fitResult = std::move(
result);
468 minim.optimizeConst(
false);
473 oocoutP(
nullptr,Eval) <<
"AsymptoticCalculator::EvaluateNLL - value = " << val;
480 ooccoutP(
nullptr,Eval) <<
"\tfit time : " <<
tw.RealTime() <<
" s (real) " <<
tw.CpuTime() <<
" s (cpu)" << std::endl;
482 ooccoutP(
nullptr,Eval) << std::endl;
512 oocoutE(
nullptr,InputArguments) <<
"AsymptoticCalculator::GetHypoTest - Error initializing Asymptotic calculator - return nullptr result " << std::endl;
518 oocoutE(
nullptr,InputArguments) <<
"AsymptoticCalculator::GetHypoTest - Asimov data set has not been generated - return nullptr result " << std::endl;
538 oocoutW(
nullptr,InputArguments) <<
"AsymptoticCalculator::GetHypoTest: snapshot has more than one POI - assume as POI first parameter " << std::endl;
554 oocoutI(
nullptr,Eval) <<
"\nAsymptoticCalculator::GetHypoTest: - perform an hypothesis test for POI ( " <<
muTest->GetName() <<
" ) = " <<
muTest->getVal() << std::endl;
555 oocoutP(
nullptr,Eval) <<
"AsymptoticCalculator::GetHypoTest - Find best conditional NLL on OBSERVED data set ..... " << std::endl;
571 oocoutP(
nullptr,Eval) <<
"\t OBSERVED DATA : qmu = " << qmu <<
" condNLL = " <<
condNLL <<
" uncond " <<
fNLLObs << std::endl;
579 oocoutW(
nullptr,Minimization) <<
"AsymptoticCalculator: Found a negative value of the qmu - retry to do the unconditional fit "
583 <<
"AsymptoticCalculator: unconditional fit failed before - retry to do it now " << std::endl;
590 oocoutW(
nullptr,Minimization) <<
"AsymptoticCalculator: Found a better unconditional minimum "
591 <<
" old NLL = " <<
fNLLObs <<
" old muHat " <<
muHat->getVal() << std::endl;
608 oocoutW(
nullptr,Minimization) <<
"AsymptoticCalculator: New minimum found for "
609 <<
" NLL = " <<
fNLLObs <<
" muHat " <<
muHat->getVal() << std::endl;
615 oocoutP(
nullptr,Eval) <<
"After unconditional refit, new qmu value is " << qmu << std::endl;
621 oocoutE(
nullptr,Minimization) <<
"AsymptoticCalculator: qmu is still < 0 for mu = "
622 <<
muTest->getVal() <<
" return a dummy result "
627 oocoutE(
nullptr,Minimization) <<
"AsymptoticCalculator: failure in fitting for qmu or qmuA "
628 <<
muTest->getVal() <<
" return a dummy result "
652 if (verbose > 0)
oocoutP(
nullptr,Eval) <<
"AsymptoticCalculator::GetHypoTest -- Find best conditional NLL on ASIMOV data set .... " << std::endl;
670 <<
"AsymptoticCalculator: Found a negative value of the qmu Asimov- retry to do the unconditional fit "
674 <<
"AsymptoticCalculator: Fit failed for unconditional the qmu Asimov- retry unconditional fit "
682 oocoutW(
nullptr,Minimization) <<
"AsymptoticCalculator: Found a better unconditional minimum for Asimov data set"
693 oocoutW(
nullptr,Minimization) <<
"AsymptoticCalculator: New minimum found for "
698 oocoutP(
nullptr,Eval) <<
"After unconditional Asimov refit, new qmu_A value is " <<
qmu_A << std::endl;
704 oocoutE(
nullptr,Minimization) <<
"AsymptoticCalculator: qmu_A is still < 0 for mu = "
705 <<
muTest->getVal() <<
" return a dummy result "
710 oocoutE(
nullptr,Minimization) <<
"AsymptoticCalculator: failure in fitting for qmu or qmuA "
711 <<
muTest->getVal() <<
" return a dummy result "
741 oocoutI(
nullptr,InputArguments) <<
"Minimum of POI is " <<
muTest->getMin() <<
" corresponds to alt snapshot - using qtilde asymptotic formulae " << std::endl;
744 oocoutI(
nullptr,InputArguments) <<
"Minimum of POI is " <<
muTest->getMin() <<
" is different to alt snapshot " <<
muAlt->getVal()
745 <<
" - using standard q asymptotic formulae " << std::endl;
757 oocoutI(
nullptr, Eval) <<
"Using signed one-sided qmu - flipping the sign of the test statistic muHat = "
758 <<
muHat->getVal() <<
" muTest = " <<
muTest->getVal() << std::endl;
761 oocoutI(
nullptr, Eval) <<
"Using one-sided qmu - setting qmu to zero muHat = " <<
muHat->getVal()
762 <<
" muTest = " <<
muTest->getVal() << std::endl;
771 <<
"Using signed one-sided discovery qmu - flipping the sign of the test statistic muHat = "
772 <<
muHat->getVal() <<
" muTest = " <<
muTest->getVal() << std::endl;
775 oocoutI(
nullptr, Eval) <<
"Using one-sided discovery qmu - setting qmu to zero muHat = " <<
muHat->getVal()
776 <<
" muTest = " <<
muTest->getVal() << std::endl;
800 double sqrtqmu = (qmu > 0) ? std::sqrt(qmu) : 0;
810 oocoutI(
nullptr,Eval) <<
"Using one-sided limit asymptotic formula (qmu)" << std::endl;
812 oocoutI(
nullptr, Eval) <<
"Using one-sided discovery asymptotic formula (q0)" << std::endl;
820 if (verbose > 2)
oocoutI(
nullptr,Eval) <<
"Using two-sided asymptotic formula (tmu)" << std::endl;
834 if (verbose > 2)
oocoutI(
nullptr,Eval) <<
"Using qmu_tilde (qmu is greater than qmu_A)" << std::endl;
843 if (verbose > 2)
oocoutI(
nullptr,Eval) <<
"Using tmu_tilde (qmu is greater than qmu_A)" << std::endl;
853 string resultname =
"HypoTestAsymptotic_result";
857 oocoutP(
nullptr, Eval) <<
"poi = " <<
muTest->getVal() <<
" qmu = " << qmu <<
" qmu_A = " <<
qmu_A
859 <<
" CLb = " <<
palt <<
" CLs = " << res->
CLs() << std::endl;
901 brf.SetFunction(
wf, 0, 20);
904 oocoutE(
nullptr,Eval) <<
"Error finding expected p-values - return -1" << std::endl;
912 brf.SetFunction(
wf2,0,20);
915 oocoutE(
nullptr,Eval) <<
"Error finding expected p-values - return -1" << std::endl;
936 if (
debug)
oocoutI(
nullptr,Generation) <<
"looping on observable " <<
v->GetName() << std::endl;
937 for (
int i = 0; i <
v->getBins(); ++i) {
942 binVolume *=
v->getBinWidth(i);
953 if (
fval*expectedEvents <= 0)
955 if (
fval*expectedEvents < 0) {
956 oocoutW(
nullptr,InputArguments)
957 <<
"AsymptoticCalculator::" <<
__func__
958 <<
"(): Bin " << i <<
" of " <<
v->GetName() <<
" has negative expected events! Please check your inputs." << std::endl;
961 oocoutW(
nullptr,InputArguments)
962 <<
"AsymptoticCalculator::" <<
__func__
963 <<
"(): Bin " << i <<
" of " <<
v->GetName() <<
" has zero expected events - skip it" << std::endl;
972 oocoutI(
nullptr,Generation) <<
"bin " <<
ibin <<
"\t";
973 for (std::size_t
j=0;
j < obs.
size(); ++
j) {
ooccoutI(
nullptr,Generation) <<
" " << (
static_cast<RooRealVar&
>( obs[
j])).getVal(); }
974 ooccoutI(
nullptr,Generation) <<
" w = " <<
fval*expectedEvents;
975 ooccoutI(
nullptr,Generation) << std::endl;
982 oocoutI(
nullptr,Generation) <<
"ending loop on .. " <<
v->GetName() << std::endl;
999 oocoutF(
nullptr, Generation) <<
errPrefix <<
"Has two observables ?? " << std::endl;
1003 oocoutF(
nullptr, Generation) <<
errPrefix <<
"No observable?" << std::endl;
1008 if (
myobs ==
nullptr) {
1009 oocoutF(
nullptr, Generation) <<
errPrefix <<
"Observable is not a RooRealVar??" << std::endl;
1012 if (
myexp ==
nullptr) {
1013 oocoutF(
nullptr, Generation) <<
errPrefix <<
"Expected is not a RooAbsReal??" << std::endl;
1020 oocoutI(
nullptr,Generation) <<
"SetObsToExpected : setting " <<
myobs->GetName() <<
" to expected value " <<
myexp->getVal() <<
" of " <<
myexp->GetName() << std::endl;
1034 std::string
const &
errPrefix =
"AsymptoticCalculator::SetObsExpected( " + std::string{pdf.
ClassName()} +
" ) : ";
1041 std::string
const &
errPrefix =
"AsymptoticCalculator::SetObsExpected( " + std::string{pdf.
ClassName()} +
" ) : ";
1052 std::string
const &
errPrefix =
"AsymptoticCalculator::SetObsExpected( " + std::string{
mvgauss.ClassName()} +
" ) : ";
1068 for (
auto *
a : prod.pdfList()) {
1069 if (!
a->dependsOn(obs))
continue;
1076 pois->setNoRounding(
true);
1077 }
else if ((gauss =
dynamic_cast<RooGaussian *
>(
a)) !=
nullptr) {
1084 oocoutE(
nullptr, InputArguments)
1085 <<
"Illegal term in counting model: "
1086 <<
"the PDF " <<
a->GetName() <<
" depends on the observables, but is not a Poisson, Gaussian or Product"
1108 oocoutI(
nullptr,Generation) <<
"generate counting Asimov data for pdf of type " << pdf.
ClassName() << std::endl;
1111 if (prod !=
nullptr) {
1113 }
else if ((
pois =
dynamic_cast<RooPoisson *
>(&pdf)) !=
nullptr) {
1116 pois->setNoRounding(
true);
1117 }
else if ((gauss =
dynamic_cast<RooGaussian *
>(&pdf)) !=
nullptr) {
1122 oocoutE(
nullptr,InputArguments) <<
"A counting model pdf must be either a RooProdPdf or a RooPoisson or a RooGaussian" << std::endl;
1124 if (!
r)
return nullptr;
1131 "CountingAsimovData" + std::to_string(
icat), obs);
1159 asimovData = std::make_unique<RooDataSet>(
"AsimovData" + std::to_string(
icat),
1160 "combAsimovData" + std::to_string(
icat),
1180 if (
rrv &&
rrv->getBins() == 0) {
1188 oocoutI(
nullptr,Generation) <<
"Generating Asimov data for pdf " << pdf.
GetName() << std::endl;
1189 oocoutI(
nullptr,Generation) <<
"list of observables " << std::endl;
1194 double binVolume = 1;
1203 oocoutI(
nullptr,Generation) <<
"filled from " << pdf.
GetName() <<
" " <<
nbins <<
" nbins " <<
" volume is " << binVolume << std::endl;
1226 oocoutE(
nullptr,Generation) <<
"sum entries is nan"<< std::endl;
1246 RooRealVar weightVar{
"binWeightAsimov",
"binWeightAsimov", 1, 0, 1.e30};
1248 if (
printLevel > 1)
oocoutI(
nullptr,Generation) <<
" Generate Asimov data for observables"<< std::endl;
1254 for (
auto ele : list) {
1256 if (
pdfi->dependsOn(observables))
1276 std::map<std::string, std::unique_ptr<RooDataSet>>
asimovDataMap;
1282 oocoutW(
nullptr,Generation) <<
"Simultaneous pdf does not contain any categories." << std::endl;
1298 oocoutE(
nullptr,Generation) <<
"Error generating an Asimov data set for pdf " <<
pdftmp->GetName() << std::endl;
1303 oocoutE(
nullptr,Generation) <<
"AsymptoticCalculator::GenerateAsimovData(): The PDF for " <<
channelCat.getCurrentLabel()
1304 <<
" was already defined. It will be overridden. The faulty category definitions follow:" << std::endl;
1310 oocoutI(
nullptr,Generation) <<
"channel: " <<
channelCat.getCurrentLabel() <<
", data: ";
1312 ooccoutI(
nullptr,Generation) << std::endl;
1351 oocoutI(
nullptr,Generation) <<
"MakeAsimov: Setting poi " <<
tmpPar->GetName() <<
" to a constant value = " <<
tmpPar->getVal() << std::endl;
1376 oocoutP(
nullptr,Generation) <<
"MakeAsimov: doing a conditional fit for finding best nuisance values " << std::endl;
1379 oocoutI(
nullptr,Generation) <<
"POI values:\n"; poi.
Print(
"v");
1381 oocoutI(
nullptr,Generation) <<
"Nuis param values:\n";
1390 std::vector<RooCmdArg> args{
1401 for (
auto& arg : args) {
1407 oocoutP(
nullptr,Generation) <<
"fit time : " <<
tw2.RealTime() <<
" s (real) " <<
tw2.CpuTime() <<
" s (cpu)" << std::endl;
1412 oocoutI(
nullptr,Generation) <<
"Nuisance parameters after fit for asimov dataset: " << std::endl;
1466 oocoutI(
nullptr,Generation) <<
"Generated Asimov data for observables "; (model.
GetObservables() )->Print();
1469 oocoutI(
nullptr,Generation) <<
"--- Asimov data values \n";
1470 asimov->
get()->Print(
"v");
1473 oocoutI(
nullptr,Generation) <<
"--- Asimov data numEntries = " << asimov->
numEntries() <<
" sumOfEntries = " << asimov->
sumEntries() << std::endl;
1476 oocoutI(
nullptr,Generation) <<
"\ttime for generating : " <<
tw.RealTime() <<
" s (real) " <<
tw.CpuTime() <<
" s (cpu)" << std::endl;
1496 oocoutI(
nullptr,Generation) <<
"Generating Asimov data for global observables " << std::endl;
1510 oocoutW(
nullptr,Generation) <<
"AsymptoticCalculator::MakeAsimovData: model does not have nuisance parameters but has global observables"
1511 <<
" set global observables to model values " << std::endl;
1519 oocoutF(
nullptr, Generation) <<
"AsymptoticCalculator::MakeAsimovData: model has nuisance parameters and "
1520 "global obs but no nuisance pdf "
1535 "AsimovUtils: a factor of the nuisance pdf is not a Pdf!");
1543 if (
cgobs->size() > 1) {
1544 oocoutE(
nullptr,Generation) <<
"AsymptoticCalculator::MakeAsimovData: constraint term " <<
cterm->GetName()
1545 <<
" has multiple global observables -cannot generate - skip it" << std::endl;
1548 else if (
cgobs->empty()) {
1550 <<
"AsymptoticCalculator::MakeAsimovData: constraint term " <<
cterm->GetName()
1551 <<
" has no global observables - skip it" << std::endl;
1559 if (
cpars->size() != 1) {
1561 <<
"AsymptoticCalculator::MakeAsimovData:constraint term "
1562 <<
cterm->GetName() <<
" has multiple floating params - cannot generate - skip it " << std::endl;
1570 if (verbose > 2)
oocoutI(
nullptr,Generation) <<
"Constraint " <<
cterm->GetName() <<
" of type " <<
cClass->GetName() << std::endl;
1576 <<
"AsymptoticCalculator::MakeAsimovData:constraint term "
1577 <<
cterm->GetName() <<
" of type " << className
1578 <<
" is a non-supported type - result might be not correct " << std::endl;
1585 pois->setNoRounding(
true);
1596 <<
"AsymptoticCalculator::MakeAsimovData:constraint term "
1597 <<
cterm->GetName() <<
" has no direct dependence on global observable- cannot generate it " << std::endl;
1616 <<
"AsymptoticCalculator::MakeAsimovData:constraint term "
1617 <<
cterm->GetName() <<
" is a Gamma distribution and no server named theta is found. Assume that the Gamma scale is 1 " << std::endl;
1619 else if (verbose>2) {
1620 oocoutI(
nullptr,Generation) <<
"Gamma constraint has a scale " <<
thetaGamma->GetName() <<
" = " <<
thetaGamma->getVal() << std::endl;
1625 if (verbose > 2)
oocoutI(
nullptr,Generation) <<
"Loop on constraint server term " <<
a2->GetName() << std::endl;
1631 oocoutE(
nullptr,Generation) <<
"AsymptoticCalculator::MakeAsimovData:constraint term "
1632 <<
cterm->GetName() <<
" constraint term has more server depending on nuisance- cannot generate it " <<
1645 oocoutI(
nullptr,Generation) <<
"setting global observable " <<
rrv.GetName() <<
" to value " <<
rrv.getVal()
1646 <<
" which comes from " <<
rrv2->GetName() << std::endl;
1652 oocoutE(
nullptr,Generation) <<
"AsymptoticCalculator::MakeAsimovData - can't find nuisance for constraint term - global observables will not be set to Asimov value " <<
cterm->GetName() << std::endl;
1653 oocoutE(
nullptr,Generation) <<
"Parameters: " << std::endl;
1655 oocoutE(
nullptr,Generation) <<
"Observables: " << std::endl;
1671 oocoutI(
nullptr,Generation) <<
"Generated Asimov data for global observables ";
1672 if (verbose == 1)
gobs.Print();
1676 oocoutI(
nullptr,Generation) <<
"\nGlobal observables for data: " << std::endl;
1678 oocoutI(
nullptr,Generation) <<
"\nGlobal observables for asimov: " << std::endl;
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h offset
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t index
Class for finding the root of a one dimensional function using the Brent algorithm.
static int DefaultPrintLevel()
static double DefaultTolerance()
static const std::string & DefaultMinimizerAlgo()
static int DefaultStrategy()
Template class to wrap any C++ callable object which takes one argument i.e.
Common abstract base class for objects that represent a value and a "shape" in RooFit.
RooFit::OwningPtr< RooArgSet > getParameters(const RooAbsData *data, bool stripDisconnected=true) const
Create a list of leaf nodes in the arg tree starting with ourself as top node that don't match any of...
RooFit::OwningPtr< RooArgSet > getObservables(const RooArgSet &set, bool valueOnly=true) const
Given a set of possible observables, return the observables that this PDF depends on.
RooFit::OwningPtr< RooArgSet > getVariables(bool stripDisconnected=true) const
Return RooArgSet with all variables (tree leaf nodes of expression tree)
bool contains(const char *name) const
Check if collection contains an argument with a specific name.
virtual void removeAll()
Remove all arguments from our set, deleting them if we own them.
virtual bool add(const RooAbsArg &var, bool silent=false)
Add the specified argument to list.
void assign(const RooAbsCollection &other) const
Sets the value, cache and constant attribute of any argument in our set that also appears in the othe...
Storage_t::size_type size() const
RooAbsArg * first() const
void Print(Option_t *options=nullptr) const override
This method must be overridden when a class wants to print itself.
Abstract base class for binned and unbinned datasets.
virtual double sumEntries() const =0
Return effective number of entries in dataset, i.e., sum all weights.
virtual const RooArgSet * get() const
virtual Int_t numEntries() const
Return number of entries in dataset, i.e., count unweighted entries.
Abstract interface for all probability density functions.
virtual double expectedEvents(const RooArgSet *nset) const
Return expected number of events to be used in calculation of extended likelihood.
bool canBeExtended() const
If true, PDF can provide extended likelihood term.
static constexpr int DefaultNBins
Historical default number of bins, injected by routines that need a concrete bin count when a variabl...
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.
RooArgSet * snapshot(bool deepCopy=true) const
Use RooAbsCollection::snapshot(), but return as RooArgSet.
Object to represent discrete states.
Container class to hold unbinned data.
RooAbsReal const & getX() const
Get the x variable.
RooAbsReal const & getMean() const
Get the mean parameter.
Collection class for internal use, storing a collection of RooAbsArg pointers in a doubly linked list...
virtual void Add(TObject *arg)
Wrapper class around ROOT::Math::Minimizer that provides a seamless interface between the minimizer f...
static RooMsgService & instance()
Return reference to singleton instance.
Multivariate Gaussian p.d.f.
RooAbsReal const & getX() const
Get the x variable.
RooAbsReal const & getMean() const
Get the mean parameter.
Efficient implementation of a product of PDFs of the form.
const RooArgList & pdfList() const
Variable that can be changed from the outside.
Facilitates simultaneous fitting of multiple PDFs to subsets of a given dataset.
std::unique_ptr< RooFitResult > fFitResultCondObs
! result of conditional fit to observed data
std::unique_ptr< RooFitResult > fFitResultUncondAsimov
! result of fit to Asimov data at the alt POI
static double GetExpectedPValues(double pnull, double palt, double nsigma, bool usecls, bool oneSided=true)
function given the null and the alt p value - return the expected one given the N - sigma value
std::unique_ptr< RooFitResult > fFitResultCondAsimov
! result of conditional fit to Asimov data
static void SetPrintLevel(int level)
set print level (static function)
RooArgSet fAsimovGlobObs
snapshot of Asimov global observables
static RooAbsData * GenerateAsimovData(const RooAbsPdf &pdf, const RooArgSet &observables)
generate the asimov data for the observables (not the global ones) need to deal with the case of a si...
int fUseQTilde
flag to indicate if using qtilde or not (-1 (default based on RooRealVar)), 0 false,...
bool fIsInitialized
! flag to check if calculator is initialized
HypoTestResult * GetHypoTest() const override
re-implement HypoTest computation using the asymptotic
bool fOneSided
for one sided PL test statistic (upper limits)
RooArgSet fBestFitParams
snapshot of all best fitted Parameter values
AsymptoticCalculator(RooAbsData &data, const ModelConfig &altModel, const ModelConfig &nullModel, bool nominalAsimov=false)
constructor for asymptotic calculator from Data set and ModelConfig
std::unique_ptr< RooFitResult > fFitResultUncondObs
! result of unconditional fit to observed data
bool fSigned
use signed (uncapped) PL test statistic
bool fOneSidedDiscovery
for one sided PL test statistic (for discovery)
RooAbsData * fAsimovData
asimov data set
RooArgSet fBestFitPoi
snapshot of best fitted POI values
static RooAbsData * MakeAsimovData(RooAbsData &data, const ModelConfig &model, const RooArgSet &poiValues, RooArgSet &globObs, const RooArgSet *genPoiValues=nullptr)
Make Asimov data.
bool fNominalAsimov
make Asimov at nominal parameter values
bool Initialize() const
initialize the calculator by performing a global fit and make the Asimov data set
Common base class for the Hypothesis Test Calculators.
const ModelConfig * GetNullModel(void) const
const ModelConfig * GetAlternateModel(void) const
const RooAbsData * GetData(void) const
HypoTestResult is a base class for results from hypothesis tests.
virtual double CLs() const
is simply (not a method, but a quantity)
< A class that holds configuration information for a model using a workspace as a store
std::unique_ptr< RooFitResult > fitTo(RooAbsData &data, CmdArgs_t const &...cmdArgs) const
Wrapper around RooAbsPdf::fitTo(), where the pdf and some configuration options are retrieved from th...
const RooArgSet * GetGlobalObservables() const
get RooArgSet for global observables (return nullptr if not existing)
const RooArgSet * GetParametersOfInterest() const
get RooArgSet containing the parameter of interest (return nullptr if not existing)
const RooArgSet * GetNuisanceParameters() const
get RooArgSet containing the nuisance parameters (return nullptr if not existing)
const RooArgSet * GetObservables() const
get RooArgSet for observables (return nullptr if not existing)
RooAbsPdf * GetPdf() const
get model PDF (return nullptr if pdf has not been specified or does not exist)
TClass instances represent classes, structs and namespaces in the ROOT type system.
const char * GetName() const override
Returns name of object.
virtual const char * ClassName() const
Returns name of class to which the object belongs.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
RooCmdArg Index(RooCategory &icat)
RooCmdArg WeightVar(const char *name="weight", bool reinterpretAsWeight=false)
RooCmdArg Import(const char *state, TH1 &histo)
RooCmdArg Offset(std::string const &mode)
RooCmdArg Constrain(const RooArgSet ¶ms)
RooCmdArg Minimizer(const char *type, const char *alg=nullptr)
RooCmdArg Hesse(bool flag=true)
RooCmdArg Strategy(Int_t code)
RooCmdArg EvalErrorWall(bool flag)
RooCmdArg PrintLevel(Int_t code)
double normal_cdf_c(double x, double sigma=1, double x0=0)
Complement of the cumulative distribution function of the normal (Gaussian) distribution (upper tail)...
double normal_cdf(double x, double sigma=1, double x0=0)
Cumulative distribution function of the normal (Gaussian) distribution (lower tail).
double normal_quantile(double z, double sigma)
Inverse ( ) of the cumulative distribution function of the lower tail of the normal (Gaussian) distri...
double normal_quantile_c(double z, double sigma)
Inverse ( ) of the cumulative distribution function of the upper tail of the normal (Gaussian) distri...
double nll(double pdf, double weight, int binnedL, int doBinOffset)
MsgLevel
Verbosity level for RooMsgService::StreamConfig in RooMsgService.
Namespace for the RooStats classes.
bool SetAllConstant(const RooAbsCollection &coll, bool constant=true)
utility function to set all variable constant in a collection (from G.
void RemoveConstantParameters(RooArgSet *set)
std::string const & NLLOffsetMode()
Test what offsetting mode RooStats should use by default.
RooAbsPdf * MakeNuisancePdf(RooAbsPdf &pdf, const RooArgSet &observables, const char *name)
extract constraint terms from pdf
RooStatsConfig & GetGlobalRooStatsConfig()
Retrieve the config object which can be used to set flags for things like offsetting the likelihood o...
Double_t QuietNaN()
Returns a quiet NaN as defined by IEEE 754.
PaltFunction(double offset, double pval, int icase)