11 #ifndef ROOSTATS_AsymptoticCalculator
12 #define ROOSTATS_AsymptoticCalculator
27 class AsymptoticCalculator :
public HypoTestCalculatorGeneric {
32 const ModelConfig &altModel,
33 const ModelConfig &nullModel,
34 bool nominalAsimov =
false
40 ~AsymptoticCalculator() {
44 bool Initialize()
const;
47 virtual HypoTestResult *GetHypoTest()
const;
50 static RooAbsData * MakeAsimovData( RooAbsData & data,
const ModelConfig & model,
const RooArgSet & poiValues, RooArgSet & globObs,
const RooArgSet * genPoiValues = 0);
54 static RooAbsData * MakeAsimovData(
const ModelConfig & model,
const RooArgSet & allParamValues, RooArgSet & globObs);
58 static RooAbsData * GenerateAsimovData(
const RooAbsPdf & pdf,
const RooArgSet & observables );
61 static double GetExpectedPValues(
double pnull,
double palt,
double nsigma,
bool usecls,
bool oneSided =
true );
64 void SetOneSided(
bool on) { fOneSided = on; }
68 void SetTwoSided() { fOneSided =
false; fOneSidedDiscovery =
false;}
71 void SetOneSidedDiscovery(
bool on) { fOneSidedDiscovery = on; }
74 virtual void SetNullModel(
const ModelConfig &nullModel) {
75 HypoTestCalculatorGeneric::SetNullModel(nullModel);
76 fIsInitialized =
false;
78 virtual void SetAlternateModel(
const ModelConfig &altModel) {
79 HypoTestCalculatorGeneric::SetAlternateModel(altModel);
80 fIsInitialized =
false;
82 virtual void SetData(RooAbsData &data) {
83 HypoTestCalculatorGeneric::SetData(data);
84 fIsInitialized =
false;
88 bool IsTwoSided()
const {
return (!fOneSided && !fOneSidedDiscovery); }
89 bool IsOneSidedDiscovery()
const {
return fOneSidedDiscovery; }
93 void SetQTilde(
bool on) { fUseQTilde = on; }
96 const RooArgSet & GetBestFitPoi()
const {
return fBestFitPoi; }
98 const RooRealVar * GetMuHat()
const {
return dynamic_cast<RooRealVar*
>(fBestFitPoi.first()); }
100 const RooArgSet & GetBestFitParams()
const {
return fBestFitPoi; }
102 static void SetPrintLevel(
int level);
112 static RooAbsData * GenerateAsimovDataSinglePdf(
const RooAbsPdf & pdf,
const RooArgSet & obs,
const RooRealVar & weightVar,
113 RooCategory * channelCat = 0);
115 static RooAbsData * GenerateCountingAsimovData(RooAbsPdf & pdf,
const RooArgSet & obs,
const RooRealVar & weightVar,
116 RooCategory * channelCat = 0);
119 static void FillBins(
const RooAbsPdf & pdf,
const RooArgList &obs, RooAbsData & data,
int &index,
double
120 &binVolume,
int &ibin);
122 static double EvaluateNLL(RooAbsPdf & pdf, RooAbsData& data,
const RooArgSet * condObs,
const RooArgSet * globObs,
const RooArgSet *poiSet = 0 );
124 static bool SetObsToExpected(RooAbsPdf &pdf,
const RooArgSet &obs);
125 static bool SetObsToExpected(RooProdPdf &prod,
const RooArgSet &obs);
128 ClassDef(AsymptoticCalculator,2)
133 mutable
bool fOneSidedDiscovery;
135 mutable
bool fIsInitialized;
136 mutable
int fUseQTilde;
137 static
int fgPrintLevel;
138 mutable
double fNLLObs;
139 mutable
double fNLLAsimov;
141 mutable RooAbsData * fAsimovData;
142 mutable RooArgSet fAsimovGlobObs;
143 mutable RooArgSet fBestFitPoi;
144 mutable RooArgSet fBestFitParams;