42 std::map<unsigned int, std::map<std::string, ana::xsec::UnfoldingVariable* > > genieUnfoldingVars;
43 std::map<unsigned int, std::map<std::string, ana::xsec::UnfoldingVariable* > > ppfxUnfoldingVars;
49 if ((firstGenie < 0 || lastGenie < firstGenie) && (firstPPFX < 0 || lastPPFX < firstPPFX))
51 cout <<
"Invalid choices for both genie and ppfx universes. Will not create spectrums.\nExiting..." <<
endl;
56 if (firstGenie >= 0 && lastGenie >= firstGenie)
60 std::vector<ana::SystShifts> genie_shifts = verse.
GetSystShifts();
62 for(
int igenie = firstGenie; igenie <= lastGenie; ++igenie)
79 if (firstPPFX >= 0 && lastPPFX >= firstPPFX)
84 for(
int ippfx = firstPPFX; ippfx <= lastPPFX; ++ippfx)
106 TFile*
fOut =
new TFile(outfileName.c_str(),
"RECREATE");
111 for (
const std::pair<
unsigned int, std::map<std::string, ana::xsec::UnfoldingVariable* > >& genieUnivVars : genieUnfoldingVars)
113 unsigned int genieUniv = genieUnivVars.first;
116 const std::map<std::string, ana::xsec::UnfoldingVariable*>& unfoldVars = genieUnivVars.second;
118 dir = fOut->mkdir(folderName.c_str());
120 for (
const std::pair<std::string, ana::xsec::UnfoldingVariable*>& genieUnivVar : unfoldVars)
125 TDirectory * varDir = dir->mkdir(varName.c_str());
131 for (
const std::pair<
unsigned int, std::map<std::string, ana::xsec::UnfoldingVariable* > >& ppfxUnivVars : ppfxUnfoldingVars)
133 unsigned int ppfxUniv = ppfxUnivVars.first;
136 const std::map<std::string, ana::xsec::UnfoldingVariable*>& unfoldVars = ppfxUnivVars.second;
138 dir = fOut->mkdir(folderName.c_str());
140 for (
const std::pair<std::string, ana::xsec::UnfoldingVariable*>& ppfxUnivVar : unfoldVars)
145 TDirectory * varDir = dir->mkdir(varName.c_str());
const NuTruthCut kIsTrueSigST
const HistAxis kRecoQ2StandardAxis("Reco Q2 (GeV)", q2bins, kRecoq2)
void SaveSpectrums(TDirectory *d)
Save each necessary Spectrum to its own subfolder of dir.
const NuTruthCut kIsTrueSig1DST
void SetSpillCut(const SpillCut &cut)
const NuTruthHistAxis kTrueQ2StandardAxisST("True Q2 (GeV)", q2bins, kTrueQ2_NT)
_Var< caf::SRNeutrinoProxy > NuTruthVar
Var designed to be used over the nuTree, ie all neutrinos, not just those that got slices...
virtual void Go() override
Load all the registered spectra.
std::vector< NuTruthVar > GetkPPFXFluxUnivWgtST()
const NuTruthVar kXSecCVWgt2018_smallerDISScale_NT
const std::string NOMINAL_DATASET
Macro for numucc_inc for running on NERSC.
const unsigned int N_PPFX_UNIVERSES
const SystShifts kNoShift
void specprod_numuccinc(std::string outfileName, int firstGenie, int lastGenie, int firstPPFX=-1, int lastPPFX=-1)
const Cut kAllNumuCC1DCuts
std::vector< const ISyst * > getAllXsecSysts_2018_RPAFix()
Var VarFromNuTruthVar(const NuTruthVar &stv, double _default)
Collaborates with Spectrum and OscillatableSpectrum to fill spectra from CAF files.
const ana::NuTruthVar wgtST
std::vector< SystShifts > GetSystShifts()
const NuTruthHistAxis kTrueMuKEVsCosVsEavailStandardAxisST("True T_{#mu} vs cos #{theta} vs Neutrino Energy (GeV)", angvsmukevseavailbins, kTrueMuKEVsCosVsEavailST)
const SpillCut kStandardSpillCuts
Apply this unless you're doing something special.
const HistAxis kRecoMuKEVsCosVsEavailStandardAxis("Reco. T_{#mu} vs cos #{theta} vs Available Energy (GeV)", angvsmukevseavailbins, kRecoMuKEVsCosVsEavail)
std::string to_string(ModuleType mt)
Template for Var and SpillVar.
const HistAxis kRecoEStandardAxis("Reconstructed Neutrino Energy (GeV)", enubins, kRecoE)
const NuTruthHistAxis kTrueEStandardAxisST("True Neutrino Energy (GeV)", enubins, kTrueEST)
const NuTruthVar kPPFXFluxCVWgtST([](const caf::SRNeutrinoProxy *nu){ if(nu->rwgt.ppfx.cv!=nu->rwgt.ppfx.cv){return 1.f;}if(nu->rwgt.ppfx.cv >90){return 1.f;}return float(nu->rwgt.ppfx.cv);})
weight events with the flux PPFX Central value correction.
const unsigned int N_GENIE_UNIVERSES
const ana::NuTruthVar wgt_xsST