28 std::string weightfile_0p(
"");
29 std::string weightfile_1p(
"");
30 std::string weightfile_2p(
"");
31 std::string weightfile_3p(
"");
36 if (weightfile_0p.empty()) {
38 return StatusCode::FAILURE;
40 ATH_MSG_INFO(
"Using network config [0-prong]: " << weightfile_0p);
46 if (weightfile_1p.empty()) {
48 return StatusCode::FAILURE;
50 ATH_MSG_INFO(
"Using network config [1-prong]: " << weightfile_1p);
56 if (weightfile_2p.empty()) {
58 return StatusCode::FAILURE;
60 ATH_MSG_INFO(
"Using network config [2-prong]: " << weightfile_2p);
66 if (weightfile_3p.empty()) {
68 return StatusCode::FAILURE;
70 ATH_MSG_INFO(
"Using network config [3-prong]: " << weightfile_3p);
84 if (!weightfile_0p.empty()) {
88 return StatusCode::FAILURE;
95 return StatusCode::FAILURE;
99 if (!weightfile_2p.empty()) {
103 return StatusCode::FAILURE;
110 return StatusCode::FAILURE;
113 return StatusCode::SUCCESS;
117 const EventContext& )
const {
122 output(tau) = -1111.0f;
126 if (tau.nTracks()>5)
return StatusCode::SUCCESS;
129 const auto nTracksCharged = tau.nTracksCharged();
132 std::vector<const xAOD::TauTrack *> tracks;
134 std::vector<xAOD::CaloVertexedTopoCluster> clusters;
138 if (nTracksCharged==0 &&
m_net_0p) {
139 output(tau) =
m_net_0p->compute(tau, tracks, clusters);
141 else if (nTracksCharged == 1) {
142 output(tau) =
m_net_1p->compute(tau, tracks, clusters);
144 else if (nTracksCharged == 2) {
146 output(tau) =
m_net_2p->compute(tau, tracks, clusters);
148 output(tau) =
m_net_3p->compute(tau, tracks, clusters);
151 else if (nTracksCharged > 2) {
152 output(tau) =
m_net_3p->compute(tau, tracks, clusters);
155 return StatusCode::SUCCESS;
159 std::vector<const xAOD::TauTrack*> tracks = tau.allTracks();
166 std::vector<const xAOD::TauTrack*>::iterator it = tracks.begin();
167 while(it != tracks.end()) {
169 it = tracks.erase(it);
179 return lhs->
pt() > rhs->pt();
181 std::sort(tracks.begin(), tracks.end(), cmp_pt);
187 out = std::move(tracks);
189 return StatusCode::SUCCESS;
196 std::vector<xAOD::CaloVertexedTopoCluster> vertexedClusterList = tau.vertexedClusters();
198 TLorentzVector clusterP4 = vertexedCluster.p4();
201 clusters.push_back(vertexedCluster);
207 return lhs.
p4().Et() > rhs.p4().Et();
209 std::sort(clusters.begin(), clusters.end(), et_cmp);
216 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x,...)
#define ATH_MSG_INFO(x,...)
Helper class to provide type-safe access to aux data.
Gaudi::Property< std::string > m_weightfile_2p
virtual StatusCode initialize() override
Tool initializer.
Gaudi::Property< std::string > m_input_layer_clusters
virtual StatusCode executeTool(xAOD::TauJet &tau, const EventContext &ctx) const override
Execute - called for each tau candidate.
Gaudi::Property< std::string > m_input_layer_tracks
Gaudi::Property< float > m_max_cluster_dr
std::unique_ptr< TauJetRNN > m_net_0p
Gaudi::Property< bool > m_doTrackClassification
Gaudi::Property< std::string > m_weightfile_1p
Gaudi::Property< std::size_t > m_max_clusters
Gaudi::Property< bool > m_useTRT
TauJetRNNEvaluator(const std::string &name="TauJetRNNEvaluator")
StatusCode get_tracks(const xAOD::TauJet &tau, std::vector< const xAOD::TauTrack * > &out) const
std::unique_ptr< TauJetRNN > m_net_2p
Gaudi::Property< std::string > m_output_node
std::unique_ptr< TauJetRNN > m_net_3p
virtual ~TauJetRNNEvaluator()
Gaudi::Property< std::string > m_weightfile_0p
StatusCode get_clusters(const xAOD::TauJet &tau, std::vector< xAOD::CaloVertexedTopoCluster > &out) const
Gaudi::Property< std::string > m_weightfile_3p
Gaudi::Property< std::string > m_output_layer
Gaudi::Property< std::string > m_input_layer_scalar
std::unique_ptr< TauJetRNN > m_net_1p
Gaudi::Property< bool > m_doVertexCorrection
Gaudi::Property< std::string > m_output_varname
Gaudi::Property< bool > m_applyLooseTrackSel
Gaudi::Property< std::size_t > m_max_tracks
virtual FourMom_t p4() const final
The full 4-momentum of the particle.
Evaluate cluster kinematics with a different vertex / signal state.
virtual double pt() const
The transverse momentum ( ) of the particle.
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
TauTrack_v1 TauTrack
Definition of the current version.
TauJet_v3 TauJet
Definition of the current "tau version".