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

//////////////////////////////////////////////////////////////////////////////
//
// BEGIN_HTML
// RooProdPdf is an efficient implementation of a product of PDFs of the form 
//
//  PDF_1 * PDF_2 * ... * PDF_N
//
// PDFs may share observables. If that is the case any irreducable subset
// of PDFS that share observables will be normalized with explicit numeric
// integration as any built-in normalization will no longer be valid.
//
// Alternatively, products using conditional PDFs can be defined, e.g.
//
//    F(x|y) * G(y)
//
// meaning a pdf F(x) _given_ y and a PDF G(y). In this contruction F is only
// normalized w.r.t x and G is normalized w.r.t y. The product in this construction
// is properly normalized.
//
// If exactly one of the component PDFs supports extended likelihood fits, the
// product will also be usable in extended mode, returning the number of expected
// events from the extendable component PDF. The extendable component does not
// have to appear in any specific place in the list.
// 
// END_HTML
//

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

#include "TIterator.h"
#include "RooProdPdf.h"
#include "RooRealProxy.h"
#include "RooProdGenContext.h"
#include "RooGenProdProj.h"
#include "RooProduct.h"
#include "RooNameReg.h"
#include "RooMsgService.h"
#include "RooFormulaVar.h"
#include "RooRealVar.h"
#include "RooAddition.h"
#include "RooGlobalFunc.h"
#include "RooConstVar.h"
#include "RooWorkspace.h"
#include "RooRangeBoolean.h"
#include "RooCustomizer.h"
#include "RooRealIntegral.h"
#include "RooTrace.h"

#include <string.h>
#include <sstream>
#include <algorithm>

#ifndef _WIN32
#include <strings.h>
#else

static char *strtok_r(char *s1, const char *s2, char **lasts)
{
  char *ret;
  
  if (s1 == NULL)
    s1 = *lasts;
  while(*s1 && strchr(s2, *s1))
    ++s1;
  if(*s1 == '\0')
    return NULL;
  ret = s1;
  while(*s1 && !strchr(s2, *s1))
    ++s1;
  if(*s1)
    *s1++ = '\0';
  *lasts = s1;
  return ret;
}

#endif


#include "TSystem.h"

using namespace std;

ClassImp(RooProdPdf)
;



//_____________________________________________________________________________
RooProdPdf::RooProdPdf() :
  _curNormSet(0),
  _cutOff(0),
  _extendedIndex(-1),
  _useDefaultGen(kFALSE),
  _refRangeName(0),
  _selfNorm(kTRUE)
{
  // Default constructor
  _pdfIter = _pdfList.createIterator() ;  
  TRACE_CREATE 
}



//_____________________________________________________________________________
RooProdPdf::RooProdPdf(const char *name, const char *title, Double_t cutOff) :
  RooAbsPdf(name,title), 
  _cacheMgr(this,10),
  _genCode(10),
  _cutOff(cutOff),
  _pdfList("!pdfs","List of PDFs",this),
  _extendedIndex(-1),
  _useDefaultGen(kFALSE),
  _refRangeName(0),
  _selfNorm(kTRUE)
{
  // Dummy constructor
  _pdfIter = _pdfList.createIterator() ;
  TRACE_CREATE 
}



//_____________________________________________________________________________
RooProdPdf::RooProdPdf(const char *name, const char *title,
		       RooAbsPdf& pdf1, RooAbsPdf& pdf2, Double_t cutOff) : 
  RooAbsPdf(name,title), 
  _cacheMgr(this,10),
  _genCode(10),
  _cutOff(cutOff),
  _pdfList("!pdfs","List of PDFs",this),
  _pdfIter(_pdfList.createIterator()), 
  _extendedIndex(-1),
  _useDefaultGen(kFALSE),
  _refRangeName(0),
  _selfNorm(kTRUE)
{
  // Constructor with 2 PDFs (most frequent use case).
  // 
  // The optional cutOff parameter can be used as a speed optimization if
  // one or more of the PDF have sizable regions with very small values,
  // which would pull the entire product of PDFs to zero in those regions.
  //
  // After each PDF multiplication, the running product is compared with
  // the cutOff parameter. If the running product is smaller than the
  // cutOff value, the product series is terminated and remaining PDFs
  // are not evaluated.
  //
  // There is no magic value of the cutOff, the user should experiment
  // to find the appropriate balance between speed and precision.
  // If a cutoff is specified, the PDFs most likely to be small should
  // be put first in the product. The default cutOff value is zero.
  //

  _pdfList.add(pdf1) ;
  RooArgSet* nset1 = new RooArgSet("nset") ;
  _pdfNSetList.Add(nset1) ;
  if (pdf1.canBeExtended()) {
    _extendedIndex = _pdfList.index(&pdf1) ;
  }

  _pdfList.add(pdf2) ;
  RooArgSet* nset2 = new RooArgSet("nset") ;
  _pdfNSetList.Add(nset2) ;

  if (pdf2.canBeExtended()) {
    if (_extendedIndex>=0) {
      // Protect against multiple extended terms
      coutW(InputArguments) << "RooProdPdf::RooProdPdf(" << GetName() 
			    << ") multiple components with extended terms detected,"
			    << " product will not be extendible." << endl ;
      _extendedIndex=-1 ;
    } else {
      _extendedIndex=_pdfList.index(&pdf2) ;
    }
  }
  TRACE_CREATE 
}



//_____________________________________________________________________________
RooProdPdf::RooProdPdf(const char* name, const char* title, const RooArgList& inPdfList, Double_t cutOff) :
  RooAbsPdf(name,title), 
  _cacheMgr(this,10),
  _genCode(10),
  _cutOff(cutOff),
  _pdfList("!pdfs","List of PDFs",this),
  _pdfIter(_pdfList.createIterator()), 
  _extendedIndex(-1),
  _useDefaultGen(kFALSE),
  _refRangeName(0),
  _selfNorm(kTRUE)
{
  // Constructor from a list of PDFs
  // 
  // The optional cutOff parameter can be used as a speed optimization if
  // one or more of the PDF have sizable regions with very small values,
  // which would pull the entire product of PDFs to zero in those regions.
  //
  // After each PDF multiplication, the running product is compared with
  // the cutOff parameter. If the running product is smaller than the
  // cutOff value, the product series is terminated and remaining PDFs
  // are not evaluated.
  //
  // There is no magic value of the cutOff, the user should experiment
  // to find the appropriate balance between speed and precision.
  // If a cutoff is specified, the PDFs most likely to be small should
  // be put first in the product. The default cutOff value is zero.

  TIterator* iter = inPdfList.createIterator() ;
  RooAbsArg* arg ;
  Int_t numExtended(0) ;
  while((arg=(RooAbsArg*)iter->Next())) {
    RooAbsPdf* pdf = dynamic_cast<RooAbsPdf*>(arg) ;
    if (!pdf) {
      coutW(InputArguments) << "RooProdPdf::RooProdPdf(" << GetName() << ") list arg " 
			    << arg->GetName() << " is not a PDF, ignored" << endl ;
      continue ;
    }
    _pdfList.add(*pdf) ;

    RooArgSet* nset = new RooArgSet("nset") ;
    _pdfNSetList.Add(nset) ;

    if (pdf->canBeExtended()) {
      _extendedIndex = _pdfList.index(pdf) ;
      numExtended++ ;
    }
  }

  // Protect against multiple extended terms
  if (numExtended>1) {
    coutW(InputArguments) << "RooProdPdf::RooProdPdf(" << GetName() 
			  << ") WARNING: multiple components with extended terms detected,"
			  << " product will not be extendible." << endl ;
    _extendedIndex = -1 ;
  }

  delete iter ;
  TRACE_CREATE 
}



//_____________________________________________________________________________
RooProdPdf::RooProdPdf(const char* name, const char* title, const RooArgSet& fullPdfSet,
		       const RooCmdArg& arg1, const RooCmdArg& arg2,
		       const RooCmdArg& arg3, const RooCmdArg& arg4,
		       const RooCmdArg& arg5, const RooCmdArg& arg6,
		       const RooCmdArg& arg7, const RooCmdArg& arg8) :
  RooAbsPdf(name,title), 
  _cacheMgr(this,10),
  _genCode(10),
  _cutOff(0),
  _pdfList("!pdfs","List of PDFs",this),
  _pdfIter(_pdfList.createIterator()), 
  _extendedIndex(-1),
  _useDefaultGen(kFALSE),
  _refRangeName(0),
  _selfNorm(kTRUE)
{
  // Constructor from named argument list
  //
  // fullPdf -- Set of 'regular' PDFS that are normalized over all their observables
  // Conditional(pdfSet,depSet) -- Add PDF to product with condition that it
  //                               only be normalized over specified observables
  //                               any remaining observables will be conditional
  //                               observables
  //                               
  //
  // For example, given a PDF F(x,y) and G(y)
  //
  // RooProdPdf("P","P",G,Conditional(F,x)) will construct a 2-dimensional PDF as follows:
  // 
  //   P(x,y) = G(y)/Int[y]G(y) * F(x,y)/Int[x]G(x,y)
  //
  // which is a well normalized and properly defined PDF, but different from the
  //  
  //  P'(x,y) = F(x,y)*G(y) / Int[x,y] F(x,y)*G(y)
  //
  // In the former case the y distribution of P is identical to that of G, while
  // F only is used to determine the correlation between X and Y. In the latter
  // case the Y distribution is defined by the product of F and G.
  //
  // This P(x,y) construction is analoguous to generating events from F(x,y) with
  // a prototype dataset sampled from G(y)
  
  RooLinkedList l ;
  l.Add((TObject*)&arg1) ;  l.Add((TObject*)&arg2) ;  
  l.Add((TObject*)&arg3) ;  l.Add((TObject*)&arg4) ;
  l.Add((TObject*)&arg5) ;  l.Add((TObject*)&arg6) ;  
  l.Add((TObject*)&arg7) ;  l.Add((TObject*)&arg8) ;

  initializeFromCmdArgList(fullPdfSet,l) ;
  TRACE_CREATE 
}



//_____________________________________________________________________________
RooProdPdf::RooProdPdf(const char* name, const char* title,
		       const RooCmdArg& arg1, const RooCmdArg& arg2,
		       const RooCmdArg& arg3, const RooCmdArg& arg4,
		       const RooCmdArg& arg5, const RooCmdArg& arg6,
		       const RooCmdArg& arg7, const RooCmdArg& arg8) :
  RooAbsPdf(name,title), 
  _cacheMgr(this,10),
  _genCode(10),
  _cutOff(0),
  _pdfList("!pdfList","List of PDFs",this),
  _pdfIter(_pdfList.createIterator()), 
  _extendedIndex(-1),
  _useDefaultGen(kFALSE),
  _refRangeName(0),
  _selfNorm(kTRUE)
{
  // Constructor from named argument list
  //
  // fullPdf -- Set of 'regular' PDFS that are normalized over all their observables
  // Conditional(pdfSet,depSet) -- Add PDF to product with condition that it
  //                               only be normalized over specified observables
  //                               any remaining observables will be conditional
  //                               observables
  //                               
  //
  // For example, given a PDF F(x,y) and G(y)
  //
  // RooProdPdf("P","P",G,Conditional(F,x)) will construct a 2-dimensional PDF as follows:
  // 
  //   P(x,y) = G(y)/Int[y]G(y) * F(x,y)/Int[x]G(x,y)
  //
  // which is a well normalized and properly defined PDF, but different from the
  //  
  //  P'(x,y) = F(x,y)*G(y) / Int[x,y] F(x,y)*G(y)
  //
  // In the former case the y distribution of P is identical to that of G, while
  // F only is used to determine the correlation between X and Y. In the latter
  // case the Y distribution is defined by the product of F and G.
  //
  // This P(x,y) construction is analoguous to generating events from F(x,y) with
  // a prototype dataset sampled from G(y)
  
  RooLinkedList l ;
  l.Add((TObject*)&arg1) ;  l.Add((TObject*)&arg2) ;  
  l.Add((TObject*)&arg3) ;  l.Add((TObject*)&arg4) ;
  l.Add((TObject*)&arg5) ;  l.Add((TObject*)&arg6) ;  
  l.Add((TObject*)&arg7) ;  l.Add((TObject*)&arg8) ;

  initializeFromCmdArgList(RooArgSet(),l) ;
  TRACE_CREATE 
}



//_____________________________________________________________________________
RooProdPdf::RooProdPdf(const char* name, const char* title, const RooArgSet& fullPdfSet, const RooLinkedList& cmdArgList) :
  RooAbsPdf(name,title), 
  _cacheMgr(this,10),
  _genCode(10),
  _cutOff(0),
  _pdfList("!pdfs","List of PDFs",this),
  _pdfIter(_pdfList.createIterator()), 
  _extendedIndex(-1),
  _useDefaultGen(kFALSE),
  _refRangeName(0),
  _selfNorm(kTRUE)
{
  // Internal constructor from list of named arguments  
  initializeFromCmdArgList(fullPdfSet, cmdArgList) ;
  TRACE_CREATE 
}



//_____________________________________________________________________________
RooProdPdf::RooProdPdf(const RooProdPdf& other, const char* name) :
  RooAbsPdf(other,name), 
  _cacheMgr(other._cacheMgr,this),
  _genCode(other._genCode),
  _cutOff(other._cutOff),
  _pdfList("!pdfs",this,other._pdfList),
  _pdfIter(_pdfList.createIterator()), 
  _extendedIndex(other._extendedIndex),
  _useDefaultGen(other._useDefaultGen),
  _refRangeName(other._refRangeName),
  _selfNorm(other._selfNorm),
  _defNormSet(other._defNormSet)
{
  // Copy constructor

  // Clone contents of normalizarion set list
  TIterator* iter = other._pdfNSetList.MakeIterator() ;
  RooArgSet* nset ;
  while((nset=(RooArgSet*)iter->Next())) {
    RooArgSet* tmp = (RooArgSet*) nset->snapshot() ;
    tmp->setName(nset->GetName()) ;
    _pdfNSetList.Add(tmp) ;
  }
  delete iter ;
  TRACE_CREATE 
}



//_____________________________________________________________________________
void RooProdPdf::initializeFromCmdArgList(const RooArgSet& fullPdfSet, const RooLinkedList& l)
{
  // Initialize RooProdPdf configuration from given list of RooCmdArg configuration arguments
  // and set of 'regular' p.d.f.s in product

  Int_t numExtended(0) ;

  // Process set of full PDFS
  TIterator* siter = fullPdfSet.createIterator() ;
  RooAbsPdf* pdf ;
  while((pdf=(RooAbsPdf*)siter->Next())) {
    _pdfList.add(*pdf) ;
    RooArgSet* nset1 = new RooArgSet("nset") ;
    _pdfNSetList.Add(nset1) ;       

    if (pdf->canBeExtended()) {
      _extendedIndex = _pdfList.index(pdf) ;
      numExtended++ ;
    }

  }
  delete siter ;

  // Process list of conditional PDFs
  TIterator* iter = l.MakeIterator() ;
  RooCmdArg* carg ;
  while((carg=(RooCmdArg*)iter->Next())) {

    if (!TString(carg->GetName()).CompareTo("Conditional")) {

      Int_t argType = carg->getInt(0) ;
      RooArgSet* pdfSet = (RooArgSet*) carg->getSet(0) ;
      RooArgSet* normSet = (RooArgSet*) carg->getSet(1) ;

      TIterator* siter2 = pdfSet->createIterator() ;
      RooAbsPdf* thePdf ;
      while((thePdf=(RooAbsPdf*)siter2->Next())) {
	_pdfList.add(*thePdf) ;

	if (argType==0) {
	  RooArgSet* tmp = (RooArgSet*) normSet->snapshot() ;
	  tmp->setName("nset") ;
	  _pdfNSetList.Add(tmp) ;       	  
	} else {
	  RooArgSet* tmp = (RooArgSet*) normSet->snapshot() ;
	  tmp->setName("cset") ;
	  _pdfNSetList.Add(tmp) ;       	  
	}

	if (thePdf->canBeExtended()) {
	  _extendedIndex = _pdfList.index(thePdf) ;
	  numExtended++ ;
	}

      }
      delete siter2 ;


    } else if (TString(carg->GetName()).CompareTo("")) {
      coutW(InputArguments) << "Unknown arg: " << carg->GetName() << endl ;
    }
  }

  // Protect against multiple extended terms
  if (numExtended>1) {
    coutW(InputArguments) << "RooProdPdf::RooProdPdf(" << GetName() 
			  << ") WARNING: multiple components with extended terms detected,"
			  << " product will not be extendible." << endl ;
    _extendedIndex = -1 ;
  }


  delete iter ;
}



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

  _pdfNSetList.Delete() ;
  delete _pdfIter ;
  TRACE_DESTROY 
}



//_____________________________________________________________________________
Double_t RooProdPdf::getValV(const RooArgSet* set) const 
{
  // Overload getVal() to intercept normalization set for use in evaluate()
  _curNormSet = (RooArgSet*)set ;
  return RooAbsPdf::getValV(set) ;
}



//_____________________________________________________________________________
Double_t RooProdPdf::evaluate() const 
{
  // Calculate current value of object

  Int_t code ;
  CacheElem* cache = (CacheElem*) _cacheMgr.getObj(_curNormSet,0,&code) ;
  
  // If cache doesn't have our configuration, recalculate here
  if (!cache) {
    RooArgList *plist(0) ;
    RooLinkedList *nlist(0) ;
    getPartIntList(_curNormSet,0,plist,nlist,code) ;
    cache = (CacheElem*) _cacheMgr.getObj(_curNormSet,0,&code) ;
  }


  return calculate(*cache) ;
}



//_____________________________________________________________________________
Double_t RooProdPdf::calculate(const RooArgList* partIntList, const RooLinkedList* normSetList) const
{
  // Calculate running product of pdfs terms, using the supplied
  // normalization set in 'normSetList' for each component

  RooAbsReal* partInt ;
  RooArgSet* normSet ;
  Double_t value(1.0) ;
  Int_t n = partIntList->getSize() ;

  Int_t i ;
  for (i=0 ; i<n ; i++) {
    partInt = ((RooAbsReal*)partIntList->at(i)) ;
    normSet = ((RooArgSet*)normSetList->At(i)) ;    
    Double_t piVal = partInt->getVal(normSet->getSize()>0 ? normSet : 0) ;
//     cout << "RooProdPdf::calculate(" << GetName() << ") partInt(" << partInt->GetName() << ") = " << piVal << " normSet = " << normSet << " " << (normSet->getSize()>0 ? *normSet : RooArgSet()) << endl ;
    value *= piVal ;
    if (value<=_cutOff) {
      break ;
    }
  }

  return value ;
}



//_____________________________________________________________________________
Double_t RooProdPdf::calculate(const RooProdPdf::CacheElem& cache, Bool_t /*verbose*/) const
{
  // Calculate running product of pdfs terms, using the supplied
  // normalization set in 'normSetList' for each component

  //cout << "RooProdPdf::calculate from cache" << endl ;

  Double_t value(1.0) ;

  if (cache._isRearranged) {

    if (dologD(Eval)) {
      cxcoutD(Eval) << "RooProdPdf::calculate(" << GetName() << ") rearranged product calculation" 
                    << " calculate: num = " << cache._rearrangedNum->GetName() << " = " << cache._rearrangedNum->getVal() << endl ;
//       cache._rearrangedNum->printComponentTree("",0,5) ;    
      cxcoutD(Eval) << "calculate: den = " << cache._rearrangedDen->GetName() << " = " << cache._rearrangedDen->getVal() << endl ;      
//       cache._rearrangedDen->printComponentTree("",0,5) ;    
    }

    value = cache._rearrangedNum->getVal() / cache._rearrangedDen->getVal() ;
    
  } else {
    
    
    RooAbsReal* partInt ;
    RooArgSet* normSet ;
    Int_t n = cache._partList.getSize() ;
 
//     cout << "RooProdPdf::calculate(" << GetName() << ") regular product chain calculation n=" << n << endl ;
  
    Int_t i ;
    RooFIter plIter = cache._partList.fwdIterator() ;
    RooFIter nlIter = cache._normList.fwdIterator() ;

    for (i=0 ; i<n ; i++) {
      partInt = (RooAbsReal*) plIter.next() ; //((RooAbsReal*)cache._partList.at(i)) ;
      normSet = (RooArgSet*) nlIter.next() ; // ((RooArgSet*)cache._normList.At(i)) ;    
      Double_t piVal = partInt->getVal(normSet->getSize()>0 ? normSet : 0) ;
//       cout << "RooProdPdf::calculate(" << GetName() << ") partInt " << partInt->GetName() << " is of type " << partInt->IsA()->GetName() << endl ;
//       if (dynamic_cast<RooAbsPdf*>(partInt)) {
// 	cout << "product term " << partInt->GetName() << " normalized over " << (normSet?*normSet:RooArgSet())  
// 	     << " = " << partInt->getVal() << " / " << ((RooAbsPdf*)partInt)->getNorm(normSet) << " = " << piVal << endl ;
//       } else {
// 	cout << "product term " << partInt->GetName() << " normalized over " << (normSet?*normSet:RooArgSet()) << " = " << piVal << endl ;
//       }
      value *= piVal ;
      if (value<=_cutOff) {
	break ;
      }
    }
  }

//   cout << "return value = " << value << endl ;
  return value ;
}



