63 struct HypoTestOptions {
65 bool noSystematics =
false;
66 double nToysRatio = 4;
69 bool generateBinned =
false;
70 bool useProof =
false;
71 bool enableDetailedOutput =
false;
75 HypoTestOptions optHT;
77 void StandardHypoTestDemo(
const char* infile =
"",
78 const char* workspaceName =
"combined",
79 const char* modelSBName =
"ModelConfig",
80 const char* modelBName =
"",
81 const char* dataName =
"obsData",
86 const char * nuisPriorName = 0)
89 bool noSystematics = optHT.noSystematics;
90 double nToysRatio = optHT.nToysRatio;
91 double poiValue = optHT.poiValue;
92 int printLevel = optHT.printLevel;
93 bool generateBinned = optHT.generateBinned;
94 bool useProof = optHT.useProof;
95 bool enableDetOutput = optHT.enableDetailedOutput;
129 SimpleLikelihoodRatioTestStat::SetAlwaysReuseNLL(
true);
130 ProfileLikelihoodTestStat::SetAlwaysReuseNLL(
true);
131 RatioOfProfiledLikelihoodsTestStat::SetAlwaysReuseNLL(
true);
145 const char* filename =
"";
146 if (!strcmp(infile,
"")) {
147 filename =
"results/example_combined_GaussExample_model.root";
152 cout <<
"HistFactory file cannot be generated on Windows - exit" << endl;
156 cout <<
"will run standard hist2workspace example"<<endl;
157 gROOT->ProcessLine(
".! prepareHistFactory .");
158 gROOT->ProcessLine(
".! hist2workspace config/example.xml");
159 cout <<
"\n\n---------------------"<<endl;
160 cout <<
"Done creating example input"<<endl;
161 cout <<
"---------------------\n\n"<<endl;
173 cout <<
"StandardRooStatsDemoMacro: Input file " << filename <<
" is not found" << endl;
185 cout <<
"workspace not found" << endl;
198 if(!data || !sbModel){
200 cout <<
"data or ModelConfig was not found" <<endl;
211 if (nuisPar && nuisPar->
getSize() > 0) {
212 std::cout <<
"StandardHypoTestInvDemo" <<
" - Switch off all systematics by setting them constant to their initial values" << std::endl;
224 Info(
"StandardHypoTestInvDemo",
"The background model %s does not exist",modelBName);
225 Info(
"StandardHypoTestInvDemo",
"Copy it from ModelConfig %s and set POI to zero",modelSBName);
227 bModel->
SetName(TString(modelSBName)+TString(
"B_only"));
230 double oldval = var->
getVal();
238 Info(
"StandardHypoTestDemo",
"Model %s has no snapshot - make one using model poi",modelSBName);
241 double oldval = var->
getVal();
242 if (poiValue > 0) var->
setVal(poiValue);
245 if (poiValue > 0) var->
setVal(oldval);
274 if (enableDetOutput) {
277 ropl->EnableDetailedOutput();
285 AsymptoticCalculator::SetPrintLevel(printLevel);
290 else if (calcType == 1) hypoCalc=
new HybridCalculator(*data, *sbModel, *bModel);
301 if (calcType == 2 ) {
303 if (testStatType != 2 && testStatType != 3)
304 Warning(
"StandardHypoTestDemo",
"Only the PL test statistic can be used with AsymptoticCalculator - use by default a two-sided PL");
313 if (nuisPriorName) nuisPdf = w->
pdf(nuisPriorName);
316 Info(
"StandardHypoTestDemo",
"No nuisance pdf given for the HybridCalculator - try to deduce pdf from the model");
325 Info(
"StandardHypoTestDemo",
"No nuisance pdf given - try to use %s that is defined as a prior pdf in the B model",nuisPdf->
GetName());
328 Error(
"StandardHypoTestDemo",
"Cannot run Hybrid calculator because no prior on the nuisance parameter is specified or can be derived");
333 Info(
"StandardHypoTestDemo",
"Using as nuisance Pdf ... " );
339 Warning(
"StandardHypoTestDemo",
"Prior nuisance does not depend on nuisance parameters. They will be smeared in their full range");
352 if (sampler && (calcType == 0 || calcType == 1) ) {
356 if (useNC)
Warning(
"StandardHypoTestDemo",
"Pdf is extended: but number counting flag is set: ignore it ");
362 Info(
"StandardHypoTestDemo",
"Pdf is not extended: number of events to generate taken from observed data set is %d",nEvents);
366 Info(
"StandardHypoTestDemo",
"using a number counting pdf");
372 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());
387 if (testStatType == 2 || testStatType == 3) sampler->
SetTestStatistic(profll);
407 std::cout <<
"Asymptotic results " << std::endl;
421 for (
int i = 0; i < 5; ++i) {
428 for (
int i = 0; i < 5; ++i) {
429 htExp.SetTestStatisticData( q[i] );
431 std::cout <<
" Expected p -value and significance at " << sig <<
" sigma = " 432 << htExp.NullPValue() <<
" significance " << htExp.Significance() <<
" sigma " << std::endl;
438 for (
int i = 0; i < 5; ++i) {
442 std::cout <<
" Expected p -value and significance at " << sig <<
" sigma = " 450 bool writeResult = (calcType != 2);
452 if (enableDetOutput) {
454 Info(
"StandardHypoTestDemo",
"Detailed output will be written in output result file");
458 if (htr !=
NULL && writeResult) {
461 const char * calcTypeName = (calcType == 0) ?
"Freq" : (calcType == 1) ?
"Hybr" :
"Asym";
462 TString resultFileName =
TString::Format(
"%s_HypoTest_ts%d_",calcTypeName,testStatType);
465 TString
name = infile;
466 name.Replace(0, name.Last(
'/')+1,
"");
467 resultFileName +=
name;
469 TFile * fileOut =
new TFile(resultFileName,
"RECREATE");
471 Info(
"StandardHypoTestDemo",
"HypoTestResult has been written in the file %s",resultFileName.Data());
virtual Double_t sumEntries() const =0
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.
virtual Bool_t AccessPathName(const char *path, EAccessMode mode=kFileExists)
Returns FALSE if one can access a file using the specified access mode.
void SetBackgroundAsAlt(Bool_t l=kTRUE)
Holds configuration options for proof and proof-lite.
virtual void EnableDetailedOutput(bool e=true)
const std::vector< Double_t > & GetSamplingDistribution() const
Get test statistics values.
void SetPrintLevel(Int_t printlevel)
ModelConfig is a simple class that holds configuration information specifying how a model should be u...
const RooArgSet * GetObservables() const
get RooArgSet for observables (return NULL if not existing)
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...
RooArgSet * getObservables(const RooArgSet &set, Bool_t valueOnly=kTRUE) const
RooAbsPdf * MakeNuisancePdf(RooAbsPdf &pdf, const RooArgSet &observables, const char *name)
void Print(const Option_t *="") const
Print out some information about the results Note: use Alt/Null labels for the hypotheses here as the...
double normal_quantile_c(double z, double sigma)
Inverse ( ) of the cumulative distribution function of the upper tail of the normal (Gaussian) distri...
Double_t getVal(const RooArgSet *set=0) const
virtual void SetName(const char *name)
Set the name of the TNamed.
HypoTestResult is a base class for results from hypothesis tests.
virtual void SetNEventsPerToy(const Int_t nevents)
virtual void EnableDetailedOutput(bool e=true, bool withErrorsAndPulls=false)
This class provides the plots for the result of a study performed with any of the HypoTestCalculatorG...
SamplingDistribution * GetAltDistribution(void) const
void SetLogYaxis(Bool_t ly)
changes plot to log scale on y axis
virtual ModelConfig * Clone(const char *name="") const
clone
void SetAltParameters(const RooArgSet &altParameters)
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=1, Int_t netopt=0)
Create / open a file.
virtual void SetTestStatistic(TestStatistic *testStatistic, unsigned int i)
Common base class for the Hypothesis Test Calculators.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString...
void SetNullParameters(const RooArgSet &nullParameters)
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 Parameters: x -the data sample n ...
double normal_cdf(double x, double sigma=1, double x0=0)
Cumulative distribution function of the normal (Gaussian) distribution (lower tail).
virtual void Print(Option_t *options=0) const
Print TNamed name and title.
void Draw(Option_t *options=0)
Draw this plot and all of the elements it contains.
void Info(const char *location, const char *msgfmt,...)
void Error(const char *location, const char *msgfmt,...)
RooRealVar represents a fundamental (non-derived) real valued object.
RooAbsData * data(const char *name) const
Retrieve dataset (binned or unbinned) with given name. A null pointer is returned if not found...
RooAbsPdf * GetPriorPdf() const
get parameters prior pdf (return NULL if not existing)
virtual void setVal(Double_t value)
Set value of variable to 'value'.
virtual HypoTestResult * GetHypoTest() const
inherited methods from HypoTestCalculator interface
R__EXTERN TSystem * gSystem
RooAbsArg * first() const
virtual Double_t NullPValue() const
Return p-value for null hypothesis.
void SetProofConfig(ProofConfig *pc=NULL)
void SetSubtractMLE(bool subtract)
RooAbsData is the common abstract base class for binned and unbinned datasets.
void SetOneSidedDiscovery(Bool_t flag=true)
ProfileLikelihoodTestStat is an implementation of the TestStatistic interface that calculates the pro...
ToyMCSampler is an implementation of the TestStatSampler interface.
void Warning(const char *location, const char *msgfmt,...)
This class simply holds a sampling distribution of some test statistic.
TestStatistic that returns the ratio of profiled likelihoods.
Bool_t canBeExtended() const
Same purpose as HybridCalculatorOriginal, but different implementation.
TObject * obj(const char *name) const
Return any type of object (RooAbsArg, RooAbsData or generic object) with given name) ...
virtual Double_t AlternatePValue() const
Return p-value for alternate hypothesis.
void SetPValueIsRightTail(Bool_t pr)
Namespace for the RooStats classes.
RooAbsPdf * GetPdf() const
get model PDF (return NULL if pdf has not been specified or does not exist)
const RooArgSet * GetParametersOfInterest() const
get RooArgSet containing the parameter of interest (return NULL if not existing)
RooAbsPdf * pdf(const char *name) const
Retrieve p.d.f (RooAbsPdf) with given name. A null pointer is returned if not found.
bool SetAllConstant(const RooAbsCollection &coll, bool constant=true)
TestStatistic class that returns -log(L[null] / L[alt]) where L is the likelihood.
virtual Bool_t isWeighted() const
RooAbsPdf is the abstract interface for all probability density functions The class provides hybrid a...
const RooArgSet * GetNuisanceParameters() const
get RooArgSet containing the nuisance parameters (return NULL if not existing)
Does a frequentist hypothesis test.
void SetGenerateBinned(bool binned=true)
const RooArgSet * GetSnapshot() const
get RooArgSet for parameters for a particular hypothesis (return NULL if not existing) ...
void Print(Option_t *opts=0) const
Print contents of the workspace.
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...
Hypothesis Test Calculator based on the asymptotic formulae for the profile likelihood ratio...
TestStatSampler * GetTestStatSampler(void) const
The RooWorkspace is a persistable container for RooFit projects.
virtual Int_t numEntries() const