Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
plot_bcal_hadronic_eff.C
Go to the documentation of this file.
2 {
3 // read output of Read_bcal_hadronic_eff2 dat files with efficiency information and plot vs run number.
4 // to obtain the list of run numbers run plot_bcal_hadronic_eff.py to obtain the plot_bcal_hadronic_eff.list file
5 //
6 
7 #include <TRandom.h>
8 
9 gROOT->Reset();
10 //TTree *Bfield = (TTree *) gROOT->FindObject("Bfield");
11 gStyle->SetPalette(1,0);
12 gStyle->SetOptStat(kFALSE);
13 // gStyle->SetOptStat(11111111);
14 gStyle->SetPadRightMargin(0.15);
15 gStyle->SetPadLeftMargin(0.15);
16 gStyle->SetPadBottomMargin(0.15);
17 //
18 
19  char string[256];
20  Int_t const maxruns=100;
21 
22  /*vector <float> eff_up1(maxruns,0.);
23  vector <float> eff_up2(maxruns,0.);
24  vector <float> eff_up3(maxruns,0.);
25  vector <float> eff_up4(maxruns,0.);
26 
27  vector <float> eff_down1(maxruns,0.);
28  vector <float> eff_down2(maxruns,0.);
29  vector <float> eff_down3(maxruns,0.);
30  vector <float> eff_down4(maxruns,0.);*/
31 
32  Float_t eff_up1[maxruns]={0,0,0,0,0,0};
33  Float_t eff_up2[maxruns]={0,0,0,0,0,0};
34  Float_t eff_up3[maxruns]={0,0,0,0,0,0};
35  Float_t eff_up4[maxruns]={0,0,0,0,0,0};
36 
37  Float_t eff_down1[maxruns]={0,0,0,0,0,0};
38  Float_t eff_down2[maxruns]={0,0,0,0,0,0};
39  Float_t eff_down3[maxruns]={0,0,0,0,0,0};
40  Float_t eff_down4[maxruns]={0,0,0,0,0,0};
41 
42  /*Float_t runnum[maxruns]={10492,10498,10590,10598,10659,10778,10873,10907,11082,11128,11157,11264,11300,11405,11436,11529,11659,
43  11366,11384,11407,11432,11436,11450,11473,11483,11510,11520,11553,
44  30734,30801,30890,30830,30833,30834,30835,30836,30838,30900,30902,30903,30926,30927,30928,30930,
45  30274,30280.30300,30350,30405,30450,30497,30592,30610,30650,30961,31000,31029,31056};
46 
47  map<Int_t, TString> runs;
48  runs[0]="010492";
49  runs[1]="010498";
50  runs[2]="010590";
51  runs[3]="010598";
52  runs[4]="010659";
53  runs[5]="010778";
54  runs[6]="010873";
55  runs[7]="010907";
56  runs[8]="011082";
57  runs[9]="011128";
58  runs[10]="011157";
59  runs[11]="011264";
60  runs[12]="011300";
61  runs[13]="011405";
62  runs[14]="011436";
63  runs[15]="011529";
64  runs[16]="011659";
65  runs[17]="011366";
66  runs[18]="011384";
67  runs[19]="011407";
68  runs[20]="011432";
69  runs[21]="011436";
70  runs[22]="011450";
71  runs[23]="011473";
72  runs[24]="011483";
73  runs[25]="011510";
74  runs[26]="011520";
75  runs[27]="011553";
76  runs[28]="030734";
77  runs[29]="030801";
78  runs[30]="030890";
79  runs[31]="030830";
80  runs[32]="030833";
81  runs[33]="030834";
82  runs[34]="030835";
83  runs[35]="030836";
84  runs[36]="030838";
85  runs[37]="030900";
86  runs[38]="030902";
87  runs[39]="030903";
88  runs[40]="030926";
89  runs[41]="030927";
90  runs[42]="030928";
91  runs[43]="030930";
92  runs[44]="030274";
93  runs[45]="030280";
94  runs[46]="030300";
95  runs[47]="030350";
96  runs[48]="030405";
97  runs[49]="030450";
98  runs[50]="030497";
99  runs[51]="030592";
100  runs[52]="030610";
101  runs[53]="030650";
102  runs[54]="030961";
103  runs[55]="031000";
104  runs[56]="031029";
105  runs[57]="031056";*/
106 
107  // Get run numbers and efficiency from file
108 
109  TString runlistfile="plot_bcal_hadronic_eff.list";
110  ifstream runlist;
111  runlist.open (runlistfile.Data()); // open list of run numbers
112  if (!runlist) {
113  cout << "ERROR: Failed to open data file= " << runlistfile.Data() << endl;
114  return;
115  }
116  else {
117  cout << "Open data file= " << runlistfile.Data() << endl;
118  }
119  Float_t runnum[maxruns];
120 
121  map<Int_t, TString> runs;
122 
123  Int_t ndx=0;
124  Int_t nruns;
125  TString line;
126  while (line.ReadLine(runlist)){
127  TObjArray *tokens = line.Tokenize(" ");
128  Int_t ntokens = tokens->GetEntries();
129  cout << " ndx=" << ndx << endl;
130  if (ndx == 0) {
131  nruns = ((TObjString*)tokens->At(0))->GetString().Atof();
132  // cout << " nruns=" << nruns << endl;
133  ndx++;
134  continue;
135  }
136  TString run = ((TObjString*)tokens->At(0))->GetString();
137  runs[ndx-1] = run;
138  // cout << " run=" << run << endl;
139  ndx++;
140  }
141 
142 
143  Int_t layer;
144  Int_t coinc_cut=3; // nominal is 3
145 
146  TString datfile;
147 
148  for (Int_t jrun=0; jrun<nruns; jrun++) {
149 
150 
151  for (layer=1; layer<5; layer++) {
152 
153  datfile = "dat/R0"+runs[jrun]+"_layer"+TString::Itoa(layer,10)+"_cut"+TString::Itoa(coinc_cut,10)+".dat";
154 
155  cout << "Opening file: " << datfile.Data() << endl;
156 
157  ifstream file;
158  file.open (datfile.Data());
159  if (!file) {
160  cout << "ERROR: Failed to open data file= " << datfile.Data() << endl;
161  return;
162  }
163 
164  ndx=0;
165  while (line.ReadLine(file)){
166 
167  cout << "line=" << line << endl;
168 
169  TObjArray *tokens = line.Tokenize(" ");
170  Int_t ntokens = tokens->GetEntries();
171  // Float_t = (((TObjString*)tokens->At(1))->GetString()).Atof();
172  // cout << " token1=" << ((TObjString*)tokens->At(0))->GetString() << " token2=" << ((TObjString*)tokens->At(1))->GetString() << endl;
173  if (ndx == 0) {
174  Float_t run = ((TObjString*)tokens->At(1))->GetString().Atof();
175  Float_t xlayer = ((TObjString*)tokens->At(3))->GetString().Atof();
176  Float_t xcoinc_cut = ((TObjString*)tokens->At(5))->GetString().Atof();
177  cout << " run=" << run << " xlayer=" << xlayer << " xcoinc_cut=" << xcoinc_cut << endl;
178  runnum[jrun] = run;
179  }
180  if (ndx == 1) {
181  Float_t eff_up = ((TObjString*)tokens->At(7))->GetString().Atof();
182  Float_t eff_down = ((TObjString*)tokens->At(9))->GetString().Atof();
183  cout << " eff_up=" << eff_up << " eff_down=" << eff_down << endl;
184 
185  switch (layer) {
186  case 1:
187  eff_up1[jrun] = eff_up;
188  eff_down1[jrun] = eff_down;
189  break;
190  case 2:
191  eff_up2[jrun] = eff_up;
192  eff_down2[jrun] = eff_down;
193  break;
194  case 3:
195  eff_up3[jrun] = eff_up;
196  eff_down3[jrun] = eff_down;
197  break;
198  case 4:
199  eff_up4[jrun] = eff_up;
200  eff_down4[jrun] = eff_down;
201  break;
202  default:
203  cout << "*** Illegal layer=" << layer << endl;
204  return;
205  } // end switch
206  } // end if
207 
208  ndx++;
209 
210  } // end reading over dat file
211 
212  file.close();
213 
214  }
215  }
216 
217  cout << "up1[0]=" << eff_up1[0] << endl;
218  cout << "up1[1]=" << eff_up1[1] << endl;
219  cout << "up1[2]=" << eff_up1[2] << endl;
220  cout << " nruns=" << nruns << endl;
221 
222  for (j=0; j<nruns; j++) {
223  cout << "j=" << j << " runnum=" << runnum[j] << " eff=" << eff_up1[j] << " " << eff_up2[j] << " " << eff_up3[j] << " " << eff_up4[j] << endl;
224  }
225 
226  TGraph *gr_eff_up1 = new TGraph(nruns,runnum,eff_up1);
227  TGraph *gr_eff_up2 = new TGraph(nruns,runnum,eff_up2);
228  TGraph *gr_eff_up3 = new TGraph(nruns,runnum,eff_up3);
229  TGraph *gr_eff_up4 = new TGraph(nruns,runnum,eff_up4);
230 
231  TGraph *gr_eff_down1 = new TGraph(nruns,runnum,eff_down1);
232  TGraph *gr_eff_down2 = new TGraph(nruns,runnum,eff_down2);
233  TGraph *gr_eff_down3 = new TGraph(nruns,runnum,eff_down3);
234  TGraph *gr_eff_down4 = new TGraph(nruns,runnum,eff_down4);
235 
236 
237  TCanvas *c0 = new TCanvas("c0", "c0",200,10,1000,700);
238  gPad->SetGridx();
239  gPad->SetGridy();
240 
241  ymin = 0.4;
242  ymax = 1.0;
243 
244  gr_eff_up1->SetTitle("");
245  // gr_eff_up1->GetXaxis()->SetRangeUser(xmin,xmax);
246  gr_eff_up1->GetYaxis()->SetRangeUser(ymin,ymax);
247  gr_eff_up1->GetXaxis()->SetTitleSize(0.05);
248  gr_eff_up1->GetYaxis()->SetTitleSize(0.05);
249  gr_eff_up1->GetYaxis()->SetTitle("Efficiency");
250  gr_eff_up1->GetXaxis()->SetTitle("Run Number");
251  gr_eff_up1->SetMarkerColor(4);
252  gr_eff_up1->SetMarkerStyle(20);
253  gr_eff_up1->Draw("Ap");
254 
255  gr_eff_up2->SetMarkerColor(2);
256  gr_eff_up2->SetMarkerStyle(20);
257  gr_eff_up2->Draw("psame");
258 
259  gr_eff_up3->SetMarkerColor(1);
260  gr_eff_up3->SetMarkerStyle(20);
261  gr_eff_up3->Draw("psame");
262 
263  gr_eff_up4->SetMarkerColor(3);
264  gr_eff_up4->SetMarkerStyle(20);
265  gr_eff_up4->Draw("psame");
266 
267  TLegend *leg = new TLegend(0.65,0.45,0.8,0.6);
268  leg->AddEntry(gr_eff_up1,"Layer 1","p");
269  leg->AddEntry(gr_eff_up2,"Layer 2","p");
270  leg->AddEntry(gr_eff_up3,"Layer 3","p");
271  leg->AddEntry(gr_eff_up4,"Layer 4","p");
272  leg->Draw();
273 
274 
275  TCanvas *c1 = new TCanvas("c1", "c1",200,10,1000,700);
276 
277  TGraph *gr_eff_up1_copy = (TGraph*)gr_eff_up1->Clone("gr_eff_up1_copy");
278  gPad->SetGridx();
279  gPad->SetGridy();
280 
281  // 2017 ranges
282  // xmin = 10000;
283  // xmax = 12000;
284 
285  // 2018 ranges
286  xmin = 40600;
287  // xmax = 41700;
288  xmax = 42500;
289  ymin = 0.9;
290  ymax = 1.0;
291 
292  gr_eff_up1_copy->GetYaxis()->SetRangeUser(0.9,1.0);
293  gr_eff_up1_copy->GetXaxis()->SetRangeUser(xmin,xmax);
294  // gr_eff_up1_copy->GetXaxis()->SetRangeUser(30200,31050);
295 
296  gr_eff_up1_copy->Draw("Ap");
297  gr_eff_up2->Draw("psame");
298  gr_eff_up3->Draw("psame");
299  gr_eff_up4->Draw("psame");
300 
301  TLegend *leg1 = new TLegend(0.7,0.75,0.85,0.9);
302  leg1->AddEntry(gr_eff_up1,"Layer 1","p");
303  leg1->AddEntry(gr_eff_up2,"Layer 2","p");
304  leg1->AddEntry(gr_eff_up3,"Layer 3","p");
305  leg1->AddEntry(gr_eff_up4,"Layer 4","p");
306  leg1->Draw();
307 
308 
309  TLine *linea = new TLine(41200,ymin,41200,ymax);
310  linea->SetLineWidth(2);
311  linea->Draw();
312 
313  TLatex *t1 = new TLatex(40900,1.001,"ver07"); // t1->SetNDC();
314  t1->SetTextSize(0.03);
315  t1->Draw();
316  t1->DrawLatex(41400,1.001,"ver11");
317  t1->Draw();
318 
319  linea = new TLine(40700,0.95,41700,0.95);
320  // linea->Draw();
321 
322 
323  /* 2016 ranges
324 
325  TCanvas *c2 = new TCanvas("c2", "c2",200,10,1000,700);
326 
327  TGraph *gr_eff_up1_copy2 = (TGraph*)gr_eff_up1->Clone("gr_eff_up1_copy");
328  gr_eff_up1_copy2->GetYaxis()->SetRangeUser(ymin,ymax);
329  gr_eff_up1_copy2->GetXaxis()->SetRangeUser(xmin,xmax);
330 
331  gr_eff_up1_copy2->Draw("Ap");
332  gr_eff_up2->Draw("psame");
333  gr_eff_up3->Draw("psame");
334  gr_eff_up4->Draw("psame");
335  leg->Draw();
336 
337 
338  TLine *line1 = new TLine(11059,ymin,11059,ymax);
339  line1->Draw();
340  TLine *line2 = new TLine(11366,ymin,11366,ymax);
341  line2->Draw();
342  TLine *line3 = new TLine(11555,ymin,11555,ymax);
343  line3->Draw();
344 
345  t1->DrawLatex(11059,1.001,"CDC Hole"); // t1->SetNDC();
346  t1->SetTextSize(0.03);
347  t1->Draw();
348  t1->DrawLatex(11366,1.001,"Golden");
349  t1->DrawLatex(11655,1.001,"low rate");
350  t1->DrawLatex(10495,1.001,"2016");*/
351 
352  c0->SaveAs("plot_bcal_hadronic_eff.pdf(");
353  c1->SaveAs("plot_bcal_hadronic_eff.pdf)");
354  //c2->SaveAs("plot_bcal_hadronic_eff.pdf)");
355 
356 }
357 
Double_t c0[2][NMODULES]
Definition: tw_corr.C:67
Int_t layer
void plot_bcal_hadronic_eff(void)
Double_t c1[2][NMODULES]
Definition: tw_corr.C:68
TLegend * leg
Definition: DIRC_digihit.C:58
TLatex * t1
Int_t coinc_cut
Double_t ymin
Definition: bcal_hist_eff.C:89
Double_t ymax
Definition: bcal_hist_eff.C:91
Int_t ndx