6 #include <initializer_list> 11 #include "TIterator.h" 22 #include "RooWorkspace.h" 23 #include "RooArgSet.h" 24 #include "RooAbsArg.h" 25 #include "RooRealVar.h" 43 int main(
int argc,
char *argv[]){
47 gStyle->SetPadTickX(1);
48 gStyle->SetPadLeftMargin(0.12);
49 gStyle->SetPadRightMargin(0.12);
51 vector<string>
files, names;
53 files.push_back(
"m1bk_nc_met400_mj400_nj69_sig0_lumi1p264_unblinded.root"); names.push_back(
"T1tttt(1500,100)");
54 files.push_back(
"m1bk_c_met400_mj400_nj69_sig0_lumi1p264_unblinded.root"); names.push_back(
"T1tttt(1200,800)");
56 files.push_back(
"m1bk_nc_met400_mj400_nj69_sig0_lumi1p264.root"); names.push_back(
"All systs");
57 files.push_back(
"m1bk_nodilep_nc_met400_mj400_nj69_sig0_lumi1p264.root"); names.push_back(
"No dilep");
58 files.push_back(
"m1bk_nosys_nc_met400_mj400_nj69_sig0_lumi1p264.root"); names.push_back(
"No systs");
61 vector<vector<double> >
signif(files.size()),
limit(files.size());
65 for(
size_t ifile = 0; ifile < files.size(); ++ifile){
67 if(
lumi <= 0)
continue;
68 if(ifile == 0) lumis.push_back(
lumi);
71 cout << files.at(ifile) <<
", " <<
lumi <<
": " 72 <<
signif.at(ifile).back() <<
", " <<
limit.at(ifile).back() << endl;
73 if(
signif.at(ifile).back() > max_sig){
74 max_sig =
signif.at(ifile).back();
79 for(
size_t ifile = 0; ifile < files.size(); ++ifile){
80 for(
size_t ilumi = 0; ilumi <
signif.at(ifile).size(); ++ilumi){
82 if(
signif.at(ifile).at(ilumi) < 0.)
signif.at(ifile).at(ilumi) = 0.;
88 vector<TGraph> signif_graphs, limit_graphs, dumb_graphs;
89 for(
size_t ifile = 0; ifile < files.size(); ++ifile){
90 signif_graphs.push_back(TGraph(lumis.size(), &lumis.at(0), &
signif.at(ifile).at(0)));
91 limit_graphs.push_back(TGraph(lumis.size(), &lumis.at(0), &
limit.at(ifile).at(0)));
92 dumb_graphs.push_back(TGraph(0));
94 signif_graphs.back().SetLineStyle(ifile+1);
95 signif_graphs.back().SetLineWidth(5);
96 signif_graphs.back().SetLineColor(kRed);
98 limit_graphs.back().SetLineStyle(ifile+1);
99 limit_graphs.back().SetLineWidth(5);
100 limit_graphs.back().SetLineColor(kBlue);
102 dumb_graphs.back().SetLineStyle(ifile+1);
103 dumb_graphs.back().SetLineWidth(5);
104 dumb_graphs.back().SetLineColor(kBlack);
107 TH1D h(
"h",
";Luminosity [fb^{-1}];Expected Limit/X-Section", 1,
min_lumi,
max_lumi);
109 TAxis &yaxis = *h.GetYaxis();
110 yaxis.SetLabelColor(kBlue);
111 yaxis.SetTitleColor(kBlue);
112 yaxis.SetTitleOffset(.8);
115 TGaxis *raxis =
new TGaxis(
max_lumi, 0.,
118 raxis->SetLabelColor(kRed);
119 raxis->SetTitleColor(kRed);
120 raxis->SetTitle(
"Expected Significance");
121 raxis->SetTitleOffset(yaxis.GetTitleOffset());
122 raxis->SetTitleSize(yaxis.GetTitleSize());
124 raxis->SetLabelSize(yaxis.GetLabelSize());
125 raxis->SetLabelFont(yaxis.GetLabelFont());
126 raxis->SetTitleFont(yaxis.GetTitleFont());
129 TLegend l(1.0-gStyle->GetPadRightMargin()-0.4, 1.0-gStyle->GetPadTopMargin()-0.25,
130 1.0-gStyle->GetPadRightMargin(), 1.0-gStyle->GetPadTopMargin());
133 l.SetFillStyle(4000);
134 for(
size_t ifile = files.size() - 1; ifile < files.size(); --ifile){
135 signif_graphs.at(ifile).Draw(
"samel");
136 limit_graphs.at(ifile).Draw(
"samel");
137 dumb_graphs.at(ifile).Draw(
"samel");
138 l.AddEntry(&dumb_graphs.at(ifile), names.at(ifile).c_str(),
"l");
143 string pname(
"sensitivity");
if(
do_sys) pname +=
"_sys";
145 c.Print(pname.c_str());
157 return ExtractNumber(results,
"Median for expected limits: ");
163 RooWorkspace *w =
static_cast<RooWorkspace*
>(file.Get(
"w"));
164 if(w ==
nullptr)
return;
165 const RooArgSet &vars = w->allVars();
166 TIterator *iter_ptr = vars.createIterator();
167 for(; iter_ptr !=
nullptr && *(*iter_ptr) !=
nullptr; iter_ptr->Next()){
168 RooRealVar *var =
static_cast<RooRealVar*
>(*(*iter_ptr));
169 if(var ==
nullptr)
continue;
170 if(lumi < 0.)
continue;
172 string name = var->GetName();
176 var->setVal(ratio*var->getVal());
177 if(var->hasMin() && var->hasMax() && var->getMin()>=0. && var->getMax()>=var->getMax()){
178 var->setMax(ratio*var->getMax());
181 if(ratio>0.) var->setVal(var->getVal()/sqrt(ratio));
188 auto pos = results.find(key);
189 if(pos != string::npos){
191 istringstream iss(results.substr(pos));
202 static struct option long_options[] = {
203 {
"sys", no_argument, 0,
's'},
209 opt = getopt_long(argc, argv,
"s", long_options, &option_index);
210 if( opt == -1)
break;
218 printf(
"Bad option! getopt_long returned character code 0%o\n", opt);
void ModifyLumi(const string &file_name, double lumi)
void GetOptions(int argc, char *argv[])
bool Contains(const std::string &str, const std::string &pat)
double ExtractNumber(const string &results, const string &key)
std::string execute(const std::string &cmd)
def style(h, width, style, color)
int main(int argc, char *argv[])
double GetLimit(const string &file_name, double lumi)
double GetSignificance(const string &file_name, double lumi)