diff --git a/sbncode/CAFMaker/CAFMaker_module.cc b/sbncode/CAFMaker/CAFMaker_module.cc index 9f2c01590..b04dc631c 100644 --- a/sbncode/CAFMaker/CAFMaker_module.cc +++ b/sbncode/CAFMaker/CAFMaker_module.cc @@ -352,6 +352,10 @@ class CAFMaker : public art::EDProducer { art::FindOneP FindOnePStrict(const U& from, const art::Event& evt, const art::InputTag& label) const; + template + art::FindOneP FindOnePStrictSingle(const U& from, const art::Event& evt, + const art::InputTag& label) const; + template art::FindOneP FindOnePDStrict(const U& from, const art::Event& evt, @@ -1299,6 +1303,27 @@ art::FindOneP CAFMaker::FindOnePStrict(const U& from, return ret; } +//...................................................................... +template +art::FindOneP CAFMaker::FindOnePStrictSingle(const U& from, + const art::Event& evt, + const art::InputTag& tag) const { + std::vector vec = { from }; + + art::FindOneP ret(vec, evt, tag); + + if (!tag.label().empty() && !ret.isValid() && fParams.StrictMode()) { + std::cout << "CAFMaker: No Assn from '" + << cet::demangle_symbol(typeid(from).name()) << "' to '" + << cet::demangle_symbol(typeid(T).name()) + << "' found under label '" << tag << "'. " + << "Set 'StrictMode: false' to continue anyway." << std::endl; + abort(); + } + + return ret; +} + //...................................................................... template art::FindOneP CAFMaker::FindOnePDStrict(const U& from, @@ -1791,12 +1816,15 @@ void CAFMaker::produce(art::Event& evt) noexcept { { art::Handle> crtspacepoints_handle; GetByLabelStrict(evt, fParams.CRTSpacePointLabel(), crtspacepoints_handle); + art::FindOneP foCRTCluster = + FindOnePStrict(crtspacepoints_handle, evt, fParams.CRTSpacePointLabel()); if (crtspacepoints_handle.isValid()) { const std::vector &crtspacepoints = *crtspacepoints_handle; for (unsigned i = 0; i < crtspacepoints.size(); i++) { srcrtspacepoints.emplace_back(); - FillCRTSpacePoint(crtspacepoints[i], srcrtspacepoints.back()); + const art::Ptr crtcluster = foCRTCluster.at(i); + FillCRTSpacePoint(crtspacepoints[i], crtcluster, srcrtspacepoints.back()); } } @@ -2239,6 +2267,9 @@ void CAFMaker::produce(art::Event& evt) noexcept { FindOnePDStrict(slcTracks, evt, fParams.CRTSpacePointMatchLabel() + slice_tag_suff); + art::Handle> crtspacepoints_handle; + GetByLabelStrict(evt, fParams.CRTSpacePointLabel(), crtspacepoints_handle); + art::FindOneP foSBNDCRTTrackMatch = FindOnePDStrict(slcTracks, evt, fParams.SBNDCRTTrackMatchLabel() + slice_tag_suff); @@ -2515,8 +2546,12 @@ void CAFMaker::produce(art::Event& evt) noexcept { { const art::Ptr crtspacepoint = foCRTSpacePointMatch.at(iPart); + art::FindOneP foCRTCluster = + FindOnePStrictSingle(crtspacepoint, evt, fParams.CRTSpacePointLabel()); + const art::Ptr crtcluster = foCRTCluster.at(0); + if(crtspacepoint.isNonnull()) - FillTrackCRTSpacePoint(foCRTSpacePointMatch.data(iPart).ref(), crtspacepoint, trk); + FillTrackCRTSpacePoint(foCRTSpacePointMatch.data(iPart).ref(), crtspacepoint, crtcluster, trk); } if(foSBNDCRTTrackMatch.isValid() && fDet == kSBND) { diff --git a/sbncode/CAFMaker/FillReco.cxx b/sbncode/CAFMaker/FillReco.cxx index 46396a2c1..5f07bda27 100644 --- a/sbncode/CAFMaker/FillReco.cxx +++ b/sbncode/CAFMaker/FillReco.cxx @@ -164,6 +164,7 @@ namespace caf } void FillCRTSpacePoint(const sbnd::crt::CRTSpacePoint &spacepoint, + const art::Ptr &cluster, caf::SRCRTSpacePoint &srspacepoint, bool allowEmpty) { @@ -173,6 +174,8 @@ namespace caf srspacepoint.time = spacepoint.Ts0(); srspacepoint.time_err = spacepoint.Ts0Err(); srspacepoint.complete = spacepoint.Complete(); + srspacepoint.nhits = cluster->NHits(); + srspacepoint.tagger = cluster->Tagger(); } void FillSBNDCRTTrack(const sbnd::crt::CRTTrack &track, @@ -186,6 +189,9 @@ namespace caf srsbndcrttrack.time_err = track.Ts0Err(); srsbndcrttrack.pe = track.PE(); srsbndcrttrack.tof = track.ToF(); + + for(auto const& tagger : track.Taggers()) + srsbndcrttrack.taggers.push_back(tagger); } void FillSBNDCRTVeto(const sbnd::crt::CRTVeto &veto, @@ -811,11 +817,14 @@ namespace caf void FillTrackCRTSpacePoint(const anab::T0 &t0match, const art::Ptr &spacepointmatch, + const art::Ptr &cluster, caf::SRTrack &srtrack, bool allowEmpty) { - srtrack.crtspacepoint.score = t0match.fTriggerConfidence; - FillCRTSpacePoint(*spacepointmatch, srtrack.crtspacepoint.spacepoint); + srtrack.crtspacepoint.matched = true; + srtrack.crtspacepoint.score = t0match.fTriggerConfidence; + + FillCRTSpacePoint(*spacepointmatch, cluster, srtrack.crtspacepoint.spacepoint); } void FillTrackSBNDCRTTrack(const anab::T0 &t0match, @@ -823,7 +832,9 @@ namespace caf caf::SRTrack &srtrack, bool allowEmpty) { - srtrack.crtsbndtrack.score = t0match.fTriggerConfidence; + srtrack.crtsbndtrack.matched = true; + srtrack.crtsbndtrack.score = t0match.fTriggerConfidence; + FillSBNDCRTTrack(*trackmatch, srtrack.crtsbndtrack.track); } diff --git a/sbncode/CAFMaker/FillReco.h b/sbncode/CAFMaker/FillReco.h index 46704181a..11cf7fcb8 100644 --- a/sbncode/CAFMaker/FillReco.h +++ b/sbncode/CAFMaker/FillReco.h @@ -41,6 +41,7 @@ #include "sbnobj/Common/CRT/CRTHit.hh" #include "sbnobj/Common/CRT/CRTTrack.hh" #include "sbnobj/SBND/CRT/CRTSpacePoint.hh" +#include "sbnobj/SBND/CRT/CRTCluster.hh" #include "sbnobj/SBND/CRT/CRTTrack.hh" #include "sbnobj/SBND/CRT/CRTVeto.hh" #include "sbnobj/Common/CRT/CRTPMTMatching.hh" @@ -206,6 +207,7 @@ namespace caf void FillTrackCRTSpacePoint(const anab::T0 &t0match, const art::Ptr &spacepointmatch, + const art::Ptr &cluster, caf::SRTrack &srtrack, bool allowEmpty = false); @@ -277,6 +279,7 @@ namespace caf bool allowEmpty = false); void FillCRTSpacePoint(const sbnd::crt::CRTSpacePoint &spacepoint, + const art::Ptr &cluster, caf::SRCRTSpacePoint &srspacepoint, bool allowEmpty = false);