SystsGENIELoad17.C
Go to the documentation of this file.
1 #include "CAFAna/Core/Loaders.h"
4 #include "CAFAna/Cuts/Cuts.h"
5 #include "NuXAna/Cuts/NusCuts.h"
9 #include "CAFAna/Extrap/ExtrapSterile.h"
12 #include "CAFAna/Systs/Systs.h"
17 #include "NuXAna/Vars/HistAxes.h"
19 
20 using namespace ana;
22 {
23  TH1::AddDirectory(0);
24 
27  const std::string fnamenear_conc="defname: prod_caf_R17-03-01-prod3reco.d_nd_genie_nonswap_fhc_nova_v08_full_v1";
28  const std::string fnamefar_conc ="defname: prod_caf_R17-03-01-prod3reco.l_fd_genie_nonswap_fhc_nova_v08_full_v1";
29  const std::string fnameswap_conc="defname: prod_caf_R17-03-01-prod3reco.l_fd_genie_fluxswap_fhc_nova_v08_full_v1";
30  const std::string fnametau_conc="defname: prod_caf_R17-03-01-prod3reco.l_fd_genie_tau_fhc_nova_v08_full_v1";
31 
32 
37 
39 
40  // Vector of sigmas, levels to set each systematic
41  std::vector<int> sigmas{-2, -1, +1, +2};
42 
43 
44  // A map to set up systematics, starting with a label for the systematic,
45  // and finishing with a vector for items necessary to set up the Syst object
46  std::map<std::string, rwgt::ReweightLabel_t> shiftlabels;
47  //
48  shiftlabels["ReweightMaNCEL"] = rwgt::fReweightMaNCEL; // Ma NCEL, affects dsigma(NCEL)/dQ2 both in shape and normalization
49  shiftlabels["ReweightEtaNCEL"] = rwgt::fReweightEtaNCEL; // NCEL strange axial form factor eta, affects dsigma(NCEL)/dQ2 both in shape and normalization
50  // CCQE parameters:
51  shiftlabels["ReweightVecCCQEshape"] = rwgt::fReweightVecCCQEshape; // elastic nucleon form factors (BBA/default -> dipole) - shape only effect of dsigma(CCQE)/dQ2
52 
53  shiftlabels["ReweightCCQEPauliSupViaKF"] = rwgt::fReweightCCQEPauliSupViaKF; //
54  shiftlabels["ReweightCCQEMomDistroFGtoSF"] = rwgt::fReweightCCQEMomDistroFGtoSF; //
55  shiftlabels["ReweightMaCCRES"] = rwgt::fReweightMaCCRES; // Ma CCRES, affects d2sigma(CCRES)/dWdQ2 both in shape and normalization
56  shiftlabels["ReweightMvCCRES"] = rwgt::fReweightMvCCRES; // Mv CCRES, affects d2sigma(CCRES)/dWdQ2 both in shape and normalization
57  shiftlabels["ReweightMaNCRES"] = rwgt::fReweightMaNCRES; // Ma NCRES, affects d2sigma(NCRES)/dWdQ2 both in shape and normalization
58  shiftlabels["ReweightMvNCRES"] = rwgt::fReweightMvNCRES; // Mv NCRES, affects d2sigma(NCRES)/dWdQ2 both in shape and normalization
59 
60  // Coherent pion production parameters:
61  shiftlabels["ReweightMaCOHpi"] = rwgt::fReweightMaCOHpi; // Ma for COH pion production
62  shiftlabels["ReweightR0COHpi"] = rwgt::fReweightR0COHpi; // R0 for COH pion production
63  //
64  shiftlabels["ReweightAhtBY"] = rwgt::fReweightAhtBY; // the Bodek-Yang model parameter A_{ht} - incl. both shape and normalization effect
65  shiftlabels["ReweightBhtBY"] = rwgt::fReweightBhtBY; // the Bodek-Yang model parameter B_{ht} - incl. both shape and normalization effect
66  shiftlabels["ReweightCV1uBY"] = rwgt::fReweightCV1uBY; // the Bodek-Yang model parameter CV1u - incl. both shape and normalization effect
67  shiftlabels["ReweightCV2uBY"] = rwgt::fReweightCV2uBY; // the Bodek-Yang model parameter CV2u - incl. both shape and normalization effect
68  shiftlabels["ReweightAhtBYshape"] = rwgt::fReweightAhtBYshape; // the Bodek-Yang model parameter A_{ht} - shape only effect to d2sigma(DIS)/dxdy
69  shiftlabels["ReweightBhtBYshape"] = rwgt::fReweightBhtBYshape; // the Bodek-Yang model parameter B_{ht} - shape only effect to d2sigma(DIS)/dxdy
70  shiftlabels["ReweightCV1uBYshape"] = rwgt::fReweightCV1uBYshape; // the Bodek-Yang model parameter CV1u - shape only effect to d2sigma(DIS)/dxdy
71  shiftlabels["ReweightCV2uBYshape"] = rwgt::fReweightCV2uBYshape; // the Bodek-Yang model parameter CV2u - shape only effect to d2sigma(DIS)/dxdy
72  shiftlabels["ReweightNormDISCC"] = rwgt::fReweightNormDISCC; // the inclusive DIS CC normalization (not currently working in genie)
73  shiftlabels["ReweightRnubarnuCC"] = rwgt::fReweightRnubarnuCC; // the ratio of \sigma(\bar\nu CC) / \sigma(\nu CC) (not currently working in genie)
74  shiftlabels["ReweightDISNuclMod"] = rwgt::fReweightDISNuclMod; // DIS nuclear modification (shadowing, anti-shadowing, EMC). Not working in GENIE at the moment
75  // NC: general
76  shiftlabels["ReweightNC"] =rwgt::fReweightNC; ///< NC total normalization (currently does nothing, but should retain for future)
77 //
78  // Hadronization (free nucleon target)
79  shiftlabels["ReweightAGKY_xF1pi"] = rwgt::fReweightAGKY_xF1pi; // xF distribution for low multiplicity (N + pi) DIS f/s produced by AGKY
80  shiftlabels["ReweightAGKY_pT1pi"] = rwgt::fReweightAGKY_pT1pi; // pT distribution for low multiplicity (N + pi) DIS f/s produced by AGKY
81  shiftlabels["ReweightFormZone"] = rwgt::fReweightFormZone; // Hadron formation zone
82  // Resonance decays
83  shiftlabels["ReweightTheta_Delta2Npi"] = rwgt::fReweightTheta_Delta2Npi; // distort pi angular distribution in Delta -> N + pi
84  shiftlabels["ReweightBR1gamma"] = rwgt::fReweightBR1gamma; // Resonance -> X + gamma branching ratio, eg Delta+(1232) -> p gamma
85  shiftlabels["ReweightBR1eta"] = rwgt::fReweightBR1eta; // Resonance -> X + eta branching ratio, eg N+(1440) -> p eta
86  // Intranuclear rescattering systematics. There are 2 sets of parameters:
87  // - parameters that control the total rescattering probability, P(total)
88  // - parameters that control the fraction of each process (`fate'), given a total rescat. prob., P(fate|total)
89  // These parameters are considered separately for pions and nucleons.
90  shiftlabels["ReweightMFP_N"] = rwgt::fReweightMFP_N; // mean free path for nucleons
91  shiftlabels["ReweightFrCEx_N"] = rwgt::fReweightFrCEx_N; // charge exchange probability for nucleons, for given total rescattering probability
92  shiftlabels["ReweightFrElas_N"] = rwgt::fReweightFrElas_N; // elastic probability for nucleons, for given total rescattering probability
93  shiftlabels["ReweightFrInel_N"] = rwgt::fReweightFrInel_N; // inelastic probability for nucleons, for given total rescattering probability
94  shiftlabels["ReweightFrAbs_N"] = rwgt::fReweightFrAbs_N; // absorption probability for nucleons, for given total rescattering probability
95  shiftlabels["ReweightFrPiProd_N"] = rwgt::fReweightFrPiProd_N; // pion production probability for nucleons, for given total rescattering probability
96  shiftlabels["ReweightMFP_pi"] = rwgt::fReweightMFP_pi; // mean free path for pions
97  shiftlabels["ReweightFrCEx_pi"] = rwgt::fReweightFrCEx_pi; // charge exchange probability for pions, for given total rescattering probability
98  shiftlabels["ReweightFrElas_pi"] = rwgt::fReweightFrElas_pi; // elastic probability for pions, for given total rescattering probability
99  shiftlabels["ReweightFrInel_pi"] = rwgt::fReweightFrInel_pi; // inelastic probability for pions, for given total rescattering probability
100  shiftlabels["ReweightFrAbs_pi"] = rwgt::fReweightFrAbs_pi; // absorption probability for pions, for given total rescattering probability
101  shiftlabels["ReweightFrPiProd_pi"] = rwgt::fReweightFrPiProd_pi; // pion production probability for pions, for given total rescattering probability
102  // Nuclear model
103 
104  //shiftlabels["ReweightNC"] = rwgt::fReweightNC; //
105 
106  // A map of systematic objects, indexed by the same label as above
107  std::map<std::string, std::map<int, SystShifts*> > systematics;
108 
109  for(const auto& shiftlabel : shiftlabels){
110  for(const auto& sigma : sigmas) {
111  systematics[shiftlabel.first][sigma] = new SystShifts(
112  new GenieRwgtTableSyst(shiftlabel.second), sigma
113  );
114  }
115  }
116 
117  // These two shifts are GENIE systs, but not in the form of reweights as above
118  // Unfortunately they need a rwgt label, so give them the null one.
119  shiftlabels["PD3_MAQAGenieReducedSyst2017"] = rwgt::kReweightNull;
120  shiftlabels["PD3_RPACCQEEnhSyst2017"] = rwgt::kReweightNull;
121  shiftlabels["PD3_RPACCQESuppSyst2017"] = rwgt::kReweightNull;
122  shiftlabels["PD3_RPARESSyst2017"] = rwgt::kReweightNull;
123 shiftlabels["PD3_MECq0ShapeSyst2017"] = rwgt::kReweightNull;
124 shiftlabels["PD3_MECInitStateNPFracSyst2017"] = rwgt::kReweightNull;
125 shiftlabels["PD3_MECEnuShapeSyst2017"] = rwgt::kReweightNull;
126 shiftlabels["PD3_DISvpCC0pi"] = rwgt::kReweightNull;
127 shiftlabels["PD3_DISvpCC1pi"] = rwgt::kReweightNull;
128 shiftlabels["PD3_DISvpCC2pi"] = rwgt::kReweightNull;
129 shiftlabels["PD3_DISvpCC3pi"] = rwgt::kReweightNull;
130 shiftlabels["PD3_DISvpNC0pi"] = rwgt::kReweightNull;
131 shiftlabels["PD3_DISvpNC1pi"] = rwgt::kReweightNull;
132 shiftlabels["PD3_DISvpNC2pi"] = rwgt::kReweightNull;
133 shiftlabels["PD3_DISvpNC3pi"] = rwgt::kReweightNull;
134 shiftlabels["PD3_DISvnCC0pi"] = rwgt::kReweightNull;
135 shiftlabels["PD3_DISvnCC1pi"] = rwgt::kReweightNull;
136 shiftlabels["PD3_DISvnCC2pi"] = rwgt::kReweightNull;
137 shiftlabels["PD3_DISvnCC3pi"] = rwgt::kReweightNull;
138 shiftlabels["PD3_DISvnNC0pi"] = rwgt::kReweightNull;
139 shiftlabels["PD3_DISvnNC1pi"] = rwgt::kReweightNull;
140 shiftlabels["PD3_DISvnNC2pi"] = rwgt::kReweightNull;
141 shiftlabels["PD3_DISvnNC3pi"] = rwgt::kReweightNull;
142 shiftlabels["PD3_DISvbarpCC0pi"] = rwgt::kReweightNull;
143 shiftlabels["PD3_DISvbarpCC1pi"] = rwgt::kReweightNull;
144 shiftlabels["PD3_DISvbarpCC2pi"] = rwgt::kReweightNull;
145 shiftlabels["PD3_DISvbarpCC3pi"] = rwgt::kReweightNull;
146 shiftlabels["PD3_DISvbarpNC0pi"] = rwgt::kReweightNull;
147 shiftlabels["PD3_DISvbarpNC1pi"] = rwgt::kReweightNull;
148 shiftlabels["PD3_DISvbarpNC2pi"] = rwgt::kReweightNull;
149 shiftlabels["PD3_DISvbarpNC3pi"] = rwgt::kReweightNull;
150 shiftlabels["PD3_DISvbarnCC0pi"] = rwgt::kReweightNull;
151 shiftlabels["PD3_DISvbarnCC1pi"] = rwgt::kReweightNull;
152 shiftlabels["PD3_DISvbarnCC2pi"] = rwgt::kReweightNull;
153 shiftlabels["PD3_DISvbarnCC3pi"] = rwgt::kReweightNull;
154 shiftlabels["PD3_DISvbarnNC0pi"] = rwgt::kReweightNull;
155 shiftlabels["PD3_DISvbarnNC1pi"] = rwgt::kReweightNull;
156 shiftlabels["PD3_DISvbarnNC2pi"] = rwgt::kReweightNull;
157 shiftlabels["PD3_DISvbarnNC3pi"] = rwgt::kReweightNull;
158 
159 
160  std::vector<const ISyst*> AllSyst= getAllXsecSysts_2017();
161  for(const auto& sigma : sigmas) {
162  systematics["PD3_MAQAGenieReducedSyst2017"][sigma] = new SystShifts(AllSyst.at(0), sigma);
163  systematics["PD3_RPACCQEEnhSyst2017"][sigma] = new SystShifts(AllSyst.at(1), sigma);
164  systematics["PD3_RPACCQESuppSyst2017"][sigma] = new SystShifts(AllSyst.at(2), sigma);
165  systematics["PD3_RPARESSyst2017"][sigma] = new SystShifts(AllSyst.at(3), sigma);
166  systematics["PD3_MECq0ShapeSyst2017"][sigma] = new SystShifts(AllSyst.at(4), sigma);
167  systematics["PD3_MECInitStateNPFracSyst2017"][sigma] = new SystShifts(AllSyst.at(5), sigma);
168  systematics["PD3_MECEnuShapeSyst2017"][sigma] = new SystShifts(AllSyst.at(6), sigma);
169  systematics["PD3_DISvpCC0pi"][sigma] = new SystShifts(AllSyst.at(7), sigma);
170  systematics["PD3_DISvpCC1pi"][sigma] = new SystShifts(AllSyst.at(8), sigma);
171  systematics["PD3_DISvpCC2pi"][sigma] = new SystShifts(AllSyst.at(9), sigma);
172  systematics["PD3_DISvpCC3pi"][sigma] = new SystShifts(AllSyst.at(10), sigma);
173  systematics["PD3_DISvpNC0pi"][sigma] = new SystShifts(AllSyst.at(11), sigma);
174  systematics["PD3_DISvpNC1pi"][sigma] = new SystShifts(AllSyst.at(12), sigma);
175  systematics["PD3_DISvpNC2pi"][sigma] = new SystShifts(AllSyst.at(13), sigma);
176  systematics["PD3_DISvpNC3pi"][sigma] = new SystShifts(AllSyst.at(14), sigma);
177  systematics["PD3_DISvnCC0pi"][sigma] = new SystShifts(AllSyst.at(15), sigma);
178  systematics["PD3_DISvnCC1pi"][sigma] = new SystShifts(AllSyst.at(16), sigma);
179  systematics["PD3_DISvnCC2pi"][sigma] = new SystShifts(AllSyst.at(17), sigma);
180  systematics["PD3_DISvnCC3pi"][sigma] = new SystShifts(AllSyst.at(18), sigma);
181  systematics["PD3_DISvnNC0pi"][sigma] = new SystShifts(AllSyst.at(19), sigma);
182  systematics["PD3_DISvnNC1pi"][sigma] = new SystShifts(AllSyst.at(20), sigma);
183  systematics["PD3_DISvnNC2pi"][sigma] = new SystShifts(AllSyst.at(21), sigma);
184  systematics["PD3_DISvnNC3pi"][sigma] = new SystShifts(AllSyst.at(22), sigma);
185  systematics["PD3_DISvbarpCC0pi"][sigma] = new SystShifts(AllSyst.at(23), sigma);
186  systematics["PD3_DISvbarpCC1pi"][sigma] = new SystShifts(AllSyst.at(24), sigma);
187  systematics["PD3_DISvbarpCC2pi"][sigma] = new SystShifts(AllSyst.at(25), sigma);
188  systematics["PD3_DISvbarpCC3pi"][sigma] = new SystShifts(AllSyst.at(26), sigma);
189  systematics["PD3_DISvbarpNC0pi"][sigma] = new SystShifts(AllSyst.at(27), sigma);
190  systematics["PD3_DISvbarpNC1pi"][sigma] = new SystShifts(AllSyst.at(28), sigma);
191  systematics["PD3_DISvbarpNC2pi"][sigma] = new SystShifts(AllSyst.at(29), sigma);
192  systematics["PD3_DISvbarpNC3pi"][sigma] = new SystShifts(AllSyst.at(30), sigma);
193  systematics["PD3_DISvbarnCC0pi"][sigma] = new SystShifts(AllSyst.at(31), sigma);
194  systematics["PD3_DISvbarnCC1pi"][sigma] = new SystShifts(AllSyst.at(32), sigma);
195  systematics["PD3_DISvbarnCC2pi"][sigma] = new SystShifts(AllSyst.at(33), sigma);
196  systematics["PD3_DISvbarnCC3pi"][sigma] = new SystShifts(AllSyst.at(34), sigma);
197  systematics["PD3_DISvbarnNC0pi"][sigma] = new SystShifts(AllSyst.at(35), sigma);
198  systematics["PD3_DISvbarnNC1pi"][sigma] = new SystShifts(AllSyst.at(36), sigma);
199  systematics["PD3_DISvbarnNC2pi"][sigma] = new SystShifts(AllSyst.at(37), sigma);
200  systematics["PD3_DISvbarnNC3pi"][sigma] = new SystShifts(AllSyst.at(38), sigma);
201  }
202 
203  // Define a map of samples and cuts/axes to set them up
204  // Each sample, essentially, is a way to set up the analysis
205  std::string labelRecoE = "Energy Deposited in Scintillator (GeV)";
206  std::map<std::string, std::pair<HistAxis*, std::pair<Cut*, Cut*> > > cut_samples;
207  std::pair<Cut*, Cut*> Ana01(new Cut(kNus17ND), new Cut(kNus17FDAlt));
208  cut_samples["Ana01"] = std::pair<HistAxis*, std::pair<Cut*, Cut*> >(
209  new HistAxis(labelRecoE, kNCDisappearanceEnergyBinning, kNusNDEnergy17),
210  Ana01
211  );
212 
213  // Cuts to split MC into two groups
214  const Cut kMod0(
215  [](const caf::SRProxy* sr)
216  {
217  if(sr->hdr.ismc == false) { return true; }
218  int evtno = sr->hdr.evt;
219  if((evtno % 2) == 0) { return true; }
220  return false;
221  });
222  const Cut kMod1(
223  [](const caf::SRProxy* sr)
224  {
225  if(sr->hdr.ismc == false) { return true; }
226  int evtno = sr->hdr.evt;
227  if((evtno % 2) == 1) { return true; }
228  return false;
229  });
230  // Set up maps to the decompositions/predictions (each flavor component)
231  // Nominal maps are indexed purely by sample label
232  // Shifted maps are indexed by sample label, systematic label, then sigma of the shift
233  std::map<std::string, IDecomp*> decomps_nominal;
234  std::map<std::string, std::map<std::string, std::map<int, IDecomp*> > > decomps_shifted;
235  std::map<std::string, PredictionNoExtrap*> predsNE_nominal;
236  std::map<std::string, std::map<std::string, std::map<int, PredictionNoExtrap*> > > predsNE_shifted;
237  std::map<std::string, PredictionSterile*> predsSt_nominal;
238  std::map<std::string, std::map<std::string, std::map<int, PredictionSterile*> > > predsSt_shifted;
239 
240  // Set up the actual decompositions/predictions
241  // sample.first = the sample label
242  // shiftlabel.first = the systematic shift label
243  // sample.second.first = the sample HistAxis
244  // sample.second.second = the sample Cut
245  // syst.first = the integer number of sigmas for the shift
246  // syst.second = the systematic being shifted
247  for(const auto& sample : cut_samples) {
248  // Set up the nominal decompositions
249  // Only one is needed per sample
250  decomps_nominal[sample.first] = new CheatDecomp(
252  *sample.second.first, *sample.second.second.first && kMod0,
254  );
255  predsNE_nominal[sample.first] = new PredictionNoExtrap(
256  loaders,
257  *sample.second.first, *sample.second.second.second,
258  kNoShift, kWgtP31
259  );
260 
261  CheatDecomp* decompnc_n = new CheatDecomp(
263  *sample.second.first, *sample.second.second.first && kMod1,
265  );
266  CheatDecomp* decompnumu_n = new CheatDecomp(
268  kNCBinsNumuCCAxis, kNumuND && kMod1,
270  );
272  loaders, *decompnc_n, *decompnumu_n,
273  *sample.second.first, kNCBinsNumuCCAxis,
274  *sample.second.second.second, *sample.second.second.first && kMod0, kNumuND && kMod0,
275  kNoShift, kWgtP31
276  ));
277  predsSt_nominal[sample.first] = new PredictionSterile(extrap_n);
278 
279  // Set up the shifted decompositions
280  // One is needed for every sample, systematic, and sigma level
281  for(const auto& shiftlabel : shiftlabels) {
282  for(const auto& syst : systematics[shiftlabel.first]) {
283  decomps_shifted[sample.first][shiftlabel.first][syst.first] = new CheatDecomp(
285  *sample.second.first, *sample.second.second.first && kMod0,
286  *syst.second, kWgtP31
287  );
288  predsNE_shifted[sample.first][shiftlabel.first][syst.first] = new PredictionNoExtrap(
289  loaders,
290  *sample.second.first, *sample.second.second.second,
291  *syst.second, kWgtP31
292  );
293 
294  CheatDecomp* decompnc_s = new CheatDecomp(
296  *sample.second.first, *sample.second.second.first && kMod1,
298  );
299  CheatDecomp* decompnumu_s = new CheatDecomp(
301  kNCBinsNumuCCAxis, kNumuND && kMod1,
303  );
305  loaders, *decompnc_s, *decompnumu_s,
306  *sample.second.first, kNCBinsNumuCCAxis,
307  *sample.second.second.second, *sample.second.second.first && kMod0, kNumuND && kMod0,
308  *syst.second, kWgtP31
309  ));
310  predsSt_shifted[sample.first][shiftlabel.first][syst.first] = new PredictionSterile(
311  extrap_s
312  );
313  }
314  }
315  }
316 
317  loaders.Go();
318 
319  std::string folder = "./";
320  std::string filenm = "SystsGENIE";
321 
322  std::string fullLocation = folder + filenm + ".root";
323  TFile* rootF = new TFile(fullLocation.c_str(), "RECREATE");
324 
325  SaveMaps(rootF,
326  decomps_nominal, decomps_shifted,
327  predsNE_nominal, predsNE_shifted,
328  predsSt_nominal, predsSt_shifted
329  );
330 }
Near Detector underground.
Definition: SREnums.h:10
_HistAxis< Var > HistAxis
Definition: HistAxis.h:103
Far Detector at Ash River.
Definition: SREnums.h:11
Cuts and Vars for the 2020 FD DiF Study.
Definition: vars.h:6
const Var kPPFXFluxCVWgt
Definition: PPFXWeights.h:16
Simple record of shifts applied to systematic parameters.
Definition: SystShifts.h:20
caf::Proxy< caf::SRHeader > hdr
Definition: SRProxy.h:2137
Proxy for caf::StandardRecord.
Definition: SRProxy.h:2126
Collection of SpectrumLoaders for many configurations.
Definition: Loaders.h:23
void SaveMaps(TDirectory *out, std::map< std::string, IDecomp * > decomps_nominal, std::map< std::string, std::map< std::string, std::map< int, IDecomp * > > > decomps_shifted, std::map< std::string, PredictionNoExtrap * > predsNE_nominal, std::map< std::string, std::map< std::string, std::map< int, PredictionNoExtrap * > > > predsNE_shifted, std::map< std::string, PredictionSterile * > predsSt_nominal, std::map< std::string, std::map< std::string, std::map< int, PredictionSterile * > > > predsSt_shifted)
Save all of the objects in the input maps to the out directory/file.
Definition: PPFXHelper.h:1077
void Go()
Call Go() on all the loaders.
Definition: Loaders.cxx:162
void SetSpillCut(const SpillCut &cut)
Definition: Loaders.cxx:121
SpectrumLoaderBase & GetLoader(caf::Det_t det, DataMC datamc, DataSource src=kBeam, SwappingConfig swap=kNonSwap)
Retrieve a specific loader.
Definition: Loaders.cxx:129
const Cut kNumuND
Definition: NumuCuts.h:55
const Cut kNus17ND
Full Nus17 ND analysis selection.
Definition: NusCuts17.h:120
_Cut< caf::SRProxy > Cut
Representation of a cut (selection) to be applied to a caf::StandardRecord object.
Definition: Cut.h:96
caf::StandardRecord * sr
const Var kWgtP31
double sigma(TH1F *hist, double percentile)
caf::Proxy< unsigned int > evt
Definition: SRProxy.h:237
const SystShifts kNoShift
Definition: SystShifts.cxx:21
const HistAxis kNCBinsNumuCCAxis("Reconstructed Neutrino Energy (GeV)", kNCDisappearanceEnergyBinning, kCCE)
Definition: HistAxes.h:9
std::vector< Loaders * > loaders
Definition: syst_header.h:386
caf::Proxy< bool > ismc
Definition: SRProxy.h:242
const Cut kNus17FDAlt
Definition: NusCuts17.h:92
bool systematics
Definition: fnexvscaf.C:31
A prediction object compatible with sterile oscillations.
void SystsGENIELoad17()
const SpillCut kStandardSpillCuts
Apply this unless you&#39;re doing something special.
Definition: SpillCuts.h:49
Prediction that just uses FD MC, with no extrapolation.
const Var kXSecCVWgt2017
Definition: XsecTunes.h:37
void SetLoaderPath(const std::string &path, caf::Det_t det, DataMC datamc, DataSource src=kBeam, SwappingConfig swap=kNonSwap)
Configure loader via wildcard path.
Definition: Loaders.cxx:25
static ModularExtrapSterile NCDisappearance(Loaders &loaders, const IDecomp &NCSurvDecomp, const IDecomp &NumuOscDecomp, const HistAxis &axis, const HistAxis &axisNumuND, const Cut &fdcut, const Cut &NCNDcut, const Cut &NumuNDcut, const SystShifts &shiftMC=kNoShift, const Var &weight=kUnweighted)
Creates a NC disappearance extrapolation.
Just return the ND truth spectra as the decomposition.
Definition: CheatDecomp.h:10
std::vector< const ISyst * > getAllXsecSysts_2017()
Get master XSec syst list for 2017 analyses.
const Binning kNCDisappearanceEnergyBinning
Energy binnings used in Ana01 for nus extrapolation.
Definition: Binning.cxx:68
enum BeamMode string