4 #include "CAFAna/Core/Binning.h" 10 #include "CAFAna/Cuts/NueCutsSecondAna.h" 37 #include "Utilities/func/MathUtil.h" 41 TLatex*
prelim =
new TLatex(.93, .9,
"NOvA Preliminary");
42 prelim->SetTextColor(
kBlue);
44 prelim->SetTextSize(2/30.);
45 prelim->SetTextAngle(270);
46 prelim->SetTextAlign(12);
94 fname =
"defname: prod_mrecaf_R17-11-14-prod4mre.b_nd_genie_fhc_full_v1 with stride 1";
95 fname_data =
"defname: prod_mrecaf_R17-11-14-prod4mre.b_nd_numi_fhc_full_v1_goodruns";
99 fname =
"defname: prod_mrecaf_R17-11-14-prod4mre.b_nd_genie_rhc_full_v1 with stride 1";
100 fname_data =
"defname: prod_mrecaf_R17-11-14-prod4mre.b_nd_numi_rhc_full_v1_goodruns";
119 for(
int selIdx = 0; selIdx <
kNumSels; ++selIdx){
120 for (
int varIdx=0; varIdx<
kNumVars;varIdx++){
128 spec_data[selIdx][varIdx] =
new Spectrum(loader_data, axis, sels[selIdx]);
135 TFile*
file =
new TFile(file_name.c_str(),
"recreate");
137 for(
int selIdx = 0; selIdx <
kNumSels; ++selIdx){
138 TDirectory*
d = file->mkdir(selNames[selIdx].c_str());
139 for (
int varIdx=0; varIdx<
kNumVars;varIdx++){
140 const char*
name = defs[varIdx].name.c_str();
172 for(
int selIdx = 0; selIdx <
kNumSels; ++selIdx){
173 const char* selName = selNames[selIdx].c_str();
174 for(
int varIdx = 0; varIdx <
kNumVars; ++varIdx){
175 const char* varName = defs[varIdx].name.c_str();
185 POT = spec_data[selIdx][varIdx]->
POT();
204 cout<<
"integrals "<<hMC[selIdx][varIdx]->Integral()<<
" "<<hMC_dis[selIdx][varIdx]->Integral()<<
" "<<hMC_res[selIdx][varIdx]->Integral()<<
" "<<hMC_qe[selIdx][varIdx]->Integral()<<
" "<<hMC_mec[selIdx][varIdx]->Integral()<<
" "<<hMC_coh[selIdx][varIdx]->Integral()<<
" "<<hData[selIdx][varIdx]->Integral()<<
endl;
206 TCanvas *
c =
new TCanvas(
"c",
"canvas", 1000, 1000);
207 TPad*
p1 =
new TPad(
"",
"", 0, 0, 1, 1);
208 TPad*
p2 =
new TPad(
"",
"", 0, 0, 1, 1);
209 p1->SetBottomMargin(.3);
210 p2->SetTopMargin(.7);
213 p->SetLeftMargin(0.105);
219 for (
auto &
h:{hMC[selIdx][varIdx], hMC_dis[selIdx][varIdx], hMC_res[selIdx][varIdx], hMC_qe[selIdx][varIdx], hMC_mec[selIdx][varIdx], hMC_coh[selIdx][varIdx], hData[selIdx][varIdx]}){
224 hMC[selIdx][varIdx]->SetMaximum(hMC[selIdx][varIdx]->
GetMaximum()*1.2);
225 hMC[selIdx][varIdx]->SetMinimum(0);
226 hMC[selIdx][varIdx]->GetYaxis()->CenterTitle();
227 hMC[selIdx][varIdx]->GetXaxis()->CenterTitle();
228 hMC[selIdx][varIdx]->GetYaxis()->SetTitleSize(0.045);
229 hMC[selIdx][varIdx]->GetYaxis()->SetTitleOffset(1.17);
230 hMC[selIdx][varIdx]->GetYaxis()->SetTitle(
TString::Format(
"10^{4} events / %1.2g #times 10^{20} POT", POT/1E20).Data());
232 hMC[selIdx][varIdx]->Draw(
"hist");
233 hMC_dis[selIdx][varIdx]->Draw(
"hist same");
234 hMC_res[selIdx][varIdx]->Draw(
"hist same");
235 hMC_qe[selIdx][varIdx]->Draw(
"hist same");
236 hMC_mec[selIdx][varIdx]->Draw(
"hist same");
237 hMC_coh[selIdx][varIdx]->Draw(
"hist same");
238 hData[selIdx][varIdx]->SetMarkerStyle(20);
239 hData[selIdx][varIdx]->Draw(
"E1 same");
248 auto *tt =
new TText(gPad->GetUxmax()*0.53, 1.05*gPad->GetUymax(),
"Neutrino beam, MRE");
249 tt->SetTextSize(0.04);
251 auto *l2 =
new TLine(0.84,0,0.84,gPad->GetUymax());
252 l2->SetLineColor(kBlack);
254 auto *tt2 =
new TText(0.82, 0.6*gPad->GetUymax(),
"Cut position");
255 tt2->SetTextAngle(90.0);
256 tt2->SetTextSize(0.035);
260 auto *tt =
new TText(gPad->GetUxmax()*0.46, 1.05*gPad->GetUymax(),
"Antineutrino beam, MRE");
261 tt->SetTextSize(0.04);
263 auto *l2 =
new TLine(0.89,0,0.89,gPad->GetUymax());
264 l2->SetLineColor(kBlack);
266 auto *tt2 =
new TText(0.87, 0.6*gPad->GetUymax(),
"Cut position");
267 tt2->SetTextAngle(90.0);
268 tt2->SetTextSize(0.035);
272 TLegend *
leg =
new TLegend(0.2,0.6,0.5,0.85);
273 leg->SetTextSize(0.03);
274 leg->AddEntry(hData[selIdx][varIdx],
"Data",
"p");
275 leg->AddEntry(hMC[selIdx][varIdx],
"Monte Carlo, Total",
"l");
276 leg->AddEntry(hMC_qe[selIdx][varIdx],
"Monte Carlo, QE",
"l");
277 leg->AddEntry(hMC_res[selIdx][varIdx],
"Monte Carlo, RES",
"l");
278 leg->AddEntry(hMC_mec[selIdx][varIdx],
"Monte Carlo, MEC",
"l");
279 leg->AddEntry(hMC_dis[selIdx][varIdx],
"Monte Carlo, DIS",
"l");
280 leg->AddEntry(hMC_coh[selIdx][varIdx],
"Monte Carlo, COH",
"l");
286 auto temp = (TH1*)hData[selIdx][varIdx]->
Clone();
287 temp->Divide(hMC[selIdx][varIdx]);
288 temp->SetLineColor(kPink);
289 temp->SetMarkerStyle(1);
290 temp->GetXaxis()->SetTitle(
"#nu_{e} CVN classifier");
293 TLine *
l =
new TLine(-0.1,1,1.1,1);
294 l->SetLineColor(kBlack);
296 temp->GetYaxis()->SetRangeUser(0.75, 1.25);
297 temp->GetYaxis()->CenterTitle();
298 temp->GetXaxis()->CenterTitle();
299 temp->GetYaxis()->SetTitle(
"Data / MC");
300 temp->GetYaxis()->SetTitleSize(0.04);
301 temp->GetYaxis()->SetTitleOffset(1.2);
304 c->SaveAs((
"blpl/"+mode_tag+
"_plot-data-mc_cvne_presel.pdf").c_str());
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;})
Cuts and Vars for the 2020 FD DiF Study.
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.
Proxy for caf::StandardRecord.
const Cut kNue2018NDCVNSsb
std::vector< double > Spectrum
void SetSpillCut(const SpillCut &cut)
const Cut kNue2018NDPresel
Representation of a spectrum in any variable, with associated POT.
void mre_comp_split(bool plot=true, bool isFHC=true)
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);})
virtual void Go() override
Load all the registered spectra.
void SaveTo(TDirectory *dir, const std::string &name) const
const HistDef defs[kNumVars]
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
std::vector< double > POT
caf::Proxy< caf::SRSlice > slc
Collaborates with Spectrum and OscillatableSpectrum to fill spectra from CAF files.
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)
const std::string selNames[kNumSels]
static Binning Simple(int n, double lo, double hi, const std::vector< std::string > &labels={})