Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-16 10:29:44

0001 // @(#)root/roostats:$Id$
0002 // Author: Sven Kreiss, Kyle Cranmer   Nov 2010
0003 /*************************************************************************
0004  * Copyright (C) 1995-2008, Rene Brun and Fons Rademakers.               *
0005  * All rights reserved.                                                  *
0006  *                                                                       *
0007  * For the licensing terms see $ROOTSYS/LICENSE.                         *
0008  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
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       /// Override the distribution used for marginalizing nuisance parameters that is inferred from ModelConfig
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       /// set number of toys
0074       void SetToys(int toysNull, int toysAlt) { fNToysNull = toysNull; fNToysAlt = toysAlt; }
0075 
0076       /// set least number of toys in tails
0077       void SetNToysInTails(int toysNull, int toysAlt) { fNToysNullTail = toysNull; fNToysAltTail = toysAlt; }
0078 
0079    protected:
0080       /// check whether all input is consistent
0081       int CheckHook(void) const override;
0082 
0083       /// configure TestStatSampler for the Null run
0084       int PreNullHook(RooArgSet* /*parameterPoint*/, double obsTestStat) const override;
0085 
0086       /// configure TestStatSampler for the Alt run
0087       int PreAltHook(RooArgSet* /*parameterPoint*/, double obsTestStat) const override;
0088 
0089    protected:
0090       RooAbsPdf *fPriorNuisanceNull;
0091       RooAbsPdf *fPriorNuisanceAlt;
0092 
0093       // these flags tell us if the nuisance pdfs came from an external resource (via ForcePriorNuisance)
0094       // or were created internally and should be deleted
0095       bool fPriorNuisanceNullExternal = false;
0096       bool fPriorNuisanceAltExternal = false;
0097 
0098       // different number of toys for null and alt
0099       int fNToysNull;
0100       int fNToysAlt;
0101 
0102       // adaptive sampling
0103       int fNToysNullTail;
0104       int fNToysAltTail;
0105 
0106    protected:
0107       ClassDefOverride(HybridCalculator,0)
0108    };
0109 }
0110 
0111 #endif