Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
FPGATrackSimHoughRootOutputTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
9 
10 
12 FPGATrackSimHoughRootOutputTool::FPGATrackSimHoughRootOutputTool(const std::string& algname, const std::string& name, const IInterface *ifc) :
13  AthAlgTool(algname, name, ifc)
14 {
15 }
16 
17 
18 
19 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
21 {
22  ATH_CHECK(m_FPGATrackSimMapping.retrieve());
23  ATH_CHECK(m_tHistSvc.retrieve());
24  ATH_CHECK(m_EvtSel.retrieve());
25 
26  if(m_algorithm == "Normal") m_algo=ORAlgo::Normal;
27  else if(m_algorithm == "Invert") m_algo=ORAlgo::InvertGrouping;
28 
30  return StatusCode::SUCCESS;
31 }
32 
33 
34 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
36 {
37  m_tree = new TTree("FPGATrackSimHoughRootOutput","FPGATrackSimHoughRootOutput");
38  m_tree->Branch("x",&m_x);
39  m_tree->Branch("y",&m_y);
40  m_tree->Branch("z",&m_z);
41  m_tree->Branch("volumeID",&m_volumeID);
42  m_tree->Branch("custom_layerID",&m_custom_layerID);
43 
44  m_tree->Branch("layerID",&m_layerID);
45  m_tree->Branch("etaID",&m_etaID);
46 
47  m_tree->Branch("gphi",&m_gphi);
48  m_tree->Branch("zIdeal",&m_zIdeal);
49  m_tree->Branch("gphiIdeal",&m_gphiIdeal);
50  m_tree->Branch("phi",&m_phi);
51  m_tree->Branch("invpt",&m_invpt);
52  m_tree->Branch("tracknumber",&m_tracknumber);
53  m_tree->Branch("roadnumber",&m_roadnumber);
54  m_tree->Branch("barcode",&m_barcode);
55  m_tree->Branch("barcodefrac",&m_barcodefrac);
56  m_tree->Branch("eventindex",&m_eventindex);
57  m_tree->Branch("isRealHit",&m_realHit);
58  m_tree->Branch("isPixel",&m_isPixel);
59  m_tree->Branch("layer",&m_layer);
60  m_tree->Branch("isBarrel",&m_isBarrel);
61  m_tree->Branch("etawidth",&m_etawidth);
62  m_tree->Branch("phiwidth",&m_phiwidth);
63  m_tree->Branch("etamodule",&m_etamodule);
64  m_tree->Branch("phimodule",&m_phimodule);
65  m_tree->Branch("ID",&m_ID);
66  m_tree->Branch("diskLayer",&m_diskLayer);
67 
68  m_tree->Branch("candidate_barcodefrac",&m_candidate_barcodefrac);
69  m_tree->Branch("candidate_barcode",&m_candidate_barcode);
70  m_tree->Branch("candidate_eventindex",&m_candidate_eventindex);
71  m_tree->Branch("treeindex",&m_treeindex);
72  m_tree->Branch("subregion",&m_subregion);
73  m_tree->Branch("fakelabel",&m_fakelabel);
74  m_tree->Branch("passesOR",&m_passesOR);
75  m_tree->Branch("roadChi2",&m_roadChi2);
76  m_tree->Branch("nMissingHits",&m_nMissingHits);
77  m_tree->Branch("NTracksORMinusRoads",&m_NTracksORMinusRoads);
78 
79  m_treeindex = 0;
80 
81  m_truthtree = new TTree("FPGATrackSimTruthTree","FPGATrackSimTruthTree");
82  m_truthtree->Branch("truth_d0",&m_truth_d0);
83  m_truthtree->Branch("truth_z0",&m_truth_z0);
84  m_truthtree->Branch("truth_pt",&m_truth_pt);
85  m_truthtree->Branch("truth_eta",&m_truth_eta);
86  m_truthtree->Branch("truth_phi",&m_truth_phi);
87  m_truthtree->Branch("truth_q",&m_truth_q);
88  m_truthtree->Branch("truth_pdg",&m_truth_pdg);
89  m_truthtree->Branch("truth_barcode",&m_truth_barcode);
90  m_truthtree->Branch("truth_eventindex",&m_truth_eventindex);
91  m_truthtree->Branch("truth_track_hit_x",&m_track_hit_x);
92  m_truthtree->Branch("truth_track_hit_y",&m_track_hit_y);
93  m_truthtree->Branch("truth_track_hit_z",&m_track_hit_z);
94  m_truthtree->Branch("truth_track_hit_R",&m_track_hit_R);
95  m_truthtree->Branch("truth_track_hit_phi",&m_track_hit_phi);
96  m_truthtree->Branch("truth_track_hit_layer_disk",&m_track_hit_layer_disk);
97  m_truthtree->Branch("has_strip_nonspacepoint",&m_has_strip_nonspacepoint);
98  m_truthtree->Branch("truth_track_hit_isPixel", &m_track_hit_isPixel);
99  m_truthtree->Branch("truth_track_hit_isStrip", &m_track_hit_isStrip);
100  m_truthtree->Branch("truth_track_hit_isClustered", &m_track_hit_isClustered);
101  m_truthtree->Branch("truth_track_hit_isSpacepoint", &m_track_hit_isSpacepoint);
102  m_truthtree->Branch("truth_track_hit_barcode", &m_track_hit_barcode);
103  m_truthtree->Branch("truth_track_hit_barcodefrac", &m_track_hit_barcodefrac);
104  m_truthtree->Branch("truth_track_hit_zIdeal", &m_track_hit_zIdeal);
105  m_truthtree->Branch("truth_track_hit_gphiIdeal", &m_track_hit_gphiIdeal);
106  m_truthtree->Branch("truth_track_hit_fineID", &m_track_hit_fineID);
107  m_truthtree->Branch("truth_track_hit_volumeID", &m_track_hit_volumeID);
108  m_truthtree->Branch("truth_track_hit_isMapped", &m_track_hit_isMapped);
109 
110  m_offlinetree = new TTree("FPGATrackSimOfflineTree","FPGATrackSimOfflineTree");
111  m_offlinetree->Branch("offline_d0",&m_offline_d0);
112  m_offlinetree->Branch("offline_z0",&m_offline_z0);
113  m_offlinetree->Branch("offline_pt",&m_offline_pt);
114  m_offlinetree->Branch("offline_eta",&m_offline_eta);
115  m_offlinetree->Branch("offline_phi",&m_offline_phi);
116  m_offlinetree->Branch("offline_q",&m_offline_q);
117  m_offlinetree->Branch("offline_barcode",&m_offline_barcode);
118  m_offlinetree->Branch("offline_barcodefrac",&m_offline_barcodefrac);
119  m_offlinetree->Branch("offline_n_holes",&m_offline_n_holes);
120  m_offlinetree->Branch("offline_n_inertmaterial",&m_offline_n_inertmaterial);
121  m_offlinetree->Branch("offline_n_measurement",&m_offline_n_measurement);
122  m_offlinetree->Branch("offline_n_brempoint",&m_offline_n_brempoint);
123  m_offlinetree->Branch("offline_n_scatterer",&m_offline_n_scatterer);
124  m_offlinetree->Branch("offline_n_perigee",&m_offline_n_perigee);
125  m_offlinetree->Branch("offline_n_outlier",&m_offline_n_outlier);
126  m_offlinetree->Branch("offline_n_other",&m_offline_n_other);
127 
128  ATH_CHECK(m_tHistSvc->regTree(Form("/TRIGFPGATrackSimHOUGHOUTPUT/%s",m_tree->GetName()), m_tree));
129  ATH_CHECK(m_tHistSvc->regTree(Form("/TRIGFPGATrackSimHOUGHOUTPUT/%s",m_truthtree->GetName()), m_truthtree));
130  ATH_CHECK(m_tHistSvc->regTree(Form("/TRIGFPGATrackSimHOUGHOUTPUT/%s",m_offlinetree->GetName()), m_offlinetree));
131 
132  return StatusCode::SUCCESS;
133 }
134 
135 
136 StatusCode FPGATrackSimHoughRootOutputTool::fillTree(const std::vector<FPGATrackSimTrack> &track_cands, const std::vector<FPGATrackSimTruthTrack> &truthTracks, const std::vector<FPGATrackSimOfflineTrack> &offlineTracks, const std::vector<std::shared_ptr<const FPGATrackSimHit>> &hits_2nd, const bool writeOutNonSPStripHits, const bool roadsAreSecondStage)
137 {
138  ATH_MSG_DEBUG("Running HoughOutputTool!!");
139 
140  m_tracknumber = 0;
141  ResetVectors();
142 
143  if (roadsAreSecondStage) {
144  m_SUBREGIONMAP = m_FPGATrackSimMapping->SubRegionMap_2nd();
145  }
146 
147 
148  std::vector<float> tmp_hits_x;
149  std::vector<float> tmp_hits_y;
150  std::vector<float> tmp_hits_z;
151  std::vector<float> tmp_hits_R;
152  std::vector<float> tmp_hits_phi;
153  std::vector<int> tmp_hits_layer_disk;
154  std::vector<bool> tmp_hits_mapped;
155  std::vector<bool> tmp_hits_isPixel;
156  std::vector<bool> tmp_hits_isStrip;
157  std::vector<bool> tmp_hits_isClustered;
158  std::vector<bool> tmp_hits_isSpacepoint;
159  std::vector<float> tmp_hits_barcodefrac;
160  std::vector<int> tmp_hits_barcode;
161  std::vector<float> tmp_hits_zIdeal;
162  std::vector<float> tmp_hits_gphiIdeal;
163  std::vector<long> tmp_hits_fineID;
164  std::vector<int> tmp_hits_volumeID;
165 
166  std::vector<float> tmp_hits_x_sorted;
167  std::vector<float> tmp_hits_y_sorted;
168  std::vector<float> tmp_hits_z_sorted;
169  std::vector<float> tmp_hits_R_sorted;
170  std::vector<float> tmp_hits_phi_sorted;
171  std::vector<int> tmp_hits_layer_disk_sorted;
172  std::vector<bool> tmp_hits_isPixel_sorted;
173  std::vector<bool> tmp_hits_isStrip_sorted;
174  std::vector<bool> tmp_hits_isClustered_sorted;
175  std::vector<bool> tmp_hits_isSpacepoint_sorted;
176  std::vector<float> tmp_hits_barcodefrac_sorted;
177  std::vector<int> tmp_hits_barcode_sorted;
178  std::vector<float> tmp_hits_zIdeal_sorted;
179  std::vector<float> tmp_hits_gphiIdeal_sorted;
180  std::vector<long> tmp_hits_fineID_sorted;
181  std::vector<int> tmp_hits_volumeID_sorted;
182 
183  std::vector<bool> tmp_hits_mapped_sorted;
184  bool has_strip_nonspacepoint;
185 
186 
187  // fill the truth tree, simply once per event! to know which entry here to loop at for a given road or hit
188  // combination below, use treeindex from below to find the entry here
189  for (const auto & track : truthTracks) {
190  if (!m_EvtSel->passCuts(track)) continue;
191  if (track.getStatus() != 1) continue;
192 
193 
194  tmp_hits_x.clear();
195  tmp_hits_y.clear();
196  tmp_hits_z.clear();
197  tmp_hits_R.clear();
198  tmp_hits_phi.clear();
199  tmp_hits_layer_disk.clear();
200  tmp_hits_mapped.clear();
201  tmp_hits_isPixel.clear();
202  tmp_hits_isStrip.clear();
203  tmp_hits_isClustered.clear();
204  tmp_hits_isSpacepoint.clear();
205  tmp_hits_barcodefrac.clear();
206  tmp_hits_barcode.clear();
207  tmp_hits_zIdeal.clear();
208  tmp_hits_gphiIdeal.clear();
209  tmp_hits_fineID.clear();
210 
211  tmp_hits_x_sorted.clear();
212  tmp_hits_y_sorted.clear();
213  tmp_hits_z_sorted.clear();
214  tmp_hits_R_sorted.clear();
215  tmp_hits_phi_sorted.clear();
216  tmp_hits_layer_disk_sorted.clear();
217  tmp_hits_mapped_sorted.clear();
218  tmp_hits_isPixel_sorted.clear();
219  tmp_hits_isStrip_sorted.clear();
220  tmp_hits_isClustered_sorted.clear();
221  tmp_hits_isSpacepoint_sorted.clear();
222  tmp_hits_barcodefrac_sorted.clear();
223  tmp_hits_barcode_sorted.clear();
224  tmp_hits_zIdeal_sorted.clear();
225  tmp_hits_gphiIdeal_sorted.clear();
226  tmp_hits_fineID_sorted.clear();
227  tmp_hits_volumeID.clear();
228 
229  has_strip_nonspacepoint = false;
230 
231  double target_r;
232  std::vector<float> idealized_coords;
235 
236  // Collect truth tracks' 2nd stage hits
237  for (auto hit : hits_2nd) {
238  // Only write out hits belonging to the truth track
239  if (hit->getBarcode() == track.getBarcode()) {
240 
241  if (hit->isPixel() == 0 && hit->getHitType() != HitType::spacepoint) {has_strip_nonspacepoint = true;}
242 
243  FPGATrackSimMultiTruth truth = hit->getTruth();
245 
246  const bool ok = truth.best(tbarcode, tfrac);
247  if (tfrac < 1.0) { continue; }
248  if( ok ) {
249  tmp_hits_barcode.push_back((int)(tbarcode.second));
250  tmp_hits_barcodefrac.push_back(tfrac);
251  }
252  else {
253  tmp_hits_barcode.push_back(-1);
254  tmp_hits_barcodefrac.push_back(-1);
255  }
256 
257  tmp_hits_x.push_back(hit->getX());
258  tmp_hits_y.push_back(hit->getY());
259  tmp_hits_z.push_back(hit->getZ());
260  tmp_hits_R.push_back(hit->getR());
261  tmp_hits_phi.push_back(hit->getGPhi());
262  tmp_hits_layer_disk.push_back(hit->getLayerDisk());
263  tmp_hits_volumeID.push_back(getVolumeID(*hit));
264  tmp_hits_mapped.push_back(hit->isMapped());
265  tmp_hits_isPixel.push_back(hit->isPixel());
266  tmp_hits_isStrip.push_back(hit->isStrip());
267  tmp_hits_isClustered.push_back(hit->isClustered());
268 
269  tmp_hits_fineID.push_back(getFineID(*hit));
270 
271  target_r = m_SUBREGIONMAP->getAvgRadius(0, hit->getLayerDisk());
272  idealized_coords = computeIdealCoords(*hit, hit->getGPhi(), track.getQOverPt(), target_r, true, TrackCorrType::None);
273  tmp_hits_zIdeal.push_back(idealized_coords[0]);
274  tmp_hits_gphiIdeal.push_back(idealized_coords[1]);
275 
276  if (hit->getHitType() == HitType::spacepoint) {
277  tmp_hits_isSpacepoint.push_back(true);
278  }
279  else {
280  tmp_hits_isSpacepoint.push_back(false);
281  }
282  }
283  }
284 
285 
286  m_has_strip_nonspacepoint.push_back(has_strip_nonspacepoint);
287 
288  if ( (! writeOutNonSPStripHits & has_strip_nonspacepoint)) {
289  ATH_MSG_DEBUG("Truth Track is not written to HoughRootOutput file, because it contains a non-SP strip hit!");
290  continue;
291  }
292 
293  std::vector<int> sorting_index(tmp_hits_R.size(), 0);
294  for (unsigned int i = 0 ; i != sorting_index.size() ; i++) {
295  sorting_index[i] = i;
296  }
297  sort(sorting_index.begin(), sorting_index.end(),
298  [&](const int& a, const int& b) {
299  return (tmp_hits_R[a] < tmp_hits_R[b]);
300  }
301  );
302 
303  for (unsigned int i = 0 ; i != sorting_index.size() ; i++) {
304  tmp_hits_x_sorted.push_back(tmp_hits_x[sorting_index[i]]);
305  tmp_hits_y_sorted.push_back(tmp_hits_y[sorting_index[i]]);
306  tmp_hits_z_sorted.push_back(tmp_hits_z[sorting_index[i]]);
307  tmp_hits_R_sorted.push_back(tmp_hits_R[sorting_index[i]]);
308  tmp_hits_phi_sorted.push_back(tmp_hits_phi[sorting_index[i]]);
309  tmp_hits_layer_disk_sorted.push_back(tmp_hits_layer_disk[sorting_index[i]]);
310  tmp_hits_isPixel_sorted.push_back(tmp_hits_isPixel[sorting_index[i]]);
311  tmp_hits_isStrip_sorted.push_back(tmp_hits_isStrip[sorting_index[i]]);
312  tmp_hits_isClustered_sorted.push_back(tmp_hits_isClustered[sorting_index[i]]);
313  tmp_hits_isSpacepoint_sorted.push_back(tmp_hits_isSpacepoint[sorting_index[i]]);
314  tmp_hits_barcode_sorted.push_back(tmp_hits_barcode[sorting_index[i]]);
315  tmp_hits_barcodefrac_sorted.push_back(tmp_hits_barcodefrac[sorting_index[i]]);
316  tmp_hits_zIdeal_sorted.push_back(tmp_hits_zIdeal[sorting_index[i]]);
317  tmp_hits_gphiIdeal_sorted.push_back(tmp_hits_gphiIdeal[sorting_index[i]]);
318  tmp_hits_fineID_sorted.push_back(tmp_hits_fineID[sorting_index[i]]);
319  tmp_hits_volumeID_sorted.push_back(tmp_hits_volumeID[sorting_index[i]]);
320  tmp_hits_mapped_sorted.push_back(tmp_hits_mapped[sorting_index[i]]);
321 
322  };
323 
324  m_track_hit_x.push_back(tmp_hits_x_sorted);
325  m_track_hit_y.push_back(tmp_hits_y_sorted);
326  m_track_hit_z.push_back(tmp_hits_z_sorted);
327  m_track_hit_R.push_back(tmp_hits_R_sorted);
328  m_track_hit_phi.push_back(tmp_hits_phi_sorted);
329  m_track_hit_layer_disk.push_back(tmp_hits_layer_disk_sorted);
330  m_track_hit_isPixel.push_back(tmp_hits_isPixel_sorted);
331  m_track_hit_isStrip.push_back(tmp_hits_isStrip);
332  m_track_hit_isClustered.push_back(tmp_hits_isClustered_sorted);
333  m_track_hit_isSpacepoint.push_back(tmp_hits_isSpacepoint_sorted);
334  m_track_hit_barcode.push_back(tmp_hits_barcode_sorted);
335  m_track_hit_barcodefrac.push_back(tmp_hits_barcodefrac_sorted);
336  m_track_hit_zIdeal.push_back(tmp_hits_zIdeal_sorted);
337  m_track_hit_gphiIdeal.push_back(tmp_hits_gphiIdeal_sorted);
338  m_track_hit_fineID.push_back(tmp_hits_fineID_sorted);
339  m_track_hit_volumeID.push_back(tmp_hits_volumeID_sorted);
340  m_track_hit_isMapped.push_back(tmp_hits_mapped_sorted);
341 
342  m_truth_d0.push_back(track.getD0());
343  m_truth_z0.push_back(track.getZ0());
344  m_truth_pt.push_back(track.getPt());
345  m_truth_eta.push_back(track.getEta());
346  m_truth_phi.push_back(track.getPhi());
347  m_truth_barcode.push_back(track.getBarcode());
348  m_truth_eventindex.push_back(track.getEventIndex());
349  m_truth_q.push_back(track.getQ());
350  m_truth_pdg.push_back(track.getPDGCode());
351  }
352  // Fill only if at least one truth track to save to avoid empty events
353  if (m_truth_eventindex.size() != 0) {
354  m_truthtree->Fill();
355  }
356  ResetVectors();
357 
358 
359  // now do the same for offline tree, once per event
360  for (const auto & track : offlineTracks) {
361  if (!m_EvtSel->passCuts(track)) continue;
362 
363  m_offline_d0.push_back(track.getD0());
364  m_offline_z0.push_back(track.getZ0());
365  m_offline_pt.push_back(abs(1./track.getQOverPt()));
366  m_offline_eta.push_back(track.getEta());
367  m_offline_phi.push_back(track.getPhi());
368  m_offline_barcode.push_back(track.getBarcode());
369  m_offline_barcodefrac.push_back(track.getBarcodeFrac());
370 
371  m_offline_q.push_back(track.getQOverPt() > 0 ? 1 : -1);
372  int nhole(0), nmeasurement(0), ninert(0), nbrem(0), nscatter(0), nperigee(0), noutlier(0), nother(0);
373  for (const auto& hit : track.getOfflineHits()) {
374  if (hit.getHitType() == OfflineHitType::Measurement) nmeasurement++;
375  else if (hit.getHitType() == OfflineHitType::InertMaterial) ninert++;
376  else if (hit.getHitType() == OfflineHitType::BremPoint) nbrem++;
377  else if (hit.getHitType() == OfflineHitType::Scatterer) nscatter++;
378  else if (hit.getHitType() == OfflineHitType::Perigee) nperigee++;
379  else if (hit.getHitType() == OfflineHitType::Outlier) noutlier++;
380  else if (hit.getHitType() == OfflineHitType::Hole) nhole++;
381  else nother++;
382  }
383  m_offline_n_holes.push_back(nhole);
384  m_offline_n_measurement.push_back(nmeasurement);
385  m_offline_n_inertmaterial.push_back(ninert);
386  m_offline_n_brempoint.push_back(nbrem);
387  m_offline_n_scatterer.push_back(nscatter);
388  m_offline_n_perigee.push_back(nperigee);
389  m_offline_n_outlier.push_back(noutlier);
390  m_offline_n_other.push_back(nother);
391  }
392  m_offlinetree->Fill();
393  ResetVectors();
394 
395  // for calculating the truth for the entire combination, not just an individual hit
396  std::vector<FPGATrackSimMultiTruth> mtv;
397 
398  double target_r;
399 
400  for (size_t iroad = 0; iroad < track_cands.size(); iroad++) {
401  m_roadnumber = iroad;
402  FPGATrackSimTrack road = track_cands[iroad];
403 
404  if (roadsAreSecondStage) {
405  mtv.reserve( m_FPGATrackSimMapping->PlaneMap_2nd(road.getSubRegion())->getNLogiLayers());
406  }
407  else {
408  mtv.reserve( m_FPGATrackSimMapping->PlaneMap_1st(road.getSubRegion())->getNLogiLayers());
409  }
410 
411  m_roadChi2.push_back(track_cands[iroad].getChi2ndof());
412 
413  m_nMissingHits.push_back(track_cands[iroad].getNMissing());
414 
415  m_passesOR.push_back(road.passedOR());
416 
417  m_phi = road.getHoughX();
418  m_invpt = road.getHoughY();
419  m_subregion = road.getRegion();
420  std::vector<FPGATrackSimHit> hits = road.getFPGATrackSimHits();
421 
422 
423  // Add the hits from each combination to the tree
424  for (FPGATrackSimHit hit : hits) {
425 
426  m_realHit.push_back(hit.isReal());
427  FPGATrackSimMultiTruth truth = hit.getTruth();
428 
430  mtv.push_back( truth );
431 
434  const bool ok = truth.best(tbarcode,tfrac);
435  if( ok ) {
436  m_eventindex.push_back((int)(tbarcode.first));
437  m_barcode.push_back((int)(tbarcode.second));
438  m_barcodefrac.push_back(tfrac);
439  }
440  else {
441  m_eventindex.push_back(-1);
442  m_barcode.push_back(-1);
443  m_barcodefrac.push_back(-1);
444  }
445 
446  target_r = m_SUBREGIONMAP->getAvgRadius(0, hit.getLayer());
447  std::shared_ptr<const FPGATrackSimHit> hit_ptr = std::make_shared<const FPGATrackSimHit>(hit);
448  std::vector<float> idealized_coords = computeIdealCoords(hit, m_invpt, hit.getGPhi(), target_r, true, TrackCorrType::None);
449 
450  m_x.push_back(hit.getX());
451  m_y.push_back(hit.getY());
452  m_z.push_back(hit.getZ());
453  m_volumeID.push_back(getVolumeID(*hit_ptr));
454  m_custom_layerID.push_back(getFineID(*hit_ptr));
455  m_layerID.push_back(hit.getLayerDisk());
456  m_etaID.push_back(hit.getEtaModule());
457 
458  m_gphi.push_back(hit.getGPhi());
459  m_zIdeal.push_back(idealized_coords[0]);
460  m_gphiIdeal.push_back(idealized_coords[1]);
461  m_isPixel.push_back(hit.isPixel() ? 1 : 0);
462  m_layer.push_back(hit.getLayer());
463  m_isBarrel.push_back(hit.isBarrel() ? 1 : 0);
464  m_etawidth.push_back(hit.getEtaWidth());
465  m_phiwidth.push_back(hit.getPhiWidth());
466  m_etamodule.push_back(hit.getEtaModule());
467  m_phimodule.push_back(hit.getPhiModule());
468  m_ID.push_back(hit.getIdentifierHash());
469  m_diskLayer.push_back(hit.getLayerDisk());
470  }
471 
472  // done looping over hits, now we do the truth calculation for this track candidate
473  // first compute the best geant match, the barcode with the largest number of contributing hits
474  // frac is then the fraction of the total number of hits on the candidate attributed to the barcode.
476  // retrieve the best barcode and frac and store it
479  const bool ok = mt.best(tbarcode,tfrac);
480  if( ok ) {
481  m_candidate_eventindex = (int)(tbarcode.first);
482  m_candidate_barcode = (int)(tbarcode.second);
483  m_candidate_barcodefrac = tfrac;
484  if ( tfrac <= 0.5 ) m_fakelabel = 1;
485  else if ( tfrac == 1.0 ) m_fakelabel = 0;
486  }
487  else {
489  m_candidate_barcode = -1;
491  m_fakelabel = 2;
492  }
493  m_tree->Fill();
494 
495  mtv.clear();
496  ResetVectors();
497  m_tracknumber++;
498  }
499  m_treeindex++;
500  return StatusCode::SUCCESS;
501 }
502 
503 
504 
505 StatusCode FPGATrackSimHoughRootOutputTool::fillTree(const std::vector<std::shared_ptr<const FPGATrackSimRoad>> &roads, const std::vector<FPGATrackSimTruthTrack> &truthTracks, const std::vector<FPGATrackSimOfflineTrack> &offlineTracks, const std::vector<std::shared_ptr<const FPGATrackSimHit>> &hits_2nd, const bool writeOutNonSPStripHits, const float minChi2, const int maxOverlappingHits, const bool roadsAreSecondStage)
506 {
507  ATH_MSG_DEBUG("Running HoughOutputTool!!");
508 
509 
510  // Create a list of track candidates by taking all possible combinations of hits in road.
511  std::vector<FPGATrackSimTrack> track_cands;
512 
513  for (size_t iroad = 0; iroad < roads.size(); iroad++) {
514  m_roadnumber = iroad;
515  std::shared_ptr<const FPGATrackSimRoad> road = roads[iroad];
516  std::vector<FPGATrackSimTrack> track_cand;
517  if (road == nullptr) continue; // Not Hough roads
518 
519  auto pmap = m_FPGATrackSimMapping->PlaneMap_1st(road->getSubRegion());
520 
521  if (roadsAreSecondStage) {
522  pmap = m_FPGATrackSimMapping->PlaneMap_2nd(road->getSubRegion());
523  }
524 
525  std::vector<std::vector<int>> combs = ::getComboIndices(road->getNHits_layer());
526  m_phi = road->getX();
527  m_invpt = road->getY();
528 
529  // Build track candidate for OR tool
530  int nMissing;
531  bool missPixel;
532  bool missStrip;
533  layer_bitmask_t missing_mask;
534  layer_bitmask_t norecovery_mask; // mask to prevent majority in planes with multiple hits
535  getMissingInfo(*road, nMissing, missPixel, missStrip, missing_mask, norecovery_mask, m_FPGATrackSimMapping, m_idealCoordFitType);
536  // Create a template track with common parameters filled already for initializing below
537  FPGATrackSimTrack temp;
538 
539  if (roadsAreSecondStage) {
541  }
542  else {
544  }
545  temp.setSecondSectorID(road->getSector());
546  temp.setNLayers(pmap->getNLogiLayers());
547  temp.setBankID(-1); // TODO
548  temp.setPatternID(road->getPID());
549  temp.setHitMap(missing_mask);
550  temp.setNMissing(nMissing);
551  temp.setHoughX(road->getX());
552  temp.setHoughY(road->getY());
553  temp.setQOverPt(road->getY());
555  temp.setDoDeltaGPhis(true);
556  temp.setPassedOR(1);
557 
558  makeTrackCandidates(*road, temp, track_cand, m_FPGATrackSimMapping);
559  for (auto const &tr : track_cand) {
560  track_cands.push_back(tr);
561  }
562  }
563 
564  ATH_CHECK(runOverlapRemoval(track_cands, minChi2, maxOverlappingHits, m_algo));
565  unsigned long passed = 0;
566  for (auto const &cand : track_cands) {
567  if (cand.passedOR()) {
568  passed++;
569  }
570  }
571 
572  m_NTracksORMinusRoads = passed - roads.size();
573 
574  return fillTree(track_cands, truthTracks, offlineTracks, hits_2nd, writeOutNonSPStripHits, roadsAreSecondStage);
575 }
576 
578  m_x.clear();
579  m_y.clear();
580  m_z.clear();
581  m_volumeID.clear();
582  m_custom_layerID.clear();
583 
584  m_layerID.clear();
585  m_etaID.clear();
586 
587  m_barcode.clear();
588  m_barcodefrac.clear();
589  m_eventindex.clear();
590  m_realHit.clear();
591  m_isPixel.clear();
592  m_layer.clear();
593  m_isBarrel.clear();
594  m_etawidth.clear();
595  m_phiwidth.clear();
596  m_etamodule.clear();
597  m_phimodule.clear();
598  m_ID.clear();
599  m_diskLayer.clear();
600  m_passesOR.clear();
601  m_roadChi2.clear();
602  m_nMissingHits.clear();
603  m_truth_d0.clear();
604  m_truth_z0.clear();
605  m_truth_pt.clear();
606  m_truth_eta.clear();
607  m_truth_phi.clear();
608  m_truth_q.clear();
609  m_truth_barcode.clear();
610  m_truth_eventindex.clear();
611  m_truth_pdg.clear();
612  m_track_hit_volumeID.clear();
613  m_offline_n_holes.clear();
614  m_offline_n_measurement.clear();
616  m_offline_n_brempoint.clear();
617  m_offline_n_scatterer.clear();
618  m_offline_n_perigee.clear();
619  m_offline_n_outlier.clear();
620  m_offline_n_other.clear();
621  m_offline_d0.clear();
622  m_offline_z0.clear();
623  m_offline_pt.clear();
624  m_offline_eta.clear();
625  m_offline_phi.clear();
626  m_offline_q.clear();
627  m_offline_barcode.clear();
628  m_offline_barcodefrac.clear();
629  m_track_hit_x.clear();
630  m_track_hit_y.clear();
631  m_track_hit_z.clear();
632  m_track_hit_R.clear();
633  m_track_hit_phi.clear();
634  m_track_hit_layer_disk.clear();
635  m_track_hit_isPixel.clear();
636  m_track_hit_isStrip.clear();
637  m_track_hit_isClustered.clear();
638  m_track_hit_isSpacepoint.clear();
639  m_track_hit_barcode.clear();
640  m_track_hit_barcodefrac.clear();
641  m_track_hit_zIdeal.clear();
642  m_track_hit_gphiIdeal.clear();
643  m_track_hit_fineID.clear();
644  m_track_hit_isMapped.clear();
645 
646  m_gphi.clear();
647  m_zIdeal.clear();
648  m_gphiIdeal.clear();
650 }
FPGATrackSimTrack::setHitMap
void setHitMap(unsigned int v)
Definition: FPGATrackSimTrack.h:101
OfflineHitType::Hole
@ Hole
FPGATrackSimHoughRootOutputTool::m_roadChi2
std::vector< float > m_roadChi2
Definition: FPGATrackSimHoughRootOutputTool.h:95
FPGATrackSimHoughRootOutputTool::m_track_hit_isClustered
std::vector< std::vector< bool > > m_track_hit_isClustered
Definition: FPGATrackSimHoughRootOutputTool.h:147
FPGATrackSimHoughRootOutputTool::m_barcodefrac
std::vector< float > m_barcodefrac
Definition: FPGATrackSimHoughRootOutputTool.h:82
FPGATrackSimHoughRootOutputTool::m_track_hit_isMapped
std::vector< std::vector< bool > > m_track_hit_isMapped
Definition: FPGATrackSimHoughRootOutputTool.h:149
FPGATrackSimHoughRootOutputTool::m_track_hit_y
std::vector< std::vector< float > > m_track_hit_y
Definition: FPGATrackSimHoughRootOutputTool.h:139
FPGATrackSimHoughRootOutputTool::m_truth_phi
std::vector< float > m_truth_phi
Definition: FPGATrackSimHoughRootOutputTool.h:132
FPGATrackSimHoughRootOutputTool::m_offline_z0
std::vector< float > m_offline_z0
Definition: FPGATrackSimHoughRootOutputTool.h:169
getMenu.algname
algname
Definition: getMenu.py:54
FPGATrackSimHoughRootOutputTool::m_track_hit_gphiIdeal
std::vector< std::vector< float > > m_track_hit_gphiIdeal
Definition: FPGATrackSimHoughRootOutputTool.h:153
TRTCalib_Extractor.hits
hits
Definition: TRTCalib_Extractor.py:35
FPGATrackSimTrack::setBankID
void setBankID(int v)
Definition: FPGATrackSimTrack.h:84
FPGATrackSimHoughRootOutputTool::m_track_hit_barcode
std::vector< std::vector< int > > m_track_hit_barcode
Definition: FPGATrackSimHoughRootOutputTool.h:150
FPGATrackSimHoughRootOutputTool::m_isBarrel
std::vector< unsigned int > m_isBarrel
Definition: FPGATrackSimHoughRootOutputTool.h:87
TrigCompositeUtils::passed
bool passed(DecisionID id, const DecisionIDContainer &idSet)
checks if required decision ID is in the set of IDs in the container
Definition: TrigCompositeUtilsRoot.cxx:117
FPGATrackSimHoughRootOutputTool::m_layer
std::vector< unsigned int > m_layer
Definition: FPGATrackSimHoughRootOutputTool.h:86
FPGATrackSimRoad::getSubRegion
int getSubRegion() const
Definition: FPGATrackSimRoad.h:84
FPGATrackSimHoughRootOutputTool::m_track_hit_phi
std::vector< std::vector< float > > m_track_hit_phi
Definition: FPGATrackSimHoughRootOutputTool.h:143
OfflineHitType::InertMaterial
@ InertMaterial
FPGATrackSimTrack
Definition: FPGATrackSimTrack.h:18
FPGATrackSimHoughRootOutputTool::initialize
virtual StatusCode initialize() override
Definition: FPGATrackSimHoughRootOutputTool.cxx:20
FPGATrackSimHoughRootOutputTool::m_offline_phi
std::vector< float > m_offline_phi
Definition: FPGATrackSimHoughRootOutputTool.h:172
FPGATrackSimTrack::setPatternID
void setPatternID(int v)
Definition: FPGATrackSimTrack.h:85
OfflineHitType::BremPoint
@ BremPoint
FPGATrackSimMultiTruth::Weight
float Weight
Definition: FPGATrackSimMultiTruth.h:50
OfflineHitType::Measurement
@ Measurement
FPGATrackSimHoughRootOutputTool::m_track_hit_zIdeal
std::vector< std::vector< float > > m_track_hit_zIdeal
Definition: FPGATrackSimHoughRootOutputTool.h:152
FPGATrackSimHoughRootOutputTool::m_realHit
std::vector< bool > m_realHit
Definition: FPGATrackSimHoughRootOutputTool.h:98
FPGATrackSimHoughRootOutputTool::m_x
std::vector< float > m_x
Definition: FPGATrackSimHoughRootOutputTool.h:72
FPGATrackSimHoughRootOutputTool::m_offlinetree
TTree * m_offlinetree
Definition: FPGATrackSimHoughRootOutputTool.h:158
accumulate
bool accumulate(AccumulateMap &map, std::vector< module_t > const &modules, FPGATrackSimMatrixAccumulator const &acc)
Accumulates an accumulator (e.g.
Definition: FPGATrackSimMatrixAccumulator.cxx:22
FPGATrackSimTrack::setNMissing
void setNMissing(int v)
Definition: FPGATrackSimTrack.h:99
ORAlgo::Normal
@ Normal
FPGATrackSimHoughRootOutputTool::m_offline_n_brempoint
std::vector< int > m_offline_n_brempoint
Definition: FPGATrackSimHoughRootOutputTool.h:162
FPGATrackSimTrack::setPassedOR
void setPassedOR(unsigned int)
Definition: FPGATrackSimTrack.cxx:259
FPGATrackSimTrack::getRegion
int getRegion() const
Definition: FPGATrackSimTrack.h:29
FPGATrackSimHoughRootOutputTool::m_gphiIdeal
std::vector< float > m_gphiIdeal
Definition: FPGATrackSimHoughRootOutputTool.h:81
FPGATrackSimHoughRootOutputTool::m_diskLayer
std::vector< unsigned int > m_diskLayer
Definition: FPGATrackSimHoughRootOutputTool.h:93
FPGATrackSimHoughRootOutputTool::m_etawidth
std::vector< unsigned int > m_etawidth
Definition: FPGATrackSimHoughRootOutputTool.h:88
HitType::spacepoint
@ spacepoint
FPGATrackSimHoughRootOutputTool::m_treeindex
int m_treeindex
Definition: FPGATrackSimHoughRootOutputTool.h:120
FPGATrackSimHoughRootOutputTool::m_track_hit_R
std::vector< std::vector< float > > m_track_hit_R
Definition: FPGATrackSimHoughRootOutputTool.h:141
FPGATrackSimHoughRootOutputTool::m_track_hit_layer_disk
std::vector< std::vector< int > > m_track_hit_layer_disk
Definition: FPGATrackSimHoughRootOutputTool.h:144
FPGATrackSimTrack::getSubRegion
int getSubRegion() const
Definition: FPGATrackSimTrack.h:48
FPGATrackSimTrack::passedOR
unsigned int passedOR() const
Definition: FPGATrackSimTrack.h:127
FPGATrackSimTrack::getHoughY
float getHoughY() const
Definition: FPGATrackSimTrack.h:36
FPGATrackSimHoughRootOutputTool::m_has_strip_nonspacepoint
std::vector< bool > m_has_strip_nonspacepoint
Definition: FPGATrackSimHoughRootOutputTool.h:137
FPGATrackSimRoad::getNHits_layer
std::vector< size_t > getNHits_layer() const
Definition: FPGATrackSimRoad.cxx:27
FPGATrackSimHoughRootOutputTool::m_isPixel
std::vector< unsigned int > m_isPixel
Definition: FPGATrackSimHoughRootOutputTool.h:85
FPGATrackSimRoad::getX
float getX() const
Definition: FPGATrackSimRoad.h:87
FPGATrackSimHoughRootOutputTool::m_phi
float m_phi
Definition: FPGATrackSimHoughRootOutputTool.h:103
FPGATrackSimMultiTruth::best
bool best(FPGATrackSimMultiTruth::Barcode &code, FPGATrackSimMultiTruth::Weight &weight) const
Definition: FPGATrackSimMultiTruth.h:86
FPGATrackSimConstants.h
FPGATrackSimHit
Definition: FPGATrackSimHit.h:41
FPGATrackSimTrack::setSecondSectorID
void setSecondSectorID(int v)
Definition: FPGATrackSimTrack.h:87
FPGATrackSimHoughRootOutputTool::m_passesOR
std::vector< unsigned int > m_passesOR
Definition: FPGATrackSimHoughRootOutputTool.h:94
FPGATrackSimTrack::getFPGATrackSimHits
const std::vector< FPGATrackSimHit > & getFPGATrackSimHits() const
Definition: FPGATrackSimTrack.h:63
computeIdealCoords
std::vector< float > computeIdealCoords(const FPGATrackSimHit &hit, const double hough_x, const double hough_y, const double target_r, const bool doDeltaGPhis, const TrackCorrType trackCorrType)
Definition: FPGATrackSimFunctions.cxx:116
FPGATrackSimHoughRootOutputTool::m_offline_n_outlier
std::vector< int > m_offline_n_outlier
Definition: FPGATrackSimHoughRootOutputTool.h:165
FPGATrackSimHoughRootOutputTool::m_idealCoordFitType
TrackCorrType m_idealCoordFitType
Definition: FPGATrackSimHoughRootOutputTool.h:100
OfflineHitType::Perigee
@ Perigee
FPGATrackSimHoughRootOutputTool::m_subregion
unsigned int m_subregion
Definition: FPGATrackSimHoughRootOutputTool.h:105
FPGATrackSimHoughRootOutputTool::m_phiwidth
std::vector< unsigned int > m_phiwidth
Definition: FPGATrackSimHoughRootOutputTool.h:89
FPGATrackSimHoughRootOutputTool::m_track_hit_fineID
std::vector< std::vector< long > > m_track_hit_fineID
Definition: FPGATrackSimHoughRootOutputTool.h:154
lumiFormat.i
int i
Definition: lumiFormat.py:85
FPGATrackSimHoughRootOutputTool::m_truth_z0
std::vector< float > m_truth_z0
Definition: FPGATrackSimHoughRootOutputTool.h:129
FPGATrackSimHoughRootOutputTool::m_offline_d0
std::vector< float > m_offline_d0
Definition: FPGATrackSimHoughRootOutputTool.h:168
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
FPGATrackSimHoughRootOutputTool::m_offline_eta
std::vector< float > m_offline_eta
Definition: FPGATrackSimHoughRootOutputTool.h:171
getFineID
long getFineID(const FPGATrackSimHit &hit)
Definition: FPGATrackSimHoughFunctions.cxx:448
python.LArMinBiasAlgConfig.int
int
Definition: LArMinBiasAlgConfig.py:59
TrackStage::FIRST
@ FIRST
FPGATrackSimTrack::setDoDeltaGPhis
void setDoDeltaGPhis(bool v)
Definition: FPGATrackSimTrack.h:83
FPGATrackSimMultiTruth::Barcode
std::pair< unsigned long, unsigned long > Barcode
Definition: FPGATrackSimMultiTruth.h:49
FPGATrackSimHoughRootOutputTool::m_z
std::vector< float > m_z
Definition: FPGATrackSimHoughRootOutputTool.h:74
FPGATrackSimHoughRootOutputTool::m_offline_n_measurement
std::vector< int > m_offline_n_measurement
Definition: FPGATrackSimHoughRootOutputTool.h:160
FPGATrackSimHoughRootOutputTool::m_candidate_eventindex
float m_candidate_eventindex
Definition: FPGATrackSimHoughRootOutputTool.h:111
FPGATrackSimHoughRootOutputTool::m_candidate_barcodefrac
float m_candidate_barcodefrac
Definition: FPGATrackSimHoughRootOutputTool.h:109
FPGATrackSimHoughRootOutputTool::m_track_hit_z
std::vector< std::vector< float > > m_track_hit_z
Definition: FPGATrackSimHoughRootOutputTool.h:140
FPGATrackSimHoughRootOutputTool::m_invpt
float m_invpt
Definition: FPGATrackSimHoughRootOutputTool.h:104
FPGATrackSimHoughRootOutputTool::m_SUBREGIONMAP
const FPGATrackSimRegionMap * m_SUBREGIONMAP
Definition: FPGATrackSimHoughRootOutputTool.h:67
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
FPGATrackSimHoughRootOutputTool::m_truth_eventindex
std::vector< int > m_truth_eventindex
Definition: FPGATrackSimHoughRootOutputTool.h:136
TrackStage::SECOND
@ SECOND
FPGATrackSimHoughRootOutputTool::m_truthtree
TTree * m_truthtree
Definition: FPGATrackSimHoughRootOutputTool.h:126
FPGATrackSimHoughRootOutputTool::m_offline_q
std::vector< int > m_offline_q
Definition: FPGATrackSimHoughRootOutputTool.h:173
FPGATrackSimHoughRootOutputTool::ResetVectors
void ResetVectors()
Definition: FPGATrackSimHoughRootOutputTool.cxx:577
FPGATrackSimTrack::setTrackCorrType
void setTrackCorrType(TrackCorrType v)
Definition: FPGATrackSimTrack.h:81
FPGATrackSimHoughRootOutputTool::m_truth_d0
std::vector< float > m_truth_d0
Definition: FPGATrackSimHoughRootOutputTool.h:128
FPGATrackSimHoughRootOutputTool::m_gphi
std::vector< float > m_gphi
Definition: FPGATrackSimHoughRootOutputTool.h:79
getComboIndices
std::vector< std::vector< int > > getComboIndices(std::vector< size_t > const &sizes)
Given a vector of sizes (of arrays), generates a vector of all combinations of indices to index one e...
Definition: FPGATrackSimFunctions.cxx:21
FPGATrackSimHoughRootOutputTool::m_etamodule
std::vector< unsigned int > m_etamodule
Definition: FPGATrackSimHoughRootOutputTool.h:90
FPGATrackSimHoughRootOutputTool::m_truth_pdg
std::vector< float > m_truth_pdg
Definition: FPGATrackSimHoughRootOutputTool.h:133
FPGATrackSimHoughRootOutputTool::m_offline_n_perigee
std::vector< int > m_offline_n_perigee
Definition: FPGATrackSimHoughRootOutputTool.h:164
FPGATrackSimTrack::setTrackStage
void setTrackStage(TrackStage v)
Definition: FPGATrackSimTrack.h:82
FPGATrackSimHoughRootOutputTool.h
Output roads into a ROOT file.
FPGATrackSimMultiTruth
Definition: FPGATrackSimMultiTruth.h:46
FPGATrackSimHoughRootOutputTool::m_FPGATrackSimMapping
ServiceHandle< IFPGATrackSimMappingSvc > m_FPGATrackSimMapping
Definition: FPGATrackSimHoughRootOutputTool.h:61
FPGATrackSimMultiTruth::AddAccumulator
Definition: FPGATrackSimMultiTruth.h:57
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
FPGATrackSimHoughRootOutputTool::m_nMissingHits
std::vector< float > m_nMissingHits
Definition: FPGATrackSimHoughRootOutputTool.h:96
FPGATrackSimHoughRootOutputTool::m_volumeID
std::vector< int > m_volumeID
Definition: FPGATrackSimHoughRootOutputTool.h:75
TrackCorrType::None
@ None
FPGATrackSimFunctions.h
FPGATrackSimHoughRootOutputTool::m_track_hit_isSpacepoint
std::vector< std::vector< bool > > m_track_hit_isSpacepoint
Definition: FPGATrackSimHoughRootOutputTool.h:148
FPGATrackSimTrack::setHoughY
void setHoughY(float v)
Definition: FPGATrackSimTrack.h:91
FPGATrackSimHoughRootOutputTool::m_truth_eta
std::vector< float > m_truth_eta
Definition: FPGATrackSimHoughRootOutputTool.h:131
FPGATrackSimTrack::setQOverPt
void setQOverPt(float v)
Definition: FPGATrackSimTrack.h:92
FPGATrackSimHoughRootOutputTool::fillTree
StatusCode fillTree(const std::vector< std::shared_ptr< const FPGATrackSimRoad >> &roads, const std::vector< FPGATrackSimTruthTrack > &truthTracks, const std::vector< FPGATrackSimOfflineTrack > &offlineTracks, const std::vector< std::shared_ptr< const FPGATrackSimHit >> &hits_2nd, const bool writeOutNonSPStripHits, const float minChi2, const int maxOverlappingHits, const bool roadsAreSecondStage)
Definition: FPGATrackSimHoughRootOutputTool.cxx:505
FPGATrackSimHoughRootOutputTool::m_truth_q
std::vector< int > m_truth_q
Definition: FPGATrackSimHoughRootOutputTool.h:134
FPGATrackSimHoughRootOutputTool::m_offline_n_inertmaterial
std::vector< int > m_offline_n_inertmaterial
Definition: FPGATrackSimHoughRootOutputTool.h:161
FPGATrackSimRoad::getY
float getY() const
Definition: FPGATrackSimRoad.h:88
FPGATrackSimHoughRootOutputTool::m_algo
ORAlgo m_algo
Definition: FPGATrackSimHoughRootOutputTool.h:65
FPGATrackSimHoughRootOutputTool::m_tHistSvc
ServiceHandle< ITHistSvc > m_tHistSvc
Definition: FPGATrackSimHoughRootOutputTool.h:62
FPGATrackSimHoughRootOutputTool::m_EvtSel
ServiceHandle< IFPGATrackSimEventSelectionSvc > m_EvtSel
Definition: FPGATrackSimHoughRootOutputTool.h:60
FPGATrackSimHoughRootOutputTool::m_roadnumber
int m_roadnumber
Definition: FPGATrackSimHoughRootOutputTool.h:123
ORAlgo::InvertGrouping
@ InvertGrouping
FPGATrackSimHoughRootOutputTool::m_barcode
std::vector< unsigned long > m_barcode
Definition: FPGATrackSimHoughRootOutputTool.h:83
FPGATrackSimHoughRootOutputTool::FPGATrackSimHoughRootOutputTool
FPGATrackSimHoughRootOutputTool(const std::string &, const std::string &, const IInterface *)
Definition: FPGATrackSimHoughRootOutputTool.cxx:12
FPGATrackSimHoughRootOutputTool::m_track_hit_x
std::vector< std::vector< float > > m_track_hit_x
Definition: FPGATrackSimHoughRootOutputTool.h:138
getVolumeID
long getVolumeID(const FPGATrackSimHit &hit)
Definition: FPGATrackSimHoughFunctions.cxx:356
a
TList * a
Definition: liststreamerinfos.cxx:10
FPGATrackSimHoughRootOutputTool::m_algorithm
Gaudi::Property< std::string > m_algorithm
Definition: FPGATrackSimHoughRootOutputTool.h:63
FPGATrackSimHoughRootOutputTool::m_offline_barcode
std::vector< int > m_offline_barcode
Definition: FPGATrackSimHoughRootOutputTool.h:174
IFPGATrackSimEventSelectionSvc.h
makeTrackCandidates
void makeTrackCandidates(const FPGATrackSimRoad &road, const FPGATrackSimTrack &temp, std::vector< FPGATrackSimTrack > &track_cands, const ServiceHandle< IFPGATrackSimMappingSvc > &FPGATrackSimMapping)
Creates a list of track candidates by taking all possible combination of hits in road.
Definition: FPGATrackSimHoughFunctions.cxx:287
FPGATrackSimHoughRootOutputTool::m_offline_n_scatterer
std::vector< int > m_offline_n_scatterer
Definition: FPGATrackSimHoughRootOutputTool.h:163
FPGATrackSimHoughRootOutputTool::m_layerID
std::vector< int > m_layerID
Definition: FPGATrackSimHoughRootOutputTool.h:77
FPGATrackSimHoughRootOutputTool::m_fakelabel
unsigned int m_fakelabel
Definition: FPGATrackSimHoughRootOutputTool.h:112
layer_bitmask_t
uint32_t layer_bitmask_t
Definition: FPGATrackSimTypes.h:22
FPGATrackSimHoughRootOutputTool::m_eventindex
std::vector< int > m_eventindex
Definition: FPGATrackSimHoughRootOutputTool.h:84
FPGATrackSimHoughRootOutputTool::m_candidate_barcode
float m_candidate_barcode
Definition: FPGATrackSimHoughRootOutputTool.h:110
FPGATrackSimHoughRootOutputTool::m_offline_n_other
std::vector< int > m_offline_n_other
Definition: FPGATrackSimHoughRootOutputTool.h:166
FPGATrackSimHoughRootOutputTool::m_offline_n_holes
std::vector< int > m_offline_n_holes
Definition: FPGATrackSimHoughRootOutputTool.h:159
FPGATrackSimHoughRootOutputTool::m_offline_pt
std::vector< float > m_offline_pt
Definition: FPGATrackSimHoughRootOutputTool.h:170
FPGATrackSimHoughRootOutputTool::m_tracknumber
int m_tracknumber
Definition: FPGATrackSimHoughRootOutputTool.h:117
FPGATrackSimHoughRootOutputTool::m_track_hit_barcodefrac
std::vector< std::vector< float > > m_track_hit_barcodefrac
Definition: FPGATrackSimHoughRootOutputTool.h:151
FPGATrackSimRoad::getSector
sector_t getSector() const
Definition: FPGATrackSimRoad.h:92
FPGATrackSimHoughRootOutputTool::m_NTracksORMinusRoads
long m_NTracksORMinusRoads
Definition: FPGATrackSimHoughRootOutputTool.h:106
FPGATrackSimRoad::getPID
pid_t getPID() const
Definition: FPGATrackSimRoad.h:91
xAOD::track
@ track
Definition: TrackingPrimitives.h:513
FPGATrackSimHoughRootOutputTool::m_etaID
std::vector< int > m_etaID
Definition: FPGATrackSimHoughRootOutputTool.h:78
FPGATrackSimHoughRootOutputTool::m_offline_barcodefrac
std::vector< float > m_offline_barcodefrac
Definition: FPGATrackSimHoughRootOutputTool.h:175
FPGATrackSimHoughRootOutputTool::m_phimodule
std::vector< unsigned int > m_phimodule
Definition: FPGATrackSimHoughRootOutputTool.h:91
OfflineHitType::Scatterer
@ Scatterer
AthAlgTool
Definition: AthAlgTool.h:26
FPGATrackSimTrack::setNLayers
void setNLayers(int)
set the number of layers in the track.
Definition: FPGATrackSimTrack.cxx:107
FPGATrackSimHoughRootOutputTool::m_IdealCoordFitType
TrackCorrType m_IdealCoordFitType
Definition: FPGATrackSimHoughRootOutputTool.h:68
FPGATrackSimHoughRootOutputTool::m_ID
std::vector< unsigned int > m_ID
Definition: FPGATrackSimHoughRootOutputTool.h:92
FPGATrackSimHoughRootOutputTool::m_track_hit_isStrip
std::vector< std::vector< bool > > m_track_hit_isStrip
Definition: FPGATrackSimHoughRootOutputTool.h:146
FPGATrackSimHoughRootOutputTool::m_truth_barcode
std::vector< int > m_truth_barcode
Definition: FPGATrackSimHoughRootOutputTool.h:135
FPGATrackSimTrack::getHoughX
float getHoughX() const
Definition: FPGATrackSimTrack.h:35
OfflineHitType::Outlier
@ Outlier
FPGATrackSimHoughRootOutputTool::m_track_hit_isPixel
std::vector< std::vector< bool > > m_track_hit_isPixel
Definition: FPGATrackSimHoughRootOutputTool.h:145
FPGATrackSimHoughRootOutputTool::m_y
std::vector< float > m_y
Definition: FPGATrackSimHoughRootOutputTool.h:73
FPGATrackSimHoughRootOutputTool::m_tree
TTree * m_tree
Definition: FPGATrackSimHoughRootOutputTool.h:71
getMissingInfo
void getMissingInfo(const FPGATrackSimRoad &road, int &nMissing, bool &missPixel, bool &missStrip, layer_bitmask_t &missing_mask, layer_bitmask_t &norecovery_mask, const ServiceHandle< IFPGATrackSimMappingSvc > &FPGATrackSimMapping, const TrackCorrType idealCoordFitType)
Definition: FPGATrackSimHoughFunctions.cxx:225
FPGATrackSimHoughRootOutputTool::m_truth_pt
std::vector< float > m_truth_pt
Definition: FPGATrackSimHoughRootOutputTool.h:130
FPGATrackSimHoughRootOutputTool::m_custom_layerID
std::vector< int > m_custom_layerID
Definition: FPGATrackSimHoughRootOutputTool.h:76
runOverlapRemoval
StatusCode runOverlapRemoval(std::vector< FPGATrackSimTrack > &tracks, const float minChi2, const int NumOfHitPerGrouping, ORAlgo orAlgo)
Definition: FPGATrackSimHoughFunctions.cxx:12
FPGATrackSimTrack::setHoughX
void setHoughX(float v)
Definition: FPGATrackSimTrack.h:90
FPGATrackSimHoughRootOutputTool::m_track_hit_volumeID
std::vector< std::vector< int > > m_track_hit_volumeID
Definition: FPGATrackSimHoughRootOutputTool.h:155
FPGATrackSimRegionMap::getAvgRadius
double getAvgRadius(unsigned region, unsigned layer) const
Definition: FPGATrackSimRegionMap.cxx:369
FPGATrackSimHoughRootOutputTool::bookTree
StatusCode bookTree()
Definition: FPGATrackSimHoughRootOutputTool.cxx:35
FPGATrackSimMultiTruth::assign_equal_normalization
void assign_equal_normalization()
Definition: FPGATrackSimMultiTruth.cxx:69
FPGATrackSimHoughRootOutputTool::m_zIdeal
std::vector< float > m_zIdeal
Definition: FPGATrackSimHoughRootOutputTool.h:80