16 #include "RooRealVar.h" 17 #include "RooArgList.h" 18 #include "RooMinuit.h" 19 #include "RooFitResult.h" 20 #include "RooAbsPdf.h" 21 #include "RooDataSet.h" 33 int main(
int argc,
char *argv[]){
37 ERROR(
"Specify name of file containing workspace with -f.");
39 execute(
"export blah=$(pwd); cd ~/cmssw/CMSSW_7_1_5/src; eval `scramv1 runtime -sh`; cd $blah; combine -M MaxLikelihoodFit --saveWorkspace --saveWithUncertainties --minos=all -w "+
workspace_name+
" "+
file_name);
44 string fit_workspace_file_name(
"higgsCombineTest.MaxLikelihoodFit.mH120.root");
45 TFile fit_workspace_file(fit_workspace_file_name.c_str(),
"read");
46 if(!fit_workspace_file.IsOpen()){
47 ERROR(
"File "+fit_workspace_file_name+
" was not produced.");
49 RooWorkspace *w =
static_cast<RooWorkspace*
>(fit_workspace_file.Get(
workspace_name.c_str()));
54 string fit_file_name(
"mlfit.root");
55 TFile fit_file(fit_file_name.c_str(),
"read");
56 if(!fit_file.IsOpen()){
57 ERROR(
"File "+fit_file_name+
" was not produced.");
61 TFile out_file(out_file_name.c_str(),
"recreate");
62 if(!out_file.IsOpen()){
63 ERROR(
"Could not open output file "+out_file_name);
67 RooFitResult *fit_b =
static_cast<RooFitResult*
>(fit_file.Get(
"fit_b"));
72 RooFitResult *fit_s =
static_cast<RooFitResult*
>(fit_file.Get(
"fit_s"));
80 fit_workspace_file.Close();
84 RooAbsPdf *
model = w.pdf(bkg_only ?
"model_b" :
"model_s");
85 if(model ==
nullptr)
return;
86 RooDataSet *data =
static_cast<RooDataSet*
>(w.data(
"data_obs"));
87 if(data ==
nullptr)
return;
88 RooAbsReal *nll = model->createNLL(*data);
89 if(nll ==
nullptr)
return;
92 TIter iter(w.allVars().createIterator());
93 int size = w.allVars().getSize();
94 RooRealVar *arg =
nullptr;
96 while((arg = static_cast<RooRealVar*>(iter())) && i < size){
98 if(arg ==
nullptr)
continue;
99 if(arg->isConstant())
continue;
100 string name = arg->GetName();
101 double vmin = arg->getMin();
102 double vmax = arg->getMax();
103 double vval = arg->getVal();
104 double vehi = arg->getErrorHi();
105 double velo = arg->getErrorLo();
106 double verr = arg->getError();
107 cout << name <<
": " << vmin <<
" " << (vval+velo) <<
" " << vval <<
" (" << verr <<
") " << (vval+vehi) <<
" " << vmax << endl;
108 double low = max(vmin, vval+5*velo);
109 double high = min(vmax, vval+5*vehi);
110 TH1D h(
"", (
";"+name+
";-2 log(L)").c_str(), 11, low, high);
111 double minval=numeric_limits<double>::max();
112 for(
int bin = 1; bin <= h.GetNbinsX(); ++bin){
113 arg->setVal(h.GetBinCenter(bin));
114 arg->setConstant(
true);
116 RooFitResult *
f = m.save();
117 if(f ==
nullptr)
continue;
118 double val = f->minNll();
119 h.SetBinContent(bin, val);
120 if(val<minval) minval = val;
122 for(
int bin = 1; bin <= h.GetNbinsX(); ++bin){
123 h.SetBinContent(bin, 2.*(h.GetBinContent(bin)-minval));
126 arg->setConstant(
false);
129 c.Print((name+
".pdf").c_str());
135 vector<string> names;
136 TIter iter(w.allVars().createIterator());
137 int size = w.allVars().getSize();
138 TObject *obj =
nullptr;
140 while((obj = iter()) && i < size){
142 if(obj ==
nullptr)
continue;
143 string name = obj->GetName();
147 sort(names.begin(), names.end());
152 const RooFitResult &
f){
154 RooArgList pars = f.floatParsFinal();
155 for(
int ipar = 0; ipar < pars.getSize(); ++ipar){
156 RooRealVar *fit_var =
static_cast<RooRealVar*
>(pars.at(ipar));
157 if(fit_var ==
nullptr)
continue;
158 RooRealVar *w_var = w.var(fit_var->GetName());
159 if(w_var ==
nullptr)
continue;
160 w_var->setMin(fit_var->getMin());
161 w_var->setMax(fit_var->getMax());
162 w_var->setVal(fit_var->getVal());
163 w_var->setError(fit_var->getError());
164 if(fit_var->GetName() == string(
"r")) set_r =
true;
167 RooRealVar *r_var =
static_cast<RooRealVar*
>(w.var(
"r"));
168 if(r_var !=
nullptr){
171 r_var->setConstant(
true);
173 r_var->setConstant(
false);
181 static struct option long_options[] = {
182 {
"file", required_argument, 0,
'f'},
183 {
"workspace", required_argument, 0,
'w'},
189 opt = getopt_long(argc, argv,
"f:w:", long_options, &option_index);
190 if( opt == -1)
break;
201 printf(
"Bad option! getopt_long returned character code 0%o\n", opt);
void Append(T &collection, const typename T::value_type &value)
void GetOptions(int argc, char *argv[])
void PlotVars(RooWorkspace &w, bool bkg_only)
std::string execute(const std::string &cmd)
std::string ChangeExtension(std::string path, const std::string &new_ext)
RooRealVar * SetVariables(RooWorkspace &w, const RooFitResult &f)
def style(h, width, style, color)
vector< string > GetVarNames(const RooWorkspace &w)
int main(int argc, char *argv[])