ATLAS Offline Software
Loading...
Searching...
No Matches
FPGATrackSimGNNRootOutputTool.cxx
Go to the documentation of this file.
1// Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2
4
6// AthAlgTool
7
8FPGATrackSimGNNRootOutputTool::FPGATrackSimGNNRootOutputTool(const std::string& algname, const std::string& name, const IInterface *ifc) :
9 AthAlgTool(algname, name, ifc)
10{
11}
12
14{
15 ATH_CHECK(m_tHistSvc.retrieve());
17 return StatusCode::SUCCESS;
18}
19
21// Functions
22
24{
25 std::string hittree_str = "FPGATrackSimHit_reg" + m_region.value();
26 m_hit_tree = new TTree(hittree_str.c_str(), hittree_str.c_str());
27 m_hit_tree->Branch("hit_id",&m_hit_id);
28 m_hit_tree->Branch("hit_module_id",&m_hit_module_id);
29 m_hit_tree->Branch("hit_x",&m_hit_x);
30 m_hit_tree->Branch("hit_y",&m_hit_y);
31 m_hit_tree->Branch("hit_z",&m_hit_z);
32 m_hit_tree->Branch("hit_r",&m_hit_r);
33 m_hit_tree->Branch("hit_phi",&m_hit_phi);
34 m_hit_tree->Branch("hit_isPixel",&m_hit_isPixel);
35 m_hit_tree->Branch("hit_isStrip",&m_hit_isStrip);
36 m_hit_tree->Branch("hit_hitType",&m_hit_hitType);
37 m_hit_tree->Branch("hit_uniqueID",&m_hit_uniqueID);
38 m_hit_tree->Branch("hit_eventIndex",&m_hit_eventIndex);
39 m_hit_tree->Branch("hit_cluster_x",&m_hit_cluster_x);
40 m_hit_tree->Branch("hit_cluster_y",&m_hit_cluster_y);
41 m_hit_tree->Branch("hit_cluster_z",&m_hit_cluster_z);
42
43 std::string GNNhittree_str = "FPGATrackSimGNNHit_reg" + m_region.value();
44 m_GNNHit_tree = new TTree(GNNhittree_str.c_str(), GNNhittree_str.c_str());
45 m_GNNHit_tree->Branch("hit_id",&m_GNNHit_id);
46 m_GNNHit_tree->Branch("hit_module_id",&m_GNNHit_module_id);
47 m_GNNHit_tree->Branch("hit_road_id",&m_GNNHit_road_id);
48 m_GNNHit_tree->Branch("hit_x",&m_GNNHit_x);
49 m_GNNHit_tree->Branch("hit_y",&m_GNNHit_y);
50 m_GNNHit_tree->Branch("hit_z",&m_GNNHit_z);
51 m_GNNHit_tree->Branch("hit_r",&m_GNNHit_r);
52 m_GNNHit_tree->Branch("hit_phi",&m_GNNHit_phi);
53 m_GNNHit_tree->Branch("hit_eta",&m_GNNHit_eta);
54 m_GNNHit_tree->Branch("hit_cluster_x_1",&m_GNNHit_cluster_x_1);
55 m_GNNHit_tree->Branch("hit_cluster_y_1",&m_GNNHit_cluster_y_1);
56 m_GNNHit_tree->Branch("hit_cluster_z_1",&m_GNNHit_cluster_z_1);
57 m_GNNHit_tree->Branch("hit_cluster_r_1",&m_GNNHit_cluster_r_1);
58 m_GNNHit_tree->Branch("hit_cluster_phi_1",&m_GNNHit_cluster_phi_1);
59 m_GNNHit_tree->Branch("hit_cluster_eta_1",&m_GNNHit_cluster_eta_1);
60 m_GNNHit_tree->Branch("hit_cluster_x_2",&m_GNNHit_cluster_x_2);
61 m_GNNHit_tree->Branch("hit_cluster_y_2",&m_GNNHit_cluster_y_2);
62 m_GNNHit_tree->Branch("hit_cluster_z_2",&m_GNNHit_cluster_z_2);
63 m_GNNHit_tree->Branch("hit_cluster_r_2",&m_GNNHit_cluster_r_2);
64 m_GNNHit_tree->Branch("hit_cluster_phi_2",&m_GNNHit_cluster_phi_2);
65 m_GNNHit_tree->Branch("hit_cluster_eta_2",&m_GNNHit_cluster_eta_2);
66
67 std::string GNNedgetree_str = "FPGATrackSimGNNEdge_reg" + m_region.value();
68 m_GNNEdge_tree = new TTree(GNNedgetree_str.c_str(), GNNedgetree_str.c_str());
69 m_GNNEdge_tree->Branch("edge_index_1",&m_GNNEdge_index_1);
70 m_GNNEdge_tree->Branch("edge_index_2",&m_GNNEdge_index_2);
71 m_GNNEdge_tree->Branch("edge_dr",&m_GNNEdge_dR);
72 m_GNNEdge_tree->Branch("edge_dphi",&m_GNNEdge_dPhi);
73 m_GNNEdge_tree->Branch("edge_dz",&m_GNNEdge_dZ);
74 m_GNNEdge_tree->Branch("edge_deta",&m_GNNEdge_dEta);
75 m_GNNEdge_tree->Branch("edge_phislope",&m_GNNEdge_phiSlope);
76 m_GNNEdge_tree->Branch("edge_rphislope",&m_GNNEdge_rPhiSlope);
77 m_GNNEdge_tree->Branch("edge_score",&m_GNNEdge_score);
78
79 std::string roadtree_str = "FPGATrackSimRoad_reg" + m_region.value();
80 m_road_tree = new TTree(roadtree_str.c_str(), roadtree_str.c_str());
81 m_road_tree->Branch("road_id",&m_road_id);
82 m_road_tree->Branch("road_nHits",&m_road_nHits);
83 m_road_tree->Branch("road_nHits_layer",&m_road_nHits_layer);
84 m_road_tree->Branch("road_nLayers",&m_road_nLayers);
85 m_road_tree->Branch("road_hit_uniqueID",&m_road_hit_uniqueID);
86 m_road_tree->Branch("road_hit_barcode",&m_road_hit_barcode);
87 m_road_tree->Branch("road_hit_eventIndex",&m_road_hit_eventIndex);
88 m_road_tree->Branch("road_hit_z",&m_road_hit_z);
89 m_road_tree->Branch("road_hit_r",&m_road_hit_r);
90
91 ATH_CHECK(m_tHistSvc->regTree(Form("/TRIGFPGATrackSimGNNOUTPUT/%s",m_hit_tree->GetName()), m_hit_tree));
92 ATH_CHECK(m_tHistSvc->regTree(Form("/TRIGFPGATrackSimGNNOUTPUT/%s",m_GNNHit_tree->GetName()), m_GNNHit_tree));
93 ATH_CHECK(m_tHistSvc->regTree(Form("/TRIGFPGATrackSimGNNOUTPUT/%s",m_GNNEdge_tree->GetName()), m_GNNEdge_tree));
94 ATH_CHECK(m_tHistSvc->regTree(Form("/TRIGFPGATrackSimGNNOUTPUT/%s",m_road_tree->GetName()), m_road_tree));
95
96 return StatusCode::SUCCESS;
97}
98
99StatusCode FPGATrackSimGNNRootOutputTool::fillTree(const std::vector<std::shared_ptr<const FPGATrackSimHit>> & hits,
100 const std::vector<std::shared_ptr<FPGATrackSimGNNHit>> & gnn_hits,
101 const std::vector<std::shared_ptr<FPGATrackSimGNNEdge>> & edges,
102 const std::vector<std::shared_ptr<const FPGATrackSimRoad>> & roads)
103{
104 // fill the FPGATrackSimHits
105 int hit_count = 0;
106 for (const auto& hit : hits) {
107 m_hit_id.push_back(hit_count);
108 m_hit_module_id.push_back(hit->getIdentifier());
109 m_hit_x.push_back(hit->getX());
110 m_hit_y.push_back(hit->getY());
111 m_hit_z.push_back(hit->getZ());
112 m_hit_r.push_back(hit->getR());
113 m_hit_phi.push_back(hit->getGPhi());
114 m_hit_isPixel.push_back(hit->isPixel());
115 m_hit_isStrip.push_back(hit->isStrip());
116 m_hit_hitType.push_back(static_cast<int>(hit->getHitType()));
117 m_hit_uniqueID.push_back(hit->getUniqueID());
118 m_hit_eventIndex.push_back(hit->getEventIndex());
119 m_hit_cluster_x.push_back(hit->getOriginalHit().getX());
120 m_hit_cluster_y.push_back(hit->getOriginalHit().getY());
121 m_hit_cluster_z.push_back(hit->getOriginalHit().getZ());
122 hit_count++;
123 }
124 m_hit_tree->Fill();
125
126 // fill the FPGATrackSimGNNHits
127 for (const auto& hit : gnn_hits) {
128 m_GNNHit_id.push_back(hit->getHitID());
129 m_GNNHit_module_id.push_back(hit->getIdentifier());
130 m_GNNHit_road_id.push_back(hit->getRoadID());
131 m_GNNHit_x.push_back(hit->getX());
132 m_GNNHit_y.push_back(hit->getY());
133 m_GNNHit_z.push_back(hit->getZ());
134 m_GNNHit_r.push_back(hit->getR());
135 m_GNNHit_phi.push_back(hit->getPhi());
136 m_GNNHit_eta.push_back(hit->getEta());
137 m_GNNHit_cluster_x_1.push_back(hit->getCluster1X());
138 m_GNNHit_cluster_y_1.push_back(hit->getCluster1Y());
139 m_GNNHit_cluster_z_1.push_back(hit->getCluster1Z());
140 m_GNNHit_cluster_r_1.push_back(hit->getCluster1R());
141 m_GNNHit_cluster_phi_1.push_back(hit->getCluster1Phi());
142 m_GNNHit_cluster_eta_1.push_back(hit->getCluster1Eta());
143 m_GNNHit_cluster_x_2.push_back(hit->getCluster2X());
144 m_GNNHit_cluster_y_2.push_back(hit->getCluster2Y());
145 m_GNNHit_cluster_z_2.push_back(hit->getCluster2Z());
146 m_GNNHit_cluster_r_2.push_back(hit->getCluster2R());
147 m_GNNHit_cluster_phi_2.push_back(hit->getCluster2Phi());
148 m_GNNHit_cluster_eta_2.push_back(hit->getCluster2Eta());
149 }
150 m_GNNHit_tree->Fill();
151
152 // fill the FPGATrackSimGNNEdges
153 for (const auto& edge : edges) {
154 m_GNNEdge_index_1.push_back(edge->getEdgeIndex1());
155 m_GNNEdge_index_2.push_back(edge->getEdgeIndex2());
156 m_GNNEdge_dR.push_back(edge->getEdgeDR());
157 m_GNNEdge_dPhi.push_back(edge->getEdgeDPhi());
158 m_GNNEdge_dZ.push_back(edge->getEdgeDZ());
159 m_GNNEdge_dEta.push_back(edge->getEdgeDEta());
160 m_GNNEdge_phiSlope.push_back(edge->getEdgePhiSlope());
161 m_GNNEdge_rPhiSlope.push_back(edge->getEdgeRPhiSlope());
162 m_GNNEdge_score.push_back(edge->getEdgeScore());
163 }
164 m_GNNEdge_tree->Fill();
165
166 for (const auto& road : roads) {
167 m_road_id.push_back(road->getRoadID());
168 m_road_nHits.push_back(road->getNHits());
169 m_road_nHits_layer.push_back(road->getNHits_layer());
170 m_road_nLayers.push_back(road->getNLayers());
171
172 std::vector<std::vector<HepMcParticleLink::barcode_type>> road_hit_uniqueID(road->getNLayers());
173 std::vector<std::vector<HepMcParticleLink::barcode_type>> road_hit_barcode(road->getNLayers());
174 std::vector<std::vector<long>> road_hit_eventIndex(road->getNLayers());
175 std::vector<std::vector<float>> road_hit_z(road->getNLayers());
176 std::vector<std::vector<float>> road_hit_r(road->getNLayers());
177 for (size_t l = 0; l < road->getNLayers(); ++l) {
178 for (const auto &layerH : road->getHits(l)) {
179 road_hit_uniqueID[l].push_back((*layerH).getUniqueID());
180 road_hit_barcode[l].push_back((*layerH).getBarcode());
181 road_hit_eventIndex[l].push_back((*layerH).getEventIndex());
182 road_hit_z[l].push_back((*layerH).getOriginalHit().getZ());
183 road_hit_r[l].push_back((*layerH).getOriginalHit().getR());
184 }
185 }
186
187 m_road_hit_uniqueID.push_back(std::move(road_hit_uniqueID));
188 m_road_hit_barcode.push_back(std::move(road_hit_barcode));
189 m_road_hit_eventIndex.push_back(std::move(road_hit_eventIndex));
190 m_road_hit_z.push_back(std::move(road_hit_z));
191 m_road_hit_r.push_back(std::move(road_hit_r));
192
193 }
194 m_road_tree->Fill();
195
196 resetVectors();
197
198 return StatusCode::SUCCESS;
199}
200
202{
203 m_hit_id.clear();
204 m_hit_module_id.clear();
205 m_hit_x.clear();
206 m_hit_y.clear();
207 m_hit_z.clear();
208 m_hit_r.clear();
209 m_hit_phi.clear();
210 m_hit_isPixel.clear();
211 m_hit_isStrip.clear();
212 m_hit_hitType.clear();
213 m_hit_uniqueID.clear();
214 m_hit_eventIndex.clear();
215 m_hit_cluster_x.clear();
216 m_hit_cluster_y.clear();
217 m_hit_cluster_z.clear();
218 m_GNNHit_id.clear();
219 m_GNNHit_module_id.clear();
220 m_GNNHit_road_id.clear();
221 m_GNNHit_x.clear();
222 m_GNNHit_y.clear();
223 m_GNNHit_z.clear();
224 m_GNNHit_r.clear();
225 m_GNNHit_phi.clear();
226 m_GNNHit_eta.clear();
227 m_GNNHit_cluster_x_1.clear();
228 m_GNNHit_cluster_y_1.clear();
229 m_GNNHit_cluster_z_1.clear();
230 m_GNNHit_cluster_r_1.clear();
233 m_GNNHit_cluster_x_2.clear();
234 m_GNNHit_cluster_y_2.clear();
235 m_GNNHit_cluster_z_2.clear();
236 m_GNNHit_cluster_r_2.clear();
239 m_GNNEdge_index_1.clear();
240 m_GNNEdge_index_2.clear();
241 m_GNNEdge_dR.clear();
242 m_GNNEdge_dPhi.clear();
243 m_GNNEdge_dZ.clear();
244 m_GNNEdge_dEta.clear();
245 m_GNNEdge_phiSlope.clear();
246 m_GNNEdge_rPhiSlope.clear();
247 m_GNNEdge_score.clear();
248 m_road_id.clear();
249 m_road_nHits.clear();
250 m_road_nHits_layer.clear();
251 m_road_nLayers.clear();
252 m_road_hit_uniqueID.clear();
253 m_road_hit_barcode.clear();
254 m_road_hit_eventIndex.clear();
255 m_road_hit_z.clear();
256 m_road_hit_r.clear();
257}
#define ATH_CHECK
Evaluate an expression and check for errors.
Implements tool to output hit, edge and road information from GNN pattern recognition pipeline.
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
std::vector< unsigned int > m_GNNEdge_index_1
std::vector< std::vector< std::vector< float > > > m_road_hit_r
std::vector< HepMcParticleLink::barcode_type > m_hit_uniqueID
std::vector< std::vector< std::vector< float > > > m_road_hit_z
std::vector< unsigned int > m_GNNEdge_index_2
Gaudi::Property< std::string > m_region
std::vector< std::vector< std::vector< long > > > m_road_hit_eventIndex
std::vector< std::vector< size_t > > m_road_nHits_layer
std::vector< unsigned int > m_GNNHit_module_id
std::vector< std::vector< std::vector< HepMcParticleLink::barcode_type > > > m_road_hit_uniqueID
std::vector< std::vector< std::vector< HepMcParticleLink::barcode_type > > > m_road_hit_barcode
StatusCode fillTree(const std::vector< std::shared_ptr< const FPGATrackSimHit > > &hits, const std::vector< std::shared_ptr< FPGATrackSimGNNHit > > &gnn_hits, const std::vector< std::shared_ptr< FPGATrackSimGNNEdge > > &edges, const std::vector< std::shared_ptr< const FPGATrackSimRoad > > &roads)
FPGATrackSimGNNRootOutputTool(const std::string &, const std::string &, const IInterface *)
std::vector< unsigned int > m_hit_module_id