Nus18SystsGENIEAna.C
Go to the documentation of this file.
1 /////////////////////////////////////////////////////////////////////
2 // GENIE systematics for Nus18
3 //
4 // Author: Sijith Edayath
5 // Modified by Mike Wallbank (wallbank@fnal.gov)
6 /////////////////////////////////////////////////////////////////////
7 
12 #include "CAFAna/Systs/Systs.h"
14 #include "CAFAna/Systs/XSecSysts.h"
16 #include "CAFAna/Vars/HistAxes.h"
17 #include "NuXAna/Vars/HistAxes.h"
18 
21 
22 using namespace ana;
23 
29  name = n;
30  label = l;
31  }
32 };
33 
34 /// Get GENIE systematics labels
35 std::map<std::string, std::pair<GENIEWeightLabel, rwgt::ReweightLabel_t> > GetGENIEShiftLabels();
36 
37 /// Get cross-section systematics labels
38 std::map<std::string, std::pair<GENIEWeightLabel, rwgt::ReweightLabel_t> > GetXSecShiftLabels();
39 
41 
42  TH1::AddDirectory(0);
43 
44  // Set up path to file with filled CAFAna objects and for output of analysis
45  std::string fileName = inFile.substr(0, inFile.find(".root"));
46  std::string saveName = fileName + "_ana.root";
47  std::string textName = fileName + "_ana.txt";
48 
49  // Get options
50  std::string polarity = "";
51  bool extrap = false;
52  if (opt.Contains("rhc", TString::kIgnoreCase) and
53  !opt.Contains("fhc", TString::kIgnoreCase))
54  polarity = "rhc";
55  else if (opt.Contains("fhc", TString::kIgnoreCase) and
56  !opt.Contains("rhc", TString::kIgnoreCase))
57  polarity = "fhc";
58  else {
59  std::cout << "Flux required: fhc or rhc" << std::endl;
60  abort();
61  }
62  if (opt.Contains("extrap", TString::kIgnoreCase))
63  extrap = true;
64 
65  // Specific GENIE options
66  bool genie_nd = true, genie_fd = true;
67  bool genie_nova = true, genie_general = true;
68  if (opt.Contains("nd", TString::kIgnoreCase) and
69  !opt.Contains("fd", TString::kIgnoreCase))
70  genie_fd = false;
71  if (opt.Contains("fd", TString::kIgnoreCase) and
72  !opt.Contains("nd", TString::kIgnoreCase))
73  genie_nd = false;
74  if (opt.Contains("NoPred", TString::kIgnoreCase)) {
75  genie_nd = false;
76  genie_fd = false;
77  }
78  if (opt.Contains("1", TString::kIgnoreCase) and
79  !opt.Contains("2", TString::kIgnoreCase))
80  genie_general = false;
81  if (opt.Contains("2", TString::kIgnoreCase) and
82  !opt.Contains("1", TString::kIgnoreCase))
83  genie_nova = false;
84 
85  double kNDScale, kFDScale;
86  if (polarity == "fhc") {
87  kNDScale = kAna2018RHCNDPOT;
88  kFDScale = kAna2018RHCPOT;
89  } else if (polarity == "rhc") {
90  kNDScale = kAna2018FHCNDPOT;
91  kFDScale = kAna2018FHCPOT;
92  }
93 
94  // Get the labels for GENIE systematics
95  std::map<std::string, std::pair<GENIEWeightLabel, rwgt::ReweightLabel_t> > genieLabels;
96  if (genie_nova)
97  genieLabels = GetGENIEShiftLabels();
98 
99  // Get the labels for the cross-section systematics
100  std::map<std::string, std::pair<GENIEWeightLabel, rwgt::ReweightLabel_t> > xsecLabels;
101  if (genie_general)
102  xsecLabels = GetXSecShiftLabels();
103 
104  // A map of systematic labels
105  std::map<std::string, GENIEWeightLabel> shiftLabels;
106  for (const auto& genieLabel : genieLabels)
107  shiftLabels[genieLabel.first] = genieLabel.second.first;
108  for (const auto& xsecLabel : xsecLabels)
109  shiftLabels[xsecLabel.first] = xsecLabel.second.first;
110 
111  // Get the vector of samples to analyse
112  std::vector<std::string> cut_samples;
113  cut_samples.push_back("Nus18");
114 
115  // Set up maps to the decompositions/predictions (each flavor component)
116  // Nominal maps are indexed purely by sample label
117  // Shifted maps are indexed by sample label, systematic label, then sigma of the shift
118  std::map<std::string, NDPredictionSterile*> predsND_nominal;
119  std::map<std::string, FDPredictionSterile*> predsFD_nominal;
120  std::map<std::string, PredictionSterile*> predsExtrap_nominal;
121  std::map<std::string, std::map<std::string, std::map<int, NDPredictionSterile*> > > predsND_shifted;
122  std::map<std::string, std::map<std::string, std::map<int, FDPredictionSterile*> > > predsFD_shifted;
123  std::map<std::string, std::map<std::string, std::map<int, PredictionSterile*> > > predsExtrap_shifted;
124 
125  // Fill the maps from the data in the input file
126  TFile* rootL = new TFile(inFile.c_str(), "READ");
127  if (genie_nd)
128  LoadMaps(rootL, &predsND_nominal, &predsND_shifted);
129  if (genie_fd)
130  LoadMaps(rootL, &predsFD_nominal, &predsFD_shifted);
131  if (extrap)
132  LoadMaps(rootL, &predsExtrap_nominal, &predsExtrap_shifted);
133  rootL->Close();
134 
135  // Get output files
136  TFile* rootF = new TFile(saveName.c_str(), "RECREATE");
137  FILE* textF;
138  textF = fopen(textName.c_str(), "w+");
139 
140  // Look through all samples
141  for (const auto& sample : cut_samples) {
142 
143  strings strs;
144  strs.fComponent = "NC";
145  strs.fDet = "ND";
146  strs.fPOT = Form("%f", kNDScale);
147  strs.fSample = sample;
148  strs.fSystType = "GENIE";
149  strs.fXLabel = kNus18AxisE.GetLabels()[0];
150 
151  InitializeSystText(textF, strs);
152 
153  // Get nominal spectra
154  TH1 *hNomNC_predND, *hNomBG_predND;
155  if (genie_nd) {
156  hNomNC_predND = GetNC(predsND_nominal[sample], kNDScale);
157  hNomBG_predND = GetBG(predsND_nominal[sample], kNDScale);
158  }
159  TH1 *hNomNC_predFD, *hNomBG_predFD;
160  if (genie_fd) {
161  hNomNC_predFD = GetNC(predsFD_nominal[sample], kFDScale);
162  hNomBG_predFD = GetBG(predsFD_nominal[sample], kFDScale);
163  }
164  TH1 *hNomNC_predExtrap, *hNomBG_predExtrap;
165  if (extrap) {
166  hNomNC_predExtrap = GetNC(predsExtrap_nominal[sample], kFDScale);
167  hNomBG_predExtrap = GetBG(predsExtrap_nominal[sample], kFDScale);
168  }
169 
170  // Look through all systematic shifts
171  for (const auto& shifts : shiftLabels) {
172 
173  strs.fSystS = shifts.second.name;
174  strs.fSystL = shifts.second.label;
175 
176  if (genie_nd) {
177  strs.fDet = "ND";
178  strs.fComponent = "NC";
179  PlotSyst(hNomNC_predND,
180  predsND_shifted[sample][shifts.first],
181  rootF, textF, strs, kNDScale, true, false);
182 
183  strs.fComponent = "BG";
184  PlotSyst(hNomBG_predND,
185  predsND_shifted[sample][shifts.first],
186  rootF, textF, strs, kNDScale, false, false);
187  }
188 
189  if (genie_fd) {
190  strs.fDet = "FD";
191  strs.fComponent = "NC";
192  PlotSyst(hNomNC_predFD,
193  predsFD_shifted[sample][shifts.first],
194  rootF, textF, strs, kFDScale, true, false);
195 
196  strs.fComponent = "BG";
197  PlotSyst(hNomBG_predFD,
198  predsFD_shifted[sample][shifts.first],
199  rootF, textF, strs, kFDScale, false, false);
200  }
201 
202  if (extrap) {
203  strs.fDet = "EX";
204  strs.fComponent = "NC";
205  PlotSyst(hNomNC_predExtrap,
206  predsExtrap_shifted[sample][shifts.first],
207  rootF, textF, strs, kFDScale, true, false);
208 
209  strs.fComponent = "BG";
210  PlotSyst(hNomBG_predExtrap,
211  predsExtrap_shifted[sample][shifts.first],
212  rootF, textF, strs, kFDScale, false, false);
213  }
214 
215  }
216 
217  if (genie_nd) {
218  strs.fDet = "ND";
219  strs.fComponent = "NC";
220  PlotSystBand(hNomNC_predND, rootF, textF, strs);
221 
222  strs.fComponent = "BG";
223  PlotSystBand(hNomBG_predND, rootF, textF, strs);
224  }
225 
226  if (genie_fd) {
227  strs.fDet = "FD";
228  strs.fComponent = "NC";
229  PlotSystBand(hNomNC_predFD, rootF, textF, strs);
230 
231  strs.fComponent = "BG";
232  PlotSystBand(hNomBG_predFD, rootF, textF, strs);
233  }
234 
235  if (extrap) {
236  strs.fDet = "EX";
237  strs.fComponent = "NC";
238  PlotSystBand(hNomNC_predExtrap, rootF, textF, strs);
239 
240  strs.fComponent = "BG";
241  PlotSystBand(hNomBG_predExtrap, rootF, textF, strs);
242  }
243 
244  }
245 
246  fclose(textF);
247  rootF->Close();
248 
249  std::cout << "Finished. Ctrl+Z should be safe if the macro didn't quit." << std::endl;
250 
251 }
252 
253 std::map<std::string, std::pair<GENIEWeightLabel, rwgt::ReweightLabel_t> > GetGENIEShiftLabels() {
254 
255  std::map<std::string, rwgt::ReweightLabel_t> shiftlabels;
256 
257  shiftlabels["ReweightMaNCEL"] = rwgt::fReweightMaNCEL;
258  shiftlabels["ReweightEtaNCEL"] = rwgt::fReweightEtaNCEL;
259  // shiftlabels["ReweightCCQEPauliSupViaKF"] = rwgt::fReweightCCQEPauliSupViaKF;
260  shiftlabels["ReweightVecCCQEshape"] = rwgt::fReweightVecCCQEshape;
261  // shiftlabels["ReweightCCQEMomDistroFGtoSF"] = rwgt::fReweightCCQEMomDistroFGtoSF;
262  shiftlabels["ReweightMaCCRES"] = rwgt::fReweightMaCCRES;
263  shiftlabels["ReweightMvCCRES"] = rwgt::fReweightMvCCRES;
264  shiftlabels["ReweightMaNCRES"] = rwgt::fReweightMaNCRES;
265  shiftlabels["ReweightMvNCRES"] = rwgt::fReweightMvNCRES;
266  shiftlabels["ReweightMaCOHpi"] = rwgt::fReweightMaCOHpi;
267  shiftlabels["ReweightR0COHpi"] = rwgt::fReweightR0COHpi;
268  shiftlabels["ReweightAhtBY"] = rwgt::fReweightAhtBY;
269  shiftlabels["ReweightBhtBY"] = rwgt::fReweightBhtBY;
270  shiftlabels["ReweightCV1uBY"] = rwgt::fReweightCV1uBY;
271  shiftlabels["ReweightCV2uBY"] = rwgt::fReweightCV2uBY;
272  // shiftlabels["ReweightAhtBYshape"] = rwgt::fReweightAhtBYshape;
273  // shiftlabels["ReweightBhtBYshape"] = rwgt::fReweightBhtBYshape;
274  // shiftlabels["ReweightCV1uBYshape"] = rwgt::fReweightCV1uBYshape;
275  // shiftlabels["ReweightCV2uBYshape"] = rwgt::fReweightCV2uBYshape;
276  shiftlabels["ReweightNormDISCC"] = rwgt::fReweightNormDISCC;
277  shiftlabels["ReweightRnubarnuCC"] = rwgt::fReweightRnubarnuCC;
278  shiftlabels["ReweightDISNuclMod"] = rwgt::fReweightDISNuclMod;
279  shiftlabels["ReweightNC"] = rwgt::fReweightNC;
280  shiftlabels["ReweightAGKY_xF1pi"] = rwgt::fReweightAGKY_xF1pi;
281  shiftlabels["ReweightAGKY_pT1pi"] = rwgt::fReweightAGKY_pT1pi;
282  shiftlabels["ReweightFormZone"] = rwgt::fReweightFormZone;
283  // shiftlabels["ReweightTheta_Delta2Npi"] = rwgt::fReweightTheta_Delta2Npi;
284  // shiftlabels["ReweightBR1gamma"] = rwgt::fReweightBR1gamma;
285  // shiftlabels["ReweightBR1eta"] = rwgt::fReweightBR1eta;
286  shiftlabels["ReweightMFP_pi"] = rwgt::fReweightMFP_pi;
287  shiftlabels["ReweightMFP_N"] = rwgt::fReweightMFP_N;
288  shiftlabels["ReweightFrCEx_pi"] = rwgt::fReweightFrCEx_pi;
289  shiftlabels["ReweightFrElas_pi"] = rwgt::fReweightFrElas_pi;
290  shiftlabels["ReweightFrInel_pi"] = rwgt::fReweightFrInel_pi;
291  shiftlabels["ReweightFrAbs_pi"] = rwgt::fReweightFrAbs_pi;
292  shiftlabels["ReweightFrPiProd_pi"] = rwgt::fReweightFrPiProd_pi;
293  shiftlabels["ReweightFrCEx_N"] = rwgt::fReweightFrCEx_N;
294  shiftlabels["ReweightFrElas_N"] = rwgt::fReweightFrElas_N;
295  shiftlabels["ReweightFrInel_N"] = rwgt::fReweightFrInel_N;
296  shiftlabels["ReweightFrAbs_N"] = rwgt::fReweightFrAbs_N;
297  shiftlabels["ReweightFrPiProd_N"] = rwgt::fReweightFrPiProd_N;
298  shiftlabels["ReweightCCQEPauliSupViaKF"] = rwgt::fReweightCCQEPauliSupViaKF;
299  shiftlabels["ReweightCCQEMomDistroFGtoSF"] = rwgt::fReweightCCQEMomDistroFGtoSF;
300  shiftlabels["ReweightBR1gamma"] = rwgt::fReweightBR1gamma;
301  shiftlabels["ReweightBR1eta"] = rwgt::fReweightBR1eta;
302  shiftlabels["ReweightTheta_Delta2Npi"] = rwgt::fReweightTheta_Delta2Npi;
303 
304  std::map<std::string, std::pair<GENIEWeightLabel, rwgt::ReweightLabel_t> > shiftlabelsmap;
305  for (const auto& label : shiftlabels) {
306  const ISyst* syst = GetGenieKnobSyst(label.second);
307  GENIEWeightLabel genie_label(syst->ShortName(), syst->LatexName());
308  shiftlabelsmap[label.first] = std::make_pair(genie_label, label.second);
309  }
310 
311  return shiftlabelsmap;
312 
313 }
314 
315 std::map<std::string, std::pair<GENIEWeightLabel, rwgt::ReweightLabel_t> > GetXSecShiftLabels() {
316 
317  std::map<std::string, GENIEWeightLabel> shiftlabels;
318 
319  shiftlabels["PD3_MAQAGenieReducedSyst2018"] = GENIEWeightLabel("MAQAGenieReduced", "MAQAGenieReduced Weight");
320  shiftlabels["PD3_RPACCQEEnhSyst2018"] = GENIEWeightLabel("RPACCQEEnh", "RPACCQEEnh Weight");
321  shiftlabels["PD3_RPACCQESuppSyst2018"] = GENIEWeightLabel("RPACCQESupp", "RPACCQESupp Weight");
322  shiftlabels["PD3_RPARESSyst2018"] = GENIEWeightLabel("RPARES", "RPARES Weight");
323  shiftlabels["PD3_MECEShapeSyst2018Nu"] = GENIEWeightLabel("MECEShapeNu", "MECEShape Neutrino Weight");
324  shiftlabels["PD3_MECEShapeSyst2018AntiNu"] = GENIEWeightLabel("MECEShapeAntiNu", "MECEShape Anti Neutrino Weight");
325  shiftlabels["PD3_MECEnuShapeSyst2018Nu"] = GENIEWeightLabel("MECEShapeNu", "MECEnuShape Neutrino Weight");
326  shiftlabels["PD3_MECEnuShapeSyst2018AntiNu"] = GENIEWeightLabel("MECEnuShapeAntiNu", "MECEnuShape Anti Neutrino Weight");
327  // shiftlabels["PD3_MECq0ShapeSyst2018"] = GENIEWeightLabel("MECq0Shape", "MECq0Shape Weight");
328  shiftlabels["PD3_MECInitStateNPFracSyst2018Nu"] = GENIEWeightLabel("MECInitStateNPFracNu", "MECInitStateNPFrac Neutrino Weight");
329  shiftlabels["PD3_MECInitStateNPFracSyst2018AntiNu"] = GENIEWeightLabel("MECInitStateNPFracAntiNu", "MECInitStateNPFrac Anti Neutrino Weight");
330  // shiftlabels["PD3_MECEnuShapeSyst2018"] = GENIEWeightLabel("MECEnuShape", "MECEnuShape Weight");
331  shiftlabels["PD3_DISvpCC0pi"] = GENIEWeightLabel("DISvpCC0pi", "DISvpCC0pi Weight");
332  shiftlabels["PD3_DISvpCC1pi"] = GENIEWeightLabel("DISvpCC1pi", "DISvpCC1pi Weight");
333  shiftlabels["PD3_DISvpCC2pi"] = GENIEWeightLabel("DISvpCC2pi", "DISvpCC2pi Weight");
334  shiftlabels["PD3_DISvpCC3pi"] = GENIEWeightLabel("DISvpCC3pi", "DISvpCC3pi Weight");
335  shiftlabels["PD3_DISvpNC0pi"] = GENIEWeightLabel("DISvpNC0pi", "DISvpNC0pi Weight");
336  shiftlabels["PD3_DISvpNC1pi"] = GENIEWeightLabel("DISvpNC1pi", "DISvpNC1pi Weight");
337  shiftlabels["PD3_DISvpNC3pi"] = GENIEWeightLabel("DISvpNC3pi", "DISvpNC3pi Weight");
338  shiftlabels["PD3_DISvnCC0pi"] = GENIEWeightLabel("DISvnCC0pi", "DISvnCC0pi Weight");
339  shiftlabels["PD3_DISvnCC1pi"] = GENIEWeightLabel("DISvnCC1pi", "DISvnCC1pi Weight");
340  shiftlabels["PD3_DISvnCC2pi"] = GENIEWeightLabel("DISvnCC2pi", "DISvnCC2pi Weight");
341  shiftlabels["PD3_DISvnCC3pi"] = GENIEWeightLabel("DISvnCC3pi", "DISvnCC3pi Weight");
342  shiftlabels["PD3_DISvnNC0pi"] = GENIEWeightLabel("DISvnNC0pi", "DISvnNC0pi Weight");
343  shiftlabels["PD3_DISvnNC1pi"] = GENIEWeightLabel("DISvnNC1pi", "DISvnNC1pi Weight");
344  shiftlabels["PD3_DISvnNC2pi"] = GENIEWeightLabel("DISvnNC2pi", "DISvnNC2pi Weight");
345  shiftlabels["PD3_DISvnNC3pi"] = GENIEWeightLabel("DISvnNC3pi", "DISvnNC3pi Weight");
346  shiftlabels["PD3_DISvbarpCC0pi"] = GENIEWeightLabel("DISvbarpCC0pi", "DISvbarpCC0pi Weight");
347  shiftlabels["PD3_DISvbarpCC1pi"] = GENIEWeightLabel("DISvbarpCC1pi", "DISvbarpCC1pi Weight");
348  shiftlabels["PD3_DISvbarpCC2pi"] = GENIEWeightLabel("DISvbarpCC2pi", "DISvbarpCC2pi Weight");
349  shiftlabels["PD3_DISvbarpCC3pi"] = GENIEWeightLabel("DISvbarpCC3pi", "DISvbarpCC3pi Weight");
350  shiftlabels["PD3_DISvbarpNC0pi"] = GENIEWeightLabel("DISvbarpNC0pi", "DISvbarpNC0pi Weight");
351  shiftlabels["PD3_DISvbarpNC1pi"] = GENIEWeightLabel("DISvbarpNC1pi", "DISvbarpNC1pi Weight");
352  shiftlabels["PD3_DISvbarpNC2pi"] = GENIEWeightLabel("DISvbarpNC2pi", "DISvbarpNC2pi Weight");
353  shiftlabels["PD3_DISvbarpNC3pi"] = GENIEWeightLabel("DISvbarpNC3pi", "DISvbarpNC3pi Weight");
354  shiftlabels["PD3_DISvbarnCC0pi"] = GENIEWeightLabel("DISvbarnCC0pi", "DISvbarnCC0pi Weight");
355  shiftlabels["PD3_DISvbarnCC1pi"] = GENIEWeightLabel("DISvbarnCC1pi", "DISvbarnCC1pi Weight");
356  shiftlabels["PD3_DISvbarnCC2pi"] = GENIEWeightLabel("DISvbarnCC2pi", "DISvbarnCC2pi Weight");
357  shiftlabels["PD3_DISvbarnCC3pi"] = GENIEWeightLabel("DISvbarnCC3pi", "DISvbarnCC3pi Weight");
358  shiftlabels["PD3_DISvbarnNC0pi"] = GENIEWeightLabel("DISvbarnNC0pi", "DISvbarnNC0pi Weight");
359  shiftlabels["PD3_DISvbarnNC1pi"] = GENIEWeightLabel("DISvbarnNC1pi", "DISvbarnNC1pi Weight");
360  shiftlabels["PD3_DISvbarnNC2pi"] = GENIEWeightLabel("DISvbarnNC2pi", "DISvbarnNC2pi Weight");
361  shiftlabels["PD3_DISvbarnNC3pi"] = GENIEWeightLabel("DISvbarnNC3pi", "DISvbarnNC3pi Weight");
362  shiftlabels["PD3_RadCorrNue"] = GENIEWeightLabel("RadCorrNue", "RadCorrNue Weight");
363  shiftlabels["PD3_RadCorrNuebar"] = GENIEWeightLabel("RadCorrNuebar", "RadCorrNuebar Weight");
364  shiftlabels["PD3_k2ndClassCurr"] = GENIEWeightLabel("k2ndClassCurr", "k2ndClassCurr Weight");
365 
366  std::map<std::string, std::pair<GENIEWeightLabel, rwgt::ReweightLabel_t> > shiftlabelsmap;
367  for (const auto& label : shiftlabels)
368  shiftlabelsmap[label.first] = std::make_pair(label.second, rwgt::kReweightNull);
369 
370  return shiftlabelsmap;
371 
372 }
std::string fDet
Definition: PPFXHelper.h:104
fileName
Definition: plotROC.py:78
Cuts and Vars for the 2020 FD DiF Study.
Definition: vars.h:6
std::string fComponent
Definition: PPFXHelper.h:103
virtual const std::string & ShortName() const final
The name printed out to the screen.
Definition: ISyst.h:27
void Nus18SystsGENIEAna(std::string inFile, TString opt)
void PlotSyst(TH1 *h, TH1 *hp1, TH1 *hm1, TH1 *hp2, TH1 *hm2, TDirectory *out, FILE *text, strings strs)
Definition: PPFXHelper.h:662
std::pair< Spectrum *, CheatDecomp * > make_pair(SpectrumLoaderBase &loader_data, SpectrumLoaderBase &loader_mc, HistAxis *axis, Cut *cut, const SystShifts &shift, const Var &wei)
Definition: DataMCLoad.C:336
std::map< std::string, std::pair< GENIEWeightLabel, rwgt::ReweightLabel_t > > GetXSecShiftLabels()
Get cross-section systematics labels.
Encapsulate code to systematically shift a caf::SRProxy.
Definition: ISyst.h:14
std::map< std::string, std::pair< GENIEWeightLabel, rwgt::ReweightLabel_t > > GetGENIEShiftLabels()
Get GENIE systematics labels.
const double kAna2018RHCPOT
Definition: Exposures.h:208
const HistAxis kNus18AxisE("Energy Deposited in Scintillator (GeV)", kNus18EnergyBinning, kNus18Energy)
Axes used in Nus18 analysis by nus group.
Definition: HistAxes.h:16
const char * label
TH1 * GetNC(IDecomp *specs, double POT)
Definition: PPFXHelper.h:211
fclose(fg1)
ifstream inFile
Definition: AnaPlotMaker.h:34
void InitializeSystText(FILE *text, strings strs)
Print some initial text about a systematic – the systematic type and sample.
Definition: PPFXHelper.h:263
std::string fSystL
Definition: PPFXHelper.h:109
std::string fPOT
Definition: PPFXHelper.h:105
OStream cout
Definition: OStream.cxx:6
void PlotSystBand(TH1 *h, TDirectory *out, FILE *text, strings strs)
Definition: PPFXHelper.h:968
virtual const std::string & LatexName() const final
The name used on plots (ROOT&#39;s TLatex syntax)
Definition: ISyst.h:30
std::string fXLabel
Definition: PPFXHelper.h:110
GENIEWeightLabel(std::string n, std::string l)
std::string fSystType
Definition: PPFXHelper.h:107
std::string fSystS
Definition: PPFXHelper.h:108
void LoadMaps(TDirectory *dir, std::map< std::string, IDecomp * > *nominal, std::map< std::string, std::map< std::string, std::map< int, IDecomp * > > > *shifted)
Definition: PPFXHelper.h:273
const double kAna2018FHCPOT
Definition: Exposures.h:207
TH1 * GetBG(IDecomp *specs, double POT)
Definition: PPFXHelper.h:236
const NOvARwgtSyst * GetGenieKnobSyst(rwgt::ReweightLabel_t knobIdx, std::string altName, std::string altLabel)
Convenience function to get a GENIE knob syst. (Allows using the GENIE knob name & description as the...
Definition: XSecSysts.cxx:119
const std::vector< std::string > & GetLabels() const
Definition: LabelsAndBins.h:68
A helper structure to contain a group of string for plotting.
Definition: PPFXHelper.h:101
std::string fSample
Definition: PPFXHelper.h:106
enum BeamMode string