ROOT logo
/*****************************************************************************
 * Project: RooFit                                                           *
 * Package: RooFitCore                                                       *
 * @(#)root/roofitcore:$Id: RooRealIntegral.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
// RooRealIntegral performs hybrid numerical/analytical integrals of RooAbsReal objects
// The class performs none of the actual integration, but only manages the logic
// of what variables can be integrated analytically, accounts for eventual jacobian
// terms and defines what numerical integrations needs to be done to complement the
// analytical integral.
// <p>
// The actual analytical integrations (if any) are done in the PDF themselves, the numerical
// integration is performed in the various implemenations of the RooAbsIntegrator base class.
// END_HTML
//

#include "RooFit.h"

#include "TClass.h"
#include "RooMsgService.h"
#include "Riostream.h"
#include "TObjString.h"
#include "TH1.h"
#include "RooRealIntegral.h"
#include "RooArgSet.h"
#include "RooAbsRealLValue.h"
#include "RooAbsCategoryLValue.h"
#include "RooRealBinding.h"
#include "RooRealAnalytic.h"
#include "RooInvTransform.h"
#include "RooSuperCategory.h"
#include "RooNumIntFactory.h"
#include "RooNumIntConfig.h"
#include "RooNameReg.h"
#include "RooExpensiveObjectCache.h"
#include "RooConstVar.h"
#include "RooDouble.h"

ClassImp(RooRealIntegral) 
;


Bool_t RooRealIntegral::_cacheExpensive(kTRUE) ;


//_____________________________________________________________________________
RooRealIntegral::RooRealIntegral() : 
  _valid(kFALSE),
  _numIntEngine(0),
  _numIntegrand(0),
  _params(0)
{
  _facListIter = _facList.createIterator() ;
  _jacListIter = _jacList.createIterator() ;
}



//_____________________________________________________________________________
RooRealIntegral::RooRealIntegral(const char *name, const char *title, 
				 const RooAbsReal& function, const RooArgSet& depList,
				 const RooArgSet* funcNormSet, const RooNumIntConfig* config,
				 const char* rangeName) :
  RooAbsReal(name,title), 
  _valid(kTRUE), 
  _sumList("!sumList","Categories to be summed numerically",this,kFALSE,kFALSE), 
  _intList("!intList","Variables to be integrated numerically",this,kFALSE,kFALSE), 
  _anaList("!anaList","Variables to be integrated analytically",this,kFALSE,kFALSE), 
  _jacList("!jacList","Jacobian product term",this,kFALSE,kFALSE), 
  _facList("!facList","Variables independent of function",this,kFALSE,kTRUE),
  _facListIter(_facList.createIterator()),
  _jacListIter(_jacList.createIterator()),
  _function("!func","Function to be integrated",this,
	    const_cast<RooAbsReal&>(function),kFALSE,kFALSE), 
  _iconfig((RooNumIntConfig*)config),
  _sumCat("!sumCat","SuperCategory for summation",this,kFALSE,kFALSE),
  _sumCatIter(0),
  _mode(0),
  _intOperMode(Hybrid), 
  _restartNumIntEngine(kFALSE),
  _numIntEngine(0), 
  _numIntegrand(0),
  _rangeName((TNamed*)RooNameReg::ptr(rangeName)),
  _params(0)
{
  // Construct integral of 'function' over observables in 'depList'
  // in range 'rangeName'  with normalization observables 'funcNormSet' 
  // (for p.d.f.s). In the integral is performed to the maximum extent
  // possible the internal (analytical) integrals advertised by function.
  // The other integrations are performed numerically. The optional
  // config object prescribes how these numeric integrations are configured.
  //

  //   A) Check that all dependents are lvalues 
  //
  //   B) Check if list of dependents can be re-expressed in        
  //      lvalues that are higher in the expression tree            
  //
  //   C) Check for dependents that the PDF insists on integrating  
  //      analytically iself                                        
  //
  //   D) Make list of servers that can be integrated analytically  
  //      Add all parameters/dependents as value/shape servers      
  //
  //   E) Interact with function to make list of objects actually integrated analytically   
  //
  //   F) Make list of numerical integration variables consisting of:               
  //     - Category dependents of RealLValues in analytical integration             
  //     - Leaf nodes server lists of function server that are not analytically integrated   
  //     - Make Jacobian list for analytically integrated RealLValues            
  //
  //   G) Split numeric list in integration list and summation list   
  //

  oocxcoutI(&function,Integration) << "RooRealIntegral::ctor(" << GetName() << ") Constructing integral of function " 
				     << function.GetName() << " over observables" << depList << " with normalization " 
				     << (funcNormSet?*funcNormSet:RooArgSet()) << " with range identifier " 
				     << (rangeName?rangeName:"<none>") << endl ;

  
  // Choose same expensive object cache as integrand
  setExpensiveObjectCache(function.expensiveObjectCache()) ;

  // Use objects integrator configuration if none is specified
  if (!_iconfig) _iconfig = (RooNumIntConfig*) function.getIntegratorConfig() ;

  // Save private copy of funcNormSet, if supplied, excluding factorizing terms
  if (funcNormSet) {
    _funcNormSet = new RooArgSet ;
    TIterator* iter = funcNormSet->createIterator() ;
    RooAbsArg* nArg ;  
    while ((nArg=(RooAbsArg*)iter->Next())) {
      if (function.dependsOn(*nArg)) {
	_funcNormSet->addClone(*nArg) ;
      }
    }
    delete iter ;
  } else {
    _funcNormSet = 0 ;
  }

  //_funcNormSet = funcNormSet ? (RooArgSet*)funcNormSet->snapshot(kFALSE) : 0 ;
  
  // Make internal copy of dependent list
  RooArgSet intDepList(depList) ;

  RooAbsArg *arg ;

  // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  // * A) Check that all dependents are lvalues and filter out any
  //      dependents that the PDF doesn't explicitly depend on
  // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  
  TIterator* depIter = intDepList.createIterator() ;
  while((arg=(RooAbsArg*)depIter->Next())) {
    if(!arg->isLValue()) {
      coutE(InputArguments) << ClassName() << "::" << GetName() << ": cannot integrate non-lvalue ";
      arg->Print("1");
      _valid= kFALSE;
    }
    if (!function.dependsOn(*arg)) {
      RooAbsArg* argClone = (RooAbsArg*) arg->Clone() ;
      _facListOwned.addOwned(*argClone) ;
      _facList.add(*argClone) ;
      addServer(*argClone,kFALSE,kTRUE) ;
    }
  }

  if (_facList.getSize()>0) {
    oocxcoutI(&function,Integration) << function.GetName() << ": Factorizing obserables are " << _facList << endl ;
  }
    

  // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  // * B) Check if list of dependents can be re-expressed in       *
  // *    lvalues that are higher in the expression tree           *
  // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 


  // Initial fill of list of LValue branches
  RooArgSet exclLVBranches("exclLVBranches") ;
  RooArgSet branchList ;
  function.branchNodeServerList(&branchList) ;
  TIterator* bIter = branchList.createIterator() ;
  RooAbsArg* branch ;
  while((branch=(RooAbsArg*)bIter->Next())) {
    RooAbsRealLValue    *realArgLV = dynamic_cast<RooAbsRealLValue*>(branch) ;
    RooAbsCategoryLValue *catArgLV = dynamic_cast<RooAbsCategoryLValue*>(branch) ;
    if ((realArgLV && (realArgLV->isJacobianOK(intDepList)!=0)) || catArgLV) {
      exclLVBranches.add(*branch) ;
    }
  }
  delete bIter ;
  exclLVBranches.remove(depList,kTRUE,kTRUE) ;
//   cout << "exclLVBranches = " << exclLVBranches << endl ;

  // Initial fill of list of LValue leaf servers (put in intDepList)
  RooArgSet exclLVServers("exclLVServers") ;
  exclLVServers.add(intDepList) ;

//   cout << "begin exclLVServers = " << exclLVServers << endl ;
  
  // Obtain mutual exclusive dependence by iterative reduction
  TIterator *sIter = exclLVServers.createIterator() ;
  bIter = exclLVBranches.createIterator() ;
  RooAbsArg *server ;
  Bool_t converged(kFALSE) ;
  while(!converged) {
    converged=kTRUE ;

    // Reduce exclLVServers to only those serving exclusively exclLVBranches
    sIter->Reset() ;
    while ((server=(RooAbsArg*)sIter->Next())) {
      if (!servesExclusively(server,exclLVBranches,branchList)) {
	exclLVServers.remove(*server) ;
// 	cout << "removing " << server->GetName() << " from exclLVServers because servesExclusively(" << server->GetName() << "," << exclLVBranches << ") faile" << endl ;
	converged=kFALSE ;
      }
    }
    
    // Reduce exclLVBranches to only those depending exclusisvely on exclLVservers
    bIter->Reset() ;
    while((branch=(RooAbsArg*)bIter->Next())) {
      RooArgSet* brDepList = branch->getObservables(&intDepList) ;
      RooArgSet bsList(*brDepList,"bsList") ;
      delete brDepList ;
      bsList.remove(exclLVServers,kTRUE,kTRUE) ;
      if (bsList.getSize()>0) {
	exclLVBranches.remove(*branch,kTRUE,kTRUE) ;
// 	cout << "removing " << branch->GetName() << " from exclLVBranches" << endl ;
	converged=kFALSE ;
      }
    }
  }
  delete sIter ;
  delete bIter ;

//   cout << "end exclLVServers = " << exclLVServers << endl ;
     
  // Replace exclusive lvalue branch servers with lvalue branches
  if (exclLVServers.getSize()>0) {
//     cout << "activating LVservers " << exclLVServers << " for use in integration " << endl ;
    intDepList.remove(exclLVServers) ;
    intDepList.add(exclLVBranches) ;
  }

     
  // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  // * C) Check for dependents that the PDF insists on integrating *
  //      analytically iself                                       *
  // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

  RooArgSet anIntOKDepList ;
  depIter->Reset() ;
  while((arg=(RooAbsArg*)depIter->Next())) {
    if (function.forceAnalyticalInt(*arg)) {
      anIntOKDepList.add(*arg) ;
    }
  }
  delete depIter ;
  
  if (anIntOKDepList.getSize()>0) {
    oocxcoutI(&function,Integration) << function.GetName() << ": Observables that function forcibly requires to be integrated internally " << anIntOKDepList << endl ;
  }


  // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  // * D) Make list of servers that can be integrated analytically *
  //      Add all parameters/dependents as value/shape servers     *
  // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  
  sIter = function.serverIterator() ;
  while((arg=(RooAbsArg*)sIter->Next())) {

//     cout << "considering server" << arg->GetName() << endl ;

    // Dependent or parameter?
    if (!arg->dependsOnValue(intDepList)) {

//       cout << " server does not depend on observables, adding server as value server to integral" << endl ;

      if (function.dependsOnValue(*arg)) {
	addServer(*arg,kTRUE,kFALSE) ;
      }

      continue ;

    } else {

      // Add final dependents of arg as shape servers
      RooArgSet argLeafServers ;
      arg->leafNodeServerList(&argLeafServers,0,kFALSE) ;

//       arg->printCompactTree() ;
//       cout << "leaf nodes of server are " << argLeafServers << " depList = " << depList << endl ;

      // Skip arg if it is neither value or shape server
      if (!arg->isValueServer(function) && !arg->isShapeServer(function)) {
// 	cout << " server is neither value not shape server of function, ignoring" << endl ;
	continue ;
      }
      
      TIterator* lIter = argLeafServers.createIterator() ;
      RooAbsArg* leaf ;
      while((leaf=(RooAbsArg*)lIter->Next())) {

// 	cout << " considering leafnode " << leaf->GetName() << " of server " << arg->GetName() << endl ;

	if (depList.find(leaf->GetName()) && function.dependsOnValue(*leaf)) {

	  RooAbsRealLValue* leaflv = dynamic_cast<RooAbsRealLValue*>(leaf) ;
	  if (leaflv && leaflv->getBinning(rangeName).isParameterized()) {
	    oocxcoutD(&function,Integration) << function.GetName() << " : Observable " << leaf->GetName() << " has parameterized binning, add value dependence of boundary objects rather than shape of leaf" << endl ;
	    addServer(*leaflv->getBinning(rangeName).lowBoundFunc(),kTRUE,kFALSE) ;
	    addServer(*leaflv->getBinning(rangeName).highBoundFunc(),kTRUE,kFALSE) ;
	  } else {
	    oocxcoutD(&function,Integration) << function.GetName() << ": Adding observable " << leaf->GetName() << " of server " 
					     << arg->GetName() << " as shape dependent" << endl ;
	    addServer(*leaf,kFALSE,kTRUE) ;
	  }
	} else if (!depList.find(leaf->GetName())) {

	  oocxcoutD(&function,Integration) << function.GetName() << ": Adding parameter " << leaf->GetName() << " of server " << arg->GetName() << " as value dependent" << endl ;
	  addServer(*leaf,kTRUE,kFALSE) ;
	}	
      }
      delete lIter ;
    }

    // If this dependent arg is self-normalized, stop here
    //if (function.selfNormalized()) continue ;

    Bool_t depOK(kFALSE) ;
    // Check for integratable AbsRealLValue
    if (arg->isDerived()) {
      RooAbsRealLValue    *realArgLV = dynamic_cast<RooAbsRealLValue*>(arg) ;
      RooAbsCategoryLValue *catArgLV = dynamic_cast<RooAbsCategoryLValue*>(arg) ;
//       cout << "realArgLV = " << realArgLV << " intDepList = " << intDepList << endl ;
      if ((realArgLV && intDepList.find(realArgLV->GetName()) && (realArgLV->isJacobianOK(intDepList)!=0)) || catArgLV) {	

// 	cout  << " arg " << arg->GetName() << " is derived LValue with valid jacobian" << endl ;

	// Derived LValue with valid jacobian
	depOK = kTRUE ;
	
	// Now, check for overlaps
	Bool_t overlapOK = kTRUE ;
	RooAbsArg *otherArg ;
	TIterator* sIter2 = function.serverIterator() ;	
	while((otherArg=(RooAbsArg*)sIter2->Next())) {
	  // skip comparison with self
	  if (arg==otherArg) continue ;
	  if (otherArg->IsA()==RooConstVar::Class()) continue ;
	  if (arg->overlaps(*otherArg)) {
// 	    cout << "arg " << arg->GetName() << " overlaps with " << otherArg->GetName() << endl ;
	    overlapOK=kFALSE ;
	  }
	}      	
	if (!overlapOK) depOK=kFALSE ;      

// 	cout << "overlap check returns " << (depOK?"T":"F") << endl ;

	delete sIter2 ;
      }
    } else {
      // Fundamental types are always OK
      depOK = kTRUE ;
    }
    
    // Add server to list of dependents that are OK for analytical integration
    if (depOK) {
      anIntOKDepList.add(*arg,kTRUE) ;      
      oocxcoutI(&function,Integration) << function.GetName() << ": Observable " << arg->GetName() << " is suitable for analytical integration (if supported by p.d.f)" << endl ;
    }
  }
  // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  // * E) interact with function to make list of objects actually integrated analytically  *
  // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

  RooArgSet anIntDepList ;

  RooArgSet *anaSet = new RooArgSet( _anaList, Form("UniqueCloneOf_%s",_anaList.GetName()));
  _mode = ((RooAbsReal&)_function.arg()).getAnalyticalIntegralWN(anIntOKDepList,*anaSet,_funcNormSet,RooNameReg::str(_rangeName)) ;    
  _anaList.removeAll() ;
  _anaList.add(*anaSet);    
  delete anaSet;

  // Avoid confusion -- if mode is zero no analytical integral is defined regardless of contents of _anaListx
  if (_mode==0) {
    _anaList.removeAll() ;
  }

  if (_mode!=0) {
    oocxcoutI(&function,Integration) << function.GetName() << ": Function integrated observables " << _anaList << " internally with code " << _mode << endl ;
  }


  // WVE kludge: synchronize dset for use in analyticalIntegral
  function.getVal(_funcNormSet) ;

  // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  // * F) Make list of numerical integration variables consisting of:            *  
  // *   - Category dependents of RealLValues in analytical integration          *  
  // *   - Expanded server lists of server that are not analytically integrated  *
  // *    Make Jacobian list with analytically integrated RealLValues            *
  // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

  RooArgSet numIntDepList ;

  // Loop over actually analytically integrated dependents
  TIterator* aiIter = _anaList.createIterator() ;
  while ((arg=(RooAbsArg*)aiIter->Next())) {    

    // Process only derived RealLValues
    if (arg->IsA()->InheritsFrom(RooAbsRealLValue::Class()) && arg->isDerived() && !arg->isFundamental()) {

      // Add to list of Jacobians to calculate
      _jacList.add(*arg) ;

      // Add category dependent of LValueReal used in integration
      RooAbsArg *argDep ;
      RooArgSet *argDepList = arg->getObservables(&intDepList) ;
      TIterator *adIter = argDepList->createIterator() ;
      while ((argDep=(RooAbsArg*)adIter->Next())) {
	if (argDep->IsA()->InheritsFrom(RooAbsCategoryLValue::Class()) && intDepList.contains(*argDep)) {
	  numIntDepList.add(*argDep,kTRUE) ;
	}
      }
      delete adIter ;
      delete argDepList ;
    }
  }
  delete aiIter ;

  // Loop again over function servers to add remaining numeric integrations
  sIter->Reset() ;
  while((arg=(RooAbsArg*)sIter->Next())) {

    // Process only servers that are not treated analytically
    if (!_anaList.find(arg->GetName()) && arg->dependsOn(intDepList)) {

      // Process only derived RealLValues
      if (dynamic_cast<RooAbsLValue*>(arg) && arg->isDerived() && intDepList.contains(*arg)) {
	numIntDepList.add(*arg,kTRUE) ;	
      } else {
	
	// Expand server in final dependents 
	RooArgSet *argDeps = arg->getObservables(&intDepList) ;

	// Add final dependents, that are not forcibly integrated analytically, 
	// to numerical integration list      
	TIterator* iter = argDeps->createIterator() ;
	RooAbsArg* dep ;
	while((dep=(RooAbsArg*)iter->Next())) {
	  if (!_anaList.find(dep->GetName())) {
	    numIntDepList.add(*dep,kTRUE) ;
	  }
	}      
	delete iter ;
	delete argDeps ; 
      }

    }
  }
  delete sIter ;

  // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  // * G) Split numeric list in integration list and summation list  *
  // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

  // Split numeric integration list in summation and integration lists
  TIterator* numIter=numIntDepList.createIterator() ;
  while ((arg=(RooAbsArg*)numIter->Next())) {

    if (arg->IsA()->InheritsFrom(RooAbsRealLValue::Class())) {
      _intList.add(*arg) ;
    } else if (arg->IsA()->InheritsFrom(RooAbsCategoryLValue::Class())) {
      _sumList.add(*arg) ;
    }
  }
  delete numIter ;

  if (_anaList.getSize()>0) {
    oocxcoutI(&function,Integration) << function.GetName() << ": Observables " << _anaList << " are analytically integrated with code " << _mode << endl ;
  }
  if (_intList.getSize()>0) {
    oocxcoutI(&function,Integration) << function.GetName() << ": Observables " << _intList << " are numerically integrated" << endl ;
  }
  if (_sumList.getSize()>0) {
    oocxcoutI(&function,Integration) << function.GetName() << ": Observables " << _sumList << " are numerically summed" << endl ;
  }
  

  // Determine operating mode
  if (numIntDepList.getSize()>0) {
    // Numerical and optional Analytical integration
    _intOperMode = Hybrid ;
  } else if (_anaList.getSize()>0) {
    // Purely analytical integration
    _intOperMode = Analytic ;    
  } else {
    // No integration performed
    _intOperMode = PassThrough ;
  }

  // Determine auto-dirty status  
  autoSelectDirtyMode() ;

  // Create value caches for _intList and _sumList
  _intList.snapshot(_saveInt) ;
  _sumList.snapshot(_saveSum) ;

  
  if (_sumList.getSize()>0) {
    RooSuperCategory *sumCat = new RooSuperCategory(Form("%s_sumCat",GetName()),"sumCat",_sumList) ;
    _sumCatIter = sumCat->typeIterator() ;    
    _sumCat.addOwned(*sumCat) ;
  }

}



//_____________________________________________________________________________
void RooRealIntegral::autoSelectDirtyMode() 
{
  // Set appropriate cache operation mode for integral depending on cache operation
  // mode of server objects

  // If any of our servers are is forcedDirty or a projectedDependent, then we need to be ADirty
  TIterator* siter = serverIterator() ;  
  RooAbsArg* server ;
  while((server=(RooAbsArg*)siter->Next())){
    RooArgSet leafSet ;
    server->leafNodeServerList(&leafSet) ;
    TIterator* liter = leafSet.createIterator() ;
    RooAbsArg* leaf ;
    while((leaf=(RooAbsArg*)liter->Next())) {
      if (leaf->operMode()==ADirty && leaf->isValueServer(*this)) {      
	setOperMode(ADirty) ;
	break ;
      }
      if (leaf->getAttribute("projectedDependent")) {
	setOperMode(ADirty) ;
	break ;
      }
    }
    delete liter ;
  }
  delete siter ;
}



//_____________________________________________________________________________
Bool_t RooRealIntegral::servesExclusively(const RooAbsArg* server,const RooArgSet& exclLVBranches, const RooArgSet& allBranches) const
{  
  // Utility function that returns true if 'object server' is a server
  // to exactly one of the RooAbsArgs in 'exclLVBranches'

  // Determine if given server serves exclusively exactly one of the given nodes in exclLVBranches

  // Special case, no LV servers available
  if (exclLVBranches.getSize()==0) return kFALSE ;

  // If server has no clients and is not an LValue itself, return false
   if (server->_clientList.GetSize()==0 && exclLVBranches.find(server->GetName())) {
     return kFALSE ;
   }

   // Loop over all clients
   Int_t numLVServ(0) ;
   RooAbsArg* client ;
   TIterator* cIter = server->clientIterator() ;
   while((client=(RooAbsArg*)cIter->Next())) {
     // If client is not an LValue, recurse
     if (!(exclLVBranches.find(client->GetName())==client)) {
       if (allBranches.find(client->GetName())==client && !servesExclusively(client,exclLVBranches,allBranches)) {
	 // Client is a non-LValue that doesn't have an exclusive LValue server
	 delete cIter ;
	 return kFALSE ;	 
       }
     } else {
       // Client is an LValue       
       numLVServ++ ;
     }
   }

   delete cIter ;
   return (numLVServ==1) ;
}




//_____________________________________________________________________________
Bool_t RooRealIntegral::initNumIntegrator() const
{
  // (Re)Initialize numerical integration engine if necessary. Return kTRUE if
  // successful, or otherwise kFALSE.

  // if we already have an engine, check if it still works for the present limits.
  if(0 != _numIntEngine) {
    if(_numIntEngine->isValid() && _numIntEngine->checkLimits() && !_restartNumIntEngine ) return kTRUE;
    // otherwise, cleanup the old engine
    delete _numIntEngine ;
    _numIntEngine= 0;
    if(0 != _numIntegrand) {
      delete _numIntegrand;
      _numIntegrand= 0;
    }
  }

  // All done if there are no arguments to integrate numerically
  if(0 == _intList.getSize()) return kTRUE;
  
  // Bind the appropriate analytic integral (specified by _mode) of our RooRealVar object to
  // those of its arguments that will be integrated out numerically.
  if(_mode != 0) {
    _numIntegrand= new RooRealAnalytic(_function.arg(),_intList,_mode,_funcNormSet,_rangeName);
  }
  else {
    _numIntegrand= new RooRealBinding(_function.arg(),_intList,_funcNormSet,kFALSE,_rangeName);
  }
  if(0 == _numIntegrand || !_numIntegrand->isValid()) {
    coutE(Integration) << ClassName() << "::" << GetName() << ": failed to create valid integrand." << endl;
    return kFALSE;
  }

  // Create appropriate numeric integrator using factory
  _numIntEngine = RooNumIntFactory::instance().createIntegrator(*_numIntegrand,*_iconfig) ;

  if(0 == _numIntEngine || !_numIntEngine->isValid()) {
    coutE(Integration) << ClassName() << "::" << GetName() << ": failed to create valid integrator." << endl;
    return kFALSE;
  }

  cxcoutI(NumIntegration) << "RooRealIntegral::init(" << GetName() << ") using numeric integrator " 
			  << _numIntEngine->IsA()->GetName() << " to calculate Int" << _intList << endl ;

  if (_intList.getSize()>3) {
    cxcoutI(NumIntegration) << "RooRealIntegral::init(" << GetName() << ") evaluation requires " << _intList.getSize() << "-D numeric integration step. Evaluation may be slow, sufficient numeric precision for fitting & minimization is not guaranteed" << endl ;
  }

  _restartNumIntEngine = kFALSE ;
  return kTRUE;
}



//_____________________________________________________________________________
RooRealIntegral::RooRealIntegral(const RooRealIntegral& other, const char* name) : 
  RooAbsReal(other,name), 
  _valid(other._valid),
  _sumList("!sumList",this,other._sumList),
  _intList("!intList",this,other._intList), 
  _anaList("!anaList",this,other._anaList),
  _jacList("!jacList",this,other._jacList),
  _facList("!facList","Variables independent of function",this,kFALSE,kTRUE),
  _facListIter(_facList.createIterator()),
  _jacListIter(_jacList.createIterator()),
  _function("!func",this,other._function), 
  _iconfig(other._iconfig),
  _sumCat("!sumCat",this,other._sumCat),
  _sumCatIter(0),
  _mode(other._mode),
  _intOperMode(other._intOperMode), 
  _restartNumIntEngine(kFALSE),
  _numIntEngine(0), 
  _numIntegrand(0),
  _rangeName(other._rangeName),
  _params(0)
{
  // Copy constructor

 _funcNormSet = other._funcNormSet ? (RooArgSet*)other._funcNormSet->snapshot(kFALSE) : 0 ;

 other._facListIter->Reset() ;
 RooAbsArg* arg ;
 while((arg=(RooAbsArg*)other._facListIter->Next())) {
   RooAbsArg* argClone = (RooAbsArg*) arg->Clone() ;
   _facListOwned.addOwned(*argClone) ;
   _facList.add(*argClone) ;
   addServer(*argClone,kFALSE,kTRUE) ;
 }

 other._intList.snapshot(_saveInt) ;
 other._sumList.snapshot(_saveSum) ;

}



//_____________________________________________________________________________
RooRealIntegral::~RooRealIntegral()
  // Destructor
{
  if (_numIntEngine) delete _numIntEngine ;
  if (_numIntegrand) delete _numIntegrand ;
  if (_funcNormSet) delete _funcNormSet ;
  delete _facListIter ;
  delete _jacListIter ;
  if (_sumCatIter)  delete _sumCatIter ;
}





//_____________________________________________________________________________
RooAbsReal* RooRealIntegral::createIntegral(const RooArgSet& iset, const RooArgSet* nset, const RooNumIntConfig* cfg, const char* rangeName) const 
{
  // Special handling of integral of integral, return RooRealIntegral that represents integral over all dimensions in one pass
  RooArgSet isetAll(iset) ;
  isetAll.add(_sumList) ;
  isetAll.add(_intList) ;
  isetAll.add(_anaList) ;
  isetAll.add(_facList) ;

  return _function.arg().createIntegral(isetAll,nset,cfg,rangeName) ;
}




//_____________________________________________________________________________
Double_t RooRealIntegral::evaluate() const 
{  
  // Perform the integration and return the result

  Double_t retVal(0) ;
  switch (_intOperMode) {    
    
  case Hybrid: 
    {      
      // Cache numeric integrals in >1d expensive object cache
      RooDouble* cacheVal(0) ;
      if (_intList.getSize()>1 && _cacheExpensive) {
	cacheVal = (RooDouble*) expensiveObjectCache().retrieveObject(GetName(),RooDouble::Class(),parameters())  ;
      }

      if (cacheVal) {
	retVal = *cacheVal ;
      } else {

	// Find any function dependents that are AClean 
	// and switch them temporarily to ADirty
	setACleanADirty(kTRUE) ;
	
	// try to initialize our numerical integration engine
	if(!(_valid= initNumIntegrator())) {
	  coutE(Integration) << ClassName() << "::" << GetName()
			     << ":evaluate: cannot initialize numerical integrator" << endl;
	  return 0;
	}
	
	// Save current integral dependent values 
	_saveInt = _intList ;
	_saveSum = _sumList ;
	
	// Evaluate sum/integral
	retVal = sum() ;
	
	// Restore integral dependent values
	_intList=_saveInt ;
	_sumList=_saveSum ;
	
	// Cache numeric integrals in >1d expensive object cache
	if (_intList.getSize()>1 && _cacheExpensive) {
	  RooDouble* val = new RooDouble(retVal) ;
	  expensiveObjectCache().registerObject(_function.arg().GetName(),GetName(),*val,parameters())  ;
	}
	
	setACleanADirty(kFALSE) ;
      }
      break ;
    }
  case Analytic:
    {
      retVal =  ((RooAbsReal&)_function.arg()).analyticalIntegralWN(_mode,_funcNormSet,RooNameReg::str(_rangeName)) / jacobianProduct() ;
      cxcoutD(Tracing) << "RooRealIntegral::evaluate_analytic(" << GetName() 
		       << ")func = " << _function.arg().IsA()->GetName() << "::" << _function.arg().GetName()
		       << " raw = " << retVal << " _funcNormSet = " << (_funcNormSet?*_funcNormSet:RooArgSet()) << endl ;
      break ;
    }

  case PassThrough:
    {
      //setDirtyInhibit(kTRUE) ;
      retVal= _function.arg().getVal(_funcNormSet) ;      
      //setDirtyInhibit(kFALSE) ;
      break ;
    }
  }
  

  // Multiply answer with integration ranges of factorized variables
  if (_facList.getSize()>0) {
    RooAbsArg *arg ;
    _facListIter->Reset() ;
    while((arg=(RooAbsArg*)_facListIter->Next())) {
      // Multiply by fit range for 'real' dependents
      if (arg->IsA()->InheritsFrom(RooAbsRealLValue::Class())) {
	RooAbsRealLValue* argLV = (RooAbsRealLValue*)arg ;
	retVal *= (argLV->getMax() - argLV->getMin()) ;
      }
      // Multiply by number of states for category dependents
      if (arg->IsA()->InheritsFrom(RooAbsCategoryLValue::Class())) {
	RooAbsCategoryLValue* argLV = (RooAbsCategoryLValue*)arg ;
	retVal *= argLV->numTypes() ;
      }    
    } 
  }


  if (dologD(Tracing)) {
    cxcoutD(Tracing) << "RooRealIntegral::evaluate(" << GetName() << ") anaInt = " << _anaList << " numInt = " << _intList << _sumList << " mode = " ;
    switch(_mode) {
    case Hybrid: ccoutD(Tracing) << "Hybrid" ; break ;
    case Analytic: ccoutD(Tracing) << "Analytic" ; break ;
    case PassThrough: ccoutD(Tracing) << "PassThrough" ; break ;
    }

    ccxcoutD(Tracing) << "raw*fact = " << retVal << endl ;

  }

  //   cout << "RooRealIntegral::evaluate(" << GetName() << ") value = " << retVal << endl ;

  return retVal ;
}



//_____________________________________________________________________________
Double_t RooRealIntegral::jacobianProduct() const 
{
  // Return product of jacobian terms originating from analytical integration

  if (_jacList.getSize()==0) {
    return 1 ;
  }

  Double_t jacProd(1) ;
  _jacListIter->Reset() ;
  RooAbsRealLValue* arg ;
  while ((arg=(RooAbsRealLValue*)_jacListIter->Next())) {
    jacProd *= arg->jacobian() ;
  }

  // Take fabs() here: if jacobian is negative, min and max are swapped and analytical integral
  // will be positive, so must multiply with positive jacobian.
  return fabs(jacProd) ;
}



//_____________________________________________________________________________
Double_t RooRealIntegral::sum() const
{  
  // Perform summation of list of category dependents to be integrated
 
  if (_sumList.getSize()!=0) {
 
    // Add integrals for all permutations of categories summed over
    Double_t total(0) ;

    _sumCatIter->Reset() ;
    RooCatType* type ;
    RooSuperCategory* sumCat = (RooSuperCategory*) _sumCat.first() ;
    while((type=(RooCatType*)_sumCatIter->Next())) {
      sumCat->setIndex(type->getVal()) ;
      if (!_rangeName || sumCat->inRange(RooNameReg::str(_rangeName))) {
	total += integrate() / jacobianProduct() ;
      }
    }

    return total ;

  } else {

    // Simply return integral 
    Double_t ret = integrate() / jacobianProduct() ;
    return ret ;
  }
}




//_____________________________________________________________________________
Double_t RooRealIntegral::integrate() const
{
  // Perform hybrid numerical/analytical integration over all real-valued dependents

  if (!_numIntEngine) {
    // Trivial case, fully analytical integration
    return ((RooAbsReal&)_function.arg()).analyticalIntegralWN(_mode,_funcNormSet,RooNameReg::str(_rangeName)) ;
  }
  else {
    return _numIntEngine->calculate() ;
  }
}



//_____________________________________________________________________________
Bool_t RooRealIntegral::redirectServersHook(const RooAbsCollection& /*newServerList*/, 
					    Bool_t /*mustReplaceAll*/, Bool_t /*nameChange*/, Bool_t /*isRecursive*/) 
{
  // Intercept server redirects and reconfigure internal object accordingly

  _restartNumIntEngine = kTRUE ;

  autoSelectDirtyMode() ;

  // Update contents value caches for _intList and _sumList
  _saveInt.removeAll() ;
  _saveSum.removeAll() ;
  _intList.snapshot(_saveInt) ;
  _sumList.snapshot(_saveSum) ;

  // Delete parameters cache if we have one
  if (_params) {
    delete _params ;
    _params = 0 ;
  }

  return kFALSE ;
}



