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 virtual void Propose(RooArgSet& xPrime, RooArgSet& x);
38
39 /// Determine whether or not the proposal density is symmetric for
40 /// points x1 and x2 - that is, whether the probabilty of reaching x2
41 /// from x1 is equal to the probability of reaching x1 from x2
43
44 /// Return the probability of proposing the point x1 given the starting
45 /// point x2
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 = NULL;
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)
83 fCacheSize = size;
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_t ownsPdf) { fOwnsPdf = ownsPdf; }
92
93 //virtual void SetIsAlwaysSymmetric(Bool_t isAlwaysSymmetric)
94 //{ fIsAlwaysSymmetric = isAlwaysSymmetric; }
95
96 virtual ~PdfProposal()
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_t fOwnsPdf; /// whether we own the proposal density function
113 //Bool_t 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_t 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)
static const double x2[5]
static const double x1[5]
#define coutE(a)
Definition: RooMsgService.h:33
double Double_t
Definition: RtypesCore.h:57
#define ClassDef(name, id)
Definition: Rtypes.h:322
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:60
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Definition: RooArgSet.h:28
RooDataSet is a container class to hold unbinned data.
Definition: RooDataSet.h:33
RooRealVar represents a variable that can be changed from the outside.
Definition: RooRealVar.h:35
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
virtual Bool_t IsSymmetric(RooArgSet &x1, RooArgSet &x2)
Determine whether or not the proposal density is symmetric for points x1 and x2 - that is,...
RooArgSet fMaster
the cached proposal data set
Definition: PdfProposal.h:111
virtual void AddMapping(RooRealVar &proposalParam, RooAbsReal &update)
specify a mapping between a parameter of the proposal function and a parameter of interest.
virtual Double_t GetProposalDensity(RooArgSet &x1, RooArgSet &x2)
Return the probability of proposing the point x1 given the starting point x2.
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
virtual Bool_t Equals(RooArgSet &x1, RooArgSet &x2)
whether we own the proposal density function
RooDataSet * fCache
our position in the cached proposal data set
Definition: PdfProposal.h:110
RooArgSet fLastX
pdf iterator
Definition: PdfProposal.h:107
Bool_t fOwnsPdf
pointers to master variables needed for updates
Definition: PdfProposal.h:112
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
virtual void SetOwnsPdf(Bool_t ownsPdf)
set whether we own the PDF that serves as the proposal density function By default,...
Definition: PdfProposal.h:91
virtual void Propose(RooArgSet &xPrime, RooArgSet &x)
Populate xPrime with a new proposed point.
PdfProposal()
By default, PdfProposal does NOT own the PDF that serves as the proposal density function.
Definition: PdfProposal.cxx:75
virtual ~PdfProposal()
Definition: PdfProposal.h:96
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