42 ClassImp(RooNumIntConfig)
48 RooNumIntConfig& RooNumIntConfig::defaultConfig()
50 static RooNumIntConfig theConfig;
51 static bool initStarted =
false;
60 RooNumIntFactory::instance();
71 RooNumIntConfig::RooNumIntConfig() :
74 _printEvalCounter(kFALSE),
75 _method1D(
"method1D",
"1D integration method"),
76 _method2D(
"method2D",
"2D integration method"),
77 _methodND(
"methodND",
"ND integration method"),
78 _method1DOpen(
"method1DOpen",
"1D integration method in open domain"),
79 _method2DOpen(
"method2DOpen",
"2D integration method in open domain"),
80 _methodNDOpen(
"methodNDOpen",
"ND integration method in open domain")
85 _method1D.defineType(
"N/A",0) ;
86 _method2D.defineType(
"N/A",0) ;
87 _methodND.defineType(
"N/A",0) ;
88 _method1DOpen.defineType(
"N/A",0) ;
89 _method2DOpen.defineType(
"N/A",0) ;
90 _methodNDOpen.defineType(
"N/A",0) ;
97 RooNumIntConfig::~RooNumIntConfig()
100 _configSets.Delete() ;
107 RooNumIntConfig::RooNumIntConfig(
const RooNumIntConfig& other) :
108 TObject(other), RooPrintable(other),
109 _epsAbs(other._epsAbs),
110 _epsRel(other._epsRel),
111 _printEvalCounter(other._printEvalCounter),
112 _method1D(other._method1D),
113 _method2D(other._method2D),
114 _methodND(other._methodND),
115 _method1DOpen(other._method1DOpen),
116 _method2DOpen(other._method2DOpen),
117 _methodNDOpen(other._methodNDOpen)
120 TIterator* iter = other._configSets.MakeIterator() ;
122 while((set=(RooArgSet*)iter->Next())) {
123 RooArgSet* setCopy = (RooArgSet*) set->snapshot() ;
124 setCopy->setName(set->GetName()) ;
125 _configSets.Add(setCopy);
134 RooNumIntConfig& RooNumIntConfig::operator=(
const RooNumIntConfig& other)
142 _epsAbs = other._epsAbs ;
143 _epsRel = other._epsRel ;
144 _method1D.setIndex(other._method1D.getIndex()) ;
145 _method2D.setIndex(other._method2D.getIndex()) ;
146 _methodND.setIndex(other._methodND.getIndex()) ;
147 _method1DOpen.setIndex(other._method1DOpen.getIndex()) ;
148 _method2DOpen.setIndex(other._method2DOpen.getIndex()) ;
149 _methodNDOpen.setIndex(other._methodNDOpen.getIndex()) ;
152 _configSets.Delete() ;
155 TIterator* iter = other._configSets.MakeIterator() ;
157 while((set=(RooArgSet*)iter->Next())) {
158 RooArgSet* setCopy = (RooArgSet*) set->snapshot() ;
159 setCopy->setName(set->GetName()) ;
160 _configSets.Add(setCopy);
174 Bool_t RooNumIntConfig::addConfigSection(
const RooAbsIntegrator* proto,
const RooArgSet& inDefaultConfig)
176 TString name = proto->IsA()->GetName() ;
179 if (proto->canIntegrate1D()) {
180 _method1D.defineType(name) ;
181 if (proto->canIntegrateOpenEnded()) {
182 _method1DOpen.defineType(name) ;
186 if (proto->canIntegrate2D()) {
187 _method2D.defineType(name) ;
188 if (proto->canIntegrateOpenEnded()) {
189 _method2DOpen.defineType(name) ;
193 if (proto->canIntegrateND()) {
194 _methodND.defineType(name) ;
195 if (proto->canIntegrateOpenEnded()) {
196 _methodNDOpen.defineType(name) ;
201 RooArgSet* config = (RooArgSet*) inDefaultConfig.snapshot() ;
202 config->setName(name) ;
203 _configSets.Add(config) ;
213 RooArgSet& RooNumIntConfig::getConfigSection(
const char* name)
215 return const_cast<RooArgSet&
>((
const_cast<const RooNumIntConfig*
>(
this)->getConfigSection(name))) ;
222 const RooArgSet& RooNumIntConfig::getConfigSection(
const char* name)
const
224 static RooArgSet dummy ;
225 RooArgSet* config = (RooArgSet*) _configSets.FindObject(name) ;
227 oocoutE((TObject*)0,InputArguments) <<
"RooNumIntConfig::getIntegrator: ERROR: no configuration stored for integrator '" << name <<
"'" << endl ;
238 void RooNumIntConfig::setEpsAbs(Double_t newEpsAbs)
241 oocoutE((TObject*)0,InputArguments) <<
"RooNumIntConfig::setEpsAbs: ERROR: target absolute precision must be greater or equal than zero" << endl ;
244 _epsAbs = newEpsAbs ;
248 RooPrintable::StyleOption RooNumIntConfig::defaultPrintStyle(Option_t* opt)
const
257 if (o.Contains(
"v")) {
268 void RooNumIntConfig::setEpsRel(Double_t newEpsRel)
271 oocoutE((TObject*)0,InputArguments) <<
"RooNumIntConfig::setEpsRel: ERROR: target absolute precision must be greater or equal than zero" << endl ;
274 _epsRel = newEpsRel ;
282 void RooNumIntConfig::printMultiline(ostream &os, Int_t , Bool_t verbose, TString indent)
const
284 os << indent <<
"Requested precision: " << _epsAbs <<
" absolute, " << _epsRel <<
" relative" << endl << endl ;
285 if (_printEvalCounter) {
286 os << indent <<
"Printing of function evaluation counter for each integration enabled" << endl << endl ;
289 os << indent <<
"1-D integration method: " << _method1D.getLabel() ;
290 if (_method1DOpen.getIndex()!=_method1D.getIndex()) {
291 os <<
" (" << _method1DOpen.getLabel() <<
" if open-ended)" << endl ;
295 os << indent <<
"2-D integration method: " << _method2D.getLabel() ;
296 if (_method2DOpen.getIndex()!=_method2D.getIndex()) {
297 os <<
" (" << _method2DOpen.getLabel() <<
" if open-ended)" << endl ;
301 os << indent <<
"N-D integration method: " << _methodND.getLabel() ;
302 if (_methodNDOpen.getIndex()!=_methodND.getIndex()) {
303 os <<
" (" << _methodNDOpen.getLabel() <<
" if open-ended)" << endl ;
310 os << endl <<
"Available integration methods:" << endl << endl ;
311 TIterator* cIter = _configSets.MakeIterator() ;
312 RooArgSet* configSet ;
313 while ((configSet=(RooArgSet*)cIter->Next())) {
315 os << indent <<
"*** " << configSet->GetName() <<
" ***" << endl ;
316 os << indent <<
"Capabilities: " ;
317 const RooAbsIntegrator* proto = RooNumIntFactory::instance().getProtoIntegrator(configSet->GetName()) ;
318 if (proto->canIntegrate1D()) os <<
"[1-D] " ;
319 if (proto->canIntegrate2D()) os <<
"[2-D] " ;
320 if (proto->canIntegrateND()) os <<
"[N-D] " ;
321 if (proto->canIntegrateOpenEnded()) os <<
"[OpenEnded] " ;
324 os <<
"Configuration: " << endl ;
325 configSet->printMultiline(os,kName|kValue) ;
328 const char* depName = RooNumIntFactory::instance().getDepIntegratorName(configSet->GetName()) ;
329 if (strlen(depName)>0) {
330 os << indent <<
"(Depends on '" << depName <<
"')" << endl ;