ATLAS Offline Software
Loading...
Searching...
No Matches
TausRUsDataLoader.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef TAURECTOOLS_TAUSRUSDATALOADER_H
6#define TAURECTOOLS_TAUSRUSDATALOADER_H
7
11
13
16
18#include "xAODTau/TauJet.h"
19#include "xAODTau/TauTrack.h"
20#include "xAODTracking/Vertex.h"
22
23#include <cstddef>
24#include <functional>
25#include <string>
26#include <unordered_map>
27#include <vector>
28
33namespace TausRUsClusterVars {
34 // Kinematics of the raw cluster, clust(), not of the vertex-corrected p4
35 bool dEtaRaw (const xAOD::TauJet& tau, const xAOD::CaloVertexedTopoCluster& cluster, float& out);
36 bool dPhiRaw (const xAOD::TauJet& tau, const xAOD::CaloVertexedTopoCluster& cluster, float& out);
37 bool etaRaw (const xAOD::TauJet& tau, const xAOD::CaloVertexedTopoCluster& cluster, float& out);
38 bool phiRaw (const xAOD::TauJet& tau, const xAOD::CaloVertexedTopoCluster& cluster, float& out);
39 bool log_etRaw(const xAOD::TauJet& tau, const xAOD::CaloVertexedTopoCluster& cluster, float& out);
40 bool log_eRaw (const xAOD::TauJet& tau, const xAOD::CaloVertexedTopoCluster& cluster, float& out);
41} // namespace TausRUsClusterVars
42
43namespace TausRUsTrackVars {
44 bool log_pt(const xAOD::TauJet& tau, const xAOD::TauTrack& track, float& out);
45 bool log_e (const xAOD::TauJet& tau, const xAOD::TauTrack& track, float& out);
46 bool z0 (const xAOD::TauJet& tau, const xAOD::TauTrack& track, float& out);
47 // Read off the TrackParticle, unlike TauTrackVars::eProbabilityNN which reads the TauTrack
48 bool eProbabilityNN_trackParticle(const xAOD::TauJet& tau, const xAOD::TauTrack& track, float& out);
49} // namespace TausRUsTrackVars
50
51namespace TausRUsVertexVars {
52 bool sumPt2(const xAOD::TauJet& tau, const xAOD::Vertex& vertex, float& out);
53 bool x (const xAOD::TauJet& tau, const xAOD::Vertex& vertex, float& out);
54 bool y (const xAOD::TauJet& tau, const xAOD::Vertex& vertex, float& out);
55 bool z (const xAOD::TauJet& tau, const xAOD::Vertex& vertex, float& out);
56} // namespace TausRUsVertexVars
57
68public:
70 std::string name;
71 float offset{0.f};
72 float scale{1.f};
73 };
74
75 struct InputConfig {
76 std::string name;
77 std::string collection;
78 size_t maxObjects{1};
79 std::vector<VariableConfig> variables;
80 };
81
82 explicit TausRUsDataLoader(const std::string& name);
83
85 StatusCode initialize(const std::vector<InputConfig>& inputs);
86
88 const xAOD::VertexContainer& vertices) const;
89
92 std::vector<const xAOD::TauTrack*> selectTracks(const xAOD::TauJet& tau) const;
93 std::vector<const xAOD::Vertex*> selectVertices(const xAOD::VertexContainer& vertices) const;
94
95 size_t maxTracks() const { return m_tracks.maxObjects; }
96 size_t maxVertices() const { return m_vertices.maxObjects; }
97
98private:
99 using ClusterFunc_t = std::function<bool(const xAOD::TauJet&, const xAOD::CaloVertexedTopoCluster&, float&)>;
100 using TrackFunc_t = std::function<bool(const xAOD::TauJet&, const xAOD::TauTrack&, float&)>;
101 using VertexFunc_t = std::function<bool(const xAOD::TauJet&, const xAOD::Vertex&, float&)>;
102 using ScalarFunc_t = std::function<bool(const xAOD::TauJet&, float&)>;
103
105 template <class Func>
106 struct Sequence {
107 std::string name;
108 size_t maxObjects{0};
109 std::vector<Func> funcs;
110 std::vector<float> offsets;
111 std::vector<float> scales;
112 };
113
114 template <class Func>
115 StatusCode resolve(const InputConfig& input,
116 const std::unordered_map<std::string, Func>& funcMap,
117 Sequence<Func>& sequence) const;
118
119 std::vector<const xAOD::CaloVertexedTopoCluster*> selectClusters(
120 const xAOD::TauJet& tau,
121 std::vector<xAOD::CaloVertexedTopoCluster>& storage) const;
122
127
128 inline static const std::unordered_map<std::string, ClusterFunc_t> m_clusterFuncs = {
129 {"dEtaRaw", TausRUsClusterVars::dEtaRaw},
130 {"dPhiRaw", TausRUsClusterVars::dPhiRaw},
131 {"etaRaw", TausRUsClusterVars::etaRaw},
132 {"phiRaw", TausRUsClusterVars::phiRaw},
133 {"log_etRaw", TausRUsClusterVars::log_etRaw},
134 {"log_eRaw", TausRUsClusterVars::log_eRaw},
135 {"FIRST_ENG_DENS", TauClusterVars::FIRST_ENG_DENS},
136 {"SECOND_R", TauClusterVars::SECOND_R},
137 {"EM_PROBABILITY", TauClusterVars::EM_PROBABILITY},
138 {"SECOND_LAMBDA", TauClusterVars::SECOND_LAMBDA},
139 {"CENTER_LAMBDA", TauClusterVars::CENTER_LAMBDA},
140 {"CENTER_MAG", TauClusterVars::CENTER_MAG},
141 };
142
143 inline static const std::unordered_map<std::string, TrackFunc_t> m_trackFuncs = {
144 {"dEta", TauTrackVars::dEta},
145 {"dPhi", TauTrackVars::dPhi},
146 {"log_pt", TausRUsTrackVars::log_pt},
147 {"log_e", TausRUsTrackVars::log_e},
148 {"trackEta", TauTrackVars::trackEta},
149 {"trackPhi", TauTrackVars::trackPhi},
150 {"charge", TauTrackVars::charge},
151 {"qOverP", TauTrackVars::qOverP},
152 {"d0_old", TauTrackVars::d0_old},
153 {"z0", TausRUsTrackVars::z0},
154 {"z0sinthetaTJVA", TauTrackVars::z0sinthetaTJVA},
155 {"numberOfTRTHits", TauTrackVars::numberOfTRTHits},
156 {"numberOfTRTHighThresholdHits", TauTrackVars::numberOfTRTHighThresholdHits},
157 {"numberOfSCTHits", TauTrackVars::numberOfSCTHits},
158 {"numberOfPixelHits", TauTrackVars::numberOfPixelHits},
159 {"numberOfInnermostPixelLayerHits", TauTrackVars::numberOfInnermostPixelLayerHits},
160 {"eProbabilityNN_trackParticle", TausRUsTrackVars::eProbabilityNN_trackParticle},
161 };
162
163 inline static const std::unordered_map<std::string, VertexFunc_t> m_vertexFuncs = {
164 {"sumPt2", TausRUsVertexVars::sumPt2},
168 };
169
170 inline static const std::unordered_map<std::string, ScalarFunc_t> m_scalarFuncs = {
171 {"ptJetSeed", TauScalarVars::ptJetSeed},
172 {"etaJetSeed", TauScalarVars::etaJetSeed},
173 {"phiJetSeed", TauScalarVars::phiJetSeed},
174 {"mJetSeed", TauScalarVars::mJetSeed},
175 };
176};
177
178#endif // TAURECTOOLS_TAUSRUSDATALOADER_H
Evaluate cluster kinematics with a different vertex / signal state.
#define y
#define x
#define z
std::function< bool(const xAOD::TauJet &, float &)> ScalarFunc_t
size_t maxVertices() const
std::function< bool(const xAOD::TauJet &, const xAOD::Vertex &, float &)> VertexFunc_t
static const std::unordered_map< std::string, VertexFunc_t > m_vertexFuncs
StatusCode resolve(const InputConfig &input, const std::unordered_map< std::string, Func > &funcMap, Sequence< Func > &sequence) const
std::vector< const xAOD::TauTrack * > selectTracks(const xAOD::TauJet &tau) const
The tracks and vertices the input tensors are built from, in slot order, for decoding the per-slot he...
static const std::unordered_map< std::string, ScalarFunc_t > m_scalarFuncs
std::vector< const xAOD::CaloVertexedTopoCluster * > selectClusters(const xAOD::TauJet &tau, std::vector< xAOD::CaloVertexedTopoCluster > &storage) const
Sequence< VertexFunc_t > m_vertices
size_t maxTracks() const
std::function< bool(const xAOD::TauJet &, const xAOD::TauTrack &, float &)> TrackFunc_t
AthInfer::InputDataMap loadInputs(const xAOD::TauJet &tau, const xAOD::VertexContainer &vertices) const
TausRUsDataLoader(const std::string &name)
static const std::unordered_map< std::string, TrackFunc_t > m_trackFuncs
static const std::unordered_map< std::string, ClusterFunc_t > m_clusterFuncs
std::function< bool(const xAOD::TauJet &, const xAOD::CaloVertexedTopoCluster &, float &)> ClusterFunc_t
Sequence< ClusterFunc_t > m_clusters
Sequence< ScalarFunc_t > m_scalars
Sequence< TrackFunc_t > m_tracks
std::vector< const xAOD::Vertex * > selectVertices(const xAOD::VertexContainer &vertices) const
Class mimicking the AthMessaging class from the offline software.
Evaluate cluster kinematics with a different vertex / signal state.
std::map< std::string, InferenceData > InputDataMap
bool FIRST_ENG_DENS(const xAOD::TauJet &, const xAOD::CaloVertexedTopoCluster &cluster, float &out)
bool CENTER_MAG(const xAOD::TauJet &, const xAOD::CaloVertexedTopoCluster &cluster, float &out)
bool CENTER_LAMBDA(const xAOD::TauJet &, const xAOD::CaloVertexedTopoCluster &cluster, float &out)
bool EM_PROBABILITY(const xAOD::TauJet &, const xAOD::CaloVertexedTopoCluster &cluster, float &out)
bool SECOND_R(const xAOD::TauJet &, const xAOD::CaloVertexedTopoCluster &cluster, float &out)
bool SECOND_LAMBDA(const xAOD::TauJet &, const xAOD::CaloVertexedTopoCluster &cluster, float &out)
bool phiJetSeed(const xAOD::TauJet &tau, float &out)
bool etaJetSeed(const xAOD::TauJet &tau, float &out)
bool mJetSeed(const xAOD::TauJet &tau, float &out)
bool ptJetSeed(const xAOD::TauJet &tau, float &out)
bool numberOfSCTHits(const xAOD::TauJet &, const xAOD::TauTrack &track, float &out)
bool numberOfPixelHits(const xAOD::TauJet &, const xAOD::TauTrack &track, float &out)
bool trackEta(const xAOD::TauJet &, const xAOD::TauTrack &track, float &out)
bool dEta(const xAOD::TauJet &tau, const xAOD::TauTrack &track, float &out)
bool dPhi(const xAOD::TauJet &tau, const xAOD::TauTrack &track, float &out)
bool numberOfTRTHighThresholdHits(const xAOD::TauJet &, const xAOD::TauTrack &track, float &out)
bool numberOfInnermostPixelLayerHits(const xAOD::TauJet &, const xAOD::TauTrack &track, float &out)
bool z0sinthetaTJVA(const xAOD::TauJet &, const xAOD::TauTrack &track, float &out)
bool numberOfTRTHits(const xAOD::TauJet &, const xAOD::TauTrack &track, float &out)
bool trackPhi(const xAOD::TauJet &, const xAOD::TauTrack &track, float &out)
bool qOverP(const xAOD::TauJet &, const xAOD::TauTrack &track, float &out)
bool d0_old(const xAOD::TauJet &, const xAOD::TauTrack &track, float &out)
bool charge(const xAOD::TauJet &, const xAOD::TauTrack &track, float &out)
TausRUs input variables that no other tau network uses.
bool dPhiRaw(const xAOD::TauJet &tau, const xAOD::CaloVertexedTopoCluster &cluster, float &out)
bool dEtaRaw(const xAOD::TauJet &tau, const xAOD::CaloVertexedTopoCluster &cluster, float &out)
bool log_etRaw(const xAOD::TauJet &, const xAOD::CaloVertexedTopoCluster &cluster, float &out)
bool log_eRaw(const xAOD::TauJet &, const xAOD::CaloVertexedTopoCluster &cluster, float &out)
bool phiRaw(const xAOD::TauJet &, const xAOD::CaloVertexedTopoCluster &cluster, float &out)
bool etaRaw(const xAOD::TauJet &, const xAOD::CaloVertexedTopoCluster &cluster, float &out)
bool log_e(const xAOD::TauJet &, const xAOD::TauTrack &track, float &out)
bool z0(const xAOD::TauJet &, const xAOD::TauTrack &track, float &out)
bool log_pt(const xAOD::TauJet &, const xAOD::TauTrack &track, float &out)
bool eProbabilityNN_trackParticle(const xAOD::TauJet &, const xAOD::TauTrack &track, float &out)
bool x(const xAOD::TauJet &, const xAOD::Vertex &vertex, float &out)
bool z(const xAOD::TauJet &, const xAOD::Vertex &vertex, float &out)
bool sumPt2(const xAOD::TauJet &, const xAOD::Vertex &vertex, float &out)
bool y(const xAOD::TauJet &, const xAOD::Vertex &vertex, float &out)
VertexContainer_v1 VertexContainer
Definition of the current "Vertex container version".
Vertex_v1 Vertex
Define the latest version of the vertex class.
TauTrack_v1 TauTrack
Definition of the current version.
Definition TauTrack.h:16
TauJet_v3 TauJet
Definition of the current "tau version".
Definition TauJet.h:17
void initialize()
std::string collection
clusters, tracks, vertices or seedjet
std::string name
model input node name
std::vector< VariableConfig > variables
size_t maxObjects
truncation, 1 for seedjet
One input node, its variables resolved to their functions.
float offset
value is (raw + offset) * scale