//_____________________________________________________________________________
void RooProdPdf::factorizeProduct(const RooArgSet& normSet, const RooArgSet& intSet,
				  RooLinkedList& termList, RooLinkedList& normList, 
				  RooLinkedList& impDepList, RooLinkedList& crossDepList,
				  RooLinkedList& intList) const 
{
  // Factorize product in irreducible terms for given choice of integration/normalization
 
  _pdfIter->Reset() ;
  RooAbsPdf* pdf ;

  // List of all term dependents: normalization and imported
  RooLinkedList depAllList ;
  RooLinkedList depIntNoNormList ;

  // Setup lists for factorization terms and their dependents
  RooArgSet* term(0) ;
  RooArgSet* termNormDeps(0) ;
  RooArgSet* termAllDeps(0) ;
  RooArgSet* termIntDeps(0) ;
  RooArgSet* termIntNoNormDeps(0) ;
  TIterator* lIter = termList.MakeIterator() ;
  TIterator* ldIter = normList.MakeIterator() ;
  TIterator* laIter = depAllList.MakeIterator() ;
  TIterator* nIter = _pdfNSetList.MakeIterator() ;
  RooArgSet* pdfNSet, *pdfNSetOrig, *pdfCSet ;

  // Loop over the PDFs
  while((pdf=(RooAbsPdf*)_pdfIter->Next())) {    
    pdfNSetOrig = (RooArgSet*) nIter->Next() ;
    lIter->Reset() ;
    ldIter->Reset() ;
    laIter->Reset() ;

    // Reduce pdfNSet to actual dependents
    if (string("nset")==pdfNSetOrig->GetName()) {
      pdfNSet = pdf->getObservables(*pdfNSetOrig) ;
      pdfCSet = new RooArgSet ;
    } else if (string("cset") == pdfNSetOrig->GetName()) {
      RooArgSet* tmp = pdf->getObservables(normSet) ;
      tmp->remove(*pdfNSetOrig,kTRUE,kTRUE) ;
      pdfCSet = pdfNSetOrig ;
      pdfNSet = tmp ;
    } else {
      // Legacy mode. Interpret at NSet for backward compatibility
      pdfNSet = pdf->getObservables(*pdfNSetOrig) ;
      pdfCSet = new RooArgSet ;
    }


    RooArgSet pdfNormDeps ; // Dependents to be normalized for the PDF
    RooArgSet pdfAllDeps ; // All dependents of this PDF ;

    // Make list of all dependents of this PDF
    RooArgSet* tmp = pdf->getObservables(normSet) ;
    pdfAllDeps.add(*tmp) ;
    delete tmp ;

    
//     cout << GetName() << ": pdf = " << pdf->GetName() << " pdfAllDeps = " << pdfAllDeps << " pdfNSet = " << *pdfNSet << " pdfCSet = " << *pdfCSet << endl ;

    // Make list of normalization dependents for this PDF ;
    if (pdfNSet->getSize()>0) {
      // PDF is conditional
      RooArgSet* tmp2 = (RooArgSet*) pdfAllDeps.selectCommon(*pdfNSet) ;
      pdfNormDeps.add(*tmp2) ;
      delete tmp2 ;
    } else {
      // PDF is regular
      pdfNormDeps.add(pdfAllDeps) ;
    }

//     cout << GetName() << ": pdfNormDeps for " << pdf->GetName() << " = " << pdfNormDeps << endl ;

    RooArgSet* pdfIntSet = pdf->getObservables(intSet) ;

    // WVE if we have no norm deps, conditional observables should be taken out of pdfIntSet
    if (pdfNormDeps.getSize()==0 && pdfCSet->getSize()>0) {
      pdfIntSet->remove(*pdfCSet,kTRUE,kTRUE) ;
//       cout << GetName() << ": have no norm deps, removing conditional observables from intset" << endl ;
    }

    RooArgSet pdfIntNoNormDeps(*pdfIntSet) ;
    pdfIntNoNormDeps.remove(pdfNormDeps,kTRUE,kTRUE) ;


//     cout << GetName() << ": pdf = " << pdf->GetName() << " intset = " << *pdfIntSet << " pdfIntNoNormDeps = " << pdfIntNoNormDeps << endl ;

    // Check if this PDF has dependents overlapping with one of the existing terms
    Bool_t done(kFALSE) ;
    while((term=(RooArgSet*)lIter->Next())) {      
      termNormDeps=(RooArgSet*)ldIter->Next() ;
      termAllDeps=(RooArgSet*)laIter->Next() ;

      // PDF should be added to existing term if 
      // 1) It has overlapping normalization dependents with any other PDF in existing term
      // 2) It has overlapping dependents of any class for which integration is requested
      // 3) If normalization happens over multiple ranges, and those ranges are both defined
      //    in either observable

      Bool_t normOverlap = pdfNormDeps.overlaps(*termNormDeps)  ;
      //Bool_t intOverlap =  pdfIntSet->overlaps(*termAllDeps) ;

      if (normOverlap) {
//  	cout << GetName() << ": this term overlaps with term " << (*term) << " in normalization observables" << endl ;

	term->add(*pdf) ;
	termNormDeps->add(pdfNormDeps,kFALSE) ;
	termAllDeps->add(pdfAllDeps,kFALSE) ;
	if (!termIntDeps) {
	  termIntDeps = new RooArgSet("termIntDeps") ;
	}
	termIntDeps->add(*pdfIntSet,kFALSE) ;
	if (!termIntNoNormDeps) {
	  termIntNoNormDeps = new RooArgSet("termIntNoNormDeps") ;
	}
	termIntNoNormDeps->add(pdfIntNoNormDeps,kFALSE) ;
	done = kTRUE ;
      }
    }

    // If not, create a new term
    if (!done) {
      if (!(pdfNormDeps.getSize()==0&&pdfAllDeps.getSize()==0&&pdfIntSet->getSize()==0) || normSet.getSize()==0) {
//   	cout << GetName() << ": creating new term" << endl ;
	term = new RooArgSet("term") ;
	termNormDeps = new RooArgSet("termNormDeps") ;
	termAllDeps = new RooArgSet("termAllDeps") ;
	termIntDeps = new RooArgSet("termIntDeps") ;
	termIntNoNormDeps = new RooArgSet("termIntNoNormDeps") ;
	
	term->add(*pdf) ;
	termNormDeps->add(pdfNormDeps,kFALSE) ;
	termAllDeps->add(pdfAllDeps,kFALSE) ;
	termIntDeps->add(*pdfIntSet,kFALSE) ;
	termIntNoNormDeps->add(pdfIntNoNormDeps,kFALSE) ;
	
	termList.Add(term) ;
	normList.Add(termNormDeps) ;
	depAllList.Add(termAllDeps) ;
	intList.Add(termIntDeps) ;
	depIntNoNormList.Add(termIntNoNormDeps) ;
      }
    }

    // We own the reduced version of pdfNSet
    delete pdfNSet ;
    delete pdfIntSet ;
    if (pdfCSet != pdfNSetOrig) {
      delete pdfCSet ;
    }
  }

  // Loop over list of terms again to determine 'imported' observables
  lIter->Reset() ;
  ldIter->Reset() ;
  laIter->Reset() ;
  TIterator* innIter = depIntNoNormList.MakeIterator() ;

//   cout << "now making second loop over terms" << endl ;
  // coverity[UNUSED_VALUE]
  while((term=(RooArgSet*)lIter->Next())) {
    RooArgSet* normDeps = (RooArgSet*) ldIter->Next() ;
    RooArgSet* allDeps = (RooArgSet*) laIter->Next() ;
    RooArgSet* intNoNormDeps = (RooArgSet*) innIter->Next() ;

    // Make list of wholly imported dependents
    RooArgSet impDeps(*allDeps) ;
    impDeps.remove(*normDeps,kTRUE,kTRUE) ;
    impDepList.Add(impDeps.snapshot()) ;
//     cout << GetName() << ": list of imported dependents for term " << (*term) << " set to " << impDeps << endl ;

    // Make list of cross dependents (term is self contained for these dependents, 
    // but components import dependents from other components)
    RooArgSet* crossDeps = (RooArgSet*) intNoNormDeps->selectCommon(*normDeps) ;
    crossDepList.Add(crossDeps->snapshot()) ;
//     cout << GetName() << ": list of cross dependents for term " << (*term) << " set to " << *crossDeps << endl ;
    delete crossDeps ;
  }


  depAllList.Delete() ;
  depIntNoNormList.Delete() ;

  delete nIter ;
  delete lIter ;
  delete ldIter ;
  delete laIter ;
  delete innIter ;

  return ;
}




//_____________________________________________________________________________
void RooProdPdf::getPartIntList(const RooArgSet* nset, const RooArgSet* iset, 
				pRooArgList& partList, pRooLinkedList& nsetList, 
				Int_t& code, const char* isetRangeName) const 
{
  // Return list of (partial) integrals of product terms for integration
  // of p.d.f over observables iset while normalization over observables nset.
  // Also return list of normalization sets to be used to evaluate 
  // each component in the list correctly.

//    cout << "   FOLKERT::RooProdPdf::getPartIntList(" << GetName() <<")  nset = " << (nset?*nset:RooArgSet()) << endl 
//         << "   _normRange = " << _normRange << endl 
//         << "   iset = " << (iset?*iset:RooArgSet()) << endl 
//         << "   isetRangeName = " << (isetRangeName?isetRangeName:"<null>") << endl ;

  // Check if this configuration was created before
  Int_t sterileIdx(-1) ;

  CacheElem* cache = (CacheElem*) _cacheMgr.getObj(nset,iset,&sterileIdx,isetRangeName) ;
  if (cache) {
    code = _cacheMgr.lastIndex() ;
    partList = &cache->_partList ;
    nsetList = &cache->_normList ;
    return ;
  }

  // Create containers for partial integral components to be generated
  cache = new CacheElem ;

  // Factorize the product in irreducible terms for this nset
  RooLinkedList terms, norms, imp, ints, cross ;
//   cout << "RooProdPdf::getPIL -- now calling factorizeProduct()" << endl ;


  // Normalization set used for factorization  
  RooArgSet factNset(nset ? (*nset) : _defNormSet) ;
//   cout << GetName() << "factNset = " << factNset << endl ;

  factorizeProduct(factNset,iset?(*iset):RooArgSet(),terms,norms,imp,cross,ints) ;

  RooArgSet *norm, *integ, *xdeps, *imps ;
  
  // Group irriducible terms that need to be (partially) integrated together
  RooLinkedList groupedList ; 
  RooArgSet outerIntDeps ;
//   cout << "RooProdPdf::getPIL -- now calling groupProductTerms()" << endl ;
  groupProductTerms(groupedList,outerIntDeps,terms,norms,imp,ints,cross) ;
  TIterator* gIter = groupedList.MakeIterator() ;
  RooLinkedList* group ;

  // Loop over groups
//   cout<<"FK: pdf("<<GetName()<<") Starting selecting F(x|y)!"<<endl;
  // Find groups of type F(x|y), i.e. termImpSet!=0, construct ratio object
  map<string,RooArgSet> ratioTerms ;
  while((group=(RooLinkedList*)gIter->Next())) {    
    if (group->GetSize()==1) {
//       cout<<"FK: Starting Single Term"<<endl;

      RooArgSet* term = (RooArgSet*) group->At(0) ;
      	  
      Int_t termIdx = terms.IndexOf(term) ;
      norm=(RooArgSet*) norms.At(termIdx) ;
      imps=(RooArgSet*)imp.At(termIdx) ;      
      RooArgSet termNSet(*norm), termImpSet(*imps) ;      

//       cout<<"FK: termImpSet.getSize()  = "<<termImpSet.getSize()<< " " << termImpSet << endl;
//       cout<<"FK: _refRangeName = "<<_refRangeName<<endl;

      if (termImpSet.getSize()>0 && _refRangeName!=0) {	  

// 	cout << "WVE now here" << endl ;

	// WVE we can skip this if the ref range is equal to the normalization range
	Bool_t rangeIdentical(kTRUE) ;
	TIterator* niter = termNSet.createIterator() ;
	RooRealVar* normObs ;
// 	cout << "_normRange = " << _normRange << " _refRangeName = " << RooNameReg::str(_refRangeName) << endl ;
	while((normObs=(RooRealVar*)niter->Next())) {
	  //FK: Here the refRange should be compared to _normRange, if it's set, and to the normObs range if it's not set
	  if(_normRange.Length()>0){	    
	    if (normObs->getMin(_normRange.Data())!=normObs->getMin(RooNameReg::str(_refRangeName))) rangeIdentical=kFALSE ;
	    if (normObs->getMax(_normRange.Data())!=normObs->getMax(RooNameReg::str(_refRangeName))) rangeIdentical=kFALSE ;	    
	  }
	  else{
	    if (normObs->getMin()!=normObs->getMin(RooNameReg::str(_refRangeName))) rangeIdentical=kFALSE ;
	    if (normObs->getMax()!=normObs->getMax(RooNameReg::str(_refRangeName))) rangeIdentical=kFALSE ;
	  }
	}
	delete niter ;
// 	cout<<"FK: rangeIdentical Single = "<<(rangeIdentical ? 'T':'F')<<endl;
	// coverity[CONSTANT_EXPRESSION_RESULT]
	if (!rangeIdentical || 1) {
// 	  cout << "PREPARING RATIO HERE (SINGLE TERM)" << endl ;	  
	  RooAbsReal* ratio = makeCondPdfRatioCorr(*(RooAbsReal*)term->first(),termNSet,termImpSet,normRange(),RooNameReg::str(_refRangeName)) ;	  
	  ostringstream str ; termImpSet.printValue(str) ;
// 	  cout << GetName() << "inserting ratio term" << endl ;
	  ratioTerms[str.str()].add(*ratio) ;
	}	
      }
	
    } else {
//       cout<<"FK: Starting Composite Term"<<endl;
      
      RooArgSet compTermSet, compTermNorm ;
      TIterator* tIter = group->MakeIterator() ;
      RooArgSet* term ;
      while((term=(RooArgSet*)tIter->Next())) {
	
	Int_t termIdx = terms.IndexOf(term) ;
	norm=(RooArgSet*) norms.At(termIdx) ;
	imps=(RooArgSet*)imp.At(termIdx) ;	  
	RooArgSet termNSet(*norm), termImpSet(*imps) ;
	
	if (termImpSet.getSize()>0 && _refRangeName!=0) {	  

	  // WVE we can skip this if the ref range is equal to the normalization range
	  Bool_t rangeIdentical(kTRUE) ;
	  TIterator* niter = termNSet.createIterator() ;
	  RooRealVar* normObs ;
	  //FK: Here the refRange should be compared to _normRange, if it's set, and to the normObs range if it's not set
	  if(_normRange.Length()>0){
	    while((normObs=(RooRealVar*)niter->Next())) {
	      if (normObs->getMin(_normRange.Data())!=normObs->getMin(RooNameReg::str(_refRangeName))) rangeIdentical=kFALSE ;
	      if (normObs->getMax(_normRange.Data())!=normObs->getMax(RooNameReg::str(_refRangeName))) rangeIdentical=kFALSE ;
	    }
	  }
	  else{
	    while((normObs=(RooRealVar*)niter->Next())) {
	      if (normObs->getMin()!=normObs->getMin(RooNameReg::str(_refRangeName))) rangeIdentical=kFALSE ;
	      if (normObs->getMax()!=normObs->getMax(RooNameReg::str(_refRangeName))) rangeIdentical=kFALSE ;
	    }
	  }
// 	  cout<<"FK: rangeIdentical Composite = "<<(rangeIdentical ? 'T':'F') <<endl;
	  delete niter ;
	  if (!rangeIdentical || 1) {	    
// 	    cout << "PREPARING RATIO HERE (COMPOSITE TERM)" << endl ;	    
	    RooAbsReal* ratio = makeCondPdfRatioCorr(*(RooAbsReal*)term->first(),termNSet,termImpSet,normRange(),RooNameReg::str(_refRangeName)) ;
	    ostringstream str ; termImpSet.printValue(str) ;
	    ratioTerms[str.str()].add(*ratio) ;
	  }
	}      
      }
      delete tIter ;
    }

  }
  gIter->Reset() ;

  // Find groups with y as termNSet
  // Replace G(y) with (G(y),ratio)
  while((group=(RooLinkedList*)gIter->Next())) {    
    if (group->GetSize()==1) {
      RooArgSet* term = (RooArgSet*) group->At(0) ;
      
      Int_t termIdx = terms.IndexOf(term) ;
      norm=(RooArgSet*) norms.At(termIdx) ;
      imps=(RooArgSet*)imp.At(termIdx) ;      
      RooArgSet termNSet(*norm), termImpSet(*imps) ;      

      // If termNset matches index of ratioTerms, insert ratio here
      ostringstream str ; termNSet.printValue(str) ;
      if (ratioTerms[str.str()].getSize()>0) {
//  	cout << "MUST INSERT RATIO OBJECT IN TERM (SINGLE) " << *term << endl ;
	term->add(ratioTerms[str.str()]) ;
      }
      
    } else {
      
      RooArgSet compTermSet, compTermNorm ;
      TIterator* tIter = group->MakeIterator() ;
      RooArgSet* term ;
      while((term=(RooArgSet*)tIter->Next())) {
	
	Int_t termIdx = terms.IndexOf(term) ;
	norm=(RooArgSet*) norms.At(termIdx) ;
	imps=(RooArgSet*)imp.At(termIdx) ;	  
	RooArgSet termNSet(*norm), termImpSet(*imps) ;
	
	// If termNset matches index of ratioTerms, insert ratio here
	ostringstream str ; termNSet.printValue(str) ;
	if (ratioTerms[str.str()].getSize()>0) {
//  	  cout << "MUST INSERT RATIO OBJECT IN TERM (COMPOSITE)" << *term << endl ;
	  term->add(ratioTerms[str.str()]) ;
	}
	
      }      
      delete tIter ;
    }
  }
  gIter->Reset() ;
  
  
  while((group=(RooLinkedList*)gIter->Next())) {
    
//     cout << GetName() << ":now processing group" << endl ;
//      group->Print("1") ;
    
    if (group->GetSize()==1) {
//       cout << "processing atomic item" << endl ;
      RooArgSet* term = (RooArgSet*) group->At(0) ;

      Int_t termIdx = terms.IndexOf(term) ;
      norm=(RooArgSet*) norms.At(termIdx) ;
      integ=(RooArgSet*) ints.At(termIdx) ;
      xdeps=(RooArgSet*)cross.At(termIdx) ;
      imps=(RooArgSet*)imp.At(termIdx) ;
	
      RooArgSet termNSet, termISet, termXSet, termImpSet ;
      
      // Take list of normalization, integrated dependents from factorization algorithm
      termISet.add(*integ) ;
      termNSet.add(*norm) ;
      
      // Cross-imported integrated dependents
      termXSet.add(*xdeps) ;
      termImpSet.add(*imps) ;
      
//       cout << GetName() << ": termISet = " << termISet << endl ;
//       cout << GetName() << ": termNSet = " << termNSet << endl ;
//       cout << GetName() << ": termXSet = " << termXSet << endl ;
//       cout << GetName() << ": termImpSet = " << termImpSet << endl ;
      
      // Add prefab term to partIntList. 
      Bool_t isOwned(kFALSE) ;
      vector<RooAbsReal*> func = processProductTerm(nset,iset,isetRangeName,term,termNSet,termISet,isOwned) ;
      if (func[0]) {
	cache->_partList.add(*func[0]) ;
	if (isOwned) cache->_ownedList.addOwned(*func[0]) ;
	
	cache->_normList.Add(norm->snapshot(kFALSE)) ;

	cache->_numList.addOwned(*func[1]) ;
	cache->_denList.addOwned(*func[2]) ;
// 	cout << "func[0]=" << func[0]->IsA()->GetName() << "::" << func[0]->GetName() << endl ;
// 	cout << "func[1]=" << func[1]->IsA()->GetName() << "::" << func[1]->GetName() << endl ;
// 	cout << "func[2]=" << func[2]->IsA()->GetName() << "::" << func[2]->GetName() << endl ;
      }
    } else {

//        cout << "processing composite item" << endl ;
      RooArgSet compTermSet, compTermNorm, compTermNum, compTermDen ;
      TIterator* tIter = group->MakeIterator() ;
      RooArgSet* term ;
      while((term=(RooArgSet*)tIter->Next())) {

//   	cout << GetName() << ": processing term " << (*term) << " of composite item" << endl ;
	
	Int_t termIdx = terms.IndexOf(term) ;
	norm=(RooArgSet*) norms.At(termIdx) ;
	integ=(RooArgSet*) ints.At(termIdx) ;
	xdeps=(RooArgSet*)cross.At(termIdx) ;
	imps=(RooArgSet*)imp.At(termIdx) ;
	
	RooArgSet termNSet, termISet, termXSet, termImpSet ;
	termISet.add(*integ) ;
	termNSet.add(*norm) ;
	termXSet.add(*xdeps) ;
	termImpSet.add(*imps) ;

	// Remove outer integration dependents from termISet
	termISet.remove(outerIntDeps,kTRUE,kTRUE) ;
//    	cout << "termISet = " ; termISet.Print("1") ;

//  	cout << GetName() << ": termISet = " << termISet << endl ;
//  	cout << GetName() << ": termNSet = " << termNSet << endl ;
//   	cout << GetName() << ": termXSet = " << termXSet << endl ;
//   	cout << GetName() << ": termImpSet = " << termImpSet << endl ;

	Bool_t isOwned ;
	vector<RooAbsReal*> func = processProductTerm(nset,iset,isetRangeName,term,termNSet,termISet,isOwned,kTRUE) ;
//    	cout << GetName() << ": created composite term component " << func[0]->GetName() << endl ;
	if (func[0]) {
	  compTermSet.add(*func[0]) ;
	  if (isOwned) cache->_ownedList.addOwned(*func[0]) ;
	  compTermNorm.add(*norm,kFALSE) ;

	  compTermNum.add(*func[1]) ;
	  compTermDen.add(*func[2]) ;
	  //cache->_numList.add(*func[1]) ;
	  //cache->_denList.add(*func[2]) ;

// 	  cout << "func[0]=" << func[0]->IsA()->GetName() << "::" << func[0]->GetName() << endl ;
// 	  cout << "func[1]=" << func[1]->IsA()->GetName() << "::" << func[1]->GetName() << endl ;
// 	  cout << "func[2]=" << func[2]->IsA()->GetName() << "::" << func[2]->GetName() << endl ;
	}      
      }

//       cout << GetName() << ": constructing special composite product" << endl ;
//       cout << GetName() << ": compTermSet = " ; compTermSet.Print("1") ;
      
      // WVE THIS NEEDS TO BE REARRANGED

      // compTermset is set van partial integrals to be multiplied
      // prodtmp = product (compTermSet)
      // inttmp = int ( prodtmp ) d (outerIntDeps) _range_isetRangeName

      const char* prodname = makeRGPPName("SPECPROD",compTermSet,outerIntDeps,RooArgSet(),isetRangeName) ;
      RooProduct* prodtmp = new RooProduct(prodname,prodname,compTermSet) ;
      cache->_ownedList.addOwned(*prodtmp) ;

      const char* intname = makeRGPPName("SPECINT",compTermSet,outerIntDeps,RooArgSet(),isetRangeName) ;
      RooRealIntegral* inttmp = new RooRealIntegral(intname,intname,*prodtmp,outerIntDeps,0,0,isetRangeName) ;
      inttmp->setStringAttribute("PROD_TERM_TYPE","SPECINT") ;

      cache->_ownedList.addOwned(*inttmp) ;
      cache->_partList.add(*inttmp);

      // Product of numerator terms
      string prodname_num = makeRGPPName("SPECPROD_NUM",compTermNum,RooArgSet(),RooArgSet(),0) ;
      RooProduct* prodtmp_num = new RooProduct(prodname_num.c_str(),prodname_num.c_str(),compTermNum) ;
      prodtmp_num->addOwnedComponents(compTermNum) ;
      cache->_ownedList.addOwned(*prodtmp_num) ;
      
      // Product of denominator terms
      string prodname_den = makeRGPPName("SPECPROD_DEN",compTermDen,RooArgSet(),RooArgSet(),0) ;
      RooProduct* prodtmp_den = new RooProduct(prodname_den.c_str(),prodname_den.c_str(),compTermDen) ;
      prodtmp_den->addOwnedComponents(compTermDen) ;
      cache->_ownedList.addOwned(*prodtmp_den) ;

      // Ratio
      string name = Form("SPEC_RATIO(%s,%s)",prodname_num.c_str(),prodname_den.c_str()) ;
      RooFormulaVar* ndr = new RooFormulaVar(name.c_str(),"@0/@1",RooArgList(*prodtmp_num,*prodtmp_den)) ;

      // Integral of ratio
      RooAbsReal* numtmp = ndr->createIntegral(outerIntDeps,isetRangeName) ;      
      numtmp->addOwnedComponents(*ndr) ;

      cache->_numList.addOwned(*numtmp) ;
      cache->_denList.addOwned(*(RooAbsArg*)RooFit::RooConst(1).clone("1")) ;                
      cache->_normList.Add(compTermNorm.snapshot(kFALSE)) ;

      delete tIter ;      
    }
  }
  delete gIter ;

  // Store the partial integral list and return the assigned code ;
  code = _cacheMgr.setObj(nset,iset,(RooAbsCacheElement*)cache,RooNameReg::ptr(isetRangeName)) ;

  // Fill references to be returned
  partList = &cache->_partList ;
  nsetList = &cache->_normList; 

  // WVE DEBUG PRINTING
//   cout << "RooProdPdf::getPartIntList(" << GetName() << ") made cache " << cache << " with the following nset pointers " ;
//   TIterator* nliter = nsetList->MakeIterator() ;
//   RooArgSet* ns ;
//   while((ns=(RooArgSet*)nliter->Next())) {
//     cout << ns << " " ;
//   }
//   cout << endl ;
//   delete nliter ;

//   cout << "   FOLKERT::RooProdPdf::getPartIntList END(" << GetName() <<")  nset = " << (nset?*nset:RooArgSet()) << endl 
//        << "   _normRange = " << _normRange << endl 
//        << "   iset = " << (iset?*iset:RooArgSet()) << endl 
//        << "   partList = " ; 
//   if(partListPointer) partListPointer->Print() ;
//   cout << "   nsetList = " ;
//   if(nsetListPointer) nsetListPointer->Print("") ;
//   cout << "   code = " << code << endl
//        << "   isetRangeName = " << (isetRangeName?isetRangeName:"<null>") << endl ;


  // Need to rearrange product in case of multiple ranges
  if (_normRange.Contains(",")) {
    rearrangeProduct(*cache) ;
  }

  // We own contents of all lists filled by factorizeProduct() 
  groupedList.Delete() ;
  terms.Delete() ;
  ints.Delete() ;
  imp.Delete() ;
  norms.Delete() ;
  cross.Delete() ;
}




