PlotSelectionPlots.C
Go to the documentation of this file.
1 #include "FOMUtilities.h"
2 
3 // plots output of DrawPreSelectionPlots.C
4 
5 // defines whether the cut removes low values of the variable
6 // or high values of the variable
7 enum CutSide {
8  kLow,
12 };
13 
14 enum FomType {
15  kSOverSB, // signal over sqrt background
16  kSOverSSB, // signal over sqrt (signal plus background)
17  kEfficiency, // efficiency (total true selected / total true)
18  // -- n.b. "total true" is after the Concat cuts, so not quite a true purity
19  kPurity, // purity (total true selected / total selected)
20  kEffTimesPurity // efficiency times purity
21 };
22 
23 // main function
25 
26  TFile* covmxFile = new TFile("/pnfs/nova/persistent/analysis/nux/nus20/cmf_covmx/2020-02-14/covariance_matrix_hist_all.root",
27  "read");
28 
29  TH2D* covmx = (TH2D*)covmxFile->Get("covar/covarianceMatrix");
30  std::vector<float> fracUncertainty;
31 
32  for (int i = 93; i < 93+38; ++i){
33  double mod = 1;
34  if (i > 93+0 && i < 93+20)
35  mod = 1;
36  fracUncertainty.push_back(std::sqrt(covmx->GetBinContent(i,i))*mod);
37  }
38 
39  std::vector< std::string > cutLevels = {
40  "NoCut" ,
41  "Quality",
42  "QualityVtx",
43  "QualityVtxFiducial",
44  "FullSelection"
45  };
46 
47  // first up define some vectors for stuff we're going to loop over
48  std::vector< std::string > histNames1D = {
49  "kHitsPerPlane",
50  "kNSliceHits",
51  "kPartPtp",
52  "kIsElastic",
53  "kNFuzzyProng",
54  "kNContPlanes",
55  "kVtxX",
56  "kVtxY",
57  "kVtxZ",
58  "kDistAllTop",
59  "kDistAllBottom",
60  "kDistAllEast",
61  "kDistAllWest",
62  "kDistAllFront",
63  "kDistAllBack",
64  "kCVNnc",
65  "kCVNnc_looseptp",
66  "kCVNnc_oldpresel",
67  "kCaloE"
68  };
69 
70  std::vector< std::string > histTitles1D = {
71  ";Hits Per Plane;Events;",
72  ";Number Hits in Slice;Events",
73  ";Beam-Transverse Momentum Fraction; Events",
74  ";Number of Elastic Vertices;Events",
75  ";Number of Fuzzy Prongs;Events",
76  ";Number of Continuous Planes;Events",
77  ";Vertex x (cm);Events",
78  ";Vertex y (cm);Events",
79  ";Vertex z (cm);Events",
80  ";Minimum Distance To Top;Events",
81  ";Minimum Distance To Bottom;Events",
82  ";Minimum Distance To East;Events",
83  ";Minimum Distance To West;Events",
84  ";Minimum Distance To Front;Events",
85  ";Minimum Distance To Back;Events",
86  ";CVNnc Score;Events",
87  ";CVNnc Score (looseptp);Events",
88  ";CVNnc Score (oldpresel);Events",
89  ";Calorimetric Energy (GeV);Events"
90  };
91 
92  std::vector< CutSide > histCutSide = {
93  kHigh , // kHitsPerPlane
94  kLow , // kNSliceHits
95  kHigh , // kPartPtp
96  kLow , // kIsElastic
97  kLow , // kNFuzzyProng
98  kLow , // kNContPlanes
99  kBoth , // kVtxX
100  kBoth , // kVtxY
101  kBoth , // kVtxZ
102  kLow , // kDistAllTopHist
103  kLow , // kDistAllBottomHist
104  kLow , // kDistAllEastHist
105  kLow , // kDistAllWestHist
106  kLow , // kDistAllFrontHist
107  kLow , // kDistAllBackHist
108  kLow , // kCVNnc
109  kLow , // kCVNnc_looseptpHist
110  kLow , // kCVNnc_oldpreselHist
111  kNoCut // kCaloE
112  };
113 
114  std::vector< bool > plotFOM = {
115  true,
116  true,
117  true,
118  false,
119  false,
120  false,
121  false,
122  false,
123  false,
124  false,
125  false,
126  false,
127  false,
128  false,
129  false,
130  true,
131  true,
132  true,
133  false
134  };
135 
136  std::vector< std::vector< double > > currentCuts = {
137  {0.0} , // kHitsPerPlane
138  {0.0} , // kNSliceHits
139  {1.0} , // kPartPtp
140  {1} , // kIsElastic
141  {1} , // kNFuzzyProng
142  {2} , // kNContPlanes
143  {-100, 100} , // kVtxX
144  {-100, 100} , // kVtxY
145  {150 , 1000}, // kVtxZ
146  {20} , // kDistAllTopHist
147  {20} , // kDistAllBottomHist
148  {20} , // kDistAllEastHist
149  {20} , // kDistAllWestHist
150  {150} , // kDistAllFrontHist
151  {50} , // kDistAllBackHist
152  {0} , // kCVNnc
153  {0.42} , // kCVNnc_looseptpHist
154  {0} , // kCVNnc_oldpreselHist
155  {0,0} // kCaloE
156  };
157 
158  std::vector< std::string > histNames2D = {
159  "kHitsPerPlaneNSliceHitsHist",
160  "kHitsPerPlanePartPtpHist",
161  "kNSliceHitsPartPtpHist"
162  };
163 
164  std::vector< std::string > histTitles2D = {
165  ";Hits Per Plane; Number of Hits in Slice",
166  ";Hits Per Plane; kPartPtp",
167  ";Number of Hits in Slice; kPartPtp"
168  };
169 
170  double maxVal = 1.5;
171  int textSize = 28;
172  // fist deal with the 1d histograms
173  for (int iH = 0; iH < histNames1D.size(); iH++){
174 
175  TCanvas* c1Ratio = new TCanvas("c1Ratio", "c1Ratio", 600, 600);
176  TPad *topPad = new TPad("topPad", "", 0.005, 0.3, 0.995, 0.995);
177  TPad *bottomPad = new TPad("bottomPad", "", 0.005, 0.005, 0.995, 0.3);
178  topPad ->SetTopMargin(0.1);
179  topPad ->SetBottomMargin(0.005);
180  bottomPad->SetTopMargin(0.005);
181  bottomPad->SetBottomMargin(0.35);
182  bottomPad->SetGridy();
183  topPad ->Draw();
184  bottomPad->Draw();
185 
186  TCanvas* c1 = new TCanvas("c1", "c1", 600, 500);
187  TPad *thisPad = new TPad("topPad", "", 0.005, 0.005, 0.995, 0.995);
188  thisPad ->SetTopMargin(0.1);
189  thisPad ->SetBottomMargin(0.15);
190  thisPad->Draw();
191  thisPad->cd();
192 
193  for (int icl = 0; icl < cutLevels.size(); ++icl){
194  std::cout << std::string("sim"+histNames1D.at(iH)+"Hist"+cutLevels.at(icl)) << std::endl;
195  TH1D* histSim = (TH1D*)_file0->Get(("sim"+histNames1D.at(iH)+"Hist"+cutLevels.at(icl)).c_str());
196  TH1D* histSimTrueNC = (TH1D*)_file0->Get(("sim"+histNames1D.at(iH)+"Hist"+cutLevels.at(icl)+"TrueNC").c_str());
197  TH1D* histSimTrueNCNoCut = (TH1D*)_file0->Get(("sim"+histNames1D.at(iH)+"Hist"+"NoCutTrueNC").c_str());
198  TH1D* histDatNoCut = (TH1D*)_file0->Get(("dat"+histNames1D.at(iH)+"Hist"+cutLevels.at(icl)).c_str());
199 
200  // get 2D histograms for variables correlated with energy
201  std::string name = histNames1D.at(iH);
202  std::string simEnergyString = "sim"+name+"CaloEHist"+cutLevels.at(icl);
203  TH2D* histSimEnergy = (TH2D*)_file0->Get(simEnergyString.c_str());
204 
205  double scalef = 1;
206  if (histDatNoCut != nullptr)
207  scalef = (double)histDatNoCut->Integral()/histSim->Integral();
208 
209  histSim -> Sumw2();
210  histSim -> Scale(scalef);
211  histSimTrueNC -> Sumw2();
212  histSimTrueNC -> Scale(scalef);
213  histSimTrueNCNoCut -> Sumw2();
214  histSimTrueNCNoCut -> Scale(scalef);
215 
216  histSim ->SetLineColor(kGray+1);
217  histSimTrueNC->SetFillColor(kAzure+1);
218  histSimTrueNC->SetLineColor(kAzure+1);
219  histSimTrueNC->SetMarkerColor(kAzure+1);
220 
221  histSim ->SetLineWidth(2);
222  histSim ->GetYaxis()->SetRangeUser(0.0001, histSim->GetMaximum()*maxVal);
223  histSim ->SetTitle(histTitles1D.at(iH).c_str());
224  histSim ->GetYaxis()->SetTitleOffset(1.25);
225  histSim ->GetYaxis()->SetMaxDigits(3);
226  histSim ->GetYaxis()->SetNdivisions(515);
227  histSim ->GetXaxis()->SetTitleFont(43);
228  histSim ->GetXaxis()->SetTitleSize(textSize);
229  histSim ->GetXaxis()->CenterTitle();
230  histSim ->GetYaxis()->SetTitleFont(43);
231  histSim ->GetYaxis()->SetTitleSize(textSize);
232  histSim ->GetYaxis()->CenterTitle();
233  histSim ->GetYaxis()->SetLabelFont(43);
234  histSim ->GetYaxis()->SetLabelSize(textSize);
235  histSim ->GetXaxis()->SetLabelFont(43);
236  histSim ->GetXaxis()->SetLabelSize(textSize);
237  bool isDrawData = false;
238  if ((histNames1D.at(iH).find("CVN") == std::string::npos &&
239  histNames1D.at(iH).find("CaloE") == std::string::npos) ||
240  (histNames1D.at(iH).find("CVN") != std::string::npos &&
241  cutLevels.at(icl).find("QualityVtxFiducial") != std::string::npos) ||
242  (histNames1D.at(iH).find("CVN") != std::string::npos &&
243  cutLevels.at(icl).find("FullSelection") != std::string::npos) ||
244  (histNames1D.at(iH).find("CaloE") != std::string::npos &&
245  cutLevels.at(icl).find("FullSelection") != std::string::npos))
246  isDrawData = true;
247 
248  if(isDrawData){
249  c1Ratio->cd();
250  topPad->cd();
251  histSim ->GetYaxis() ->SetTitleOffset(1.3);
252  histSim ->GetYaxis()->SetMaxDigits(3);
253  histSim ->GetYaxis()->SetNdivisions(515);
254 
255  }
256 
257  histSim ->Draw("hist");
258  histSimTrueNC ->Draw("same hist");
259  histSim ->Draw("same hist");
260  if (isDrawData){
261  histDatNoCut ->SetMarkerStyle(20);
262  histDatNoCut ->SetMarkerSize(0.6);
263 
264  histDatNoCut ->GetXaxis()->SetTitleFont(43);
265  histDatNoCut ->GetXaxis()->SetTitleSize(textSize);
266  histDatNoCut ->GetXaxis()->CenterTitle();
267  histDatNoCut ->GetYaxis()->SetTitleFont(43);
268  histDatNoCut ->GetYaxis()->SetTitleSize(textSize);
269  histDatNoCut ->GetYaxis()->CenterTitle();
270  histDatNoCut ->GetYaxis()->SetLabelFont(43);
271  histDatNoCut ->GetYaxis()->SetLabelSize(textSize);
272  histDatNoCut ->GetXaxis()->SetLabelFont(43);
273  histDatNoCut ->GetXaxis()->SetLabelSize(textSize);
274  histDatNoCut ->SetTitle(histTitles1D.at(iH).c_str());
275 
276 
277  histDatNoCut ->Draw("same p");
278  bottomPad->cd();
279  TH1D* ratioHist = (TH1D*)histDatNoCut->Clone("ratioHist");
280  ratioHist->Divide(histSim);
281  ratioHist->GetYaxis()->SetRangeUser(0.7, 1.29);
282  ratioHist->GetYaxis()->SetNdivisions(505);
283  ratioHist->GetYaxis()->SetTitle("Data/Sim");
284  ratioHist->GetYaxis()->SetTitleOffset(1.3);
285  ratioHist->GetXaxis()->SetTitleOffset(3.0);
286  ratioHist->Draw("p");
287  topPad->cd();
288  }
289  TH1D* EffTimesPurHist = (TH1D*)getFOMHist("EffTimesPur"+histNames1D.at(iH)+cutLevels.at(icl),
290  histCutSide.at(iH),
292  histSim,
293  histSimTrueNC,
294  histSimTrueNCNoCut);
295 
296  TH1D* SOverSSBHist = (TH1D*)getFOMHist("SOverSSB"+histNames1D.at(iH)+cutLevels.at(icl),
297  histCutSide.at(iH),
299  histSim,
300  histSimTrueNC,
301  histSimTrueNCNoCut,
302  histSimEnergy,
303  fracUncertainty);
304 
305  TH1D* SOverSBHist = (TH1D*)getFOMHist("SOverSB"+histNames1D.at(iH)+cutLevels.at(icl),
306  histCutSide.at(iH),
308  histSim,
309  histSimTrueNC,
310  histSimTrueNCNoCut);
311 
312  // define new axis on the right hand side for the EffTimesPurHist
313  TLegend* legFOM = new TLegend(0.5, 0.70, 0.8, 0.89);
314  if (plotFOM.at(iH) == true){
315 
316  std::cout
317  << "Printing cut values: "
318  << "\n-- Efficiency x Purity: "
319  << std::endl;
320  getMaximumFOM(EffTimesPurHist);
321  std::cout
322  << "\n-- SOverSSB:"
323  << std::endl;
324  getMaximumFOM(SOverSSBHist);
325  std::cout
326  << "\n-- SOverSB:"
327  << std::endl;
328  getMaximumFOM(SOverSBHist);
329 
330  double scaleval;
331  if (isDrawData)
332  scaleval = histDatNoCut->GetMaximum();
333  else
334  scaleval = histSim->GetMaximum()/maxVal;
335 
336  EffTimesPurHist->GetYaxis()->SetRangeUser(0,EffTimesPurHist->GetMaximum()*maxVal);
337  EffTimesPurHist->Scale(scaleval/EffTimesPurHist->GetMaximum());
338  EffTimesPurHist->SetLineColor(kGreen-3);
339  EffTimesPurHist->SetLineWidth(2);
340  EffTimesPurHist->Draw("same hist");
341 
342  SOverSSBHist->Scale(1./SOverSSBHist->GetMaximum() * scaleval);
343  SOverSSBHist->SetLineColor(kViolet+1);
344  SOverSSBHist->SetLineWidth(2);
345  SOverSSBHist->Draw("same hist");
346 
347  SOverSBHist->Scale(0.8/SOverSBHist->GetMaximum() * scaleval);
348  SOverSBHist->SetLineColor(kOrange+1);
349  SOverSBHist->SetLineWidth(2);
350  SOverSBHist->Draw("same hist");
351 
352  legFOM->SetFillStyle(0);
353  legFOM->SetLineWidth(0);
354  legFOM->SetTextFont(43);
355  legFOM->SetTextSize(textSize*0.75);
356  legFOM->AddEntry(EffTimesPurHist, "Eff #times Purity", "l");
357  legFOM->AddEntry(SOverSBHist , "S/#sqrt{B}", "l");
358  legFOM->AddEntry(SOverSSBHist , "S/#sqrt{S+B+#sigma^{2}_{syst}}", "l");
359 
360  gPad->RedrawAxis();
361 
362  //draw an axis on the right side
363  TGaxis *axis = new TGaxis(EffTimesPurHist->GetBinLowEdge(EffTimesPurHist->GetNbinsX()+1), 0.,
364  EffTimesPurHist->GetBinLowEdge(EffTimesPurHist->GetNbinsX()+1), histSim->GetMaximum(),
365  0.0001,maxVal,510,"+L");
366 
367  axis->SetTitleFont(43);
368  axis->SetTitleSize(textSize);
369  axis->SetLabelFont(43);
370  axis->SetLabelSize(textSize);
371  axis->SetTitle("Figure Of Merit");
372  axis->SetTitleOffset(1.4);
373  axis->CenterTitle();
374  axis->Draw();
375  }
376  // draw boxes
377  TBox* box = new TBox();
378  TBox* box2 = new TBox(-5000, -5000, -5000, -5000);
379  box->SetY1(0);
380  box->SetY2(histSim->GetMaximum());
381  if (histCutSide.at(iH) == kLow){
382  box->SetX1(histSim->GetBinLowEdge(1));
383  box->SetX2(currentCuts.at(iH).at(0));
384  }
385  if (histCutSide.at(iH) == kHigh){
386  box->SetX1(currentCuts.at(iH).at(0));
387  box->SetX2(histSim->GetBinLowEdge(histSim->GetNbinsX()+1));
388  }
389  if (histCutSide.at(iH) == kBoth){
390  box->SetX1(histSim->GetBinLowEdge(1));
391  box->SetX2(currentCuts.at(iH).at(0));
392  box2->SetX1(currentCuts.at(iH).at(1));
393  box2->SetX2(histSim->GetBinLowEdge(histSim->GetNbinsX()+1));
394  box2->SetLineWidth(0);
395  box2->SetFillColorAlpha(kGray, 0.4);
396  box2->SetY1(0);
397  box2->SetY2(histSim->GetMaximum());
398  box2->Draw("same");
399  }
400  box->SetLineWidth(0);
401  box->SetFillColorAlpha(kGray, 0.4);
402  if (currentCuts.at(iH).at(0) != 0 || currentCuts.at(iH).size() > 1)
403  box->Draw("same");
404 
405  //gPad->Update();
406  gPad->RedrawAxis();
407  gPad->Modified();
408 
409  if (plotFOM.at(iH) == true)
410  legFOM->Draw("same");
411 
412  TLegend* leg = new TLegend(0.2, 0.70, 0.5, 0.89);
413  leg->AddEntry(histSim , "All Events" , "l" );
414  leg->AddEntry(histSimTrueNC, "True NC Events", "f" );
415  if (currentCuts.at(iH).at(0) != 0 || currentCuts.at(iH).size() > 1)
416  leg->AddEntry(box , "Proposed Cuts" , "lf");
417  if (isDrawData)
418  leg->AddEntry(histDatNoCut, "Data", "p");
419  leg->SetLineWidth(0);
420  leg->SetFillStyle(0);
421  leg->SetTextFont(43);
422  leg->SetTextSize(textSize*0.75);
423  leg->Draw("same");
424 
425  if (!isDrawData){
426  c1->SaveAs((histNames1D.at(iH)+cutLevels.at(icl)+".png").c_str());
427  c1->SaveAs((histNames1D.at(iH)+cutLevels.at(icl)+".pdf").c_str());
428  }
429  else{
430  c1Ratio->SaveAs((histNames1D.at(iH)+cutLevels.at(icl)+".png").c_str());
431  c1Ratio->SaveAs((histNames1D.at(iH)+cutLevels.at(icl)+".pdf").c_str());
432  }
433  thisPad->cd();
434 
435  // get out of detector plots
436  TH1D* histSimTrueVtxOutOfDet = (TH1D*)_file0->Get(("sim"+histNames1D.at(iH)+"Hist"+cutLevels.at(icl)+"TrueVtxOutOfDet" ).c_str());
437  if (histSimTrueVtxOutOfDet == nullptr) continue;
438  histSimTrueVtxOutOfDet -> Sumw2();
439  histSimTrueVtxOutOfDet -> Scale(scalef);
440  histSimTrueVtxOutOfDet -> SetLineColor(kRed+1);
441  histSimTrueVtxOutOfDet -> SetFillColor(kRed+1);
442  histSimTrueVtxOutOfDet -> SetLineWidth(2);
443  histSim -> Draw("hist");
444  histSimTrueVtxOutOfDet -> Draw("same hist");
445  histSim -> Draw("same hist");
446 
447  if (currentCuts.at(iH).at(0) != 0 || currentCuts.at(iH).size() > 1)
448  box->Draw("same");
449  if (histCutSide.at(iH) == kBoth)
450  box2->Draw("same");
451 
452  //gPad->Update();
453  gPad->RedrawAxis();
454  gPad->Modified();
455 
456  TLegend *leg2 = new TLegend(0.2, 0.7, 0.5, 0.89);
457  leg2->AddEntry(histSim, "All Events", "l");
458  leg2->AddEntry(histSimTrueVtxOutOfDet, "Rock Events", "f");
459  leg2->AddEntry(box , "Proposed Cuts" , "lf");
460  leg2->SetLineWidth(0);
461  leg2->SetFillStyle(0);
462  leg2->SetTextFont(43);
463  leg2->SetTextSize(textSize*0.75);
464 
465  leg2->Draw("same");
466 
467  c1->SaveAs((histNames1D.at(iH)+cutLevels.at(icl)+"containment.png").c_str());
468  c1->SaveAs((histNames1D.at(iH)+cutLevels.at(icl)+"containment.pdf").c_str());
469  }
470  }
471 
472  for (int iH = 0; iH < histNames2D.size(); iH++){
473 
474  TCanvas* c1 = new TCanvas("c1", "c1", 600, 400);
475  TPad *thisPad = new TPad("topPad", "", 0.005, 0.005, 0.995, 0.995);
476  thisPad ->SetTopMargin(0.1);
477  thisPad ->SetBottomMargin(0.15);
478  thisPad->Draw();
479 
480 
481  c1->SetRightMargin(0.18);
482  c1->cd();
483  thisPad->cd();
484 
485  for (int icl = 0; icl < cutLevels.size(); ++icl){
486  TH2D* histSim = (TH2D*)_file0->Get(("sim"+histNames2D.at(iH)+cutLevels.at(icl)).c_str());
487  TH2D* histSimTrueNC = (TH2D*)_file0->Get(("sim"+histNames2D.at(iH)+cutLevels.at(icl)+"TrueNC").c_str());
488 
489  histSim -> SetTitle(("Background"+histTitles2D.at(iH)).c_str());
490  histSimTrueNC -> SetTitle(("True NC in Detector"+histTitles2D.at(iH)).c_str());
491 
492  gStyle -> SetTitleFont(43);
493  gStyle -> SetTitleFontSize(0.06);
494 
495  histSim ->GetXaxis()->SetTitleFont(43);
496  histSim ->GetXaxis()->SetTitleSize(textSize);
497  histSim ->GetXaxis()->CenterTitle();
498  histSim ->GetYaxis()->SetTitleFont(43);
499  histSim ->GetYaxis()->SetTitleSize(textSize);
500  histSim ->GetYaxis()->CenterTitle();
501  histSimTrueNC ->GetXaxis()->SetTitleFont(43);
502  histSimTrueNC ->GetXaxis()->SetTitleSize(textSize);
503  histSimTrueNC ->GetXaxis()->CenterTitle();
504  histSimTrueNC ->GetYaxis()->SetTitleFont(43);
505  histSimTrueNC ->GetYaxis()->SetTitleSize(textSize);
506  histSimTrueNC ->GetYaxis()->CenterTitle();
507 
508  gPad->Modified();
509  gPad->Update();
510 
511  histSim->Add(histSimTrueNC, -1);
512  histSim->Draw("colz");
513  c1->SaveAs((histNames2D.at(iH)+cutLevels.at(icl)+".png").c_str());
514  c1->SaveAs((histNames2D.at(iH)+cutLevels.at(icl)+".pdf").c_str());
515 
516  histSimTrueNC->Draw("colz");
517  c1->SaveAs((histNames2D.at(iH)+cutLevels.at(icl)+"TrueNC.png").c_str());
518  c1->SaveAs((histNames2D.at(iH)+cutLevels.at(icl)+"TrueNC.pdf").c_str());
519 
520  histSim->Draw("box");
521  histSimTrueNC->SetLineColor(kAzure+1);
522  histSimTrueNC->Draw("box same");
523 
524  TLegend* leg = new TLegend(0.6, 0.75, 0.75, 0.85);
525  leg->AddEntry(histSim, "All Events");
526  leg->AddEntry(histSimTrueNC, "True NC Events");
527  leg->SetLineWidth(0);
528  leg->SetFillStyle(0);
529  leg->SetTextFont(43);
530  leg->SetTextSize(textSize*0.75);
531  leg->Draw("same");
532 
533  c1->SaveAs((histNames2D.at(iH)+cutLevels.at(icl)+"together.png").c_str());
534  c1->SaveAs((histNames2D.at(iH)+cutLevels.at(icl)+"together.pdf").c_str());
535  }
536  }
537 }
void getMaximumFOM(TH1D *h)
Definition: FOMUtilities.h:39
const XML_Char * name
Definition: expat.h:151
tree Draw("slc.nhit")
enum BeamMode kOrange
bin1_2sigma SetFillColor(3)
enum BeamMode kRed
TH1D * SOverSSBHist
Definition: PlotSpectra.h:65
T sqrt(T number)
Definition: d0nt_math.hpp:156
TPad * topPad
Definition: PlotSpectra.h:74
gargamelle SetTitle("Gargamelle #nu_{e} CC data")
TH1D * getFOMHist(std::string fomName, CutSide thisCutSide, FomType thisFomType, TH1D *all, TH1D *sig, TH1D *trueSig, TH2D *energyCorrTotal=nullptr, TH2D *energyCorrSignal=nullptr, std::vector< float > systUncertainty={})
Definition: FOMUtilities.h:260
TH1D * EffTimesPurHist
total data
Definition: PlotSpectra.h:63
hmean SetLineWidth(2)
hmean SetLineColor(4)
TPad * thisPad
Definition: PlotSpectra.h:78
OStream cout
Definition: OStream.cxx:6
TH1D * SOverSBHist
Definition: PlotSpectra.h:64
enum BeamMode kViolet
c1
Definition: demo5.py:24
FomType
Definition: FOMUtilities.h:9
void PlotSelectionPlots()
enum BeamMode kGreen
simulatedPeak Scale(1/simulationNormalisationFactor)
enum BeamMode string