/*****************************************************************************
 * 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
// RooNumGenConfig 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 "RooNumGenConfig.h"
#include "RooArgSet.h"
#include "RooAbsNumGenerator.h"
#include "RooNumGenFactory.h"
#include "RooMsgService.h"

#include "TClass.h"



using namespace std;

ClassImp(RooNumGenConfig)
;

RooNumGenConfig* RooNumGenConfig::_default = 0 ;


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



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



//_____________________________________________________________________________
RooNumGenConfig::RooNumGenConfig() : 
  _method1D("method1D","1D sampling method"),
  _method1DCat("method1DCat","1D sampling method for pdfs with categories"),
  _method1DCond("method1DCond","1D sampling method for conditional pfs"),
  _method1DCondCat("method1DCond","1D sampling method for conditional pfs with categories"),
  _method2D("method2D","2D sampling method"),
  _method2DCat("method2DCat","2D sampling method for pdfs with categories"),
  _method2DCond("method2DCond","2D sampling method for conditional pfs"),
  _method2DCondCat("method2DCond","2D sampling method for conditional pfs with categories"),
  _methodND("methodND","ND sampling method"),
  _methodNDCat("methodNDCat","ND sampling method for pdfs with categories"),
  _methodNDCond("methodNDCond","ND sampling method for conditional pfs"),
  _methodNDCondCat("methodNDCond","ND sampling method for conditional pfs with categories")
{
  // 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) ;
  _method1DCat.defineType("N/A",0) ;
  _method1DCond.defineType("N/A",0) ;
  _method1DCondCat.defineType("N/A",0) ;

  _method2D.defineType("N/A",0) ;
  _method2DCat.defineType("N/A",0) ;
  _method2DCond.defineType("N/A",0) ;
  _method2DCondCat.defineType("N/A",0) ;

  _methodND.defineType("N/A",0) ;
  _methodNDCat.defineType("N/A",0) ;
  _methodNDCond.defineType("N/A",0) ;
  _methodNDCondCat.defineType("N/A",0) ;
}


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

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


//_____________________________________________________________________________
RooNumGenConfig::RooNumGenConfig(const RooNumGenConfig& other) :
  TObject(other), RooPrintable(other),
  _method1D(other._method1D),
  _method1DCat(other._method1DCat),
  _method1DCond(other._method1DCond),
  _method1DCondCat(other._method1DCondCat),
  _method2D(other._method2D),
  _method2DCat(other._method2DCat),
  _method2DCond(other._method2DCond),
  _method2DCondCat(other._method2DCondCat),
  _methodND(other._methodND),
  _methodNDCat(other._methodNDCat),
  _methodNDCond(other._methodNDCond),
  _methodNDCondCat(other._methodNDCondCat)
{
  // 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 ;
}


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

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

  // Copy common properties
  _method1D.setIndex(other._method1D.getIndex()) ;
  _method1DCat.setIndex(other._method1DCat.getIndex()) ;
  _method1DCond.setIndex(other._method1DCond.getIndex()) ;
  _method1DCondCat.setIndex(other._method1DCondCat.getIndex()) ;

  _method2D.setIndex(other._method2D.getIndex()) ;
  _method2DCat.setIndex(other._method2DCat.getIndex()) ;
  _method2DCond.setIndex(other._method2DCond.getIndex()) ;
  _method2DCondCat.setIndex(other._method2DCondCat.getIndex()) ;

  _methodND.setIndex(other._methodND.getIndex()) ;
  _methodNDCat.setIndex(other._methodNDCat.getIndex()) ;
  _methodNDCond.setIndex(other._methodNDCond.getIndex()) ;
  _methodNDCondCat.setIndex(other._methodNDCondCat.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 ;
}




//_____________________________________________________________________________
RooCategory& RooNumGenConfig::method1D(Bool_t cond, Bool_t cat) 
{
  if (cond && cat) return _method1DCondCat ;
  if (cond) return _method1DCond ;
  if (cat) return _method1DCat ;
  return _method1D ;
}



//_____________________________________________________________________________
RooCategory& RooNumGenConfig::method2D(Bool_t cond, Bool_t cat) 
{
  if (cond && cat) return _method2DCondCat ;
  if (cond) return _method2DCond ;
  if (cat) return _method2DCat ;
  return _method2D ;
}



//_____________________________________________________________________________
RooCategory& RooNumGenConfig::methodND(Bool_t cond, Bool_t cat) 
{
  if (cond && cat) return _methodNDCondCat ;
  if (cond) return _methodNDCond ;
  if (cat) return _methodNDCat ;
  return _methodND ;
}



//_____________________________________________________________________________
const RooCategory& RooNumGenConfig::method1D(Bool_t cond, Bool_t cat) const 
{
  return const_cast<RooNumGenConfig*>(this)->method1D(cond,cat) ;
}



//_____________________________________________________________________________
const RooCategory& RooNumGenConfig::method2D(Bool_t cond, Bool_t cat) const 
{
  return const_cast<RooNumGenConfig*>(this)->method2D(cond,cat) ;
}



//_____________________________________________________________________________
const RooCategory& RooNumGenConfig::methodND(Bool_t cond, Bool_t cat) const 
{
  return const_cast<RooNumGenConfig*>(this)->methodND(cond,cat) ;
}



//_____________________________________________________________________________
Bool_t RooNumGenConfig::addConfigSection(const RooAbsNumGenerator* 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
  
  _method1D.defineType(name) ;
  _method2D.defineType(name) ; 
  _methodND.defineType(name) ;

  if (proto->canSampleConditional()) {
    _method1DCond.defineType(name) ;
    _method2DCond.defineType(name) ;
    _methodNDCond.defineType(name) ;
  }
  if (proto->canSampleCategories()) {
    _method1DCat.defineType(name) ;
    _method2DCat.defineType(name) ;
    _methodNDCat.defineType(name) ;
  }

  if (proto->canSampleConditional() && proto->canSampleCategories()) {
    _method1DCondCat.defineType(name) ;
    _method2DCondCat.defineType(name) ;
    _methodNDCondCat.defineType(name) ;
  }
  
  // Store default configuration parameters
  RooArgSet* config = (RooArgSet*) inDefaultConfig.snapshot() ;
  config->setName(name) ;
  _configSets.Add(config) ;

  return kFALSE ;
}



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

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


//_____________________________________________________________________________
const RooArgSet& RooNumGenConfig::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) << "RooNumGenConfig::getIntegrator: ERROR: no configuration stored for integrator '" << name << "'" << endl ;
    return dummy ;
  }
  return *config ;
}


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

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

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



//_____________________________________________________________________________
void RooNumGenConfig::printMultiline(ostream &os, Int_t /*content*/, Bool_t verbose, TString indent) const
{
  // Detailed printing interface
  os << endl ;
  os << indent << "1-D sampling method: " << _method1D.getLabel() << endl ;
  if (_method1DCat.getIndex()!=_method1D.getIndex()) {
    os << " (" << _method1DCat.getLabel() << " if with categories)" << endl ;
  }
  if (_method1DCond.getIndex()!=_method1D.getIndex()) {
    os << " (" << _method1DCond.getLabel() << " if conditional)" << endl ;
  }
  if (_method1DCondCat.getIndex()!=_method1D.getIndex()) {
    os << " (" << _method1DCondCat.getLabel() << " if conditional with categories)" << endl ;    
  }
  os << endl ;

  os << indent << "2-D sampling method: " << _method2D.getLabel() << endl ;
  if (_method2DCat.getIndex()!=_method2D.getIndex()) {
    os << " (" << _method2DCat.getLabel() << " if with categories)" << endl ;
  }
  if (_method2DCond.getIndex()!=_method2D.getIndex()) {
    os << " (" << _method2DCond.getLabel() << " if conditional)" << endl ;
  }
  if (_method2DCondCat.getIndex()!=_method2D.getIndex()) {
    os << " (" << _method2DCondCat.getLabel() << " if conditional with categories)" << endl ;
  }
  os << endl ;

  os << indent << "N-D sampling method: " << _methodND.getLabel() << endl ;
  if (_methodNDCat.getIndex()!=_methodND.getIndex()) {
    os << " (" << _methodNDCat.getLabel() << " if with categories)" << endl ;
  }
  if (_methodNDCond.getIndex()!=_methodND.getIndex()) {
    os << " (" << _methodNDCond.getLabel() << " if conditional)" << endl ;
  }
  if (_methodNDCondCat.getIndex()!=_methodND.getIndex()) {
    os << " (" << _methodNDCondCat.getLabel() << " if conditional with categories)" << endl ;
  }
  os << endl ;
   
  if (verbose) {

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

      os << indent << "*** " << configSet->GetName() << " ***" << endl ;
      os << indent << "Capabilities: " ;
      const RooAbsNumGenerator* proto = RooNumGenFactory::instance().getProtoSampler(configSet->GetName()) ;
     if (proto->canSampleConditional()) os << "[Conditional] " ;
     if (proto->canSampleCategories()) os << "[Categories] " ;
      os << endl ;

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

    }

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