//_____________________________________________________________________________
RooAbsReal* RooProdPdf::makeCondPdfRatioCorr(RooAbsReal& pdf, const RooArgSet& termNset, const RooArgSet& /*termImpSet*/, const char* normRangeTmp, const char* refRange) const
{
  // For single normalization ranges
  RooAbsReal* ratio_num = pdf.createIntegral(termNset,normRangeTmp) ;
  RooAbsReal* ratio_den = pdf.createIntegral(termNset,refRange) ;
  RooFormulaVar* ratio = new RooFormulaVar(Form("ratio(%s,%s)",ratio_num->GetName(),ratio_den->GetName()),"@0/@1",
					   RooArgList(*ratio_num,*ratio_den)) ;
  
  ratio->addOwnedComponents(RooArgSet(*ratio_num,*ratio_den)) ;	      
  ratio->setAttribute("RATIO_TERM") ;
  return ratio ;
}




//_____________________________________________________________________________
void RooProdPdf::rearrangeProduct(RooProdPdf::CacheElem& cache) const
{
  TIterator* iterp = cache._partList.createIterator() ;
  TIterator* iter1 = cache._numList.createIterator() ;
  TIterator* iter2 = cache._denList.createIterator() ;
  TIterator* itern = cache._normList.MakeIterator() ;
  RooAbsReal* part, *num, *den ;
  RooArgSet nomList ;

  list<string> rangeComps ;
  char buf[1024] ;  
  strlcpy(buf,_normRange.Data(),1024) ;
  char* save(0) ;
  char* token = strtok_r(buf,",",&save) ;
  while(token) {
    rangeComps.push_back(token) ;
    token = strtok_r(0,",",&save) ;
  }


  map<string,RooArgSet> denListList ; 
  RooArgSet specIntDeps ;
  string specIntRange ;

//   cout << "THIS IS REARRANGEPRODUCT" << endl ;

  while((part=(RooAbsReal*)iterp->Next())) {

    itern->Next() ;
    num = (RooAbsReal*) iter1->Next() ;
    den = (RooAbsReal*) iter2->Next() ;
    
//     cout << "now processing part " << part->GetName() << " of type " << part->getStringAttribute("PROD_TERM_TYPE") << endl ;
//     cout << "corresponding numerator = " << num->GetName() << endl ;
//     cout << "corresponding denominator = " << den->GetName() << endl ;
    

    RooFormulaVar* ratio(0) ;
    RooArgSet origNumTerm ;
    
    if (string("SPECINT")==part->getStringAttribute("PROD_TERM_TYPE")) {

	RooRealIntegral* orig = (RooRealIntegral*) num;
	RooFormulaVar* specratio = (RooFormulaVar*) &orig->integrand() ;
	RooProduct* func = (RooProduct*) specratio->getParameter(0) ;

	RooArgSet* comps = orig->getComponents() ;
	TIterator* iter = comps->createIterator() ;
	RooAbsArg* carg ;
	while((carg=(RooAbsArg*)iter->Next())) {
	  if (carg->getAttribute("RATIO_TERM")) {
	    ratio = (RooFormulaVar*)carg ;
	    break ;
	  }
	}
	delete iter ;
	delete comps ;

	if (ratio) {
	  RooCustomizer cust(*func,"blah") ;
	  cust.replaceArg(*ratio,RooFit::RooConst(1)) ;
	  RooAbsArg* funcCust = cust.build() ;
// 	  cout << "customized function = " << endl ;
// 	  funcCust->printComponentTree() ;
	  nomList.add(*funcCust) ;
	} else {	
	  nomList.add(*func) ;    
	}


    } else {

      // Find the ratio term
      RooAbsReal* func = num;
      // If top level object is integral, navigate to integrand
      if (func->InheritsFrom(RooRealIntegral::Class())) {
	func = (RooAbsReal*) &((RooRealIntegral*)(func))->integrand();
      }
      if (func->InheritsFrom(RooProduct::Class())) {
// 	cout << "product term found: " ; func->Print() ;
	RooArgSet comps(((RooProduct*)(func))->components()) ;
	TIterator* iter = comps.createIterator() ;
	RooAbsArg* arg ;
	while((arg=(RooAbsArg*)iter->Next())) {
	  if (arg->getAttribute("RATIO_TERM")) {
	    ratio = (RooFormulaVar*)(arg) ;
	  } else {
	    origNumTerm.add(*arg) ;
	  }
	}
	delete iter ;
      }

      if (ratio) {
// 	cout << "Found ratio term in numerator: " << ratio->GetName() << endl ;
// 	cout << "Adding only original term to numerator: " << origNumTerm << endl ;
	nomList.add(origNumTerm) ;
      } else {
	nomList.add(*num) ;    
      }
      
    }

    for (list<string>::iterator iter = rangeComps.begin() ; iter != rangeComps.end() ; ++iter) {
      // If denominator is an integral, make a clone with the integration range adjusted to
      // the selected component of the normalization integral
//       cout << "NOW PROCESSING DENOMINATOR " << den->IsA()->GetName() << "::" << den->GetName() << endl ;

      if (string("SPECINT")==part->getStringAttribute("PROD_TERM_TYPE")) {

// 	cout << "create integral: SPECINT case" << endl ;
	RooRealIntegral* orig = (RooRealIntegral*) num;
	RooFormulaVar* specRatio = (RooFormulaVar*) &orig->integrand() ;
	specIntDeps.add(orig->intVars()) ;
	if (orig->intRange()) {
	  specIntRange = orig->intRange() ;
	}
	//RooProduct* numtmp = (RooProduct*) specRatio->getParameter(0) ;
	RooProduct* dentmp = (RooProduct*) specRatio->getParameter(1) ;

// 	cout << "numtmp = " << numtmp->IsA()->GetName() << "::" << numtmp->GetName() << endl ;
// 	cout << "dentmp = " << dentmp->IsA()->GetName() << "::" << dentmp->GetName() << endl ;

// 	cout << "denominator components are " << dentmp->components() << endl ;
	RooArgSet comps(dentmp->components()) ;
	TIterator* piter = comps.createIterator() ;
	RooAbsReal* parg ;
	while((parg=(RooAbsReal*)piter->Next())) {
// 	  cout << "now processing denominator component " << parg->IsA()->GetName() << "::" << parg->GetName() << endl ;

	  if (ratio && parg->dependsOn(*ratio)) {
// 	    cout << "depends in value of ratio" << endl ;

	    // Make specialize ratio instance
	    RooAbsReal* specializedRatio = specializeRatio(*(RooFormulaVar*)ratio,iter->c_str()) ;
	    
// 	    cout << "specRatio = " << endl ;
// 	    specializedRatio->printComponentTree() ;
	    
	    // Replace generic ratio with specialized ratio
	    RooAbsArg *partCust(0) ;
	    if (parg->InheritsFrom(RooAddition::Class())) {
	      


	      RooAddition* tmpadd = (RooAddition*)(parg) ;	    

	      RooCustomizer cust(*tmpadd->list1().first(),Form("blah_%s",iter->c_str())) ;	  
	      cust.replaceArg(*ratio,*specializedRatio) ;	  
	      partCust = cust.build() ;
	      
	    } else {
	      RooCustomizer cust(*parg,Form("blah_%s",iter->c_str())) ;	  
	      cust.replaceArg(*ratio,*specializedRatio) ;	  
	      partCust = cust.build() ;
	    }
	    
	    // Print customized denominator
// 	    cout << "customized function = " << endl ;
// 	    partCust->printComponentTree() ;
	    
	    RooAbsReal* specializedPartCust = specializeIntegral(*(RooAbsReal*)partCust,iter->c_str()) ;

	    // Finally divide again by ratio
	    string name = Form("%s_divided_by_ratio",specializedPartCust->GetName()) ;
	    RooFormulaVar* specIntFinal = new RooFormulaVar(name.c_str(),"@0/@1",RooArgList(*specializedPartCust,*specializedRatio)) ;
	    
	    denListList[*iter].add(*specIntFinal) ;		  
	  } else {

// 	    cout << "does NOT depend on value of ratio" << endl ;
// 	    parg->Print("t") ;

	    denListList[*iter].add(*specializeIntegral(*parg,iter->c_str())) ;		  

	  }
	}
// 	cout << "end iteration over denominator components" << endl ;
	delete piter ;
	      

      } else {

	if (ratio) {

	  RooAbsReal* specRatio = specializeRatio(*(RooFormulaVar*)ratio,iter->c_str()) ;

	  // If integral is 'Int r(y)*g(y) dy ' then divide a posteriori by r(y)
// 	  cout << "have ratio, orig den = " << den->GetName() << endl ;

	  RooArgSet tmp(origNumTerm) ;
	  tmp.add(*specRatio) ;
	  string pname = makeRGPPName("PROD",tmp,RooArgSet(),RooArgSet(),0) ;
	  RooProduct* specDenProd = new RooProduct(pname.c_str(),pname.c_str(),tmp) ;
	  RooAbsReal* specInt(0) ;

	  if (den->InheritsFrom(RooRealIntegral::Class())) {
	    specInt = specDenProd->createIntegral(((RooRealIntegral*)den)->intVars(),iter->c_str()) ;
	  } else if (den->InheritsFrom(RooAddition::Class())) {	    
	    RooAddition* orig = (RooAddition*)den ;
	    RooRealIntegral* origInt = (RooRealIntegral*) orig->list1().first() ;
	    specInt = specDenProd->createIntegral(origInt->intVars(),iter->c_str()) ;
	  } else {
	    throw string("this should not happen") ;
	  }
	  
	  //RooAbsReal* specInt = specializeIntegral(*den,iter->c_str()) ;
	  string name = Form("%s_divided_by_ratio",specInt->GetName()) ;
	  RooFormulaVar* specIntFinal = new RooFormulaVar(name.c_str(),"@0/@1",RooArgList(*specInt,*specRatio)) ;
	  denListList[*iter].add(*specIntFinal) ;
	} else {
	  denListList[*iter].add(*specializeIntegral(*den,iter->c_str())) ;
	}
	
      }
    }
    
  }

  // Do not rearrage terms if numerator and denominator are effectively empty
  if (nomList.getSize()==0) {
    delete iter1 ;
    delete iter2 ;
    delete itern ;
    return ;
  }

  string name = Form("%s_numerator",GetName()) ;
  // WVE FIX THIS (2)

  RooAbsReal* numerator = new RooProduct(name.c_str(),name.c_str(),nomList) ;

  RooArgSet products ;
//   cout << "nomList = " << nomList << endl ;
  for (map<string,RooArgSet>::iterator iter = denListList.begin() ; iter != denListList.end() ; ++iter) {
//     cout << "denList[" << iter->first << "] = " << iter->second << endl ;
    name = Form("%s_denominator_comp_%s",GetName(),iter->first.c_str()) ;
    // WVE FIX THIS (2)
    RooProduct* prod_comp = new RooProduct(name.c_str(),name.c_str(),iter->second) ;
    products.add(*prod_comp) ;
  }  
  name = Form("%s_denominator_sum",GetName()) ;
  RooAbsReal* norm = new RooAddition(name.c_str(),name.c_str(),products) ;
  norm->addOwnedComponents(products) ;

  if (specIntDeps.getSize()>0) {
    // Apply posterior integration required for SPECINT case
    
    string namesr = Form("SPEC_RATIO(%s,%s)",numerator->GetName(),norm->GetName()) ;
    RooFormulaVar* ndr = new RooFormulaVar(namesr.c_str(),"@0/@1",RooArgList(*numerator,*norm)) ;
    
    // Integral of ratio
    RooAbsReal* numtmp = ndr->createIntegral(specIntDeps,specIntRange.c_str()) ;      
    
    numerator = numtmp ;
    norm = (RooAbsReal*) RooFit::RooConst(1).Clone() ;
  }


//   cout << "numerator" << endl ;
//   numerator->printComponentTree("",0,5) ;
//   cout << "denominator" << endl ;
//   norm->printComponentTree("",0,5) ;


  // WVE DEBUG
  //RooMsgService::instance().debugWorkspace()->import(RooArgSet(*numerator,*norm)) ;
  
  cache._rearrangedNum = numerator ;
  cache._rearrangedDen = norm ;
  cache._isRearranged = kTRUE ;

  delete iter1 ;
  delete iter2 ;
  delete iterp ;
  delete itern ;
  
}


//_____________________________________________________________________________
RooAbsReal* RooProdPdf::specializeRatio(RooFormulaVar& input, const char* targetRangeName) const
{  
  RooRealIntegral* numint = (RooRealIntegral*) input.getParameter(0) ;
  RooRealIntegral* denint = (RooRealIntegral*) input.getParameter(1) ;
  
  RooAbsReal* numint_spec = specializeIntegral(*numint,targetRangeName) ;
  
  RooAbsReal* ret =  new RooFormulaVar(Form("ratio(%s,%s)",numint_spec->GetName(),denint->GetName()),"@0/@1",RooArgList(*numint_spec,*denint)) ;
  ret->addOwnedComponents(*numint_spec) ;
  
  return ret ;
}



//_____________________________________________________________________________
RooAbsReal* RooProdPdf::specializeIntegral(RooAbsReal& input, const char* targetRangeName) const
{
  if (input.InheritsFrom(RooRealIntegral::Class())) {
    
    // If input is integral, recreate integral but override integration range to be targetRangeName
    RooRealIntegral* orig = (RooRealIntegral*)&input ;
//     cout << "creating integral: integrand =  " << orig->integrand().GetName() << " vars = " << orig->intVars() << " range = " << targetRangeName << endl ;
    return orig->integrand().createIntegral(orig->intVars(),targetRangeName) ;
    
  } else if (input.InheritsFrom(RooAddition::Class())) {

    // If input is sum of integrals, recreate integral from first component of set, but override integration range to be targetRangeName
    RooAddition* orig = (RooAddition*)&input ;
    RooRealIntegral* origInt = (RooRealIntegral*) orig->list1().first() ;
//     cout << "creating integral from addition: integrand =  " << origInt->integrand().GetName() << " vars = " << origInt->intVars() << " range = " << targetRangeName << endl ;
    return origInt->integrand().createIntegral(origInt->intVars(),targetRangeName) ;

  } else {

//     cout << "specializeIntegral: unknown input type " << input.IsA()->GetName() << "::" << input.GetName() << endl ;
  }

  return &input ;
}


//_____________________________________________________________________________
void RooProdPdf::groupProductTerms(RooLinkedList& groupedTerms, RooArgSet& outerIntDeps, 
				   const RooLinkedList& terms, const RooLinkedList& norms, 
				   const RooLinkedList& imps, const RooLinkedList& ints, const RooLinkedList& /*cross*/) const
{
  // Group product into terms that can be calculated independently

  // Start out with each term in its own group
  TIterator* tIter = terms.MakeIterator() ;
  RooArgSet* term ;
  while((term=(RooArgSet*)tIter->Next())) {
    RooLinkedList* group = new RooLinkedList ;
    group->Add(term) ;
    groupedTerms.Add(group) ;
  }
  delete tIter ;

  // Make list of imported dependents that occur in any term
  RooArgSet allImpDeps ;
  TIterator* iIter = imps.MakeIterator() ;
  RooArgSet *impDeps ;
  while((impDeps=(RooArgSet*)iIter->Next())) {
    allImpDeps.add(*impDeps,kFALSE) ;
  }
  delete iIter ;

  // Make list of integrated dependents that occur in any term
  RooArgSet allIntDeps ;
  iIter = ints.MakeIterator() ;
  RooArgSet *intDeps ;
  while((intDeps=(RooArgSet*)iIter->Next())) {
    allIntDeps.add(*intDeps,kFALSE) ;
  }
  delete iIter ;
  
  RooArgSet* tmp = (RooArgSet*) allIntDeps.selectCommon(allImpDeps) ;
  outerIntDeps.removeAll() ;
  outerIntDeps.add(*tmp) ;
  delete tmp ;

  // Now iteratively merge groups that should be (partially) integrated together
  TIterator* oidIter = outerIntDeps.createIterator() ;
  TIterator* glIter = groupedTerms.MakeIterator() ;
  RooAbsArg* outerIntDep ;
  while ((outerIntDep =(RooAbsArg*)oidIter->Next())) {
    
    // Collect groups that feature this dependent
    RooLinkedList* newGroup = 0 ;

    // Loop over groups
    RooLinkedList* group ;
    glIter->Reset() ;    
    Bool_t needMerge = kFALSE ;
    while((group=(RooLinkedList*)glIter->Next())) {

      // See if any term in this group depends in any ay on outerDepInt
      RooArgSet* term2 ;
      TIterator* tIter2 = group->MakeIterator() ;
      while((term2=(RooArgSet*)tIter2->Next())) {

	Int_t termIdx = terms.IndexOf(term2) ;
	RooArgSet* termNormDeps = (RooArgSet*) norms.At(termIdx) ;
	RooArgSet* termIntDeps = (RooArgSet*) ints.At(termIdx) ;
	RooArgSet* termImpDeps = (RooArgSet*) imps.At(termIdx) ;

	if (termNormDeps->contains(*outerIntDep) || 
	    termIntDeps->contains(*outerIntDep) || 
	    termImpDeps->contains(*outerIntDep)) {
	  needMerge = kTRUE ;
	}
	
      }

      if (needMerge) {
	// Create composite group if not yet existing
	if (newGroup==0) {
	  newGroup = new RooLinkedList ;
	}
	
	// Add terms of this group to new term      
	tIter2->Reset() ;
	while((term2=(RooArgSet*)tIter2->Next())) {
	  newGroup->Add(term2) ;	  
	}

	// Remove this group from list and delete it (but not its contents)
	groupedTerms.Remove(group) ;
	delete group ;
      }
      delete tIter2 ;
    }
    // If a new group has been created to merge terms dependent on current outerIntDep, add it to group list
    if (newGroup) {
      groupedTerms.Add(newGroup) ;
    }

  }

  delete glIter ;
  delete oidIter ;
}



//_____________________________________________________________________________
std::vector<RooAbsReal*> RooProdPdf::processProductTerm(const RooArgSet* nset, const RooArgSet* iset, const char* isetRangeName,
							const RooArgSet* term,const RooArgSet& termNSet, const RooArgSet& termISet,
							Bool_t& isOwned, Bool_t forceWrap) const
{
  // Calculate integrals of factorized product terms over observables iset while normalized
  // to observables in nset.

//    cout << "   FOLKERT::RooProdPdf(" << GetName() <<") processProductTerm nset = " << (nset?*nset:RooArgSet()) << endl 
//          << "   _normRange = " << _normRange << endl 
//          << "   iset = " << (iset?*iset:RooArgSet()) << endl 
//          << "   isetRangeName = " << (isetRangeName?isetRangeName:"<null>") << endl 
//          << "   term = " << (term?*term:RooArgSet()) << endl 
//          << "   termNSet = " << termNSet << endl 
//          << "   termISet = " << termISet << endl 
//          << "   isOwned = " << isOwned << endl 
//          << "   forceWrap = " << forceWrap << endl ;

  vector<RooAbsReal*> ret(3) ; ret[0] = 0 ; ret[1] = 0 ; ret[2] = 0 ;

  // CASE I: factorizing term: term is integrated over all normalizing observables
  // -----------------------------------------------------------------------------
  // Check if all observbales of this term are integrated. If so the term cancels
  if (termNSet.getSize()>0 && termNSet.getSize()==termISet.getSize() && isetRangeName==0) {

    
    //cout << "processProductTerm(" << GetName() << ") case I " << endl ;
     
    // Term factorizes    
    return ret ;
  }
  
  // CASE II: Dropped terms: if term is entirely unnormalized, it should be dropped
  // ------------------------------------------------------------------------------
  if (nset && termNSet.getSize()==0) {

    //cout << "processProductTerm(" << GetName() << ") case II " << endl ;
    
    // Drop terms that are not asked to be normalized  
    return ret ;
  }
  
  if (iset && termISet.getSize()>0) {
    if (term->getSize()==1) {
      
      // CASE IIIa: Normalized and partially integrated single PDF term
      //---------------------------------------------------------------

      TIterator* pIter = term->createIterator() ;
      RooAbsPdf* pdf = (RooAbsPdf*) pIter->Next() ;
      delete pIter ;
      
      RooAbsReal* partInt = pdf->createIntegral(termISet,termNSet,isetRangeName) ;
      //partInt->setOperMode(operMode()) ;
      partInt->setStringAttribute("PROD_TERM_TYPE","IIIa") ;

      isOwned=kTRUE ;

      //cout << "processProductTerm(" << GetName() << ") case IIIa func = " << partInt->GetName() << endl ;

      ret[0] = partInt ;

      // Split mode results 
      ret[1] = pdf->createIntegral(termISet,isetRangeName) ;
      ret[2] = pdf->createIntegral(termNSet,normRange()) ;      

      return ret ;

      
    } else {
      
      // CASE IIIb: Normalized and partially integrated composite PDF term
      //---------------------------------------------------------------

      // Use auxiliary class RooGenProdProj to calculate this term
      const char* name = makeRGPPName("GENPROJ_",*term,termISet,termNSet,isetRangeName) ;
      RooAbsReal* partInt = new RooGenProdProj(name,name,*term,termISet,termNSet,isetRangeName) ;
      partInt->setStringAttribute("PROD_TERM_TYPE","IIIb") ;
      //partInt->setOperMode(operMode()) ;

      //cout << "processProductTerm(" << GetName() << ") case IIIb func = " << partInt->GetName() << endl ;
      
      isOwned=kTRUE ;
      ret[0] = partInt ;
      
      const char* name1 = makeRGPPName("PROD",*term,RooArgSet(),RooArgSet(),0) ;

      // WVE FIX THIS
      RooProduct* tmp_prod = new RooProduct(name1,name1,*term) ;
      
      ret[1] = tmp_prod->createIntegral(termISet,isetRangeName) ;
      ret[2] = tmp_prod->createIntegral(termNSet,normRange()) ;

      return ret ;
    }      
  }
  
  // CASE IVa: Normalized non-integrated composite PDF term
  // -------------------------------------------------------
  if (nset && nset->getSize()>0 && term->getSize()>1) {
    // Composite term needs normalized integration

    const char* name = makeRGPPName("GENPROJ_",*term,termISet,termNSet,isetRangeName) ;
    RooAbsReal* partInt = new RooGenProdProj(name,name,*term,termISet,termNSet,isetRangeName,normRange()) ;
    partInt->setExpensiveObjectCache(expensiveObjectCache()) ;
    
    partInt->setStringAttribute("PROD_TERM_TYPE","IVa") ;
    //partInt->setOperMode(operMode()) ;

    //cout << "processProductTerm(" << GetName() << ") case IVa func = " << partInt->GetName() << endl ;

    isOwned=kTRUE ;
    ret[0] = partInt ;

    const char* name1 = makeRGPPName("PROD",*term,RooArgSet(),RooArgSet(),0) ;

    // WVE FIX THIS
    RooProduct* tmp_prod = new RooProduct(name1,name1,*term) ;

    ret[1] = tmp_prod->createIntegral(termISet,isetRangeName) ;
    ret[2] = tmp_prod->createIntegral(termNSet,normRange()) ;

    return ret ;
  }
  
  // CASE IVb: Normalized, non-integrated single PDF term 
  // -----------------------------------------------------
  TIterator* pIter = term->createIterator() ;
  RooAbsPdf* pdf ;
  while((pdf=(RooAbsPdf*)pIter->Next())) {

    if (forceWrap) {

      // Construct representative name of normalization wrapper
      TString name(pdf->GetName()) ;
      name.Append("_NORM[") ;
      TIterator* nIter = termNSet.createIterator() ;
      RooAbsArg* arg ;
      Bool_t first(kTRUE) ;
      while((arg=(RooAbsArg*)nIter->Next())) {
	if (!first) {
	  name.Append(",") ;
	} else {
	  first=kFALSE ;
	}		   
	name.Append(arg->GetName()) ;
      }      
      if (normRange()) {
	name.Append("|") ;
	name.Append(normRange()) ;
      }
      name.Append("]") ;
      delete nIter ;

      RooAbsReal* partInt = new RooRealIntegral(name.Data(),name.Data(),*pdf,RooArgSet(),&termNSet) ;
      partInt->setStringAttribute("PROD_TERM_TYPE","IVb") ;
      isOwned=kTRUE ;      
      
      //cout << "processProductTerm(" << GetName() << ") case IVb func = " << partInt->GetName() << endl ;

      delete pIter ;
      ret[0] = partInt ;

      ret[1] = pdf->createIntegral(RooArgSet()) ;
      ret[2] = pdf->createIntegral(termNSet,normRange()) ;
      
      return ret ;


    } else {
      isOwned=kFALSE ;

      delete pIter ;
      //cout << "processProductTerm(" << GetName() << ") case IVb func = " << pdf->GetName() << endl ;


      pdf->setStringAttribute("PROD_TERM_TYPE","IVb") ;
      ret[0] = pdf ;

      ret[1] = pdf->createIntegral(RooArgSet()) ;
      ret[2] = termNSet.getSize()>0 ? pdf->createIntegral(termNSet,normRange()) : ((RooAbsReal*)RooFit::RooConst(1).clone("1")) ;
      return ret  ;
    }
  }
  delete pIter ;

  coutE(Eval) << "RooProdPdf::processProductTerm(" << GetName() << ") unidentified term!!!" << endl ;
  return ret ;
}




