ROOT logo
 /***************************************************************************** 
  * Project: RooFit                                                           * 
  *                                                                           * 
  * 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
// RooAbsCachedReal is the abstract base class for functions that need or
// want to cache their evaluate() output in a RooHistFunc defined in
// terms of the used observables. This base class manages the creation
// and storage of all RooHistFunc cache p.d.fs and the RooDataHists
// that define their shape. Implementations of RooAbsCachedReal must
// define member function fillCacheObject() which serves to fill an
// already created RooDataHist with the functions function values. In
// addition the member functions actualObservables() and
// actualParameters() must be define which report what the actual
// observables to be cached are for a given set of observables passed
// by the user to getVal() and on which parameters need to be tracked
// for changes to trigger a refilling of the cache histogram.
// END_HTML
//

#include "Riostream.h" 
using namespace std ;

#include "RooFit.h"
#include "TString.h"
#include "RooAbsCachedReal.h" 
#include "RooAbsReal.h" 
#include "RooMsgService.h"
#include "RooDataHist.h"
#include "RooHistFunc.h"
#include "RooChangeTracker.h"
#include "RooExpensiveObjectCache.h"

ClassImp(RooAbsCachedReal) 



//_____________________________________________________________________________
RooAbsCachedReal::RooAbsCachedReal(const char *name, const char *title, Int_t ipOrder) :
  RooAbsReal(name,title), 
  _cacheMgr(this,10),
  _ipOrder(ipOrder),
  _disableCache(kFALSE)
 { 
   // Constructor
 } 



//_____________________________________________________________________________
RooAbsCachedReal::RooAbsCachedReal(const RooAbsCachedReal& other, const char* name) :  
   RooAbsReal(other,name), 
   _cacheMgr(other._cacheMgr,this),
   _ipOrder(other._ipOrder),
   _disableCache(other._disableCache)
 { 
   // Copy constructor
 } 



//_____________________________________________________________________________
RooAbsCachedReal::~RooAbsCachedReal() 
{
  // Destructor
}



//_____________________________________________________________________________
Double_t RooAbsCachedReal::getValV(const RooArgSet* nset) const 
{
  // Implementation of getVal() overriding default implementation
  // of RooAbsReal. Return value stored in cache p.d.f
  // rather than return value of evaluate() which is undefined
  // for RooAbsCachedReal

  if (_disableCache) {
    return RooAbsReal::getValV(nset) ;
  }

  // Cannot call cached p.d.f w.o nset
  // if (!nset) return evaluate() ;

  // Calculate current unnormalized value of object
  // coverity[NULL_RETURNS]
  FuncCacheElem* cache = getCache(nset) ;
 
  _value = cache->func()->getVal() ;

  return _value ;
}



//_____________________________________________________________________________
void RooAbsCachedReal::clearCacheObject(FuncCacheElem& cache) const 
{
  // Mark all bins as unitialized (value -1)
  cache.hist()->setAllWeights(-1) ;  
}



//_____________________________________________________________________________
RooAbsCachedReal::FuncCacheElem* RooAbsCachedReal::createCache(const RooArgSet* nset) const
{
  // Interface function to create an internal cache object that represent
  // each cached function configuration. This interface allows to create and
  // return a class derived from RooAbsCachedReal::FuncCacheElem so that
  // a derived class fillCacheObject implementation can utilize extra functionality
  // defined in such a derived cache class

  return new FuncCacheElem(const_cast<RooAbsCachedReal&>(*this),nset) ;
}



//_____________________________________________________________________________
RooAbsCachedReal::FuncCacheElem* RooAbsCachedReal::getCache(const RooArgSet* nset) const
{
  // Retrieve cache corresponding to observables in nset
 
  // Check if this configuration was created becfore
  Int_t sterileIdx(-1) ;
  FuncCacheElem* cache = (FuncCacheElem*) _cacheMgr.getObj(nset,0,&sterileIdx) ;
  if (cache) {
    if (cache->paramTracker()->hasChanged(kTRUE)) {
      ccoutD(Eval) << "RooAbsCachedReal::getCache(" << GetName() << ") cached function " 
		  << cache->func()->GetName() << " requires recalculation as parameters changed" << endl ;
      fillCacheObject(*cache) ;  
      cache->func()->setValueDirty() ;
    }
    return cache ;
  }

  cache = createCache(nset) ;

  // Set cache function data to ADirty since function will need update every time in cache update process
  RooFIter iarg( cache->hist()->get()->fwdIterator() );
  RooAbsArg *arg(0);
  while ( (arg=iarg.next()) ) {
    arg->setOperMode(ADirty);
  }

  // Check if we have contents registered already in global expensive object cache 
  RooDataHist* htmp = (RooDataHist*) expensiveObjectCache().retrieveObject(cache->hist()->GetName(),RooDataHist::Class(),cache->paramTracker()->parameters()) ;

  if (htmp) {    

    cache->hist()->reset() ;
    cache->hist()->add(*htmp) ;

  } else {

    fillCacheObject(*cache) ;  

    RooDataHist* eoclone = new RooDataHist(*cache->hist()) ;
    eoclone->removeSelfFromDir() ;
    expensiveObjectCache().registerObject(GetName(),cache->hist()->GetName(),*eoclone,cache->paramTracker()->parameters()) ;
  } 

  // Store this cache configuration
  Int_t code = _cacheMgr.setObj(nset,0,((RooAbsCacheElement*)cache),0) ;
  ccoutD(Caching) << "RooAbsCachedReal("<<this<<")::getCache(" << GetName() << ") creating new cache " << cache->func()->GetName() << " for nset " << (nset?*nset:RooArgSet()) << " with code " << code << endl ;
  
  return cache ;
}



//_____________________________________________________________________________
RooAbsCachedReal::FuncCacheElem::FuncCacheElem(const RooAbsCachedReal& self, const RooArgSet* nset) 
{
  // Constructor of cache storage unit class
  //
  // Create RooDataHist that will cache function values and create
  // RooHistFunc that represent s RooDataHist shape as function, create
  // meta object that tracks changes in declared parameters of p.d.f
  // through actualParameters() 

  // Disable source caching by default
  _cacheSource = kFALSE ;
  _sourceClone = 0 ;

  RooArgSet* nset2 = self.actualObservables(nset?*nset:RooArgSet()) ;

  RooArgSet orderedObs ;
  self.preferredObservableScanOrder(*nset2,orderedObs) ;

  // Create RooDataHist
  TString hname = self.inputBaseName() ;
  hname.Append("_CACHEHIST") ;
  hname.Append(self.cacheNameSuffix(*nset2)) ;

  _hist = new RooDataHist(hname,hname,*nset2,self.binningName()) ;
  _hist->removeSelfFromDir() ;

  RooArgSet* observables= self.actualObservables(*nset2) ;

  // Create RooHistFunc
  TString funcname = self.inputBaseName() ;
  funcname.Append("_CACHE") ;
  funcname.Append(self.cacheNameSuffix(*nset2)) ;
  _func = new RooHistFunc(funcname,funcname,*observables,*_hist,self.getInterpolationOrder()) ;
  if (self.operMode()==ADirty) _func->setOperMode(ADirty) ;

  // Set initial state of cache to dirty
  _func->setValueDirty() ;

  // Create pseudo-object that tracks changes in parameter values
  RooArgSet* params = self.actualParameters(orderedObs) ;
  string name= Form("%s_CACHEPARAMS",_func->GetName()) ;
  _paramTracker = new RooChangeTracker(name.c_str(),name.c_str(),*params,kTRUE) ;
  _paramTracker->hasChanged(kTRUE) ; // clear dirty flag as cache is up-to-date upon creation

  // Introduce formal dependency of RooHistFunc on parameters so that const optimization code
  // makes the correct decisions
  _func->addServerList(*params) ;


  delete observables ;
  delete params ;
  delete nset2 ;
  
}


//_____________________________________________________________________________
RooAbsCachedReal::FuncCacheElem::~FuncCacheElem()
{
  if (_sourceClone) { delete _sourceClone ; }
  delete _paramTracker ;
  delete _func ;
  delete _hist ;
}




//_____________________________________________________________________________
TString RooAbsCachedReal::cacheNameSuffix(const RooArgSet& nset) const 
{
  // Construct unique suffix name for cache p.d.f object 

  TString name ;
  name.Append("_Obs[") ;
  if (nset.getSize()>0) {
    TIterator* iter = nset.createIterator() ;
    RooAbsArg* arg ;
    Bool_t first(kTRUE) ;
    while((arg=(RooAbsArg*)iter->Next())) {
      if (first) {
	first=kFALSE ;
      } else {
	name.Append(",") ;
      }
      name.Append(arg->GetName()) ;
    }
    delete iter ;
  }

  name.Append("]") ;
  const char* payloadUS = payloadUniqueSuffix() ;
  if (payloadUS) {
    name.Append(payloadUS) ;
  }
  return name ;
}



//_____________________________________________________________________________
void RooAbsCachedReal::setInterpolationOrder(Int_t order) 
{
  // Set interpolation order of RooHistFunct representing cache histogram

  _ipOrder = order ;

  for (Int_t i=0 ; i<_cacheMgr.cacheSize() ; i++) {
    FuncCacheElem* cache = (FuncCacheElem*) _cacheMgr.getObjByIndex(i) ;
    if (cache) {
      cache->func()->setInterpolationOrder(order) ;
    }
  }
}



//_____________________________________________________________________________
RooArgList RooAbsCachedReal::FuncCacheElem::containedArgs(Action) 
{
  // Return list of contained RooAbsArg objects
  RooArgList ret(*func()) ;

  ret.add(*_paramTracker) ;
  if (_sourceClone) {
    ret.add(*_sourceClone) ;
  }
  return ret ;
}


//_____________________________________________________________________________
void RooAbsCachedReal::FuncCacheElem::printCompactTreeHook(ostream& os, const char* indent, Int_t curElem, Int_t maxElem) 
{
  // Print contents of cache when printing self as part of object tree

  if (curElem==0) {
    os << indent << "--- RooAbsCachedReal begin cache ---" << endl ;
  }

  TString indent2(indent) ;
  indent2 += Form("[%d] ",curElem) ;
  func()->printCompactTree(os,indent2) ;

  if (curElem==maxElem) {
    os << indent << "--- RooAbsCachedReal end cache --- " << endl ;
  }
}



//_____________________________________________________________________________
Int_t RooAbsCachedReal::getAnalyticalIntegralWN(RooArgSet& allVars, RooArgSet& analVars, const RooArgSet* normSet, const char* rangeName) const 
{
  // Return analytical integration capabilities of the RooHistFunc that corresponds to the set of observables in allVars

  FuncCacheElem* cache = getCache(normSet?normSet:&allVars) ;
  Int_t code = cache->func()->getAnalyticalIntegralWN(allVars,analVars,normSet,rangeName) ;
  _anaIntMap[code].first = &allVars ;
  _anaIntMap[code].second = normSet ;
  return code ;
}



//_____________________________________________________________________________
Double_t RooAbsCachedReal::analyticalIntegralWN(Int_t code, const RooArgSet* normSet, const char* rangeName) const
{  
  // Forward call to implementation in relevant RooHistFunc instance

  if (code==0) {
    return getVal(normSet) ; 
  }  

  const RooArgSet* anaVars = _anaIntMap[code].first ;
  const RooArgSet* normSet2 = _anaIntMap[code].second ;

  FuncCacheElem* cache = getCache(normSet2?normSet2:anaVars) ;
  return cache->func()->analyticalIntegralWN(code,normSet,rangeName) ;
  
}





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