24 #include "canvas/Persistency/Common/FindManyP.h" 40 class MCParticleShowerMatching;
76 produces< art::Assns<recob::Shower , simb::MCParticle, anab::BackTrackerMatchingData > > ();
96 std::unordered_map<int,double> trkide;
104 if(!showerListHandle.
isValid()){
105 std::cerr <<
"Shower handle is not valid!" <<
std::endl;
110 std::cerr <<
"Hit handle is not valid!" <<
std::endl;
114 auto const& showerList(*showerListHandle);
118 for(
size_t i_t=0; i_t<showerList.size(); ++i_t){
123 std::vector< art::Ptr<recob::Hit> > allHits = fmtht.at(i_t);
125 std::vector<anab::BackTrackerHitMatchingData const*> bthmd_vec;
126 std::vector< art::Ptr<simb::MCParticle> > matchedParticlePtrs;
128 art::FindManyP<simb::MCParticle,anab::BackTrackerHitMatchingData>
131 for(
size_t i_h=0; i_h<allHits.size(); ++i_h){
132 bthmd_vec.clear(); matchedParticlePtrs.clear();
133 particles_per_hit.get(allHits[i_h].
key(),matchedParticlePtrs,bthmd_vec);
135 for(
size_t i_p=0; i_p<matchedParticlePtrs.size(); ++i_p){
136 trkide[ matchedParticlePtrs[i_p]->TrackId() ] += bthmd_vec[i_p]->energy;
137 tote += bthmd_vec[i_p]->energy;
138 if( trkide[ matchedParticlePtrs[i_p]->TrackId() ] > maxe ){
139 maxe = trkide[ matchedParticlePtrs[i_p]->TrackId() ];
140 maxp = matchedParticlePtrs[i_p];
148 MCPartShowerassn->addSingle(shwPtr, maxp, btdata);
code to link reconstructed objects back to the MC truth information
art::InputTag fHitModuleLabel
MCParticleShowerMatching & operator=(MCParticleShowerMatching const &)=delete
EDProducer(fhicl::ParameterSet const &pset)
bool isValid() const noexcept
bool getByLabel(std::string const &label, std::string const &instance, Handle< PROD > &result) const
#define DEFINE_ART_MODULE(klass)
ProductID put(std::unique_ptr< PROD > &&edp, std::string const &instance={})
Declaration of signal hit object.
void produce(art::Event &e) override
MCParticleShowerMatching(fhicl::ParameterSet const &p)
art::InputTag fShowerHitAssnLabel
art::InputTag fHitParticleAssnLabel
art::InputTag fShowerModuleLabel
QTextStream & endl(QTextStream &s)