diff --git a/src/cpp/include/UTIL/ReconstructedParticleTools.h b/src/cpp/include/UTIL/ReconstructedParticleTools.h new file mode 100644 index 000000000..dee07379d --- /dev/null +++ b/src/cpp/include/UTIL/ReconstructedParticleTools.h @@ -0,0 +1,22 @@ +#ifndef UTIL_ReconstructedParticleTools_H +#define UTIL_ReconstructedParticleTools_H 1 + +#include "EVENT/ReconstructedParticle.h" +#include "EVENT/Track.h" +#include "TrackTools.h" + +namespace UTIL{ + /** Extract the leading track in case of multiple tracks attached to a single ReconstructedParticle. + * @author Bohdan Dudar + * @version August 2022 + */ + EVENT::Track* getLeadingTrack(const EVENT::ReconstructedParticle* particle, double bz){ + const TrackVec& tracks = particle->getTracks(); + if ( tracks.empty() ) return nullptr; + auto sortByMomentum = [&bz, &getTrackMomentum](const EVENT::Track* a, const EVENT::Track* b) { return getTrackMomentum(a, bz) < getTrackMomentum(b, bz) }; + EVENT::Track* leadingTrack = *std::max_element(tracks.begin(), tracks.end(), sortByMomentum); + + return leadingTrack; + } + +#endif