2 #include "../../BAT/BCMath.h"
3 #include "../../BAT/BCParameter.h"
5 #include <RooGlobalFunc.h>
6 #include <RooMsgService.h>
7 #include <RooProdPdf.h>
8 #include <RooUniform.h>
9 #include <RooWorkspace.h>
13 #include "RooRealVar.h"
14 #include "RooAbsReal.h"
15 #include "RooRandom.h"
22 RooAbsPdf& prior_trans,
23 const RooArgSet* params,
24 const RooArgSet& listPOI )
31 RooAbsPdf* prior_total = &prior_trans;
32 if (prior_total!=0 ) {
36 std::cout <<
"No prior PDF: without taking action the program would crash\n";
37 std::cout <<
"No prior PDF: adding dummy uniform pdf on the interval [0..1]\n";
38 priorhelpvar =
new RooRealVar(
"priorhelpvar",
"",0.0, 1.0 );
40 RooUniform* priorhelpdist =
new RooUniform(
"priorhelpdist",
"", *
priorhelpvar);
44 std::cout <<
"Imported parameters:\n";
45 fParams =
new RooArgList(listPOI);
46 const RooArgSet* paramsTmp = params;
55 RooArgSet* constrainedParams =
fModel->getParameters(*
fData);
56 fNll =
fModel->createNLL(*
fData, RooFit::Constrain(*constrainedParams) );
70 const char* modelName,
71 const char* priorName,
72 const char* priorNuisanceName,
73 const char* paramsName,
74 const char* listPOIName )
90 std::cout <<
"Opening " << rootFile << std::endl;
91 TFile* file = TFile::Open(rootFile);
92 std::cout <<
"content :\n";
95 RooWorkspace* bat_ws = (RooWorkspace*) file->Get(wsName);
98 fData = (RooAbsData*) bat_ws->data(dataName);
99 fModel = (RooAbsPdf*) bat_ws->function(modelName);
102 RooAbsPdf* priorPOI = (RooAbsPdf*) bat_ws->function(priorName);
103 RooAbsPdf* priorNuisance = (RooAbsPdf*) bat_ws->pdf(priorNuisanceName);
104 if (priorNuisance!=0 && priorPOI!=0) {
105 fPrior =
new RooProdPdf(
"fPrior",
"complete prior",*priorPOI,*priorNuisance);
108 if ( priorNuisance!=0 )
110 else if ( priorPOI!=0 )
113 std::cout <<
"No prior PDF: without taking action the program would crash\n";
114 std::cout <<
"No prior PDF: adding dummy uniform pdf on the interval [0..1]\n";
115 priorhelpvar =
new RooRealVar(
"priorhelpvar",
"",0.0, 1.0 );
117 RooUniform* priorhelpdist =
new RooUniform(
"priorhelpdist",
"", *
priorhelpvar);
122 std::cout <<
"Imported parameters:\n";
123 fParams =
new RooArgList(*(bat_ws->set(listPOIName)));
124 RooArgSet* paramsTmp = (RooArgSet*) bat_ws->set(paramsName);
135 RooArgSet* constrainedParams =
fModel->getParameters(*
fData);
136 fNll =
fModel->createNLL(*
fData, RooFit::Constrain(*constrainedParams) );
155 _addeddummyprior(false),
156 _fillChain(fillChain),
157 fFirstComparison(false),
158 _roostatsMarkovChain(NULL)
176 int nParams =
fParams->getSize();
177 for (
int iParam=0; iParam<nParams; iParam++) {
178 RooRealVar* ipar = (RooRealVar*)
fParams->at(iParam);
182 std::cout <<
"added parameter: " << bcpar->
GetName() <<
" defined in range [ " << bcpar->
GetLowerLimit() <<
" - "
186 for(std::list< std::pair<const char*,int> >::iterator listiter =
_nbins_list.begin(); listiter !=
_nbins_list.end(); listiter++) {
188 std::cout <<
"adjusted parameter: " << (*listiter).first <<
" to number of bins: " << (*listiter).second <<
" \n";
197 int nParams =
fParams->getSize();
198 for (
int iParam=0; iParam<nParams; iParam++) {
199 RooRealVar* ipar = (RooRealVar*)
fParams->at(iParam);
200 ipar->setVal(parameters.at(iParam));
204 double logprob = -
fNll->getVal();
212 int nParams =
fParams->getSize();
213 for (
int iParam=0; iParam<nParams; iParam++) {
214 RooRealVar* ipar = (RooRealVar*)
fParams->at(iParam);
215 ipar->setVal(parameters.at(iParam));
218 RooArgSet* tmpArgSet =
new RooArgSet(*
fParams);
219 double prob =
fPrior->getVal(tmpArgSet);
228 for(std::list< std::pair<const char*,int> >::iterator listiter =
_nbins_list.begin(); listiter !=
_nbins_list.end(); listiter++) {
229 if(!strcmp((*listiter).first, parname)) {
230 (*listiter).second = nbins;
234 _nbins_list.push_back( std::make_pair(parname,nbins) );
256 std::cout <<
"size of fParamsPOI: " <<
fParamsPOI->getSize() << std::endl;
264 std::cout <<
"setting up parameters for RooStats markov chain" << std::endl;
269 for(
int countChains = 1; countChains<=nchains ; countChains++ ) {
270 double tempweight = 1.0;
272 std::vector<double> tempvec;
273 TIterator* setiter =
fParamsPOI->createIterator();
275 while(setiter->Next()){
276 tempvec.push_back(tempval);
308 for (
int i = 0; i < nchains; ++i) {
313 TIterator* setiter =
fParams->createIterator();
320 while(setiter->Next()){
327 const char * paramnamepointer = (tempBCparam->
GetName()).c_str();
328 double xij =
fMCMCx.at(i * npar + j);
331 parampointer->setVal(xij);
363 std::vector<double>::iterator itPrevious =
fPreviousStep[chainNum].begin();
372 for (std::vector<double>::iterator itCurrent =
fCurrentStep[chainNum].begin(); itCurrent !=
fCurrentStep[chainNum].end(); ++itCurrent) {
373 if(*itCurrent != *itPrevious) {