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 ~RooAbsAnaConvPdf() override;
45
46 Int_t declareBasis(const char* expression, const RooArgList& params) ;
47 void printMultiline(std::ostream& stream, Int_t contents, bool verbose=false, TString indent= "") const override ;
48
49 // Coefficient normalization access
50 inline double 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 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 Int_t getAnalyticalIntegralWN(RooArgSet& allVars, RooArgSet& analVars, const RooArgSet* normSet, const char* rangeName=0) const override ;
60 double analyticalIntegralWN(Int_t code, const RooArgSet* normSet, const char* rangeName=0) const override ;
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 coefAnalyticalIntegral(Int_t coef, Int_t code, const char* rangeName=0) const ;
65 bool forceAnalyticalInt(const RooAbsArg& dep) const override ;
66
67 virtual double coefficient(Int_t basisIndex) const = 0 ;
68 virtual RooArgSet* coefVars(Int_t coefIdx) const ;
69
70 bool isDirectGenSafe(const RooAbsArg& arg) const override ;
71
72 void setCacheAndTrackHints(RooArgSet&) override ;
73
74 RooAbsGenContext* genContext(const RooArgSet &vars, const RooDataSet *prototype=0,
75 const RooArgSet* auxProto=0, bool verbose= false) const override ;
76 virtual bool 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 getCoefNorm(Int_t coefIdx, const RooArgSet* nset, const TNamed* rangeName) const ;
87
88 bool _isCopy ;
89
90 double evaluate() const override ;
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 ~CacheElem() override {} ;
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 ClassDefOverride(RooAbsAnaConvPdf,3) // Abstract Composite Convoluted PDF
123};
124
125#endif
#define ClassDefOverride(name, id)
Definition: Rtypes.h:339
static void indent(ostringstream &buf, int indent_level)
char name[80]
Definition: TGX11.cxx:110
RooAICRegistry is a utility class for operator p.d.f classes that keeps track of analytical integrati...
RooArgList containedArgs(Action) override
RooAbsAnaConvPdf is the base class for PDFs that represent a physics model that can be analytically c...
RooArgSet * parseIntegrationRequest(const RooArgSet &intSet, Int_t &coefCode, RooArgSet *analVars=0) const
virtual bool changeModel(const RooResolutionModel &newModel)
Change the current resolution model to newModel.
Int_t getAnalyticalIntegralWN(RooArgSet &allVars, RooArgSet &analVars, const RooArgSet *normSet, const char *rangeName=0) const override
Advertise capability to perform (analytical) integrals internally.
double getCoefNorm(Int_t coefIdx, const RooArgSet &nset, const char *rangeName) const
void setCacheAndTrackHints(RooArgSet &) override
Label OK'ed components with cache-and-track.
virtual Int_t getCoefAnalyticalIntegral(Int_t coef, RooArgSet &allVars, RooArgSet &analVars, const char *rangeName=0) const
Default implementation of function advertising integration capabilities.
RooAbsGenContext * genContext(const RooArgSet &vars, const RooDataSet *prototype=0, const RooArgSet *auxProto=0, bool verbose=false) const override
Create a generator context for this p.d.f.
bool forceAnalyticalInt(const RooAbsArg &dep) const override
This function forces RooRealIntegral to offer all integration dependents to RooAbsAnaConvPdf::getAnal...
virtual double coefficient(Int_t basisIndex) const =0
RooArgList _basisList
! List of created basis functions
double getCoefNorm(Int_t coefIdx, const RooArgSet *nset=0, const char *rangeName=0) const
RooObjCacheManager _coefNormMgr
! Coefficient normalization manager
void makeCoefVarList(RooArgList &) const
Build complete list of coefficient variables.
RooAICRegistry _codeReg
! Registry of analytical integration codes
~RooAbsAnaConvPdf() override
Destructor.
bool isDirectGenSafe(const RooAbsArg &arg) const override
Return true if it is safe to generate the convolution observable from the internal generator (this is...
RooAbsRealLValue * convVar()
Retrieve the convolution variable.
double evaluate() const override
Calculate the current unnormalized value of the PDF.
RooRealProxy _model
Original model.
void printMultiline(std::ostream &stream, Int_t contents, bool verbose=false, TString indent="") const override
Print info about this object to the specified stream.
virtual RooArgSet * coefVars(Int_t coefIdx) const
Return set of parameters with are used exclusively by the coefficient functions.
RooRealProxy _convVar
Convolution variable.
RooAbsAnaConvPdf()
Default constructor, required for persistence.
Int_t declareBasis(const char *expression, const RooArgList &params)
Declare a basis function for use in this physics model.
RooListProxy _convSet
Set of (resModel (x) basisFunc) convolution objects.
virtual double coefAnalyticalIntegral(Int_t coef, Int_t code, const char *rangeName=0) const
Default implementation of function implementing advertised integrals.
double analyticalIntegralWN(Int_t code, const RooArgSet *normSet, const char *rangeName=0) const override
Return analytical integral defined by given code, which is returned by getAnalyticalIntegralWN()
const RooAbsRealLValue * convVar() const
Retrieve the convolution variable.
RooAbsArg is the common abstract base class for objects that represent a value and a "shape" in RooFi...
Definition: RooAbsArg.h:72
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:22
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Definition: RooArgSet.h:57
RooConvGenContext is an efficient implementation of the generator context specific for RooAbsAnaConvP...
RooDataSet is a container class to hold unbinned data.
Definition: RooDataSet.h:55
static const TNamed * ptr(const char *stringPtr)
Return a unique TNamed pointer for given C++ string.
Definition: RooNameReg.cxx:81
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:40
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:136
auto * l
Definition: textangle.C:4