00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef ROO_ABS_ANA_CONV_PDF
00017 #define ROO_ABS_ANA_CONV_PDF
00018
00019
00020 class TIterator ;
00021 #include "RooAbsPdf.h"
00022 #include "RooRealProxy.h"
00023 #include "RooListProxy.h"
00024 #include "RooDataSet.h"
00025 #include "RooAICRegistry.h"
00026 #include "RooObjCacheManager.h"
00027 #include "RooAbsCacheElement.h"
00028
00029 class RooResolutionModel ;
00030 class RooRealVar ;
00031 class RooAbsGenContext ;
00032 class RooConvGenContext ;
00033
00034 class RooAbsAnaConvPdf : public RooAbsPdf {
00035 public:
00036
00037
00038 RooAbsAnaConvPdf() ;
00039 RooAbsAnaConvPdf(const char *name, const char *title,
00040 const RooResolutionModel& model,
00041 RooRealVar& convVar) ;
00042
00043 RooAbsAnaConvPdf(const RooAbsAnaConvPdf& other, const char* name=0);
00044 virtual ~RooAbsAnaConvPdf();
00045
00046 Int_t declareBasis(const char* expression, const RooArgList& params) ;
00047 virtual void printMultiline(ostream& stream, Int_t contents, Bool_t verbose=kFALSE, TString indent= "") const ;
00048
00049
00050 inline Double_t getCoefNorm(Int_t coefIdx, const RooArgSet& nset, const char* rangeName) const {
00051
00052 return getCoefNorm(coefIdx,&nset,rangeName) ;
00053 }
00054 Double_t getCoefNorm(Int_t coefIdx, const RooArgSet* nset=0, const char* rangeName=0) const ;
00055
00056
00057 virtual Int_t getAnalyticalIntegralWN(RooArgSet& allVars, RooArgSet& analVars, const RooArgSet* normSet, const char* rangeName=0) const ;
00058 virtual Double_t analyticalIntegralWN(Int_t code, const RooArgSet* normSet, const char* rangeName=0) const ;
00059
00060
00061 virtual Int_t getCoefAnalyticalIntegral(Int_t coef, RooArgSet& allVars, RooArgSet& analVars, const char* rangeName=0) const ;
00062 virtual Double_t coefAnalyticalIntegral(Int_t coef, Int_t code, const char* rangeName=0) const ;
00063 virtual Bool_t forceAnalyticalInt(const RooAbsArg& dep) const ;
00064
00065 virtual Double_t coefficient(Int_t basisIndex) const = 0 ;
00066 virtual RooArgSet* coefVars(Int_t coefIdx) const ;
00067
00068 virtual Bool_t isDirectGenSafe(const RooAbsArg& arg) const ;
00069
00070 protected:
00071
00072 Bool_t _isCopy ;
00073
00074 virtual Double_t evaluate() const ;
00075
00076 void makeCoefVarList(RooArgList&) const ;
00077
00078 friend class RooConvGenContext ;
00079 Bool_t changeModel(const RooResolutionModel& newModel) ;
00080 virtual RooAbsGenContext* genContext(const RooArgSet &vars, const RooDataSet *prototype=0,
00081 const RooArgSet* auxProto=0, Bool_t verbose= kFALSE) const ;
00082
00083
00084
00085 RooResolutionModel* _model ;
00086 RooRealVar* _convVar ;
00087
00088 RooArgSet* parseIntegrationRequest(const RooArgSet& intSet, Int_t& coefCode, RooArgSet* analVars=0) const ;
00089
00090 const RooRealVar* convVar() const ;
00091
00092 RooListProxy _convSet ;
00093 RooArgList _basisList ;
00094 mutable RooArgSet* _convNormSet ;
00095 mutable TIterator* _convSetIter ;
00096
00097
00098 class CacheElem : public RooAbsCacheElement {
00099 public:
00100 virtual ~CacheElem() {} ;
00101
00102 RooArgList containedArgs(Action) {
00103 RooArgList l(_coefVarList) ;
00104 l.add(_normList) ;
00105 return l ;
00106 }
00107
00108 RooArgList _coefVarList ;
00109 RooArgList _normList ;
00110 } ;
00111 mutable RooObjCacheManager _coefNormMgr ;
00112
00113 mutable RooAICRegistry _codeReg ;
00114
00115 ClassDef(RooAbsAnaConvPdf,1)
00116 };
00117
00118 #endif