/*****************************************************************************
 * Project: RooFit                                                           *
 * Package: RooFitCore                                                       *
 * @(#)root/roofitcore:$Id$
 * Authors:                                                                  *
 *   WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu       *
 *   DK, David Kirkby,    UC Irvine,         dkirkby@uci.edu                 *
 *                                                                           *
 * Copyright (c) 2000-2005, Regents of the University of California          *
 *                          and Stanford University. All rights reserved.    *
 *                                                                           *
 * Redistribution and use in source and binary forms,                        *
 * with or without modification, are permitted according to the terms        *
 * listed in LICENSE (http://roofit.sourceforge.net/license.txt)             *
 *****************************************************************************/

//////////////////////////////////////////////////////////////////////////////
//
// BEGIN_HTML
// RooNumIntConfig holds the configuration parameters of the various
// numeric integrators used by RooRealIntegral. RooRealIntegral and RooAbsPdf
// use this class in the (normalization) integral configuration interface
// END_HTML
//

#include "RooFit.h"
#include "Riostream.h"

#include "RooNumIntConfig.h"
#include "RooArgSet.h"
#include "RooAbsIntegrator.h"
#include "RooNumIntFactory.h"
#include "RooMsgService.h"

#include "TClass.h"



using namespace std;

ClassImp(RooNumIntConfig)
;

RooNumIntConfig* RooNumIntConfig::_default = 0 ;


//_____________________________________________________________________________
void RooNumIntConfig::cleanup()
{
  // Function called by atexit() handler installed by RooSentinel to
  // cleanup global objects at end of job
  if (_default) {
    delete _default ;
    _default = 0 ;
  }
}



//_____________________________________________________________________________
RooNumIntConfig& RooNumIntConfig::defaultConfig() 
{
  // Return reference to instance of default numeric integrator configuration object
  
  // Instantiate object if it doesn't exist yet
  if (_default==0) {
    _default = new RooNumIntConfig ;    
    RooNumIntFactory::instance() ;
  }
  return *_default ;
}



//_____________________________________________________________________________
RooNumIntConfig::RooNumIntConfig() : 
  _epsAbs(1e-7),
  _epsRel(1e-7),
  _printEvalCounter(kFALSE),
  _method1D("method1D","1D integration method"),
  _method2D("method2D","2D integration method"),
  _methodND("methodND","ND integration method"),
  _method1DOpen("method1DOpen","1D integration method in open domain"),
  _method2DOpen("method2DOpen","2D integration method in open domain"),
  _methodNDOpen("methodNDOpen","ND integration method in open domain")
{
  // Constructor 

  // Set all methods to undefined
  // Defined methods will be registered by static initialization routines
  // of the various numeric integrator engines
  _method1D.defineType("N/A",0) ;
  _method2D.defineType("N/A",0) ;
  _methodND.defineType("N/A",0) ;
  _method1DOpen.defineType("N/A",0) ;
  _method2DOpen.defineType("N/A",0) ;
  _methodNDOpen.defineType("N/A",0) ;
}


//_____________________________________________________________________________
RooNumIntConfig::~RooNumIntConfig()
{
  // Destructor

  // Delete all configuration data
  _configSets.Delete() ;
}


//_____________________________________________________________________________
RooNumIntConfig::RooNumIntConfig(const RooNumIntConfig& other) :
  TObject(other), RooPrintable(other),
  _epsAbs(other._epsAbs),
  _epsRel(other._epsRel),
  _printEvalCounter(other._printEvalCounter),
  _method1D(other._method1D),
  _method2D(other._method2D),
  _methodND(other._methodND),
  _method1DOpen(other._method1DOpen),
  _method2DOpen(other._method2DOpen),
  _methodNDOpen(other._methodNDOpen)
{
  // Copy constructor
  
  // Clone all configuration dat
  TIterator* iter = other._configSets.MakeIterator() ;
  RooArgSet* set ;
  while((set=(RooArgSet*)iter->Next())) {
    RooArgSet* setCopy = (RooArgSet*) set->snapshot() ;
    setCopy->setName(set->GetName()) ;
   _configSets.Add(setCopy);
  }
  delete iter ;
}


