16 #ifndef ROO_ABS_ANA_CONV_PDF 
   17 #define ROO_ABS_ANA_CONV_PDF 
   29 class RooResolutionModel ;
 
   31 class RooAbsGenContext ;
 
   32 class RooConvGenContext ;
 
   34 class RooAbsAnaConvPdf : 
public RooAbsPdf {
 
   39   RooAbsAnaConvPdf(
const char *name, 
const char *title, 
 
   40          const RooResolutionModel& model, 
 
   41          RooRealVar& convVar) ;
 
   43   RooAbsAnaConvPdf(
const RooAbsAnaConvPdf& other, 
const char* name=0);
 
   44   virtual ~RooAbsAnaConvPdf();
 
   46   Int_t declareBasis(
const char* expression, 
const RooArgList& params) ;
 
   47   virtual void printMultiline(std::ostream& stream, Int_t contents, Bool_t verbose=kFALSE, TString indent= 
"") 
const ;
 
   50   inline Double_t getCoefNorm(Int_t coefIdx, 
const RooArgSet& nset, 
const char* rangeName)
 const { 
 
   52     return getCoefNorm(coefIdx,&nset,rangeName) ; 
 
   54   Double_t getCoefNorm(Int_t coefIdx, 
const RooArgSet* nset=0, 
const char* rangeName=0)
 const {
 
   55        return getCoefNorm(coefIdx,nset,RooNameReg::ptr(rangeName));
 
   59   virtual Int_t getAnalyticalIntegralWN(RooArgSet& allVars, RooArgSet& analVars, 
const RooArgSet* normSet, 
const char* rangeName=0) 
const ;
 
   60   virtual Double_t analyticalIntegralWN(Int_t code, 
const RooArgSet* normSet, 
const char* rangeName=0) 
const ;
 
   63   virtual Int_t getCoefAnalyticalIntegral(Int_t coef, RooArgSet& allVars, RooArgSet& analVars, 
const char* rangeName=0) 
const ;
 
   64   virtual Double_t coefAnalyticalIntegral(Int_t coef, Int_t code, 
const char* rangeName=0) 
const ;
 
   65   virtual Bool_t forceAnalyticalInt(
const RooAbsArg& dep) 
const ; 
 
   67   virtual Double_t coefficient(Int_t basisIndex) 
const = 0 ;
 
   68   virtual RooArgSet* coefVars(Int_t coefIdx) 
const ;
 
   70   virtual Bool_t isDirectGenSafe(
const RooAbsArg& arg) 
const ;
 
   72   virtual void setCacheAndTrackHints(RooArgSet&) ;
 
   74   virtual RooAbsGenContext* genContext(
const RooArgSet &vars, 
const RooDataSet *prototype=0, 
 
   75                                        const RooArgSet* auxProto=0, Bool_t verbose= kFALSE) 
const ;
 
   76   virtual Bool_t changeModel(
const RooResolutionModel& newModel) ;
 
   78   const RooRealVar* convVar() 
const ;  
 
   81   Double_t getCoefNorm(Int_t coefIdx, 
const RooArgSet* nset, 
const TNamed* rangeName) 
const ;
 
   85   virtual Double_t evaluate() 
const ;
 
   87   void makeCoefVarList(RooArgList&) 
const ;
 
   89   friend class RooConvGenContext ;
 
   92   RooRealProxy _convVar ; 
 
   94   RooArgSet* parseIntegrationRequest(
const RooArgSet& intSet, Int_t& coefCode, RooArgSet* analVars=0) 
const ;
 
   96   RooListProxy _convSet  ;             
 
   97   RooArgList _basisList ;              
 
   98   mutable RooArgSet* _convNormSet ;    
 
  101   class CacheElem : 
public RooAbsCacheElement {
 
  103     virtual ~CacheElem() {} ;
 
  105     RooArgList containedArgs(Action) { 
 
  106       RooArgList l(_coefVarList) ; 
 
  111     RooArgList _coefVarList ;
 
  112     RooArgList _normList ;
 
  114   mutable RooObjCacheManager _coefNormMgr ; 
 
  116   mutable RooAICRegistry _codeReg ;   
 
  118   ClassDef(RooAbsAnaConvPdf,2)