Logo ROOT  
Reference Guide
RooAbsAnaConvPdf.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Project: RooFit *
3 * Package: RooFitCore *
4 * File: $Id: RooAbsAnaConvPdf.h,v 1.8 2007/07/16 21:04:28 wouter Exp $
5 * Authors: *
6 * WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu *
7 * DK, David Kirkby, UC Irvine, dkirkby@uci.edu *
8 * *
9 * Copyright (c) 2000-2005, Regents of the University of California *
10 * and Stanford University. All rights reserved. *
11 * *
12 * Redistribution and use in source and binary forms, *
13 * with or without modification, are permitted according to the terms *
14 * listed in LICENSE (http://roofit.sourceforge.net/license.txt) *
15 *****************************************************************************/
16#ifndef ROO_ABS_ANA_CONV_PDF
17#define ROO_ABS_ANA_CONV_PDF
18
19
20class TIterator ;
21#include "RooAbsPdf.h"
22#include "RooRealProxy.h"
23#include "RooListProxy.h"
24#include "RooDataSet.h"
25#include "RooAICRegistry.h"
26#include "RooObjCacheManager.h"
27#include "RooAbsCacheElement.h"
28
30class RooRealVar ;
31class RooAbsGenContext ;
33
35public:
36
37 // Constructors, assignment etc
39 RooAbsAnaConvPdf(const char *name, const char *title,
40 const RooResolutionModel& model,
42
43 RooAbsAnaConvPdf(const RooAbsAnaConvPdf& other, const char* name=0);
44 virtual ~RooAbsAnaConvPdf();
45
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 ;
48
49 // Coefficient normalization access
50 inline Double_t getCoefNorm(Int_t coefIdx, const RooArgSet& nset, const char* rangeName) const {
51 // Returns normalization integral for coefficient coefIdx for observables nset in range rangeNae
52 return getCoefNorm(coefIdx,&nset,rangeName) ;
53 }
54 Double_t getCoefNorm(Int_t coefIdx, const RooArgSet* nset=0, const char* rangeName=0) const {
55 return getCoefNorm(coefIdx,nset,RooNameReg::ptr(rangeName));
56 }
57
58 // Analytical integration support
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 ;
61
62 // Coefficient Analytical integration support
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 ;
66
67 virtual Double_t coefficient(Int_t basisIndex) const = 0 ;
68 virtual RooArgSet* coefVars(Int_t coefIdx) const ;
69
70 virtual Bool_t isDirectGenSafe(const RooAbsArg& arg) const ;
71
72 virtual void setCacheAndTrackHints(RooArgSet&) ;
73
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) ;
77
78 /// Retrieve the convolution variable.
80 /// Retrieve the convolution variable.
81 const RooAbsRealLValue* convVar() const {
82 return const_cast<RooAbsAnaConvPdf*>(this)->convVar();
83 }
84
85protected:
86 Double_t getCoefNorm(Int_t coefIdx, const RooArgSet* nset, const TNamed* rangeName) const ;
87
89
90 virtual Double_t evaluate() const ;
91
92 void makeCoefVarList(RooArgList&) const ;
93
94 friend class RooConvGenContext ;
95
96 RooRealProxy _model ; // Original model
97 RooRealProxy _convVar ; // Convolution variable
98
99 RooArgSet* parseIntegrationRequest(const RooArgSet& intSet, Int_t& coefCode, RooArgSet* analVars=0) const ;
100
101 RooListProxy _convSet ; // Set of (resModel (x) basisFunc) convolution objects
102 RooArgList _basisList ; //! List of created basis functions
103
104
106 public:
107 virtual ~CacheElem() {} ;
108
111 l.add(_normList) ;
112 return l ;
113 }
114
117 } ;
118 mutable RooObjCacheManager _coefNormMgr ; // Coefficient normalization manager
119
120 mutable RooAICRegistry _codeReg ; //! Registry of analytical integration codes
121
122 ClassDef(RooAbsAnaConvPdf,2) // Abstract Composite Convoluted PDF
123};
124
125#endif
const Bool_t kFALSE
Definition: RtypesCore.h:90
double Double_t
Definition: RtypesCore.h:57
#define ClassDef(name, id)
Definition: Rtypes.h:322
static void indent(ostringstream &buf, int indent_level)
char name[80]
Definition: TGX11.cxx:109
RooAICRegistry is a utility class for operator p.d.f classes that keeps track of analytical integrati...
List of created basis functions.
RooArgList containedArgs(Action)
RooAbsAnaConvPdf is the base class for PDFs that represent a physics model that can be analytically c...
virtual Bool_t forceAnalyticalInt(const RooAbsArg &dep) const
This function forces RooRealIntegral to offer all integration dependents to RooAbsAnaConvPdf::getAnal...
Double_t getCoefNorm(Int_t coefIdx, const RooArgSet &nset, const char *rangeName) const
virtual Bool_t changeModel(const RooResolutionModel &newModel)
Change the current resolution model to newModel.
RooArgSet * parseIntegrationRequest(const RooArgSet &intSet, Int_t &coefCode, RooArgSet *analVars=0) const
virtual Int_t getAnalyticalIntegralWN(RooArgSet &allVars, RooArgSet &analVars, const RooArgSet *normSet, const char *rangeName=0) const
Advertise capability to perform (analytical) integrals internally.
virtual Int_t getCoefAnalyticalIntegral(Int_t coef, RooArgSet &allVars, RooArgSet &analVars, const char *rangeName=0) const
Default implementation of function advertising integration capabilities.
virtual void printMultiline(std::ostream &stream, Int_t contents, Bool_t verbose=kFALSE, TString indent="") const
Print info about this object to the specified stream.
RooObjCacheManager _coefNormMgr
void makeCoefVarList(RooArgList &) const
Build complete list of coefficient variables.
virtual RooAbsGenContext * genContext(const RooArgSet &vars, const RooDataSet *prototype=0, const RooArgSet *auxProto=0, Bool_t verbose=kFALSE) const
Create a generator context for this p.d.f.
RooAICRegistry _codeReg
virtual ~RooAbsAnaConvPdf()
Destructor.
virtual Double_t evaluate() const
Calculate the current unnormalized value of the PDF.
virtual void setCacheAndTrackHints(RooArgSet &)
Label OK'ed components with cache-and-track.
RooAbsRealLValue * convVar()
Retrieve the convolution variable.
virtual Double_t analyticalIntegralWN(Int_t code, const RooArgSet *normSet, const char *rangeName=0) const
Return analytical integral defined by given code, which is returned by getAnalyticalIntegralWN()
virtual Double_t coefAnalyticalIntegral(Int_t coef, Int_t code, const char *rangeName=0) const
Default implementation of function implementing advertised integrals.
RooRealProxy _model
Double_t getCoefNorm(Int_t coefIdx, const RooArgSet *nset=0, const char *rangeName=0) const
virtual RooArgSet * coefVars(Int_t coefIdx) const
Return set of parameters with are used exclusively by the coefficient functions.
RooRealProxy _convVar
RooAbsAnaConvPdf()
Default constructor, required for persistence.
virtual Double_t coefficient(Int_t basisIndex) const =0
Int_t declareBasis(const char *expression, const RooArgList &params)
Declare a basis function for use in this physics model.
RooListProxy _convSet
const RooAbsRealLValue * convVar() const
Retrieve the convolution variable.
virtual Bool_t isDirectGenSafe(const RooAbsArg &arg) const
Return true if it is safe to generate the convolution observable from the internal generator (this is...
RooAbsArg is the common abstract base class for objects that represent a value (of arbitrary type) an...
Definition: RooAbsArg.h:73
RooAbsCacheElement is the abstract base class for objects to be stored in RooAbsCache cache manager o...
RooAbsGenContext is the abstract base class for generator contexts of RooAbsPdf objects.
RooAbsRealLValue is the common abstract base class for objects that represent a real value that may a...
RooArgList is a container object that can hold multiple RooAbsArg objects.
Definition: RooArgList.h:21
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Definition: RooArgSet.h:28
RooConvGenContext is an efficient implementation of the generator context specific for RooAbsAnaConvP...
RooDataSet is a container class to hold unbinned data.
Definition: RooDataSet.h:33
RooListProxy is the concrete proxy for RooArgList objects.
Definition: RooListProxy.h:25
static const TNamed * ptr(const char *stringPtr)
Return a unique TNamed pointer for given C++ string.
Definition: RooNameReg.cxx:93
Class RooObjCacheManager is an implementation of class RooCacheManager<RooAbsCacheElement> and specia...
RooRealVar represents a variable that can be changed from the outside.
Definition: RooRealVar.h:35
RooResolutionModel is the base class for PDFs that represent a resolution model that can be convolute...
Iterator abstract base class.
Definition: TIterator.h:30
The TNamed class is the base class for all named ROOT classes.
Definition: TNamed.h:29
Basic string class.
Definition: TString.h:131
auto * l
Definition: textangle.C:4