//_____________________________________________________________________________
RooNumIntConfig& RooNumIntConfig::operator=(const RooNumIntConfig& other) 
{
  // Assignment operator from other RooNumIntConfig

  // Prevent self-assignment 
  if (&other==this) {
    return *this ;
  }

  // Copy common properties
  _epsAbs = other._epsAbs ;
  _epsRel = other._epsRel ;
  _method1D.setIndex(other._method1D.getIndex()) ;
  _method2D.setIndex(other._method2D.getIndex()) ;
  _methodND.setIndex(other._methodND.getIndex()) ;
  _method1DOpen.setIndex(other._method1DOpen.getIndex()) ;
  _method2DOpen.setIndex(other._method2DOpen.getIndex()) ;
  _methodNDOpen.setIndex(other._methodNDOpen.getIndex()) ;

  // Delete old integrator-specific configuration data
  _configSets.Delete() ;

  // Copy new integrator-specific data
  TIterator* iter = other._configSets.MakeIterator() ;
  RooArgSet* set ;
  while((set=(RooArgSet*)iter->Next())) {
    RooArgSet* setCopy = (RooArgSet*) set->snapshot() ;
    setCopy->setName(set->GetName()) ;
   _configSets.Add(setCopy);
  }
  delete iter ;

  return *this ;
}



//_____________________________________________________________________________
Bool_t RooNumIntConfig::addConfigSection(const RooAbsIntegrator* proto, const RooArgSet& inDefaultConfig)
{
  // Add a configuration section for a particular integrator. Integrator name and capabilities are
  // automatically determined from instance passed as 'proto'. The defaultConfig object is associated
  // as the default configuration for the integrator. 

  TString name = proto->IsA()->GetName() ;

  // Register integrator for appropriate dimensionalities
  if (proto->canIntegrate1D()) {
    _method1D.defineType(name) ;
    if (proto->canIntegrateOpenEnded()) {
      _method1DOpen.defineType(name) ;
    }
  }

  if (proto->canIntegrate2D()) {
    _method2D.defineType(name) ;
    if (proto->canIntegrateOpenEnded()) {
      _method2DOpen.defineType(name) ;
    }
  }

  if (proto->canIntegrateND()) {
    _methodND.defineType(name) ;
    if (proto->canIntegrateOpenEnded()) {
      _methodNDOpen.defineType(name) ;
    }
  }
  
  // Store default configuration parameters
  RooArgSet* config = (RooArgSet*) inDefaultConfig.snapshot() ;
  config->setName(name) ;
  _configSets.Add(config) ;

  return kFALSE ;
}



//_____________________________________________________________________________
RooArgSet& RooNumIntConfig::getConfigSection(const char* name)  
{
  // Return section with configuration parameters for integrator with given (class) name

  return const_cast<RooArgSet&>((const_cast<const RooNumIntConfig*>(this)->getConfigSection(name))) ;
}


//_____________________________________________________________________________
const RooArgSet& RooNumIntConfig::getConfigSection(const char* name) const
{
  // Retrieve configuration information specific to integrator with given name

  static RooArgSet dummy ;
  RooArgSet* config = (RooArgSet*) _configSets.FindObject(name) ;
  if (!config) {
    oocoutE((TObject*)0,InputArguments) << "RooNumIntConfig::getIntegrator: ERROR: no configuration stored for integrator '" << name << "'" << endl ;
    return dummy ;
  }
  return *config ;
}



//_____________________________________________________________________________
void RooNumIntConfig::setEpsAbs(Double_t newEpsAbs)
{
  // Set absolute convergence criteria (convergence if abs(Err)<newEpsAbs)

  if (newEpsAbs<=0) {
    oocoutE((TObject*)0,InputArguments) << "RooNumIntConfig::setEpsAbs: ERROR: target absolute precision must be greater than zero" << endl ;
    return ;
  }
  _epsAbs = newEpsAbs ;
}


RooPrintable::StyleOption RooNumIntConfig::defaultPrintStyle(Option_t* opt) const 
{ 
  if (!opt) {
    return kStandard ;
  }

  TString o(opt) ;
  o.ToLower() ;

  if (o.Contains("v")) {
    return kVerbose ;
  }
  return kStandard ; 
}



//_____________________________________________________________________________
void RooNumIntConfig::setEpsRel(Double_t newEpsRel) 
{
  // Set relative convergence criteria (convergence if abs(Err)/abs(Int)<newEpsRel)

  if (newEpsRel<=0) {
    oocoutE((TObject*)0,InputArguments) << "RooNumIntConfig::setEpsRel: ERROR: target absolute precision must be greater than zero" << endl ;
    return ;
  }
  _epsRel = newEpsRel ;
}



