diff --git a/sbncode/CAFMaker/CAFMaker_module.cc b/sbncode/CAFMaker/CAFMaker_module.cc index 4cc2fcffe..e532328da 100644 --- a/sbncode/CAFMaker/CAFMaker_module.cc +++ b/sbncode/CAFMaker/CAFMaker_module.cc @@ -41,6 +41,7 @@ #endif #include "ifdh_art/IFDHService/IFDH_service.h" +#include "dk2nu/tree/dk2nu.h" // ROOT includes #include "TFile.h" @@ -1469,6 +1470,14 @@ void CAFMaker::produce(art::Event& evt) noexcept { art::fill_ptr_vector(mcfluxes, mcflux_handle); } + art::Handle> dk2nu_handle; + GetByLabelStrict(evt, std::string("generator"), dk2nu_handle); + + std::vector> dk2nus; + if (dk2nu_handle.isValid()) { + art::fill_ptr_vector(dk2nus, dk2nu_handle); + } + // get the MCReco for the fake-reco art::Handle> mctrack_handle; GetByLabelStrict(evt, std::string("mcreco"), mctrack_handle); @@ -1552,9 +1561,13 @@ void CAFMaker::produce(art::Event& evt) noexcept { // holder for invalid MCFlux simb::MCFlux badflux; // default constructor gives nonsense values + // holder for invalid Dk2Nu (default-constructed ancestor vector is empty -- treated as "absent") + bsim::Dk2Nu baddk2nu; + for (size_t i=0; i mctruth, const simb::MCFlux &mcflux, + const bsim::Dk2Nu &dk2nu, const simb::GTruth& gtruth, const std::vector &srparticles, const std::map>> &id_to_truehit_map, @@ -549,6 +553,9 @@ namespace caf { // Set the MCFlux stuff srneutrino.initpdg = mcflux.fntype; srneutrino.baseline = mcflux.fdk2gen + mcflux.fgen2vtx; + srneutrino.dk2gen = mcflux.fdk2gen; + srneutrino.prod_time = (!dk2nu.ancestor.empty()) + ? dk2nu.ancestor.back().startt : std::numeric_limits::signaling_NaN(); srneutrino.parent_pdg = mcflux.fptype; srneutrino.parent_dcy_mode = mcflux.fndecay; srneutrino.prod_vtx.x = mcflux.fvx; diff --git a/sbncode/CAFMaker/FillTrue.h b/sbncode/CAFMaker/FillTrue.h index 419ed6ee9..e7579d799 100644 --- a/sbncode/CAFMaker/FillTrue.h +++ b/sbncode/CAFMaker/FillTrue.h @@ -33,6 +33,8 @@ #include "sbnanaobj/StandardRecord/StandardRecord.h" #include "sbnanaobj/StandardRecord/SRMeVPrtl.h" +namespace bsim { class Dk2Nu; } + namespace caf { struct HitsEnergy { @@ -86,6 +88,7 @@ namespace caf void FillTrueNeutrino(const art::Ptr mctruth, const simb::MCFlux &mcflux, + const bsim::Dk2Nu &dk2nu, const simb::GTruth& gtruth, const std::vector &srparticles, const std::map>> &id_to_truehit_map,