11 #include "CAFAna/Cuts/NueCutsSecondAna.h" 35 #include "TGraphAsymmErrors.h" 39 TLatex*
prelim =
new TLatex(.93, .9,
"NOvA Preliminary");
40 prelim->SetTextColor(
kBlue);
42 prelim->SetTextSize(2/30.);
43 prelim->SetTextAngle(270);
44 prelim->SetTextAlign(12);
48 TCanvas *
MakeMePlot(std::vector<TH1*> Histos, std::vector<TString> Names,
bool isFHC,
string yname =
"none"){
50 TCanvas *
c =
new TCanvas(
"c",
"canvas", 800, 700);
51 TPad*
p1 =
new TPad(
"",
"", 0, 0, 1, 1);
52 TPad*
p2 =
new TPad(
"",
"", 0, 0, 1, 1);
53 p1->SetBottomMargin(.3);
57 p->SetLeftMargin(0.1);
63 auto denom = (TH1*)Histos[0]->
Clone();
64 denom->SetMaximum(denom->GetMaximum()*1.4);
66 denom->GetYaxis()->CenterTitle();
67 denom->GetXaxis()->CenterTitle();
68 denom->GetXaxis()->SetLabelOffset(999);
69 if(yname !=
"none") denom->GetYaxis()->SetTitle(yname.c_str());
71 denom->Draw(
"hist E1");
72 for(
int i=1;
i<Histos.size();
i++){
73 Histos[
i]->Draw(
"hist E1 same");
75 denom->Draw(
"hist E1 same");
80 auto *tt =
new TText(gPad->GetUxmax()*0.7, 1.02*gPad->GetUymax(),
"FHC beam");
81 tt->SetTextColor(
kBlue);
82 tt->SetTextSize(0.05);
85 auto *tt =
new TText(gPad->GetUxmax()*0.7, 1.02*gPad->GetUymax(),
"RHC beam");
86 tt->SetTextColor(
kBlue);
87 tt->SetTextSize(0.05);
90 TLegend *
leg =
new TLegend(0.52,0.76,0.78,0.87);
91 leg->SetTextSize(0.025);
92 for(
int i=0;
i<Histos.size();
i++) leg->AddEntry(Histos[
i], Names[i],
"l");
100 for(
int i=2; i<Histos.size(); i++){
105 temp->GetYaxis()->SetRangeUser(0.8, 1.25);
106 temp->GetYaxis()->SetTitle(
"Ratio");
117 std::string file_mc =
"mre_pred_nd_cuts_"+mode_tag+
"_mc.root";
128 const Var kHadCalENo1erProng =
kSlcE - kCalE1erProng;
144 {
"caloE_1pr", {
"Calorimetric energy, 1st prong",
Binning::Simple(120,0,12), kCalE1erProng}, 0, 45, 1},
145 {
"calE_no1pr", {
"Calorimetric energy, not 1st prong",
Binning::Simple(120,0,12), kHadCalENo1erProng}, 0, 45, 1},
154 const Cut kNue2018CVNCutLowBin([kNue2018FHCCVNCutLowBin, kNue2018RHCCVNCutLowBin](
const caf::SRProxy* sr) {
155 if(
kIsRHC(sr))
return kNue2018RHCCVNCutLowBin(sr);
156 else return kNue2018FHCCVNCutLowBin(sr);
159 const Cut kNue2018CVNCutHighBin([kNue2018FHCCVNCutHighBin, kNue2018RHCCVNCutHighBin](
const caf::SRProxy* sr) {
160 if(
kIsRHC(sr))
return kNue2018RHCCVNCutHighBin(sr);
161 else return kNue2018FHCCVNCutHighBin(sr);
196 fname_data =
"defname: prod_mrecaf_R17-11-14-prod4mre.b_nd_numi_fhc_full_v1_goodruns";
197 fname =
"defname: prod_mrecaf_R17-11-14-prod4mre.b_nd_genie_fhc_full_v1 with stride 1";
198 fname_calibxy_pos =
"defname: prod_mrecaf_R17-11-14-prod4mre.b_nd_genie_nonswap_fhc_nova_v08_full_calib-shift-nd-xyview-pos-offset_v1 with stride 1";
199 fname_calibxy_neg =
"defname: prod_mrecaf_R17-11-14-prod4mre.b_nd_genie_nonswap_fhc_nova_v08_full_calib-shift-nd-xyview-neg-offset_v1 with stride 1";
200 fname_calib =
"defname: prod_mrecaf_R17-11-14-prod4mre.b_nd_genie_nonswap_fhc_nova_v08_full_calib-shift-nd-func_v1 with stride 1";
201 fname_light_up =
"defname: prod_mrecaf_R17-11-14-prod4mre.b_nd_genie_nonswap_fhc_nova_v08_full_lightmodel-lightup-calibdown_v1 with stride 1";
202 fname_light_down =
"defname: prod_mrecaf_R17-11-14-prod4mre.b_nd_genie_nonswap_fhc_nova_v08_full_lightmodel-lightdown-calibup_v1 with stride 1";
203 fname_ckv =
"defname: prod_mrecaf_R17-11-14-prod4mre.b_nd_genie_nonswap_fhc_nova_v08_full_ckv-proton-shift-down_v1 with stride 1";
206 fname_data =
"defname: prod_mrecaf_R17-11-14-prod4mre.b_nd_numi_rhc_full_v1_goodruns";
207 fname =
"defname: prod_mrecaf_R17-11-14-prod4mre.b_nd_genie_rhc_full_v1 with stride 1";
208 fname_calibxy_pos =
"defname: prod_mrecaf_R17-11-14-prod4mre.b_nd_genie_nonswap_rhc_nova_v08_full_calib-shift-nd-xyview-pos-offset_v1 with stride 1";
209 fname_calibxy_neg =
"defname: prod_mrecaf_R17-11-14-prod4mre.b_nd_genie_nonswap_rhc_nova_v08_full_calib-shift-nd-xyview-neg-offset_v1 with stride 1";
210 fname_calib =
"defname: prod_mrecaf_R17-11-14-prod4mre.b_nd_genie_nonswap_rhc_nova_v08_full_calib-shift-nd-func_v1 with stride 1";
211 fname_light_up =
"defname: prod_mrecaf_R17-11-14-prod4mre.b_nd_genie_nonswap_rhc_nova_v08_full_lightmodel-lightup-calibdown_v1 with stride 1";
212 fname_light_down =
"defname: prod_mrecaf_R17-11-14-prod4mre.b_nd_genie_nonswap_rhc_nova_v08_full_lightmodel-lightdown-calibup_v1 with stride 1";
213 fname_ckv =
"defname: prod_mrecaf_R17-11-14-prod4mre.b_nd_genie_nonswap_rhc_nova_v08_full_ckv-proton-shift-down_v1 with stride 1";
243 for(
int selIdx = 0; selIdx <
kNumSels; ++selIdx){
244 for (
int varIdx=0; varIdx<
kNumVars;varIdx++){
259 loader_calibxy_pos.
Go();
260 loader_calibxy_neg.
Go();
262 loader_light_up.
Go();
263 loader_light_down.
Go();
266 TFile*
file =
new TFile(file_mc.c_str(),
"recreate");
268 for(
int selIdx = 0; selIdx <
kNumSels; ++selIdx){
269 TDirectory*
d = file->mkdir(selNames[selIdx].c_str());
270 for (
int varIdx=0; varIdx<
kNumVars;varIdx++){
271 const char*
name = defs[varIdx].
name.c_str();
296 for(
int selIdx = 0; selIdx <
kNumSels; ++selIdx){
297 const char* selName = selNames[selIdx].c_str();
298 for(
int varIdx = 0; varIdx <
kNumVars; ++varIdx){
299 const char* varName = defs[varIdx].
name.c_str();
300 data[selIdx][varIdx] = LoadFromFile<Spectrum>(file_mc,
TString::Format(
"%s/data_%s", selName, varName).Data()).
release();
301 mc[selIdx][varIdx] = LoadFromFile<Spectrum>(file_mc,
TString::Format(
"%s/%s", selName, varName).Data()).
release();
302 mc_calibxy_pos[selIdx][varIdx] = LoadFromFile<Spectrum>(file_mc,
TString::Format(
"%s/calibxy_pos_%s", selName, varName).Data()).
release();
303 mc_calibxy_neg[selIdx][varIdx] = LoadFromFile<Spectrum>(file_mc,
TString::Format(
"%s/calibxy_neg_%s", selName, varName).Data()).
release();
304 mc_calib[selIdx][varIdx] = LoadFromFile<Spectrum>(file_mc,
TString::Format(
"%s/calib_%s", selName, varName).Data()).
release();
305 mc_light_up[selIdx][varIdx] = LoadFromFile<Spectrum>(file_mc,
TString::Format(
"%s/light_up_%s", selName, varName).Data()).
release();
306 mc_light_down[selIdx][varIdx] = LoadFromFile<Spectrum>(file_mc,
TString::Format(
"%s/light_down_%s", selName, varName).Data()).
release();
307 mc_ckv[selIdx][varIdx] = LoadFromFile<Spectrum>(file_mc,
TString::Format(
"%s/ckv_%s", selName, varName).Data()).
release();
321 double POTmc = data[0][0]->
POT();
324 for(
int selIdx = 0; selIdx < 2; ++selIdx){
325 const char* selName = selNames[selIdx].c_str();
326 for(
int varIdx = 0; varIdx < 2; ++varIdx){
327 const char* varName = defs[varIdx].
name.c_str();
338 for(
auto &
h:{hData[selIdx][varIdx], hMC[selIdx][varIdx], hMC_calibxy_pos[selIdx][varIdx], hMC_calibxy_neg[selIdx][varIdx], hMC_calib[selIdx][varIdx], hMC_light_up[selIdx][varIdx], hMC_light_down[selIdx][varIdx], hMC_ckv[selIdx][varIdx]}){
339 if(defs[varIdx].rebin>1)
h->Rebin(defs[varIdx].rebin);
340 h->GetXaxis()->SetRange(defs[varIdx].lowedge, defs[varIdx].highedge/defs[varIdx].rebin);
343 double nom_mean = hMC[selIdx][varIdx]->GetMean();
344 double pos_mean = hMC_calibxy_pos[selIdx][varIdx]->GetMean();
345 double neg_mean = hMC_calibxy_neg[selIdx][varIdx]->GetMean();
346 double shape_mean = hMC_calib[selIdx][varIdx]->GetMean();
348 string pos_name =
"Calib XY pos (mean "+
std::to_string(pos_mean)+
")";
349 string neg_name =
"Calib XY neg (mean "+
std::to_string(neg_mean)+
")";
350 string shape_name =
"Calib shape (mean "+
std::to_string(shape_mean)+
")";
352 auto c =
MakeMePlot({hMC[selIdx][varIdx], hMC_calibxy_pos[selIdx][varIdx], hMC_calibxy_neg[selIdx][varIdx], hMC_calib[selIdx][varIdx]}, {nom_name, pos_name, neg_name, shape_name},
isFHC);
356 auto c1 =
MakeMePlot({hMC[selIdx][varIdx], hMC_light_up[selIdx][varIdx], hMC_light_down[selIdx][varIdx], hMC_ckv[selIdx][varIdx]}, {
"Nominal",
"Light up",
"Light down",
"Cherenkov"},
isFHC);
360 if(selIdx>0 && (selIdx%2!=0)){
362 TH1* hEff_mc = (TH1*)hMC[selIdx][varIdx]->
Clone();
364 TH1* hEff_mc_denom = (TH1*)hMC[selIdx-1][varIdx]->
Clone();
365 TH1* hEff_data = (TH1*)hData[selIdx][varIdx]->
Clone();
366 TH1* hEff_data_denom = (TH1*)hData[selIdx-1][varIdx]->
Clone();
367 TH1* hEff_mc_calibxy_pos = (TH1*)hMC_calibxy_pos[selIdx][varIdx]->
Clone();
368 TH1* hEff_mc_calibxy_pos_denom = (TH1*)hMC_calibxy_pos[selIdx-1][varIdx]->
Clone();
369 TH1* hEff_mc_calibxy_neg = (TH1*)hMC_calibxy_neg[selIdx][varIdx]->
Clone();
370 TH1* hEff_mc_calibxy_neg_denom = (TH1*)hMC_calibxy_neg[selIdx-1][varIdx]->
Clone();
371 TH1* hEff_mc_calib = (TH1*)hMC_calib[selIdx][varIdx]->
Clone();
372 TH1* hEff_mc_calib_denom = (TH1*)hMC_calib[selIdx-1][varIdx]->
Clone();
373 TH1* hEff_mc_light_up = (TH1*)hMC_light_up[selIdx][varIdx]->
Clone();
374 TH1* hEff_mc_light_up_denom = (TH1*)hMC_light_up[selIdx-1][varIdx]->
Clone();
375 TH1* hEff_mc_light_down = (TH1*)hMC_light_down[selIdx][varIdx]->
Clone();
376 TH1* hEff_mc_light_down_denom = (TH1*)hMC_light_down[selIdx-1][varIdx]->
Clone();
377 TH1* hEff_mc_ckv = (TH1*)hMC_ckv[selIdx][varIdx]->
Clone();
378 TH1* hEff_mc_ckv_denom = (TH1*)hMC_ckv[selIdx-1][varIdx]->
Clone();
380 hEff_mc->Divide(hEff_mc_denom);
381 hEff_data->Divide(hEff_data_denom);
382 hEff_mc_calibxy_pos->Divide(hEff_mc_calibxy_pos_denom);
383 hEff_mc_calibxy_neg->Divide(hEff_mc_calibxy_neg_denom);
384 hEff_mc_calib->Divide(hEff_mc_calib_denom);
385 hEff_mc_light_up->Divide(hEff_mc_light_up_denom);
386 hEff_mc_light_down->Divide(hEff_mc_light_down_denom);
387 hEff_mc_ckv->Divide(hEff_mc_ckv_denom);
389 auto c2 =
MakeMePlot({hEff_mc, hEff_mc_calibxy_pos, hEff_mc_calibxy_neg, hEff_mc_calib}, {
"Nominal",
"Calib XY pos",
"Calib XY neg",
"Calib shape"},
isFHC,
"Selection efficiency");
393 auto c3 =
MakeMePlot({hEff_mc, hEff_mc_light_up, hEff_mc_light_down, hEff_mc_ckv}, {
"Nominal",
"Light up",
"Light down",
"Cherenkov"},
isFHC,
"Selection efficiency");
397 hEff_mc_light_up->SetLineColor(
kViolet);
398 hEff_mc_light_down->SetLineColor(kPink);
399 hEff_mc_calib->SetLineColor(
kOrange);
400 auto c4 =
MakeMePlot({hEff_mc, hEff_mc_light_up, hEff_mc_light_down, hEff_mc_ckv, hEff_mc_calibxy_pos, hEff_mc_calibxy_neg, hEff_mc_calib}, {
"Nominal",
"Light up",
"Light down",
"Cherenkov",
"Calib XY pos",
"Calib XY neg",
"Calib shape"},
isFHC,
"Selection efficiency");
406 TCanvas *c5 =
new TCanvas(
"c5",
"canvas", 1000, 1000);
407 TPad*
p1 =
new TPad(
"",
"", 0, 0, 1, 1);
408 TPad*
p2 =
new TPad(
"",
"", 0, 0, 1, 1);
409 p1->SetBottomMargin(.3);
410 p2->SetTopMargin(.7);
413 p->SetLeftMargin(0.105);
425 Int_t ci = TColor::GetFreeColorIndex();
426 TColor *
color =
new TColor(ci, 216/255.0, 216/255.0, 216/255.0);
428 Int_t
line = kGray+2;
430 if(drawing_options.Contains(
"red")) {
435 hEff_data->SetLineColor(line_data);
436 hEff_mc->SetLineColor(line);
437 hEff_data->SetLineWidth(2);
438 hEff_mc->SetLineWidth(2);
439 hEff_mc->SetMaximum(1.0);
440 hEff_mc->SetMinimum(0);
441 hEff_mc->GetXaxis()->SetRange(0, 45);
442 hEff_mc->GetYaxis()->CenterTitle();
443 hEff_mc->GetXaxis()->CenterTitle();
444 hEff_mc->GetYaxis()->SetTitle(
"Selection efficiency");
445 hEff_mc->Draw(
"hist E1");
446 std::vector<TH1*> syst = {hEff_mc_light_up, hEff_mc_light_down, hEff_mc_ckv, hEff_mc_calibxy_pos, hEff_mc_calibxy_neg, hEff_mc_calib};
447 TGraphAsymmErrors*
g =
new TGraphAsymmErrors;
448 TH1F* hUp = (TH1F*)hEff_mc->Clone();
449 TH1F* hDown = (TH1F*)hEff_mc->Clone();
450 for(
int binIdx = 0; binIdx < hEff_mc->GetNbinsX()+2; ++binIdx){
451 const double y = hEff_mc->GetBinContent(binIdx);
452 g->SetPoint(binIdx, hEff_mc->GetXaxis()->GetBinCenter(binIdx),
y);
453 const double w = hEff_mc->GetXaxis()->GetBinWidth(binIdx);
456 for(
unsigned int systIdx = 0; systIdx < syst.size(); ++systIdx){
457 double shift = syst[systIdx]->GetBinContent(binIdx)-
y;
458 if(shift < 0) errDn += shift*shift;
459 if(shift >= 0) errUp+= shift*shift;
461 g->SetPointError(binIdx, w/2, w/2,
sqrt(errDn),
sqrt(errUp));
462 hUp->SetBinContent(binIdx, hEff_mc->GetBinContent(binIdx)+
sqrt(errUp));
463 hDown->SetBinContent(binIdx, hEff_mc->GetBinContent(binIdx) -
sqrt(errDn));
467 hEff_mc->SetLineWidth(3);
468 hEff_mc->Draw(
"hist E1 same");
469 hEff_data->SetMarkerStyle(8);
470 hEff_data->SetMarkerSize(2);
471 hEff_data->Draw(
"E1 same");
475 double systname_x = 0.02;
477 double leg_x_max = 0.85;
488 auto *tt =
new TText(gPad->GetUxmax()*0.55, 1.05*gPad->GetUymax(),
"Neutrino beam, MRE");
489 tt->SetTextSize(0.04);
491 tt =
new TText(gPad->GetUxmax()*systname_x, 0.9*gPad->GetUymax(),
"Calibration + lightlevel syst.");
492 tt->SetTextSize(0.03);
495 auto *tt =
new TText(gPad->GetUxmax()*0.5, 1.05*gPad->GetUymax(),
"Antineutrino beam, MRE");
496 tt->SetTextSize(0.04);
498 tt =
new TText(gPad->GetUxmax()*systname_x, 0.9*gPad->GetUymax(),
"Calibration + lightlevel syst.");
499 tt->SetTextSize(0.03);
502 TLegend *
leg =
new TLegend(leg_x,0.73,leg_x_max,0.85);
503 leg->SetTextSize(0.033);
504 leg->AddEntry(hEff_data,
"Data",
"p");
505 leg->AddEntry(hEff_mc,
"Monte Carlo",
"l");
506 leg->AddEntry(g,
"1#sigma syst. error",
"f");
514 auto temp = (TH1*)hEff_mc->Clone();
515 temp->Divide(hEff_data);
517 auto temp_up = (TH1*)hUp->Clone();
518 auto temp_down = (TH1*)hDown->Clone();
519 temp_up->Divide(hEff_data);
520 temp_down->Divide(hEff_data);
522 TGraphAsymmErrors* g_ratio =
new TGraphAsymmErrors;
523 for(
int binIdx = 0; binIdx <
temp->GetNbinsX()+2; ++binIdx){
524 const double w =
temp->GetXaxis()->GetBinWidth(binIdx);
525 g_ratio->SetPoint(binIdx,
temp->GetXaxis()->GetBinCenter(binIdx),
temp->GetBinContent(binIdx));
526 g_ratio->SetPointError(binIdx, w/2, w/2,
temp->GetBinContent(binIdx) - temp_down->GetBinContent(binIdx), temp_up->GetBinContent(binIdx) -
temp->GetBinContent(binIdx));
529 g_ratio->SetFillColor(ci);
530 g_ratio->Draw(
"e2 same");
532 TLine *
l =
new TLine(-0.1,1,4.5,1);
533 l->SetLineColor(kBlack);
535 temp->GetYaxis()->SetRangeUser(0.5, 1.5);
536 temp->GetYaxis()->SetTitle(
"MC / Data");
539 c5->SaveAs((
"blpl/"+mode_tag+
"_plot-efficiency-error-band-"+selName+
"-"+varName+
"_"+drawing_options+
".pdf"));
545 cout<<
"Data "<<hData[0][0]->Integral()<<
" "<<hData[1][0]->Integral()<<
" "<<hData[1][0]->Integral()/hData[0][0]->Integral()<<
endl;
546 cout<<
"Data "<<hMC[0][0]->Integral()<<
" "<<hMC[1][0]->Integral()<<
" "<<hMC[1][0]->Integral()/hMC[0][0]->Integral()<<
endl;
547 cout<<
"difference "<<(hMC[1][0]->Integral()/hMC[0][0]->Integral() - hData[1][0]->Integral()/hData[0][0]->Integral())/(hMC[1][0]->
Integral()/hMC[0][0]->Integral())<<endl;
551 for(
int varIdx = 0; varIdx < 2; ++varIdx){
552 const char* varName = defs[varIdx].
name.c_str();
553 TCanvas *c6 =
new TCanvas(
"c6",
"canvas", 1000, 800);
554 c6->SetLeftMargin(0.105);
556 Int_t ci = TColor::GetFreeColorIndex();
557 TColor *
color =
new TColor(ci, 216/255.0, 216/255.0, 216/255.0);
559 Int_t
line = kGray+2;
561 if(drawing_options.Contains(
"red")) {
567 auto hMC_presel = hMC[0][varIdx];
568 auto hMC_full = hMC[1][varIdx];
569 auto hData_presel = hData[0][varIdx];
570 auto hData_full = hData[1][varIdx];
572 hMC_presel->SetLineStyle(7);
573 hData_presel->SetLineStyle(7);
574 hData_presel->SetLineColor(line);
575 hData_full->SetLineColor(line_data);
576 hMC_presel->SetLineColor(line);
577 hMC_full->SetLineColor(line_data);
578 for (
auto &
h:{hMC_presel, hMC_full, hData_presel, hData_full}){
582 hData_presel->SetMarkerStyle(8);
583 hData_presel->SetMarkerColor(line);
584 hData_presel->SetMarkerSize(2);
585 hData_full->SetMarkerStyle(8);
586 hData_full->SetMarkerSize(2);
587 hData_presel->SetMaximum(hData_presel->GetMaximum()*1.2);
588 hData_presel->SetMinimum(0);
589 hData_presel->GetXaxis()->SetRange(0, 45);
590 hData_presel->GetYaxis()->CenterTitle();
591 hData_presel->GetXaxis()->CenterTitle();
592 hData_presel->GetYaxis()->SetTitle(
TString::Format(
"10^{4} events / %1.2g #times 10^{20} POT", POTmc/1E20).Data());
593 hData_presel->Draw(
"E1");
594 hMC_presel->Draw(
"hist E1 same");
595 hData_full->Draw(
"E1 same");
596 hMC_full->Draw(
"hist E1 same");
601 auto *tt =
new TText(gPad->GetUxmax()*0.6, 1.05*gPad->GetUymax(),
"Neutrino beam, MRE");
602 tt->SetTextSize(0.04);
606 auto *tt =
new TText(gPad->GetUxmax()*0.55, 1.05*gPad->GetUymax(),
"Antineutrino beam, MRE");
607 tt->SetTextSize(0.04);
611 TLegend *
leg =
new TLegend(0.5, 0.65, 0.8, 0.85);
612 leg->SetTextSize(0.033);
613 leg->AddEntry(hData_presel,
"Data, preselected",
"p");
614 leg->AddEntry(hMC_presel,
"Monte Carlo, preselected",
"l");
615 leg->AddEntry(hData_full,
"Data, fully selected",
"p");
616 leg->AddEntry(hMC_full,
"Monte Carlo, fully selected",
"l");
623 c6->SaveAs((
"blpl/"+mode_tag+
"_plot-data-mc-presel-and-fullsel-"+varName+
"_"+drawing_options+
".pdf"));
caf::Proxy< size_t > npng
const Cut kNue2017MRParentSliceCut([](const caf::SRProxy *sr){const caf::SRMRCCParentProxy &parent=sr->parent.mrccpar;if(parent.eff< 0.9||parent.pur< 0.9) return false;if(parent.remid< 0.75) return false;if(parent.numuE< 0|| parent.nhit< 20|| parent.contplanes< 5) return false;if(parent.firstplane< 2 || parent.lastplane > 211|| parent.muonstop.Z() > 1275|| parent.muonfwdcell< 5 || parent.muonbkcell< 9 || parent.hadEinmucat > 0.03) return false;return true;})
caf::Proxy< caf::SRFuzzyK > fuzzyk
Cuts and Vars for the 2020 FD DiF Study.
const double kNue2018CVNFHCHighEdge
TH1D * ToTH1(double exposure, Color_t col=kBlack, Style_t style=kSolid, EExposureType expotype=kPOT, EBinType bintype=kBinContent) const
Histogram made from this Spectrum, scaled to some exposure.
double Integral(const Spectrum &s, const double pot, int cvnregion)
Proxy for caf::StandardRecord.
const Cut kNue2018NDCVNSsb
void SetSpillCut(const SpillCut &cut)
TCanvas * MakeMePlot(std::vector< TH1 * > Histos, std::vector< TString > Names, bool isFHC, string yname="none")
const Cut kNue2018NDPresel
Representation of a spectrum in any variable, with associated POT.
const XML_Char const XML_Char * data
caf::Proxy< caf::SRElastic > elastic
caf::Proxy< std::vector< caf::SRFuzzyKProng > > png
const double kNue2018CVNRHCLowEdge
const Var kNueEnergy2018([](const caf::SRProxy *sr){if(!sr->vtx.elastic.IsValid) return-1.0;if(sr->vtx.elastic.fuzzyk.npng< 1) return-1.0;if(kIsRHC(sr)) return kNueEnergyRHC(sr);else return kNueEnergyFHC(sr);})
void mre_blessed(bool plot=true, bool isFHC=true, TString drawing_options="red")
virtual void Go() override
Load all the registered spectra.
void SaveTo(TDirectory *dir, const std::string &name) const
const HistDef defs[kNumVars]
std::vector< float > Spectrum
const Var kCVNSSe([](const caf::SRProxy *sr){throw std::runtime_error("kCVNSSe is no longer available. Fix your macro so you don't use it.");return-5.;})
2018 nue PID
const SystShifts kNoShift
const Cut kIsRHC([](const caf::SRProxy *sr){return sr->spill.isRHC;})
caf::Proxy< bool > IsValid
caf::Proxy< caf::SRSlice > slc
Collaborates with Spectrum and OscillatableSpectrum to fill spectra from CAF files.
const double kNue2018CVNRHCHighEdge
const SpillCut kStandardSpillCuts
Apply this unless you're doing something special.
void Format(TGraph *gr, int lcol, int lsty, int lwid, int mcol, int msty, double msiz)
std::string to_string(ModuleType mt)
caf::Proxy< caf::SRVertexBranch > vtx
const std::string selNames[kNumSels]
static Binning Simple(int n, double lo, double hi, const std::vector< std::string > &labels={})
const double kNue2018CVNFHCLowEdge
void plot(std::string label, std::map< std::string, std::map< std::string, Spectrum * >> &plots, bool log)