//_____________________________________________________________________________
void RooNumIntConfig::printMultiline(ostream &os, Int_t /*content*/, Bool_t verbose, TString indent) const
{
  // Detailed printing interface

  os << indent << "Requested precision: " << _epsAbs << " absolute, " << _epsRel << " relative" << endl << endl ;
  if (_printEvalCounter) {
    os << indent << "Printing of function evaluation counter for each integration enabled" << endl << endl ;
  }
  
  os << indent << "1-D integration method: " << _method1D.getLabel() ;
  if (_method1DOpen.getIndex()!=_method1D.getIndex()) {
    os << " (" << _method1DOpen.getLabel() << " if open-ended)" << endl ;
  } else {
    os << endl ;
  }
  os << indent << "2-D integration method: " << _method2D.getLabel() ;
  if (_method2DOpen.getIndex()!=_method2D.getIndex()) {
    os << " (" << _method2DOpen.getLabel() << " if open-ended)" << endl ;
  } else {
    os << endl ;
  }
  os << indent << "N-D integration method: " << _methodND.getLabel() ;
  if (_methodNDOpen.getIndex()!=_methodND.getIndex()) {
    os << " (" << _methodNDOpen.getLabel() << " if open-ended)" << endl ;
  } else {
    os << endl ;
  }
  
  if (verbose) {

    os << endl << "Available integration methods:" << endl << endl ;
    TIterator* cIter = _configSets.MakeIterator() ;
    RooArgSet* configSet ;
    while ((configSet=(RooArgSet*)cIter->Next())) {

      os << indent << "*** " << configSet->GetName() << " ***" << endl ;
      os << indent << "Capabilities: " ;
      const RooAbsIntegrator* proto = RooNumIntFactory::instance().getProtoIntegrator(configSet->GetName()) ;
      if (proto->canIntegrate1D()) os << "[1-D] " ;
      if (proto->canIntegrate2D()) os << "[2-D] " ;
      if (proto->canIntegrateND()) os << "[N-D] " ;
      if (proto->canIntegrateOpenEnded()) os << "[OpenEnded] " ;
      os << endl ;

      os << "Configuration: " << endl ;
      configSet->printMultiline(os,kName|kValue) ;
      //configSet->writeToStream(os,kFALSE) ;

      const char* depName = RooNumIntFactory::instance().getDepIntegratorName(configSet->GetName()) ;
      if (strlen(depName)>0) {
	os << indent << "(Depends on '" << depName << "')" << endl ;
      }
      os << endl ;

    }

    delete cIter ;
  }
}
 RooNumIntConfig.cxx:1
 RooNumIntConfig.cxx:2
 RooNumIntConfig.cxx:3
 RooNumIntConfig.cxx:4
 RooNumIntConfig.cxx:5
 RooNumIntConfig.cxx:6
 RooNumIntConfig.cxx:7
 RooNumIntConfig.cxx:8
 RooNumIntConfig.cxx:9
 RooNumIntConfig.cxx:10
 RooNumIntConfig.cxx:11
 RooNumIntConfig.cxx:12
 RooNumIntConfig.cxx:13
 RooNumIntConfig.cxx:14
 RooNumIntConfig.cxx:15
 RooNumIntConfig.cxx:16
 RooNumIntConfig.cxx:17
 RooNumIntConfig.cxx:18
 RooNumIntConfig.cxx:19
 RooNumIntConfig.cxx:20
 RooNumIntConfig.cxx:21
 RooNumIntConfig.cxx:22
 RooNumIntConfig.cxx:23
 RooNumIntConfig.cxx:24
 RooNumIntConfig.cxx:25
 RooNumIntConfig.cxx:26
 RooNumIntConfig.cxx:27
 RooNumIntConfig.cxx:28
 RooNumIntConfig.cxx:29
 RooNumIntConfig.cxx:30
 RooNumIntConfig.cxx:31
 RooNumIntConfig.cxx:32
 RooNumIntConfig.cxx:33
 RooNumIntConfig.cxx:34
 RooNumIntConfig.cxx:35
 RooNumIntConfig.cxx:36
 RooNumIntConfig.cxx:37
 RooNumIntConfig.cxx:38
 RooNumIntConfig.cxx:39
 RooNumIntConfig.cxx:40
 RooNumIntConfig.cxx:41
 RooNumIntConfig.cxx:42
 RooNumIntConfig.cxx:43
 RooNumIntConfig.cxx:44
 RooNumIntConfig.cxx:45
 RooNumIntConfig.cxx:46
 RooNumIntConfig.cxx:47
 RooNumIntConfig.cxx:48
 RooNumIntConfig.cxx:49
 RooNumIntConfig.cxx:50
 RooNumIntConfig.cxx:51
 RooNumIntConfig.cxx:52
 RooNumIntConfig.cxx:53
 RooNumIntConfig.cxx:54
 RooNumIntConfig.cxx:55
 RooNumIntConfig.cxx:56
 RooNumIntConfig.cxx:57
 RooNumIntConfig.cxx:58
 RooNumIntConfig.cxx:59
 RooNumIntConfig.cxx:60
 RooNumIntConfig.cxx:61
 RooNumIntConfig.cxx:62
 RooNumIntConfig.cxx:63
 RooNumIntConfig.cxx:64
 RooNumIntConfig.cxx:65
 RooNumIntConfig.cxx:66
 RooNumIntConfig.cxx:67
 RooNumIntConfig.cxx:68
 RooNumIntConfig.cxx:69
 RooNumIntConfig.cxx:70
 RooNumIntConfig.cxx:71
 RooNumIntConfig.cxx:72
 RooNumIntConfig.cxx:73
 RooNumIntConfig.cxx:74
 RooNumIntConfig.cxx:75
 RooNumIntConfig.cxx:76
 RooNumIntConfig.cxx:77
 RooNumIntConfig.cxx:78
 RooNumIntConfig.cxx:79
 RooNumIntConfig.cxx:80
 RooNumIntConfig.cxx:81
 RooNumIntConfig.cxx:82
 RooNumIntConfig.cxx:83
 RooNumIntConfig.cxx:84
 RooNumIntConfig.cxx:85
 RooNumIntConfig.cxx:86
 RooNumIntConfig.cxx:87
 RooNumIntConfig.cxx:88
 RooNumIntConfig.cxx:89
 RooNumIntConfig.cxx:90
 RooNumIntConfig.cxx:91
 RooNumIntConfig.cxx:92
 RooNumIntConfig.cxx:93
 RooNumIntConfig.cxx:94
 RooNumIntConfig.cxx:95
 RooNumIntConfig.cxx:96
 RooNumIntConfig.cxx:97
 RooNumIntConfig.cxx:98
 RooNumIntConfig.cxx:99
 RooNumIntConfig.cxx:100
 RooNumIntConfig.cxx:101
 RooNumIntConfig.cxx:102
 RooNumIntConfig.cxx:103
 RooNumIntConfig.cxx:104
 RooNumIntConfig.cxx:105
 RooNumIntConfig.cxx:106
 RooNumIntConfig.cxx:107
 RooNumIntConfig.cxx:108
 RooNumIntConfig.cxx:109
 RooNumIntConfig.cxx:110
 RooNumIntConfig.cxx:111
 RooNumIntConfig.cxx:112
 RooNumIntConfig.cxx:113
 RooNumIntConfig.cxx:114
 RooNumIntConfig.cxx:115
 RooNumIntConfig.cxx:116
 RooNumIntConfig.cxx:117
 RooNumIntConfig.cxx:118
 RooNumIntConfig.cxx:119
 RooNumIntConfig.cxx:120
 RooNumIntConfig.cxx:121
 RooNumIntConfig.cxx:122
 RooNumIntConfig.cxx:123
 RooNumIntConfig.cxx:124
 RooNumIntConfig.cxx:125
 RooNumIntConfig.cxx:126
 RooNumIntConfig.cxx:127
 RooNumIntConfig.cxx:128
 RooNumIntConfig.cxx:129
 RooNumIntConfig.cxx:130
 RooNumIntConfig.cxx:131
 RooNumIntConfig.cxx:132
 RooNumIntConfig.cxx:133
 RooNumIntConfig.cxx:134
 RooNumIntConfig.cxx:135
 RooNumIntConfig.cxx:136
 RooNumIntConfig.cxx:137
 RooNumIntConfig.cxx:138
 RooNumIntConfig.cxx:139
 RooNumIntConfig.cxx:140
 RooNumIntConfig.cxx:141
 RooNumIntConfig.cxx:142
 RooNumIntConfig.cxx:143
 RooNumIntConfig.cxx:144
 RooNumIntConfig.cxx:145
 RooNumIntConfig.cxx:146
 RooNumIntConfig.cxx:147
 RooNumIntConfig.cxx:148
 RooNumIntConfig.cxx:149
 RooNumIntConfig.cxx:150
 RooNumIntConfig.cxx:151
 RooNumIntConfig.cxx:152
 RooNumIntConfig.cxx:153
 RooNumIntConfig.cxx:154
 RooNumIntConfig.cxx:155
 RooNumIntConfig.cxx:156
 RooNumIntConfig.cxx:157
 RooNumIntConfig.cxx:158
 RooNumIntConfig.cxx:159
 RooNumIntConfig.cxx:160
 RooNumIntConfig.cxx:161
 RooNumIntConfig.cxx:162
 RooNumIntConfig.cxx:163
 RooNumIntConfig.cxx:164
 RooNumIntConfig.cxx:165
 RooNumIntConfig.cxx:166
 RooNumIntConfig.cxx:167
 RooNumIntConfig.cxx:168
 RooNumIntConfig.cxx:169
 RooNumIntConfig.cxx:170
 RooNumIntConfig.cxx:171
 RooNumIntConfig.cxx:172
 RooNumIntConfig.cxx:173
 RooNumIntConfig.cxx:174
 RooNumIntConfig.cxx:175
 RooNumIntConfig.cxx:176
 RooNumIntConfig.cxx:177
 RooNumIntConfig.cxx:178
 RooNumIntConfig.cxx:179
 RooNumIntConfig.cxx:180
 RooNumIntConfig.cxx:181
 RooNumIntConfig.cxx:182
 RooNumIntConfig.cxx:183
 RooNumIntConfig.cxx:184
 RooNumIntConfig.cxx:185
 RooNumIntConfig.cxx:186
 RooNumIntConfig.cxx:187
 RooNumIntConfig.cxx:188
 RooNumIntConfig.cxx:189
 RooNumIntConfig.cxx:190
 RooNumIntConfig.cxx:191
 RooNumIntConfig.cxx:192
 RooNumIntConfig.cxx:193
 RooNumIntConfig.cxx:194
 RooNumIntConfig.cxx:195
 RooNumIntConfig.cxx:196
 RooNumIntConfig.cxx:197
 RooNumIntConfig.cxx:198
 RooNumIntConfig.cxx:199
 RooNumIntConfig.cxx:200
 RooNumIntConfig.cxx:201
 RooNumIntConfig.cxx:202
 RooNumIntConfig.cxx:203
 RooNumIntConfig.cxx:204
 RooNumIntConfig.cxx:205
 RooNumIntConfig.cxx:206
 RooNumIntConfig.cxx:207
 RooNumIntConfig.cxx:208
 RooNumIntConfig.cxx:209
 RooNumIntConfig.cxx:210
 RooNumIntConfig.cxx:211
 RooNumIntConfig.cxx:212
 RooNumIntConfig.cxx:213
 RooNumIntConfig.cxx:214
 RooNumIntConfig.cxx:215
 RooNumIntConfig.cxx:216
 RooNumIntConfig.cxx:217
 RooNumIntConfig.cxx:218
 RooNumIntConfig.cxx:219
 RooNumIntConfig.cxx:220
 RooNumIntConfig.cxx:221
 RooNumIntConfig.cxx:222
 RooNumIntConfig.cxx:223
 RooNumIntConfig.cxx:224
 RooNumIntConfig.cxx:225
 RooNumIntConfig.cxx:226
 RooNumIntConfig.cxx:227
 RooNumIntConfig.cxx:228
 RooNumIntConfig.cxx:229
 RooNumIntConfig.cxx:230
 RooNumIntConfig.cxx:231
 RooNumIntConfig.cxx:232
 RooNumIntConfig.cxx:233
 RooNumIntConfig.cxx:234
 RooNumIntConfig.cxx:235
 RooNumIntConfig.cxx:236
 RooNumIntConfig.cxx:237
 RooNumIntConfig.cxx:238
 RooNumIntConfig.cxx:239
 RooNumIntConfig.cxx:240
 RooNumIntConfig.cxx:241
 RooNumIntConfig.cxx:242
 RooNumIntConfig.cxx:243
 RooNumIntConfig.cxx:244
 RooNumIntConfig.cxx:245
 RooNumIntConfig.cxx:246
 RooNumIntConfig.cxx:247
 RooNumIntConfig.cxx:248
 RooNumIntConfig.cxx:249
 RooNumIntConfig.cxx:250
 RooNumIntConfig.cxx:251
 RooNumIntConfig.cxx:252
 RooNumIntConfig.cxx:253
 RooNumIntConfig.cxx:254
 RooNumIntConfig.cxx:255
 RooNumIntConfig.cxx:256
 RooNumIntConfig.cxx:257
 RooNumIntConfig.cxx:258
 RooNumIntConfig.cxx:259
 RooNumIntConfig.cxx:260
 RooNumIntConfig.cxx:261
 RooNumIntConfig.cxx:262
 RooNumIntConfig.cxx:263
 RooNumIntConfig.cxx:264
 RooNumIntConfig.cxx:265
 RooNumIntConfig.cxx:266
 RooNumIntConfig.cxx:267
 RooNumIntConfig.cxx:268
 RooNumIntConfig.cxx:269
 RooNumIntConfig.cxx:270
 RooNumIntConfig.cxx:271
 RooNumIntConfig.cxx:272
 RooNumIntConfig.cxx:273
 RooNumIntConfig.cxx:274
 RooNumIntConfig.cxx:275
 RooNumIntConfig.cxx:276
 RooNumIntConfig.cxx:277
 RooNumIntConfig.cxx:278
 RooNumIntConfig.cxx:279
 RooNumIntConfig.cxx:280
 RooNumIntConfig.cxx:281
 RooNumIntConfig.cxx:282
 RooNumIntConfig.cxx:283
 RooNumIntConfig.cxx:284
 RooNumIntConfig.cxx:285
 RooNumIntConfig.cxx:286
 RooNumIntConfig.cxx:287
 RooNumIntConfig.cxx:288
 RooNumIntConfig.cxx:289
 RooNumIntConfig.cxx:290
 RooNumIntConfig.cxx:291
 RooNumIntConfig.cxx:292
 RooNumIntConfig.cxx:293
 RooNumIntConfig.cxx:294
 RooNumIntConfig.cxx:295
 RooNumIntConfig.cxx:296
 RooNumIntConfig.cxx:297
 RooNumIntConfig.cxx:298
 RooNumIntConfig.cxx:299
 RooNumIntConfig.cxx:300
 RooNumIntConfig.cxx:301
 RooNumIntConfig.cxx:302
 RooNumIntConfig.cxx:303
 RooNumIntConfig.cxx:304
 RooNumIntConfig.cxx:305
 RooNumIntConfig.cxx:306
 RooNumIntConfig.cxx:307
 RooNumIntConfig.cxx:308
 RooNumIntConfig.cxx:309
 RooNumIntConfig.cxx:310
 RooNumIntConfig.cxx:311
 RooNumIntConfig.cxx:312
 RooNumIntConfig.cxx:313
 RooNumIntConfig.cxx:314
 RooNumIntConfig.cxx:315
 RooNumIntConfig.cxx:316
 RooNumIntConfig.cxx:317
 RooNumIntConfig.cxx:318
 RooNumIntConfig.cxx:319
 RooNumIntConfig.cxx:320
 RooNumIntConfig.cxx:321
 RooNumIntConfig.cxx:322
 RooNumIntConfig.cxx:323
 RooNumIntConfig.cxx:324
 RooNumIntConfig.cxx:325
 RooNumIntConfig.cxx:326
 RooNumIntConfig.cxx:327
 RooNumIntConfig.cxx:328
 RooNumIntConfig.cxx:329
 RooNumIntConfig.cxx:330
 RooNumIntConfig.cxx:331
 RooNumIntConfig.cxx:332
 RooNumIntConfig.cxx:333
 RooNumIntConfig.cxx:334
 RooNumIntConfig.cxx:335
 RooNumIntConfig.cxx:336
 RooNumIntConfig.cxx:337
 RooNumIntConfig.cxx:338
 RooNumIntConfig.cxx:339
 RooNumIntConfig.cxx:340
 RooNumIntConfig.cxx:341
 RooNumIntConfig.cxx:342
 RooNumIntConfig.cxx:343
 RooNumIntConfig.cxx:344
 RooNumIntConfig.cxx:345