ATLAS Offline Software
FPGATrackSimWindowExtensionTool.cxx
Go to the documentation of this file.
1 // Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2 
3 
16 
19 
23 
24 #include "FourMomUtils/P4Helpers.h"
25 
26 #include <sstream>
27 #include <cmath>
28 #include <algorithm>
29 
31 
32  // Retrieve the mapping service.
33  ATH_CHECK(m_FPGATrackSimMapping.retrieve());
35  m_nLayers_1stStage = m_FPGATrackSimMapping->PlaneMap_1st(0)->getNLogiLayers();
36  m_nLayers_2ndStage = m_FPGATrackSimMapping->PlaneMap_2nd(0)->getNLogiLayers() - m_nLayers_1stStage;
37 
39 
40  // This now needs to be done once for each slice.
41  for (size_t j=0; j<m_FPGATrackSimMapping->GetPlaneMap_2ndSliceSize(); j++){
42  ATH_MSG_DEBUG("Processing second stage slice " << j);
43  m_phits_atLayer[j] = std::map<unsigned, std::vector<std::shared_ptr<const FPGATrackSimHit>>>();
44  for (unsigned i = m_nLayers_1stStage; i < m_nLayers_2ndStage +m_nLayers_1stStage ; i++) {
45  ATH_MSG_DEBUG("Processing layer " << i);
46  m_phits_atLayer[j][i] = std::vector<std::shared_ptr<const FPGATrackSimHit>>();
47  }
48  }
49 
50  // Retrieve the hit binning tool, for use with inside out.
51  ATH_CHECK(m_hitBinningTool.retrieve());
52  // Setup layer configuration if not already set from layerMap
53  // TODO: this may not be correct because of spacepoints. Do we *really* want to bin using 8 layers?
54  if (m_hitBinningTool->getNLayers()==0) {
56  }
57 
58  // Probably need to do something here.
59  return StatusCode::SUCCESS;
60 }
61 
62 StatusCode FPGATrackSimWindowExtensionTool::extendTracks(const std::vector<std::shared_ptr<const FPGATrackSimHit>> & hits,
63  const std::vector<std::shared_ptr<const FPGATrackSimTrack>> & tracks,
64  std::vector<std::shared_ptr<const FPGATrackSimRoad>> & roads) {
65 
66  // Reset the internal second stage roads storage.
67  roads.clear();
68  m_roads.clear();
69  for (auto& sliceEntry : m_phits_atLayer){
70  for (auto& entry : sliceEntry.second) {
71  entry.second.clear();
72  }
73  }
74  const FPGATrackSimRegionMap* rmap_2nd = m_FPGATrackSimMapping->SubRegionMap_2nd();
75  const FPGATrackSimPlaneMap *pmap_2nd = nullptr;
76 
77  // Create one "tower" per slice for this event.
78  // Note that there now might be only one "slice", at least for the time being.
79  if (m_slicedHitHeader) {
80  for (int ireg = 0; ireg < rmap_2nd->getNRegions(); ireg++) {
83  }
84  }
85 
86  // Second stage hits may be unmapped, in which case map them.
87  for (size_t i=0; i<m_FPGATrackSimMapping->GetPlaneMap_2ndSliceSize(); i++){
88  pmap_2nd = m_FPGATrackSimMapping->PlaneMap_2nd(i);
89  for (const std::shared_ptr<const FPGATrackSimHit>& hit : hits) {
90  std::shared_ptr<FPGATrackSimHit> hitCopy = std::make_shared<FPGATrackSimHit>(*hit);
91  pmap_2nd->map(*hitCopy);
92  if (!hitCopy->isMapped()){
93  continue;
94  }
95  if (rmap_2nd->isInRegion(i, *hitCopy)) {
96  m_phits_atLayer[i][hitCopy->getLayer()].push_back(hitCopy);
97  // Also store a copy of the hit object in the header class, for ROOT Output + TV creation.
99  }
100  }
101  }
102 
103  // Unfortunately this is a bit different from the other code path
104  // If we are using the binning tool here, we need to pass all of the hits to it, and then rely
105  // on the binning tool to match first stage tracks to second stage bins.
106  std::vector<std::shared_ptr<const FPGATrackSimHit>> allMappedHits;
107  if (m_doBinning && m_FPGATrackSimMapping->GetPlaneMap_2ndSliceSize() == 1) {
108  for (unsigned layer = 0; layer < m_nLayers_2ndStage + m_nLayers_1stStage; layer++) {
109  allMappedHits.insert(allMappedHits.end(), m_phits_atLayer[0][layer].begin(), m_phits_atLayer[0][layer].end());
110  }
111  ATH_MSG_VERBOSE("Attempting to bin nhits = " << allMappedHits.size());
112  ATH_CHECK(m_hitBinningTool->fill(allMappedHits));
113  }
114 
115  // Now, loop over the tracks.
116  for (std::shared_ptr<const FPGATrackSimTrack> track : tracks) {
117  if (track->passedOR() == 0) {
118  continue;
119  }
120 
121  // Retrieve track parameters.
122  double trackphi = track->getPhi();
123  double trackqoverpt = track->getQOverPt();
124 
125  std::vector<int> numHits(m_nLayers_2ndStage + m_nLayers_1stStage, 0);
126 
127  // Copy over the existing hits. We require that the layer assignment in the first stage
128  // is equal to the layer assignment in the second stage.
129  std::vector<std::vector<std::shared_ptr<const FPGATrackSimHit>>> road_hits;
130  road_hits.resize(m_nLayers_1stStage + m_nLayers_2ndStage);
131  layer_bitmask_t hitLayers = 0;
132  unsigned nhit = 0;
133  // We can't just use the the iterator since hit.getLayer() isn't guaranteed to be right.
134  for (unsigned layer = 0; layer < track->getFPGATrackSimHits().size(); layer++) {
135  const FPGATrackSimHit& hit = track->getFPGATrackSimHits().at(layer);
136  road_hits[layer].push_back(std::make_shared<FPGATrackSimHit>(hit));
137  if (hit.isReal()) {
138  hitLayers |= 1 << layer;
139  numHits[layer]++;
140  }
141  }
142 
143  size_t slice = track->getSubRegion();
144  pmap_2nd = m_FPGATrackSimMapping->PlaneMap_2nd(slice);
145 
146  // Extend the track using either slicing (F-200/300 legacy support) or binning (F-600)
147  bool success = (!m_doBinning) ? extendTrackSliced(track, numHits, hitLayers, road_hits) : extendTrackBinned(track, numHits, hitLayers, road_hits);
148  if (!success) continue;
149 
150  // now nhit will be equal to the number of layers with hits in the new array.
151  for (auto num: numHits) {
152  if(num > 0) nhit += 1;
153  }
154 
155  // If we have enough hits, create a new road.
156  ATH_MSG_DEBUG("Found potential new road with " << nhit << " hits relative to threshold of " << m_threshold);
157  if (nhit >= m_threshold) {
158  m_roads.emplace_back();
159  FPGATrackSimRoad & road = m_roads.back();
160  road.setRoadID(roads.size() - 1);
161 
162  // Set the "Hough x" and "Hough y" using the track parameters.
163  road.setX(trackphi);
164  road.setY(trackqoverpt);
165  road.setXBin(track->getHoughXBin());
166  road.setYBin(track->getHoughYBin());
167  road.setSubRegion(track->getSubRegion());
168 
169  // figure out bit mask for wild card layers
170  unsigned int wclayers = 0;
171  for (unsigned i = 0; i < numHits.size(); i++){
172  if(numHits[i]==0) wclayers |= (0x1 << i);
173  }
174  road.setWCLayers(wclayers);
175 
176  // set hit layers and hits
177  road.setHitLayers(hitLayers);
178  road.setHits(std::move(road_hits));
179  }
180  }
181 
182  // Copy the roads we found into the output argument and return success.
183  roads.reserve(m_roads.size());
184  for (FPGATrackSimRoad & r : m_roads) {
185  roads.emplace_back(std::make_shared<const FPGATrackSimRoad>(r));
186  }
187  ATH_MSG_DEBUG("Found " << m_roads.size() << " new roads in second stage.");
188 
189  // Reset the hit binning tool.
190  m_hitBinningTool->resetBins();
191 
192  return StatusCode::SUCCESS;
193 }
194 
195 bool FPGATrackSimWindowExtensionTool::extendTrackSliced(std::shared_ptr<const FPGATrackSimTrack> track, std::vector<int>& numHits, layer_bitmask_t& hitLayers,
196  std::vector<std::vector<std::shared_ptr<const FPGATrackSimHit>>>& road_hits) {
197 
198  const FPGATrackSimRegionMap* rmap_2nd = m_FPGATrackSimMapping->SubRegionMap_2nd();
199 
200  // Retrieve track parameters.
201  double trackd0 = track->getD0();
202  double trackphi = track->getPhi();
203  double trackz0 = track->getZ0();
204  double tracketa = track->getEta();
205  double trackqoverpt = track->getQOverPt();
206  double cottracktheta = 0.5*(exp(tracketa)-exp(-tracketa));
207  size_t slice = track->getSubRegion();
208 
210  ATH_MSG_DEBUG("Testing layer " << layer << " with " << m_phits_atLayer[slice][layer].size() << " hit");
211  for (const std::shared_ptr<const FPGATrackSimHit>& hit: m_phits_atLayer[slice][layer]) {
212  // Make sure this hit is in the same subregion as the track. TODO: mapping/slice changes.
213  if (!rmap_2nd->isInRegion(track->getSubRegion(), *hit)) {
214  continue;
215  }
216 
217  double hitphi = hit->getGPhi();
218  double hitr = hit->getR();
219  double hitz = hit->getZ();
220  double pred_hitphi = trackphi - asin(hitr * fpgatracksim::A * 1000 * trackqoverpt - trackd0/hitr);
221  double pred_hitz = trackz0 + hitr*cottracktheta;
222 
223  // Field correction, now pulled from FPGATrackSimFunctions.
224  if (m_fieldCorrection){
225  double fieldCor = fieldCorrection(track->getRegion(), trackqoverpt, hitr);
226  pred_hitphi += fieldCor;
227  }
228 
229  double diffphi = abs(hitphi-pred_hitphi);
230  double diffz = abs(hitz-pred_hitz);
231 
232  // Apply the actual layer check, only accept hits that fall into a track's window.
233  ATH_MSG_DEBUG("Hit in region, comparing phi: " << diffphi << " to " << m_phiwindows[layer] << " and z " << diffz << " to " << m_zwindows[layer]);
234  if (diffphi < m_phiwindows[layer] && diffz < m_zwindows[layer]) {
235  numHits[layer]++;
236  road_hits[layer].push_back(hit);
237  hitLayers |= 1 << hit->getLayer();
238  }
239  }
240  }
241 
242  return true;
243 }
244 
245 
246 bool FPGATrackSimWindowExtensionTool::extendTrackBinned(std::shared_ptr<const FPGATrackSimTrack> track, std::vector<int>& numHits, layer_bitmask_t& hitLayers,
247  std::vector<std::vector<std::shared_ptr<const FPGATrackSimHit>>>& road_hits) {
248 
249  // Retrieve track parameters.
250  double trackd0 = track->getD0();
251  double trackphi = track->getPhi();
252  double trackz0 = track->getZ0();
253  double tracketa = track->getEta();
254  double trackqoverpt = track->getQOverPt();
255  double cottracktheta = 0.5*(exp(tracketa)-exp(-tracketa));
256 
257  // If we're doing binning, match the track to a bin...
258  const FPGATrackSimBinStep* binStep = m_hitBinningTool->getBinTool().lastStep();
259  const IFPGATrackSimBinDesc* binDesc = m_hitBinningTool->getBinTool().binDesc();
260  ATH_MSG_DEBUG("Attempting to look up binIdx for track with phi = " << track->getPhi() << ", chi2/DOF = " << track->getChi2ndof() << ", q/pt = " << track->getQOverPt() << ", eta = " << track->getEta() << ", d0 = " << track->getD0() << ", z0 = " << track->getZ0());
261  FPGATrackSimTrackPars trackPars = track->getPars();
262 
263  // MeV/GeV conversion factor, needed when switching between track parametrizations.
264  trackPars[FPGATrackSimTrackPars::IHIP] = trackPars[FPGATrackSimTrackPars::IHIP] * 1000;
265 
266  FPGATrackSimBinUtil::ParSet parSet = binDesc->trackParsToParSet(trackPars);
267  if (!m_hitBinningTool->getBinTool().inRange(parSet)) {
268  ATH_MSG_DEBUG("Track doesn't pass binning tool track parameter cuts");
269  }
270  ATH_MSG_DEBUG("Found inside out parameters as " << parSet);
271 
272  FPGATrackSimBinUtil::IdxSet binPars = binStep->binIdx(parSet);
273  ATH_MSG_DEBUG("Attempting to look up bin entry using binpars = " << binPars);
274  FPGATrackSimBinnedHits::BinEntry entry = (m_hitBinningTool->lastStepBinnedHits())[binPars];
275 
276  ATH_MSG_DEBUG("Matched track to new bin containing " << entry.lyrCnt() << " layers with " << entry.hitCnt << " hits total");
277 
278  std::vector<std::vector<std::tuple<float, float, std::shared_ptr<const FPGATrackSimHit>>>> road_hits_sortable;
279  road_hits_sortable.resize(m_nLayers_1stStage + m_nLayers_2ndStage);
280 
281  for (FPGATrackSimBinUtil::StoredHit& storedHit : entry.hits) {
282  // These may need more adjustment if we try to bin deduplicated SPs in the future.
283  unsigned layer = storedHit.layer + m_nLayers_1stStage;
284  const std::shared_ptr<const FPGATrackSimHit>& hit = storedHit.hitptr;
285 
286  // The rest of this should be the same as the previous loop.
287  double hitphi = hit->getGPhi();
288  double hitr = hit->getR();
289  double hitz = hit->getZ();
290  double pred_hitphi = trackphi - asin(hitr * fpgatracksim::A * 1000 * trackqoverpt - trackd0/hitr);
291  double pred_hitz = trackz0 + hitr*cottracktheta;
292 
293  // Field correction, now pulled from FPGATrackSimFunctions.
294  if (m_fieldCorrection){
295  double fieldCor = fieldCorrection(track->getRegion(), trackqoverpt, hitr);
296  pred_hitphi += fieldCor;
297  }
298 
299  double diffphi = abs(hitphi-pred_hitphi);
300  double diffz = abs(hitz-pred_hitz);
301 
302  // Apply the actual layer check, only accept hits that fall into a track's window.
303  ATH_MSG_DEBUG("Hit in region -- standard window comparison: comparing phi " << diffphi << " to " << m_phiwindows[layer] << " and z " << diffz << " to " << m_zwindows[layer]);
304  if (m_addAllHits) {
305  numHits[layer]++;
306  road_hits_sortable[layer].push_back({diffphi, diffz, hit});
307  hitLayers |= 1 << layer;
308  }
309  else if (m_detectorZoneWindows) {
310  if (hit->isBarrel()) { // Barrel
311  ATH_MSG_DEBUG("Hit in region -- detector zone window comparison comparing phi: " << diffphi << " to " << m_phiwindows_barrel[layer] << " and z " << diffz << " to " << m_zwindows_barrel[layer]);
312  if (m_phiwindows_barrel[layer] == -1 || m_zwindows_barrel[layer] == -1) {
313  ATH_MSG_WARNING("There is a hit in layer: " << layer << " with track eta " << tracketa << " in the barrel!");
314  }
315  if (diffphi < m_phiwindows_barrel[layer] && diffz < m_zwindows_barrel[layer]) {
316  numHits[layer]++;
317  road_hits[layer].push_back(hit);
318  hitLayers |= 1 << layer;
319  }
320  }
321  else { // Endcap
322  ATH_MSG_DEBUG("Hit in region -- detector zone window comparison comparing phi: " << diffphi << " to " << m_phiwindows_endcap[layer] << " and z " << diffz << " to " << m_zwindows_endcap[layer]);
323  if (m_phiwindows_endcap[layer] == -1 || m_zwindows_endcap[layer] == -1) {
324  ATH_MSG_WARNING("There is a hit in layer: " << layer << " with track eta " << tracketa << " in the endcap!");
325  }
326  if (diffphi < m_phiwindows_endcap[layer] && diffz < m_zwindows_endcap[layer]) {
327  numHits[layer]++;
328  road_hits[layer].push_back(hit);
329  hitLayers |= 1 << layer;
330  }
331  }
332  }
333  else if (diffphi < m_phiwindows[layer] && diffz < m_zwindows[layer]) {
334  numHits[layer]++;
335  road_hits_sortable[layer].push_back({diffphi, diffz, hit});
336  hitLayers |= 1 << layer;
337  }
338  }
339 
340  // Post-processing. sort the hits by distance. NOTE: should also prioritize SPs here.
341  double zScale = m_zScale.value();
342  double phiScale = m_phiScale.value();
343  for (unsigned layer = 0; layer < m_FPGATrackSimMapping->PlaneMap_2nd(0)->getNLogiLayers(); layer++) {
344  if (road_hits_sortable.at(layer).size() >= 2) {
345  ATH_MSG_DEBUG("Sorting hits in layer " << layer);
346  std::ranges::sort(road_hits_sortable.at(layer), [zScale, phiScale](auto& a, auto& b){
347 
348  // Prioritize SP vs non-SP
349  if (std::get<2>(a)->getHitType() == HitType::spacepoint && std::get<2>(b)->getHitType() != HitType::spacepoint) return true;
350  else if (std::get<2>(b)->getHitType() == HitType::spacepoint && std::get<2>(a)->getHitType() != HitType::spacepoint) return false;
351 
352  // HitA
353  double dphi = std::get<0>(a);
354  double dz = std::get<1>(a);
355 
356  // scaled distance because z and phi are not in same units
357  // these scales are the same as what the pathfinder uses for the time being,
358  // I don't't really know if that makes sense.
359  float distance_a = dphi*dphi/(phiScale*phiScale) + dz*dz/(zScale*zScale);
360 
361  // HitB
362  dphi = std::get<0>(b);
363  dz = std::get<1>(b);
364 
365  // scaled distance because z and phi are not in same units
366  float distance_b = dphi*dphi/(phiScale*phiScale) + dz*dz/(zScale*zScale);
367 
368  return distance_a < distance_b;
369  });
370  }
371 
372  // Remove any hits over the cutoff, whatever that is.
373  int cutoff = road_hits_sortable.at(layer).size();
374  if (m_maxHits.value().size() > layer && m_maxHits.value().at(layer) > 0) {
375  cutoff = std::min(cutoff, m_maxHits.value().at(layer));
376  }
377  for (int ihit = 0; ihit < cutoff; ihit++) {
378  auto& road_hit = std::get<2>(road_hits_sortable.at(layer).at(ihit));
379  road_hits.at(layer).push_back(road_hit);
380  }
381 
382  }
383 
384  return true;
385 
386 }
FPGATrackSimTrackPars::IHIP
@ IHIP
Definition: FPGATrackSimTrackPars.h:49
beamspotman.r
def r
Definition: beamspotman.py:674
FPGATrackSimWindowExtensionTool::m_maxMiss
Gaudi::Property< int > m_maxMiss
Definition: FPGATrackSimWindowExtensionTool.h:66
FPGATrackSimBinUtil::StoredHit::hitptr
std::shared_ptr< const FPGATrackSimHit > hitptr
Definition: FPGATrackSimBinUtil.h:103
TRTCalib_Extractor.hits
hits
Definition: TRTCalib_Extractor.py:35
FPGATrackSimBinStep
Definition: FPGATrackSimBinStep.h:45
FPGATrackSimWindowExtensionTool::m_zwindows_barrel
Gaudi::Property< std::vector< float > > m_zwindows_barrel
Definition: FPGATrackSimWindowExtensionTool.h:70
FPGATrackSimBinStep::binIdx
unsigned binIdx(unsigned par, double val) const
Definition: FPGATrackSimBinStep.h:70
FPGATrackSimWindowExtensionTool::m_fieldCorrection
Gaudi::Property< bool > m_fieldCorrection
Definition: FPGATrackSimWindowExtensionTool.h:74
FPGATrackSimTrackPars
Definition: FPGATrackSimTrackPars.h:22
FPGATrackSimHoughFunctions.h
IFPGATrackSimBinDesc::trackParsToParSet
virtual const FPGATrackSimBinUtil::ParSet trackParsToParSet(const FPGATrackSimTrackPars &pars) const =0
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
FPGATrackSimBinUtil::StoredHit::layer
unsigned layer
Definition: FPGATrackSimBinUtil.h:106
FPGATrackSimHit::isReal
bool isReal() const
Definition: FPGATrackSimHit.cxx:40
FPGATrackSimWindowExtensionTool::m_phiwindows_endcap
Gaudi::Property< std::vector< float > > m_phiwindows_endcap
Definition: FPGATrackSimWindowExtensionTool.h:71
FPGATrackSimWindowExtensionTool::m_threshold
unsigned m_threshold
Definition: FPGATrackSimWindowExtensionTool.h:97
FPGATrackSimHit::getLayer
int getLayer() const
Definition: FPGATrackSimHit.cxx:87
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
FPGATrackSimWindowExtensionTool::m_addAllHits
Gaudi::Property< bool > m_addAllHits
Definition: FPGATrackSimWindowExtensionTool.h:77
drawFromPickle.exp
exp
Definition: drawFromPickle.py:36
FPGATrackSimBinStep.h
Binning Classes for BinStep.
FPGATrackSimWindowExtensionTool::m_slicedHitHeader
FPGATrackSimLogicalEventInputHeader * m_slicedHitHeader
Definition: FPGATrackSimWindowExtensionTool.h:101
FPGATrackSimConstants.h
FPGATrackSimTowerInputHeader::addHit
void addHit(const FPGATrackSimHit &s)
Definition: FPGATrackSimTowerInputHeader.h:48
FPGATrackSimWindowExtensionTool::m_FPGATrackSimBankSvc
ServiceHandle< IFPGATrackSimBankSvc > m_FPGATrackSimBankSvc
Definition: FPGATrackSimWindowExtensionTool.h:62
FPGATrackSimHit
Definition: FPGATrackSimHit.h:41
FPGATrackSimHit::getGPhi
float getGPhi() const
Definition: FPGATrackSimHit.h:153
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
FPGATrackSimWindowExtensionTool::extendTracks
virtual StatusCode extendTracks(const std::vector< std::shared_ptr< const FPGATrackSimHit >> &hits, const std::vector< std::shared_ptr< const FPGATrackSimTrack >> &tracks, std::vector< std::shared_ptr< const FPGATrackSimRoad >> &roads) override
Definition: FPGATrackSimWindowExtensionTool.cxx:62
FPGATrackSimLogicalEventInputHeader::getTower
FPGATrackSimTowerInputHeader * getTower(size_t index)
Definition: FPGATrackSimLogicalEventInputHeader.h:39
FPGATrackSimWindowExtensionTool::initialize
virtual StatusCode initialize() override
Definition: FPGATrackSimWindowExtensionTool.cxx:30
FPGATrackSimWindowExtensionTool::m_roads
std::vector< FPGATrackSimRoad > m_roads
Definition: FPGATrackSimWindowExtensionTool.h:92
perfmonmt-refit.slice
slice
Definition: perfmonmt-refit.py:52
FPGATrackSimPlaneMap::map
void map(FPGATrackSimHit &hit) const
Definition: FPGATrackSimPlaneMap.cxx:234
lumiFormat.i
int i
Definition: lumiFormat.py:85
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
FPGATrackSimBinUtil.h
Binning Utilities for GenScanTool.
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
FPGATrackSimLogicalEventInputHeader::addTower
void addTower(const FPGATrackSimTowerInputHeader &s)
Definition: FPGATrackSimLogicalEventInputHeader.h:38
FPGATrackSimWindowExtensionTool::m_detectorZoneWindows
Gaudi::Property< bool > m_detectorZoneWindows
Definition: FPGATrackSimWindowExtensionTool.h:73
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
FPGATrackSimRoad::setX
void setX(float v)
Definition: FPGATrackSimRoad.h:77
FPGATrackSimRegionMap::isInRegion
bool isInRegion(uint32_t region, const FPGATrackSimHit &hit) const
Definition: FPGATrackSimRegionMap.cxx:231
FPGATrackSimBinUtil::ParSet
Definition: FPGATrackSimBinUtil.h:45
FPGATrackSimWindowExtensionTool::m_doBinning
Gaudi::Property< bool > m_doBinning
Definition: FPGATrackSimWindowExtensionTool.h:76
FPGATrackSimHit::getZ
float getZ() const
Definition: FPGATrackSimHit.h:151
FPGATrackSimWindowExtensionTool::m_FPGATrackSimMapping
ServiceHandle< IFPGATrackSimMappingSvc > m_FPGATrackSimMapping
Definition: FPGATrackSimWindowExtensionTool.h:63
P4Helpers.h
FPGATrackSimPlaneMap
Definition: FPGATrackSimPlaneMap.h:62
trigbs_pickEvents.num
num
Definition: trigbs_pickEvents.py:76
FPGATrackSimWindowExtensionTool::extendTrackBinned
bool extendTrackBinned(std::shared_ptr< const FPGATrackSimTrack > track, std::vector< int > &numHits, layer_bitmask_t &hitLayers, std::vector< std::vector< std::shared_ptr< const FPGATrackSimHit >>> &road_hits)
Definition: FPGATrackSimWindowExtensionTool.cxx:246
GetAllXsec.entry
list entry
Definition: GetAllXsec.py:132
FPGATrackSimBinnedHits::BinEntry
Definition: FPGATrackSimBinnedHits.h:70
FPGATrackSimBinUtil::StoredHit
Definition: FPGATrackSimBinUtil.h:101
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:76
IFPGATrackSimBinDesc.h
Defines Parameters used for binning.
FPGATrackSimHit.h
: FPGATrackSim-specific class to represent an hit in the detector.
FPGATrackSimRoad::setSubRegion
void setSubRegion(int v)
Definition: FPGATrackSimRoad.h:74
FPGATrackSimWindowExtensionTool::m_phiwindows_barrel
Gaudi::Property< std::vector< float > > m_phiwindows_barrel
Definition: FPGATrackSimWindowExtensionTool.h:69
FPGATrackSimWindowExtensionTool::m_nLayers_2ndStage
unsigned m_nLayers_2ndStage
Definition: FPGATrackSimWindowExtensionTool.h:96
FPGATrackSimWindowExtensionTool::m_nLayers_1stStage
unsigned m_nLayers_1stStage
Definition: FPGATrackSimWindowExtensionTool.h:95
FPGATrackSimWindowExtensionTool::m_phits_atLayer
std::map< unsigned, std::map< unsigned, std::vector< std::shared_ptr< const FPGATrackSimHit > > > > m_phits_atLayer
Definition: FPGATrackSimWindowExtensionTool.h:94
FPGATrackSimHit::isMapped
bool isMapped() const
Definition: FPGATrackSimHit.cxx:13
FPGATrackSimWindowExtensionTool::extendTrackSliced
bool extendTrackSliced(std::shared_ptr< const FPGATrackSimTrack > track, std::vector< int > &numHits, layer_bitmask_t &hitLayers, std::vector< std::vector< std::shared_ptr< const FPGATrackSimHit >>> &road_hits)
Definition: FPGATrackSimWindowExtensionTool.cxx:195
FPGATrackSimHit::getR
float getR() const
Definition: FPGATrackSimHit.h:152
a
TList * a
Definition: liststreamerinfos.cxx:10
FPGATrackSimWindowExtensionTool::m_idealGeoRoads
Gaudi::Property< bool > m_idealGeoRoads
Definition: FPGATrackSimWindowExtensionTool.h:75
FPGATrackSimWindowExtensionTool::m_zwindows
Gaudi::Property< std::vector< float > > m_zwindows
Definition: FPGATrackSimWindowExtensionTool.h:68
FPGATrackSimWindowExtensionTool::m_phiScale
Gaudi::Property< double > m_phiScale
Definition: FPGATrackSimWindowExtensionTool.h:89
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
FPGATrackSimWindowExtensionTool::m_zScale
Gaudi::Property< double > m_zScale
Definition: FPGATrackSimWindowExtensionTool.h:90
layer_bitmask_t
uint32_t layer_bitmask_t
Definition: FPGATrackSimTypes.h:22
FPGATrackSimWindowExtensionTool.h
Default track extension algorithm to produce "second stage" roads.
IFPGATrackSimBinDesc
Definition: IFPGATrackSimBinDesc.h:47
FPGATrackSimRoad::setYBin
void setYBin(unsigned v)
Definition: FPGATrackSimRoad.h:76
FPGATrackSimRegionMap::getNRegions
int getNRegions() const
Definition: FPGATrackSimRegionMap.h:80
fieldCorrection
double fieldCorrection(unsigned region, double qoverpt, double r)
Definition: FPGATrackSimFunctions.cxx:163
FPGATrackSimRegionMap
Definition: FPGATrackSimRegionMap.h:62
FPGATrackSimRoad::setY
void setY(float v)
Definition: FPGATrackSimRoad.h:78
FPGATrackSimRoad::setRoadID
void setRoadID(int roadID)
Definition: FPGATrackSimRoad.h:58
FPGATrackSimRoad::setHitLayers
void setHitLayers(layer_bitmask_t hit_layers)
Definition: FPGATrackSimRoad.h:63
xAOD::track
@ track
Definition: TrackingPrimitives.h:513
FPGATrackSimWindowExtensionTool::m_zwindows_endcap
Gaudi::Property< std::vector< float > > m_zwindows_endcap
Definition: FPGATrackSimWindowExtensionTool.h:72
FPGATrackSimTowerInputHeader
Definition: FPGATrackSimTowerInputHeader.h:18
FPGATrackSimBinUtil::IdxSet
Definition: FPGATrackSimBinUtil.h:50
FPGATrackSimHit::isBarrel
bool isBarrel() const
Definition: FPGATrackSimHit.h:66
FPGATrackSimWindowExtensionTool::m_phiwindows
Gaudi::Property< std::vector< float > > m_phiwindows
Definition: FPGATrackSimWindowExtensionTool.h:67
FPGATrackSimTypes.h
FPGATrackSimWindowExtensionTool::m_maxHits
Gaudi::Property< std::vector< int > > m_maxHits
Definition: FPGATrackSimWindowExtensionTool.h:78
FPGATrackSimSectorBank.h
This file declares a class that stores the module IDs of the sectors.
FPGATrackSimRoad::setHits
void setHits(std::vector< std::vector< std::shared_ptr< const FPGATrackSimHit >>> &&hits)
Definition: FPGATrackSimRoad.cxx:141
FPGATrackSimRoad
Definition: FPGATrackSimRoad.h:31
FPGATrackSimRoad::setWCLayers
void setWCLayers(layer_bitmask_t wc_layers)
Definition: FPGATrackSimRoad.h:64
FPGATrackSimWindowExtensionTool::m_hitBinningTool
ToolHandle< FPGATrackSimBinnedHits > m_hitBinningTool
Definition: FPGATrackSimWindowExtensionTool.h:60
FPGATrackSimRoad::setXBin
void setXBin(unsigned v)
Definition: FPGATrackSimRoad.h:75