Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
RooSimultaneous.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Project: RooFit *
3 * Package: RooFitCore *
4 * File: $Id: RooSimultaneous.h,v 1.42 2007/05/11 09:11:30 verkerke Exp $
5 * Authors: *
6 * WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu *
7 * DK, David Kirkby, UC Irvine, dkirkby@uci.edu *
8 * *
9 * Copyright (c) 2000-2005, Regents of the University of California *
10 * and Stanford University. All rights reserved. *
11 * *
12 * Redistribution and use in source and binary forms, *
13 * with or without modification, are permitted according to the terms *
14 * listed in LICENSE (http://roofit.sourceforge.net/license.txt) *
15 *****************************************************************************/
16#ifndef ROO_SIMULTANEOUS
17#define ROO_SIMULTANEOUS
18
19#include <RooAbsCacheElement.h>
20#include <RooAbsPdf.h>
21#include <RooArgList.h>
22#include <RooCategoryProxy.h>
23#include <RooGlobalFunc.h>
24#include <RooObjCacheManager.h>
25#include <RooRealProxy.h>
26#include <RooSetProxy.h>
27
28#include <TList.h>
29
30#include <map>
31#include <string>
32
34class RooFitResult ;
35class RooPlot ;
36class RooAbsData ;
37class RooLinkedList ;
38
39class RooSimultaneous : public RooAbsPdf {
40public:
41
42 // Constructors, assignment etc
43 inline RooSimultaneous() : _partIntMgr(this,10) {}
44 RooSimultaneous(const char *name, const char *title, RooAbsCategoryLValue& indexCat) ;
45 RooSimultaneous(const char *name, const char *title, std::map<std::string,RooAbsPdf*> pdfMap, RooAbsCategoryLValue& inIndexCat) ;
46 RooSimultaneous(const char *name, const char *title, RooFit::Detail::FlatMap<std::string,RooAbsPdf*> const &pdfMap, RooAbsCategoryLValue& inIndexCat);
47 RooSimultaneous(const char *name, const char *title, const RooArgList& pdfList, RooAbsCategoryLValue& indexCat) ;
48 RooSimultaneous(const RooSimultaneous& other, const char* name=nullptr);
49 TObject* clone(const char* newname=nullptr) const override { return new RooSimultaneous(*this,newname) ; }
50 ~RooSimultaneous() override ;
51
52 double evaluate() const override ;
53 bool selfNormalized() const override { return true ; }
54 bool addPdf(const RooAbsPdf& pdf, const char* catLabel) ;
55
56 ExtendMode extendMode() const override ;
57
58 double expectedEvents(const RooArgSet* nset) const override ;
59 std::unique_ptr<RooAbsReal> createExpectedEventsFunc(const RooArgSet *nset) const override;
60
61 bool forceAnalyticalInt(const RooAbsArg&) const override { return true ; }
62 Int_t getAnalyticalIntegralWN(RooArgSet& allVars, RooArgSet& numVars, const RooArgSet* normSet, const char* rangeName=nullptr) const override ;
63 double analyticalIntegralWN(Int_t code, const RooArgSet* normSet, const char* rangeName=nullptr) const override ;
64
65 using RooAbsPdf::plotOn ;
67 const RooCmdArg& arg1 , const RooCmdArg& arg2={},
68 const RooCmdArg& arg3={}, const RooCmdArg& arg4={},
69 const RooCmdArg& arg5={}, const RooCmdArg& arg6={},
70 const RooCmdArg& arg7={}, const RooCmdArg& arg8={},
71 const RooCmdArg& arg9={}, const RooCmdArg& arg10={}) const override {
72 return RooAbsReal::plotOn(frame,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10) ;
73 }
74 RooPlot* plotOn(RooPlot* frame, RooLinkedList& cmdList) const override ;
75
76 RooAbsPdf* getPdf(RooStringView catName) const ;
78
79
80 RooFit::OwningPtr<RooDataSet> generateSimGlobal(const RooArgSet& whatVars, Int_t nEvents) override ;
81
82 virtual RooDataHist* fillDataHist(RooDataHist *hist, const RooArgSet* nset, double scaleFactor,
83 bool correctForBinVolume=false, bool showProgress=false) const ;
84
85 void wrapPdfsInBinSamplingPdfs(RooAbsData const &data, double precision);
87 std::map<std::string, double> const& precisions,
88 bool useCategoryNames=false);
89
90 RooAbsGenContext* autoGenContext(const RooArgSet &vars, const RooDataSet* prototype=nullptr, const RooArgSet* auxProto=nullptr,
91 bool verbose=false, bool autoBinned=true, const char* binnedTag="") const override ;
92 RooAbsGenContext* genContext(const RooArgSet &vars, const RooDataSet *prototype=nullptr,
93 const RooArgSet* auxProto=nullptr, bool verbose= false) const override ;
94
95 std::unique_ptr<RooAbsArg> compileForNormSet(RooArgSet const &normSet, RooFit::Detail::CompileContext & ctx) const override;
96
97 bool indexCatIsObservable(RooArgSet const &vars) const;
98
99protected:
100
101 void selectNormalization(const RooArgSet* depSet=nullptr, bool force=false) override ;
102 void selectNormalizationRange(const char* rangeName=nullptr, bool force=false) override ;
103
104 std::unique_ptr<RooAbsReal>
105 createAsymmetryComponent(const RooAbsCategoryLValue &asymCat, const RooAbsCategoryLValue &asymCatState) const override;
106
107 RooArgSet const& flattenedCatList() const;
108 bool indexCatIsInNormSet(RooArgSet const *nset) const;
109
111 const TNamed* _plotCoefNormRange = nullptr;
112
118 mutable RooObjCacheManager _partIntMgr ; ///<! Component normalization manager
119
120
121 friend class RooSimGenContext ;
123
124 RooCategoryProxy _indexCat ; ///< Index category
125 TList _pdfProxyList ; ///< List of PDF proxies (named after applicable category state)
126 Int_t _numPdf = 0; ///< Number of registered PDFs
127
128private:
129
130 static RooAbsPdf *resolveSwitchMode(RooAbsPdf *pdf, RooArgSet const &vars);
131
132 mutable std::unique_ptr<RooArgSet> _indexCatSet ; ///<! Index category wrapped in a RooArgSet if needed internally
133
134 ClassDefOverride(RooSimultaneous,3) // Simultaneous operator p.d.f, functions like C++ 'switch()' on input p.d.fs operating on index category5A
135};
136
137#endif
#define ClassDefOverride(name, id)
Definition Rtypes.h:347
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
char name[80]
Definition TGX11.cxx:142
Common abstract base class for objects that represent a value and a "shape" in RooFit.
Definition RooAbsArg.h:77
Abstract base class for objects to be stored in RooAbsCache cache manager objects.
Abstract base class for objects that represent a discrete value that can be set from the outside,...
Abstract base class for binned and unbinned datasets.
Definition RooAbsData.h:55
Abstract base class for generator contexts of RooAbsPdf objects.
Abstract interface for all probability density functions.
Definition RooAbsPdf.h:32
RooPlot * plotOn(RooPlot *frame, const RooCmdArg &arg1={}, const RooCmdArg &arg2={}, const RooCmdArg &arg3={}, const RooCmdArg &arg4={}, const RooCmdArg &arg5={}, const RooCmdArg &arg6={}, const RooCmdArg &arg7={}, const RooCmdArg &arg8={}, const RooCmdArg &arg9={}, const RooCmdArg &arg10={}) const override
Helper calling plotOn(RooPlot*, RooLinkedList&) const.
Definition RooAbsPdf.h:116
virtual RooPlot * plotOn(RooPlot *frame, const RooCmdArg &arg1={}, const RooCmdArg &arg2={}, const RooCmdArg &arg3={}, const RooCmdArg &arg4={}, const RooCmdArg &arg5={}, const RooCmdArg &arg6={}, const RooCmdArg &arg7={}, const RooCmdArg &arg8={}, const RooCmdArg &arg9={}, const RooCmdArg &arg10={}) const
Plot (project) PDF on specified frame.
RooArgList is a container object that can hold multiple RooAbsArg objects.
Definition RooArgList.h:22
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Definition RooArgSet.h:24
Named container for two doubles, two integers two object points and three string pointers that can be...
Definition RooCmdArg.h:26
Container class to hold N-dimensional binned data.
Definition RooDataHist.h:40
Container class to hold unbinned data.
Definition RooDataSet.h:32
RooFitResult is a container class to hold the input and output of a PDF fit to a dataset.
Collection class for internal use, storing a collection of RooAbsArg pointers in a doubly linked list...
Implementation of a RooCacheManager<RooAbsCacheElement> that specializes in the storage of cache elem...
Plot frame and a container for graphics objects within that frame.
Definition RooPlot.h:43
Efficient implementation of the generator context specific for RooSimultaneous PDFs when generating m...
Efficient implementation of the generator context specific for RooSimultaneous PDFs when generating m...
RooArgList containedArgs(Action) override
Facilitates simultaneous fitting of multiple PDFs to subsets of a given dataset.
void selectNormalization(const RooArgSet *depSet=nullptr, bool force=false) override
Interface function used by test statistics to freeze choice of observables for interpretation of frac...
double evaluate() const override
Return the current value: the value of the PDF associated with the current index category state.
Int_t _numPdf
Number of registered PDFs.
void selectNormalizationRange(const char *rangeName=nullptr, bool force=false) override
Interface function used by test statistics to freeze choice of range for interpretation of fraction c...
TList _pdfProxyList
List of PDF proxies (named after applicable category state)
std::unique_ptr< RooAbsReal > createAsymmetryComponent(const RooAbsCategoryLValue &asymCat, const RooAbsCategoryLValue &asymCatState) const override
Build the component function of an asymmetry plot (see RooAbsReal::plotAsymOn()) for a fixed state of...
bool indexCatIsInNormSet(RooArgSet const *nset) const
Check if the index category is in the normalization set nset, matching by name.
std::unique_ptr< RooAbsReal > createExpectedEventsFunc(const RooArgSet *nset) const override
Expected events function for the new evaluation backends: the sum over all components,...
RooObjCacheManager _partIntMgr
! Component normalization manager
~RooSimultaneous() override
Destructor.
RooFit::OwningPtr< RooDataSet > generateSimGlobal(const RooArgSet &whatVars, Int_t nEvents) override
Special generator interface for generation of 'global observables' – for RooStats tools.
RooArgSet const & flattenedCatList() const
Internal utility function to get a list of all category components for this RooSimultaneous.
RooPlot * plotOn(RooPlot *frame, const RooCmdArg &arg1, const RooCmdArg &arg2={}, const RooCmdArg &arg3={}, const RooCmdArg &arg4={}, const RooCmdArg &arg5={}, const RooCmdArg &arg6={}, const RooCmdArg &arg7={}, const RooCmdArg &arg8={}, const RooCmdArg &arg9={}, const RooCmdArg &arg10={}) const override
ExtendMode extendMode() const override
Examine the pdf components and check if one of them can be extended or must be extended.
RooCategoryProxy _indexCat
Index category.
bool forceAnalyticalInt(const RooAbsArg &) const override
double analyticalIntegralWN(Int_t code, const RooArgSet *normSet, const char *rangeName=nullptr) const override
Return analytical integration defined by given code.
Int_t getAnalyticalIntegralWN(RooArgSet &allVars, RooArgSet &numVars, const RooArgSet *normSet, const char *rangeName=nullptr) const override
Forward determination of analytical integration capabilities to component p.d.f.s A unique code is as...
double expectedEvents(const RooArgSet *nset) const override
Return the number of expected events: If the index is in nset, then return the sum of the expected ev...
TObject * clone(const char *newname=nullptr) const override
RooAbsGenContext * autoGenContext(const RooArgSet &vars, const RooDataSet *prototype=nullptr, const RooArgSet *auxProto=nullptr, bool verbose=false, bool autoBinned=true, const char *binnedTag="") const override
RooAbsPdf * getPdf(RooStringView catName) const
Return the p.d.f associated with the given index category name.
std::unique_ptr< RooAbsArg > compileForNormSet(RooArgSet const &normSet, RooFit::Detail::CompileContext &ctx) const override
void wrapPdfsInBinSamplingPdfs(RooAbsData const &data, double precision)
Wraps the components of this RooSimultaneous in RooBinSamplingPdfs.
static RooAbsPdf * resolveSwitchMode(RooAbsPdf *pdf, RooArgSet const &vars)
For the generator contexts: a component that is a RooSimultaneous whose index category is not among t...
bool indexCatIsObservable(RooArgSet const &vars) const
Check if the index category is among the variables vars, matching by name.
const TNamed * _plotCoefNormRange
RooAbsGenContext * genContext(const RooArgSet &vars, const RooDataSet *prototype=nullptr, const RooArgSet *auxProto=nullptr, bool verbose=false) const override
Return specialized generator context for simultaneous p.d.f.s.
std::unique_ptr< RooArgSet > _indexCatSet
! Index category wrapped in a RooArgSet if needed internally
bool addPdf(const RooAbsPdf &pdf, const char *catLabel)
Associate given PDF with index category state label 'catLabel'.
bool selfNormalized() const override
Shows if a PDF is self-normalized, which means that no attempt is made to add a normalization term.
RooSetProxy _plotCoefNormSet
const RooAbsCategoryLValue & indexCat() const
virtual RooDataHist * fillDataHist(RooDataHist *hist, const RooArgSet *nset, double scaleFactor, bool correctForBinVolume=false, bool showProgress=false) const
The RooStringView is a wrapper around a C-style string that can also be constructed from a std::strin...
const T & arg() const
Return reference to object held in proxy.
A doubly linked list.
Definition TList.h:38
The TNamed class is the base class for all named ROOT classes.
Definition TNamed.h:29
Mother of all ROOT objects.
Definition TObject.h:42
T * OwningPtr
An alias for raw pointers for indicating that the return type of a RooFit function is an owning point...
Definition Config.h:35