ROOT  6.06/09
Reference Guide
RooProjectedPdf.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * Project: RooFit *
3  * *
4  * Copyright (c) 2000-2005, Regents of the University of California *
5  * and Stanford University. All rights reserved. *
6  * *
7  * Redistribution and use in source and binary forms, *
8  * with or without modification, are permitted according to the terms *
9  * listed in LICENSE (http://roofit.sourceforge.net/license.txt) *
10  *****************************************************************************/
11 
12 #ifndef ROOPROJECTEDPDF
13 #define ROOPROJECTEDPDF
14 
15 #include "RooAbsPdf.h"
16 #include "RooRealProxy.h"
17 #include "RooAbsReal.h"
18 #include "RooObjCacheManager.h"
19 #include "RooSetProxy.h"
20 
21 class RooProjectedPdf : public RooAbsPdf {
22 public:
23 
24  RooProjectedPdf() ;
25  RooProjectedPdf(const char *name, const char *title, RooAbsReal& _intpdf, const RooArgSet& intObs);
26  RooProjectedPdf(const RooProjectedPdf& other, const char* name=0) ;
27  virtual TObject* clone(const char* newname) const { return new RooProjectedPdf(*this,newname); }
28  inline virtual ~RooProjectedPdf() { }
29 
30  // Analytical integration support
31  virtual Int_t getAnalyticalIntegralWN(RooArgSet& allVars, RooArgSet& analVars, const RooArgSet* normSet, const char* rangeName=0) const ;
32  virtual Double_t analyticalIntegralWN(Int_t code, const RooArgSet* normSet, const char* rangeName=0) const ;
33  virtual Bool_t forceAnalyticalInt(const RooAbsArg& dep) const ;
34 
35  virtual Double_t getValV(const RooArgSet* set=0) const ;
36 
37  Int_t getGenerator(const RooArgSet& directVars, RooArgSet &generateVars, Bool_t staticInitOK=kTRUE) const;
38  void initGenerator(Int_t /*code*/) {} ; // optional pre-generation initialization
39  void generateEvent(Int_t code);
40 
41  virtual Bool_t selfNormalized() const { return kTRUE ; }
42 
43  // Handle projection of projection explicitly
44  virtual RooAbsPdf* createProjection(const RooArgSet& iset) ;
45 
46  void printMetaArgs(std::ostream& os) const ;
47 
48 
49 protected:
50 
51  RooRealProxy intpdf ; // p.d.f that is integrated
52  RooSetProxy intobs ; // observables that p.d.f is integrated over
53  RooSetProxy deps ; // dependents of this p.d.f
54 
55  class CacheElem : public RooAbsCacheElement {
56  public:
57  virtual ~CacheElem() { delete _projection ; } ;
58  // Payload
60  // Cache management functions
61  virtual RooArgList containedArgs(Action) ;
62  virtual void printCompactTreeHook(std::ostream&, const char *, Int_t, Int_t) ;
63  } ;
64  mutable RooObjCacheManager _cacheMgr ; //! The cache manager
65 
66  Bool_t redirectServersHook(const RooAbsCollection& newServerList, Bool_t /*mustReplaceAll*/, Bool_t /*nameChange*/, Bool_t /*isRecursive*/) ;
67 
68  mutable RooArgSet* _curNormSet ; //!
69 
70  const RooAbsReal* getProjection(const RooArgSet* iset, const RooArgSet* nset, const char* rangeName, int& code) const ;
71  Double_t evaluate() const ;
72 
73 private:
74 
75  ClassDef(RooProjectedPdf,1) // Operator p.d.f calculating projection of another p.d.f
76 };
77 
78 #endif
RooSetProxy deps
virtual RooAbsPdf * createProjection(const RooArgSet &iset)
Special version of RooAbsReal::createProjection that deals with projections of projections.
virtual Bool_t selfNormalized() const
RooRealProxy intpdf
virtual TObject * clone(const char *newname) const
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
Int_t getGenerator(const RooArgSet &directVars, RooArgSet &generateVars, Bool_t staticInitOK=kTRUE) const
No internal generator is implemented.
Bool_t redirectServersHook(const RooAbsCollection &newServerList, Bool_t, Bool_t, Bool_t)
The cache manager.
#define ClassDef(name, id)
Definition: Rtypes.h:254
virtual RooArgList containedArgs(Action)
Return RooAbsArg elements contained in projection cache element.
RooObjCacheManager _cacheMgr
RooSetProxy intobs
Double_t evaluate() const
Evaluate projected p.d.f.
virtual Double_t analyticalIntegralWN(Int_t code, const RooArgSet *normSet, const char *rangeName=0) const
Return analytical integral represent by appropriate element of projection cache.
void initGenerator(Int_t)
Interface for one-time initialization to setup the generator for the specified code.
RooArgSet * _curNormSet
double Double_t
Definition: RtypesCore.h:55
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
Definition: RooAbsReal.h:53
const RooAbsReal * getProjection(const RooArgSet *iset, const RooArgSet *nset, const char *rangeName, int &code) const
Retrieve object representing projection integral of input p.d.f over observables iset, while normalizing over observables nset.
virtual Int_t getAnalyticalIntegralWN(RooArgSet &allVars, RooArgSet &analVars, const RooArgSet *normSet, const char *rangeName=0) const
Mark all requested variables as internally integrated.
virtual ~RooProjectedPdf()
RooProjectedPdf()
Default constructor.
virtual void printCompactTreeHook(std::ostream &, const char *, Int_t, Int_t)
Print contents of cache when printing self as part of object tree.
#define name(a, b)
Definition: linkTestLib0.cpp:5
Mother of all ROOT objects.
Definition: TObject.h:58
void generateEvent(Int_t code)
No internal generator is implemented.
RooAbsPdf is the abstract interface for all probability density functions The class provides hybrid a...
Definition: RooAbsPdf.h:41
virtual Bool_t forceAnalyticalInt(const RooAbsArg &dep) const
Force RooRealIntegral to relegate integration of all observables to internal logic.
void printMetaArgs(std::ostream &os) const
Customized printing of arguments of a RooRealIntegral to more intuitively reflect the contents of the...
RooAbsArg is the common abstract base class for objects that represent a value (of arbitrary type) an...
Definition: RooAbsArg.h:66
const Bool_t kTRUE
Definition: Rtypes.h:91
virtual Double_t getValV(const RooArgSet *set=0) const
Special version of getVal() overrides RooAbsReal::getValF() to save value of current normalization se...