ROOT   Reference Guide
PdfProposal.h
Go to the documentation of this file.
1// @(#)root/roostats:$Id$
2// Authors: Kevin Belasco 17/06/2009
3// Authors: Kyle Cranmer 17/06/2009
4/*************************************************************************
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. * 9 * For the list of contributors see$ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12#ifndef ROOSTATS_PdfProposal
13#define ROOSTATS_PdfProposal
14
15#include "Rtypes.h"
16
18
19#include "RooArgSet.h"
20#include "RooMsgService.h"
21#include "RooRealVar.h"
22#include "RooDataSet.h"
23#include "RooAbsPdf.h"
24
25#include <map>
26
27
28namespace RooStats {
29
31
32 public:
35
36 /// Populate xPrime with a new proposed point
37 void Propose(RooArgSet& xPrime, RooArgSet& x) override;
38
39 /// Determine whether or not the proposal density is symmetric for
40 /// points x1 and x2 - that is, whether the probability of reaching x2
41 /// from x1 is equal to the probability of reaching x1 from x2
42 bool IsSymmetric(RooArgSet& x1, RooArgSet& x2) override;
43
44 /// Return the probability of proposing the point x1 given the starting
45 /// point x2
46 double GetProposalDensity(RooArgSet& x1, RooArgSet& x2) override;
47
48 /// Set the PDF to be the proposal density function
49 virtual void SetPdf(RooAbsPdf& pdf) { fPdf = &pdf; }
50
51 /// Get the PDF is the proposal density function
52 virtual const RooAbsPdf* GetPdf() const { return fPdf; }
53
54 /// specify a mapping between a parameter of the proposal function and
55 /// a parameter of interest. this mapping is used to set the value of
56 /// proposalParam equal to the value of update to determine the
57 /// proposal function.
58 /// proposalParam is a parameter of the proposal function that must
59 /// be set to the value of update (from the current point) in order to
60 /// propose a new point.
61 virtual void AddMapping(RooRealVar& proposalParam, RooAbsReal& update);
62
63 virtual void Reset()
64 {
65 delete fCache;
66 fCache = nullptr;
69 }
70
71 virtual void printMappings()
72 {
73 std::map<RooRealVar*, RooAbsReal*>::iterator it;
74 for (it = fMap.begin(); it != fMap.end(); it++)
75 std::cout << it->first->GetName() << " => " << it->second->GetName() << std::endl;
76 }
77
78 /// Set how many points to generate each time we propose from a new point
79 /// Default (and minimum) is 1
80 virtual void SetCacheSize(Int_t size)
81 {
82 if (size > 0)
84 else
85 coutE(Eval) << "Warning: Requested non-positive cache size: " <<
86 size << ". Cache size unchanged." << std::endl;
87 }
88
89 /// set whether we own the PDF that serves as the proposal density function
90 /// By default, when constructed, PdfProposal does NOT own the PDF.
91 virtual void SetOwnsPdf(bool ownsPdf) { fOwnsPdf = ownsPdf; }
92
93 //virtual void SetIsAlwaysSymmetric(bool isAlwaysSymmetric)
94 //{ fIsAlwaysSymmetric = isAlwaysSymmetric; }
95
96 ~PdfProposal() override
97 {
98 delete fCache;
99 if (fOwnsPdf)
100 delete fPdf;
101 }
102
103 protected:
104 RooAbsPdf* fPdf; /// the proposal density function
105 std::map<RooRealVar*, RooAbsReal*> fMap; /// map of values in pdf to update
106 std::map<RooRealVar*, RooAbsReal*>::iterator fIt; /// pdf iterator
107 RooArgSet fLastX; /// the last point we were at
108 Int_t fCacheSize; /// how many points to generate each time
109 Int_t fCachePosition; /// our position in the cached proposal data set
110 RooDataSet* fCache; /// the cached proposal data set
111 RooArgSet fMaster; /// pointers to master variables needed for updates
112 bool fOwnsPdf; /// whether we own the proposal density function
113 //bool fIsAlwaysSymmetric; // does Q(x1 | x2) == Q(x2 | x1) for all x1, x2
114
115 /// determine whether these two RooArgSets represent the same point
116 virtual bool Equals(RooArgSet& x1, RooArgSet& x2);
117
118 /// Interface for tools setting limits (producing confidence intervals)
120 };
121}
122
123#endif
static void update(gsl_integration_workspace *workspace, double a1, double b1, double area1, double error1, double a2, double b2, double area2, double error2)
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
#define coutE(a)
Definition: RooMsgService.h:37
#define ClassDefOverride(name, id)
Definition: Rtypes.h:339
Option_t Option_t TPoint TPoint const char x2
Option_t Option_t TPoint TPoint const char x1
virtual void removeAll()
Remove all arguments from our set, deleting them if we own them.
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
Definition: RooAbsReal.h:62
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Definition: RooArgSet.h:56
RooDataSet is a container class to hold unbinned data.
Definition: RooDataSet.h:55
RooRealVar represents a variable that can be changed from the outside.
Definition: RooRealVar.h:40
PdfProposal is a concrete implementation of the ProposalFunction interface.
Definition: PdfProposal.h:30
std::map< RooRealVar *, RooAbsReal * >::iterator fIt
map of values in pdf to update
Definition: PdfProposal.h:106
RooArgSet fMaster
the cached proposal data set
Definition: PdfProposal.h:111
bool IsSymmetric(RooArgSet &x1, RooArgSet &x2) override
Determine whether or not the proposal density is symmetric for points x1 and x2 - that is,...
virtual void AddMapping(RooRealVar &proposalParam, RooAbsReal &update)
specify a mapping between a parameter of the proposal function and a parameter of interest.
virtual void SetCacheSize(Int_t size)
Set how many points to generate each time we propose from a new point Default (and minimum) is 1.
Definition: PdfProposal.h:80
virtual const RooAbsPdf * GetPdf() const
Get the PDF is the proposal density function.
Definition: PdfProposal.h:52
bool fOwnsPdf
pointers to master variables needed for updates
Definition: PdfProposal.h:112
RooDataSet * fCache
our position in the cached proposal data set
Definition: PdfProposal.h:110
virtual bool Equals(RooArgSet &x1, RooArgSet &x2)
whether we own the proposal density function
Definition: PdfProposal.cxx:99
RooArgSet fLastX
pdf iterator
Definition: PdfProposal.h:107
void Propose(RooArgSet &xPrime, RooArgSet &x) override
Populate xPrime with a new proposed point.
virtual void SetOwnsPdf(bool ownsPdf)
set whether we own the PDF that serves as the proposal density function By default,...
Definition: PdfProposal.h:91
Int_t fCacheSize
the last point we were at
Definition: PdfProposal.h:108
virtual void SetPdf(RooAbsPdf &pdf)
Set the PDF to be the proposal density function.
Definition: PdfProposal.h:49
virtual void Reset()
Definition: PdfProposal.h:63
Int_t fCachePosition
how many points to generate each time
Definition: PdfProposal.h:109
std::map< RooRealVar *, RooAbsReal * > fMap
the proposal density function
Definition: PdfProposal.h:105
virtual void printMappings()
Definition: PdfProposal.h:71
~PdfProposal() override
Definition: PdfProposal.h:96
PdfProposal()
By default, PdfProposal does NOT own the PDF that serves as the proposal density function.
Definition: PdfProposal.cxx:74
double GetProposalDensity(RooArgSet &x1, RooArgSet &x2) override
Return the probability of proposing the point x1 given the starting point x2.
ProposalFunction is an interface for all proposal functions that would be used with a Markov Chain Mo...
Double_t x[n]
Definition: legend1.C:17
Namespace for the RooStats classes.
Definition: Asimov.h:19