//_____________________________________________________________________________
const RooArgSet& RooRealIntegral::parameters() const
{
  if (!_params) {
    _params = new RooArgSet("params") ;
    
    TIterator* siter = serverIterator() ;
    RooArgSet params ;
    RooAbsArg* server ;
    while((server = (RooAbsArg*)siter->Next())) {
      if (server->isValueServer(*this)) _params->add(*server) ;
    }
    delete siter ;
  }

  return *_params ;
}



//_____________________________________________________________________________
void RooRealIntegral::operModeHook()
{
  // Dummy
  if (_operMode==ADirty) {    
  }
}



//_____________________________________________________________________________
Bool_t RooRealIntegral::isValidReal(Double_t /*value*/, Bool_t /*printError*/) const 
{
  // Check if current value is valid
  return kTRUE ;
}



//_____________________________________________________________________________
void RooRealIntegral::printMetaArgs(ostream& os) const
{
  // Customized printing of arguments of a RooRealIntegral to more intuitively reflect the contents of the
  // integration operation

  os << "Int " << _function.arg().GetName() ;
  if (_funcNormSet) {
    os << "_Norm" ;
    os << *_funcNormSet ;
    os << " " ;
  }
 
  // List internally integrated observables and factorizing observables as analytically integrated
  RooArgSet tmp(_anaList) ;
  tmp.add(_facList) ;
  if (tmp.getSize()>0) {
    os << "d[Ana]" ;
    os << tmp ;
    os << " " ;
  }
  
  // List numerically integrated and summed observables as numerically integrated
  RooArgSet tmp2(_intList) ;
  tmp2.add(_sumList) ;
  if (tmp2.getSize()>0) {
    os << " d[Num]" ;
    os << tmp2 ;
    os << " " ;
  }
}



