#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(0),
fPriorNuisanceAlt(0),
fNullImportanceDensity(NULL),
fNullImportanceSnapshot(NULL),
fAltImportanceDensity(NULL),
fAltImportanceSnapshot(NULL),
fNToysNull(0),
fNToysAlt(0),
fNToysNullTail(0),
fNToysAltTail(0)
{
}
~HybridCalculator() {
if(fNullImportanceSnapshot) delete fNullImportanceSnapshot;
if(fAltImportanceSnapshot) delete fAltImportanceSnapshot;
}
virtual void ForcePriorNuisanceNull(RooAbsPdf& priorNuisance) { fPriorNuisanceNull = &priorNuisance; }
virtual void ForcePriorNuisanceAlt(RooAbsPdf& priorNuisance) { fPriorNuisanceAlt = &priorNuisance; }
void SetNullImportanceDensity(RooAbsPdf *p, const RooArgSet *s = NULL) {
fNullImportanceDensity = p;
if(s) fNullImportanceSnapshot = (RooArgSet*)s->snapshot();
else fNullImportanceSnapshot = NULL;
}
void SetAltImportanceDensity(RooAbsPdf *p, const RooArgSet *s = NULL) {
fAltImportanceDensity = p;
if(s) fAltImportanceSnapshot = (RooArgSet*)s->snapshot();
else fAltImportanceSnapshot = NULL;
}
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;
RooAbsPdf *fNullImportanceDensity;
const RooArgSet *fNullImportanceSnapshot;
RooAbsPdf *fAltImportanceDensity;
const RooArgSet *fAltImportanceSnapshot;
int fNToysNull;
int fNToysAlt;
int fNToysNullTail;
int fNToysAltTail;
protected:
ClassDef(HybridCalculator,1)
};
}
#endif