ROOT  6.06/09
Reference Guide
ProposalHelper.cxx
Go to the documentation of this file.
1 // @(#)root/roostats:$Id$
2 // Authors: Kevin Belasco 7/22/2009
3 // Authors: Kyle Cranmer 7/22/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 ////////////////////////////////////////////////////////////////////////////////
13 
14 /*
15 BEGIN_HTML
16 END_HTML
17 */
18 //_________________________________________________
19 
20 #ifndef ROOT_Rtypes
21 #include "Rtypes.h"
22 #endif
23 #ifndef RooStats_ProposalHelper
25 #endif
26 #ifndef ROOSTATS_PdfProposal
27 #include "RooStats/PdfProposal.h"
28 #endif
29 #ifndef RooStats_RooStatsUtils
30 #include "RooStats/RooStatsUtils.h"
31 #endif
32 #ifndef ROO_ARG_SET
33 #include "RooArgSet.h"
34 #endif
35 #ifndef ROO_DATA_SET
36 #include "RooDataSet.h"
37 #endif
38 #ifndef ROO_ABS_PDF
39 #include "RooAbsPdf.h"
40 #endif
41 #ifndef ROO_ADD_PDF
42 #include "RooAddPdf.h"
43 #endif
44 #ifndef ROO_KEYS_PDF
45 #include "RooNDKeysPdf.h"
46 #endif
47 #ifndef ROO_UNIFORM
48 #include "RooUniform.h"
49 #endif
50 #ifndef ROO_MSG_SERVICE
51 #include "RooMsgService.h"
52 #endif
53 #ifndef ROO_REAL_VAR
54 #include "RooRealVar.h"
55 #endif
56 #ifndef ROOT_TIterator
57 #include "TIterator.h"
58 #endif
59 #ifndef ROO_MULTI_VAR_GAUSSIAN
60 #include "RooMultiVarGaussian.h"
61 #endif
62 #ifndef ROO_CONST_VAR
63 #include "RooConstVar.h"
64 #endif
65 #ifndef ROOT_TString
66 #include "TString.h"
67 #endif
68 
69 #include <map>
70 
72 
73 using namespace RooFit;
74 using namespace RooStats;
75 using namespace std;
76 
77 //static const Double_t DEFAULT_UNI_FRAC = 0.10;
78 static const Double_t DEFAULT_CLUES_FRAC = 0.20;
79 //static const Double_t SIGMA_RANGE_DIVISOR = 6;
80 static const Double_t SIGMA_RANGE_DIVISOR = 5;
81 //static const Int_t DEFAULT_CACHE_SIZE = 100;
82 //static const Option_t* CLUES_OPTIONS = "a";
83 
84 ProposalHelper::ProposalHelper()
85 {
86  fPdfProp = new PdfProposal();
87  fVars = NULL;
88  fOwnsPdfProp = kTRUE;
89  fOwnsPdf = kFALSE;
90  fOwnsCluesPdf = kFALSE;
91  fOwnsVars = kFALSE;
92  fUseUpdates = kFALSE;
93  fPdf = NULL;
94  fSigmaRangeDivisor = SIGMA_RANGE_DIVISOR;
95  fCluesPdf = NULL;
96  fUniformPdf = NULL;
97  fClues = NULL;
98  fCovMatrix = NULL;
99  fCluesFrac = -1;
100  fUniFrac = -1;
101  fCacheSize = -1;
102  fCluesOptions = NULL;
103 }
104 
105 ProposalFunction* ProposalHelper::GetProposalFunction()
106 {
107  if (fPdf == NULL)
108  CreatePdf();
109  // kbelasco: check here for memory leaks: does RooAddPdf make copies or
110  // take ownership of components, coeffs
111  RooArgList* components = new RooArgList();
112  RooArgList* coeffs = new RooArgList();
113  if (fCluesPdf == NULL)
114  CreateCluesPdf();
115  if (fCluesPdf != NULL) {
116  if (fCluesFrac < 0)
117  fCluesFrac = DEFAULT_CLUES_FRAC;
118  printf("added clues from dataset %s with fraction %g\n",
119  fClues->GetName(), fCluesFrac);
120  components->add(*fCluesPdf);
121  coeffs->add(RooConst(fCluesFrac));
122  }
123  if (fUniFrac > 0.) {
124  CreateUniformPdf();
125  components->add(*fUniformPdf);
126  coeffs->add(RooConst(fUniFrac));
127  }
128  components->add(*fPdf);
129  RooAddPdf* addPdf = new RooAddPdf("proposalFunction", "Proposal Density",
130  *components, *coeffs);
131  fPdfProp->SetPdf(*addPdf);
132  fPdfProp->SetOwnsPdf(kTRUE);
133  if (fCacheSize > 0)
134  fPdfProp->SetCacheSize(fCacheSize);
135  fOwnsPdfProp = kFALSE;
136  return fPdfProp;
137 }
138 
139 void ProposalHelper::CreatePdf()
140 {
141  // kbelasco: check here for memory leaks:
142  // does RooMultiVarGaussian make copies of xVec and muVec?
143  // or should we delete them?
144  if (fVars == NULL) {
145  coutE(InputArguments) << "ProposalHelper::CreatePdf(): " <<
146  "Variables to create proposal function for are not set." << endl;
147  return;
148  }
149  RooArgList* xVec = new RooArgList();
150  RooArgList* muVec = new RooArgList();
151  TIterator* it = fVars->createIterator();
152  RooRealVar* r;
153  RooRealVar* clone;
154  while ((r = (RooRealVar*)it->Next()) != NULL) {
155  xVec->add(*r);
156  TString cloneName = TString::Format("%s%s", "mu__", r->GetName());
157  clone = (RooRealVar*)r->clone(cloneName.Data());
158  muVec->add(*clone);
159  if (fUseUpdates)
160  fPdfProp->AddMapping(*clone, *r);
161  }
162  if (fCovMatrix == NULL)
163  CreateCovMatrix(*xVec);
164  fPdf = new RooMultiVarGaussian("mvg", "MVG Proposal", *xVec, *muVec,
165  *fCovMatrix);
166  delete xVec;
167  delete muVec;
168  delete it;
169 }
170 
171 void ProposalHelper::CreateCovMatrix(RooArgList& xVec)
172 {
173  Int_t size = xVec.getSize();
174  fCovMatrix = new TMatrixDSym(size);
175  RooRealVar* r;
176  for (Int_t i = 0; i < size; i++) {
177  r = (RooRealVar*)xVec.at(i);
178  Double_t range = r->getMax() - r->getMin();
179  (*fCovMatrix)(i,i) = range / fSigmaRangeDivisor;
180  }
181 }
182 
183 void ProposalHelper::CreateCluesPdf()
184 {
185  if (fClues != NULL) {
186  if (fCluesOptions == NULL)
187  fCluesPdf = new RooNDKeysPdf("cluesPdf", "Clues PDF", *fVars, *fClues);
188  else
189  fCluesPdf = new RooNDKeysPdf("cluesPdf", "Clues PDF", *fVars, *fClues,
190  fCluesOptions);
191  }
192 }
193 
194 void ProposalHelper::CreateUniformPdf()
195 {
196  fUniformPdf = new RooUniform("uniform", "Uniform Proposal PDF",
197  RooArgSet(*fVars));
198 }
ProposalFunction is an interface for all proposal functions that would be used with a Markov Chain Mo...
#define coutE(a)
Definition: RooMsgService.h:35
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Add the specified argument to list.
static const Double_t DEFAULT_CLUES_FRAC
Basic string class.
Definition: TString.h:137
virtual Double_t getMin(const char *name=0) const
int Int_t
Definition: RtypesCore.h:41
const Bool_t kFALSE
Definition: Rtypes.h:92
STL namespace.
Iterator abstract base class.
Definition: TIterator.h:32
const char * Data() const
Definition: TString.h:349
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString...
Definition: TString.cxx:2334
ROOT::R::TRInterface & r
Definition: Object.C:4
virtual const char * GetName() const
Returns name of object.
Definition: TNamed.h:51
static const Double_t SIGMA_RANGE_DIVISOR
ClassImp(RooStats::ProposalHelper)
Namespace for the RooStats classes.
Definition: Asimov.h:20
RooAbsArg * at(Int_t idx) const
Definition: RooArgList.h:84
double Double_t
Definition: RtypesCore.h:55
TMatrixTSym< Double_t > TMatrixDSym
ClassImp(TMCParticle) void TMCParticle printf(": p=(%7.3f,%7.3f,%9.3f) ;", fPx, fPy, fPz)
PdfProposal is a concrete implementation of the ProposalFunction interface.
Definition: PdfProposal.h:85
virtual Double_t getMax(const char *name=0) const
virtual TObject * clone(const char *newname) const
Definition: RooRealVar.h:48
RooConstVar & RooConst(Double_t val)
virtual TObject * Next()=0
#define NULL
Definition: Rtypes.h:82
Int_t getSize() const
const Bool_t kTRUE
Definition: Rtypes.h:91