36 class ProposalFunction;
39 ClassImp(RooStats::ProposalHelper);
41 using namespace RooFit;
42 using namespace RooStats;
46 static const Double_t DEFAULT_CLUES_FRAC = 0.20;
48 static const Double_t SIGMA_RANGE_DIVISOR = 5;
54 ProposalHelper::ProposalHelper()
56 fPdfProp =
new PdfProposal();
60 fOwnsCluesPdf = kFALSE;
64 fSigmaRangeDivisor = SIGMA_RANGE_DIVISOR;
77 ProposalFunction* ProposalHelper::GetProposalFunction()
83 RooArgList* components =
new RooArgList();
84 RooArgList* coeffs =
new RooArgList();
85 if (fCluesPdf == NULL)
87 if (fCluesPdf != NULL) {
89 fCluesFrac = DEFAULT_CLUES_FRAC;
90 printf(
"added clues from dataset %s with fraction %g\n",
91 fClues->GetName(), fCluesFrac);
92 components->add(*fCluesPdf);
93 coeffs->add(RooConst(fCluesFrac));
97 components->add(*fUniformPdf);
98 coeffs->add(RooConst(fUniFrac));
100 components->add(*fPdf);
101 RooAddPdf* addPdf =
new RooAddPdf(
"proposalFunction",
"Proposal Density",
102 *components, *coeffs);
103 fPdfProp->SetPdf(*addPdf);
104 fPdfProp->SetOwnsPdf(kTRUE);
106 fPdfProp->SetCacheSize(fCacheSize);
107 fOwnsPdfProp = kFALSE;
113 void ProposalHelper::CreatePdf()
119 coutE(InputArguments) <<
"ProposalHelper::CreatePdf(): " <<
120 "Variables to create proposal function for are not set." << endl;
123 RooArgList* xVec =
new RooArgList();
124 RooArgList* muVec =
new RooArgList();
125 TIterator* it = fVars->createIterator();
128 while ((r = (RooRealVar*)it->Next()) != NULL) {
130 TString cloneName = TString::Format(
"%s%s",
"mu__", r->GetName());
131 clone = (RooRealVar*)r->clone(cloneName.Data());
134 fPdfProp->AddMapping(*clone, *r);
136 if (fCovMatrix == NULL)
137 CreateCovMatrix(*xVec);
138 fPdf =
new RooMultiVarGaussian(
"mvg",
"MVG Proposal", *xVec, *muVec,
147 void ProposalHelper::CreateCovMatrix(RooArgList& xVec)
149 Int_t size = xVec.getSize();
150 fCovMatrix =
new TMatrixDSym(size);
152 for (Int_t i = 0; i < size; i++) {
153 r = (RooRealVar*)xVec.at(i);
154 Double_t range = r->getMax() - r->getMin();
155 (*fCovMatrix)(i,i) = range / fSigmaRangeDivisor;
161 void ProposalHelper::CreateCluesPdf()
163 if (fClues != NULL) {
164 if (fCluesOptions == NULL)
165 fCluesPdf =
new RooNDKeysPdf(
"cluesPdf",
"Clues PDF", *fVars, *fClues);
167 fCluesPdf =
new RooNDKeysPdf(
"cluesPdf",
"Clues PDF", *fVars, *fClues,
174 void ProposalHelper::CreateUniformPdf()
176 fUniformPdf =
new RooUniform(
"uniform",
"Uniform Proposal PDF",