//_____________________________________________________________________________
const char* RooProdPdf::makeRGPPName(const char* pfx, const RooArgSet& term, const RooArgSet& iset, 
				     const RooArgSet& nset, const char* isetRangeName) const
{
  // Make an appropriate automatic name for a RooGenProdProj object in getPartIntList() 

  static TString pname ;
  pname = pfx ;
  pname.Append("[") ;

  TIterator* pIter = term.createIterator() ;
  
  // Encode component names
  Bool_t first(kTRUE) ;
  RooAbsPdf* pdf ;
  while((pdf=(RooAbsPdf*)pIter->Next())) {
    if (first) {
      first = kFALSE ;
    } else {
      pname.Append("_X_") ;
    }
    pname.Append(pdf->GetName()) ;
  }
  delete pIter ;
  pname.Append("]") ;

  pname.Append(integralNameSuffix(iset,&nset,isetRangeName,kTRUE)) ;  

  return pname.Data() ;
}



//_____________________________________________________________________________
Bool_t RooProdPdf::forceAnalyticalInt(const RooAbsArg& /*dep*/) const 
{
  // Force RooRealIntegral to offer all observables for internal integration
  return kTRUE ;
}



//_____________________________________________________________________________
Int_t RooProdPdf::getAnalyticalIntegralWN(RooArgSet& allVars, RooArgSet& analVars, 
					  const RooArgSet* normSet, const char* rangeName) const 
{
  // Determine which part (if any) of given integral can be performed analytically.
  // If any analytical integration is possible, return integration scenario code.
  //
  // RooProdPdf implements two strategies in implementing analytical integrals
  //
  // First, PDF components whose entire set of dependents are requested to be integrated
  // can be dropped from the product, as they will integrate out to 1 by construction
  //
  // Second, RooProdPdf queries each remaining component PDF for its analytical integration 
  // capability of the requested set ('allVars'). It finds the largest common set of variables 
  // that can be integrated by all remaining components. If such a set exists, it reconfirms that 
  // each component is capable of analytically integrating the common set, and combines the components 
  // individual integration codes into a single integration code valid for RooProdPdf.

  if (_forceNumInt) return 0 ;

  // Declare that we can analytically integrate all requested observables
  analVars.add(allVars) ;

  // Retrieve (or create) the required partial integral list
  Int_t code ;
  RooArgList *plist(0) ;
  RooLinkedList *nlist(0) ;
  getPartIntList(normSet,&allVars,plist,nlist,code,rangeName) ;
  
  return code+1 ;
}




//_____________________________________________________________________________
Double_t RooProdPdf::analyticalIntegralWN(Int_t code, const RooArgSet* normSet, const char* rangeName) const 
{
  // Return analytical integral defined by given scenario code

  // No integration scenario
  if (code==0) {
    return getVal(normSet) ;
  }


  // WVE needs adaptation for rangename feature

  // Partial integration scenarios
  CacheElem* cache = (CacheElem*) _cacheMgr.getObjByIndex(code-1) ;
  
  RooArgList* partIntList(0) ;
  RooLinkedList* normList(0) ;

  // If cache has been sterilized, revive this slot
  if (cache==0) {
    RooArgSet* vars = getParameters(RooArgSet()) ;
    RooArgSet* nset = _cacheMgr.nameSet1ByIndex(code-1)->select(*vars) ;
    RooArgSet* iset = _cacheMgr.nameSet2ByIndex(code-1)->select(*vars) ;

    Int_t code2(-1) ;
    getPartIntList(nset,iset,partIntList,normList,code2,rangeName) ;

    delete vars ;

    // preceding call to getPartIntList guarantees non-null return
    // coverity[NULL_RETURNS]
    cache = (CacheElem*) _cacheMgr.getObj(nset,iset,&code2,rangeName) ;

    delete nset ;
    delete iset ;

  } else {

    partIntList = &cache->_partList ;
    normList = &cache->_normList ;

  }

//   Double_t val = calculate(partIntList,normList) ;
  
  Double_t val = calculate(*cache,kTRUE) ;
//   cout << "RPP::aIWN(" << GetName() << ") ,code = " << code << ", value = " << val << endl ;

  return val ;
}



//_____________________________________________________________________________
Bool_t RooProdPdf::checkObservables(const RooArgSet* /*nset*/) const 
{
  // Obsolete
  return kFALSE ;
  
}




//_____________________________________________________________________________
RooAbsPdf::ExtendMode RooProdPdf::extendMode() const
{
  // If this product contains exactly one extendable p.d.f return the extension abilities of
  // that p.d.f, otherwise return CanNotBeExtended
  return (_extendedIndex>=0) ? ((RooAbsPdf*)_pdfList.at(_extendedIndex))->extendMode() : CanNotBeExtended ;
}



//_____________________________________________________________________________
Double_t RooProdPdf::expectedEvents(const RooArgSet* nset) const 
{
  // Return the expected number of events associated with the extentable input p.d.f
  // in the product. If there is no extendable term, return zero and issue and error

  if (_extendedIndex<0) {
    coutE(Generation) << "ERROR: Requesting expected number of events from a RooProdPdf that does not contain an extended p.d.f" << endl ;
  }
  assert(_extendedIndex>=0) ;
  return ((RooAbsPdf*)_pdfList.at(_extendedIndex))->expectedEvents(nset) ;
}



//_____________________________________________________________________________
RooAbsGenContext* RooProdPdf::genContext(const RooArgSet &vars, const RooDataSet *prototype, 
					 const RooArgSet* auxProto, Bool_t verbose) const 
{
  // Return generator context optimized for generating events from product p.d.f.s

  if (_useDefaultGen) return RooAbsPdf::genContext(vars,prototype,auxProto,verbose) ;
  return new RooProdGenContext(*this,vars,prototype,auxProto,verbose) ;
}



//_____________________________________________________________________________
Int_t RooProdPdf::getGenerator(const RooArgSet& directVars, RooArgSet &generateVars, Bool_t staticInitOK) const
{
  // Query internal generation capabilities of component p.d.f.s and aggregate capabilities
  // into master configuration passed to the generator context

  if (!_useDefaultGen) return 0 ;

  // Find the subset directVars that only depend on a single PDF in the product
  RooArgSet directSafe ;
  TIterator* dIter = directVars.createIterator() ;
  RooAbsArg* arg ;
  while((arg=(RooAbsArg*)dIter->Next())) {
    if (isDirectGenSafe(*arg)) directSafe.add(*arg) ;
  }
  delete dIter ;


  // Now find direct integrator for relevant components ;
  _pdfIter->Reset() ;
  RooAbsPdf* pdf ;
  std::vector<Int_t> code;
  code.reserve(64);
  while((pdf=(RooAbsPdf*)_pdfIter->Next())) {
    RooArgSet pdfDirect ;
    Int_t pdfCode = pdf->getGenerator(directSafe,pdfDirect,staticInitOK);
    code.push_back(pdfCode);
    if (pdfCode != 0) {
      generateVars.add(pdfDirect) ;
    }
  }


  if (generateVars.getSize()>0) {
    Int_t masterCode = _genCode.store(code) ;
    return masterCode+1 ;    
  } else {
    return 0 ;
  }
}



//_____________________________________________________________________________
void RooProdPdf::initGenerator(Int_t code)
{
  // Forward one-time initialization call to component generation initialization
  // methods.

  if (!_useDefaultGen) return ;

  const std::vector<Int_t>& codeList = _genCode.retrieve(code-1) ;
  _pdfIter->Reset() ;
  RooAbsPdf* pdf ;
  Int_t i(0) ;
  while((pdf=(RooAbsPdf*)_pdfIter->Next())) {
    if (codeList[i]!=0) {
      pdf->initGenerator(codeList[i]) ;
    }
    i++ ;
  }
}



//_____________________________________________________________________________
void RooProdPdf::generateEvent(Int_t code)
{  
  // Generate a single event with configuration specified by 'code'
  // Defer internal generation to components as encoded in the _genCode
  // registry for given generator code.

  if (!_useDefaultGen) return ;

  const std::vector<Int_t>& codeList = _genCode.retrieve(code-1) ;
  _pdfIter->Reset() ;
  RooAbsPdf* pdf ;
  Int_t i(0) ;
  while((pdf=(RooAbsPdf*)_pdfIter->Next())) {
    if (codeList[i]!=0) {
      pdf->generateEvent(codeList[i]) ;
    }
    i++ ;
  }

}



//_____________________________________________________________________________
RooProdPdf::CacheElem::~CacheElem() 
{
  // Destructor
  _normList.Delete() ; //WVE THIS IS AN INTENTIAL LEAK -- MUST FIX LATER
  if (_rearrangedNum) delete _rearrangedNum ;
  if (_rearrangedDen) delete _rearrangedDen ;
//   cout << "RooProdPdf::CacheElem dtor, this = " << this << endl ;
}



//_____________________________________________________________________________
RooArgList RooProdPdf::CacheElem::containedArgs(Action) 
{
  // Return RooAbsArg components contained in the cache
  RooArgList ret ;
  ret.add(_partList) ;
  ret.add(_numList) ;
  ret.add(_denList) ;
  if (_rearrangedNum) ret.add(*_rearrangedNum) ;
  if (_rearrangedDen) ret.add(*_rearrangedDen) ;
  return ret ;

}



//_____________________________________________________________________________
void RooProdPdf::CacheElem::printCompactTreeHook(ostream& os, const char* indent, Int_t curElem, Int_t maxElem) 
{
  // Hook function to print cache contents in tree printing of RooProdPdf

   if (curElem==0) {
     os << indent << "RooProdPdf begin partial integral cache" << endl ;
   }

   TIterator* iter = _partList.createIterator() ;
   RooAbsArg* arg ;
   TString indent2(indent) ;
   indent2 += Form("[%d] ",curElem) ;
   while((arg=(RooAbsArg*)iter->Next())) {      
     arg->printCompactTree(os,indent2) ;
   }
   delete iter ;

   if (curElem==maxElem) {
     os << indent << "RooProdPdf end partial integral cache" << endl ;
   }
}



//_____________________________________________________________________________
Bool_t RooProdPdf::isDirectGenSafe(const RooAbsArg& arg) const 
{
  // Forward determination of safety of internal generator code to
  // component p.d.f that would generate the given observable

  // Only override base class behaviour if default generator method is enabled
  if (!_useDefaultGen) return RooAbsPdf::isDirectGenSafe(arg) ;

  // Argument may appear in only one PDF component
  _pdfIter->Reset() ;
  RooAbsPdf* pdf, *thePdf(0) ;  
  while((pdf=(RooAbsPdf*)_pdfIter->Next())) {

    if (pdf->dependsOn(arg)) {
      // Found PDF depending on arg

      // If multiple PDFs depend on arg directGen is not safe
      if (thePdf) return kFALSE ;

      thePdf = pdf ;
    }
  }
  // Forward call to relevant component PDF
  return thePdf?(thePdf->isDirectGenSafe(arg)):kFALSE ;
}



//_____________________________________________________________________________
RooArgSet* RooProdPdf::findPdfNSet(RooAbsPdf& pdf) const 
{
  // Look up user specified normalization set for given input PDF component

  Int_t idx = _pdfList.index(&pdf) ;
  if (idx<0) return 0 ;
  return (RooArgSet*) _pdfNSetList.At(idx) ;
}



//_____________________________________________________________________________
RooArgSet* RooProdPdf::getConstraints(const RooArgSet& observables, RooArgSet& constrainedParams, Bool_t stripDisconnected) const
{
  // Return all parameter constraint p.d.f.s on parameters listed in constrainedParams
  // The observables set is required to distinguish unambiguously p.d.f in terms 
  // of observables and parameters, which are not constraints, and p.d.fs in terms
  // of parameters only, which can serve as constraints p.d.f.s

  RooArgSet constraints ;
  RooArgSet pdfParams, conParams ;

  // Loop over p.d.f. components
  TIterator* piter = _pdfList.createIterator() ;
  RooAbsPdf* pdf ;
  while((pdf=(RooAbsPdf*)piter->Next())) {
    // A constraint term is a p.d.f that does not depend on any of the listed observables
    // but does depends on any of the parameters that should be constrained
    if (!pdf->dependsOnValue(observables) && pdf->dependsOnValue(constrainedParams)) {
      constraints.add(*pdf) ;
      RooArgSet* tmp = pdf->getParameters(observables) ;
      conParams.add(*tmp,kTRUE) ;
      delete tmp ;      
    } else {
      RooArgSet* tmp = pdf->getParameters(observables) ;
      pdfParams.add(*tmp,kTRUE) ;
      delete tmp ;
    }
  }

  // Strip any constraints that are completely decoupled from the other product terms
  RooArgSet* finalConstraints = new RooArgSet("constraints") ;
  TIterator* citer = constraints.createIterator() ;
  while((pdf=(RooAbsPdf*)citer->Next())) {
    if (pdf->dependsOnValue(pdfParams) || !stripDisconnected) {
      finalConstraints->add(*pdf) ;
    } else {
      coutI(Minimization) << "RooProdPdf::getConstraints(" << GetName() << ") omitting term " << pdf->GetName() 
			  << " as constraint term as it does not share any parameters with the other pdfs in product. "
			  << "To force inclusion in likelihood, add an explicit Constrain() argument for the target parameter" << endl ;
    }
  }
  delete citer ;
  delete piter ;
  
  // Now remove from constrainedParams all parameters that occur exclusively in constraint term and not in regular pdf term

  RooArgSet* cexl = (RooArgSet*) conParams.selectCommon(constrainedParams) ;
  cexl->remove(pdfParams,kTRUE,kTRUE) ;
  constrainedParams.remove(*cexl,kTRUE,kTRUE) ;
  delete cexl ;

  return finalConstraints ;
}




//_____________________________________________________________________________
RooArgSet* RooProdPdf::getConnectedParameters(const RooArgSet& observables) const
{
  // Return all parameter constraint p.d.f.s on parameters listed in constrainedParams
  // The observables set is required to distinguish unambiguously p.d.f in terms 
  // of observables and parameters, which are not constraints, and p.d.fs in terms
  // of parameters only, which can serve as constraints p.d.f.s

  RooFIter iter = _pdfList.fwdIterator() ;
  RooAbsArg* arg ;
  RooArgSet* connectedPars  = new RooArgSet("connectedPars") ;
  while((arg=iter.next())) {
    // Check if term is relevant
    if (arg->dependsOn(observables)) {
      RooArgSet* tmp = arg->getParameters(observables) ;
      connectedPars->add(*tmp) ;
      delete tmp ;
    } else {
    }
  }
  return connectedPars ;
}




//_____________________________________________________________________________
void RooProdPdf::getParametersHook(const RooArgSet* nset, RooArgSet* params, Bool_t stripDisconnected) const 
{
  if (!stripDisconnected) return ;
  if (!nset || nset->getSize()==0) return ;

  // Get/create appropriate term list for this normalization set
  RooArgList *plist(0) ;
  RooLinkedList *nlist(0) ;
  Int_t code ;
  getPartIntList(nset,0,plist,nlist,code) ;

  // Strip any terms from params that do not depend on any term
  TIterator* titer = plist->createIterator() ;
  TIterator* piter = params->createIterator() ;
  RooAbsReal* term, *param ;
  RooArgSet tostrip ;
  while((param=(RooAbsReal*)piter->Next())) {
    Bool_t anyDep(kFALSE) ;
    titer->Reset() ;
    while((term=(RooAbsReal*)titer->Next())) {    
      if (term->dependsOnValue(*param)) {
	anyDep=kTRUE ;
      }
    }
    if (!anyDep) {
      tostrip.add(*param) ;
    }
  }
  delete piter ;
  delete titer ;

  if (tostrip.getSize()>0) {
    params->remove(tostrip,kTRUE,kTRUE);
  }
 
}



//_____________________________________________________________________________
void RooProdPdf::selectNormalizationRange(const char* rangeName, Bool_t force) 
{
  // Interface function used by test statistics to freeze choice of range
  // for interpretation of conditional product terms

  if (!force && _refRangeName) {
    return ;
  }

  fixRefRange(rangeName) ;
}




//_____________________________________________________________________________
void RooProdPdf::fixRefRange(const char* rangeName)
{
  _refRangeName = (TNamed*)RooNameReg::ptr(rangeName) ;
}



//_____________________________________________________________________________
std::list<Double_t>* RooProdPdf::plotSamplingHint(RooAbsRealLValue& obs, Double_t xlo, Double_t xhi) const 
{
  // Forward the plot sampling hint from the p.d.f. that defines the observable obs  
  _pdfIter->Reset() ;
  RooAbsPdf* pdf ;
  while((pdf=(RooAbsPdf*)_pdfIter->Next())) {
    list<Double_t>* hint = pdf->plotSamplingHint(obs,xlo,xhi) ;      
    if (hint) {
      return hint ;
    }
  }
  
  return 0 ;
}



//_____________________________________________________________________________
Bool_t RooProdPdf::isBinnedDistribution(const RooArgSet& obs) const 
{
  // If all components that depend on obs are binned that so is the product
  
  _pdfIter->Reset() ;
  RooAbsPdf* pdf ;
  while((pdf=(RooAbsPdf*)_pdfIter->Next())) {
    if (pdf->dependsOn(obs) && !pdf->isBinnedDistribution(obs)) {
      return kFALSE ;
    }
  }
  
  return kTRUE  ;  
}






//_____________________________________________________________________________
std::list<Double_t>* RooProdPdf::binBoundaries(RooAbsRealLValue& obs, Double_t xlo, Double_t xhi) const 
{
  // Forward the plot sampling hint from the p.d.f. that defines the observable obs  
  _pdfIter->Reset() ;
  RooAbsPdf* pdf ;
  while((pdf=(RooAbsPdf*)_pdfIter->Next())) {
    list<Double_t>* hint = pdf->binBoundaries(obs,xlo,xhi) ;      
    if (hint) {
      return hint ;
    }
  }
  
  return 0 ;
}


//_____________________________________________________________________________
void RooProdPdf::setCacheAndTrackHints(RooArgSet& trackNodes) 
{
  // Label OK'ed components of a RooProdPdf with cache-and-track, _and_ label all RooProdPdf
  // descendants with extra informationa about (conditional) normalization, needed to be able
  // to Cache-And-Track them outside the RooprodPdf context

  RooFIter piter = pdfList().fwdIterator() ;
  RooAbsArg* parg ;
  while ((parg=piter.next())) {

    if (parg->canNodeBeCached()==Always) {      
      trackNodes.add(*parg) ;
      //cout << "tracking node RooProdPdf component " << parg->IsA()->GetName() << "::" << parg->GetName() << endl ;	      

      // Additional processing to fix normalization sets in case product defines conditional observables
      RooArgSet* pdf_nset = findPdfNSet((RooAbsPdf&)(*parg)) ;    
      if (pdf_nset) {
	// Check if conditional normalization is specified		  
	if (string("nset")==pdf_nset->GetName() && pdf_nset->getSize()>0) {
	  RooNameSet n(*pdf_nset) ;
	  parg->setStringAttribute("CATNormSet",n.content()) ;
	}
	if (string("cset")==pdf_nset->GetName()) {
	  RooNameSet c(*pdf_nset) ;
	  parg->setStringAttribute("CATCondSet",c.content()) ;
	}
      } else {
	coutW(Optimization) << "RooProdPdf::setCacheAndTrackHints(" << GetName() << ") WARNING product pdf does not specify a normalization set for component " << parg->GetName() << endl ;
      }
    }
  }
}



//_____________________________________________________________________________
void RooProdPdf::printMetaArgs(ostream& os) const 
{
  // Customized printing of arguments of a RooProdPdf to more intuitively reflect the contents of the
  // product operator construction

  TIterator* niter = _pdfNSetList.MakeIterator() ;
  for (int i=0 ; i<_pdfList.getSize() ; i++) {
    if (i>0) os << " * " ;
    RooArgSet* ncset = (RooArgSet*) niter->Next() ;
    os << _pdfList.at(i)->GetName() ;
    if (ncset->getSize()>0) {
      if (string("nset")==ncset->GetName()) {
	os << *ncset  ;
      } else {
	os << "|" ;
	TIterator* nciter = ncset->createIterator() ;
	RooAbsArg* arg ;
	Bool_t first(kTRUE) ;
	while((arg=(RooAbsArg*)nciter->Next())) {
	  if (!first) {
	    os << "," ;
	  } else {
	    first = kFALSE ;
	  }	  
	  os << arg->GetName() ;	  
	}
      }
    }
  }
  os << " " ;    
  delete niter ;
}



