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_AsymptoticCalculator
0012 #define ROOSTATS_AsymptoticCalculator
0013 
0014 #include "RooStats/HypoTestCalculatorGeneric.h"
0015 #include "RooArgSet.h"
0016 #include "Rtypes.h"
0017 
0018 class RooArgList;
0019 class RooCategory;
0020 class RooRealVar;
0021 class RooPoisson;
0022 class RooProdPdf;
0023 
0024 
0025 namespace RooStats {
0026 
0027    class AsymptoticCalculator : public HypoTestCalculatorGeneric {
0028 
0029    public:
0030       AsymptoticCalculator(
0031          RooAbsData &data,  // need to pass non-const since RooAbsPdf::fitTo takes a non-const data set
0032          const ModelConfig &altModel,
0033          const ModelConfig &nullModel,
0034          bool nominalAsimov = false
0035          );
0036 
0037       /// initialize the calculator by performing a global fit and make the Asimov data set
0038       bool Initialize() const;
0039 
0040       /// re-implement HypoTest computation using the asymptotic
0041       HypoTestResult *GetHypoTest() const override;
0042 
0043       /// Make Asimov data.
0044       static RooAbsData * MakeAsimovData( RooAbsData & data, const ModelConfig & model,  const RooArgSet & poiValues, RooArgSet & globObs, const RooArgSet * genPoiValues = nullptr);
0045 
0046 
0047       /// Make a nominal Asimov data set from a model.
0048       static RooAbsData * MakeAsimovData( const ModelConfig & model,  const RooArgSet & allParamValues, RooArgSet & globObs);
0049 
0050 
0051 
0052       static RooAbsData * GenerateAsimovData(const RooAbsPdf & pdf, const RooArgSet & observables );
0053 
0054       /// function given the null and the alt p value - return the expected one given the N - sigma value
0055       static double GetExpectedPValues(double pnull, double palt, double nsigma, bool usecls, bool oneSided = true );
0056 
0057       /// set test statistic for one sided (upper limits)
0058       void SetOneSided(bool on) { fOneSided = on; }
0059 
0060       /// set the test statistics for two sided (in case of upper limits
0061       /// for discovery does not make really sense)
0062       void SetTwoSided() { fOneSided = false; fOneSidedDiscovery = false;}
0063 
0064       /// set the test statistics for one-sided discovery
0065       void SetOneSidedDiscovery(bool on) { fOneSidedDiscovery = on; }
0066 
0067       /// re-implementation of  setters since they are needed to re-initialize the calculator
0068       void SetNullModel(const ModelConfig &nullModel) override {
0069          HypoTestCalculatorGeneric::SetNullModel(nullModel);
0070          fIsInitialized = false;
0071       }
0072       void SetAlternateModel(const ModelConfig &altModel) override {
0073          HypoTestCalculatorGeneric::SetAlternateModel(altModel);
0074          fIsInitialized = false;
0075       }
0076       void SetData(RooAbsData &data) override {
0077          HypoTestCalculatorGeneric::SetData(data);
0078          fIsInitialized = false;
0079       }
0080 
0081 
0082       bool IsTwoSided() const { return (!fOneSided && !fOneSidedDiscovery); }
0083       bool IsOneSidedDiscovery() const { return fOneSidedDiscovery; }
0084 
0085 
0086       /// set using of qtilde, by default is controlled if RoORealVar is limited or not
0087       void SetQTilde(bool on) { fUseQTilde = on; }
0088 
0089       /// return snapshot of the best fit parameter
0090       const RooArgSet & GetBestFitPoi() const { return fBestFitPoi; }
0091       /// return best fit parameter (firs of poi)
0092       const RooRealVar * GetMuHat() const { return dynamic_cast<RooRealVar*>(fBestFitPoi.first()); }
0093       /// return best fit value for all parameters
0094       const RooArgSet & GetBestFitParams() const { return fBestFitPoi; }
0095 
0096       static void SetPrintLevel(int level);
0097 
0098    private:
0099       bool fOneSided;                     ///< for one sided PL test statistic (upper limits)
0100       mutable bool fOneSidedDiscovery;    ///< for one sided PL test statistic (for discovery)
0101       bool fNominalAsimov;                ///< make Asimov at nominal parameter values
0102       mutable bool fIsInitialized;        ///<! flag to check if calculator is initialized
0103       mutable int fUseQTilde;             ///< flag to indicate if using qtilde or not (-1 (default based on RooRealVar)), 0 false, 1 (true)
0104       mutable double fNLLObs;
0105       mutable double fNLLAsimov;
0106 
0107       mutable RooAbsData * fAsimovData;   ///< asimov data set
0108       mutable RooArgSet  fAsimovGlobObs;  ///< snapshot of Asimov global observables
0109       mutable RooArgSet  fBestFitPoi;     ///< snapshot of best fitted POI values
0110       mutable RooArgSet  fBestFitParams;  ///< snapshot of all best fitted Parameter values
0111 
0112       ClassDefOverride(AsymptoticCalculator,0)
0113    };
0114 }
0115 
0116 #endif