Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
RooNumGenFactory.cxx
Go to the documentation of this file.
1/*****************************************************************************
2 * Project: RooFit *
3 * Package: RooFitCore *
4 * @(#)root/roofitcore:$Id$
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
17/**
18\file RooNumGenFactory.cxx
19\class RooNumGenFactory
20\ingroup Roofitcore
21
22%Factory to instantiate numeric integrators
23from a given function binding and a given configuration. The factory
24searches for a numeric integrator registered with the factory that
25has the ability to perform the numeric integration. The choice of
26method may depend on the number of dimensions integrated,
27the nature of the integration limits (closed or open ended) and
28the preference of the caller as encoded in the configuration object.
29**/
30
31#include "TClass.h"
32#include "Riostream.h"
33
34#include "RooNumGenFactory.h"
35#include "RooArgSet.h"
36#include "RooAbsFunc.h"
37#include "RooNumGenConfig.h"
38#include "RooNumber.h"
39
40#include "RooAcceptReject.h"
41#include "RooFoamGenerator.h"
42
43
44#include "RooMsgService.h"
45
46
47////////////////////////////////////////////////////////////////////////////////
48/// Constructor. Register all known integrators by calling
49/// their static registration functions
50
52{
55
56 // Prepare default
57 RooNumGenConfig::defaultConfig().method1D(false,false).setLabel("RooFoamGenerator") ;
58 RooNumGenConfig::defaultConfig().method1D(true ,false).setLabel("RooAcceptReject") ;
59 RooNumGenConfig::defaultConfig().method1D(false,true ).setLabel("RooAcceptReject") ;
60 RooNumGenConfig::defaultConfig().method1D(true, true ).setLabel("RooAcceptReject") ;
61
62 RooNumGenConfig::defaultConfig().method2D(false,false).setLabel("RooFoamGenerator") ;
63 RooNumGenConfig::defaultConfig().method2D(true ,false).setLabel("RooAcceptReject") ;
64 RooNumGenConfig::defaultConfig().method2D(false,true ).setLabel("RooAcceptReject") ;
65 RooNumGenConfig::defaultConfig().method2D(true, true ).setLabel("RooAcceptReject") ;
66
67 RooNumGenConfig::defaultConfig().methodND(false,false).setLabel("RooFoamGenerator") ;
68 RooNumGenConfig::defaultConfig().methodND(true ,false).setLabel("RooAcceptReject") ;
69 RooNumGenConfig::defaultConfig().methodND(false,true ).setLabel("RooAcceptReject") ;
70 RooNumGenConfig::defaultConfig().methodND(true, true ).setLabel("RooAcceptReject") ;
71
72}
73
74
75
76////////////////////////////////////////////////////////////////////////////////
77/// Destructor
78
80{
81 std::map<std::string,RooAbsNumGenerator*>::iterator iter = _map.begin() ;
82 while (iter != _map.end()) {
83 delete iter->second ;
84 ++iter ;
85 }
86}
87
88
89////////////////////////////////////////////////////////////////////////////////
90/// Copy constructor
91
95
96
97
98////////////////////////////////////////////////////////////////////////////////
99/// Static method returning reference to singleton instance of factory
100
106
107
108////////////////////////////////////////////////////////////////////////////////
109/// Method accepting registration of a prototype numeric integrator along with a RooArgSet of its
110/// default configuration options and an optional list of names of other numeric integrators
111/// on which this integrator depends. Returns true if integrator was previously registered
112
114{
115 TString name = proto->generatorName() ;
116
117 if (getProtoSampler(name)) {
118 //cout << "RooNumGenFactory::storeSampler() ERROR: integrator '" << name << "' already registered" << std::endl ;
119 return true ;
120 }
121
122 // Add to factory
123 _map[name.Data()] = proto ;
124
125 // Add default config to master config
127
128 return false ;
129}
130
131
132
133////////////////////////////////////////////////////////////////////////////////
134/// Return prototype integrator with given (class) name
135
137{
138 if (_map.count(name)==0) {
139 return nullptr ;
140 }
141
142 return _map[name] ;
143}
144
145
146
147////////////////////////////////////////////////////////////////////////////////
148/// Construct a numeric integrator instance that operates on function 'func' and is configured
149/// with 'config'. If ndimPreset is greater than zero that number is taken as the dimensionality
150/// of the integration, otherwise it is queried from 'func'. This function iterators over list
151/// of available prototype integrators and returns an clone attached to the given function of
152/// the first class that matches the specifications of the requested integration considering
153/// the number of dimensions, the nature of the limits (open ended vs closed) and the user
154/// preference stated in 'config'
155
157{
158 // Find method defined configuration
159 Int_t ndim = genVars.size() ;
160 bool cond = (!condVars.empty()) ? true : false ;
161
162 bool hasCat(false) ;
163 for (const auto arg : genVars) {
164 if (arg->IsA()==RooCategory::Class()) {
165 hasCat=true ;
166 break ;
167 }
168 }
169
170
172 switch(ndim) {
173 case 1:
175 break ;
176
177 case 2:
179 break ;
180
181 default:
183 break ;
184 }
185
186 // Check that a method was defined for this case
187 if (!method.CompareTo("N/A")) {
188 oocoutE(nullptr,Integration) << "RooNumGenFactory::createSampler: No sampler method has been defined for "
189 << (cond?"a conditional ":"a ") << ndim << "-dimensional p.d.f" << std::endl;
190 return nullptr ;
191 }
192
193 // Retrieve proto integrator and return clone configured for the requested integration task
195 RooAbsNumGenerator* engine = proto->clone(func,genVars,condVars,config,verbose,maxFuncVal) ;
196 return engine ;
197}
#define oocoutE(o, a)
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
char name[80]
Definition TGX11.cxx:110
const char * proto
Definition civetweb.c:17535
virtual const char * getCurrentLabel() const
Return label string of current state.
Abstract base class for MC event generator implementations like RooAcceptReject and RooFoam.
Abstract base class for objects that represent a real value and implements functionality common to al...
Definition RooAbsReal.h:59
static void registerSampler(RooNumGenFactory &fact)
Register RooIntegrator1D, is parameters and capabilities with RooNumIntFactory.
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Definition RooArgSet.h:24
static TClass * Class()
static void registerSampler(RooNumGenFactory &fact)
Register RooIntegrator1D, is parameters and capabilities with RooNumIntFactory.
Holds the configuration parameters of the various numeric integrators used by RooRealIntegral.
static RooNumGenConfig & defaultConfig()
Return reference to instance of default numeric integrator configuration object.
RooCategory & method2D(bool cond, bool cat)
RooCategory & method1D(bool cond, bool cat)
RooCategory & methodND(bool cond, bool cat)
Factory to instantiate numeric integrators from a given function binding and a given configuration.
RooAbsNumGenerator * createSampler(RooAbsReal &func, const RooArgSet &genVars, const RooArgSet &condVars, const RooNumGenConfig &config, bool verbose=false, RooAbsReal *maxFuncVal=nullptr)
Construct a numeric integrator instance that operates on function 'func' and is configured with 'conf...
static RooNumGenFactory & instance()
Static method returning reference to singleton instance of factory.
bool storeProtoSampler(RooAbsNumGenerator *proto, const RooArgSet &defConfig)
Method accepting registration of a prototype numeric integrator along with a RooArgSet of its default...
~RooNumGenFactory() override
Destructor.
RooNumGenFactory()
Constructor.
std::map< std::string, RooAbsNumGenerator * > _map
const RooAbsNumGenerator * getProtoSampler(const char *name)
Return prototype integrator with given (class) name.
Mother of all ROOT objects.
Definition TObject.h:41
Basic string class.
Definition TString.h:139