ra4_macros  bede988c286599a3a84b77a4d788ac0a971e89f9
sensitivity.cxx
Go to the documentation of this file.
1 #include "sensitivity.hpp"
2 
3 #include <sstream>
4 #include <vector>
5 
6 #include <unistd.h>
7 #include <getopt.h>
8 
9 #include "TCanvas.h"
10 #include "TPad.h"
11 #include "TH1D.h"
12 #include "TGraph.h"
13 #include "TGaxis.h"
14 #include "TROOT.h"
15 #include "TStyle.h"
16 #include "TLegend.h"
17 
18 #include "styles.hpp"
19 
20 using namespace std;
21 
22 namespace{
23  enum UncertSet{
25  };
27  int method = 1;
28 }
29 
30 int main(int argc, char *argv[]){
31  GetOptions(argc, argv);
32  styles style("LargeLabels");
33  style.setDefaultStyle();
34  gStyle->SetPadTickX(1);
35  gStyle->SetPadLeftMargin(0.12);
36  gStyle->SetPadRightMargin(0.12);
37 
38  vector<double> m1_signif_nc, m1_limit_nc;
39  vector<double> m1_signif_c, m1_limit_c;
40  vector<double> m3_signif_nc, m3_limit_nc;
41  vector<double> m3_signif_c, m3_limit_c;
42  vector<double> x(0), ncy(0), cy(0), ncz(0), cz(0);
43 
44  switch(uncert_set){
45  case kNormal:
46  m1_signif_nc.push_back(0.517548); m1_limit_nc.push_back(1.316410); m1_signif_c.push_back(0.); m1_limit_c.push_back(0.);
47  m1_signif_nc.push_back(0.671903); m1_limit_nc.push_back(0.658203); m1_signif_c.push_back(0.); m1_limit_c.push_back(0.);
48  m1_signif_nc.push_back(0.784878); m1_limit_nc.push_back(0.439453); m1_signif_c.push_back(0.); m1_limit_c.push_back(0.);
49  m1_signif_nc.push_back(0.868115); m1_limit_nc.push_back(0.329102); m1_signif_c.push_back(0.); m1_limit_c.push_back(0.);
50  m1_signif_nc.push_back(0.932990); m1_limit_nc.push_back(0.263672); m1_signif_c.push_back(0.); m1_limit_c.push_back(0.);
51  m1_signif_nc.push_back(0.985406); m1_limit_nc.push_back(0.219727); m1_signif_c.push_back(0.); m1_limit_c.push_back(0.);
52  m3_signif_nc.push_back(0.595437); m3_limit_nc.push_back(1.316410); m3_signif_c.push_back(0.); m3_limit_c.push_back(0.);
53  m3_signif_nc.push_back(0.795439); m3_limit_nc.push_back(0.658203); m3_signif_c.push_back(0.); m3_limit_c.push_back(0.);
54  m3_signif_nc.push_back(0.939719); m3_limit_nc.push_back(0.439453); m3_signif_c.push_back(0.); m3_limit_c.push_back(0.);
55  m3_signif_nc.push_back(1.051140); m3_limit_nc.push_back(0.329102); m3_signif_c.push_back(0.); m3_limit_c.push_back(0.);
56  m3_signif_nc.push_back(1.142400); m3_limit_nc.push_back(0.263672); m3_signif_c.push_back(0.); m3_limit_c.push_back(0.);
57  m3_signif_nc.push_back(1.220060); m3_limit_nc.push_back(0.219727); m3_signif_c.push_back(0.); m3_limit_c.push_back(0.);
58  break;
59  case kNoSyst:
60  m1_signif_nc.push_back(0.563099); m1_limit_nc.push_back(1.316410); m1_signif_c.push_back(0.); m1_limit_c.push_back(0.);
61  m1_signif_nc.push_back(0.767605); m1_limit_nc.push_back(0.658203); m1_signif_c.push_back(0.); m1_limit_c.push_back(0.);
62  m1_signif_nc.push_back(0.940119); m1_limit_nc.push_back(0.439453); m1_signif_c.push_back(0.); m1_limit_c.push_back(0.);
63  m1_signif_nc.push_back(1.085560); m1_limit_nc.push_back(0.329102); m1_signif_c.push_back(0.); m1_limit_c.push_back(0.);
64  m1_signif_nc.push_back(1.213690); m1_limit_nc.push_back(0.263672); m1_signif_c.push_back(0.); m1_limit_c.push_back(0.);
65  m1_signif_nc.push_back(1.329530); m1_limit_nc.push_back(0.219727); m1_signif_c.push_back(0.); m1_limit_c.push_back(0.);
66  m3_signif_nc.push_back(0.660924); m3_limit_nc.push_back(1.316410); m3_signif_c.push_back(0.); m3_limit_c.push_back(0.);
67  m3_signif_nc.push_back(0.934687); m3_limit_nc.push_back(0.658203); m3_signif_c.push_back(0.); m3_limit_c.push_back(0.);
68  m3_signif_nc.push_back(1.144750); m3_limit_nc.push_back(0.439453); m3_signif_c.push_back(0.); m3_limit_c.push_back(0.);
69  m3_signif_nc.push_back(1.321850); m3_limit_nc.push_back(0.329102); m3_signif_c.push_back(0.); m3_limit_c.push_back(0.);
70  m3_signif_nc.push_back(1.477870); m3_limit_nc.push_back(0.263672); m3_signif_c.push_back(0.); m3_limit_c.push_back(0.);
71  m3_signif_nc.push_back(1.618920); m3_limit_nc.push_back(0.219727); m3_signif_c.push_back(0.); m3_limit_c.push_back(0.);
72  break;
73  case kContaminated:
74  m1_signif_nc.push_back(0.651089); m1_limit_nc.push_back(2.835940); m1_signif_c.push_back(0.); m1_limit_c.push_back(0.);
75  m1_signif_nc.push_back(0.884065); m1_limit_nc.push_back(1.417970); m1_signif_c.push_back(0.); m1_limit_c.push_back(0.);
76  m1_signif_nc.push_back(1.033470); m1_limit_nc.push_back(0.949219); m1_signif_c.push_back(0.); m1_limit_c.push_back(0.);
77  m1_signif_nc.push_back(1.143830); m1_limit_nc.push_back(0.708984); m1_signif_c.push_back(0.); m1_limit_c.push_back(0.);
78  m1_signif_nc.push_back(1.230040); m1_limit_nc.push_back(0.568359); m1_signif_c.push_back(0.); m1_limit_c.push_back(0.);
79  m1_signif_nc.push_back(1.299850); m1_limit_nc.push_back(0.474609); m1_signif_c.push_back(0.); m1_limit_c.push_back(0.);
80  m3_signif_nc.push_back(0.660744); m3_limit_nc.push_back(1.835940); m3_signif_c.push_back(0.); m3_limit_c.push_back(0.);
81  m3_signif_nc.push_back(0.885141); m3_limit_nc.push_back(0.917969); m3_signif_c.push_back(0.); m3_limit_c.push_back(0.);
82  m3_signif_nc.push_back(1.048840); m3_limit_nc.push_back(0.611328); m3_signif_c.push_back(0.); m3_limit_c.push_back(0.);
83  m3_signif_nc.push_back(1.176520); m3_limit_nc.push_back(0.458984); m3_signif_c.push_back(0.); m3_limit_c.push_back(0.);
84  m3_signif_nc.push_back(1.282110); m3_limit_nc.push_back(0.367188); m3_signif_c.push_back(0.); m3_limit_c.push_back(0.);
85  m3_signif_nc.push_back(1.372740); m3_limit_nc.push_back(0.305664); m3_signif_c.push_back(0.); m3_limit_c.push_back(0.);
86  break;
87  default: break;
88  }
89 
90  m1_signif_c = m1_signif_nc;
91  m1_limit_c = m1_limit_nc;
92  m3_signif_c = m3_signif_nc;
93  m3_limit_c = m3_limit_nc;
94 
95  switch(method){
96  case 1:
97  ncy = m1_signif_nc;
98  cy = m1_signif_c;
99  ncz = m1_limit_nc;
100  cz = m1_limit_c;
101  break;
102  case 3:
103  ncy = m3_signif_nc;
104  cy = m3_signif_c;
105  ncz = m3_limit_nc;
106  cz = m3_limit_c;
107  break;
108  default:
109  break;
110  }
111 
112  double big_num = 10.;
113  x.clear();
114  for(size_t i = 0; i < ncy.size(); ++i){
115  x.push_back((i+1.)*0.5);
116  if(ncz.at(i)<=0.){
117  ncz.at(i) = big_num;
118  }
119  ncy.at(i) *= 1.;
120  if(cz.at(i) <= 0.){
121  cz.at(i) = big_num;
122  }
123  cy.at(i) *= 1.;
124  }
125 
126  x.insert(x.begin(), 0.);
127  ncy.insert(ncy.begin(), 0.);
128  cy.insert(cy.begin(), 0.);
129  ncz.insert(ncz.begin(), 0.);
130  cz.insert(cz.begin(), 0.);
131 
132  TGraph snc(x.size(), &x.at(0), &ncy.at(0));
133  TGraph sc(x.size(), &x.at(0), &cy.at(0));
134  TGraph lnc(x.size()-1, &x.at(1), &ncz.at(1));
135  TGraph lc(x.size()-1, &x.at(1), &cz.at(1));
136  snc.SetLineStyle(1);
137  snc.SetLineWidth(5);
138  TGraph dnc = snc;
139  snc.SetLineColor(kRed);
140  sc.SetLineStyle(2);
141  sc.SetLineWidth(5);
142  TGraph dc = sc;
143  sc.SetLineColor(kRed);
144  lnc.SetLineColor(kBlue);
145  lnc.SetLineStyle(1);
146  lnc.SetLineWidth(5);
147  lc.SetLineColor(kBlue);
148  lc.SetLineStyle(2);
149  lc.SetLineWidth(5);
150  TH1D h("h", ";Luminosity [fb^{-1}];Expected Limit/X-Section", 1, 0., 3.);
151  h.SetMaximum(2.);
152  TAxis &yaxis = *h.GetYaxis();
153  yaxis.SetLabelColor(kBlue);
154  yaxis.SetTitleColor(kBlue);
155  yaxis.SetTitleOffset(.8);
156  TCanvas c;
157  c.SetTicks(1,0);
158  TGaxis *raxis = new TGaxis(3., 0.,
159  3., 2.,
160  0, 2., 510, "+L");
161  raxis->SetLabelColor(kRed);
162  raxis->SetTitleColor(kRed);
163  raxis->SetTitle("Expected Significance");
164  raxis->SetTitleOffset(yaxis.GetTitleOffset());
165  raxis->SetTitleSize(yaxis.GetTitleSize());
166  //raxis->SetTextSize(yaxis.GetTextSize());
167  raxis->SetLabelSize(yaxis.GetLabelSize());
168  raxis->SetLabelFont(yaxis.GetLabelFont());
169  raxis->SetTitleFont(yaxis.GetTitleFont());
170 
171  h.Draw("hist");
172  snc.Draw("samel");
173  sc.Draw("samel");
174  lnc.Draw("samel");
175  lc.Draw("samel");
176  raxis->Draw("same");
177  TLegend l(1.0-gStyle->GetPadRightMargin()-0.4, 1.0-gStyle->GetPadTopMargin()-0.25,
178  1.0-gStyle->GetPadRightMargin(), 1.0-gStyle->GetPadTopMargin());
179  l.SetBorderSize(0);
180  l.SetFillColor(0);
181  l.SetFillStyle(4000);
182  l.AddEntry(&dnc, "T1tttt(1500,100)", "l");
183  l.AddEntry(&dc, "T1tttt(1200,800)", "l");
184  l.Draw("same");
185 
186  ostringstream oss;
187  oss << "plots/sensitivity";
188  switch(uncert_set){
189  case kNormal: oss << "_normal"; break;
190  case kNoSyst: oss << "_nosyst"; break;
191  case kContaminated: oss << "_contam"; break;
192  default: break;
193  }
194  oss << "_method_" << method << ".pdf" << flush;
195  c.Print(oss.str().c_str());
196 }
197 
198 void GetOptions(int argc, char *argv[]){
199  while(true){
200  static struct option long_options[] = {
201  {"uncerts", required_argument, 0, 'u'},
202  {"method", required_argument, 0, 'm'},
203  {0, 0, 0, 0}
204  };
205 
206  char opt = -1;
207  int option_index;
208  opt = getopt_long(argc, argv, "u:m:", long_options, &option_index);
209  if(opt == -1) break;
210 
211  string optname;
212  switch(opt){
213  case 'u':
214  switch(atoi(optarg)){
215  case 0: uncert_set = kNormal; break;
216  case 1: uncert_set = kNoSyst; break;
217  case 2: uncert_set = kContaminated; break;
218  default: break;
219  }
220  break;
221  case 'm':
222  method = atoi(optarg);
223  break;
224  case 0:
225  optname = long_options[option_index].name;
226  break;
227  default: break;
228  }
229  }
230 }
void setDefaultStyle()
Definition: styles.cpp:36
void GetOptions(int argc, char *argv[])
STL namespace.
int main(int argc, char *argv[])
Definition: sensitivity.cxx:30