79int AsymptoticCalculator::fgPrintLevel = 1;
88void AsymptoticCalculator::SetPrintLevel(
int level) {
100 fOneSided(false), fOneSidedDiscovery(false), fNominalAsimov(nominalAsimov),
102 fNLLObs(0), fNLLAsimov(0),
111 assert(nullSnapshot);
117 oocoutI((
TObject*)0,
InputArguments) <<
"AsymptotiCalculator: Minimum of POI is " << muNull->
getMin() <<
" corresponds to null snapshot - default configuration is one-sided discovery formulae " << std::endl;
155 if (!poi || poi->
getSize() == 0) {
161 <<
"The asymptotic calculator works for only one POI - consider as POI only the first parameter"
168 if(nullSnapshot == NULL || nullSnapshot->
getSize() == 0) {
169 oocoutE((
TObject*)0,
InputArguments) <<
"AsymptoticCalculator::Initialize - Null model needs a snapshot. Set using modelconfig->SetSnapshot(poi)." << endl;
192 oocoutP((
TObject*)0,
Eval) <<
"AsymptoticCalculator::Initialize - Find best unconditional NLL on observed data" << endl;
206 if(altSnapshot == NULL || altSnapshot->
getSize() == 0) {
213 oocoutP((
TObject*)0,
Eval) <<
"AsymptoticCalculator: Building Asimov data Set" << endl;
227 <<
" set the same data bins " << data.
numEntries() <<
" in range "
228 <<
" [ " << xobs->
getMin() <<
" , " << xobs->
getMax() <<
" ]" << std::endl;
236 oocoutI((
TObject*)0,
InputArguments) <<
"AsymptoticCalculator: Asimov data will be generated using fitted nuisance parameter values" << endl;
244 oocoutI((
TObject*)0,
InputArguments) <<
"AsymptoticCalculator: Asimovdata set will be generated using nominal (current) nuisance parameter values" << endl;
245 nominalParams = poiAlt;
272 oocoutP((
TObject*)0,
Eval) <<
"AsymptoticCalculator::Initialize Find best conditional NLL on ASIMOV data set for given alt POI ( " <<
281 globObs = globObsSnapshot;
284 if (prevBins > 0 && xobs) xobs->
setBins(prevBins);
305 if (condObs) conditionalObs.
add(*condObs);
307 if (globObs) globalObs.
add(*globObs);
317 if (poiSet && poiSet->
getSize() > 0) {
323 paramsSetConstant.
add(*poiVar);
326 std::cout <<
"Model with more than one POI are not supported - ignore extra parameters, consider only first one" << std::endl;
355 bool skipFit = (nllParams.
getSize() == 0);
369 tol = std::max(tol,1.0);
379 std::cout <<
"AsymptoticCalculator::EvaluateNLL ........ using " << minimizer <<
" / " << algorithm
380 <<
" with strategy " << strategy <<
" and tolerance " << tol << std::endl;
383 for (
int tries = 1, maxtries = 4; tries <= maxtries; ++tries) {
385 status = minim.
minimize(minimizer, algorithm);
391 printf(
" ----> Doing a re-scan first\n");
396 printf(
" ----> trying with strategy = 1\n");
403 printf(
" ----> trying with improve\n");
404 minimizer =
"Minuit";
405 algorithm =
"migradimproved";
414 result = minim.
save();
433 if (result)
delete result;
440 std::cout <<
"AsymptoticCalculator::EvaluateNLL - value = " << val;
443 std::cout <<
" for poi fixed at = " << muTest;
446 std::cout <<
"\tfit time : ";
450 std::cout << std::endl;
480 oocoutE((
TObject*)0,
InputArguments) <<
"AsymptoticCalculator::GetHypoTest - Error initializing Asymptotic calculator - return NULL result " << endl;
486 oocoutE((
TObject*)0,
InputArguments) <<
"AsymptoticCalculator::GetHypoTest - Asimov data set has not been generated - return NULL result " << endl;
499 assert(nullSnapshot && nullSnapshot->
getSize() > 0);
506 oocoutW((
TObject*)0,
InputArguments) <<
"AsymptoticCalculator::GetHypoTest: snapshot has more than one POI - assume as POI first parameter " << std::endl;
516 assert(muHat &&
"no best fit parameter defined");
518 assert(muTest &&
"poi snapshot is not existing");
523 std::cout << std::endl;
524 oocoutI((
TObject*)0,
Eval) <<
"AsymptoticCalculator::GetHypoTest: - perform an hypothesis test for POI ( " << muTest->
GetName() <<
" ) = " << muTest->
getVal() << std::endl;
525 oocoutP((
TObject*)0,
Eval) <<
"AsymptoticCalculator::GetHypoTest - Find best conditional NLL on OBSERVED data set ..... " << std::endl;
531 double qmu = 2.*(condNLL -
fNLLObs);
536 oocoutP((
TObject*)0,
Eval) <<
"\t OBSERVED DATA : qmu = " << qmu <<
" condNLL = " << condNLL <<
" uncond " <<
fNLLObs << std::endl;
544 oocoutW((
TObject*)0,
Minimization) <<
"AsymptoticCalculator: Found a negative value of the qmu - retry to do the unconditional fit "
555 <<
" old NLL = " <<
fNLLObs <<
" old muHat " << muHat->
getVal() << std::endl;
568 <<
" NLL = " <<
fNLLObs <<
" muHat " << muHat->
getVal() << std::endl;
574 oocoutP((
TObject*)0,
Eval) <<
"After unconditional refit, new qmu value is " << qmu << std::endl;
581 << muTest->
getVal() <<
" return a dummy result "
587 << muTest->
getVal() <<
" return a dummy result "
611 if (
verbose > 0)
oocoutP((
TObject*)0,
Eval) <<
"AsymptoticCalculator::GetHypoTest -- Find best conditional NLL on ASIMOV data set .... " << std::endl;
624 oocoutW((
TObject*)0,
Minimization) <<
"AsymptoticCalculator: Found a negative value of the qmu Asimov- retry to do the unconditional fit "
627 oocoutW((
TObject*)0,
Minimization) <<
"AsymptoticCalculator: Fit failed for unconditional the qmu Asimov- retry unconditional fit "
645 oocoutP((
TObject*)0,
Eval) <<
"After unconditional Asimov refit, new qmu_A value is " << qmu_A << std::endl;
652 << muTest->
getVal() <<
" return a dummy result "
658 << muTest->
getVal() <<
" return a dummy result "
665 globObs = globObsSnapshot;
677 bool useQTilde =
false;
692 <<
" - using standard q asymptotic formulae " << std::endl;
703 <<
" muTest = " << muTest->
getVal() << std::endl;
710 <<
" muTest = " << muTest->
getVal() << std::endl;
716 if (qmu < 0 && qmu > -tol) qmu = 0;
717 if (qmu_A < 0 && qmu_A > -tol) qmu_A = 0;
724 double pnull = -1, palt = -1;
729 double sqrtqmu = (qmu > 0) ?
std::sqrt(qmu) : 0;
730 double sqrtqmu_A = (qmu_A > 0) ?
std::sqrt(qmu_A) : 0;
737 oocoutI((
TObject*)0,
Eval) <<
"Using one-sided limit asymptotic formula (qmu)" << endl;
739 oocoutI((
TObject*)0,
Eval) <<
"Using one-sided discovery asymptotic formula (q0)" << endl;
756 if ( qmu > qmu_A && (qmu_A > 0 || qmu > tol) ) {
765 if ( qmu > qmu_A && (qmu_A > 0 || qmu > tol) ) {
778 string resultname =
"HypoTestAsymptotic_result";
784 <<
"poi = " << muTest->
getVal() <<
" qmu = " << qmu <<
" qmu_A = " << qmu_A
785 <<
" sigma = " << muTest->
getVal()/sqrtqmu_A
786 <<
" CLsplusb = " << pnull <<
" CLb = " << palt <<
" CLs = " << res->
CLs() << std::endl;
793 PaltFunction(
double offset,
double pval,
int icase) :
794 fOffset(offset), fPval(pval), fCase(icase) {}
811 if (!useCls)
return clsplusb;
813 return (clb == 0) ? -1 : clsplusb / clb;
824 PaltFunction
f( sqrttmu, palt, -1);
828 bool ret = brf.
Solve();
830 oocoutE((
TObject*)0,
Eval) <<
"Error finding expected p-values - return -1" << std::endl;
833 double sqrttmu_A = brf.
Root();
841 oocoutE((
TObject*)0,
Eval) <<
"Error finding expected p-values - return -1" << std::endl;
868 if (debug) cout <<
"looping on observable " <<
v->GetName() << endl;
869 for (
int i = 0; i <
v->getBins(); ++i) {
871 if (index < obs.
getSize() -1) {
873 double prevBinVolume = binVolume;
874 binVolume *=
v->getBinWidth(i);
875 FillBins(pdf, obs, data, index, binVolume, ibin);
877 binVolume = prevBinVolume;
882 double totBinVolume = binVolume *
v->getBinWidth(i);
883 double fval = pdf.
getVal(&obstmp)*totBinVolume;
886 if (fval*expectedEvents <= 0)
888 if (fval*expectedEvents < 0)
889 cout <<
"WARNING::Detected a bin with negative expected events! Please check your inputs." << endl;
891 cout <<
"WARNING::Detected a bin with zero expected events- skip it" << endl;
895 data.
add(obs, fval*expectedEvents);
898 cout <<
"bin " << ibin <<
"\t";
899 for (
int j=0; j < obs.
getSize(); ++j) { cout <<
" " << ((
RooRealVar&) obs[j]).getVal(); }
900 cout <<
" w = " << fval*expectedEvents;
911 cout <<
"ending loop on .. " <<
v->GetName() << endl;
926 if (!
a->dependsOn(obs))
continue;
932 }
else if ((gaus =
dynamic_cast<RooGaussian *
>(
a)) != 0) {
941 <<
"the PDF " <<
a->GetName()
942 <<
" depends on the observables, but is not a Poisson, Gaussian or Product"
964 const char * pdfName = pdf.IsA()->
GetName();
969 oocoutF((
TObject*)0,
Generation) <<
"AsymptoticCalculator::SetObsExpected( " << pdfName <<
" ) : Has two observables ?? " << endl;
974 oocoutF((
TObject*)0,
Generation) <<
"AsymptoticCalculator::SetObsExpected( " << pdfName <<
" ) : Observable is not a RooRealVar??" << endl;
978 if (!
a->isConstant() ) {
980 oocoutE((
TObject*)0,
Generation) <<
"AsymptoticCalculator::SetObsExpected( " << pdfName <<
" ) : Has two non-const arguments " << endl;
985 oocoutF((
TObject*)0,
Generation) <<
"AsymptoticCalculator::SetObsExpected( " << pdfName <<
" ) : Expected is not a RooAbsReal??" << endl;
992 oocoutF((
TObject*)0,
Generation) <<
"AsymptoticCalculator::SetObsExpected( " << pdfName <<
" ) : No observable?" << endl;
996 oocoutF((
TObject*)0,
Generation) <<
"AsymptoticCalculator::SetObsExpected( " << pdfName <<
" ) : No observable?" << endl;
1003 std::cout <<
"SetObsToExpected : setting " << myobs->
GetName() <<
" to expected value " << myexp->
getVal() <<
" of " << myexp->
GetName() << std::endl;
1021 std::cout <<
"generate counting Asimov data for pdf of type " << pdf.IsA()->
GetName() << std::endl;
1026 }
else if ((pois =
dynamic_cast<RooPoisson *
>(&pdf)) != 0) {
1030 }
else if ((gaus =
dynamic_cast<RooGaussian *
>(&pdf)) != 0) {
1064 obsAndWeight.
add(weightVar);
1081 if (printLevel >= 2) {
1082 cout <<
"Generating Asimov data for pdf " << pdf.
GetName() << endl;
1083 cout <<
"list of observables " << endl;
1088 double binVolume = 1;
1090 FillBins(pdf, obsList, *asimovData, obsIndex, binVolume, nbins);
1091 if (printLevel >= 2)
1092 cout <<
"filled from " << pdf.
GetName() <<
" " << nbins <<
" nbins " <<
" volume is " << binVolume << endl;
1110 if (printLevel >= 1)
1112 asimovData->
Print();
1116 cout <<
"sum entries is nan"<<endl;
1134 unique_ptr<RooRealVar> weightVar (
new RooRealVar(
"binWeightAsimov",
"binWeightAsimov", 1, 0, 1.E30 ));
1136 if (printLevel > 1) cout <<
" Generate Asimov data for observables"<<endl;
1144 std::map<std::string, RooDataSet*> asimovDataMap;
1148 int nrIndices = channelCat.
numTypes();
1149 if( nrIndices == 0 ) {
1152 for (
int i=0;i<nrIndices;i++){
1157 assert(pdftmp != 0);
1161 cout <<
"on type " << channelCat.
getLabel() <<
" " << channelCat.
getIndex() << endl;
1167 if (!dataSinglePdf) {
1172 if (asimovDataMap.count(
string(channelCat.
getLabel())) != 0) {
1174 <<
" was already defined. It will be overridden. The faulty category definitions follow:" << endl;
1175 channelCat.
Print(
"V");
1182 cout <<
"channel: " << channelCat.
getLabel() <<
", data: ";
1183 dataSinglePdf->
Print();
1189 obsAndWeight.
add(*weightVar);
1195 for (
auto element : asimovDataMap) {
1196 delete element.second;
1230 std::cout <<
"MakeAsimov: Setting poi " << tmpPar->
GetName() <<
" to a constant value = " << tmpPar->
getVal() << std::endl;
1231 paramsSetConstant.
add(*tmpPar);
1235 bool hasFloatParams =
false;
1240 if (constrainParams.
getSize() > 0) hasFloatParams =
true;
1248 if ( rrv != 0 && rrv->
isConstant() == false ) { hasFloatParams =
true;
break; }
1251 if (hasFloatParams) {
1257 std::cout <<
"MakeAsimov: doing a conditional fit for finding best nuisance values " << std::endl;
1260 std::cout <<
"POI values:\n"; poi.
Print(
"v");
1262 std::cout <<
"Nuis param values:\n";
1263 constrainParams.
Print(
"v");
1282 if (
verbose>0) { std::cout <<
"fit time "; tw2.
Print();}
1286 std::cout <<
"Nuisance parameters after fit for asimov dataset: " << std::endl;
1303 if (genPoiValues) *allParams = *genPoiValues;
1333 if (allParamValues.
getSize() > 0) {
1335 *allVars = allParamValues;
1344 std::cout <<
"Generated Asimov data for observables "; (model.
GetObservables() )->
Print();
1347 std::cout <<
"--- Asimov data values \n";
1351 std::cout <<
"--- Asimov data numEntries = " << asimov->
numEntries() <<
" sumOfEntries = " << asimov->
sumEntries() << std::endl;
1353 std::cout <<
"\ttime for generating : "; tw.
Print();
1373 std::cout <<
"Generating Asimov data for global observables " << std::endl;
1387 oocoutW((
TObject*)0,
Generation) <<
"AsymptoticCalculator::MakeAsimovData: model does not have nuisance parameters but has global observables"
1388 <<
" set global observables to model values " << endl;
1389 asimovGlobObs = gobs;
1395 if (nuispdf.get() == 0) {
1396 oocoutF((
TObject*)0,
Generation) <<
"AsymptoticCalculator::MakeAsimovData: model has nuisance parameters and global obs but no nuisance pdf "
1407 pdfList.
add(*nuispdf.get());
1412 assert(cterm &&
"AsimovUtils: a factor of the nuisance pdf is not a Pdf!");
1415 if (
typeid(*cterm) ==
typeid(
RooUniform))
continue;
1417 std::unique_ptr<RooArgSet> cpars(cterm->
getParameters(&gobs));
1419 if (cgobs->getSize() > 1) {
1421 <<
" has multiple global observables -cannot generate - skip it" << std::endl;
1424 else if (cgobs->getSize() == 0) {
1426 <<
" has no global observables - skip it" << std::endl;
1434 if (cpars->getSize() != 1) {
1436 << cterm->
GetName() <<
" has multiple floating params - cannot generate - skip it " << std::endl;
1440 bool foundServer =
false;
1443 TClass * cClass = cterm->IsA();
1444 if (
verbose > 2) std::cout <<
"Constraint " << cterm->
GetName() <<
" of type " << cClass->
GetName() << std::endl;
1450 << cterm->
GetName() <<
" of type " << className
1451 <<
" is a non-supported type - result might be not correct " << std::endl;
1469 << cterm->
GetName() <<
" has no direct dependence on global observable- cannot generate it " << std::endl;
1487 if (thetaGamma == 0) {
1489 << cterm->
GetName() <<
" is a Gamma distribution and no server named theta is found. Assume that the Gamma scale is 1 " << std::endl;
1493 std::cout <<
"Gamma constraint has a scale " << thetaGamma->
GetName() <<
" = " << thetaGamma->
getVal() << std::endl;
1499 if (
verbose > 2) std::cout <<
"Loop on constraint server term " << a2->
GetName() << std::endl;
1506 << cterm->
GetName() <<
" constraint term has more server depending on nuisance- cannot generate it " <<
1508 foundServer =
false;
1511 if (thetaGamma && thetaGamma->
getVal() > 0)
1518 std::cout <<
"setting global observable "<< rrv.
GetName() <<
" to value " << rrv.
getVal()
1519 <<
" which comes from " << rrv2->
GetName() << std::endl;
1524 oocoutE((
TObject*)0,
Generation) <<
"AsymptoticCalculator::MakeAsimovData - can't find nuisance for constraint term - global observables will not be set to Asimov value " << cterm->
GetName() << std::endl;
1525 std::cerr <<
"Parameters: " << std::endl;
1527 std::cerr <<
"Observables: " << std::endl;
1541 gobs = snapGlobalObsData;
1544 std::cout <<
"Generated Asimov data for global observables ";
1549 std::cout <<
"\nGlobal observables for data: " << std::endl;
1551 std::cout <<
"\nGlobal observables for asimov: " << std::endl;
1552 asimovGlobObs.
Print(
"V");
TRObject operator()(const T1 &t1) const
Class for finding the root of a one dimensional function using the Brent algorithm.
double Root() const
Returns root value.
bool Solve(int maxIter=100, double absTol=1E-8, double relTol=1E-10)
Returns the X value corresponding to the function value fy for (xmin<x<xmax).
bool SetFunction(const ROOT::Math::IGenFunction &f, double xlow, double xup)
Sets the function for the rest of the algorithms.
static int DefaultPrintLevel()
static double DefaultTolerance()
static const std::string & DefaultMinimizerType()
static const std::string & DefaultMinimizerAlgo()
static int DefaultStrategy()
Template class to wrap any C++ callable object which takes one argument i.e.
RooAbsArg is the common abstract base class for objects that represent a value (of arbitrary type) an...
RooArgSet * getObservables(const RooArgSet &set, Bool_t valueOnly=kTRUE) const
Return the observables of this pdf given a set of observables.
Bool_t dependsOn(const RooAbsCollection &serverList, const RooAbsArg *ignoreArg=0, Bool_t valueOnly=kFALSE) const
Test whether we depend on (ie, are served by) any object in the specified collection.
RooFIter serverMIterator() const R__SUGGEST_ALTERNATIVE("Use shapeClients() and begin()
virtual void Print(Option_t *options=0) const
Print TNamed name and title.
RooArgSet * getParameters(const RooAbsData *data, Bool_t stripDisconnected=kTRUE) const
Create a list of leaf nodes in the arg tree starting with ourself as top node that don't match any of...
RooArgSet * getVariables(Bool_t stripDisconnected=kTRUE) const
Return RooArgSet with all variables (tree leaf nodes of expresssion tree)
Bool_t isConstant() const
RooAbsArg * findServer(const char *name) const
Int_t numTypes(const char *=0) const
virtual void removeAll()
Remove all arguments from our set, deleting them if we own them.
Bool_t contains(const RooAbsArg &var) const
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Add the specified argument to list.
RooAbsArg * first() const
RooLinkedListIter iterator(Bool_t dir=kIterForward) const R__SUGGEST_ALTERNATIVE("begin()
TIterator-style iteration over contained elements.
virtual void Print(Option_t *options=0) const
This method must be overridden when a class wants to print itself.
RooAbsArg * find(const char *name) const
Find object with given name in list.
RooAbsData is the common abstract base class for binned and unbinned datasets.
virtual const RooArgSet * get() const
virtual Double_t sumEntries() const =0
virtual void Print(Option_t *options=0) const
Print TNamed name and title.
virtual void add(const RooArgSet &row, Double_t weight=1, Double_t weightError=0)=0
virtual Int_t numEntries() const
virtual RooAbsReal * createNLL(RooAbsData &data, const RooLinkedList &cmdList)
Construct representation of -log(L) of PDFwith given dataset.
Bool_t canBeExtended() const
virtual RooFitResult * fitTo(RooAbsData &data, const RooCmdArg &arg1=RooCmdArg::none(), const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none(), const RooCmdArg &arg6=RooCmdArg::none(), const RooCmdArg &arg7=RooCmdArg::none(), const RooCmdArg &arg8=RooCmdArg::none())
Fit PDF to given dataset.
virtual Double_t expectedEvents(const RooArgSet *nset) const
Return expected number of events from this p.d.f for use in extended likelihood calculations.
virtual Double_t getMax(const char *name=0) const
Get maximum of currently defined range.
virtual Int_t getBins(const char *name=0) const
Get number of bins of currently defined range.
void setConstant(Bool_t value=kTRUE)
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)
static Bool_t hideOffset()
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.
RooArgSet * snapshot(bool deepCopy=true) const
Use RooAbsCollection::snapshot(), but return as RooArgSet.
virtual Bool_t add(const RooAbsCollection &col, Bool_t silent=kFALSE)
Add a collection of arguments to this collection by calling add() for each element in the source coll...
RooCategory represents a fundamental (non-derived) discrete value object.
virtual const char * getLabel() const
Return label string of current state.
virtual Int_t getIndex() const
Return index number of current state.
virtual Bool_t setIndex(Int_t index, Bool_t printError=kTRUE)
Set value by specifying the index code of the desired state.
RooDataSet is a container class to hold unbinned data.
virtual Double_t sumEntries() const
virtual void add(const RooArgSet &row, Double_t weight=1.0, Double_t weightError=0)
Add a data point, with its coordinates specified in the 'data' argset, to the data set.
A one-time forward iterator working on RooLinkedList or RooAbsCollection.
RooAbsArg * next()
Return next element or nullptr if at end.
RooFitResult is a container class to hold the input and output of a PDF fit to a dataset.
A wrapper around TIterator derivatives.
TObject * Next() override
RooMinimizer is a wrapper class around ROOT::Fit:Fitter that provides a seamless interface between th...
RooFitResult * save(const char *name=0, const char *title=0)
Save and return a RooFitResult snaphot of current minimizer status.
Int_t minimize(const char *type, const char *alg=0)
void setEps(Double_t eps)
Change MINUIT epsilon.
Int_t setPrintLevel(Int_t newLevel)
Change the MINUIT internal printing level.
void optimizeConst(Int_t flag)
If flag is true, perform constant term optimization on function being minimized.
void setStrategy(Int_t strat)
Change MINUIT strategy to istrat.
static RooMsgService & instance()
Return reference to singleton instance.
void setGlobalKillBelow(RooFit::MsgLevel level)
RooFit::MsgLevel globalKillBelow() const
void setNoRounding(bool flag=kTRUE)
RooProdPdf is an efficient implementation of a product of PDFs of the form.
const RooArgList & pdfList() const
RooRealVar represents a fundamental (non-derived) real valued object.
void setBins(Int_t nBins, const char *name=0)
Double_t getError() const
virtual void setVal(Double_t value)
Set value of variable to 'value'.
RooSimultaneous facilitates simultaneous fitting of multiple PDFs to subsets of a given dataset.
const RooAbsCategoryLValue & indexCat() const
RooAbsPdf * getPdf(const char *catName) const
Return the p.d.f associated with the given index category name.
Hypothesis Test Calculator based on the asymptotic formulae for the profile likelihood ratio.
static RooAbsData * GenerateAsimovDataSinglePdf(const RooAbsPdf &pdf, const RooArgSet &obs, const RooRealVar &weightVar, RooCategory *channelCat=0)
Compute the asimov data set for an observable of a pdf.
virtual HypoTestResult * GetHypoTest() const
re-implement HypoTest computation using the asymptotic
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
static RooAbsData * MakeAsimovData(RooAbsData &data, const ModelConfig &model, const RooArgSet &poiValues, RooArgSet &globObs, const RooArgSet *genPoiValues=0)
Make Asimov data.
static bool SetObsToExpected(RooAbsPdf &pdf, const RooArgSet &obs)
set observed value to the expected one works for Gaussian, Poisson or LogNormal assumes mean paramete...
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...
static RooAbsData * GenerateCountingAsimovData(RooAbsPdf &pdf, const RooArgSet &obs, const RooRealVar &weightVar, RooCategory *channelCat=0)
Generate counting Asimov data for the case when the pdf cannot be extended.
int fUseQTilde
flag to check if calculator is initialized
AsymptoticCalculator(RooAbsData &data, const ModelConfig &altModel, const ModelConfig &nullModel, bool nominalAsimov=false)
constructor for asymptotic calculator from Data set and ModelConfig
static void FillBins(const RooAbsPdf &pdf, const RooArgList &obs, RooAbsData &data, int &index, double &binVolume, int &ibin)
fill bins by looping recursively on observables
static double EvaluateNLL(RooAbsPdf &pdf, RooAbsData &data, const RooArgSet *condObs, const RooArgSet *globObs, const RooArgSet *poiSet=0)
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_t CLs() const
is simply (not a method, but a quantity)
ModelConfig is a simple class that holds configuration information specifying how a model should be u...
const RooArgSet * GetConditionalObservables() const
get RooArgSet for conditional observables (return NULL if not existing)
const RooArgSet * GetGlobalObservables() const
get RooArgSet for global observables (return NULL if not existing)
const RooArgSet * GetParametersOfInterest() const
get RooArgSet containing the parameter of interest (return NULL if not existing)
const RooArgSet * GetNuisanceParameters() const
get RooArgSet containing the nuisance parameters (return NULL if not existing)
const RooArgSet * GetObservables() const
get RooArgSet for observables (return NULL if not existing)
const RooArgSet * GetSnapshot() const
get RooArgSet for parameters for a particular hypothesis (return NULL if not existing)
RooAbsPdf * GetPdf() const
get model PDF (return NULL if pdf has not been specified or does not exist)
TClass instances represent classes, structs and namespaces in the ROOT type system.
virtual const char * GetName() const
Returns name of object.
Mother of all ROOT objects.
void Start(Bool_t reset=kTRUE)
Start the stopwatch.
void Print(Option_t *option="") const
Print the real and cpu time passed between the start and stop events.
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
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...
void Print(std::ostream &os, const OptionType &opt)
RooCmdArg WeightVar(const char *name, Bool_t reinterpretAsWeight=kFALSE)
RooCmdArg Constrain(const RooArgSet ¶ms)
RooCmdArg Strategy(Int_t code)
RooCmdArg Index(RooCategory &icat)
RooCmdArg GlobalObservables(const RooArgSet &globs)
RooCmdArg Hesse(Bool_t flag=kTRUE)
RooCmdArg CloneData(Bool_t flag)
RooCmdArg PrintLevel(Int_t code)
RooCmdArg Import(const char *state, TH1 &histo)
RooCmdArg ConditionalObservables(const RooArgSet &set)
RooCmdArg Offset(Bool_t flag=kTRUE)
RooCmdArg Minimizer(const char *type, const char *alg=0)
Namespace for the RooStats classes.
bool SetAllConstant(const RooAbsCollection &coll, bool constant=true)
void RemoveConstantParameters(RooArgSet *set)
RooAbsPdf * MakeNuisancePdf(RooAbsPdf &pdf, const RooArgSet &observables, const char *name)
Double_t QuietNaN()
Returns a quiet NaN as defined by IEEE 754