#ifndef ROOSTATS_HybridCalculator
#define ROOSTATS_HybridCalculator
#ifndef ROOSTATS_HypoTestCalculatorGeneric
#include "RooStats/HypoTestCalculatorGeneric.h"
#endif
#ifndef ROOSTATS_ToyMCSampler
#include "RooStats/ToyMCSampler.h"
#endif
namespace RooStats {
class HybridCalculator : public HypoTestCalculatorGeneric {
public:
HybridCalculator(
const RooAbsData &data,
const ModelConfig &altModel,
const ModelConfig &nullModel,
TestStatSampler* sampler=0
) :
HypoTestCalculatorGeneric(data, altModel, nullModel, sampler),
fPriorNuisanceNull(MakeNuisancePdf(nullModel, "PriorNuisanceNull")),
fPriorNuisanceAlt(MakeNuisancePdf(altModel, "PriorNuisanceAlt")),
fPriorNuisanceNullExternal(false),
fPriorNuisanceAltExternal(false),
fNToysNull(-1),
fNToysAlt(-1),
fNToysNullTail(0),
fNToysAltTail(0)
{
}
~HybridCalculator() {
if(fPriorNuisanceNullExternal == false) delete fPriorNuisanceNull;
if(fPriorNuisanceAltExternal == false) delete fPriorNuisanceAlt;
}
virtual void ForcePriorNuisanceNull(RooAbsPdf& priorNuisance) {
if(fPriorNuisanceNullExternal == false) delete fPriorNuisanceNull;
fPriorNuisanceNull = &priorNuisance; fPriorNuisanceNullExternal = true;
}
virtual void ForcePriorNuisanceAlt(RooAbsPdf& priorNuisance) {
if(fPriorNuisanceAltExternal == false) delete fPriorNuisanceAlt;
fPriorNuisanceAlt = &priorNuisance; fPriorNuisanceAltExternal = true;
}
virtual void SetNullModel(const ModelConfig &nullModel) {
fNullModel = &nullModel;
if(fPriorNuisanceNullExternal == false) {
delete fPriorNuisanceNull;
fPriorNuisanceNull = MakeNuisancePdf(nullModel, "PriorNuisanceNull");
}
}
virtual void SetAlternateModel(const ModelConfig &altModel) {
fAltModel = &altModel;
if(fPriorNuisanceAltExternal == false) {
delete fPriorNuisanceAlt;
fPriorNuisanceAlt = MakeNuisancePdf(altModel, "PriorNuisanceAlt");
}
}
void SetToys(int toysNull, int toysAlt) { fNToysNull = toysNull; fNToysAlt = toysAlt; }
void SetNToysInTails(int toysNull, int toysAlt) { fNToysNullTail = toysNull; fNToysAltTail = toysAlt; }
protected:
int CheckHook(void) const;
int PreNullHook(RooArgSet* , double obsTestStat) const;
int PreAltHook(RooArgSet* , double obsTestStat) const;
protected:
RooAbsPdf *fPriorNuisanceNull;
RooAbsPdf *fPriorNuisanceAlt;
Bool_t fPriorNuisanceNullExternal;
Bool_t fPriorNuisanceAltExternal;
int fNToysNull;
int fNToysAlt;
int fNToysNullTail;
int fNToysAltTail;
protected:
ClassDef(HybridCalculator,2)
};
}
#endif