50 ClassImp(RooNumGenFactory);
58 RooNumGenFactory::RooNumGenFactory()
60 RooAcceptReject::registerSampler(*
this) ;
61 RooFoamGenerator::registerSampler(*
this) ;
64 RooNumGenConfig::defaultConfig().method1D(kFALSE,kFALSE).setLabel(
"RooFoamGenerator") ;
65 RooNumGenConfig::defaultConfig().method1D(kTRUE ,kFALSE).setLabel(
"RooAcceptReject") ;
66 RooNumGenConfig::defaultConfig().method1D(kFALSE,kTRUE ).setLabel(
"RooAcceptReject") ;
67 RooNumGenConfig::defaultConfig().method1D(kTRUE, kTRUE ).setLabel(
"RooAcceptReject") ;
69 RooNumGenConfig::defaultConfig().method2D(kFALSE,kFALSE).setLabel(
"RooFoamGenerator") ;
70 RooNumGenConfig::defaultConfig().method2D(kTRUE ,kFALSE).setLabel(
"RooAcceptReject") ;
71 RooNumGenConfig::defaultConfig().method2D(kFALSE,kTRUE ).setLabel(
"RooAcceptReject") ;
72 RooNumGenConfig::defaultConfig().method2D(kTRUE, kTRUE ).setLabel(
"RooAcceptReject") ;
74 RooNumGenConfig::defaultConfig().methodND(kFALSE,kFALSE).setLabel(
"RooFoamGenerator") ;
75 RooNumGenConfig::defaultConfig().methodND(kTRUE ,kFALSE).setLabel(
"RooAcceptReject") ;
76 RooNumGenConfig::defaultConfig().methodND(kFALSE,kTRUE ).setLabel(
"RooAcceptReject") ;
77 RooNumGenConfig::defaultConfig().methodND(kTRUE, kTRUE ).setLabel(
"RooAcceptReject") ;
86 RooNumGenFactory::~RooNumGenFactory()
88 std::map<std::string,RooAbsNumGenerator*>::iterator iter = _map.begin() ;
89 while (iter != _map.end()) {
99 RooNumGenFactory::RooNumGenFactory(
const RooNumGenFactory& other) : TObject(other)
108 RooNumGenFactory& RooNumGenFactory::instance()
110 static RooNumGenFactory instance;
120 Bool_t RooNumGenFactory::storeProtoSampler(RooAbsNumGenerator* proto,
const RooArgSet& defConfig)
122 TString name = proto->IsA()->GetName() ;
124 if (getProtoSampler(name)) {
130 _map[name.Data()] = proto ;
133 RooNumGenConfig::defaultConfig().addConfigSection(proto,defConfig) ;
143 const RooAbsNumGenerator* RooNumGenFactory::getProtoSampler(
const char* name)
145 if (_map.count(name)==0) {
163 RooAbsNumGenerator* RooNumGenFactory::createSampler(RooAbsReal& func,
const RooArgSet& genVars,
const RooArgSet& condVars,
const RooNumGenConfig& config, Bool_t verbose, RooAbsReal* maxFuncVal)
166 Int_t ndim = genVars.getSize() ;
167 Bool_t cond = (condVars.getSize() > 0) ? kTRUE : kFALSE ;
169 Bool_t hasCat(kFALSE) ;
170 TIterator* iter = genVars.createIterator() ;
172 while ((arg=(RooAbsArg*)iter->Next())) {
173 if (arg->IsA()==RooCategory::Class()) {
184 method = config.method1D(cond,hasCat).getLabel() ;
188 method = config.method2D(cond,hasCat).getLabel() ;
192 method = config.methodND(cond,hasCat).getLabel() ;
197 if (!method.CompareTo(
"N/A")) {
198 oocoutE((TObject*)0,Integration) <<
"RooNumGenFactory::createSampler: No sampler method has been defined for "
199 << (cond?
"a conditional ":
"a ") << ndim <<
"-dimensional p.d.f" << endl ;
204 const RooAbsNumGenerator* proto = getProtoSampler(method) ;
205 RooAbsNumGenerator* engine = proto->clone(func,genVars,condVars,config,verbose,maxFuncVal) ;