12 const std::string& name,
13 const IInterface * parent) :
16 declareInterface<DiTauToolBase > (
this);
28 return StatusCode::SUCCESS;
33 const EventContext& ctx)
const
39 if (pDiTau ==
nullptr) {
41 return StatusCode::FAILURE;
47 std::vector<const xAOD::TrackParticle*> tauTracks;
48 std::vector<const xAOD::TrackParticle*> isoTracks;
49 std::vector<const xAOD::TrackParticle*> otherTracks;
69 std::vector<fastjet::PseudoJet> vSubjets =
data->subjets;
71 for (
auto subjet_itr = vSubjets.begin(); subjet_itr != vSubjets.end(); ) {
74 TLorentzVector temp_p4;
75 temp_p4.SetPtEtaPhiM(subjet_itr->pt(), subjet_itr->eta(), subjet_itr->phi_std(), subjet_itr->m());
77 for (
const auto& track : tauTracks) {
85 subjet_itr = vSubjets.erase(subjet_itr);
87 ATH_MSG_DEBUG(
"number of tracks greater than MaxNTracksSubjet threshold. Drop subjet");
88 subjet_itr = vSubjets.erase(subjet_itr);
96 if (vSubjets.size()<=1) {
97 ATH_MSG_DEBUG(
"Found less than 2 subjets. Reject ditau candidate");
98 return StatusCode::FAILURE;
101 data->subjets = vSubjets;
102 ATH_MSG_DEBUG(
"number of subjets after track association: " <<
data->subjets.size());
104 for (
unsigned int i = 0; i < vSubjets.size(); i++) {
105 const fastjet::PseudoJet& subjet = vSubjets.at(i);
106 pDiTau->
setSubjetPtEtaPhiE(i, subjet.pt(), subjet.eta(), subjet.phi_std(), subjet.e());
107 ATH_MSG_DEBUG(
"subjet " << i <<
" pt: " << subjet.pt() <<
" eta: " << subjet.eta() <<
" phi: " << subjet.phi_std() <<
" e: " << subjet.e());
113 for (
const auto& track : tauTracks ) {
114 ATH_MSG_DEBUG(
"adding subjet track. eta: " << track->eta() <<
" phi: " << track->phi());
119 for (
const auto& track : isoTracks ) {
120 ATH_MSG_DEBUG(
"adding iso track. eta: " << track->eta() <<
" phi: " << track->phi());
125 for (
const auto& track : otherTracks ) {
126 ATH_MSG_DEBUG(
"adding other track. eta: " << track->eta() <<
" phi: " << track->phi());
130 return StatusCode::SUCCESS;
137 std::vector<const xAOD::TrackParticle*> &tauTracks,
138 std::vector<const xAOD::TrackParticle*> &isoTracks,
139 std::vector<const xAOD::TrackParticle*> &otherTracks)
const {
141 for (
const auto *
const track : *pTrackParticleCont ) {
145 tauTracks.push_back(track);
147 isoTracks.push_back(track);
149 otherTracks.push_back(track);
172 std::vector<fastjet::PseudoJet> vSubjets =
data->subjets;
173 for (
const auto &subjet : vSubjets) {
175 TLorentzVector temp_p4;
176 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)
char data[hepevt_bytes_allocation_ATLAS]
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
Test to see if the link can be dereferenced.
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.