ROOT logo
/*****************************************************************************
 * Project: RooFit                                                           *
 * Package: RooFitCore                                                       *
 * @(#)root/roofitcore:$Id: RooAbsGenContext.cxx 28259 2009-04-16 16:21:16Z wouter $
 * 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
// RooAbsGenContext is the abstract base class for generator contexts of 
// RooAbsPdf objects. A generator context is an object that controls
// the generation of events from a given p.d.f in one or more sessions.
// This class defines the common interface for all such contexts and organizes
// storage of common components, such as the observables definition, the 
// prototype data etc..
// END_HTML
//
//

#include "RooFit.h"

#include "TClass.h"

#include "RooAbsGenContext.h"
#include "RooAbsGenContext.h"
#include "RooAbsPdf.h"
#include "RooDataSet.h"
#include "RooMsgService.h"
#include "RooGlobalFunc.h"

#include "Riostream.h"


ClassImp(RooAbsGenContext)
;


//_____________________________________________________________________________
RooAbsGenContext::RooAbsGenContext(const RooAbsPdf& model, const RooArgSet &vars,
				   const RooDataSet *prototype, const RooArgSet* auxProto, Bool_t verbose) :
  TNamed(model), 
  _prototype(prototype), 
  _theEvent(0), 
  _isValid(kTRUE),
  _verbose(verbose),
  _protoOrder(0),
  _genData(0)
{
  // Constructor

  // Check PDF dependents 
  if (model.recursiveCheckObservables(&vars)) {
    coutE(Generation) << "RooAbsGenContext::ctor: Error in PDF dependents" << endl ;
    _isValid = kFALSE ;
    return ;
  }

  // Make a snapshot of the generated variables that we can overwrite.
  _theEvent= (RooArgSet*)vars.snapshot(kFALSE);

  // Analyze the prototype dataset, if one is specified
  _nextProtoIndex= 0;
  if(0 != _prototype) {
    TIterator *protoIterator= _prototype->get()->createIterator();
    const RooAbsArg *proto = 0;
    while((proto= (const RooAbsArg*)protoIterator->Next())) {
      // is this variable being generated or taken from the prototype?
      if(!_theEvent->contains(*proto)) {
	_protoVars.add(*proto);
	_theEvent->addClone(*proto);
      }
    }
    delete protoIterator;
  }

  // Add auxiliary protovars to _protoVars, if provided
  if (auxProto) {
    _protoVars.add(*auxProto) ;
    _theEvent->addClone(*auxProto) ; 
  }

  // Remember the default number of events to generate when no prototype dataset is provided.
  _extendMode = model.extendMode() ;
  if (model.canBeExtended()) {
    _expectedEvents= (Int_t)(model.expectedEvents(_theEvent) + 0.5);
  } else {
    _expectedEvents= 0 ;
  }
}



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

  if(0 != _theEvent) delete _theEvent;
  if (_protoOrder) delete[] _protoOrder ;
}



//_____________________________________________________________________________
void RooAbsGenContext::attach(const RooArgSet& /*params*/) 
{
  // Interface to attach given parameters to object in this context
}



//_____________________________________________________________________________
RooDataSet *RooAbsGenContext::generate(Int_t nEvents) 
{
  // Generate the specified number of events with nEvents>0 and
  // and return a dataset containing the generated events. With nEvents<=0,
  // generate the number of events in the prototype dataset, if available,
  // or else the expected number of events, if non-zero. The returned
  // dataset belongs to the caller. Return zero in case of an error.
  // Generation of individual events is delegated to a virtual generateEvent()
  // method. A virtual initGenerator() method is also called just before the
  // first call to generateEvent().
  
  if(!isValid()) {
    coutE(Generation) << ClassName() << "::" << GetName() << ": context is not valid" << endl;
    return 0;
  }

  // Calculate the expected number of events if necessary
  if(nEvents <= 0) {
    if(_prototype) {
      nEvents= (Int_t)_prototype->numEntries();
    }
    else {
      if (_extendMode == RooAbsPdf::CanNotBeExtended) {
	coutE(Generation) << ClassName() << "::" << GetName()
	     << ":generate: PDF not extendable: cannot calculate expected number of events" << endl;
	return 0;	
      }
      nEvents= _expectedEvents;
    }
    if(nEvents <= 0) {
      coutE(Generation) << ClassName() << "::" << GetName()
			<< ":generate: cannot calculate expected number of events" << endl;
      return 0;
    }
    coutI(Generation) << ClassName() << "::" << GetName() << ":generate: will generate "
		      << nEvents << " events" << endl;
  }

  // check that any prototype dataset still defines the variables we need
  // (this is necessary since we never make a private clone, for efficiency)
  if(_prototype) {
    const RooArgSet *vars= _prototype->get();
    TIterator *iterator= _protoVars.createIterator();
    const RooAbsArg *arg = 0;
    Bool_t ok(kTRUE);
    while((arg= (const RooAbsArg*)iterator->Next())) {
      if(vars->contains(*arg)) continue;
      coutE(InputArguments) << ClassName() << "::" << GetName() << ":generate: prototype dataset is missing \""
			    << arg->GetName() << "\"" << endl;

      // WVE disable this for the moment
      // ok= kFALSE;
    }
    delete iterator;
    if(!ok) return 0;
  }

  if (_verbose) Print("v") ;

  // create a new dataset
  TString name(GetName()),title(GetTitle());
  name.Append("Data");
  title.Prepend("Generated From ");
  
  _genData = new RooDataSet(name.Data(), title.Data(), *_theEvent);

  // Perform any subclass implementation-specific initialization
  initGenerator(*_theEvent);
  
  // Loop over the events to generate
  Int_t evt(0) ;
  while(_genData->numEntries()<nEvents) {
    
    // first, load values from the prototype dataset, if one was provided
    if(0 != _prototype) {
      if(_nextProtoIndex >= _prototype->numEntries()) _nextProtoIndex= 0;

      Int_t actualProtoIdx = _protoOrder ? _protoOrder[_nextProtoIndex] : _nextProtoIndex ;

      const RooArgSet *subEvent= _prototype->get(actualProtoIdx);
      _nextProtoIndex++;
      if(0 != subEvent) {
	*_theEvent= *subEvent;
      }
      else {
	coutE(Generation) << ClassName() << "::" << GetName() << ":generate: cannot load event "
			  << actualProtoIdx << " from prototype dataset" << endl;
	return 0;
      }
    }

    // delegate the generation of the rest of this event to our subclass implementation
    generateEvent(*_theEvent, nEvents - _genData->numEntries());

    _genData->addFast(*_theEvent);
    evt++ ;
  }

  RooDataSet* output = _genData ;
  _genData = 0 ;

  return output;
}