//_____________________________________________________________________________
Bool_t RooProdPdf::redirectServersHook(const RooAbsCollection& /*newServerList*/, Bool_t /*mustReplaceAll*/, Bool_t nameChange, Bool_t /*isRecursive*/) 
{
  // Implement support for node removal

  if (nameChange && _pdfList.find("REMOVAL_DUMMY")) {

    cxcoutD(LinkStateMgmt) << "RooProdPdf::redirectServersHook(" << GetName() << "): removing REMOVAL_DUMMY" << endl ;

    // Remove node from _pdfList proxy and remove corresponding entry from normset list
    RooAbsArg* pdfDel = _pdfList.find("REMOVAL_DUMMY") ;
    
    TObject* setDel = _pdfNSetList.At(_pdfList.index("REMOVAL_DUMMY")) ;
    _pdfList.remove(*pdfDel) ;
    _pdfNSetList.Remove(setDel) ;
    
    // Clear caches
    _cacheMgr.reset() ;
  }
  return kFALSE ;
}
 RooProdPdf.cxx:1
 RooProdPdf.cxx:2
 RooProdPdf.cxx:3
 RooProdPdf.cxx:4
 RooProdPdf.cxx:5
 RooProdPdf.cxx:6
 RooProdPdf.cxx:7
 RooProdPdf.cxx:8
 RooProdPdf.cxx:9
 RooProdPdf.cxx:10
 RooProdPdf.cxx:11
 RooProdPdf.cxx:12
 RooProdPdf.cxx:13
 RooProdPdf.cxx:14
 RooProdPdf.cxx:15
 RooProdPdf.cxx:16
 RooProdPdf.cxx:17
 RooProdPdf.cxx:18
 RooProdPdf.cxx:19
 RooProdPdf.cxx:20
 RooProdPdf.cxx:21
 RooProdPdf.cxx:22
 RooProdPdf.cxx:23
 RooProdPdf.cxx:24
 RooProdPdf.cxx:25
 RooProdPdf.cxx:26
 RooProdPdf.cxx:27
 RooProdPdf.cxx:28
 RooProdPdf.cxx:29
 RooProdPdf.cxx:30
 RooProdPdf.cxx:31
 RooProdPdf.cxx:32
 RooProdPdf.cxx:33
 RooProdPdf.cxx:34
 RooProdPdf.cxx:35
 RooProdPdf.cxx:36
 RooProdPdf.cxx:37
 RooProdPdf.cxx:38
 RooProdPdf.cxx:39
 RooProdPdf.cxx:40
 RooProdPdf.cxx:41
 RooProdPdf.cxx:42
 RooProdPdf.cxx:43
 RooProdPdf.cxx:44
 RooProdPdf.cxx:45
 RooProdPdf.cxx:46
 RooProdPdf.cxx:47
 RooProdPdf.cxx:48
 RooProdPdf.cxx:49
 RooProdPdf.cxx:50
 RooProdPdf.cxx:51
 RooProdPdf.cxx:52
 RooProdPdf.cxx:53
 RooProdPdf.cxx:54
 RooProdPdf.cxx:55
 RooProdPdf.cxx:56
 RooProdPdf.cxx:57
 RooProdPdf.cxx:58
 RooProdPdf.cxx:59
 RooProdPdf.cxx:60
 RooProdPdf.cxx:61
 RooProdPdf.cxx:62
 RooProdPdf.cxx:63
 RooProdPdf.cxx:64
 RooProdPdf.cxx:65
 RooProdPdf.cxx:66
 RooProdPdf.cxx:67
 RooProdPdf.cxx:68
 RooProdPdf.cxx:69
 RooProdPdf.cxx:70
 RooProdPdf.cxx:71
 RooProdPdf.cxx:72
 RooProdPdf.cxx:73
 RooProdPdf.cxx:74
 RooProdPdf.cxx:75
 RooProdPdf.cxx:76
 RooProdPdf.cxx:77
 RooProdPdf.cxx:78
 RooProdPdf.cxx:79
 RooProdPdf.cxx:80
 RooProdPdf.cxx:81
 RooProdPdf.cxx:82
 RooProdPdf.cxx:83
 RooProdPdf.cxx:84
 RooProdPdf.cxx:85
 RooProdPdf.cxx:86
 RooProdPdf.cxx:87
 RooProdPdf.cxx:88
 RooProdPdf.cxx:89
 RooProdPdf.cxx:90
 RooProdPdf.cxx:91
 RooProdPdf.cxx:92
 RooProdPdf.cxx:93
 RooProdPdf.cxx:94
 RooProdPdf.cxx:95
 RooProdPdf.cxx:96
 RooProdPdf.cxx:97
 RooProdPdf.cxx:98
 RooProdPdf.cxx:99
 RooProdPdf.cxx:100
 RooProdPdf.cxx:101
 RooProdPdf.cxx:102
 RooProdPdf.cxx:103
 RooProdPdf.cxx:104
 RooProdPdf.cxx:105
 RooProdPdf.cxx:106
 RooProdPdf.cxx:107
 RooProdPdf.cxx:108
 RooProdPdf.cxx:109
 RooProdPdf.cxx:110
 RooProdPdf.cxx:111
 RooProdPdf.cxx:112
 RooProdPdf.cxx:113
 RooProdPdf.cxx:114
 RooProdPdf.cxx:115
 RooProdPdf.cxx:116
 RooProdPdf.cxx:117
 RooProdPdf.cxx:118
 RooProdPdf.cxx:119
 RooProdPdf.cxx:120
 RooProdPdf.cxx:121
 RooProdPdf.cxx:122
 RooProdPdf.cxx:123
 RooProdPdf.cxx:124
 RooProdPdf.cxx:125
 RooProdPdf.cxx:126
 RooProdPdf.cxx:127
 RooProdPdf.cxx:128
 RooProdPdf.cxx:129
 RooProdPdf.cxx:130
 RooProdPdf.cxx:131
 RooProdPdf.cxx:132
 RooProdPdf.cxx:133
 RooProdPdf.cxx:134
 RooProdPdf.cxx:135
 RooProdPdf.cxx:136
 RooProdPdf.cxx:137
 RooProdPdf.cxx:138
 RooProdPdf.cxx:139
 RooProdPdf.cxx:140
 RooProdPdf.cxx:141
 RooProdPdf.cxx:142
 RooProdPdf.cxx:143
 RooProdPdf.cxx:144
 RooProdPdf.cxx:145
 RooProdPdf.cxx:146
 RooProdPdf.cxx:147
 RooProdPdf.cxx:148
 RooProdPdf.cxx:149
 RooProdPdf.cxx:150
 RooProdPdf.cxx:151
 RooProdPdf.cxx:152
 RooProdPdf.cxx:153
 RooProdPdf.cxx:154
 RooProdPdf.cxx:155
 RooProdPdf.cxx:156
 RooProdPdf.cxx:157
 RooProdPdf.cxx:158
 RooProdPdf.cxx:159
 RooProdPdf.cxx:160
 RooProdPdf.cxx:161
 RooProdPdf.cxx:162
 RooProdPdf.cxx:163
 RooProdPdf.cxx:164
 RooProdPdf.cxx:165
 RooProdPdf.cxx:166
 RooProdPdf.cxx:167
 RooProdPdf.cxx:168
 RooProdPdf.cxx:169
 RooProdPdf.cxx:170
 RooProdPdf.cxx:171
 RooProdPdf.cxx:172
 RooProdPdf.cxx:173
 RooProdPdf.cxx:174
 RooProdPdf.cxx:175
 RooProdPdf.cxx:176
 RooProdPdf.cxx:177
 RooProdPdf.cxx:178
 RooProdPdf.cxx:179
 RooProdPdf.cxx:180
 RooProdPdf.cxx:181
 RooProdPdf.cxx:182
 RooProdPdf.cxx:183
 RooProdPdf.cxx:184
 RooProdPdf.cxx:185
 RooProdPdf.cxx:186
 RooProdPdf.cxx:187
 RooProdPdf.cxx:188
 RooProdPdf.cxx:189
 RooProdPdf.cxx:190
 RooProdPdf.cxx:191
 RooProdPdf.cxx:192
 RooProdPdf.cxx:193
 RooProdPdf.cxx:194
 RooProdPdf.cxx:195
 RooProdPdf.cxx:196
 RooProdPdf.cxx:197
 RooProdPdf.cxx:198
 RooProdPdf.cxx:199
 RooProdPdf.cxx:200
 RooProdPdf.cxx:201
 RooProdPdf.cxx:202
 RooProdPdf.cxx:203
 RooProdPdf.cxx:204
 RooProdPdf.cxx:205
 RooProdPdf.cxx:206
 RooProdPdf.cxx:207
 RooProdPdf.cxx:208
 RooProdPdf.cxx:209
 RooProdPdf.cxx:210
 RooProdPdf.cxx:211
 RooProdPdf.cxx:212
 RooProdPdf.cxx:213
 RooProdPdf.cxx:214
 RooProdPdf.cxx:215
 RooProdPdf.cxx:216
 RooProdPdf.cxx:217
 RooProdPdf.cxx:218
 RooProdPdf.cxx:219
 RooProdPdf.cxx:220
 RooProdPdf.cxx:221
 RooProdPdf.cxx:222
 RooProdPdf.cxx:223
 RooProdPdf.cxx:224
 RooProdPdf.cxx:225
 RooProdPdf.cxx:226
 RooProdPdf.cxx:227
 RooProdPdf.cxx:228
 RooProdPdf.cxx:229
 RooProdPdf.cxx:230
 RooProdPdf.cxx:231
 RooProdPdf.cxx:232
 RooProdPdf.cxx:233
 RooProdPdf.cxx:234
 RooProdPdf.cxx:235
 RooProdPdf.cxx:236
 RooProdPdf.cxx:237
 RooProdPdf.cxx:238
 RooProdPdf.cxx:239
 RooProdPdf.cxx:240
 RooProdPdf.cxx:241
 RooProdPdf.cxx:242
 RooProdPdf.cxx:243
 RooProdPdf.cxx:244
 RooProdPdf.cxx:245
 RooProdPdf.cxx:246
 RooProdPdf.cxx:247
 RooProdPdf.cxx:248
 RooProdPdf.cxx:249
 RooProdPdf.cxx:250
 RooProdPdf.cxx:251
 RooProdPdf.cxx:252
 RooProdPdf.cxx:253
 RooProdPdf.cxx:254
 RooProdPdf.cxx:255
 RooProdPdf.cxx:256
 RooProdPdf.cxx:257
 RooProdPdf.cxx:258
 RooProdPdf.cxx:259
 RooProdPdf.cxx:260
 RooProdPdf.cxx:261
 RooProdPdf.cxx:262
 RooProdPdf.cxx:263
 RooProdPdf.cxx:264
 RooProdPdf.cxx:265
 RooProdPdf.cxx:266
 RooProdPdf.cxx:267
 RooProdPdf.cxx:268
 RooProdPdf.cxx:269
 RooProdPdf.cxx:270
 RooProdPdf.cxx:271
 RooProdPdf.cxx:272
 RooProdPdf.cxx:273
 RooProdPdf.cxx:274
 RooProdPdf.cxx:275
 RooProdPdf.cxx:276
 RooProdPdf.cxx:277
 RooProdPdf.cxx:278
 RooProdPdf.cxx:279
 RooProdPdf.cxx:280
 RooProdPdf.cxx:281
 RooProdPdf.cxx:282
 RooProdPdf.cxx:283
 RooProdPdf.cxx:284
 RooProdPdf.cxx:285
 RooProdPdf.cxx:286
 RooProdPdf.cxx:287
 RooProdPdf.cxx:288
 RooProdPdf.cxx:289
 RooProdPdf.cxx:290
 RooProdPdf.cxx:291
 RooProdPdf.cxx:292
 RooProdPdf.cxx:293
 RooProdPdf.cxx:294
 RooProdPdf.cxx:295
 RooProdPdf.cxx:296
 RooProdPdf.cxx:297
 RooProdPdf.cxx:298
 RooProdPdf.cxx:299
 RooProdPdf.cxx:300
 RooProdPdf.cxx:301
 RooProdPdf.cxx:302
 RooProdPdf.cxx:303
 RooProdPdf.cxx:304
 RooProdPdf.cxx:305
 RooProdPdf.cxx:306
 RooProdPdf.cxx:307
 RooProdPdf.cxx:308
 RooProdPdf.cxx:309
 RooProdPdf.cxx:310
 RooProdPdf.cxx:311
 RooProdPdf.cxx:312
 RooProdPdf.cxx:313
 RooProdPdf.cxx:314
 RooProdPdf.cxx:315
 RooProdPdf.cxx:316
 RooProdPdf.cxx:317
 RooProdPdf.cxx:318
 RooProdPdf.cxx:319
 RooProdPdf.cxx:320
 RooProdPdf.cxx:321
 RooProdPdf.cxx:322
 RooProdPdf.cxx:323
 RooProdPdf.cxx:324
 RooProdPdf.cxx:325
 RooProdPdf.cxx:326
 RooProdPdf.cxx:327
 RooProdPdf.cxx:328
 RooProdPdf.cxx:329
 RooProdPdf.cxx:330
 RooProdPdf.cxx:331
 RooProdPdf.cxx:332
 RooProdPdf.cxx:333
 RooProdPdf.cxx:334
 RooProdPdf.cxx:335
 RooProdPdf.cxx:336
 RooProdPdf.cxx:337
 RooProdPdf.cxx:338
 RooProdPdf.cxx:339
 RooProdPdf.cxx:340
 RooProdPdf.cxx:341
 RooProdPdf.cxx:342
 RooProdPdf.cxx:343
 RooProdPdf.cxx:344
 RooProdPdf.cxx:345
 RooProdPdf.cxx:346
 RooProdPdf.cxx:347
 RooProdPdf.cxx:348
 RooProdPdf.cxx:349
 RooProdPdf.cxx:350
 RooProdPdf.cxx:351
 RooProdPdf.cxx:352
 RooProdPdf.cxx:353
 RooProdPdf.cxx:354
 RooProdPdf.cxx:355
 RooProdPdf.cxx:356
 RooProdPdf.cxx:357
 RooProdPdf.cxx:358
 RooProdPdf.cxx:359
 RooProdPdf.cxx:360
 RooProdPdf.cxx:361
 RooProdPdf.cxx:362
 RooProdPdf.cxx:363
 RooProdPdf.cxx:364
 RooProdPdf.cxx:365
 RooProdPdf.cxx:366
 RooProdPdf.cxx:367
 RooProdPdf.cxx:368
 RooProdPdf.cxx:369
 RooProdPdf.cxx:370
 RooProdPdf.cxx:371
 RooProdPdf.cxx:372
 RooProdPdf.cxx:373
 RooProdPdf.cxx:374
 RooProdPdf.cxx:375
 RooProdPdf.cxx:376
 RooProdPdf.cxx:377
 RooProdPdf.cxx:378
 RooProdPdf.cxx:379
 RooProdPdf.cxx:380
 RooProdPdf.cxx:381
 RooProdPdf.cxx:382
 RooProdPdf.cxx:383
 RooProdPdf.cxx:384
 RooProdPdf.cxx:385
 RooProdPdf.cxx:386
 RooProdPdf.cxx:387
 RooProdPdf.cxx:388
 RooProdPdf.cxx:389
 RooProdPdf.cxx:390
 RooProdPdf.cxx:391
 RooProdPdf.cxx:392
 RooProdPdf.cxx:393
 RooProdPdf.cxx:394
 RooProdPdf.cxx:395
 RooProdPdf.cxx:396
 RooProdPdf.cxx:397
 RooProdPdf.cxx:398
 RooProdPdf.cxx:399
 RooProdPdf.cxx:400
 RooProdPdf.cxx:401
 RooProdPdf.cxx:402
 RooProdPdf.cxx:403
 RooProdPdf.cxx:404
 RooProdPdf.cxx:405
 RooProdPdf.cxx:406
 RooProdPdf.cxx:407
 RooProdPdf.cxx:408
 RooProdPdf.cxx:409
 RooProdPdf.cxx:410
 RooProdPdf.cxx:411
 RooProdPdf.cxx:412
 RooProdPdf.cxx:413
 RooProdPdf.cxx:414
 RooProdPdf.cxx:415
 RooProdPdf.cxx:416
 RooProdPdf.cxx:417
 RooProdPdf.cxx:418
 RooProdPdf.cxx:419
 RooProdPdf.cxx:420
 RooProdPdf.cxx:421
 RooProdPdf.cxx:422
 RooProdPdf.cxx:423
 RooProdPdf.cxx:424
 RooProdPdf.cxx:425
 RooProdPdf.cxx:426
 RooProdPdf.cxx:427
 RooProdPdf.cxx:428
 RooProdPdf.cxx:429
 RooProdPdf.cxx:430
 RooProdPdf.cxx:431
 RooProdPdf.cxx:432
 RooProdPdf.cxx:433
 RooProdPdf.cxx:434
 RooProdPdf.cxx:435
 RooProdPdf.cxx:436
 RooProdPdf.cxx:437
 RooProdPdf.cxx:438
 RooProdPdf.cxx:439
 RooProdPdf.cxx:440
 RooProdPdf.cxx:441
 RooProdPdf.cxx:442
 RooProdPdf.cxx:443
 RooProdPdf.cxx:444
 RooProdPdf.cxx:445
 RooProdPdf.cxx:446
 RooProdPdf.cxx:447
 RooProdPdf.cxx:448
 RooProdPdf.cxx:449
 RooProdPdf.cxx:450
 RooProdPdf.cxx:451
 RooProdPdf.cxx:452
 RooProdPdf.cxx:453
 RooProdPdf.cxx:454
 RooProdPdf.cxx:455
 RooProdPdf.cxx:456
 RooProdPdf.cxx:457
 RooProdPdf.cxx:458
 RooProdPdf.cxx:459
 RooProdPdf.cxx:460
 RooProdPdf.cxx:461
 RooProdPdf.cxx:462
 RooProdPdf.cxx:463
 RooProdPdf.cxx:464
 RooProdPdf.cxx:465
 RooProdPdf.cxx:466
 RooProdPdf.cxx:467
 RooProdPdf.cxx:468
 RooProdPdf.cxx:469
 RooProdPdf.cxx:470
 RooProdPdf.cxx:471
 RooProdPdf.cxx:472
 RooProdPdf.cxx:473
 RooProdPdf.cxx:474
 RooProdPdf.cxx:475
 RooProdPdf.cxx:476
 RooProdPdf.cxx:477
 RooProdPdf.cxx:478
 RooProdPdf.cxx:479
 RooProdPdf.cxx:480
 RooProdPdf.cxx:481
 RooProdPdf.cxx:482
 RooProdPdf.cxx:483
 RooProdPdf.cxx:484
 RooProdPdf.cxx:485
 RooProdPdf.cxx:486
 RooProdPdf.cxx:487
 RooProdPdf.cxx:488
 RooProdPdf.cxx:489
 RooProdPdf.cxx:490
 RooProdPdf.cxx:491
 RooProdPdf.cxx:492
 RooProdPdf.cxx:493
 RooProdPdf.cxx:494
 RooProdPdf.cxx:495
 RooProdPdf.cxx:496
 RooProdPdf.cxx:497
 RooProdPdf.cxx:498
 RooProdPdf.cxx:499
 RooProdPdf.cxx:500
 RooProdPdf.cxx:501
 RooProdPdf.cxx:502
 RooProdPdf.cxx:503
 RooProdPdf.cxx:504
 RooProdPdf.cxx:505
 RooProdPdf.cxx:506
 RooProdPdf.cxx:507
 RooProdPdf.cxx:508
 RooProdPdf.cxx:509
 RooProdPdf.cxx:510
 RooProdPdf.cxx:511
 RooProdPdf.cxx:512
 RooProdPdf.cxx:513
 RooProdPdf.cxx:514
 RooProdPdf.cxx:515
 RooProdPdf.cxx:516
 RooProdPdf.cxx:517
 RooProdPdf.cxx:518
 RooProdPdf.cxx:519
 RooProdPdf.cxx:520
 RooProdPdf.cxx:521
 RooProdPdf.cxx:522
 RooProdPdf.cxx:523
 RooProdPdf.cxx:524
 RooProdPdf.cxx:525
 RooProdPdf.cxx:526
 RooProdPdf.cxx:527
 RooProdPdf.cxx:528
 RooProdPdf.cxx:529
 RooProdPdf.cxx:530
 RooProdPdf.cxx:531
 RooProdPdf.cxx:532
 RooProdPdf.cxx:533
 RooProdPdf.cxx:534
 RooProdPdf.cxx:535
 RooProdPdf.cxx:536
 RooProdPdf.cxx:537
 RooProdPdf.cxx:538
 RooProdPdf.cxx:539
 RooProdPdf.cxx:540
 RooProdPdf.cxx:541
 RooProdPdf.cxx:542
 RooProdPdf.cxx:543
 RooProdPdf.cxx:544
 RooProdPdf.cxx:545
 RooProdPdf.cxx:546
 RooProdPdf.cxx:547
 RooProdPdf.cxx:548
 RooProdPdf.cxx:549
 RooProdPdf.cxx:550
 RooProdPdf.cxx:551
 RooProdPdf.cxx:552
 RooProdPdf.cxx:553
 RooProdPdf.cxx:554
 RooProdPdf.cxx:555
 RooProdPdf.cxx:556
 RooProdPdf.cxx:557
 RooProdPdf.cxx:558
 RooProdPdf.cxx:559
 RooProdPdf.cxx:560
 RooProdPdf.cxx:561
 RooProdPdf.cxx:562
 RooProdPdf.cxx:563
 RooProdPdf.cxx:564
 RooProdPdf.cxx:565
 RooProdPdf.cxx:566
 RooProdPdf.cxx:567
 RooProdPdf.cxx:568
 RooProdPdf.cxx:569
 RooProdPdf.cxx:570
 RooProdPdf.cxx:571
 RooProdPdf.cxx:572
 RooProdPdf.cxx:573
 RooProdPdf.cxx:574
 RooProdPdf.cxx:575
 RooProdPdf.cxx:576
 RooProdPdf.cxx:577
 RooProdPdf.cxx:578
 RooProdPdf.cxx:579
 RooProdPdf.cxx:580
 RooProdPdf.cxx:581
 RooProdPdf.cxx:582
 RooProdPdf.cxx:583
 RooProdPdf.cxx:584
 RooProdPdf.cxx:585
 RooProdPdf.cxx:586
 RooProdPdf.cxx:587
 RooProdPdf.cxx:588
 RooProdPdf.cxx:589
 RooProdPdf.cxx:590
 RooProdPdf.cxx:591
 RooProdPdf.cxx:592
 RooProdPdf.cxx:593
 RooProdPdf.cxx:594
 RooProdPdf.cxx:595
 RooProdPdf.cxx:596
 RooProdPdf.cxx:597
 RooProdPdf.cxx:598
 RooProdPdf.cxx:599
 RooProdPdf.cxx:600
 RooProdPdf.cxx:601
 RooProdPdf.cxx:602
 RooProdPdf.cxx:603
 RooProdPdf.cxx:604
 RooProdPdf.cxx:605
 RooProdPdf.cxx:606
 RooProdPdf.cxx:607
 RooProdPdf.cxx:608
 RooProdPdf.cxx:609
 RooProdPdf.cxx:610
 RooProdPdf.cxx:611
 RooProdPdf.cxx:612
 RooProdPdf.cxx:613
 RooProdPdf.cxx:614
 RooProdPdf.cxx:615
 RooProdPdf.cxx:616
 RooProdPdf.cxx:617
 RooProdPdf.cxx:618
 RooProdPdf.cxx:619
 RooProdPdf.cxx:620
 RooProdPdf.cxx:621
 RooProdPdf.cxx:622
 RooProdPdf.cxx:623
 RooProdPdf.cxx:624
 RooProdPdf.cxx:625
 RooProdPdf.cxx:626
 RooProdPdf.cxx:627
 RooProdPdf.cxx:628
 RooProdPdf.cxx:629
 RooProdPdf.cxx:630
 RooProdPdf.cxx:631
 RooProdPdf.cxx:632
 RooProdPdf.cxx:633
 RooProdPdf.cxx:634
 RooProdPdf.cxx:635
 RooProdPdf.cxx:636
 RooProdPdf.cxx:637
 RooProdPdf.cxx:638
 RooProdPdf.cxx:639
 RooProdPdf.cxx:640
 RooProdPdf.cxx:641
 RooProdPdf.cxx:642
 RooProdPdf.cxx:643
 RooProdPdf.cxx:644
 RooProdPdf.cxx:645
 RooProdPdf.cxx:646
 RooProdPdf.cxx:647
 RooProdPdf.cxx:648
 RooProdPdf.cxx:649
 RooProdPdf.cxx:650
 RooProdPdf.cxx:651
 RooProdPdf.cxx:652
 RooProdPdf.cxx:653
 RooProdPdf.cxx:654
 RooProdPdf.cxx:655
 RooProdPdf.cxx:656
 RooProdPdf.cxx:657
 RooProdPdf.cxx:658
 RooProdPdf.cxx:659
 RooProdPdf.cxx:660
 RooProdPdf.cxx:661
 RooProdPdf.cxx:662
 RooProdPdf.cxx:663
 RooProdPdf.cxx:664
 RooProdPdf.cxx:665
 RooProdPdf.cxx:666
 RooProdPdf.cxx:667
 RooProdPdf.cxx:668
 RooProdPdf.cxx:669
 RooProdPdf.cxx:670
 RooProdPdf.cxx:671
 RooProdPdf.cxx:672
 RooProdPdf.cxx:673
 RooProdPdf.cxx:674
 RooProdPdf.cxx:675
 RooProdPdf.cxx:676
 RooProdPdf.cxx:677
 RooProdPdf.cxx:678
 RooProdPdf.cxx:679
 RooProdPdf.cxx:680
 RooProdPdf.cxx:681
 RooProdPdf.cxx:682
 RooProdPdf.cxx:683
 RooProdPdf.cxx:684
 RooProdPdf.cxx:685
 RooProdPdf.cxx:686
 RooProdPdf.cxx:687
 RooProdPdf.cxx:688
 RooProdPdf.cxx:689
 RooProdPdf.cxx:690
 RooProdPdf.cxx:691
 RooProdPdf.cxx:692
 RooProdPdf.cxx:693
 RooProdPdf.cxx:694
 RooProdPdf.cxx:695
 RooProdPdf.cxx:696
 RooProdPdf.cxx:697
 RooProdPdf.cxx:698
 RooProdPdf.cxx:699
 RooProdPdf.cxx:700
 RooProdPdf.cxx:701
 RooProdPdf.cxx:702
 RooProdPdf.cxx:703
 RooProdPdf.cxx:704
 RooProdPdf.cxx:705
 RooProdPdf.cxx:706
 RooProdPdf.cxx:707
 RooProdPdf.cxx:708
 RooProdPdf.cxx:709
 RooProdPdf.cxx:710
 RooProdPdf.cxx:711
 RooProdPdf.cxx:712
 RooProdPdf.cxx:713
 RooProdPdf.cxx:714
 RooProdPdf.cxx:715
 RooProdPdf.cxx:716
 RooProdPdf.cxx:717
 RooProdPdf.cxx:718
 RooProdPdf.cxx:719
 RooProdPdf.cxx:720
 RooProdPdf.cxx:721
 RooProdPdf.cxx:722
 RooProdPdf.cxx:723
 RooProdPdf.cxx:724
 RooProdPdf.cxx:725
 RooProdPdf.cxx:726
 RooProdPdf.cxx:727
 RooProdPdf.cxx:728
 RooProdPdf.cxx:729
 RooProdPdf.cxx:730
 RooProdPdf.cxx:731
 RooProdPdf.cxx:732
 RooProdPdf.cxx:733
 RooProdPdf.cxx:734
 RooProdPdf.cxx:735
 RooProdPdf.cxx:736
 RooProdPdf.cxx:737
 RooProdPdf.cxx:738
 RooProdPdf.cxx:739
 RooProdPdf.cxx:740
 RooProdPdf.cxx:741
 RooProdPdf.cxx:742
 RooProdPdf.cxx:743
 RooProdPdf.cxx:744
 RooProdPdf.cxx:745
 RooProdPdf.cxx:746
 RooProdPdf.cxx:747
 RooProdPdf.cxx:748
 RooProdPdf.cxx:749
 RooProdPdf.cxx:750
 RooProdPdf.cxx:751
 RooProdPdf.cxx:752
 RooProdPdf.cxx:753
 RooProdPdf.cxx:754
 RooProdPdf.cxx:755
 RooProdPdf.cxx:756
 RooProdPdf.cxx:757
 RooProdPdf.cxx:758
 RooProdPdf.cxx:759
 RooProdPdf.cxx:760
 RooProdPdf.cxx:761
 RooProdPdf.cxx:762
 RooProdPdf.cxx:763
 RooProdPdf.cxx:764
 RooProdPdf.cxx:765
 RooProdPdf.cxx:766
 RooProdPdf.cxx:767
 RooProdPdf.cxx:768
 RooProdPdf.cxx:769
 RooProdPdf.cxx:770
 RooProdPdf.cxx:771
 RooProdPdf.cxx:772
 RooProdPdf.cxx:773
 RooProdPdf.cxx:774
 RooProdPdf.cxx:775
 RooProdPdf.cxx:776
 RooProdPdf.cxx:777
 RooProdPdf.cxx:778
 RooProdPdf.cxx:779
 RooProdPdf.cxx:780
 RooProdPdf.cxx:781
 RooProdPdf.cxx:782
 RooProdPdf.cxx:783
 RooProdPdf.cxx:784
 RooProdPdf.cxx:785
 RooProdPdf.cxx:786
 RooProdPdf.cxx:787
 RooProdPdf.cxx:788
 RooProdPdf.cxx:789
 RooProdPdf.cxx:790
 RooProdPdf.cxx:791
 RooProdPdf.cxx:792
 RooProdPdf.cxx:793
 RooProdPdf.cxx:794
 RooProdPdf.cxx:795
 RooProdPdf.cxx:796
 RooProdPdf.cxx:797
 RooProdPdf.cxx:798
 RooProdPdf.cxx:799
 RooProdPdf.cxx:800
 RooProdPdf.cxx:801
 RooProdPdf.cxx:802
 RooProdPdf.cxx:803
 RooProdPdf.cxx:804
 RooProdPdf.cxx:805
 RooProdPdf.cxx:806
 RooProdPdf.cxx:807
 RooProdPdf.cxx:808
 RooProdPdf.cxx:809
 RooProdPdf.cxx:810
 RooProdPdf.cxx:811
 RooProdPdf.cxx:812
 RooProdPdf.cxx:813
 RooProdPdf.cxx:814
 RooProdPdf.cxx:815
 RooProdPdf.cxx:816
 RooProdPdf.cxx:817
 RooProdPdf.cxx:818
 RooProdPdf.cxx:819
 RooProdPdf.cxx:820
 RooProdPdf.cxx:821
 RooProdPdf.cxx:822
 RooProdPdf.cxx:823
 RooProdPdf.cxx:824
 RooProdPdf.cxx:825
 RooProdPdf.cxx:826
 RooProdPdf.cxx:827
 RooProdPdf.cxx:828
 RooProdPdf.cxx:829
 RooProdPdf.cxx:830
 RooProdPdf.cxx:831
 RooProdPdf.cxx:832
 RooProdPdf.cxx:833
 RooProdPdf.cxx:834
 RooProdPdf.cxx:835
 RooProdPdf.cxx:836
 RooProdPdf.cxx:837
 RooProdPdf.cxx:838
 RooProdPdf.cxx:839
 RooProdPdf.cxx:840
 RooProdPdf.cxx:841
 RooProdPdf.cxx:842
 RooProdPdf.cxx:843
 RooProdPdf.cxx:844
 RooProdPdf.cxx:845
 RooProdPdf.cxx:846
 RooProdPdf.cxx:847
 RooProdPdf.cxx:848
 RooProdPdf.cxx:849
 RooProdPdf.cxx:850
 RooProdPdf.cxx:851
 RooProdPdf.cxx:852
 RooProdPdf.cxx:853
 RooProdPdf.cxx:854
 RooProdPdf.cxx:855
 RooProdPdf.cxx:856
 RooProdPdf.cxx:857
 RooProdPdf.cxx:858
 RooProdPdf.cxx:859
 RooProdPdf.cxx:860
 RooProdPdf.cxx:861
 RooProdPdf.cxx:862
 RooProdPdf.cxx:863
 RooProdPdf.cxx:864
 RooProdPdf.cxx:865
 RooProdPdf.cxx:866
 RooProdPdf.cxx:867
 RooProdPdf.cxx:868
 RooProdPdf.cxx:869
 RooProdPdf.cxx:870
 RooProdPdf.cxx:871
 RooProdPdf.cxx:872
 RooProdPdf.cxx:873
 RooProdPdf.cxx:874
 RooProdPdf.cxx:875
 RooProdPdf.cxx:876
 RooProdPdf.cxx:877
 RooProdPdf.cxx:878
 RooProdPdf.cxx:879
 RooProdPdf.cxx:880
 RooProdPdf.cxx:881
 RooProdPdf.cxx:882
 RooProdPdf.cxx:883
 RooProdPdf.cxx:884
 RooProdPdf.cxx:885
 RooProdPdf.cxx:886
 RooProdPdf.cxx:887
 RooProdPdf.cxx:888
 RooProdPdf.cxx:889
 RooProdPdf.cxx:890
 RooProdPdf.cxx:891
 RooProdPdf.cxx:892
 RooProdPdf.cxx:893
 RooProdPdf.cxx:894
 RooProdPdf.cxx:895
 RooProdPdf.cxx:896
 RooProdPdf.cxx:897
 RooProdPdf.cxx:898
 RooProdPdf.cxx:899
 RooProdPdf.cxx:900
 RooProdPdf.cxx:901
 RooProdPdf.cxx:902
 RooProdPdf.cxx:903
 RooProdPdf.cxx:904
 RooProdPdf.cxx:905
 RooProdPdf.cxx:906
 RooProdPdf.cxx:907
 RooProdPdf.cxx:908
 RooProdPdf.cxx:909
 RooProdPdf.cxx:910
 RooProdPdf.cxx:911
 RooProdPdf.cxx:912
 RooProdPdf.cxx:913
 RooProdPdf.cxx:914
 RooProdPdf.cxx:915
 RooProdPdf.cxx:916
 RooProdPdf.cxx:917
 RooProdPdf.cxx:918
 RooProdPdf.cxx:919
 RooProdPdf.cxx:920
 RooProdPdf.cxx:921
 RooProdPdf.cxx:922
 RooProdPdf.cxx:923
 RooProdPdf.cxx:924
 RooProdPdf.cxx:925
 RooProdPdf.cxx:926
 RooProdPdf.cxx:927
 RooProdPdf.cxx:928
 RooProdPdf.cxx:929
 RooProdPdf.cxx:930
 RooProdPdf.cxx:931
 RooProdPdf.cxx:932
 RooProdPdf.cxx:933
 RooProdPdf.cxx:934
 RooProdPdf.cxx:935
 RooProdPdf.cxx:936
 RooProdPdf.cxx:937
 RooProdPdf.cxx:938
 RooProdPdf.cxx:939
 RooProdPdf.cxx:940
 RooProdPdf.cxx:941
 RooProdPdf.cxx:942
 RooProdPdf.cxx:943
 RooProdPdf.cxx:944
 RooProdPdf.cxx:945
 RooProdPdf.cxx:946
 RooProdPdf.cxx:947
 RooProdPdf.cxx:948
 RooProdPdf.cxx:949
 RooProdPdf.cxx:950
 RooProdPdf.cxx:951
 RooProdPdf.cxx:952
 RooProdPdf.cxx:953
 RooProdPdf.cxx:954
 RooProdPdf.cxx:955
 RooProdPdf.cxx:956
 RooProdPdf.cxx:957
 RooProdPdf.cxx:958
 RooProdPdf.cxx:959
 RooProdPdf.cxx:960
 RooProdPdf.cxx:961
 RooProdPdf.cxx:962
 RooProdPdf.cxx:963
 RooProdPdf.cxx:964
 RooProdPdf.cxx:965
 RooProdPdf.cxx:966
 RooProdPdf.cxx:967
 RooProdPdf.cxx:968
 RooProdPdf.cxx:969
 RooProdPdf.cxx:970
 RooProdPdf.cxx:971
 RooProdPdf.cxx:972
 RooProdPdf.cxx:973
 RooProdPdf.cxx:974
 RooProdPdf.cxx:975
 RooProdPdf.cxx:976
 RooProdPdf.cxx:977
 RooProdPdf.cxx:978
 RooProdPdf.cxx:979
 RooProdPdf.cxx:980
 RooProdPdf.cxx:981
 RooProdPdf.cxx:982
 RooProdPdf.cxx:983
 RooProdPdf.cxx:984
 RooProdPdf.cxx:985
 RooProdPdf.cxx:986
 RooProdPdf.cxx:987
 RooProdPdf.cxx:988
 RooProdPdf.cxx:989
 RooProdPdf.cxx:990
 RooProdPdf.cxx:991
 RooProdPdf.cxx:992
 RooProdPdf.cxx:993
 RooProdPdf.cxx:994
 RooProdPdf.cxx:995
 RooProdPdf.cxx:996
 RooProdPdf.cxx:997
 RooProdPdf.cxx:998
 RooProdPdf.cxx:999
 RooProdPdf.cxx:1000
 RooProdPdf.cxx:1001
 RooProdPdf.cxx:1002
 RooProdPdf.cxx:1003
 RooProdPdf.cxx:1004
 RooProdPdf.cxx:1005
 RooProdPdf.cxx:1006
 RooProdPdf.cxx:1007
 RooProdPdf.cxx:1008
 RooProdPdf.cxx:1009
 RooProdPdf.cxx:1010
 RooProdPdf.cxx:1011
 RooProdPdf.cxx:1012
 RooProdPdf.cxx:1013
 RooProdPdf.cxx:1014
 RooProdPdf.cxx:1015
 RooProdPdf.cxx:1016
 RooProdPdf.cxx:1017
 RooProdPdf.cxx:1018
 RooProdPdf.cxx:1019
 RooProdPdf.cxx:1020
 RooProdPdf.cxx:1021
 RooProdPdf.cxx:1022
 RooProdPdf.cxx:1023
 RooProdPdf.cxx:1024
 RooProdPdf.cxx:1025
 RooProdPdf.cxx:1026
 RooProdPdf.cxx:1027
 RooProdPdf.cxx:1028
 RooProdPdf.cxx:1029
 RooProdPdf.cxx:1030
 RooProdPdf.cxx:1031
 RooProdPdf.cxx:1032
 RooProdPdf.cxx:1033
 RooProdPdf.cxx:1034
 RooProdPdf.cxx:1035
 RooProdPdf.cxx:1036
 RooProdPdf.cxx:1037
 RooProdPdf.cxx:1038
 RooProdPdf.cxx:1039
 RooProdPdf.cxx:1040
 RooProdPdf.cxx:1041
 RooProdPdf.cxx:1042
 RooProdPdf.cxx:1043
 RooProdPdf.cxx:1044
 RooProdPdf.cxx:1045
 RooProdPdf.cxx:1046
 RooProdPdf.cxx:1047
 RooProdPdf.cxx:1048
 RooProdPdf.cxx:1049
 RooProdPdf.cxx:1050
 RooProdPdf.cxx:1051
 RooProdPdf.cxx:1052
 RooProdPdf.cxx:1053
 RooProdPdf.cxx:1054
 RooProdPdf.cxx:1055
 RooProdPdf.cxx:1056
 RooProdPdf.cxx:1057
 RooProdPdf.cxx:1058
 RooProdPdf.cxx:1059
 RooProdPdf.cxx:1060
 RooProdPdf.cxx:1061
 RooProdPdf.cxx:1062
 RooProdPdf.cxx:1063
 RooProdPdf.cxx:1064
 RooProdPdf.cxx:1065
 RooProdPdf.cxx:1066
 RooProdPdf.cxx:1067
 RooProdPdf.cxx:1068
 RooProdPdf.cxx:1069
 RooProdPdf.cxx:1070
 RooProdPdf.cxx:1071
 RooProdPdf.cxx:1072
 RooProdPdf.cxx:1073
 RooProdPdf.cxx:1074
 RooProdPdf.cxx:1075
 RooProdPdf.cxx:1076
 RooProdPdf.cxx:1077
 RooProdPdf.cxx:1078
 RooProdPdf.cxx:1079
 RooProdPdf.cxx:1080
 RooProdPdf.cxx:1081
 RooProdPdf.cxx:1082
 RooProdPdf.cxx:1083
 RooProdPdf.cxx:1084
 RooProdPdf.cxx:1085
 RooProdPdf.cxx:1086
 RooProdPdf.cxx:1087
 RooProdPdf.cxx:1088
 RooProdPdf.cxx:1089
 RooProdPdf.cxx:1090
 RooProdPdf.cxx:1091
 RooProdPdf.cxx:1092
 RooProdPdf.cxx:1093
 RooProdPdf.cxx:1094
 RooProdPdf.cxx:1095
 RooProdPdf.cxx:1096
 RooProdPdf.cxx:1097
 RooProdPdf.cxx:1098
 RooProdPdf.cxx:1099
 RooProdPdf.cxx:1100
 RooProdPdf.cxx:1101
 RooProdPdf.cxx:1102
 RooProdPdf.cxx:1103
 RooProdPdf.cxx:1104
 RooProdPdf.cxx:1105
 RooProdPdf.cxx:1106
 RooProdPdf.cxx:1107
 RooProdPdf.cxx:1108
 RooProdPdf.cxx:1109
 RooProdPdf.cxx:1110
 RooProdPdf.cxx:1111
 RooProdPdf.cxx:1112
 RooProdPdf.cxx:1113
 RooProdPdf.cxx:1114
 RooProdPdf.cxx:1115
 RooProdPdf.cxx:1116
 RooProdPdf.cxx:1117
 RooProdPdf.cxx:1118
 RooProdPdf.cxx:1119
 RooProdPdf.cxx:1120
 RooProdPdf.cxx:1121
 RooProdPdf.cxx:1122
 RooProdPdf.cxx:1123
 RooProdPdf.cxx:1124
 RooProdPdf.cxx:1125
 RooProdPdf.cxx:1126
 RooProdPdf.cxx:1127
 RooProdPdf.cxx:1128
 RooProdPdf.cxx:1129
 RooProdPdf.cxx:1130
 RooProdPdf.cxx:1131
 RooProdPdf.cxx:1132
 RooProdPdf.cxx:1133
 RooProdPdf.cxx:1134
 RooProdPdf.cxx:1135
 RooProdPdf.cxx:1136
 RooProdPdf.cxx:1137
 RooProdPdf.cxx:1138
 RooProdPdf.cxx:1139
 RooProdPdf.cxx:1140
 RooProdPdf.cxx:1141
 RooProdPdf.cxx:1142
 RooProdPdf.cxx:1143
 RooProdPdf.cxx:1144
 RooProdPdf.cxx:1145
 RooProdPdf.cxx:1146
 RooProdPdf.cxx:1147
 RooProdPdf.cxx:1148
 RooProdPdf.cxx:1149
 RooProdPdf.cxx:1150
 RooProdPdf.cxx:1151
 RooProdPdf.cxx:1152
 RooProdPdf.cxx:1153
 RooProdPdf.cxx:1154
 RooProdPdf.cxx:1155
 RooProdPdf.cxx:1156
 RooProdPdf.cxx:1157
 RooProdPdf.cxx:1158
 RooProdPdf.cxx:1159
 RooProdPdf.cxx:1160
 RooProdPdf.cxx:1161
 RooProdPdf.cxx:1162
 RooProdPdf.cxx:1163
 RooProdPdf.cxx:1164
 RooProdPdf.cxx:1165
 RooProdPdf.cxx:1166
 RooProdPdf.cxx:1167
 RooProdPdf.cxx:1168
 RooProdPdf.cxx:1169
 RooProdPdf.cxx:1170
 RooProdPdf.cxx:1171
 RooProdPdf.cxx:1172
 RooProdPdf.cxx:1173
 RooProdPdf.cxx:1174
 RooProdPdf.cxx:1175
 RooProdPdf.cxx:1176
 RooProdPdf.cxx:1177
 RooProdPdf.cxx:1178
 RooProdPdf.cxx:1179
 RooProdPdf.cxx:1180
 RooProdPdf.cxx:1181
 RooProdPdf.cxx:1182
 RooProdPdf.cxx:1183
 RooProdPdf.cxx:1184
 RooProdPdf.cxx:1185
 RooProdPdf.cxx:1186
 RooProdPdf.cxx:1187
 RooProdPdf.cxx:1188
 RooProdPdf.cxx:1189
 RooProdPdf.cxx:1190
 RooProdPdf.cxx:1191
 RooProdPdf.cxx:1192
 RooProdPdf.cxx:1193
 RooProdPdf.cxx:1194
 RooProdPdf.cxx:1195
 RooProdPdf.cxx:1196
 RooProdPdf.cxx:1197
 RooProdPdf.cxx:1198
 RooProdPdf.cxx:1199
 RooProdPdf.cxx:1200
 RooProdPdf.cxx:1201
 RooProdPdf.cxx:1202
 RooProdPdf.cxx:1203
 RooProdPdf.cxx:1204
 RooProdPdf.cxx:1205
 RooProdPdf.cxx:1206
 RooProdPdf.cxx:1207
 RooProdPdf.cxx:1208
 RooProdPdf.cxx:1209
 RooProdPdf.cxx:1210
 RooProdPdf.cxx:1211
 RooProdPdf.cxx:1212
 RooProdPdf.cxx:1213
 RooProdPdf.cxx:1214
 RooProdPdf.cxx:1215
 RooProdPdf.cxx:1216
 RooProdPdf.cxx:1217
 RooProdPdf.cxx:1218
 RooProdPdf.cxx:1219
 RooProdPdf.cxx:1220
 RooProdPdf.cxx:1221
 RooProdPdf.cxx:1222
 RooProdPdf.cxx:1223
 RooProdPdf.cxx:1224
 RooProdPdf.cxx:1225
 RooProdPdf.cxx:1226
 RooProdPdf.cxx:1227
 RooProdPdf.cxx:1228
 RooProdPdf.cxx:1229
 RooProdPdf.cxx:1230
 RooProdPdf.cxx:1231
 RooProdPdf.cxx:1232
 RooProdPdf.cxx:1233
 RooProdPdf.cxx:1234
 RooProdPdf.cxx:1235
 RooProdPdf.cxx:1236
 RooProdPdf.cxx:1237
 RooProdPdf.cxx:1238
 RooProdPdf.cxx:1239
 RooProdPdf.cxx:1240
 RooProdPdf.cxx:1241
 RooProdPdf.cxx:1242
 RooProdPdf.cxx:1243
 RooProdPdf.cxx:1244
 RooProdPdf.cxx:1245
 RooProdPdf.cxx:1246
 RooProdPdf.cxx:1247
 RooProdPdf.cxx:1248
 RooProdPdf.cxx:1249
 RooProdPdf.cxx:1250
 RooProdPdf.cxx:1251
 RooProdPdf.cxx:1252
 RooProdPdf.cxx:1253
 RooProdPdf.cxx:1254
 RooProdPdf.cxx:1255
 RooProdPdf.cxx:1256
 RooProdPdf.cxx:1257
 RooProdPdf.cxx:1258
 RooProdPdf.cxx:1259
 RooProdPdf.cxx:1260
 RooProdPdf.cxx:1261
 RooProdPdf.cxx:1262
 RooProdPdf.cxx:1263
 RooProdPdf.cxx:1264
 RooProdPdf.cxx:1265
 RooProdPdf.cxx:1266
 RooProdPdf.cxx:1267
 RooProdPdf.cxx:1268
 RooProdPdf.cxx:1269
 RooProdPdf.cxx:1270
 RooProdPdf.cxx:1271
 RooProdPdf.cxx:1272
 RooProdPdf.cxx:1273
 RooProdPdf.cxx:1274
 RooProdPdf.cxx:1275
 RooProdPdf.cxx:1276
 RooProdPdf.cxx:1277
 RooProdPdf.cxx:1278
 RooProdPdf.cxx:1279
 RooProdPdf.cxx:1280
 RooProdPdf.cxx:1281
 RooProdPdf.cxx:1282
 RooProdPdf.cxx:1283
 RooProdPdf.cxx:1284
 RooProdPdf.cxx:1285
 RooProdPdf.cxx:1286
 RooProdPdf.cxx:1287
 RooProdPdf.cxx:1288
 RooProdPdf.cxx:1289
 RooProdPdf.cxx:1290
 RooProdPdf.cxx:1291
 RooProdPdf.cxx:1292
 RooProdPdf.cxx:1293
 RooProdPdf.cxx:1294
 RooProdPdf.cxx:1295
 RooProdPdf.cxx:1296
 RooProdPdf.cxx:1297
 RooProdPdf.cxx:1298
 RooProdPdf.cxx:1299
 RooProdPdf.cxx:1300
 RooProdPdf.cxx:1301
 RooProdPdf.cxx:1302
 RooProdPdf.cxx:1303
 RooProdPdf.cxx:1304
 RooProdPdf.cxx:1305
 RooProdPdf.cxx:1306
 RooProdPdf.cxx:1307
 RooProdPdf.cxx:1308
 RooProdPdf.cxx:1309
 RooProdPdf.cxx:1310
 RooProdPdf.cxx:1311
 RooProdPdf.cxx:1312
 RooProdPdf.cxx:1313
 RooProdPdf.cxx:1314
 RooProdPdf.cxx:1315
 RooProdPdf.cxx:1316
 RooProdPdf.cxx:1317
 RooProdPdf.cxx:1318
 RooProdPdf.cxx:1319
 RooProdPdf.cxx:1320
 RooProdPdf.cxx:1321
 RooProdPdf.cxx:1322
 RooProdPdf.cxx:1323
 RooProdPdf.cxx:1324
 RooProdPdf.cxx:1325
 RooProdPdf.cxx:1326
 RooProdPdf.cxx:1327
 RooProdPdf.cxx:1328
 RooProdPdf.cxx:1329
 RooProdPdf.cxx:1330
 RooProdPdf.cxx:1331
 RooProdPdf.cxx:1332
 RooProdPdf.cxx:1333
 RooProdPdf.cxx:1334
 RooProdPdf.cxx:1335
 RooProdPdf.cxx:1336
 RooProdPdf.cxx:1337
 RooProdPdf.cxx:1338
 RooProdPdf.cxx:1339
 RooProdPdf.cxx:1340
 RooProdPdf.cxx:1341
 RooProdPdf.cxx:1342
 RooProdPdf.cxx:1343
 RooProdPdf.cxx:1344
 RooProdPdf.cxx:1345
 RooProdPdf.cxx:1346
 RooProdPdf.cxx:1347
 RooProdPdf.cxx:1348
 RooProdPdf.cxx:1349
 RooProdPdf.cxx:1350
 RooProdPdf.cxx:1351
 RooProdPdf.cxx:1352
 RooProdPdf.cxx:1353
 RooProdPdf.cxx:1354
 RooProdPdf.cxx:1355
 RooProdPdf.cxx:1356
 RooProdPdf.cxx:1357
 RooProdPdf.cxx:1358
 RooProdPdf.cxx:1359
 RooProdPdf.cxx:1360
 RooProdPdf.cxx:1361
 RooProdPdf.cxx:1362
 RooProdPdf.cxx:1363
 RooProdPdf.cxx:1364
 RooProdPdf.cxx:1365
 RooProdPdf.cxx:1366
 RooProdPdf.cxx:1367
 RooProdPdf.cxx:1368
 RooProdPdf.cxx:1369
 RooProdPdf.cxx:1370
 RooProdPdf.cxx:1371
 RooProdPdf.cxx:1372
 RooProdPdf.cxx:1373
 RooProdPdf.cxx:1374
 RooProdPdf.cxx:1375
 RooProdPdf.cxx:1376
 RooProdPdf.cxx:1377
 RooProdPdf.cxx:1378
 RooProdPdf.cxx:1379
 RooProdPdf.cxx:1380
 RooProdPdf.cxx:1381
 RooProdPdf.cxx:1382
 RooProdPdf.cxx:1383
 RooProdPdf.cxx:1384
 RooProdPdf.cxx:1385
 RooProdPdf.cxx:1386
 RooProdPdf.cxx:1387
 RooProdPdf.cxx:1388
 RooProdPdf.cxx:1389
 RooProdPdf.cxx:1390
 RooProdPdf.cxx:1391
 RooProdPdf.cxx:1392
 RooProdPdf.cxx:1393
 RooProdPdf.cxx:1394
 RooProdPdf.cxx:1395
 RooProdPdf.cxx:1396
 RooProdPdf.cxx:1397
 RooProdPdf.cxx:1398
 RooProdPdf.cxx:1399
 RooProdPdf.cxx:1400
 RooProdPdf.cxx:1401
 RooProdPdf.cxx:1402
 RooProdPdf.cxx:1403
 RooProdPdf.cxx:1404
 RooProdPdf.cxx:1405
 RooProdPdf.cxx:1406
 RooProdPdf.cxx:1407
 RooProdPdf.cxx:1408
 RooProdPdf.cxx:1409
 RooProdPdf.cxx:1410
 RooProdPdf.cxx:1411
 RooProdPdf.cxx:1412
 RooProdPdf.cxx:1413
 RooProdPdf.cxx:1414
 RooProdPdf.cxx:1415
 RooProdPdf.cxx:1416
 RooProdPdf.cxx:1417
 RooProdPdf.cxx:1418
 RooProdPdf.cxx:1419
 RooProdPdf.cxx:1420
 RooProdPdf.cxx:1421
 RooProdPdf.cxx:1422
 RooProdPdf.cxx:1423
 RooProdPdf.cxx:1424
 RooProdPdf.cxx:1425
 RooProdPdf.cxx:1426
 RooProdPdf.cxx:1427
 RooProdPdf.cxx:1428
 RooProdPdf.cxx:1429
 RooProdPdf.cxx:1430
 RooProdPdf.cxx:1431
 RooProdPdf.cxx:1432
 RooProdPdf.cxx:1433
 RooProdPdf.cxx:1434
 RooProdPdf.cxx:1435
 RooProdPdf.cxx:1436
 RooProdPdf.cxx:1437
 RooProdPdf.cxx:1438
 RooProdPdf.cxx:1439
 RooProdPdf.cxx:1440
 RooProdPdf.cxx:1441
 RooProdPdf.cxx:1442
 RooProdPdf.cxx:1443
 RooProdPdf.cxx:1444
 RooProdPdf.cxx:1445
 RooProdPdf.cxx:1446
 RooProdPdf.cxx:1447
 RooProdPdf.cxx:1448
 RooProdPdf.cxx:1449
 RooProdPdf.cxx:1450
 RooProdPdf.cxx:1451
 RooProdPdf.cxx:1452
 RooProdPdf.cxx:1453
 RooProdPdf.cxx:1454
 RooProdPdf.cxx:1455
 RooProdPdf.cxx:1456
 RooProdPdf.cxx:1457
 RooProdPdf.cxx:1458
 RooProdPdf.cxx:1459
 RooProdPdf.cxx:1460
 RooProdPdf.cxx:1461
 RooProdPdf.cxx:1462
 RooProdPdf.cxx:1463
 RooProdPdf.cxx:1464
 RooProdPdf.cxx:1465
 RooProdPdf.cxx:1466
 RooProdPdf.cxx:1467
 RooProdPdf.cxx:1468
 RooProdPdf.cxx:1469
 RooProdPdf.cxx:1470
 RooProdPdf.cxx:1471
 RooProdPdf.cxx:1472
 RooProdPdf.cxx:1473
 RooProdPdf.cxx:1474
 RooProdPdf.cxx:1475
 RooProdPdf.cxx:1476
 RooProdPdf.cxx:1477
 RooProdPdf.cxx:1478
 RooProdPdf.cxx:1479
 RooProdPdf.cxx:1480
 RooProdPdf.cxx:1481
 RooProdPdf.cxx:1482
 RooProdPdf.cxx:1483
 RooProdPdf.cxx:1484
 RooProdPdf.cxx:1485
 RooProdPdf.cxx:1486
 RooProdPdf.cxx:1487
 RooProdPdf.cxx:1488
 RooProdPdf.cxx:1489
 RooProdPdf.cxx:1490
 RooProdPdf.cxx:1491
 RooProdPdf.cxx:1492
 RooProdPdf.cxx:1493
 RooProdPdf.cxx:1494
 RooProdPdf.cxx:1495
 RooProdPdf.cxx:1496
 RooProdPdf.cxx:1497
 RooProdPdf.cxx:1498
 RooProdPdf.cxx:1499
 RooProdPdf.cxx:1500
 RooProdPdf.cxx:1501
 RooProdPdf.cxx:1502
 RooProdPdf.cxx:1503
 RooProdPdf.cxx:1504
 RooProdPdf.cxx:1505
 RooProdPdf.cxx:1506
 RooProdPdf.cxx:1507
 RooProdPdf.cxx:1508
 RooProdPdf.cxx:1509
 RooProdPdf.cxx:1510
 RooProdPdf.cxx:1511
 RooProdPdf.cxx:1512
 RooProdPdf.cxx:1513
 RooProdPdf.cxx:1514
 RooProdPdf.cxx:1515
 RooProdPdf.cxx:1516
 RooProdPdf.cxx:1517
 RooProdPdf.cxx:1518
 RooProdPdf.cxx:1519
 RooProdPdf.cxx:1520
 RooProdPdf.cxx:1521
 RooProdPdf.cxx:1522
 RooProdPdf.cxx:1523
 RooProdPdf.cxx:1524
 RooProdPdf.cxx:1525
 RooProdPdf.cxx:1526
 RooProdPdf.cxx:1527
 RooProdPdf.cxx:1528
 RooProdPdf.cxx:1529
 RooProdPdf.cxx:1530
 RooProdPdf.cxx:1531
 RooProdPdf.cxx:1532
 RooProdPdf.cxx:1533
 RooProdPdf.cxx:1534
 RooProdPdf.cxx:1535
 RooProdPdf.cxx:1536
 RooProdPdf.cxx:1537
 RooProdPdf.cxx:1538
 RooProdPdf.cxx:1539
 RooProdPdf.cxx:1540
 RooProdPdf.cxx:1541
 RooProdPdf.cxx:1542
 RooProdPdf.cxx:1543
 RooProdPdf.cxx:1544
 RooProdPdf.cxx:1545
 RooProdPdf.cxx:1546
 RooProdPdf.cxx:1547
 RooProdPdf.cxx:1548
 RooProdPdf.cxx:1549
 RooProdPdf.cxx:1550
 RooProdPdf.cxx:1551
 RooProdPdf.cxx:1552
 RooProdPdf.cxx:1553
 RooProdPdf.cxx:1554
 RooProdPdf.cxx:1555
 RooProdPdf.cxx:1556
 RooProdPdf.cxx:1557
 RooProdPdf.cxx:1558
 RooProdPdf.cxx:1559
 RooProdPdf.cxx:1560
 RooProdPdf.cxx:1561
 RooProdPdf.cxx:1562
 RooProdPdf.cxx:1563
 RooProdPdf.cxx:1564
 RooProdPdf.cxx:1565
 RooProdPdf.cxx:1566
 RooProdPdf.cxx:1567
 RooProdPdf.cxx:1568
 RooProdPdf.cxx:1569
 RooProdPdf.cxx:1570
 RooProdPdf.cxx:1571
 RooProdPdf.cxx:1572
 RooProdPdf.cxx:1573
 RooProdPdf.cxx:1574
 RooProdPdf.cxx:1575
 RooProdPdf.cxx:1576
 RooProdPdf.cxx:1577
 RooProdPdf.cxx:1578
 RooProdPdf.cxx:1579
 RooProdPdf.cxx:1580
 RooProdPdf.cxx:1581
 RooProdPdf.cxx:1582
 RooProdPdf.cxx:1583
 RooProdPdf.cxx:1584
 RooProdPdf.cxx:1585
 RooProdPdf.cxx:1586
 RooProdPdf.cxx:1587
 RooProdPdf.cxx:1588
 RooProdPdf.cxx:1589
 RooProdPdf.cxx:1590
 RooProdPdf.cxx:1591
 RooProdPdf.cxx:1592
 RooProdPdf.cxx:1593
 RooProdPdf.cxx:1594
 RooProdPdf.cxx:1595
 RooProdPdf.cxx:1596
 RooProdPdf.cxx:1597
 RooProdPdf.cxx:1598
 RooProdPdf.cxx:1599
 RooProdPdf.cxx:1600
 RooProdPdf.cxx:1601
 RooProdPdf.cxx:1602
 RooProdPdf.cxx:1603
 RooProdPdf.cxx:1604
 RooProdPdf.cxx:1605
 RooProdPdf.cxx:1606
 RooProdPdf.cxx:1607
 RooProdPdf.cxx:1608
 RooProdPdf.cxx:1609
 RooProdPdf.cxx:1610
 RooProdPdf.cxx:1611
 RooProdPdf.cxx:1612
 RooProdPdf.cxx:1613
 RooProdPdf.cxx:1614
 RooProdPdf.cxx:1615
 RooProdPdf.cxx:1616
 RooProdPdf.cxx:1617
 RooProdPdf.cxx:1618
 RooProdPdf.cxx:1619
 RooProdPdf.cxx:1620
 RooProdPdf.cxx:1621
 RooProdPdf.cxx:1622
 RooProdPdf.cxx:1623
 RooProdPdf.cxx:1624
 RooProdPdf.cxx:1625
 RooProdPdf.cxx:1626
 RooProdPdf.cxx:1627
 RooProdPdf.cxx:1628
 RooProdPdf.cxx:1629
 RooProdPdf.cxx:1630
 RooProdPdf.cxx:1631
 RooProdPdf.cxx:1632
 RooProdPdf.cxx:1633
 RooProdPdf.cxx:1634
 RooProdPdf.cxx:1635
 RooProdPdf.cxx:1636
 RooProdPdf.cxx:1637
 RooProdPdf.cxx:1638
 RooProdPdf.cxx:1639
 RooProdPdf.cxx:1640
 RooProdPdf.cxx:1641
 RooProdPdf.cxx:1642
 RooProdPdf.cxx:1643
 RooProdPdf.cxx:1644
 RooProdPdf.cxx:1645
 RooProdPdf.cxx:1646
 RooProdPdf.cxx:1647
 RooProdPdf.cxx:1648
 RooProdPdf.cxx:1649
 RooProdPdf.cxx:1650
 RooProdPdf.cxx:1651
 RooProdPdf.cxx:1652
 RooProdPdf.cxx:1653
 RooProdPdf.cxx:1654
 RooProdPdf.cxx:1655
 RooProdPdf.cxx:1656
 RooProdPdf.cxx:1657
 RooProdPdf.cxx:1658
 RooProdPdf.cxx:1659
 RooProdPdf.cxx:1660
 RooProdPdf.cxx:1661
 RooProdPdf.cxx:1662
 RooProdPdf.cxx:1663
 RooProdPdf.cxx:1664
 RooProdPdf.cxx:1665
 RooProdPdf.cxx:1666
 RooProdPdf.cxx:1667
 RooProdPdf.cxx:1668
 RooProdPdf.cxx:1669
 RooProdPdf.cxx:1670
 RooProdPdf.cxx:1671
 RooProdPdf.cxx:1672
 RooProdPdf.cxx:1673
 RooProdPdf.cxx:1674
 RooProdPdf.cxx:1675
 RooProdPdf.cxx:1676
 RooProdPdf.cxx:1677
 RooProdPdf.cxx:1678
 RooProdPdf.cxx:1679
 RooProdPdf.cxx:1680
 RooProdPdf.cxx:1681
 RooProdPdf.cxx:1682
 RooProdPdf.cxx:1683
 RooProdPdf.cxx:1684
 RooProdPdf.cxx:1685
 RooProdPdf.cxx:1686
 RooProdPdf.cxx:1687
 RooProdPdf.cxx:1688
 RooProdPdf.cxx:1689
 RooProdPdf.cxx:1690
 RooProdPdf.cxx:1691
 RooProdPdf.cxx:1692
 RooProdPdf.cxx:1693
 RooProdPdf.cxx:1694
 RooProdPdf.cxx:1695
 RooProdPdf.cxx:1696
 RooProdPdf.cxx:1697
 RooProdPdf.cxx:1698
 RooProdPdf.cxx:1699
 RooProdPdf.cxx:1700
 RooProdPdf.cxx:1701
 RooProdPdf.cxx:1702
 RooProdPdf.cxx:1703
 RooProdPdf.cxx:1704
 RooProdPdf.cxx:1705
 RooProdPdf.cxx:1706
 RooProdPdf.cxx:1707
 RooProdPdf.cxx:1708
 RooProdPdf.cxx:1709
 RooProdPdf.cxx:1710
 RooProdPdf.cxx:1711
 RooProdPdf.cxx:1712
 RooProdPdf.cxx:1713
 RooProdPdf.cxx:1714
 RooProdPdf.cxx:1715
 RooProdPdf.cxx:1716
 RooProdPdf.cxx:1717
 RooProdPdf.cxx:1718
 RooProdPdf.cxx:1719
 RooProdPdf.cxx:1720
 RooProdPdf.cxx:1721
 RooProdPdf.cxx:1722
 RooProdPdf.cxx:1723
 RooProdPdf.cxx:1724
 RooProdPdf.cxx:1725
 RooProdPdf.cxx:1726
 RooProdPdf.cxx:1727
 RooProdPdf.cxx:1728
 RooProdPdf.cxx:1729
 RooProdPdf.cxx:1730
 RooProdPdf.cxx:1731
 RooProdPdf.cxx:1732
 RooProdPdf.cxx:1733
 RooProdPdf.cxx:1734
 RooProdPdf.cxx:1735
 RooProdPdf.cxx:1736
 RooProdPdf.cxx:1737
 RooProdPdf.cxx:1738
 RooProdPdf.cxx:1739
 RooProdPdf.cxx:1740
 RooProdPdf.cxx:1741
 RooProdPdf.cxx:1742
 RooProdPdf.cxx:1743
 RooProdPdf.cxx:1744
 RooProdPdf.cxx:1745
 RooProdPdf.cxx:1746
 RooProdPdf.cxx:1747
 RooProdPdf.cxx:1748
 RooProdPdf.cxx:1749
 RooProdPdf.cxx:1750
 RooProdPdf.cxx:1751
 RooProdPdf.cxx:1752
 RooProdPdf.cxx:1753
 RooProdPdf.cxx:1754
 RooProdPdf.cxx:1755
 RooProdPdf.cxx:1756
 RooProdPdf.cxx:1757
 RooProdPdf.cxx:1758
 RooProdPdf.cxx:1759
 RooProdPdf.cxx:1760
 RooProdPdf.cxx:1761
 RooProdPdf.cxx:1762
 RooProdPdf.cxx:1763
 RooProdPdf.cxx:1764
 RooProdPdf.cxx:1765
 RooProdPdf.cxx:1766
 RooProdPdf.cxx:1767
 RooProdPdf.cxx:1768
 RooProdPdf.cxx:1769
 RooProdPdf.cxx:1770
 RooProdPdf.cxx:1771
 RooProdPdf.cxx:1772
 RooProdPdf.cxx:1773
 RooProdPdf.cxx:1774
 RooProdPdf.cxx:1775
 RooProdPdf.cxx:1776
 RooProdPdf.cxx:1777
 RooProdPdf.cxx:1778
 RooProdPdf.cxx:1779
 RooProdPdf.cxx:1780
 RooProdPdf.cxx:1781
 RooProdPdf.cxx:1782
 RooProdPdf.cxx:1783
 RooProdPdf.cxx:1784
 RooProdPdf.cxx:1785
 RooProdPdf.cxx:1786
 RooProdPdf.cxx:1787
 RooProdPdf.cxx:1788
 RooProdPdf.cxx:1789
 RooProdPdf.cxx:1790
 RooProdPdf.cxx:1791
 RooProdPdf.cxx:1792
 RooProdPdf.cxx:1793
 RooProdPdf.cxx:1794
 RooProdPdf.cxx:1795
 RooProdPdf.cxx:1796
 RooProdPdf.cxx:1797
 RooProdPdf.cxx:1798
 RooProdPdf.cxx:1799
 RooProdPdf.cxx:1800
 RooProdPdf.cxx:1801
 RooProdPdf.cxx:1802
 RooProdPdf.cxx:1803
 RooProdPdf.cxx:1804
 RooProdPdf.cxx:1805
 RooProdPdf.cxx:1806
 RooProdPdf.cxx:1807
 RooProdPdf.cxx:1808
 RooProdPdf.cxx:1809
 RooProdPdf.cxx:1810
 RooProdPdf.cxx:1811
 RooProdPdf.cxx:1812
 RooProdPdf.cxx:1813
 RooProdPdf.cxx:1814
 RooProdPdf.cxx:1815
 RooProdPdf.cxx:1816
 RooProdPdf.cxx:1817
 RooProdPdf.cxx:1818
 RooProdPdf.cxx:1819
 RooProdPdf.cxx:1820
 RooProdPdf.cxx:1821
 RooProdPdf.cxx:1822
 RooProdPdf.cxx:1823
 RooProdPdf.cxx:1824
 RooProdPdf.cxx:1825
 RooProdPdf.cxx:1826
 RooProdPdf.cxx:1827
 RooProdPdf.cxx:1828
 RooProdPdf.cxx:1829
 RooProdPdf.cxx:1830
 RooProdPdf.cxx:1831
 RooProdPdf.cxx:1832
 RooProdPdf.cxx:1833
 RooProdPdf.cxx:1834
 RooProdPdf.cxx:1835
 RooProdPdf.cxx:1836
 RooProdPdf.cxx:1837
 RooProdPdf.cxx:1838
 RooProdPdf.cxx:1839
 RooProdPdf.cxx:1840
 RooProdPdf.cxx:1841
 RooProdPdf.cxx:1842
 RooProdPdf.cxx:1843
 RooProdPdf.cxx:1844
 RooProdPdf.cxx:1845
 RooProdPdf.cxx:1846
 RooProdPdf.cxx:1847
 RooProdPdf.cxx:1848
 RooProdPdf.cxx:1849
 RooProdPdf.cxx:1850
 RooProdPdf.cxx:1851
 RooProdPdf.cxx:1852
 RooProdPdf.cxx:1853
 RooProdPdf.cxx:1854
 RooProdPdf.cxx:1855
 RooProdPdf.cxx:1856
 RooProdPdf.cxx:1857
 RooProdPdf.cxx:1858
 RooProdPdf.cxx:1859
 RooProdPdf.cxx:1860
 RooProdPdf.cxx:1861
 RooProdPdf.cxx:1862
 RooProdPdf.cxx:1863
 RooProdPdf.cxx:1864
 RooProdPdf.cxx:1865
 RooProdPdf.cxx:1866
 RooProdPdf.cxx:1867
 RooProdPdf.cxx:1868
 RooProdPdf.cxx:1869
 RooProdPdf.cxx:1870
 RooProdPdf.cxx:1871
 RooProdPdf.cxx:1872
 RooProdPdf.cxx:1873
 RooProdPdf.cxx:1874
 RooProdPdf.cxx:1875
 RooProdPdf.cxx:1876
 RooProdPdf.cxx:1877
 RooProdPdf.cxx:1878
 RooProdPdf.cxx:1879
 RooProdPdf.cxx:1880
 RooProdPdf.cxx:1881
 RooProdPdf.cxx:1882
 RooProdPdf.cxx:1883
 RooProdPdf.cxx:1884
 RooProdPdf.cxx:1885
 RooProdPdf.cxx:1886
 RooProdPdf.cxx:1887
 RooProdPdf.cxx:1888
 RooProdPdf.cxx:1889
 RooProdPdf.cxx:1890
 RooProdPdf.cxx:1891
 RooProdPdf.cxx:1892
 RooProdPdf.cxx:1893
 RooProdPdf.cxx:1894
 RooProdPdf.cxx:1895
 RooProdPdf.cxx:1896
 RooProdPdf.cxx:1897
 RooProdPdf.cxx:1898
 RooProdPdf.cxx:1899
 RooProdPdf.cxx:1900
 RooProdPdf.cxx:1901
 RooProdPdf.cxx:1902
 RooProdPdf.cxx:1903
 RooProdPdf.cxx:1904
 RooProdPdf.cxx:1905
 RooProdPdf.cxx:1906
 RooProdPdf.cxx:1907
 RooProdPdf.cxx:1908
 RooProdPdf.cxx:1909
 RooProdPdf.cxx:1910
 RooProdPdf.cxx:1911
 RooProdPdf.cxx:1912
 RooProdPdf.cxx:1913
 RooProdPdf.cxx:1914
 RooProdPdf.cxx:1915
 RooProdPdf.cxx:1916
 RooProdPdf.cxx:1917
 RooProdPdf.cxx:1918
 RooProdPdf.cxx:1919
 RooProdPdf.cxx:1920
 RooProdPdf.cxx:1921
 RooProdPdf.cxx:1922
 RooProdPdf.cxx:1923
 RooProdPdf.cxx:1924
 RooProdPdf.cxx:1925
 RooProdPdf.cxx:1926
 RooProdPdf.cxx:1927
 RooProdPdf.cxx:1928
 RooProdPdf.cxx:1929
 RooProdPdf.cxx:1930
 RooProdPdf.cxx:1931
 RooProdPdf.cxx:1932
 RooProdPdf.cxx:1933
 RooProdPdf.cxx:1934
 RooProdPdf.cxx:1935
 RooProdPdf.cxx:1936
 RooProdPdf.cxx:1937
 RooProdPdf.cxx:1938
 RooProdPdf.cxx:1939
 RooProdPdf.cxx:1940
 RooProdPdf.cxx:1941
 RooProdPdf.cxx:1942
 RooProdPdf.cxx:1943
 RooProdPdf.cxx:1944
 RooProdPdf.cxx:1945
 RooProdPdf.cxx:1946
 RooProdPdf.cxx:1947
 RooProdPdf.cxx:1948
 RooProdPdf.cxx:1949
 RooProdPdf.cxx:1950
 RooProdPdf.cxx:1951
 RooProdPdf.cxx:1952
 RooProdPdf.cxx:1953
 RooProdPdf.cxx:1954
 RooProdPdf.cxx:1955
 RooProdPdf.cxx:1956
 RooProdPdf.cxx:1957
 RooProdPdf.cxx:1958
 RooProdPdf.cxx:1959
 RooProdPdf.cxx:1960
 RooProdPdf.cxx:1961
 RooProdPdf.cxx:1962
 RooProdPdf.cxx:1963
 RooProdPdf.cxx:1964
 RooProdPdf.cxx:1965
 RooProdPdf.cxx:1966
 RooProdPdf.cxx:1967
 RooProdPdf.cxx:1968
 RooProdPdf.cxx:1969
 RooProdPdf.cxx:1970
 RooProdPdf.cxx:1971
 RooProdPdf.cxx:1972
 RooProdPdf.cxx:1973
 RooProdPdf.cxx:1974
 RooProdPdf.cxx:1975
 RooProdPdf.cxx:1976
 RooProdPdf.cxx:1977
 RooProdPdf.cxx:1978
 RooProdPdf.cxx:1979
 RooProdPdf.cxx:1980
 RooProdPdf.cxx:1981
 RooProdPdf.cxx:1982
 RooProdPdf.cxx:1983
 RooProdPdf.cxx:1984
 RooProdPdf.cxx:1985
 RooProdPdf.cxx:1986
 RooProdPdf.cxx:1987
 RooProdPdf.cxx:1988
 RooProdPdf.cxx:1989
 RooProdPdf.cxx:1990
 RooProdPdf.cxx:1991
 RooProdPdf.cxx:1992
 RooProdPdf.cxx:1993
 RooProdPdf.cxx:1994
 RooProdPdf.cxx:1995
 RooProdPdf.cxx:1996
 RooProdPdf.cxx:1997
 RooProdPdf.cxx:1998
 RooProdPdf.cxx:1999
 RooProdPdf.cxx:2000
 RooProdPdf.cxx:2001
 RooProdPdf.cxx:2002
 RooProdPdf.cxx:2003
 RooProdPdf.cxx:2004
 RooProdPdf.cxx:2005
 RooProdPdf.cxx:2006
 RooProdPdf.cxx:2007
 RooProdPdf.cxx:2008
 RooProdPdf.cxx:2009
 RooProdPdf.cxx:2010
 RooProdPdf.cxx:2011
 RooProdPdf.cxx:2012
 RooProdPdf.cxx:2013
 RooProdPdf.cxx:2014
 RooProdPdf.cxx:2015
 RooProdPdf.cxx:2016
 RooProdPdf.cxx:2017
 RooProdPdf.cxx:2018
 RooProdPdf.cxx:2019
 RooProdPdf.cxx:2020
 RooProdPdf.cxx:2021
 RooProdPdf.cxx:2022
 RooProdPdf.cxx:2023
 RooProdPdf.cxx:2024
 RooProdPdf.cxx:2025
 RooProdPdf.cxx:2026
 RooProdPdf.cxx:2027
 RooProdPdf.cxx:2028
 RooProdPdf.cxx:2029
 RooProdPdf.cxx:2030
 RooProdPdf.cxx:2031
 RooProdPdf.cxx:2032
 RooProdPdf.cxx:2033
 RooProdPdf.cxx:2034
 RooProdPdf.cxx:2035
 RooProdPdf.cxx:2036
 RooProdPdf.cxx:2037
 RooProdPdf.cxx:2038
 RooProdPdf.cxx:2039
 RooProdPdf.cxx:2040
 RooProdPdf.cxx:2041
 RooProdPdf.cxx:2042
 RooProdPdf.cxx:2043
 RooProdPdf.cxx:2044
 RooProdPdf.cxx:2045
 RooProdPdf.cxx:2046
 RooProdPdf.cxx:2047
 RooProdPdf.cxx:2048
 RooProdPdf.cxx:2049
 RooProdPdf.cxx:2050
 RooProdPdf.cxx:2051
 RooProdPdf.cxx:2052
 RooProdPdf.cxx:2053
 RooProdPdf.cxx:2054
 RooProdPdf.cxx:2055
 RooProdPdf.cxx:2056
 RooProdPdf.cxx:2057
 RooProdPdf.cxx:2058
 RooProdPdf.cxx:2059
 RooProdPdf.cxx:2060
 RooProdPdf.cxx:2061
 RooProdPdf.cxx:2062
 RooProdPdf.cxx:2063
 RooProdPdf.cxx:2064
 RooProdPdf.cxx:2065
 RooProdPdf.cxx:2066
 RooProdPdf.cxx:2067
 RooProdPdf.cxx:2068
 RooProdPdf.cxx:2069
 RooProdPdf.cxx:2070
 RooProdPdf.cxx:2071
 RooProdPdf.cxx:2072
 RooProdPdf.cxx:2073
 RooProdPdf.cxx:2074
 RooProdPdf.cxx:2075
 RooProdPdf.cxx:2076
 RooProdPdf.cxx:2077
 RooProdPdf.cxx:2078
 RooProdPdf.cxx:2079
 RooProdPdf.cxx:2080
 RooProdPdf.cxx:2081
 RooProdPdf.cxx:2082
 RooProdPdf.cxx:2083
 RooProdPdf.cxx:2084
 RooProdPdf.cxx:2085
 RooProdPdf.cxx:2086
 RooProdPdf.cxx:2087
 RooProdPdf.cxx:2088
 RooProdPdf.cxx:2089
 RooProdPdf.cxx:2090
 RooProdPdf.cxx:2091
 RooProdPdf.cxx:2092
 RooProdPdf.cxx:2093
 RooProdPdf.cxx:2094
 RooProdPdf.cxx:2095
 RooProdPdf.cxx:2096
 RooProdPdf.cxx:2097
 RooProdPdf.cxx:2098
 RooProdPdf.cxx:2099
 RooProdPdf.cxx:2100
 RooProdPdf.cxx:2101
 RooProdPdf.cxx:2102
 RooProdPdf.cxx:2103
 RooProdPdf.cxx:2104
 RooProdPdf.cxx:2105
 RooProdPdf.cxx:2106
 RooProdPdf.cxx:2107
 RooProdPdf.cxx:2108
 RooProdPdf.cxx:2109
 RooProdPdf.cxx:2110
 RooProdPdf.cxx:2111
 RooProdPdf.cxx:2112
 RooProdPdf.cxx:2113
 RooProdPdf.cxx:2114
 RooProdPdf.cxx:2115
 RooProdPdf.cxx:2116
 RooProdPdf.cxx:2117
 RooProdPdf.cxx:2118
 RooProdPdf.cxx:2119
 RooProdPdf.cxx:2120
 RooProdPdf.cxx:2121
 RooProdPdf.cxx:2122
 RooProdPdf.cxx:2123
 RooProdPdf.cxx:2124
 RooProdPdf.cxx:2125
 RooProdPdf.cxx:2126
 RooProdPdf.cxx:2127
 RooProdPdf.cxx:2128
 RooProdPdf.cxx:2129
 RooProdPdf.cxx:2130
 RooProdPdf.cxx:2131
 RooProdPdf.cxx:2132
 RooProdPdf.cxx:2133
 RooProdPdf.cxx:2134
 RooProdPdf.cxx:2135
 RooProdPdf.cxx:2136
 RooProdPdf.cxx:2137
 RooProdPdf.cxx:2138
 RooProdPdf.cxx:2139
 RooProdPdf.cxx:2140
 RooProdPdf.cxx:2141
 RooProdPdf.cxx:2142
 RooProdPdf.cxx:2143
 RooProdPdf.cxx:2144
 RooProdPdf.cxx:2145
 RooProdPdf.cxx:2146
 RooProdPdf.cxx:2147
 RooProdPdf.cxx:2148
 RooProdPdf.cxx:2149
 RooProdPdf.cxx:2150
 RooProdPdf.cxx:2151
 RooProdPdf.cxx:2152
 RooProdPdf.cxx:2153
 RooProdPdf.cxx:2154
 RooProdPdf.cxx:2155
 RooProdPdf.cxx:2156
 RooProdPdf.cxx:2157
 RooProdPdf.cxx:2158
 RooProdPdf.cxx:2159
 RooProdPdf.cxx:2160
 RooProdPdf.cxx:2161
 RooProdPdf.cxx:2162
 RooProdPdf.cxx:2163
 RooProdPdf.cxx:2164
 RooProdPdf.cxx:2165
 RooProdPdf.cxx:2166
 RooProdPdf.cxx:2167
 RooProdPdf.cxx:2168
 RooProdPdf.cxx:2169
 RooProdPdf.cxx:2170
 RooProdPdf.cxx:2171
 RooProdPdf.cxx:2172
 RooProdPdf.cxx:2173
 RooProdPdf.cxx:2174
 RooProdPdf.cxx:2175
 RooProdPdf.cxx:2176
 RooProdPdf.cxx:2177
 RooProdPdf.cxx:2178
 RooProdPdf.cxx:2179
 RooProdPdf.cxx:2180
 RooProdPdf.cxx:2181
 RooProdPdf.cxx:2182
 RooProdPdf.cxx:2183
 RooProdPdf.cxx:2184
 RooProdPdf.cxx:2185
 RooProdPdf.cxx:2186
 RooProdPdf.cxx:2187
 RooProdPdf.cxx:2188
 RooProdPdf.cxx:2189
 RooProdPdf.cxx:2190
 RooProdPdf.cxx:2191
 RooProdPdf.cxx:2192
 RooProdPdf.cxx:2193
 RooProdPdf.cxx:2194
 RooProdPdf.cxx:2195
 RooProdPdf.cxx:2196
 RooProdPdf.cxx:2197
 RooProdPdf.cxx:2198
 RooProdPdf.cxx:2199
 RooProdPdf.cxx:2200
 RooProdPdf.cxx:2201
 RooProdPdf.cxx:2202
 RooProdPdf.cxx:2203
 RooProdPdf.cxx:2204
 RooProdPdf.cxx:2205
 RooProdPdf.cxx:2206
 RooProdPdf.cxx:2207
 RooProdPdf.cxx:2208
 RooProdPdf.cxx:2209
 RooProdPdf.cxx:2210
 RooProdPdf.cxx:2211
 RooProdPdf.cxx:2212
 RooProdPdf.cxx:2213
 RooProdPdf.cxx:2214
 RooProdPdf.cxx:2215
 RooProdPdf.cxx:2216
 RooProdPdf.cxx:2217
 RooProdPdf.cxx:2218
 RooProdPdf.cxx:2219
 RooProdPdf.cxx:2220
 RooProdPdf.cxx:2221
 RooProdPdf.cxx:2222
 RooProdPdf.cxx:2223
 RooProdPdf.cxx:2224
 RooProdPdf.cxx:2225
 RooProdPdf.cxx:2226
 RooProdPdf.cxx:2227
 RooProdPdf.cxx:2228
 RooProdPdf.cxx:2229
 RooProdPdf.cxx:2230
 RooProdPdf.cxx:2231
 RooProdPdf.cxx:2232
 RooProdPdf.cxx:2233
 RooProdPdf.cxx:2234
 RooProdPdf.cxx:2235
 RooProdPdf.cxx:2236
 RooProdPdf.cxx:2237
 RooProdPdf.cxx:2238
 RooProdPdf.cxx:2239
 RooProdPdf.cxx:2240
 RooProdPdf.cxx:2241
 RooProdPdf.cxx:2242
 RooProdPdf.cxx:2243
 RooProdPdf.cxx:2244
 RooProdPdf.cxx:2245
 RooProdPdf.cxx:2246
 RooProdPdf.cxx:2247
 RooProdPdf.cxx:2248
 RooProdPdf.cxx:2249
 RooProdPdf.cxx:2250
 RooProdPdf.cxx:2251
 RooProdPdf.cxx:2252
 RooProdPdf.cxx:2253
 RooProdPdf.cxx:2254
 RooProdPdf.cxx:2255
 RooProdPdf.cxx:2256
 RooProdPdf.cxx:2257
 RooProdPdf.cxx:2258
 RooProdPdf.cxx:2259
 RooProdPdf.cxx:2260
 RooProdPdf.cxx:2261
 RooProdPdf.cxx:2262
 RooProdPdf.cxx:2263
 RooProdPdf.cxx:2264
 RooProdPdf.cxx:2265
 RooProdPdf.cxx:2266
 RooProdPdf.cxx:2267
 RooProdPdf.cxx:2268
 RooProdPdf.cxx:2269
 RooProdPdf.cxx:2270
 RooProdPdf.cxx:2271
 RooProdPdf.cxx:2272
 RooProdPdf.cxx:2273
 RooProdPdf.cxx:2274
 RooProdPdf.cxx:2275
 RooProdPdf.cxx:2276
 RooProdPdf.cxx:2277
 RooProdPdf.cxx:2278
 RooProdPdf.cxx:2279
 RooProdPdf.cxx:2280
 RooProdPdf.cxx:2281
 RooProdPdf.cxx:2282
 RooProdPdf.cxx:2283
 RooProdPdf.cxx:2284
 RooProdPdf.cxx:2285
 RooProdPdf.cxx:2286
 RooProdPdf.cxx:2287
 RooProdPdf.cxx:2288
 RooProdPdf.cxx:2289
 RooProdPdf.cxx:2290
 RooProdPdf.cxx:2291
 RooProdPdf.cxx:2292
 RooProdPdf.cxx:2293
 RooProdPdf.cxx:2294
 RooProdPdf.cxx:2295
 RooProdPdf.cxx:2296
 RooProdPdf.cxx:2297
 RooProdPdf.cxx:2298
 RooProdPdf.cxx:2299
 RooProdPdf.cxx:2300
 RooProdPdf.cxx:2301
 RooProdPdf.cxx:2302
 RooProdPdf.cxx:2303
 RooProdPdf.cxx:2304
 RooProdPdf.cxx:2305
 RooProdPdf.cxx:2306
 RooProdPdf.cxx:2307
 RooProdPdf.cxx:2308
 RooProdPdf.cxx:2309
 RooProdPdf.cxx:2310
 RooProdPdf.cxx:2311
 RooProdPdf.cxx:2312
 RooProdPdf.cxx:2313
 RooProdPdf.cxx:2314
 RooProdPdf.cxx:2315
 RooProdPdf.cxx:2316
 RooProdPdf.cxx:2317
 RooProdPdf.cxx:2318
 RooProdPdf.cxx:2319
 RooProdPdf.cxx:2320
 RooProdPdf.cxx:2321
 RooProdPdf.cxx:2322
 RooProdPdf.cxx:2323
 RooProdPdf.cxx:2324
 RooProdPdf.cxx:2325
 RooProdPdf.cxx:2326
 RooProdPdf.cxx:2327
 RooProdPdf.cxx:2328
 RooProdPdf.cxx:2329
 RooProdPdf.cxx:2330
 RooProdPdf.cxx:2331
 RooProdPdf.cxx:2332
 RooProdPdf.cxx:2333
 RooProdPdf.cxx:2334
 RooProdPdf.cxx:2335
 RooProdPdf.cxx:2336
 RooProdPdf.cxx:2337
 RooProdPdf.cxx:2338
 RooProdPdf.cxx:2339
 RooProdPdf.cxx:2340
 RooProdPdf.cxx:2341
 RooProdPdf.cxx:2342
 RooProdPdf.cxx:2343
 RooProdPdf.cxx:2344
 RooProdPdf.cxx:2345
 RooProdPdf.cxx:2346
 RooProdPdf.cxx:2347
 RooProdPdf.cxx:2348
 RooProdPdf.cxx:2349
 RooProdPdf.cxx:2350
 RooProdPdf.cxx:2351
 RooProdPdf.cxx:2352
 RooProdPdf.cxx:2353
 RooProdPdf.cxx:2354
 RooProdPdf.cxx:2355
 RooProdPdf.cxx:2356
 RooProdPdf.cxx:2357
 RooProdPdf.cxx:2358
 RooProdPdf.cxx:2359
 RooProdPdf.cxx:2360
 RooProdPdf.cxx:2361
 RooProdPdf.cxx:2362
 RooProdPdf.cxx:2363
 RooProdPdf.cxx:2364
 RooProdPdf.cxx:2365
 RooProdPdf.cxx:2366
 RooProdPdf.cxx:2367
 RooProdPdf.cxx:2368
 RooProdPdf.cxx:2369
 RooProdPdf.cxx:2370
 RooProdPdf.cxx:2371
 RooProdPdf.cxx:2372
 RooProdPdf.cxx:2373
 RooProdPdf.cxx:2374
 RooProdPdf.cxx:2375
 RooProdPdf.cxx:2376
 RooProdPdf.cxx:2377
 RooProdPdf.cxx:2378
 RooProdPdf.cxx:2379
 RooProdPdf.cxx:2380
 RooProdPdf.cxx:2381
 RooProdPdf.cxx:2382
 RooProdPdf.cxx:2383
 RooProdPdf.cxx:2384
 RooProdPdf.cxx:2385
 RooProdPdf.cxx:2386
 RooProdPdf.cxx:2387
 RooProdPdf.cxx:2388
 RooProdPdf.cxx:2389
 RooProdPdf.cxx:2390
 RooProdPdf.cxx:2391
 RooProdPdf.cxx:2392
 RooProdPdf.cxx:2393
 RooProdPdf.cxx:2394
 RooProdPdf.cxx:2395
 RooProdPdf.cxx:2396
 RooProdPdf.cxx:2397
 RooProdPdf.cxx:2398
 RooProdPdf.cxx:2399
 RooProdPdf.cxx:2400
 RooProdPdf.cxx:2401
 RooProdPdf.cxx:2402
 RooProdPdf.cxx:2403
 RooProdPdf.cxx:2404
 RooProdPdf.cxx:2405
 RooProdPdf.cxx:2406
 RooProdPdf.cxx:2407
 RooProdPdf.cxx:2408
 RooProdPdf.cxx:2409
 RooProdPdf.cxx:2410
 RooProdPdf.cxx:2411
 RooProdPdf.cxx:2412
 RooProdPdf.cxx:2413
 RooProdPdf.cxx:2414
 RooProdPdf.cxx:2415
 RooProdPdf.cxx:2416
 RooProdPdf.cxx:2417
 RooProdPdf.cxx:2418
 RooProdPdf.cxx:2419
 RooProdPdf.cxx:2420
 RooProdPdf.cxx:2421
 RooProdPdf.cxx:2422
 RooProdPdf.cxx:2423
 RooProdPdf.cxx:2424
 RooProdPdf.cxx:2425
 RooProdPdf.cxx:2426
 RooProdPdf.cxx:2427
 RooProdPdf.cxx:2428
 RooProdPdf.cxx:2429
 RooProdPdf.cxx:2430
 RooProdPdf.cxx:2431
 RooProdPdf.cxx:2432
 RooProdPdf.cxx:2433
 RooProdPdf.cxx:2434
 RooProdPdf.cxx:2435
 RooProdPdf.cxx:2436
 RooProdPdf.cxx:2437
 RooProdPdf.cxx:2438
 RooProdPdf.cxx:2439
 RooProdPdf.cxx:2440
 RooProdPdf.cxx:2441
 RooProdPdf.cxx:2442
 RooProdPdf.cxx:2443
 RooProdPdf.cxx:2444
 RooProdPdf.cxx:2445
 RooProdPdf.cxx:2446
 RooProdPdf.cxx:2447
 RooProdPdf.cxx:2448
 RooProdPdf.cxx:2449
 RooProdPdf.cxx:2450
 RooProdPdf.cxx:2451
 RooProdPdf.cxx:2452
 RooProdPdf.cxx:2453
 RooProdPdf.cxx:2454
 RooProdPdf.cxx:2455
 RooProdPdf.cxx:2456
 RooProdPdf.cxx:2457
 RooProdPdf.cxx:2458
 RooProdPdf.cxx:2459
 RooProdPdf.cxx:2460
 RooProdPdf.cxx:2461
 RooProdPdf.cxx:2462
 RooProdPdf.cxx:2463
 RooProdPdf.cxx:2464
 RooProdPdf.cxx:2465
 RooProdPdf.cxx:2466
 RooProdPdf.cxx:2467
 RooProdPdf.cxx:2468
 RooProdPdf.cxx:2469
 RooProdPdf.cxx:2470
 RooProdPdf.cxx:2471
 RooProdPdf.cxx:2472
 RooProdPdf.cxx:2473
 RooProdPdf.cxx:2474
 RooProdPdf.cxx:2475
 RooProdPdf.cxx:2476
 RooProdPdf.cxx:2477
 RooProdPdf.cxx:2478
 RooProdPdf.cxx:2479
 RooProdPdf.cxx:2480
 RooProdPdf.cxx:2481
 RooProdPdf.cxx:2482
 RooProdPdf.cxx:2483
 RooProdPdf.cxx:2484
 RooProdPdf.cxx:2485
 RooProdPdf.cxx:2486
 RooProdPdf.cxx:2487
 RooProdPdf.cxx:2488
 RooProdPdf.cxx:2489
 RooProdPdf.cxx:2490
 RooProdPdf.cxx:2491
 RooProdPdf.cxx:2492
 RooProdPdf.cxx:2493
 RooProdPdf.cxx:2494
 RooProdPdf.cxx:2495
 RooProdPdf.cxx:2496
 RooProdPdf.cxx:2497
 RooProdPdf.cxx:2498
 RooProdPdf.cxx:2499
 RooProdPdf.cxx:2500
 RooProdPdf.cxx:2501
 RooProdPdf.cxx:2502
 RooProdPdf.cxx:2503
 RooProdPdf.cxx:2504