#ifndef ROOSTATS_HybridCalculator
#define ROOSTATS_HybridCalculator
#ifndef ROOSTATS_HybridCalculatorGeneric
#include "RooStats/HybridCalculatorGeneric.h"
#endif
#ifndef ROOSTATS_ToyMCSampler
#include "RooStats/ToyMCSampler.h"
#endif
namespace RooStats {
class HybridCalculator: public HybridCalculatorGeneric {
public:
HybridCalculator(
const RooAbsData &data,
const ModelConfig &altModel,
const ModelConfig &nullModel,
TestStatSampler* sampler=0
) :
HybridCalculatorGeneric(data, altModel, nullModel, sampler),
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;
}
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 PreNullHook(double obsTestStat) const;
int PreAltHook(double obsTestStat) const;
private:
RooAbsPdf *fNullImportanceDensity;
const RooArgSet *fNullImportanceSnapshot;
RooAbsPdf *fAltImportanceDensity;
const RooArgSet *fAltImportanceSnapshot;
int fNToysNull;
int fNToysAlt;
int fNToysNullTail;
int fNToysAltTail;
protected:
ClassDef(HybridCalculator,1)
};
}
#endif