65struct HypoTestOptions {
67 bool noSystematics =
false;
68 double nToysRatio = 4;
71bool generateBinned =
false;
72 bool useProof =
false;
73 bool enableDetailedOutput =
false;
79void StandardHypoTestDemo(
const char* infile =
"",
80 const char* workspaceName =
"combined",
81 const char* modelSBName =
"ModelConfig",
82 const char* modelBName =
"",
83 const char* dataName =
"obsData",
88 const char * nuisPriorName = 0)
91 bool noSystematics = optHT.noSystematics;
92 double nToysRatio = optHT.nToysRatio;
93 double poiValue = optHT.poiValue;
94 int printLevel = optHT.printLevel;
95 bool generateBinned = optHT.generateBinned;
96 bool useProof = optHT.useProof;
97 bool enableDetOutput = optHT.enableDetailedOutput;
131 SimpleLikelihoodRatioTestStat::SetAlwaysReuseNLL(
true);
132 ProfileLikelihoodTestStat::SetAlwaysReuseNLL(
true);
133 RatioOfProfiledLikelihoodsTestStat::SetAlwaysReuseNLL(
true);
147 const char* filename =
"";
148 if (!strcmp(infile,
"")) {
149 filename =
"results/example_combined_GaussExample_model.root";
154 cout <<
"HistFactory file cannot be generated on Windows - exit" << endl;
158 cout <<
"will run standard hist2workspace example"<<endl;
159 gROOT->ProcessLine(
".! prepareHistFactory .");
160 gROOT->ProcessLine(
".! hist2workspace config/example.xml");
161 cout <<
"\n\n---------------------"<<endl;
162 cout <<
"Done creating example input"<<endl;
163 cout <<
"---------------------\n\n"<<endl;
175 cout <<
"StandardRooStatsDemoMacro: Input file " << filename <<
" is not found" << endl;
187 cout <<
"workspace not found" << endl;
200 if(!
data || !sbModel){
202 cout <<
"data or ModelConfig was not found" <<endl;
213 if (nuisPar && nuisPar->
getSize() > 0) {
214 std::cout <<
"StandardHypoTestInvDemo" <<
" - Switch off all systematics by setting them constant to their initial values" << std::endl;
226 Info(
"StandardHypoTestInvDemo",
"The background model %s does not exist",modelBName);
227 Info(
"StandardHypoTestInvDemo",
"Copy it from ModelConfig %s and set POI to zero",modelSBName);
229 bModel->
SetName(TString(modelSBName)+TString(
"B_only"));
232 double oldval = var->
getVal();
240 Info(
"StandardHypoTestDemo",
"Model %s has no snapshot - make one using model poi",modelSBName);
243 double oldval = var->
getVal();
244 if (poiValue > 0) var->
setVal(poiValue);
247 if (poiValue > 0) var->
setVal(oldval);
276 if (enableDetOutput) {
287 AsymptoticCalculator::SetPrintLevel(printLevel);
303 if (calcType == 2 ) {
305 if (testStatType != 2 && testStatType != 3)
306 Warning(
"StandardHypoTestDemo",
"Only the PL test statistic can be used with AsymptoticCalculator - use by default a two-sided PL");
315 if (nuisPriorName) nuisPdf = w->
pdf(nuisPriorName);
318 Info(
"StandardHypoTestDemo",
"No nuisance pdf given for the HybridCalculator - try to deduce pdf from the model");
327 Info(
"StandardHypoTestDemo",
"No nuisance pdf given - try to use %s that is defined as a prior pdf in the B model",nuisPdf->
GetName());
330 Error(
"StandardHypoTestDemo",
"Cannot run Hybrid calculator because no prior on the nuisance parameter is specified or can be derived");
335 Info(
"StandardHypoTestDemo",
"Using as nuisance Pdf ... " );
341 Warning(
"StandardHypoTestDemo",
"Prior nuisance does not depend on nuisance parameters. They will be smeared in their full range");
354 if (sampler && (calcType == 0 || calcType == 1) ) {
358 if (useNC)
Warning(
"StandardHypoTestDemo",
"Pdf is extended: but number counting flag is set: ignore it ");
363 int nEvents =
data->numEntries();
364 Info(
"StandardHypoTestDemo",
"Pdf is not extended: number of events to generate taken from observed data set is %d",nEvents);
368 Info(
"StandardHypoTestDemo",
"using a number counting pdf");
373 if (
data->isWeighted() && !generateBinned) {
374 Info(
"StandardHypoTestDemo",
"Data set is weighted, nentries = %d and sum of weights = %8.1f but toy generation is unbinned - it would be faster to set generateBinned to true\n",
data->numEntries(),
data->sumEntries());
389 if (testStatType == 2 || testStatType == 3) sampler->
SetTestStatistic(profll);
409 std::cout <<
"Asymptotic results " << std::endl;
423 for (
int i = 0; i < 5; ++i) {
430 for (
int i = 0; i < 5; ++i) {
431 htExp.SetTestStatisticData(
q[i] );
433 std::cout <<
" Expected p -value and significance at " << sig <<
" sigma = "
434 << htExp.NullPValue() <<
" significance " << htExp.Significance() <<
" sigma " << std::endl;
440 for (
int i = 0; i < 5; ++i) {
444 std::cout <<
" Expected p -value and significance at " << sig <<
" sigma = "
452 bool writeResult = (calcType != 2);
454 if (enableDetOutput) {
456 Info(
"StandardHypoTestDemo",
"Detailed output will be written in output result file");
460 if (htr != NULL && writeResult) {
463 const char * calcTypeName = (calcType == 0) ?
"Freq" : (calcType == 1) ?
"Hybr" :
"Asym";
464 TString resultFileName =
TString::Format(
"%s_HypoTest_ts%d_",calcTypeName,testStatType);
467 TString
name = infile;
468 name.Replace(0,
name.Last(
'/')+1,
"");
469 resultFileName +=
name;
471 TFile * fileOut =
new TFile(resultFileName,
"RECREATE");
473 Info(
"StandardHypoTestDemo",
"HypoTestResult has been written in the file %s",resultFileName.Data());
void Info(const char *location, const char *msgfmt,...)
void Error(const char *location, const char *msgfmt,...)
void Warning(const char *location, const char *msgfmt,...)
R__EXTERN TSystem * gSystem
RooArgSet * getObservables(const RooArgSet &set, Bool_t valueOnly=kTRUE) const
virtual void Print(Option_t *options=0) const
Print TNamed name and title.
RooAbsArg * first() const
RooAbsData is the common abstract base class for binned and unbinned datasets.
RooAbsPdf is the abstract interface for all probability density functions The class provides hybrid a...
Bool_t canBeExtended() const
Double_t getVal(const RooArgSet *set=0) const
Evaluate object. Returns either cached value or triggers a recalculation.
RooArgSet is a container object that can hold multiple RooAbsArg objects.
RooRealVar represents a fundamental (non-derived) real valued object.
virtual void setVal(Double_t value)
Set value of variable to 'value'.
Hypothesis Test Calculator based on the asymptotic formulae for the profile likelihood ratio.
Does a frequentist hypothesis test.
Same purpose as HybridCalculatorOriginal, but different implementation.
Common base class for the Hypothesis Test Calculators.
TestStatSampler * GetTestStatSampler(void) const
virtual HypoTestResult * GetHypoTest() const
inherited methods from HypoTestCalculator interface
This class provides the plots for the result of a study performed with any of the HypoTestCalculatorG...
HypoTestResult is a base class for results from hypothesis tests.
void SetBackgroundAsAlt(Bool_t l=kTRUE)
void SetPValueIsRightTail(Bool_t pr)
virtual Double_t AlternatePValue() const
Return p-value for alternate hypothesis.
virtual Double_t NullPValue() const
Return p-value for null hypothesis.
void Print(const Option_t *="") const
Print out some information about the results Note: use Alt/Null labels for the hypotheses here as the...
SamplingDistribution * GetAltDistribution(void) const
ModelConfig is a simple class that holds configuration information specifying how a model should be u...
virtual void SetSnapshot(const RooArgSet &set)
set parameter values for a particular hypothesis if using a common PDF by saving a snapshot in the wo...
virtual ModelConfig * Clone(const char *name="") const override
clone
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)
RooAbsPdf * GetPriorPdf() const
get parameters prior pdf (return NULL if not existing)
ProfileLikelihoodTestStat is an implementation of the TestStatistic interface that calculates the pro...
void SetPrintLevel(Int_t printlevel)
virtual void EnableDetailedOutput(bool e=true, bool withErrorsAndPulls=false)
void SetOneSidedDiscovery(Bool_t flag=true)
Holds configuration options for proof and proof-lite.
TestStatistic that returns the ratio of profiled likelihoods.
void SetSubtractMLE(bool subtract)
virtual void EnableDetailedOutput(bool e=true)
void SetLogYaxis(Bool_t ly)
changes plot to log scale on y axis
void Draw(Option_t *options=0)
Draw this plot and all of the elements it contains.
This class simply holds a sampling distribution of some test statistic.
const std::vector< Double_t > & GetSamplingDistribution() const
Get test statistics values.
TestStatistic class that returns -log(L[null] / L[alt]) where L is the likelihood.
virtual void EnableDetailedOutput(bool e=true)
void SetNullParameters(const RooArgSet &nullParameters)
void SetAltParameters(const RooArgSet &altParameters)
ToyMCSampler is an implementation of the TestStatSampler interface.
void SetProofConfig(ProofConfig *pc=NULL)
virtual void SetTestStatistic(TestStatistic *testStatistic, unsigned int i)
void SetGenerateBinned(bool binned=true)
virtual void SetNEventsPerToy(const Int_t nevents)
The RooWorkspace is a persistable container for RooFit projects.
RooAbsData * data(const char *name) const
Retrieve dataset (binned or unbinned) with given name. A null pointer is returned if not found.
void Print(Option_t *opts=0) const
Print contents of the workspace.
TObject * obj(const char *name) const
Return any type of object (RooAbsArg, RooAbsData or generic object) with given name)
RooAbsPdf * pdf(const char *name) const
Retrieve p.d.f (RooAbsPdf) with given name. A null pointer is returned if not found.
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseGeneralPurpose, Int_t netopt=0)
Create / open a file.
virtual void SetName(const char *name)
Set the name of the TNamed.
virtual const char * GetName() const
Returns name of object.
virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0)
Write this object to the current directory.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
virtual Bool_t AccessPathName(const char *path, EAccessMode mode=kFileExists)
Returns FALSE if one can access a file using the specified access mode.
double normal_cdf(double x, double sigma=1, double x0=0)
Cumulative distribution function of the normal (Gaussian) distribution (lower tail).
double normal_quantile_c(double z, double sigma)
Inverse ( ) of the cumulative distribution function of the upper tail of the normal (Gaussian) distri...
@(#)root/roostats:$Id$ Author: George Lewis, Kyle Cranmer
bool SetAllConstant(const RooAbsCollection &coll, bool constant=true)
RooAbsPdf * MakeNuisancePdf(RooAbsPdf &pdf, const RooArgSet &observables, const char *name)
static constexpr double pc
void Quantiles(Int_t n, Int_t nprob, Double_t *x, Double_t *quantiles, Double_t *prob, Bool_t isSorted=kTRUE, Int_t *index=0, Int_t type=7)
Computes sample quantiles, corresponding to the given probabilities.