13 #include "CAFAna/Core/Binning.h" 83 std::map<std::string, std::map<std::string, std::pair<Spectrum*, Spectrum*> > >
fShiftedSpectra;
105 std::cout <<
"PredictionHandler not set up for " 107 <<
"\nCurrent allowed options are:" 124 for (
const auto& spectrum :
fSpectra)
125 delete spectrum.second;
129 for (
const auto& syst : shift.second) {
130 delete syst.second.first;
131 delete syst.second.second;
195 return AddVar(name, axis, cuts, shift, weight, cutdata);
212 const HistAxis axis(labelx, binningx, varx, labely, binningy, vary);
214 return AddVar(name, axis, cuts, shift, weight, cutdata);
224 const HistAxis axis ({labelx, labely, labelz}, {binningx, binningy, binningz}, {varx, vary, varz});
226 return AddVar(name,
axis, cuts, shift, weight, cutdata);
249 pred = genND.
Generate(*fLoaders).release();
253 std::map<std::string, std::pair<Spectrum*, Spectrum*> > shifts;
255 for (
const auto& shift :
fSysts) {
265 if (
fData && cutdata)
288 decompIt->second->SaveTo(outFile->mkdir(Form(
"ND%sDecomp", decompIt->first.c_str())));
293 TString
subdir = Form(
"ND%sDecompSysts", shiftIt->first.c_str());
295 outFile->mkdir(subdir);
296 for (std::map<
std::string, std::pair<Spectrum*, Spectrum*> >::const_iterator systIt = shiftIt->second.begin();
297 systIt != shiftIt->second.end(); ++systIt) {
298 TString subsubdir = systIt->first.c_str();
300 gDirectory->mkdir(subsubdir);
301 gDirectory->cd(subsubdir);
302 systIt->second.first->SaveTo(gDirectory->mkdir(
"ShiftUp"));
303 systIt->second.second->SaveTo(gDirectory->mkdir(
"ShiftDown"));
309 for (std::map<std::string, Spectrum*>::const_iterator specIt =
fSpectra.begin(); specIt !=
fSpectra.end(); ++specIt){
310 specIt->second->SaveTo(outFile->mkdir(Form(
"ND%sSpec", specIt->first.c_str())));
354 return AddVar(name, axis, cuts, shift, weight, cutdata);
371 const HistAxis axis(labelx, binningx, varx, labely, binningy, vary);
373 return AddVar(name, axis, cuts, shift, weight, cutdata);
383 const HistAxis axis ({labelx, labely, labelz}, {binningx, binningy, binningz}, {varx, vary, varz});
385 return AddVar(name,
axis, cuts, shift, weight, cutdata);
391 std::cout <<
"Error: Loaders must be set before variables can be added." <<
std::endl;
406 pred_gen = genExtrap;
414 pred_gen = genNoExtrap;
423 pred = pred_gen->
Generate(*fLoaders).release();
426 if (
fData && cutdata)
448 for (std::map<std::string, IPrediction*>::const_iterator predIt =
fPredictions.begin();
450 predIt->second->SaveTo(outFile->mkdir(Form(
"FD%sPred", predIt->first.c_str())));
454 for (std::map<std::string, Spectrum*>::const_iterator specIt =
fSpectra.begin();
456 specIt->second->SaveTo(outFile->mkdir(Form(
"FD%sSpec", specIt->first.c_str())));
460 for (std::map<std::string, Spectrum*>::const_iterator cosIt =
fCosSpec.begin();
462 cosIt->second->SaveTo(outFile->mkdir(Form(
"FD%sCosSpec", cosIt->first.c_str())));
Near Detector underground.
Implements systematic errors by interpolation between shifted templates.
void AddVar(std::string name, HistAxis axis, Cut cuts, SystShifts shift, Var weight)
Represent the binning of a Spectrum's x-axis.
Cuts and Vars for the 2020 FD DiF Study.
NDPredictionHandler(std::string predOpt, bool isData=false, Loaders *loaders=nullptr)
Simple record of shifts applied to systematic parameters.
Collection of SpectrumLoaders for many configurations.
void Save(TDirectory *outDir, PlotInfo info, osc::OscCalcSterile *calc, HistType ht, IPrediction *pred=nullptr, Spectrum *cosSpec=nullptr, Spectrum *data=nullptr)
std::vector< double > Spectrum
void Save(TFile *outFile)
std::map< std::string, Spectrum * > fSpectra
Adapt the PMNS_Sterile calculator to standard interface.
SpectrumLoader * fLoadersCos
void AddData(SpectrumLoader *loadersData)
std::pair< Spectrum *, CheatDecomp * > make_pair(SpectrumLoaderBase &loader_data, SpectrumLoaderBase &loader_mc, HistAxis *axis, Cut *cut, const SystShifts &shift, const Var &wei)
PredictionHandler(std::string predOpt, bool isData=false, Loaders *loaders=nullptr)
Generates extrapolated NC predictions using ProportionalDecomp.
Representation of a spectrum in any variable, with associated POT.
const Cut kInCosmicTimingWindow
Is the event far from the start and ends of the spill ? For FD cosmic selection.
virtual void Save(TFile *outFile)=0
osc::OscCalcSterile * fOscCalc
SpectrumLoaderBase & GetLoader(caf::Det_t det, DataMC datamc, DataSource src=kBeam, SwappingConfig swap=kNonSwap)
Retrieve a specific loader.
virtual void AddVar(std::string name, HistAxis axis, Cut cuts, SystShifts shift, Var weight, bool cutdata=true)=0
void AddSystematics(std::vector< const ISyst * > systs, osc::OscCalcSterile *calc)
SpectrumLoader * fLoadersData
Class to handle ND predictions.
void AddCosmics(SpectrumLoader *loaders_cosmics)
const Cut kNus18ND
Full Nus18 ND analysis selection.
FDPredictionHandler(std::string predOpt, bool isData=false, Loaders *loaders=nullptr)
std::vector< const ISyst * > fSysts
void AddVar(std::string name, HistAxis axis, Cut cuts, SystShifts shift, Var weight)
void Save(TFile *outFile)
std::map< std::string, CheatDecomp * > fDecompositions
std::map< std::string, Spectrum * > fCosSpec
void AddLoaders(Loaders *loaders)
Collaborates with Spectrum and OscillatableSpectrum to fill spectra from CAF files.
virtual ~PredictionHandler()
virtual std::unique_ptr< IPrediction > Generate(Loaders &loaders, const SystShifts &shiftMC=kNoShift) const =0
const Cut kInBeamSpill([](const caf::SRProxy *sr){if(sr->spill.run > util::kLastBadTimingRun) return kInBeamSpill_main(sr);else return kInBeamSpill_main(sr)||kInBeamSpill_shifted(sr);}, [](const caf::SRSpillProxy *spill){if(spill->run > util::kLastBadTimingRun) return kInBeamSpill_main.Livetime(spill);else return kInBeamSpill_main.Livetime(spill)+kInBeamSpill_shifted.Livetime(spill);}, [](const caf::SRSpillProxy *spill) -> double{return spill->spillpot;})
Does the event fall inside the window we call the beam spill?
const HistAxis kNus18BinsNumuCCAxis("Reconstructed Neutrino Energy (GeV)", kNus18EnergyBinning, kCCE)
Standard interface to all prediction techniques.
std::unique_ptr< IPrediction > Generate(Loaders &loaders, const SystShifts &shiftMC=kNoShift) const override
std::map< std::string, IPrediction * > fPredictions
Given loaders and an MC shift, Generate() generates an IPrediction.
Class to handle FD predictions.
Generates Near Detector predictions.
Just return the ND truth spectra as the decomposition.
std::map< std::string, std::map< std::string, std::pair< Spectrum *, Spectrum * > > > fShiftedSpectra