26 class RooFFTConvPdf : 
public RooAbsCachedPdf {
 
   32   RooFFTConvPdf(
const char *name, 
const char *title, RooRealVar& convVar, RooAbsPdf& pdf1, RooAbsPdf& pdf2, Int_t ipOrder=2);
 
   33   RooFFTConvPdf(
const char *name, 
const char *title, RooAbsReal& pdfConvVar, RooRealVar& convVar, RooAbsPdf& pdf1, RooAbsPdf& pdf2, Int_t ipOrder=2);
 
   34   RooFFTConvPdf(
const RooFFTConvPdf& other, 
const char* name=0) ;
 
   35   virtual TObject* clone(
const char* newname)
 const { 
return new RooFFTConvPdf(*
this,newname); }
 
   36   virtual ~RooFFTConvPdf() ;
 
   38   void setShift(Double_t val1, Double_t val2) { _shift1 = val1 ; _shift2 = val2 ; }
 
   39   void setCacheObservables(
const RooArgSet& obs) { _cacheObs.removeAll() ; _cacheObs.add(obs) ; }
 
   40   const RooArgSet& cacheObservables()
 const { 
return _cacheObs ; }
 
   42   Double_t bufferFraction()
 const { 
 
   48   enum BufStrat { Extend=0, Mirror=1, Flat=2 } ;
 
   49   BufStrat bufferStrategy()
 const {
 
   56   void setBufferStrategy(BufStrat bs) ;
 
   57   void setBufferFraction(Double_t frac) ;
 
   59   void printMetaArgs(std::ostream& os) 
const ;
 
   62   virtual Int_t getMaxVal(
const RooArgSet& vars)
 const { 
return _pdf1.arg().getMaxVal(vars) ; }
 
   63   virtual Double_t maxVal(Int_t code)
 const { 
return _pdf1.arg().maxVal(code) ; }
 
   69   RooRealProxy _xprime ;  
 
   75   Bool_t redirectServersHook(
const RooAbsCollection& newServerList, Bool_t mustReplaceAll, Bool_t nameChange, Bool_t isRecursive) ;
 
   77   Double_t*  scanPdf(RooRealVar& obs, RooAbsPdf& pdf, 
const RooDataHist& hist, 
const RooArgSet& slicePos, Int_t& N, Int_t& N2, Int_t& zeroBin, Double_t shift) 
const ;
 
   79   class FFTCacheElem : 
public PdfCacheElem {
 
   81     FFTCacheElem(
const RooFFTConvPdf& 
self, 
const RooArgSet* nset) ;
 
   84     virtual RooArgList containedArgs(Action) ;
 
   86     TVirtualFFT* fftr2c1 ;
 
   87     TVirtualFFT* fftr2c2 ;
 
   90     RooAbsPdf* pdf1Clone ;
 
   91     RooAbsPdf* pdf2Clone ;
 
   93     RooAbsBinning* histBinning ;
 
   94     RooAbsBinning* scanBinning ;
 
   98   friend class FFTCacheElem ;  
 
  100   virtual Double_t evaluate()
 const { RooArgSet dummy(_x.arg()) ; 
return getVal(&dummy) ; } ; 
 
  101   virtual const char* inputBaseName() 
const ;
 
  102   virtual RooArgSet* actualObservables(
const RooArgSet& nset) 
const ;
 
  103   virtual RooArgSet* actualParameters(
const RooArgSet& nset) 
const ;
 
  104   virtual RooAbsArg& pdfObservable(RooAbsArg& histObservable) 
const ;
 
  105   virtual void fillCacheObject(PdfCacheElem& cache) 
const ;
 
  106   void fillCacheSlice(FFTCacheElem& cache, 
const RooArgSet& slicePosition) 
const ;
 
  108   virtual PdfCacheElem* createCache(
const RooArgSet* nset) 
const ;
 
  109   virtual TString histNameSuffix() 
const ;
 
  118   virtual RooAbsGenContext* genContext(
const RooArgSet &vars, 
const RooDataSet *prototype=0, 
 
  119                                        const RooArgSet* auxProto=0, Bool_t verbose= kFALSE) 
const ;
 
  121   friend class RooConvGenContext ;
 
  122   RooSetProxy  _cacheObs ; 
 
  126   void prepareFFTBinning(RooRealVar& convVar) 
const;
 
  128   ClassDef(RooFFTConvPdf,1)