Logo ROOT   6.14/05
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 /*************************************************************************
5  * Copyright (C) 1995-2008, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
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 
28 namespace RooStats {
29 
30  class PdfProposal : public ProposalFunction {
31 
32  public:
33  PdfProposal();
34  PdfProposal(RooAbsPdf& pdf);
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;
67  fCachePosition = 0;
68  fLastX.removeAll();
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
ProposalFunction is an interface for all proposal functions that would be used with a Markov Chain Mo...
#define coutE(a)
Definition: RooMsgService.h:34
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
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
virtual void printMappings()
Definition: PdfProposal.h:71
static const double x2[5]
Double_t x[n]
Definition: legend1.C:17
virtual Double_t GetProposalDensity(RooArgSet &x1, RooArgSet &x2)
Return the probability of proposing the point x1 given the starting point x2.
#define ClassDef(name, id)
Definition: Rtypes.h:320
virtual void removeAll()
Remove all arguments from our set, deleting them if we own them.
virtual void Reset()
Definition: PdfProposal.h:63
virtual void SetOwnsPdf(Bool_t ownsPdf)
set whether we own the PDF that serves as the proposal density function By default, when constructed, PdfProposal does NOT own the PDF.
Definition: PdfProposal.h:91
virtual void AddMapping(RooRealVar &proposalParam, RooAbsReal &update)
specify a mapping between a parameter of the proposal function and a parameter of interest...
Int_t fCacheSize
the last point we were at
Definition: PdfProposal.h:108
std::map< RooRealVar *, RooAbsReal * >::iterator fIt
map of values in pdf to update
Definition: PdfProposal.h:106
RooRealVar represents a fundamental (non-derived) real valued object.
Definition: RooRealVar.h:36
RooDataSet * fCache
our position in the cached proposal data set
Definition: PdfProposal.h:110
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
RooArgSet fLastX
pdf iterator
Definition: PdfProposal.h:107
static void update(gsl_integration_workspace *workspace, double a1, double b1, double area1, double error1, double a2, double b2, double area2, double error2)
RooDataSet is a container class to hold unbinned data.
Definition: RooDataSet.h:29
Bool_t fOwnsPdf
pointers to master variables needed for updates
Definition: PdfProposal.h:112
Namespace for the RooStats classes.
Definition: Asimov.h:20
virtual void Propose(RooArgSet &xPrime, RooArgSet &x)
Populate xPrime with a new proposed point.
static const double x1[5]
virtual ~PdfProposal()
Definition: PdfProposal.h:96
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
RooArgSet fMaster
the cached proposal data set
Definition: PdfProposal.h:111
PdfProposal is a concrete implementation of the ProposalFunction interface.
Definition: PdfProposal.h:30
std::map< RooRealVar *, RooAbsReal * > fMap
the proposal density function
Definition: PdfProposal.h:105
virtual void SetPdf(RooAbsPdf &pdf)
Set the PDF to be the proposal density function.
Definition: PdfProposal.h:49
RooAbsPdf is the abstract interface for all probability density functions The class provides hybrid a...
Definition: RooAbsPdf.h:41
PdfProposal()
By default, PdfProposal does NOT own the PDF that serves as the proposal density function.
Definition: PdfProposal.cxx:75
virtual Bool_t IsSymmetric(RooArgSet &x1, RooArgSet &x2)
Determine whether or not the proposal density is symmetric for points x1 and x2 - that is...
Int_t fCachePosition
how many points to generate each time
Definition: PdfProposal.h:109