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)