File indexing completed on 2025-12-16 10:29:44
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #ifndef ROOSTATS_HybridCalculator
0012 #define ROOSTATS_HybridCalculator
0013
0014 #include "RooStats/HypoTestCalculatorGeneric.h"
0015
0016 #include "RooStats/ToyMCSampler.h"
0017
0018
0019
0020 namespace RooStats {
0021
0022 class HybridCalculator : public HypoTestCalculatorGeneric {
0023
0024 public:
0025 HybridCalculator(
0026 const RooAbsData &data,
0027 const ModelConfig &altModel,
0028 const ModelConfig &nullModel,
0029 TestStatSampler* sampler=nullptr
0030 ) :
0031 HypoTestCalculatorGeneric(data, altModel, nullModel, sampler),
0032 fPriorNuisanceNull(MakeNuisancePdf(nullModel, "PriorNuisanceNull")),
0033 fPriorNuisanceAlt(MakeNuisancePdf(altModel, "PriorNuisanceAlt")),
0034 fNToysNull(-1),
0035 fNToysAlt(-1),
0036 fNToysNullTail(0),
0037 fNToysAltTail(0)
0038 {
0039 }
0040
0041 ~HybridCalculator() override {
0042 if(!fPriorNuisanceNullExternal) delete fPriorNuisanceNull;
0043 if(!fPriorNuisanceAltExternal) delete fPriorNuisanceAlt;
0044 }
0045
0046
0047
0048 virtual void ForcePriorNuisanceNull(RooAbsPdf& priorNuisance) {
0049 if(!fPriorNuisanceNullExternal) delete fPriorNuisanceNull;
0050 fPriorNuisanceNull = &priorNuisance;
0051 fPriorNuisanceNullExternal = true;
0052 }
0053 virtual void ForcePriorNuisanceAlt(RooAbsPdf& priorNuisance) {
0054 if(!fPriorNuisanceAltExternal) delete fPriorNuisanceAlt;
0055 fPriorNuisanceAlt = &priorNuisance;
0056 fPriorNuisanceAltExternal = true;
0057 }
0058
0059 void SetNullModel(const ModelConfig &nullModel) override {
0060 fNullModel = &nullModel;
0061 if(!fPriorNuisanceNullExternal) delete fPriorNuisanceNull;
0062 fPriorNuisanceNull = MakeNuisancePdf(nullModel, "PriorNuisanceNull");
0063 fPriorNuisanceAltExternal = false;
0064 }
0065
0066 void SetAlternateModel(const ModelConfig &altModel) override {
0067 fAltModel = &altModel;
0068 if(!fPriorNuisanceAltExternal) delete fPriorNuisanceAlt;
0069 fPriorNuisanceAlt = MakeNuisancePdf(altModel, "PriorNuisanceAlt");
0070 fPriorNuisanceAltExternal = false;
0071 }
0072
0073
0074 void SetToys(int toysNull, int toysAlt) { fNToysNull = toysNull; fNToysAlt = toysAlt; }
0075
0076
0077 void SetNToysInTails(int toysNull, int toysAlt) { fNToysNullTail = toysNull; fNToysAltTail = toysAlt; }
0078
0079 protected:
0080
0081 int CheckHook(void) const override;
0082
0083
0084 int PreNullHook(RooArgSet* , double obsTestStat) const override;
0085
0086
0087 int PreAltHook(RooArgSet* , double obsTestStat) const override;
0088
0089 protected:
0090 RooAbsPdf *fPriorNuisanceNull;
0091 RooAbsPdf *fPriorNuisanceAlt;
0092
0093
0094
0095 bool fPriorNuisanceNullExternal = false;
0096 bool fPriorNuisanceAltExternal = false;
0097
0098
0099 int fNToysNull;
0100 int fNToysAlt;
0101
0102
0103 int fNToysNullTail;
0104 int fNToysAltTail;
0105
0106 protected:
0107 ClassDefOverride(HybridCalculator,0)
0108 };
0109 }
0110
0111 #endif