//_____________________________________________________________________________
void RooRealIntegral::printMultiline(ostream& os, Int_t contents, Bool_t verbose, TString indent) const
{
  // Print the state of this object to the specified output stream.

  RooAbsReal::printMultiline(os,contents,verbose,indent) ;
  os << indent << "--- RooRealIntegral ---" << endl; 
  os << indent << "  Integrates ";
  _function.arg().printStream(os,kName|kArgs,kSingleLine,indent);
  TString deeper(indent);
  deeper.Append("  ");
  os << indent << "  operating mode is " 
     << (_intOperMode==Hybrid?"Hybrid":(_intOperMode==Analytic?"Analytic":"PassThrough")) << endl ;
  os << indent << "  Summed discrete args are " << _sumList << endl ;
  os << indent << "  Numerically integrated args are " << _intList << endl;
  os << indent << "  Analytically integrated args using mode " << _mode << " are " << _anaList << endl ;
  os << indent << "  Arguments included in Jacobian are " << _jacList << endl ;
  os << indent << "  Factorized arguments are " << _facList << endl ;
  os << indent << "  Function normalization set " ;
  if (_funcNormSet) 
    _funcNormSet->Print("1") ; 
  else
    os << "<none>" ;
  
  os << endl ;
} 



 RooRealIntegral.cxx:1
 RooRealIntegral.cxx:2
 RooRealIntegral.cxx:3
 RooRealIntegral.cxx:4
 RooRealIntegral.cxx:5
 RooRealIntegral.cxx:6
 RooRealIntegral.cxx:7
 RooRealIntegral.cxx:8
 RooRealIntegral.cxx:9
 RooRealIntegral.cxx:10
 RooRealIntegral.cxx:11
 RooRealIntegral.cxx:12
 RooRealIntegral.cxx:13
 RooRealIntegral.cxx:14
 RooRealIntegral.cxx:15
 RooRealIntegral.cxx:16
 RooRealIntegral.cxx:17
 RooRealIntegral.cxx:18
 RooRealIntegral.cxx:19
 RooRealIntegral.cxx:20
 RooRealIntegral.cxx:21
 RooRealIntegral.cxx:22
 RooRealIntegral.cxx:23
 RooRealIntegral.cxx:24
 RooRealIntegral.cxx:25
 RooRealIntegral.cxx:26
 RooRealIntegral.cxx:27
 RooRealIntegral.cxx:28
 RooRealIntegral.cxx:29
 RooRealIntegral.cxx:30
 RooRealIntegral.cxx:31
 RooRealIntegral.cxx:32
 RooRealIntegral.cxx:33
 RooRealIntegral.cxx:34
 RooRealIntegral.cxx:35
 RooRealIntegral.cxx:36
 RooRealIntegral.cxx:37
 RooRealIntegral.cxx:38
 RooRealIntegral.cxx:39
 RooRealIntegral.cxx:40
 RooRealIntegral.cxx:41
 RooRealIntegral.cxx:42
 RooRealIntegral.cxx:43
 RooRealIntegral.cxx:44
 RooRealIntegral.cxx:45
 RooRealIntegral.cxx:46
 RooRealIntegral.cxx:47
 RooRealIntegral.cxx:48
 RooRealIntegral.cxx:49
 RooRealIntegral.cxx:50
 RooRealIntegral.cxx:51
 RooRealIntegral.cxx:52
 RooRealIntegral.cxx:53
 RooRealIntegral.cxx:54
 RooRealIntegral.cxx:55
 RooRealIntegral.cxx:56
 RooRealIntegral.cxx:57
 RooRealIntegral.cxx:58
 RooRealIntegral.cxx:59
 RooRealIntegral.cxx:60
 RooRealIntegral.cxx:61
 RooRealIntegral.cxx:62
 RooRealIntegral.cxx:63
 RooRealIntegral.cxx:64
 RooRealIntegral.cxx:65
 RooRealIntegral.cxx:66
 RooRealIntegral.cxx:67
 RooRealIntegral.cxx:68
 RooRealIntegral.cxx:69
 RooRealIntegral.cxx:70
 RooRealIntegral.cxx:71
 RooRealIntegral.cxx:72
 RooRealIntegral.cxx:73
 RooRealIntegral.cxx:74
 RooRealIntegral.cxx:75
 RooRealIntegral.cxx:76
 RooRealIntegral.cxx:77
 RooRealIntegral.cxx:78
 RooRealIntegral.cxx:79
 RooRealIntegral.cxx:80
 RooRealIntegral.cxx:81
 RooRealIntegral.cxx:82
 RooRealIntegral.cxx:83
 RooRealIntegral.cxx:84
 RooRealIntegral.cxx:85
 RooRealIntegral.cxx:86
 RooRealIntegral.cxx:87
 RooRealIntegral.cxx:88
 RooRealIntegral.cxx:89
 RooRealIntegral.cxx:90
 RooRealIntegral.cxx:91
 RooRealIntegral.cxx:92
 RooRealIntegral.cxx:93
 RooRealIntegral.cxx:94
 RooRealIntegral.cxx:95
 RooRealIntegral.cxx:96
 RooRealIntegral.cxx:97
 RooRealIntegral.cxx:98
 RooRealIntegral.cxx:99
 RooRealIntegral.cxx:100
 RooRealIntegral.cxx:101
 RooRealIntegral.cxx:102
 RooRealIntegral.cxx:103
 RooRealIntegral.cxx:104
 RooRealIntegral.cxx:105
 RooRealIntegral.cxx:106
 RooRealIntegral.cxx:107
 RooRealIntegral.cxx:108
 RooRealIntegral.cxx:109
 RooRealIntegral.cxx:110
 RooRealIntegral.cxx:111
 RooRealIntegral.cxx:112
 RooRealIntegral.cxx:113
 RooRealIntegral.cxx:114
 RooRealIntegral.cxx:115
 RooRealIntegral.cxx:116
 RooRealIntegral.cxx:117
 RooRealIntegral.cxx:118
 RooRealIntegral.cxx:119
 RooRealIntegral.cxx:120
 RooRealIntegral.cxx:121
 RooRealIntegral.cxx:122
 RooRealIntegral.cxx:123
 RooRealIntegral.cxx:124
 RooRealIntegral.cxx:125
 RooRealIntegral.cxx:126
 RooRealIntegral.cxx:127
 RooRealIntegral.cxx:128
 RooRealIntegral.cxx:129
 RooRealIntegral.cxx:130
 RooRealIntegral.cxx:131
 RooRealIntegral.cxx:132
 RooRealIntegral.cxx:133
 RooRealIntegral.cxx:134
 RooRealIntegral.cxx:135
 RooRealIntegral.cxx:136
 RooRealIntegral.cxx:137
 RooRealIntegral.cxx:138
 RooRealIntegral.cxx:139
 RooRealIntegral.cxx:140
 RooRealIntegral.cxx:141
 RooRealIntegral.cxx:142
 RooRealIntegral.cxx:143
 RooRealIntegral.cxx:144
 RooRealIntegral.cxx:145
 RooRealIntegral.cxx:146
 RooRealIntegral.cxx:147
 RooRealIntegral.cxx:148
 RooRealIntegral.cxx:149
 RooRealIntegral.cxx:150
 RooRealIntegral.cxx:151
 RooRealIntegral.cxx:152
 RooRealIntegral.cxx:153
 RooRealIntegral.cxx:154
 RooRealIntegral.cxx:155
 RooRealIntegral.cxx:156
 RooRealIntegral.cxx:157
 RooRealIntegral.cxx:158
 RooRealIntegral.cxx:159
 RooRealIntegral.cxx:160
 RooRealIntegral.cxx:161
 RooRealIntegral.cxx:162
 RooRealIntegral.cxx:163
 RooRealIntegral.cxx:164
 RooRealIntegral.cxx:165
 RooRealIntegral.cxx:166
 RooRealIntegral.cxx:167
 RooRealIntegral.cxx:168
 RooRealIntegral.cxx:169
 RooRealIntegral.cxx:170
 RooRealIntegral.cxx:171
 RooRealIntegral.cxx:172
 RooRealIntegral.cxx:173
 RooRealIntegral.cxx:174
 RooRealIntegral.cxx:175
 RooRealIntegral.cxx:176
 RooRealIntegral.cxx:177
 RooRealIntegral.cxx:178
 RooRealIntegral.cxx:179
 RooRealIntegral.cxx:180
 RooRealIntegral.cxx:181
 RooRealIntegral.cxx:182
 RooRealIntegral.cxx:183
 RooRealIntegral.cxx:184
 RooRealIntegral.cxx:185
 RooRealIntegral.cxx:186
 RooRealIntegral.cxx:187
 RooRealIntegral.cxx:188
 RooRealIntegral.cxx:189
 RooRealIntegral.cxx:190
 RooRealIntegral.cxx:191
 RooRealIntegral.cxx:192
 RooRealIntegral.cxx:193
 RooRealIntegral.cxx:194
 RooRealIntegral.cxx:195
 RooRealIntegral.cxx:196
 RooRealIntegral.cxx:197
 RooRealIntegral.cxx:198
 RooRealIntegral.cxx:199
 RooRealIntegral.cxx:200
 RooRealIntegral.cxx:201
 RooRealIntegral.cxx:202
 RooRealIntegral.cxx:203
 RooRealIntegral.cxx:204
 RooRealIntegral.cxx:205
 RooRealIntegral.cxx:206
 RooRealIntegral.cxx:207
 RooRealIntegral.cxx:208
 RooRealIntegral.cxx:209
 RooRealIntegral.cxx:210
 RooRealIntegral.cxx:211
 RooRealIntegral.cxx:212
 RooRealIntegral.cxx:213
 RooRealIntegral.cxx:214
 RooRealIntegral.cxx:215
 RooRealIntegral.cxx:216
 RooRealIntegral.cxx:217
 RooRealIntegral.cxx:218
 RooRealIntegral.cxx:219
 RooRealIntegral.cxx:220
 RooRealIntegral.cxx:221
 RooRealIntegral.cxx:222
 RooRealIntegral.cxx:223
 RooRealIntegral.cxx:224
 RooRealIntegral.cxx:225
 RooRealIntegral.cxx:226
 RooRealIntegral.cxx:227
 RooRealIntegral.cxx:228
 RooRealIntegral.cxx:229
 RooRealIntegral.cxx:230
 RooRealIntegral.cxx:231
 RooRealIntegral.cxx:232
 RooRealIntegral.cxx:233
 RooRealIntegral.cxx:234
 RooRealIntegral.cxx:235
 RooRealIntegral.cxx:236
 RooRealIntegral.cxx:237
 RooRealIntegral.cxx:238
 RooRealIntegral.cxx:239
 RooRealIntegral.cxx:240
 RooRealIntegral.cxx:241
 RooRealIntegral.cxx:242
 RooRealIntegral.cxx:243
 RooRealIntegral.cxx:244
 RooRealIntegral.cxx:245
 RooRealIntegral.cxx:246
 RooRealIntegral.cxx:247
 RooRealIntegral.cxx:248
 RooRealIntegral.cxx:249
 RooRealIntegral.cxx:250
 RooRealIntegral.cxx:251
 RooRealIntegral.cxx:252
 RooRealIntegral.cxx:253
 RooRealIntegral.cxx:254
 RooRealIntegral.cxx:255
 RooRealIntegral.cxx:256
 RooRealIntegral.cxx:257
 RooRealIntegral.cxx:258
 RooRealIntegral.cxx:259
 RooRealIntegral.cxx:260
 RooRealIntegral.cxx:261
 RooRealIntegral.cxx:262
 RooRealIntegral.cxx:263
 RooRealIntegral.cxx:264
 RooRealIntegral.cxx:265
 RooRealIntegral.cxx:266
 RooRealIntegral.cxx:267
 RooRealIntegral.cxx:268
 RooRealIntegral.cxx:269
 RooRealIntegral.cxx:270
 RooRealIntegral.cxx:271
 RooRealIntegral.cxx:272
 RooRealIntegral.cxx:273
 RooRealIntegral.cxx:274
 RooRealIntegral.cxx:275
 RooRealIntegral.cxx:276
 RooRealIntegral.cxx:277
 RooRealIntegral.cxx:278
 RooRealIntegral.cxx:279
 RooRealIntegral.cxx:280
 RooRealIntegral.cxx:281
 RooRealIntegral.cxx:282
 RooRealIntegral.cxx:283
 RooRealIntegral.cxx:284
 RooRealIntegral.cxx:285
 RooRealIntegral.cxx:286
 RooRealIntegral.cxx:287
 RooRealIntegral.cxx:288
 RooRealIntegral.cxx:289
 RooRealIntegral.cxx:290
 RooRealIntegral.cxx:291
 RooRealIntegral.cxx:292
 RooRealIntegral.cxx:293
 RooRealIntegral.cxx:294
 RooRealIntegral.cxx:295
 RooRealIntegral.cxx:296
 RooRealIntegral.cxx:297
 RooRealIntegral.cxx:298
 RooRealIntegral.cxx:299
 RooRealIntegral.cxx:300
 RooRealIntegral.cxx:301
 RooRealIntegral.cxx:302
 RooRealIntegral.cxx:303
 RooRealIntegral.cxx:304
 RooRealIntegral.cxx:305
 RooRealIntegral.cxx:306
 RooRealIntegral.cxx:307
 RooRealIntegral.cxx:308
 RooRealIntegral.cxx:309
 RooRealIntegral.cxx:310
 RooRealIntegral.cxx:311
 RooRealIntegral.cxx:312
 RooRealIntegral.cxx:313
 RooRealIntegral.cxx:314
 RooRealIntegral.cxx:315
 RooRealIntegral.cxx:316
 RooRealIntegral.cxx:317
 RooRealIntegral.cxx:318
 RooRealIntegral.cxx:319
 RooRealIntegral.cxx:320
 RooRealIntegral.cxx:321
 RooRealIntegral.cxx:322
 RooRealIntegral.cxx:323
 RooRealIntegral.cxx:324
 RooRealIntegral.cxx:325
 RooRealIntegral.cxx:326
 RooRealIntegral.cxx:327
 RooRealIntegral.cxx:328
 RooRealIntegral.cxx:329
 RooRealIntegral.cxx:330
 RooRealIntegral.cxx:331
 RooRealIntegral.cxx:332
 RooRealIntegral.cxx:333
 RooRealIntegral.cxx:334
 RooRealIntegral.cxx:335
 RooRealIntegral.cxx:336
 RooRealIntegral.cxx:337
 RooRealIntegral.cxx:338
 RooRealIntegral.cxx:339
 RooRealIntegral.cxx:340
 RooRealIntegral.cxx:341
 RooRealIntegral.cxx:342
 RooRealIntegral.cxx:343
 RooRealIntegral.cxx:344
 RooRealIntegral.cxx:345
 RooRealIntegral.cxx:346
 RooRealIntegral.cxx:347
 RooRealIntegral.cxx:348
 RooRealIntegral.cxx:349
 RooRealIntegral.cxx:350
 RooRealIntegral.cxx:351
 RooRealIntegral.cxx:352
 RooRealIntegral.cxx:353
 RooRealIntegral.cxx:354
 RooRealIntegral.cxx:355
 RooRealIntegral.cxx:356
 RooRealIntegral.cxx:357
 RooRealIntegral.cxx:358
 RooRealIntegral.cxx:359
 RooRealIntegral.cxx:360
 RooRealIntegral.cxx:361
 RooRealIntegral.cxx:362
 RooRealIntegral.cxx:363
 RooRealIntegral.cxx:364
 RooRealIntegral.cxx:365
 RooRealIntegral.cxx:366
 RooRealIntegral.cxx:367
 RooRealIntegral.cxx:368
 RooRealIntegral.cxx:369
 RooRealIntegral.cxx:370
 RooRealIntegral.cxx:371
 RooRealIntegral.cxx:372
 RooRealIntegral.cxx:373
 RooRealIntegral.cxx:374
 RooRealIntegral.cxx:375
 RooRealIntegral.cxx:376
 RooRealIntegral.cxx:377
 RooRealIntegral.cxx:378
 RooRealIntegral.cxx:379
 RooRealIntegral.cxx:380
 RooRealIntegral.cxx:381
 RooRealIntegral.cxx:382
 RooRealIntegral.cxx:383
 RooRealIntegral.cxx:384
 RooRealIntegral.cxx:385
 RooRealIntegral.cxx:386
 RooRealIntegral.cxx:387
 RooRealIntegral.cxx:388
 RooRealIntegral.cxx:389
 RooRealIntegral.cxx:390
 RooRealIntegral.cxx:391
 RooRealIntegral.cxx:392
 RooRealIntegral.cxx:393
 RooRealIntegral.cxx:394
 RooRealIntegral.cxx:395
 RooRealIntegral.cxx:396
 RooRealIntegral.cxx:397
 RooRealIntegral.cxx:398
 RooRealIntegral.cxx:399
 RooRealIntegral.cxx:400
 RooRealIntegral.cxx:401
 RooRealIntegral.cxx:402
 RooRealIntegral.cxx:403
 RooRealIntegral.cxx:404
 RooRealIntegral.cxx:405
 RooRealIntegral.cxx:406
 RooRealIntegral.cxx:407
 RooRealIntegral.cxx:408
 RooRealIntegral.cxx:409
 RooRealIntegral.cxx:410
 RooRealIntegral.cxx:411
 RooRealIntegral.cxx:412
 RooRealIntegral.cxx:413
 RooRealIntegral.cxx:414
 RooRealIntegral.cxx:415
 RooRealIntegral.cxx:416
 RooRealIntegral.cxx:417
 RooRealIntegral.cxx:418
 RooRealIntegral.cxx:419
 RooRealIntegral.cxx:420
 RooRealIntegral.cxx:421
 RooRealIntegral.cxx:422
 RooRealIntegral.cxx:423
 RooRealIntegral.cxx:424
 RooRealIntegral.cxx:425
 RooRealIntegral.cxx:426
 RooRealIntegral.cxx:427
 RooRealIntegral.cxx:428
 RooRealIntegral.cxx:429
 RooRealIntegral.cxx:430
 RooRealIntegral.cxx:431
 RooRealIntegral.cxx:432
 RooRealIntegral.cxx:433
 RooRealIntegral.cxx:434
 RooRealIntegral.cxx:435
 RooRealIntegral.cxx:436
 RooRealIntegral.cxx:437
 RooRealIntegral.cxx:438
 RooRealIntegral.cxx:439
 RooRealIntegral.cxx:440
 RooRealIntegral.cxx:441
 RooRealIntegral.cxx:442
 RooRealIntegral.cxx:443
 RooRealIntegral.cxx:444
 RooRealIntegral.cxx:445
 RooRealIntegral.cxx:446
 RooRealIntegral.cxx:447
 RooRealIntegral.cxx:448
 RooRealIntegral.cxx:449
 RooRealIntegral.cxx:450
 RooRealIntegral.cxx:451
 RooRealIntegral.cxx:452
 RooRealIntegral.cxx:453
 RooRealIntegral.cxx:454
 RooRealIntegral.cxx:455
 RooRealIntegral.cxx:456
 RooRealIntegral.cxx:457
 RooRealIntegral.cxx:458
 RooRealIntegral.cxx:459
 RooRealIntegral.cxx:460
 RooRealIntegral.cxx:461
 RooRealIntegral.cxx:462
 RooRealIntegral.cxx:463
 RooRealIntegral.cxx:464
 RooRealIntegral.cxx:465
 RooRealIntegral.cxx:466
 RooRealIntegral.cxx:467
 RooRealIntegral.cxx:468
 RooRealIntegral.cxx:469
 RooRealIntegral.cxx:470
 RooRealIntegral.cxx:471
 RooRealIntegral.cxx:472
 RooRealIntegral.cxx:473
 RooRealIntegral.cxx:474
 RooRealIntegral.cxx:475
 RooRealIntegral.cxx:476
 RooRealIntegral.cxx:477
 RooRealIntegral.cxx:478
 RooRealIntegral.cxx:479
 RooRealIntegral.cxx:480
 RooRealIntegral.cxx:481
 RooRealIntegral.cxx:482
 RooRealIntegral.cxx:483
 RooRealIntegral.cxx:484
 RooRealIntegral.cxx:485
 RooRealIntegral.cxx:486
 RooRealIntegral.cxx:487
 RooRealIntegral.cxx:488
 RooRealIntegral.cxx:489
 RooRealIntegral.cxx:490
 RooRealIntegral.cxx:491
 RooRealIntegral.cxx:492
 RooRealIntegral.cxx:493
 RooRealIntegral.cxx:494
 RooRealIntegral.cxx:495
 RooRealIntegral.cxx:496
 RooRealIntegral.cxx:497
 RooRealIntegral.cxx:498
 RooRealIntegral.cxx:499
 RooRealIntegral.cxx:500
 RooRealIntegral.cxx:501
 RooRealIntegral.cxx:502
 RooRealIntegral.cxx:503
 RooRealIntegral.cxx:504
 RooRealIntegral.cxx:505
 RooRealIntegral.cxx:506
 RooRealIntegral.cxx:507
 RooRealIntegral.cxx:508
 RooRealIntegral.cxx:509
 RooRealIntegral.cxx:510
 RooRealIntegral.cxx:511
 RooRealIntegral.cxx:512
 RooRealIntegral.cxx:513
 RooRealIntegral.cxx:514
 RooRealIntegral.cxx:515
 RooRealIntegral.cxx:516
 RooRealIntegral.cxx:517
 RooRealIntegral.cxx:518
 RooRealIntegral.cxx:519
 RooRealIntegral.cxx:520
 RooRealIntegral.cxx:521
 RooRealIntegral.cxx:522
 RooRealIntegral.cxx:523
 RooRealIntegral.cxx:524
 RooRealIntegral.cxx:525
 RooRealIntegral.cxx:526
 RooRealIntegral.cxx:527
 RooRealIntegral.cxx:528
 RooRealIntegral.cxx:529
 RooRealIntegral.cxx:530
 RooRealIntegral.cxx:531
 RooRealIntegral.cxx:532
 RooRealIntegral.cxx:533
 RooRealIntegral.cxx:534
 RooRealIntegral.cxx:535
 RooRealIntegral.cxx:536
 RooRealIntegral.cxx:537
 RooRealIntegral.cxx:538
 RooRealIntegral.cxx:539
 RooRealIntegral.cxx:540
 RooRealIntegral.cxx:541
 RooRealIntegral.cxx:542
 RooRealIntegral.cxx:543
 RooRealIntegral.cxx:544
 RooRealIntegral.cxx:545
 RooRealIntegral.cxx:546
 RooRealIntegral.cxx:547
 RooRealIntegral.cxx:548
 RooRealIntegral.cxx:549
 RooRealIntegral.cxx:550
 RooRealIntegral.cxx:551
 RooRealIntegral.cxx:552
 RooRealIntegral.cxx:553
 RooRealIntegral.cxx:554
 RooRealIntegral.cxx:555
 RooRealIntegral.cxx:556
 RooRealIntegral.cxx:557
 RooRealIntegral.cxx:558
 RooRealIntegral.cxx:559
 RooRealIntegral.cxx:560
 RooRealIntegral.cxx:561
 RooRealIntegral.cxx:562
 RooRealIntegral.cxx:563
 RooRealIntegral.cxx:564
 RooRealIntegral.cxx:565
 RooRealIntegral.cxx:566
 RooRealIntegral.cxx:567
 RooRealIntegral.cxx:568
 RooRealIntegral.cxx:569
 RooRealIntegral.cxx:570
 RooRealIntegral.cxx:571
 RooRealIntegral.cxx:572
 RooRealIntegral.cxx:573
 RooRealIntegral.cxx:574
 RooRealIntegral.cxx:575
 RooRealIntegral.cxx:576
 RooRealIntegral.cxx:577
 RooRealIntegral.cxx:578
 RooRealIntegral.cxx:579
 RooRealIntegral.cxx:580
 RooRealIntegral.cxx:581
 RooRealIntegral.cxx:582
 RooRealIntegral.cxx:583
 RooRealIntegral.cxx:584
 RooRealIntegral.cxx:585
 RooRealIntegral.cxx:586
 RooRealIntegral.cxx:587
 RooRealIntegral.cxx:588
 RooRealIntegral.cxx:589
 RooRealIntegral.cxx:590
 RooRealIntegral.cxx:591
 RooRealIntegral.cxx:592
 RooRealIntegral.cxx:593
 RooRealIntegral.cxx:594
 RooRealIntegral.cxx:595
 RooRealIntegral.cxx:596
 RooRealIntegral.cxx:597
 RooRealIntegral.cxx:598
 RooRealIntegral.cxx:599
 RooRealIntegral.cxx:600
 RooRealIntegral.cxx:601
 RooRealIntegral.cxx:602
 RooRealIntegral.cxx:603
 RooRealIntegral.cxx:604
 RooRealIntegral.cxx:605
 RooRealIntegral.cxx:606
 RooRealIntegral.cxx:607
 RooRealIntegral.cxx:608
 RooRealIntegral.cxx:609
 RooRealIntegral.cxx:610
 RooRealIntegral.cxx:611
 RooRealIntegral.cxx:612
 RooRealIntegral.cxx:613
 RooRealIntegral.cxx:614
 RooRealIntegral.cxx:615
 RooRealIntegral.cxx:616
 RooRealIntegral.cxx:617
 RooRealIntegral.cxx:618
 RooRealIntegral.cxx:619
 RooRealIntegral.cxx:620
 RooRealIntegral.cxx:621
 RooRealIntegral.cxx:622
 RooRealIntegral.cxx:623
 RooRealIntegral.cxx:624
 RooRealIntegral.cxx:625
 RooRealIntegral.cxx:626
 RooRealIntegral.cxx:627
 RooRealIntegral.cxx:628
 RooRealIntegral.cxx:629
 RooRealIntegral.cxx:630
 RooRealIntegral.cxx:631
 RooRealIntegral.cxx:632
 RooRealIntegral.cxx:633
 RooRealIntegral.cxx:634
 RooRealIntegral.cxx:635
 RooRealIntegral.cxx:636
 RooRealIntegral.cxx:637
 RooRealIntegral.cxx:638
 RooRealIntegral.cxx:639
 RooRealIntegral.cxx:640
 RooRealIntegral.cxx:641
 RooRealIntegral.cxx:642
 RooRealIntegral.cxx:643
 RooRealIntegral.cxx:644
 RooRealIntegral.cxx:645
 RooRealIntegral.cxx:646
 RooRealIntegral.cxx:647
 RooRealIntegral.cxx:648
 RooRealIntegral.cxx:649
 RooRealIntegral.cxx:650
 RooRealIntegral.cxx:651
 RooRealIntegral.cxx:652
 RooRealIntegral.cxx:653
 RooRealIntegral.cxx:654
 RooRealIntegral.cxx:655
 RooRealIntegral.cxx:656
 RooRealIntegral.cxx:657
 RooRealIntegral.cxx:658
 RooRealIntegral.cxx:659
 RooRealIntegral.cxx:660
 RooRealIntegral.cxx:661
 RooRealIntegral.cxx:662
 RooRealIntegral.cxx:663
 RooRealIntegral.cxx:664
 RooRealIntegral.cxx:665
 RooRealIntegral.cxx:666
 RooRealIntegral.cxx:667
 RooRealIntegral.cxx:668
 RooRealIntegral.cxx:669
 RooRealIntegral.cxx:670
 RooRealIntegral.cxx:671
 RooRealIntegral.cxx:672
 RooRealIntegral.cxx:673
 RooRealIntegral.cxx:674
 RooRealIntegral.cxx:675
 RooRealIntegral.cxx:676
 RooRealIntegral.cxx:677
 RooRealIntegral.cxx:678
 RooRealIntegral.cxx:679
 RooRealIntegral.cxx:680
 RooRealIntegral.cxx:681
 RooRealIntegral.cxx:682
 RooRealIntegral.cxx:683
 RooRealIntegral.cxx:684
 RooRealIntegral.cxx:685
 RooRealIntegral.cxx:686
 RooRealIntegral.cxx:687
 RooRealIntegral.cxx:688
 RooRealIntegral.cxx:689
 RooRealIntegral.cxx:690
 RooRealIntegral.cxx:691
 RooRealIntegral.cxx:692
 RooRealIntegral.cxx:693
 RooRealIntegral.cxx:694
 RooRealIntegral.cxx:695
 RooRealIntegral.cxx:696
 RooRealIntegral.cxx:697
 RooRealIntegral.cxx:698
 RooRealIntegral.cxx:699
 RooRealIntegral.cxx:700
 RooRealIntegral.cxx:701
 RooRealIntegral.cxx:702
 RooRealIntegral.cxx:703
 RooRealIntegral.cxx:704
 RooRealIntegral.cxx:705
 RooRealIntegral.cxx:706
 RooRealIntegral.cxx:707
 RooRealIntegral.cxx:708
 RooRealIntegral.cxx:709
 RooRealIntegral.cxx:710
 RooRealIntegral.cxx:711
 RooRealIntegral.cxx:712
 RooRealIntegral.cxx:713
 RooRealIntegral.cxx:714
 RooRealIntegral.cxx:715
 RooRealIntegral.cxx:716
 RooRealIntegral.cxx:717
 RooRealIntegral.cxx:718
 RooRealIntegral.cxx:719
 RooRealIntegral.cxx:720
 RooRealIntegral.cxx:721
 RooRealIntegral.cxx:722
 RooRealIntegral.cxx:723
 RooRealIntegral.cxx:724
 RooRealIntegral.cxx:725
 RooRealIntegral.cxx:726
 RooRealIntegral.cxx:727
 RooRealIntegral.cxx:728
 RooRealIntegral.cxx:729
 RooRealIntegral.cxx:730
 RooRealIntegral.cxx:731
 RooRealIntegral.cxx:732
 RooRealIntegral.cxx:733
 RooRealIntegral.cxx:734
 RooRealIntegral.cxx:735
 RooRealIntegral.cxx:736
 RooRealIntegral.cxx:737
 RooRealIntegral.cxx:738
 RooRealIntegral.cxx:739
 RooRealIntegral.cxx:740
 RooRealIntegral.cxx:741
 RooRealIntegral.cxx:742
 RooRealIntegral.cxx:743
 RooRealIntegral.cxx:744
 RooRealIntegral.cxx:745
 RooRealIntegral.cxx:746
 RooRealIntegral.cxx:747
 RooRealIntegral.cxx:748
 RooRealIntegral.cxx:749
 RooRealIntegral.cxx:750
 RooRealIntegral.cxx:751
 RooRealIntegral.cxx:752
 RooRealIntegral.cxx:753
 RooRealIntegral.cxx:754
 RooRealIntegral.cxx:755
 RooRealIntegral.cxx:756
 RooRealIntegral.cxx:757
 RooRealIntegral.cxx:758
 RooRealIntegral.cxx:759
 RooRealIntegral.cxx:760
 RooRealIntegral.cxx:761
 RooRealIntegral.cxx:762
 RooRealIntegral.cxx:763
 RooRealIntegral.cxx:764
 RooRealIntegral.cxx:765
 RooRealIntegral.cxx:766
 RooRealIntegral.cxx:767
 RooRealIntegral.cxx:768
 RooRealIntegral.cxx:769
 RooRealIntegral.cxx:770
 RooRealIntegral.cxx:771
 RooRealIntegral.cxx:772
 RooRealIntegral.cxx:773
 RooRealIntegral.cxx:774
 RooRealIntegral.cxx:775
 RooRealIntegral.cxx:776
 RooRealIntegral.cxx:777
 RooRealIntegral.cxx:778
 RooRealIntegral.cxx:779
 RooRealIntegral.cxx:780
 RooRealIntegral.cxx:781
 RooRealIntegral.cxx:782
 RooRealIntegral.cxx:783
 RooRealIntegral.cxx:784
 RooRealIntegral.cxx:785
 RooRealIntegral.cxx:786
 RooRealIntegral.cxx:787
 RooRealIntegral.cxx:788
 RooRealIntegral.cxx:789
 RooRealIntegral.cxx:790
 RooRealIntegral.cxx:791
 RooRealIntegral.cxx:792
 RooRealIntegral.cxx:793
 RooRealIntegral.cxx:794
 RooRealIntegral.cxx:795
 RooRealIntegral.cxx:796
 RooRealIntegral.cxx:797
 RooRealIntegral.cxx:798
 RooRealIntegral.cxx:799
 RooRealIntegral.cxx:800
 RooRealIntegral.cxx:801
 RooRealIntegral.cxx:802
 RooRealIntegral.cxx:803
 RooRealIntegral.cxx:804
 RooRealIntegral.cxx:805
 RooRealIntegral.cxx:806
 RooRealIntegral.cxx:807
 RooRealIntegral.cxx:808
 RooRealIntegral.cxx:809
 RooRealIntegral.cxx:810
 RooRealIntegral.cxx:811
 RooRealIntegral.cxx:812
 RooRealIntegral.cxx:813
 RooRealIntegral.cxx:814
 RooRealIntegral.cxx:815
 RooRealIntegral.cxx:816
 RooRealIntegral.cxx:817
 RooRealIntegral.cxx:818
 RooRealIntegral.cxx:819
 RooRealIntegral.cxx:820
 RooRealIntegral.cxx:821
 RooRealIntegral.cxx:822
 RooRealIntegral.cxx:823
 RooRealIntegral.cxx:824
 RooRealIntegral.cxx:825
 RooRealIntegral.cxx:826
 RooRealIntegral.cxx:827
 RooRealIntegral.cxx:828
 RooRealIntegral.cxx:829
 RooRealIntegral.cxx:830
 RooRealIntegral.cxx:831
 RooRealIntegral.cxx:832
 RooRealIntegral.cxx:833
 RooRealIntegral.cxx:834
 RooRealIntegral.cxx:835
 RooRealIntegral.cxx:836
 RooRealIntegral.cxx:837
 RooRealIntegral.cxx:838
 RooRealIntegral.cxx:839
 RooRealIntegral.cxx:840
 RooRealIntegral.cxx:841
 RooRealIntegral.cxx:842
 RooRealIntegral.cxx:843
 RooRealIntegral.cxx:844
 RooRealIntegral.cxx:845
 RooRealIntegral.cxx:846
 RooRealIntegral.cxx:847
 RooRealIntegral.cxx:848
 RooRealIntegral.cxx:849
 RooRealIntegral.cxx:850
 RooRealIntegral.cxx:851
 RooRealIntegral.cxx:852
 RooRealIntegral.cxx:853
 RooRealIntegral.cxx:854
 RooRealIntegral.cxx:855
 RooRealIntegral.cxx:856
 RooRealIntegral.cxx:857
 RooRealIntegral.cxx:858
 RooRealIntegral.cxx:859
 RooRealIntegral.cxx:860
 RooRealIntegral.cxx:861
 RooRealIntegral.cxx:862
 RooRealIntegral.cxx:863
 RooRealIntegral.cxx:864
 RooRealIntegral.cxx:865
 RooRealIntegral.cxx:866
 RooRealIntegral.cxx:867
 RooRealIntegral.cxx:868
 RooRealIntegral.cxx:869
 RooRealIntegral.cxx:870
 RooRealIntegral.cxx:871
 RooRealIntegral.cxx:872
 RooRealIntegral.cxx:873
 RooRealIntegral.cxx:874
 RooRealIntegral.cxx:875
 RooRealIntegral.cxx:876
 RooRealIntegral.cxx:877
 RooRealIntegral.cxx:878
 RooRealIntegral.cxx:879
 RooRealIntegral.cxx:880
 RooRealIntegral.cxx:881
 RooRealIntegral.cxx:882
 RooRealIntegral.cxx:883
 RooRealIntegral.cxx:884
 RooRealIntegral.cxx:885
 RooRealIntegral.cxx:886
 RooRealIntegral.cxx:887
 RooRealIntegral.cxx:888
 RooRealIntegral.cxx:889
 RooRealIntegral.cxx:890
 RooRealIntegral.cxx:891
 RooRealIntegral.cxx:892
 RooRealIntegral.cxx:893
 RooRealIntegral.cxx:894
 RooRealIntegral.cxx:895
 RooRealIntegral.cxx:896
 RooRealIntegral.cxx:897
 RooRealIntegral.cxx:898
 RooRealIntegral.cxx:899
 RooRealIntegral.cxx:900
 RooRealIntegral.cxx:901
 RooRealIntegral.cxx:902
 RooRealIntegral.cxx:903
 RooRealIntegral.cxx:904
 RooRealIntegral.cxx:905
 RooRealIntegral.cxx:906
 RooRealIntegral.cxx:907
 RooRealIntegral.cxx:908
 RooRealIntegral.cxx:909
 RooRealIntegral.cxx:910
 RooRealIntegral.cxx:911
 RooRealIntegral.cxx:912
 RooRealIntegral.cxx:913
 RooRealIntegral.cxx:914
 RooRealIntegral.cxx:915
 RooRealIntegral.cxx:916
 RooRealIntegral.cxx:917
 RooRealIntegral.cxx:918
 RooRealIntegral.cxx:919
 RooRealIntegral.cxx:920
 RooRealIntegral.cxx:921
 RooRealIntegral.cxx:922
 RooRealIntegral.cxx:923
 RooRealIntegral.cxx:924
 RooRealIntegral.cxx:925
 RooRealIntegral.cxx:926
 RooRealIntegral.cxx:927
 RooRealIntegral.cxx:928
 RooRealIntegral.cxx:929
 RooRealIntegral.cxx:930
 RooRealIntegral.cxx:931
 RooRealIntegral.cxx:932
 RooRealIntegral.cxx:933
 RooRealIntegral.cxx:934
 RooRealIntegral.cxx:935
 RooRealIntegral.cxx:936
 RooRealIntegral.cxx:937
 RooRealIntegral.cxx:938
 RooRealIntegral.cxx:939
 RooRealIntegral.cxx:940
 RooRealIntegral.cxx:941
 RooRealIntegral.cxx:942
 RooRealIntegral.cxx:943
 RooRealIntegral.cxx:944
 RooRealIntegral.cxx:945
 RooRealIntegral.cxx:946
 RooRealIntegral.cxx:947
 RooRealIntegral.cxx:948
 RooRealIntegral.cxx:949
 RooRealIntegral.cxx:950
 RooRealIntegral.cxx:951
 RooRealIntegral.cxx:952
 RooRealIntegral.cxx:953
 RooRealIntegral.cxx:954
 RooRealIntegral.cxx:955
 RooRealIntegral.cxx:956
 RooRealIntegral.cxx:957
 RooRealIntegral.cxx:958
 RooRealIntegral.cxx:959
 RooRealIntegral.cxx:960
 RooRealIntegral.cxx:961
 RooRealIntegral.cxx:962
 RooRealIntegral.cxx:963
 RooRealIntegral.cxx:964
 RooRealIntegral.cxx:965
 RooRealIntegral.cxx:966
 RooRealIntegral.cxx:967
 RooRealIntegral.cxx:968
 RooRealIntegral.cxx:969
 RooRealIntegral.cxx:970
 RooRealIntegral.cxx:971
 RooRealIntegral.cxx:972
 RooRealIntegral.cxx:973
 RooRealIntegral.cxx:974
 RooRealIntegral.cxx:975
 RooRealIntegral.cxx:976
 RooRealIntegral.cxx:977
 RooRealIntegral.cxx:978
 RooRealIntegral.cxx:979
 RooRealIntegral.cxx:980
 RooRealIntegral.cxx:981
 RooRealIntegral.cxx:982
 RooRealIntegral.cxx:983
 RooRealIntegral.cxx:984
 RooRealIntegral.cxx:985
 RooRealIntegral.cxx:986
 RooRealIntegral.cxx:987
 RooRealIntegral.cxx:988
 RooRealIntegral.cxx:989
 RooRealIntegral.cxx:990
 RooRealIntegral.cxx:991
 RooRealIntegral.cxx:992
 RooRealIntegral.cxx:993
 RooRealIntegral.cxx:994
 RooRealIntegral.cxx:995
 RooRealIntegral.cxx:996
 RooRealIntegral.cxx:997
 RooRealIntegral.cxx:998
 RooRealIntegral.cxx:999
 RooRealIntegral.cxx:1000
 RooRealIntegral.cxx:1001
 RooRealIntegral.cxx:1002
 RooRealIntegral.cxx:1003
 RooRealIntegral.cxx:1004
 RooRealIntegral.cxx:1005
 RooRealIntegral.cxx:1006
 RooRealIntegral.cxx:1007
 RooRealIntegral.cxx:1008
 RooRealIntegral.cxx:1009
 RooRealIntegral.cxx:1010
 RooRealIntegral.cxx:1011
 RooRealIntegral.cxx:1012
 RooRealIntegral.cxx:1013
 RooRealIntegral.cxx:1014
 RooRealIntegral.cxx:1015
 RooRealIntegral.cxx:1016
 RooRealIntegral.cxx:1017
 RooRealIntegral.cxx:1018
 RooRealIntegral.cxx:1019
 RooRealIntegral.cxx:1020
 RooRealIntegral.cxx:1021
 RooRealIntegral.cxx:1022
 RooRealIntegral.cxx:1023
 RooRealIntegral.cxx:1024
 RooRealIntegral.cxx:1025
 RooRealIntegral.cxx:1026
 RooRealIntegral.cxx:1027
 RooRealIntegral.cxx:1028
 RooRealIntegral.cxx:1029
 RooRealIntegral.cxx:1030
 RooRealIntegral.cxx:1031
 RooRealIntegral.cxx:1032
 RooRealIntegral.cxx:1033
 RooRealIntegral.cxx:1034
 RooRealIntegral.cxx:1035
 RooRealIntegral.cxx:1036
 RooRealIntegral.cxx:1037
 RooRealIntegral.cxx:1038
 RooRealIntegral.cxx:1039
 RooRealIntegral.cxx:1040
 RooRealIntegral.cxx:1041
 RooRealIntegral.cxx:1042
 RooRealIntegral.cxx:1043
 RooRealIntegral.cxx:1044
 RooRealIntegral.cxx:1045
 RooRealIntegral.cxx:1046
 RooRealIntegral.cxx:1047
 RooRealIntegral.cxx:1048
 RooRealIntegral.cxx:1049