6#include "fastjet/PseudoJet.hh"
14 const std::string& name,
15 const IInterface * parent) :
18 declareInterface<DiTauToolBase > (
this);
30 return StatusCode::SUCCESS;
35 const EventContext& ctx)
const
41 if (pDiTau ==
nullptr) {
43 return StatusCode::FAILURE;
49 std::vector<const xAOD::TrackParticle*> tauTracks;
50 std::vector<const xAOD::TrackParticle*> isoTracks;
51 std::vector<const xAOD::TrackParticle*> otherTracks;
63 getTracksFromPV(data, pTrackParticleCont.
get(), pVertex, tauTracks, isoTracks, otherTracks);
71 std::vector<fastjet::PseudoJet> vSubjets = data->subjets;
73 for (
auto subjet_itr = vSubjets.begin(); subjet_itr != vSubjets.end(); ) {
76 TLorentzVector temp_p4;
77 temp_p4.SetPtEtaPhiM(subjet_itr->pt(), subjet_itr->eta(), subjet_itr->phi_std(), subjet_itr->m());
79 for (
const auto& track : tauTracks) {
87 subjet_itr = vSubjets.erase(subjet_itr);
89 ATH_MSG_DEBUG(
"number of tracks greater than MaxNTracksSubjet threshold. Drop subjet");
90 subjet_itr = vSubjets.erase(subjet_itr);
98 if (vSubjets.size()<=1) {
99 ATH_MSG_DEBUG(
"Found less than 2 subjets. Reject ditau candidate");
100 return StatusCode::FAILURE;
103 data->subjets = vSubjets;
104 ATH_MSG_DEBUG(
"number of subjets after track association: " << data->subjets.size());
106 for (
unsigned int i = 0; i < vSubjets.size(); i++) {
107 const fastjet::PseudoJet& subjet = vSubjets.at(i);
108 pDiTau->
setSubjetPtEtaPhiE(i, subjet.pt(), subjet.eta(), subjet.phi_std(), subjet.e());
109 ATH_MSG_DEBUG(
"subjet " << i <<
" pt: " << subjet.pt() <<
" eta: " << subjet.eta() <<
" phi: " << subjet.phi_std() <<
" e: " << subjet.e());
115 for (
const auto& track : tauTracks ) {
116 ATH_MSG_DEBUG(
"adding subjet track. eta: " << track->eta() <<
" phi: " << track->phi());
121 for (
const auto& track : isoTracks ) {
122 ATH_MSG_DEBUG(
"adding iso track. eta: " << track->eta() <<
" phi: " << track->phi());
127 for (
const auto& track : otherTracks ) {
128 ATH_MSG_DEBUG(
"adding other track. eta: " << track->eta() <<
" phi: " << track->phi());
132 return StatusCode::SUCCESS;
139 std::vector<const xAOD::TrackParticle*> &tauTracks,
140 std::vector<const xAOD::TrackParticle*> &isoTracks,
141 std::vector<const xAOD::TrackParticle*> &otherTracks)
const {
143 for (
const auto *
const track : *pTrackParticleCont ) {
147 tauTracks.push_back(track);
149 isoTracks.push_back(track);
151 otherTracks.push_back(track);
174 std::vector<fastjet::PseudoJet> vSubjets = data->subjets;
175 for (
const auto &subjet : vSubjets) {
177 TLorentzVector temp_p4;
178 temp_p4.SetPtEtaPhiM(subjet.pt(), subjet.eta(), subjet.phi_std(), subjet.m());
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
Handle class for reading from StoreGate.
DiTauTrackFinder(const std::string &type, const std::string &name, const IInterface *parent)
Constructor.
DiTauTrackType diTauTrackType(const DiTauCandidateData *, const xAOD::TrackParticle *, const xAOD::Vertex *) const
void getTracksFromPV(const DiTauCandidateData *, const xAOD::TrackParticleContainer *, const xAOD::Vertex *, std::vector< const xAOD::TrackParticle * > &, std::vector< const xAOD::TrackParticle * > &, std::vector< const xAOD::TrackParticle * > &) const
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_TrackParticleContainerName
ToolHandle< Trk::ITrackSelectorTool > m_TrackSelectorTool
virtual StatusCode execute(DiTauCandidateData *data, const EventContext &ctx) const override
Execute - called for each Ditau candidate.
virtual StatusCode initialize() override
Tool initializer.
virtual ~DiTauTrackFinder()
Destructor.
Gaudi::Property< int > m_MaxNTracksSubjet
Gaudi::Property< float > m_MaxDrJet
Gaudi::Property< float > m_MaxDrSubjet
bool isValid() const
Check if the element can be found.
const_pointer_type get() const
Dereference the pointer, but don't cache anything.
Helper method to sort tracks.
virtual FourMom_t p4() const
The full 4-momentum of the particle.
void clearIsoTrackLinks()
const VertexLink_t & vertexLink() const
void clearOtherTrackLinks()
void setSubjetPtEtaPhiE(unsigned int numSubjet, float pt, float eta, float phi, float e)
void addOtherTrack(const xAOD::TrackParticleContainer *, const xAOD::TrackParticle *)
void addTrack(const xAOD::TrackParticleContainer *, const xAOD::TrackParticle *)
void addIsoTrack(const xAOD::TrackParticleContainer *, const xAOD::TrackParticle *)
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Vertex_v1 Vertex
Define the latest version of the vertex class.
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".
DiTauJet_v1 DiTauJet
Definition of the current version.