From fdbd6b702d1176b973da8cd8b4a0ae6e079bea23 Mon Sep 17 00:00:00 2001 From: Bohdan Dudar Date: Wed, 31 Aug 2022 14:11:56 +0200 Subject: [PATCH] Add a utility function to return a leading track of the ReconstructedParticle --- .../include/UTIL/ReconstructedParticleTools.h | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/cpp/include/UTIL/ReconstructedParticleTools.h 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