#ifndef ROOPROJECTEDPDF
#define ROOPROJECTEDPDF
#include "RooAbsPdf.h"
#include "RooRealProxy.h"
#include "RooAbsReal.h"
#include "RooObjCacheManager.h"
#include "RooSetProxy.h"
class RooProjectedPdf : public RooAbsPdf {
public:
RooProjectedPdf() ;
RooProjectedPdf(const char *name, const char *title, RooAbsReal& _intpdf, const RooArgSet& intObs);
RooProjectedPdf(const RooProjectedPdf& other, const char* name=0) ;
virtual TObject* clone(const char* newname) const { return new RooProjectedPdf(*this,newname); }
inline virtual ~RooProjectedPdf() { }
virtual Int_t getAnalyticalIntegralWN(RooArgSet& allVars, RooArgSet& analVars, const RooArgSet* normSet, const char* rangeName=0) const ;
virtual Double_t analyticalIntegralWN(Int_t code, const RooArgSet* normSet, const char* rangeName=0) const ;
virtual Bool_t forceAnalyticalInt(const RooAbsArg& dep) const ;
virtual Double_t getValV(const RooArgSet* set=0) const ;
Int_t getGenerator(const RooArgSet& directVars, RooArgSet &generateVars, Bool_t staticInitOK=kTRUE) const;
void initGenerator(Int_t ) {} ;
void generateEvent(Int_t code);
virtual Bool_t selfNormalized() const { return kTRUE ; }
virtual RooAbsPdf* createProjection(const RooArgSet& iset) ;
void printMetaArgs(std::ostream& os) const ;
protected:
RooRealProxy intpdf ;
RooSetProxy intobs ;
RooSetProxy deps ;
class CacheElem : public RooAbsCacheElement {
public:
virtual ~CacheElem() { delete _projection ; } ;
RooAbsReal* _projection ;
virtual RooArgList containedArgs(Action) ;
virtual void printCompactTreeHook(std::ostream&, const char *, Int_t, Int_t) ;
} ;
mutable RooObjCacheManager _cacheMgr ;
Bool_t redirectServersHook(const RooAbsCollection& newServerList, Bool_t , Bool_t , Bool_t ) ;
mutable RooArgSet* _curNormSet ;
const RooAbsReal* getProjection(const RooArgSet* iset, const RooArgSet* nset, const char* rangeName, int& code) const ;
Double_t evaluate() const ;
private:
ClassDef(RooProjectedPdf,1)
};
#endif