//_____________________________________________________________________________
void RooAbsGenContext::initGenerator(const RooArgSet&) 
{
  // Interface function to initialize context for generation for given
  // set of observables
}



//_____________________________________________________________________________
void RooAbsGenContext::printName(ostream& os) const 
{
  // Print name of context

  os << GetName() ;
}



//_____________________________________________________________________________
void RooAbsGenContext::printTitle(ostream& os) const 
{
  // Print title of context

  os << GetTitle() ;
}



//_____________________________________________________________________________
void RooAbsGenContext::printClassName(ostream& os) const 
{
  // Print class name of context

  os << IsA()->GetName() ;
}



//_____________________________________________________________________________
void RooAbsGenContext::printArgs(ostream& os) const 
{
  // Print arguments of context, i.e. the observables being generated in this context

  os << "[ " ;    
  TIterator* iter = _theEvent->createIterator() ;
  RooAbsArg* arg ;
  Bool_t first(kTRUE) ;
  while((arg=(RooAbsArg*)iter->Next())) {
    if (first) {
      first=kFALSE ;
    } else {
      os << "," ;
    }
    os << arg->GetName() ;
  }    
  os << "]" ;
  delete iter ;
}



//_____________________________________________________________________________
void RooAbsGenContext::printMultiline(ostream &/*os*/, Int_t /*contents*/, Bool_t /*verbose*/, TString /*indent*/) const
{
  // Interface for multi-line printing
}




//_____________________________________________________________________________
void RooAbsGenContext::setProtoDataOrder(Int_t* lut)
{
  // Set the traversal order of prototype data to that in the lookup tables
  // passed as argument. The LUT must be an array of integers with the same
  // size as the number of entries in the prototype dataset and must contain
  // integer values in the range [0,Nevt-1]

  // Delete any previous lookup table
  if (_protoOrder) {
    delete[] _protoOrder ;
    _protoOrder = 0 ;
  }
  
  // Copy new lookup table if provided and needed
  if (lut && _prototype) {
    Int_t n = _prototype->numEntries() ;
    _protoOrder = new Int_t[n] ;
    Int_t i ;
    for (i=0 ; i<n ; i++) {
      _protoOrder[i] = lut[i] ;
    }
  }
}




//_____________________________________________________________________________
void RooAbsGenContext::resampleData(Double_t& ratio) 
{
  // Rescale existing output buffer with given ratio


  Int_t nOrig = _genData->numEntries() ;
  Int_t nTarg = Int_t(nOrig*ratio+0.5) ;
  RooDataSet* trimmedData = (RooDataSet*) _genData->reduce(RooFit::EventRange(0,nTarg)) ;

  cxcoutD(Generation) << "RooGenContext::resampleData*( existing production trimmed from " << nOrig << " to " << trimmedData->numEntries() << " events" << endl ;

  delete _genData ;
  _genData = trimmedData ;

  if (_prototype) {
    // Push back proto index by trimmed amount to force recycling of the
    // proto entries that were trimmed away
    _nextProtoIndex -= (nOrig-nTarg) ;
    while (_nextProtoIndex<0) {
      _nextProtoIndex += _prototype->numEntries() ;
    }
  }  

}




//_____________________________________________________________________________
Int_t RooAbsGenContext::defaultPrintContents(Option_t* /*opt*/) const 
{
  // Define default contents when printing
  return kName|kClassName|kValue ;
}



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