18 #include "TLegendEntry.h" 19 #include "TPaletteAxis.h" 27 #include "NDAna/muonid/NDXSecMuonPID.h" 34 const int ret = gSystem->Load(
"libNDAnamuonid");
47 std::vector<std::string>
all_systs = {
"ppfx",
"genie",
"calib_shape",
"calib_shift",
"ll",
"cherenkov",
"beam_focusing",
"stat"};
48 std::vector<std::string>
beam_systs = {
"ppfx",
"beam_focusing"};
50 std::map<std::string, nuebarccinc::Style>
syst_styles = {{
"genie" , {
"", kCyan , 1}},
51 {
"ppfx" , {
"", kMagenta , 1}},
53 {
"calib_shift" , {
"",
kGreen , 1}},
54 {
"cherenkov", {
"",
kBlue+1 , 1}},
57 {
"calib_shift_up" , {
"",
kGreen , 9}},
58 {
"calib_shift_dw" , {
"",
kGreen , 2}},
59 {
"calib_shape" , {
"",
kRed-4 , 1}},
60 {
"stat" , {
"", kBlack , 2}},
62 {
"2kA" , {
"", kCyan, 1}},
63 {
"02mmBeamSpotSize", {
"", kCyan + 1, 1}},
64 {
"1mmBeamShiftX", {
"", kMagenta + 2, 1}},
65 {
"1mmBeamShiftY", {
"", kMagenta+2, 2}},
66 {
"3mmHorn1X", {
"",
kViolet, 1}},
67 {
"3mmHorn1Y", {
"",
kViolet, 2}},
68 {
"3mmHorn2X", {
"", kAzure, 1}},
69 {
"3mmHorn2Y", {
"", kAzure, 2}},
70 {
"7mmTargetZ", {
"",
kBlue-6, 1}},
71 {
"MagneticFieldinDecayPipe", {
"",
kGreen+2, 1}},
72 {
"1mmHornWater", {
"", kYellow-1, 1}},
73 {
"beam_focusing", {
"",
kViolet+1}}
79 std::map<std::string, double>
xmax = {{
"electron_kin", -1.},
98 std::string input_file_name =
"/nova/ana/users/ddoyle/NuebarCCInc/WrongSign/wrong_sign_uncertainty.root",
99 std::string plot_dump =
"/nova/ana/users/ddoyle/NuebarCCInc/WrongSign/plots")
102 std::map<std::string, const HistAxis*>
axes;
107 std::map<std::string, const Cut*>
cuts;
112 std::map<std::string, SpectrumLoader*>
loaders;
113 loaders[
"nominal" ] = 0;
114 loaders[
"calib_shift_up"] = 0;
115 loaders[
"calib_shift_dw"] = 0;
116 loaders[
"ll_up"] = 0;
117 loaders[
"ll_dw"] = 0;
118 loaders[
"cherenkov"] = 0;
119 loaders[
"calib_shape"] = 0;
130 const Cut kSelection =
134 std::map<std::string, std::map<std::string, std::map<std::string, Spectrum*> > > spectra;
135 for(
auto load_it = loaders.begin(); load_it != loaders.end(); load_it++) {
137 for(
auto ax_it = axes.begin(); ax_it != axes.end(); ax_it++) {
138 for(
auto cut_it = cuts.begin(); cut_it != cuts.end(); cut_it++) {
139 spectra[load_it->first][cut_it->first][ax_it->first] =
new Spectrum(*load_it->second,
141 kSelection && *cut_it->second,
149 for(
auto ax_it = axes.begin(); ax_it != axes.end(); ax_it++) {
150 for(
auto cut_it = cuts.begin(); cut_it != cuts.end(); cut_it++) {
152 auto name_up = beam_it->first +
"_up";
153 auto name_dw = beam_it->first +
"_dw";
155 spectra[name_up][cut_it->first][ax_it->first] =
new Spectrum(*loaders[
"nominal"],
157 kSelection && *cut_it->second,
161 spectra[name_dw][cut_it->first][ax_it->first] =
new Spectrum(*loaders[
"nominal"],
163 kSelection && *cut_it->second,
172 std::vector<SystShifts> genie_shifts = genie_multiverse.
GetSystShifts();
174 std::map<std::string, std::map<std::string, Multiverse *> > mv_ppfx;
175 std::map<std::string, std::map<std::string, Multiverse *> > mv_genie;
176 for(
auto ax_it = axes.begin(); ax_it != axes.end(); ax_it++) {
177 for(
auto cut_it = cuts.begin(); cut_it != cuts.end(); cut_it++) {
178 mv_ppfx[cut_it->first][ax_it->first] =
new Multiverse(*loaders[
"nominal"],
180 kSelection && *cut_it->second,
184 mv_genie[cut_it->first][ax_it->first] =
new Multiverse(*loaders[
"nominal"],
186 kSelection && *cut_it->second,
192 for(
auto load_it = loaders.begin(); load_it != loaders.end(); load_it++)
193 load_it->second->Go();
196 TFile*
output =
new TFile(
"wrong_sign_uncertainty.root",
"recreate");
197 for(
auto ax_it = axes.begin(); ax_it != axes.end(); ax_it++) {
198 for(
auto cut_it = cuts.begin(); cut_it != cuts.end(); cut_it++) {
199 mv_ppfx .at(cut_it->first).at(ax_it->first)->SaveTo(output, (
"ppfx_" + cut_it->first +
"_" + ax_it->first).c_str());
200 mv_genie.at(cut_it->first).at(ax_it->first)->SaveTo(output, (
"genie_" + cut_it->first +
"_" + ax_it->first).c_str());
201 for(
auto load_it = loaders.begin(); load_it != loaders.end(); load_it++) {
202 spectra.at(load_it->first).at(cut_it->first).at(ax_it->first)->SaveTo(output,
TString::Format(
"%s_%s_%s",
203 load_it->first.c_str(),
204 cut_it ->first.c_str(),
205 ax_it ->first.c_str()).Data());
208 spectra.at(beam_it->first +
"_up").at(cut_it->first).at(ax_it->first)->SaveTo(output,
TString::Format(
"%s_%s_%s",
209 cut_it ->first.c_str(),
210 ax_it ->first.c_str()).Data());
211 spectra.at(beam_it->first +
"_dw").at(cut_it->first).at(ax_it->first)->SaveTo(output,
TString::Format(
"%s_%s_%s",
212 (beam_it->first +
"_dw").c_str(),
213 cut_it ->first.c_str(),
214 ax_it ->first.c_str()).Data());
224 TFile * input = TFile::Open(input_file_name.c_str());
226 double MCPOT = ((TH1*) input->Get(
"nominal_nue_q2/pot"))->GetBinContent(1);
227 std::map<std::string, double>
pots;
228 std::map<std::string, std::map<std::string, Multiverse *> > mv_ppfx;
229 std::map<std::string, std::map<std::string, Multiverse *> > mv_genie;
230 std::map<std::string, std::map<std::string, std::map<std::string, TH1*> > >
hists;
231 for(
auto ax_it = axes.begin(); ax_it != axes.end(); ax_it++) {
232 for(
auto cut_it = cuts.begin(); cut_it != cuts.end(); cut_it++) {
233 mv_ppfx [ax_it->first][cut_it->first] =
Multiverse::LoadFrom(input, (
"ppfx_" + cut_it->first +
"_" + ax_it->first).c_str())).release(;
234 mv_genie[ax_it->first][cut_it->first] =
Multiverse::LoadFrom(input, (
"genie_" + cut_it->first +
"_" + ax_it->first).c_str())).release(;
236 mv_ppfx .at(ax_it->first).at(cut_it->first)->Scale(
kAna2020RHCPOT / MCPOT);
237 mv_genie.at(ax_it->first).at(cut_it->first)->Scale(
kAna2020RHCPOT / MCPOT);
239 for(
auto load_it = loaders.begin(); load_it != loaders.end(); load_it++) {
241 load_it->first.c_str(),
242 cut_it ->first.c_str(),
243 ax_it ->first.c_str()).Data());
244 pots[load_it->first] = spec->POT();
246 hists[ax_it->first][cut_it->first][load_it->first] = spec->ToTH1(
pot);
251 (beam_it->first +
"_up").c_str(),
252 cut_it ->first .c_str(),
253 ax_it ->first .c_str()).Data());
255 (beam_it->first +
"_dw").c_str(),
256 cut_it ->first .c_str(),
257 ax_it ->first .c_str()).Data());
259 hists[ax_it->first][cut_it->first][beam_it->first +
"_up"] = spec_up->ToTH1(
kAna2020RHCPOT);
260 hists[ax_it->first][cut_it->first][beam_it->first +
"_dw"] = spec_dw->ToTH1(
kAna2020RHCPOT);
266 std::map<std::string, std::map<std::string, TH1*> > nuebar_fractions;
267 std::map<std::string, Multiverse*> mv_ppfx_nuebar_fractions;
268 std::map<std::string, Multiverse*> mv_genie_nuebar_fractions;
269 std::map<std::string, Multiverse*> mv_ppfx_nue_nuebar_ratios;
270 std::map<std::string, Multiverse*> mv_genie_nue_nuebar_ratios;
271 std::map<std::string, std::map<std::string, TH1*> > nue_nuebar_ratios;
272 for(
auto ax_it = axes.begin(); ax_it != axes.end(); ax_it++) {
273 mv_ppfx_nuebar_fractions [ax_it->first] =
new Multiverse(*mv_ppfx .at(ax_it->first).at(
"nuebar"));
274 mv_genie_nuebar_fractions[ax_it->first] =
new Multiverse(*mv_genie.at(ax_it->first).at(
"nuebar"));
276 *mv_ppfx_nuebar_fractions.at(ax_it->first) /= *mv_ppfx .at(ax_it->first).at(
"nunubar");
277 *mv_genie_nuebar_fractions.at(ax_it->first) /= *mv_genie.at(ax_it->first).at(
"nunubar");
279 mv_ppfx_nue_nuebar_ratios[ax_it->first] =
new Multiverse(*mv_ppfx.at(ax_it->first).at(
"nue"));
280 *mv_ppfx_nue_nuebar_ratios.at(ax_it->first) /= *mv_ppfx.at(ax_it->first).at(
"nuebar");
282 mv_genie_nue_nuebar_ratios[ax_it->first] =
new Multiverse(*mv_genie.at(ax_it->first).at(
"nue"));
283 *mv_genie_nue_nuebar_ratios.at(ax_it->first) /= *mv_genie.at(ax_it->first).at(
"nuebar");
285 for(
auto loader_it = loaders.begin(); loader_it != loaders.end(); loader_it++) {
286 nuebar_fractions[ax_it->first][loader_it->first] = (TH1*) hists.at(ax_it->first).at(
"nuebar").at(loader_it->first)->Clone(
UniqueName().c_str());
287 nuebar_fractions.at(ax_it->first).at(loader_it->first)->
Divide(hists.at(ax_it->first).at(
"nunubar").at(loader_it->first));
289 nue_nuebar_ratios[ax_it->first][loader_it->first] = (TH1*) hists.at(ax_it->first).at(
"nue").at(loader_it->first)->Clone(
UniqueName().c_str());
290 nue_nuebar_ratios.at(ax_it->first).at(loader_it->first)->Divide(hists.at(ax_it->first).at(
"nuebar").at(loader_it->first));
295 TH1 * tmp_up = (TH1*) hists.at(ax_it->first).at(
"nuebar").at(syst +
"_up")->Clone(
UniqueName().c_str());
296 TH1 * tmp_dw = (TH1*) hists.at(ax_it->first).at(
"nuebar").at(syst +
"_dw")->Clone(
UniqueName().c_str());
297 tmp_up->Divide(hists.at(ax_it->first).at(
"nunubar").at(syst +
"_up"));
298 tmp_dw->Divide(hists.at(ax_it->first).at(
"nunubar").at(syst +
"_dw"));
300 nuebar_fractions[ax_it->first][syst] =
MostConservative(tmp_up, tmp_dw, nuebar_fractions.at(ax_it->first).at(
"nominal"));
305 tmp_up = (TH1*) hists.at(ax_it->first).at(
"nue").at(syst +
"_up")->Clone(
UniqueName().c_str());
306 tmp_dw = (TH1*) hists.at(ax_it->first).at(
"nue").at(syst +
"_dw")->Clone(
UniqueName().c_str());
307 tmp_up->Divide(hists.at(ax_it->first).at(
"nuebar").at(syst +
"_up"));
308 tmp_dw->Divide(hists.at(ax_it->first).at(
"nuebar").at(syst +
"_dw"));
310 nue_nuebar_ratios[ax_it->first][syst] =
MostConservative(tmp_up, tmp_dw, nue_nuebar_ratios.at(ax_it->first).at(
"nominal"));
315 TH1 * tmp_up = (TH1*) hists.at(ax_it->first).at(
"nuebar").at(beam_it->first +
"_up")->Clone(
UniqueName().c_str());
316 TH1 * tmp_dw = (TH1*) hists.at(ax_it->first).at(
"nuebar").at(beam_it->first +
"_dw")->Clone(
UniqueName().c_str());
317 tmp_up->Divide(hists.at(ax_it->first).at(
"nunubar").at(beam_it->first +
"_up"));
318 tmp_dw->Divide(hists.at(ax_it->first).at(
"nunubar").at(beam_it->first +
"_dw"));
320 nuebar_fractions[ax_it->first][beam_it->first] =
MostConservative(tmp_up, tmp_dw, nuebar_fractions.at(ax_it->first).at(
"nominal"));
325 tmp_up = (TH1*) hists.at(ax_it->first).at(
"nue") .at(beam_it->first +
"_up")->Clone(
UniqueName().c_str());
326 tmp_dw = (TH1*) hists.at(ax_it->first).at(
"nue") .at(beam_it->first +
"_dw")->Clone(
UniqueName().c_str());
327 tmp_up->Divide(hists.at(ax_it->first).at(
"nuebar").at(beam_it->first +
"_up"));
328 tmp_dw->Divide(hists.at(ax_it->first).at(
"nuebar").at(beam_it->first +
"_dw"));
330 nue_nuebar_ratios[ax_it->first][beam_it->first] =
MostConservative(tmp_up, tmp_dw, nue_nuebar_ratios.at(ax_it->first).at(
"nominal"));
335 nuebar_fractions.at(ax_it->first)[
"cherenkov"] = (TH1*) hists.at(ax_it->first).at(
"nuebar").at(
"cherenkov")->Clone(
UniqueName().c_str());
336 nuebar_fractions.at(ax_it->first).at(
"cherenkov")->Divide(hists.at(ax_it->first).at(
"nunubar").at(
"cherenkov"));
338 nue_nuebar_ratios.at(ax_it->first)[
"cherenkov"] = (TH1*) hists.at(ax_it->first).at(
"nue").at(
"cherenkov")->Clone(
UniqueName().c_str());
339 nue_nuebar_ratios.at(ax_it->first).at(
"cherenkov")->Divide(hists.at(ax_it->first).at(
"nuebar").at(
"cherenkov"));
342 nuebar_fractions.at(ax_it->first)[
"calib_shape"] = (TH1*) hists.at(ax_it->first).at(
"nuebar").at(
"calib_shape")->Clone(
UniqueName().c_str());
343 nuebar_fractions.at(ax_it->first).at(
"calib_shape")->Divide(hists.at(ax_it->first).at(
"nunubar").at(
"calib_shape"));
345 nue_nuebar_ratios.at(ax_it->first)[
"calib_shape"] = (TH1*) hists.at(ax_it->first).at(
"nue").at(
"calib_shape")->Clone(
UniqueName().c_str());
346 nue_nuebar_ratios.at(ax_it->first).at(
"calib_shape")->Divide(hists.at(ax_it->first).at(
"nuebar").at(
"calib_shape"));
350 TH1 * ppfx_up = mv_ppfx_nuebar_fractions.at(ax_it->first)->GetPlusOneSigmaShift (nuebar_fractions.at(ax_it->first).at(
"nominal"));
351 TH1 * ppfx_dw = mv_ppfx_nuebar_fractions.at(ax_it->first)->GetMinusOneSigmaShift(nuebar_fractions.at(ax_it->first).at(
"nominal"));
353 TH1 * genie_up = mv_genie_nuebar_fractions.at(ax_it->first)->
GetPlusOneSigmaShift (nuebar_fractions.at(ax_it->first).at(
"nominal"));
354 TH1 * genie_dw = mv_genie_nuebar_fractions.at(ax_it->first)->
GetMinusOneSigmaShift(nuebar_fractions.at(ax_it->first).at(
"nominal"));
356 nuebar_fractions[ax_it->first][
"ppfx"] =
MostConservative(ppfx_up , ppfx_dw , nuebar_fractions.at(ax_it->first).at(
"nominal"));
357 nuebar_fractions[ax_it->first][
"genie"] =
MostConservative(genie_up, genie_dw, nuebar_fractions.at(ax_it->first).at(
"nominal"));
365 ppfx_up = mv_ppfx_nue_nuebar_ratios.at(ax_it->first)->GetPlusOneSigmaShift (nue_nuebar_ratios.at(ax_it->first).at(
"nominal"));
366 ppfx_dw = mv_ppfx_nue_nuebar_ratios.at(ax_it->first)->GetMinusOneSigmaShift(nue_nuebar_ratios.at(ax_it->first).at(
"nominal"));
367 nue_nuebar_ratios.at(ax_it->first)[
"ppfx"] =
MostConservative(ppfx_up, ppfx_dw, nue_nuebar_ratios.at(ax_it->first).at(
"nominal"));
369 genie_up = mv_genie_nue_nuebar_ratios.at(ax_it->first)->GetPlusOneSigmaShift (nue_nuebar_ratios.at(ax_it->first).at(
"nominal"));
370 genie_dw = mv_genie_nue_nuebar_ratios.at(ax_it->first)->GetMinusOneSigmaShift(nue_nuebar_ratios.at(ax_it->first).at(
"nominal"));
371 nue_nuebar_ratios.at(ax_it->first)[
"genie"] =
MostConservative(genie_up, genie_dw, nue_nuebar_ratios.at(ax_it->first).at(
"nominal"));
374 for(
auto it1 = nuebar_fractions.begin(); it1 != nuebar_fractions.end(); it1++)
375 for(
auto it2 = nuebar_fractions.at(it1->first).begin(); it2 != nuebar_fractions.at(it1->first).end(); it2++)
376 it2->second->GetYaxis()->SetTitle(
"#bar{#nu_{e}} Fraction");
379 std::map<std::string, std::map<std::string, TH1*> > nuebar_fractions_uncert_abs;
380 std::map<std::string, std::map<std::string, TH1*> > nuebar_fractions_uncert_frac;
381 std::map<std::string, std::map<std::string, TH1*> > nue_nuebar_ratios_uncert_abs;
382 std::map<std::string, std::map<std::string, TH1*> > nue_nuebar_ratios_uncert_frac;
383 for(
auto ax_it = axes.begin(); ax_it != axes.end(); ax_it++) {
384 for(
std::string syst : {
"ppfx",
"genie",
"calib_shift",
"calib_shape",
"ll",
"cherenkov"} ) {
385 nuebar_fractions_uncert_abs[ax_it->first][syst] = (TH1*) nuebar_fractions.at(ax_it->first).at(syst)->Clone(
UniqueName().c_str());
386 nuebar_fractions_uncert_abs[ax_it->first][syst]->Add(nuebar_fractions.at(ax_it->first).at(
"nominal"), -1);
387 abs(nuebar_fractions_uncert_abs[ax_it->first][syst]);
389 nuebar_fractions_uncert_frac[ax_it->first][syst] = (TH1*) nuebar_fractions_uncert_abs.at(ax_it->first).at(syst)->Clone(
UniqueName().c_str());
390 nuebar_fractions_uncert_frac.at(ax_it->first).at(syst)->Divide(nuebar_fractions.at(ax_it->first).at(
"nominal"));
394 nue_nuebar_ratios_uncert_abs[ax_it->first][syst] = (TH1*) nue_nuebar_ratios.at(ax_it->first).at(syst)->Clone(
UniqueName().c_str());
395 nue_nuebar_ratios_uncert_abs[ax_it->first][syst]->Add(nue_nuebar_ratios.at(ax_it->first).at(
"nominal"), -1);
396 abs(nue_nuebar_ratios_uncert_abs[ax_it->first][syst]);
398 nue_nuebar_ratios_uncert_frac[ax_it->first][syst] = (TH1*) nue_nuebar_ratios_uncert_abs.at(ax_it->first).at(syst)->Clone(
UniqueName().c_str());
399 nue_nuebar_ratios_uncert_frac.at(ax_it->first).at(syst)->Divide(nue_nuebar_ratios.at(ax_it->first).at(
"nominal"));
405 nuebar_fractions_uncert_abs[ax_it->first][syst] = (TH1*) nuebar_fractions.at(ax_it->first).at(syst)->Clone(
UniqueName().c_str());
406 nuebar_fractions_uncert_abs[ax_it->first][syst]->Add(nuebar_fractions.at(ax_it->first).at(
"nominal"), -1);
407 abs(nuebar_fractions_uncert_abs[ax_it->first][syst]);
409 nuebar_fractions_uncert_frac[ax_it->first][syst] = (TH1*) nuebar_fractions_uncert_abs.at(ax_it->first).at(syst)->Clone(
UniqueName().c_str());
410 nuebar_fractions_uncert_frac.at(ax_it->first).at(syst)->Divide(nuebar_fractions.at(ax_it->first).at(
"nominal"));
413 nue_nuebar_ratios_uncert_abs[ax_it->first][syst] = (TH1*) nue_nuebar_ratios.at(ax_it->first).at(syst)->Clone(
UniqueName().c_str());
414 nue_nuebar_ratios_uncert_abs[ax_it->first][syst]->Add(nue_nuebar_ratios.at(ax_it->first).at(
"nominal"), -1);
415 abs(nue_nuebar_ratios_uncert_abs[ax_it->first][syst]);
417 nue_nuebar_ratios_uncert_frac[ax_it->first][syst] = (TH1*) nue_nuebar_ratios_uncert_abs.at(ax_it->first).at(syst)->Clone(
UniqueName().c_str());
418 nue_nuebar_ratios_uncert_frac.at(ax_it->first).at(syst)->Divide(nue_nuebar_ratios.at(ax_it->first).at(
"nominal"));
422 nuebar_fractions_uncert_frac.at(ax_it->first)[
"beam_focusing"] = (TH1*) nuebar_fractions_uncert_frac.at(ax_it->first).at(
"2kA")->Clone(
UniqueName().c_str());
423 nuebar_fractions_uncert_frac.at(ax_it->first).at(
"beam_focusing")->Reset();
425 nue_nuebar_ratios_uncert_frac.at(ax_it->first)[
"beam_focusing"] = (TH1*) nue_nuebar_ratios_uncert_frac.at(ax_it->first).at(
"2kA")->Clone(
UniqueName().c_str());
426 nue_nuebar_ratios_uncert_frac.at(ax_it->first).at(
"beam_focusing")->Reset();
428 auto NX = nuebar_fractions_uncert_frac.at(ax_it->first).at(
"beam_focusing")->GetNbinsX();
429 auto NY = nuebar_fractions_uncert_frac.at(ax_it->first).at(
"beam_focusing")->GetNbinsY();
430 auto NZ = nuebar_fractions_uncert_frac.at(ax_it->first).at(
"beam_focusing")->GetNbinsZ();
431 for(
auto x = 1;
x <= NX;
x++) {
432 for(
auto y = 1;
y <= NY;
y++) {
433 for(
auto z = 1;
z <= NZ;
z++) {
437 rat +=
std::pow(nue_nuebar_ratios_uncert_frac.at(ax_it->first).at(beam_it->first)->GetBinContent(
x,
y,
z), 2);
438 val +=
std::pow(nuebar_fractions_uncert_frac.at(ax_it->first).at(beam_it->first)->GetBinContent(
x,
y,
z), 2);
440 nue_nuebar_ratios_uncert_frac.at(ax_it->first).at(
"beam_focusing")->SetBinContent(
x,
y,
z,
std::sqrt(rat));
441 nuebar_fractions_uncert_frac.at(ax_it->first).at(
"beam_focusing")->SetBinContent(
x,
y,
z,
std::sqrt(val));
447 nuebar_fractions_uncert_abs .at(ax_it->first)[
"stat"] = (TH1*) nuebar_fractions.at(ax_it->first).at(
"nominal")->Clone(
UniqueName().c_str());
448 nuebar_fractions_uncert_frac.at(ax_it->first)[
"stat"] = (TH1*) nuebar_fractions.at(ax_it->first).at(
"nominal")->Clone(
UniqueName().c_str());
450 NX = nuebar_fractions.at(ax_it->first).at(
"nominal")->GetNbinsX();
451 NY = nuebar_fractions.at(ax_it->first).at(
"nominal")->GetNbinsY();
452 NZ = nuebar_fractions.at(ax_it->first).at(
"nominal")->GetNbinsZ();
453 for(
auto ix = 1; ix <= NX; ix++) {
454 for(
auto iy = 1; iy <= NY; iy++) {
455 for(
auto iz = 1; iz <= NZ; iz++) {
458 auto num = hists.at(ax_it->first).at(
"nuebar") .at(
"nominal")->GetBinContent(ix, iy, iz) * MCPOT /
kAna2020RHCPOT;
459 auto den = hists.at(ax_it->first).at(
"nunubar").at(
"nominal")->GetBinContent(ix, iy, iz) * MCPOT /
kAna2020RHCPOT;
462 nuebar_fractions_uncert_abs .at(ax_it->first).at(
"stat")->SetBinContent(ix, iy, iz, nom * err);
463 nuebar_fractions_uncert_frac.at(ax_it->first).at(
"stat")->SetBinContent(ix, iy, iz, err );
471 std::map<std::string, TH1*> nsel_uncert;
472 std::map<std::string, TH1*> mc_frac_uncert;
473 for(
auto ax_it = axes.begin(); ax_it != axes.end(); ax_it++) {
474 nsel_uncert [ax_it->first] = (TH1*) hists.at(ax_it->first).at(
"nuebar").at(
"nominal")->Clone(
UniqueName().c_str());
475 mc_frac_uncert[ax_it->first] = (TH1*) nuebar_fractions.at(ax_it->first).at(
"nominal")->Clone(
UniqueName().c_str());
476 nsel_uncert .at(ax_it->first)->Reset();
477 mc_frac_uncert.at(ax_it->first)->Reset();
478 mc_frac_uncert.at(ax_it->first)->SetTitle(
"#bar{#nu}_{e} Fraction Uncertainty");
479 nsel_uncert .at(ax_it->first)->SetTitle(
"Selected #bar{#nu}_{e} Uncertainty");
481 if(ax_it->first ==
"electron_kin")
482 mc_frac_uncert.at(ax_it->first)->GetZaxis()->SetTitle(
"Fractional Uncertainty");
484 mc_frac_uncert.at(ax_it->first)->GetYaxis()->SetTitle(
"Fractional Uncertainty");
486 auto NX = nuebar_fractions.at(ax_it->first).at(
"nominal")->GetNbinsX();
487 auto NY = nuebar_fractions.at(ax_it->first).at(
"nominal")->GetNbinsY();
488 auto NZ = nuebar_fractions.at(ax_it->first).at(
"nominal")->GetNbinsZ();
490 for(
auto ix = 1; ix <= NX; ix++) {
491 for(
auto iy = 1; iy <= NY; iy++) {
492 for(
auto iz = 1; iz <= NZ; iz++) {
494 for(
std::string syst : {
"ppfx",
"genie",
"calib_shape",
"calib_shift",
"ll",
"cherenkov",
"beam_focusing",
"stat"}) {
495 val +=
std::pow(nuebar_fractions_uncert_frac.at(ax_it->first).at(syst)->GetBinContent(ix, iy, iz), 2);
497 mc_frac_uncert.at(ax_it->first)->SetBinContent(ix, iy, iz,
std::sqrt(val));
499 auto n = hists.at(ax_it->first).at(
"nunubar").at(
"nominal")->GetBinContent(ix, iy, iz);
500 nsel_uncert.at(ax_it->first)->SetBinContent(ix, iy, iz,
std::sqrt(1/
n + val));
507 mc_frac_uncert.at(
"enu")->GetXaxis()->SetRangeUser(0, 6);
508 mc_frac_uncert.at(
"q2" )->GetXaxis()->SetRangeUser(0, 2);
509 nue_nuebar_ratios.at(
"enu").at(
"nominal")->GetXaxis()->SetRangeUser(0, 6);
510 nue_nuebar_ratios.at(
"q2").at(
"nominal") ->GetXaxis()->SetRangeUser(0, 2);
512 Plot1D(mc_frac_uncert.at(
"enu"),
"Total", nuebar_fractions_uncert_frac.at(
"enu"),
all_systs, plot_dump +
"/enu_fractional_uncertainties_all.pdf");
513 Plot1D(mc_frac_uncert.at(
"q2") ,
"Total", nuebar_fractions_uncert_frac.at(
"q2") ,
all_systs, plot_dump +
"/q2_fractional_uncertainties_all.pdf" );
514 Plot1D(mc_frac_uncert.at(
"enu"),
"Total", nuebar_fractions_uncert_frac.at(
"enu"),
beam_systs, plot_dump +
"/enu_fractional_uncertainties_beam.pdf");
515 Plot1D(mc_frac_uncert.at(
"q2") ,
"Total", nuebar_fractions_uncert_frac.at(
"q2") ,
beam_systs, plot_dump +
"/q2_fractional_uncertainties_beam.pdf" );
516 for(
auto ax_it = axes.begin(); ax_it != axes.end(); ax_it++) {
527 PlotMultiverse(*mv_ppfx .at(ax_it->first).at(
"nuebar" ), hists.at(ax_it->first).at(
"nuebar" ).at(
"nominal"),
"Selected #bar{#nu_{e}} PPFX" , plot_dump +
"/" + ax_it->first +
"_nuebar_events_ppfx.pdf" );
528 PlotMultiverse(*mv_genie.at(ax_it->first).at(
"nuebar" ), hists.at(ax_it->first).at(
"nuebar" ).at(
"nominal"),
"Selected #bar{#nu_{e}} GENIE", plot_dump +
"/" + ax_it->first +
"_nuebar_events_genie.pdf");
529 PlotMultiverse(*mv_ppfx .at(ax_it->first).at(
"nue" ), hists.at(ax_it->first).at(
"nue" ).at(
"nominal"),
"Selected #nu_{e} PPFX" , plot_dump +
"/" + ax_it->first +
"_nue_events_ppfx.pdf" );
530 PlotMultiverse(*mv_genie.at(ax_it->first).at(
"nue" ), hists.at(ax_it->first).at(
"nue" ).at(
"nominal"),
"Selected #nu_{e} GENIE", plot_dump +
"/" + ax_it->first +
"_nue_events_genie.pdf");
531 PlotMultiverse(*mv_ppfx .at(ax_it->first).at(
"nunubar"), hists.at(ax_it->first).at(
"nunubar").at(
"nominal"),
"Selected #bar{#nu_{e}} + #nu_{e} PPFX" , plot_dump +
"/" + ax_it->first +
"_nunubar_events_ppfx.pdf" );
532 PlotMultiverse(*mv_genie.at(ax_it->first).at(
"nunubar"), hists.at(ax_it->first).at(
"nunubar").at(
"nominal"),
"Selected #bar{#nu_{e}} + #nu_{e} GENIE", plot_dump +
"/" + ax_it->first +
"_nunubar_events_genie.pdf");
534 PlotMultiverse(*mv_ppfx_nuebar_fractions .at(ax_it->first), nuebar_fractions.at(ax_it->first).at(
"nominal"),
"#bar{#nu_{e}} Fraction PPFX" , plot_dump +
"/" + ax_it->first +
"_nuebar_fraction_ppfx.pdf",
535 nuebar_fractions.at(ax_it->first).at(
"ppfx"));
537 PlotMultiverse(*mv_genie_nuebar_fractions.at(ax_it->first), nuebar_fractions.at(ax_it->first).at(
"nominal"),
"#bar{#nu_{e}} Fraction GENIE", plot_dump +
"/" + ax_it->first +
"_nuebar_fraction_genie.pdf",
538 nuebar_fractions.at(ax_it->first).at(
"genie"));
540 PlotMultiverse(*mv_ppfx_nue_nuebar_ratios.at(ax_it->first), nue_nuebar_ratios.at(ax_it->first).at(
"nominal"),
"#nu_{e} / #bar{#nu}_{e} PPFX", plot_dump +
"/" + ax_it->first +
"_nue_nuebar_ratio_ppfx.pdf",
541 nue_nuebar_ratios.at(ax_it->first).at(
"ppfx"));
543 PlotMultiverse(*mv_genie_nue_nuebar_ratios.at(ax_it->first), nue_nuebar_ratios.at(ax_it->first).at(
"nominal"),
"#nu_{e} / #bar{#nu}_{e} GENIE", plot_dump +
"/" + ax_it->first +
"_nue_nuebar_ratio_genie.pdf",
544 nue_nuebar_ratios.at(ax_it->first).at(
"genie"));
548 gStyle->SetPaintTextFormat(
".2f");
549 Plot2D(mc_frac_uncert.at(
"electron_kin"), nuebar_fractions_uncert_frac.at(
"electron_kin"),
all_systs, plot_dump +
"/electron_kin_fractional_uncertainty");
551 TCanvas *
c =
new TCanvas();
552 nsel_uncert.at(
"q2")->GetYaxis()->SetTitle(
"Fractional Uncertainty");
553 nsel_uncert.at(
"q2")->GetXaxis()->SetRangeUser(0,
xmax.at(
"q2"));
554 nsel_uncert.at(
"q2")->Draw(
"hist");
555 c->Print(
TString::Format(
"%s/%s_nsel_uncert.pdf", plot_dump.c_str(),
"q2").Data());
557 nsel_uncert.at(
"enu")->GetYaxis()->SetTitle(
"Fractional Uncertainty");
558 nsel_uncert.at(
"enu")->GetXaxis()->SetRangeUser(0,
xmax.at(
"enu"));
559 nsel_uncert.at(
"enu")->Draw(
"hist");
560 c->Print(
TString::Format(
"%s/%s_nsel_uncert.pdf", plot_dump.c_str(),
"enu").Data());
563 c->SetRightMargin(0.2);
564 auto nsel_uncert_electron_kin_2d =
ToTH2Helper(std::unique_ptr<TH1>((TH1*) nsel_uncert.at(
"electron_kin")->Clone(
UniqueName().c_str())),
567 nsel_uncert_electron_kin_2d->GetZaxis()->SetTitle(
"Fractional Uncertainty");
569 nsel_uncert_electron_kin_2d->GetXaxis()->SetRangeUser(0.85, 1);
570 nsel_uncert_electron_kin_2d->GetYaxis()->SetRangeUser(0, 6);
571 nsel_uncert_electron_kin_2d->GetZaxis()->SetRangeUser(0, 1);
572 nsel_uncert_electron_kin_2d->SetMarkerColor(kWhite);
573 nsel_uncert_electron_kin_2d->GetXaxis()->SetTitle(
"True cos#theta_{e}");
574 nsel_uncert_electron_kin_2d->GetYaxis()->SetTitle(
"True Electron Energy (GeV)");
576 nsel_uncert_electron_kin_2d->Draw(
"colz text");
578 c->Print(
TString::Format(
"%s/%s_nsel_uncert.pdf", plot_dump.c_str(),
"electron_kin").Data());
580 auto nnunubar_2d =
ToTH2Helper(std::unique_ptr<TH1>((TH1*) hists.at(
"electron_kin").at(
"nunubar").at(
"nominal")->Clone(
UniqueName().c_str())),
584 nnunubar_2d->SetTitle(
"Selected N_{#bar{#nu}_{e}} + N_{#nu_{e}}");
585 nnunubar_2d->GetXaxis()->SetRangeUser(0.85, 1);
586 nnunubar_2d->GetYaxis()->SetRangeUser(0, 6);
587 nnunubar_2d->SetMarkerColor(kWhite);
588 nnunubar_2d->GetXaxis()->SetTitle(
"True cos#theta_{e}");
589 nnunubar_2d->GetYaxis()->SetTitle(
"True Electron Energy (GeV)");
591 nnunubar_2d->Draw(
"colz text");
593 c->Print(
TString::Format(
"%s/%s_nsel_nunubar.pdf", plot_dump.c_str(),
"electron_kin").Data());
595 auto nom_nuebar_frac_2d =
ToTH2Helper(std::unique_ptr<TH1>((TH1*) nuebar_fractions.at(
"electron_kin").at(
"nominal")->Clone(
UniqueName().c_str())),
599 nom_nuebar_frac_2d->SetTitle(
"s_{#bar{#nu}_{e}}");
600 nom_nuebar_frac_2d->GetXaxis()->SetRangeUser(0.85, 1);
601 nom_nuebar_frac_2d->GetYaxis()->SetRangeUser(0, 6);
602 nom_nuebar_frac_2d->GetZaxis()->SetRangeUser(0, 1);
603 nom_nuebar_frac_2d->SetMarkerColor(kWhite);
604 nom_nuebar_frac_2d->GetXaxis()->SetTitle(
"True cos#theta_{e}");
605 nom_nuebar_frac_2d->GetYaxis()->SetTitle(
"True Electron Energy (GeV)");
607 nom_nuebar_frac_2d->Draw(
"colz text");
609 c->Print(
TString::Format(
"%s/%s_nuebar_fraction_2d.pdf", plot_dump.c_str(),
"electron_kin").Data());
616 std::map<std::string, TH1*> req_pot_1d;
617 std::map<std::string, TH1*> req_pot_2d;
618 std::map<std::string, TH1*> req_pot_wrt_prod5;
619 auto target_uncert = 0.01;
620 for(
auto loader_it = loaders.begin(); loader_it != loaders.end(); loader_it++) {
621 req_pot_1d[loader_it->first] = (TH1*) nuebar_fractions.at(
"electron_kin").at(loader_it->first)->Clone(
UniqueName().c_str());
622 req_pot_1d.at(loader_it->first)->Reset();
624 for(
auto i = 1;
i <= req_pot_1d.at(loader_it->first)->GetNbinsX();
i++) {
625 double s = nuebar_fractions.at(
"electron_kin").at(loader_it->first)->GetBinContent(
i);
626 double n = hists.at(
"electron_kin").at(
"nunubar").at(loader_it->first)->GetBinContent(
i);
627 double pot = pots.at(loader_it->first);
629 if(s != 0. && s != 1)
630 req_pot_1d.at(loader_it->first)->SetBinContent(
i, (1+s)/s *
std::pow(target_uncert, -2) * pot / n);
634 req_pot_2d[loader_it->first] =
ToTH2Helper(std::unique_ptr<TH1>((TH1*) req_pot_1d.at(loader_it->first)->Clone(
UniqueName().c_str())),
637 req_pot_wrt_prod5[loader_it->first] = (TH1*) req_pot_2d.at(loader_it->first)->Clone(
UniqueName().c_str());
638 req_pot_wrt_prod5.at(loader_it->first)->Scale(1./pots.at(loader_it->first));
641 gStyle->SetPaintTextFormat(
"1.1g");
642 gStyle->SetPalette(kDeepSea);
644 req_pot_2d.at(loader_it->first)->SetTitle(
TString::Format(
"Required MC POT (%.1f%% Stat. Uncert)", target_uncert * 100));
645 req_pot_2d.at(loader_it->first)->GetXaxis()->SetRangeUser(0.85, 1);
646 req_pot_2d.at(loader_it->first)->GetYaxis()->SetRangeUser(0, 6);
647 req_pot_2d.at(loader_it->first)->SetMarkerColor(kWhite);
648 req_pot_2d.at(loader_it->first)->GetXaxis()->SetTitle(
"True cos#theta_{e}");
649 req_pot_2d.at(loader_it->first)->GetYaxis()->SetTitle(
"True Electron Energy (GeV)");
650 req_pot_2d.at(loader_it->first)->GetZaxis()->SetRangeUser(1e15, 1e25);
652 req_pot_2d.at(loader_it->first)->Draw(
"colz text");
655 c->Print(
TString::Format(
"%s/req_pot_%s.pdf", plot_dump.c_str(), loader_it->first.c_str()).Data());
657 req_pot_wrt_prod5.at(loader_it->first)->SetTitle(
"Required MC POT / Prod5 POT");
658 req_pot_wrt_prod5.at(loader_it->first)->GetXaxis()->SetRangeUser(0.85, 1);
659 req_pot_wrt_prod5.at(loader_it->first)->GetYaxis()->SetRangeUser(0, 6);
660 req_pot_wrt_prod5.at(loader_it->first)->SetMaximum(500);
661 req_pot_wrt_prod5.at(loader_it->first)->SetMarkerColor(kWhite);
662 req_pot_wrt_prod5.at(loader_it->first)->GetXaxis()->SetTitle(
"True cos#theta_{e}");
663 req_pot_wrt_prod5.at(loader_it->first)->GetYaxis()->SetTitle(
"True Electron Energy (GeV)");
664 MovePalette(req_pot_wrt_prod5.at(loader_it->first));
665 req_pot_wrt_prod5.at(loader_it->first)->Draw(
"colz text");
668 gStyle->SetPaintTextFormat(
".1f");
670 c->Print(
TString::Format(
"%s/req_pot_wrt_prod5%s.pdf", plot_dump.c_str(), loader_it->first.c_str()).Data());
676 auto kNuebarColor =
kGreen;
677 auto kNueColor = kMagenta;
679 for(
auto loader_it = loaders.begin(); loader_it != loaders.end(); loader_it++) {
683 leg =
new TLegend(0.6, 0.89, 0.8, 0.7);
685 THStack * stack =
new THStack(
UniqueName().c_str(),
"");
686 hists.at(
axis).at(
"nue") .at(loader_it->first)->SetFillColor(kNueColor);
687 hists.at(
axis).at(
"nuebar").at(loader_it->first)->SetFillColor(kNuebarColor);
688 hists.at(
axis).at(
"nue") .at(loader_it->first)->SetLineColor(kBlack);
689 hists.at(
axis).at(
"nuebar").at(loader_it->first)->SetLineColor(kBlack);
690 hists.at(
axis).at(
"nue") .at(loader_it->first)->SetLineStyle(1);
691 hists.at(
axis).at(
"nuebar").at(loader_it->first)->SetLineStyle(1);
693 stack->Add(hists.at(
axis).at(
"nue" ).at(loader_it->first));
694 stack->Add(hists.at(
axis).at(
"nuebar").at(loader_it->first));
695 leg->AddEntry(hists.at(
axis).at(
"nue" ).at(loader_it->first),
"#nu_{e}" ,
"f");
696 leg->AddEntry(hists.at(
axis).at(
"nuebar").at(loader_it->first),
"#bar{#nu}_{e}",
"f");
700 stack->GetXaxis()->SetRangeUser(0,
xmax.at(
axis));
701 stack->GetXaxis()->SetTitle(hists.at(
axis).at(
"nue").at(loader_it->first)->GetXaxis()->GetTitle());
702 stack->GetYaxis()->SetTitle(
"Events");
707 loader_it->first.c_str()).Data());
718 for(
auto x = 1;
x <= hist->GetNbinsX();
x++) {
719 for(
auto y = 1;
y <= hist->GetNbinsY();
y++) {
720 for(
auto z = 1;
z <= hist->GetNbinsZ();
z++) {
721 auto val = hist->GetBinContent(
x,
y,
z);
733 for(
auto ihist = 0
u; ihist <
hists.size(); ihist++)
736 TCanvas *
c =
new TCanvas();
737 nominal->GetYaxis()->SetRangeUser(0, 1.2 * maxy);
738 nominal->SetLineColor(
kBlue);
739 nominal->SetTitle(title.c_str());
741 nominal->Draw(
"hist");
743 for(
auto ihist = 0
u; ihist <
hists.size(); ihist++)
748 for(
auto x = 1;
x <= nominal->GetNbinsX();
x++) {
749 nominal->SetBinError(
x,
std::abs(error->GetBinContent(
x) - nominal->GetBinContent(
x)));
751 nominal->Draw(
"hist same e1");
754 nominal->Draw(
"hist same");
757 c->Print(name.c_str());
763 TCanvas *
c =
new TCanvas();
764 c->SetRightMargin(0.2);
765 std::map<std::string, TH1*> hists2d;
769 for(
auto syst : to_plot) {
770 hists2d[syst] =
ToTH2Helper(std::unique_ptr<TH1>((TH1*) systs.at(syst)->Clone(
UniqueName().c_str())),
775 for(
auto hist_it = hists2d.begin(); hist_it != hists2d.end(); hist_it++) {
776 hist_it->second->SetTitle(
"");
777 hist_it->second->GetXaxis()->SetTitle(
"True cos#theta_{e}");
778 hist_it->second->GetYaxis()->SetTitle(
"True Electron Energy (GeV)");
779 hist_it->second->GetXaxis()->SetRangeUser(0.85, 1);
780 hist_it->second->GetYaxis()->SetRangeUser(0, 6);
781 hist_it->second->SetMaximum(1);
782 hist_it->second->SetMarkerColor(kWhite);
784 hist_it->second->Draw(
"colz text");
785 c->Print((basename +
"_" + hist_it->first +
".pdf").c_str());
791 TCanvas *
c =
new TCanvas();
792 TLegend *
leg =
new TLegend();
796 for(
auto syst : to_plot)
797 maxy =
std::max(maxy, systs.at(syst)->GetMaximum());
799 maxy =
std::max(maxy, h1->GetMaximum());
803 h1->GetXaxis()->SetRangeUser(0, xmax);
805 h1->GetYaxis()->SetRangeUser(0, maxy * 1.2);
806 h1->SetLineColor(kBlack);
808 leg->AddEntry(h1, h1_label.c_str(),
"l");
810 for(
auto syst : to_plot ) {
811 if(syst ==
"nominal")
continue;
812 systs.at(syst)->SetLineColor(
syst_styles.at(syst).color);
813 systs.at(syst)->SetLineStyle(
syst_styles.at(syst).line_style);
814 leg->AddEntry(systs.at(syst), syst.c_str(),
"l");
815 systs.at(syst)->Draw(
"hist same");
817 h1->Draw(
"hist same");
819 c->Print(name.c_str());
824 auto NX = up->GetNbinsX();
825 auto NY = up->GetNbinsY();
826 auto NZ = up->GetNbinsZ();
827 for(
auto x = 1;
x <= NX;
x++) {
828 for(
auto y = 1;
y <= NY;
y++) {
829 for(
auto z = 1;
z <= NZ;
z++) {
830 auto nom = nominal->GetBinContent(
x,
y,
z);
831 auto shift_up =
std::abs(nom - up->GetBinContent(
x,
y,
z));
832 auto shift_down =
std::abs(nom - down->GetBinContent(
x,
y,
z));
834 ret->SetBinContent(
x,
y,
z,
std::max(shift_up, shift_down) + nom);
845 auto palette = (TPaletteAxis*) hist->GetListOfFunctions()->FindObject(
"palette");
846 palette->SetX1NDC(0.81);
847 palette->SetX2NDC(0.85);
T max(const caf::Proxy< T > &a, T b)
_HistAxis< Var > HistAxis
Cuts and Vars for the 2020 FD DiF Study.
std::map< std::string, double > xmax
TH2 * ToTH2(const TH1 *h, const HistAxis &xaxis, const HistAxis &yaxis)
const BeamSyst kBeamTarget((FindCAFAnaDir()+"/data/beam/TABeamSyst_2018Dec11.root"),"7mmTargetZ","+/- 7mm Target z Position")
Target z position shift +/-7mm.
Spectrum * GetPlusOneSigmaShift(const Spectrum *)
const ana::Binning eelecbins
Simple record of shifts applied to systematic parameters.
std::vector< std::string > beam_systs
const BeamSyst kBeamHornCurrent((FindCAFAnaDir()+"/data/beam/TABeamSyst_2018Dec11.root"),"2kA","2kAHornCurrent","+/- 2kA Horn Current")
Horn Current +/-2kA.
const ana::Binning costhetabins
void Plot2D(TH1 *total, std::map< std::string, TH1 * > systs, std::vector< std::string > to_plot, std::string basename)
const std::string PROD5_MC_RHC_LIGHT_UP
const std::string PROD5_MC_RHC_CALIB_DOWN
const ana::HistAxis kTrueElectronEVsCosStandardAxis
const std::string PROD5_MC_RHC_LIGHT_DOWN
std::unique_ptr< T > LoadFrom(TDirectory *dir, const std::string &label)
Spectrum * GetMinusOneSigmaShift(const Spectrum *)
std::vector< Var > GetkPPFXFluxUnivWgt()
const BeamSyst kBeamGeomWater((FindCAFAnaDir()+"/data/beam/TABeamSyst_2018Dec11.root"),"1mmHornWater","+/- 1mm water on Horn 1")
Water layer on horn 1: +/- 1mm.
std::vector< const ISyst * > getAllXsecSysts_2020()
const BeamSyst kBeamH1PosX((FindCAFAnaDir()+"/data/beam/TABeamSyst_2018Dec11.root"),"3mmHorn1X","+/- 3mm Horn 1 X Position")
Horn 1 and 2 position +-3mm in X and Y separately.
void MovePalette(TH1 *hist)
void Plot1D(TH1 *h1, std::string h1_label, std::map< std::string, TH1 * > systs, std::vector< std::string > to_plot, std::string name, double xmax=-1)
const std::string PROD5_MC_RHC_NOMINAL
void wrong_sign_uncertainty(bool make_plots=true, std::string input_file_name="/nova/ana/users/ddoyle/NuebarCCInc/WrongSign/wrong_sign_uncertainty.root", std::string plot_dump="/nova/ana/users/ddoyle/NuebarCCInc/WrongSign/plots")
const std::string PROD5_MC_RHC_CALIB_UP
const std::string PROD5_MC_RHC_CALIB_SHAPE
std::vector< float > Spectrum
std::map< std::string, nuebarccinc::Style > syst_styles
const ana::Cut kPreselectionLoose
const double kAna2020RHCPOT
const std::string PROD5_MC_RHC_CHERENKOV
const SystShifts kNoShift
const BeamSyst kBeamPosY((FindCAFAnaDir()+"/data/beam/TABeamSyst_2018Dec11.root"),"1mmBeamShiftY","Beam Position Y")
const ana::HistAxis kTrueQ2StandardAxis
const BeamSyst kBeamH1PosY((FindCAFAnaDir()+"/data/beam/TABeamSyst_2018Dec11.root"),"3mmHorn1Y","+/- 3mm Horn 1 Y Position")
Collaborates with Spectrum and OscillatableSpectrum to fill spectra from CAF files.
const BeamSyst kBeamSpotSize((FindCAFAnaDir()+"/data/beam/TABeamSyst_2018Dec11.root"),"0.2mmBeamSpotSize","0p2mmBeamSpotSize"," 1.3 +/- 0.2 mm Spot Size")
Beam Spot Size 1.3 +/- 0.2 mm both XY.
const BeamSyst kBeamH2PosX((FindCAFAnaDir()+"/data/beam/TABeamSyst_2018Dec11.root"),"3mmHorn2X","+/- 3mm Horn 2 X Position")
std::vector< SystShifts > GetSystShifts()
const std::vector< TH1 * > GetUniversesHist()
TH2 * ToTH2Helper(std::unique_ptr< TH1 > h1, const Binning &binsx, const Binning &binsy, ana::EBinType bintype)
Helper for ana::ToTH2.
const BeamSyst kBeamPosX((FindCAFAnaDir()+"/data/beam/TABeamSyst_2018Dec11.root"),"1mmBeamShiftX","Beam Position X")
Beam position on target +-1 mm, X/Y separately.
const ana::Cut kMuonIDProd4Cut
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)
void PlotMultiverse(Multiverse &mv, TH1 *nominal, std::string title, std::string name, TH1 *error=0)
const BeamSyst kBeamH2PosY((FindCAFAnaDir()+"/data/beam/TABeamSyst_2018Dec11.root"),"3mmHorn2Y","+/- 3mm Horn 2 Y Position")
const BeamSyst kBeamMagField((FindCAFAnaDir()+"/data/beam/TABeamSyst_2018Dec11.root"),"Magnetic Field in Decay Pipe","MagnFieldDecayPipe","Magnetic Field in Decay Pipe")
Constant magnetic field in decay pipe.
const ana::HistAxis kTrueNeutrinoEnergyStandardAxis
TH1 * MostConservative(TH1 *up, TH1 *down, TH1 *nominal)
void make_plots(TFile *f, TH2 *hVsRun, TGraph *g, int run, std::string suffix, double xpos, TH2 *&cut)
std::string UniqueName()
Return a different string each time, for creating histograms.
void Divide(Multiverse &, bool=false)
std::vector< std::string > all_systs
std::map< string, const ana::BeamSyst * > beamSystematics