ATLAS Offline Software
FPGATrackSimDataPrepAlg.cxx
Go to the documentation of this file.
1 
3 // Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
4 
6 
14 
18 
20 
23 
25 
26 #include "GaudiKernel/IEventProcessor.h"
27 
28 
29 constexpr bool enableBenchmark =
30 #ifdef BENCHMARK_FPGATRACKSIM
31  true;
32 #else
33  false;
34 #endif
35 
37 // Initialize
38 
39 FPGATrackSimDataPrepAlg::FPGATrackSimDataPrepAlg (const std::string& name, ISvcLocator* pSvcLocator) :
40  AthAlgorithm(name, pSvcLocator)
41 {
42 }
43 
44 
46 {
47  std::stringstream ss(m_description);
48  std::string line;
49  ATH_MSG_INFO("Tag config:");
50  if (!m_description.empty()) {
51  while (std::getline(ss, line, '\n')) {
52  ATH_MSG_INFO('\t' << line);
53  }
54  }
55 
56  // Dump the configuration to make sure it propagated through right
57  const std::vector<Gaudi::Details::PropertyBase*> props = this->getProperties();
58  for( Gaudi::Details::PropertyBase* prop : props ) {
59  if (prop->ownerTypeName()==this->type()) {
60  ATH_MSG_DEBUG("Property:\t" << prop->name() << "\t : \t" << prop->toString());
61  }
62  }
63 
64 
65  ATH_CHECK(m_hitSGInputTool.retrieve(EnableTool{!m_hitSGInputTool.empty()}));
66 
67  ATH_CHECK(m_hitInputTool.retrieve(EnableTool{!m_hitInputTool.empty()}));
68  ATH_CHECK(m_hitInputTool2.retrieve(EnableTool{m_secondInputToolN > 0 && !m_hitInputTool2.empty()}));
69  ATH_CHECK(m_hitMapTools.retrieve());
70  ATH_CHECK(m_hitFilteringTool.retrieve(EnableTool{m_doHitFiltering}));
71  ATH_CHECK(m_clusteringTool.retrieve(EnableTool{m_clustering > 0}));
72 
73  ATH_CHECK(m_writeOutputTool.retrieve());
74  ATH_CHECK(m_eventSelectionTools.retrieve());
75 
76 
77  ATH_MSG_DEBUG("initialize() Instantiating root objects");
79  m_logicEventHeader = m_writeOutputTool->addInputBranch(m_postClusterBranch.value(), true);
80 
81  ATH_MSG_DEBUG("initialize() Setting branch");
82 
83  if (!m_monTool.empty())
84  ATH_CHECK(m_monTool.retrieve());
85 
86  ATH_CHECK( m_FPGAClusterKey.initialize() );
94 
95  ATH_CHECK( m_chrono.retrieve() );
96  ATH_MSG_DEBUG("initialize() Finished");
97 
98 
99  return StatusCode::SUCCESS;
100 }
101 
102 
104 // MAIN EXECUTE ROUTINE //
106 
108 {
109  const EventContext& ctx = getContext();
110 
111  // Read inputs
112  bool done = false;
113  ATH_CHECK(readInputs(done));
114 
115  if (done) {
116  SmartIF<IEventProcessor> appMgr{service("ApplicationMgr")};
117  if (!appMgr) {
118  ATH_MSG_ERROR("Failed to retrieve ApplicationMgr as IEventProcessor");
119  return StatusCode::FAILURE;
120  }
121  return appMgr->stopRun();
122  }
123 
125  ATH_CHECK( FPGAHits.record (std::make_unique<FPGATrackSimHitCollection>()));
126 
128  ATH_CHECK( FPGAHitUnmapped.record (std::make_unique<FPGATrackSimHitCollection>()));
129 
131  ATH_CHECK( FPGAClusters.record (std::make_unique<FPGATrackSimClusterCollection>()));
132 
134  ATH_CHECK(truthLinkVec.record(std::make_unique<xAODTruthParticleLinkVector>()));
135 
137  ATH_CHECK(FPGATruthTracks.record(std::make_unique<FPGATrackSimTruthTrackCollection>()));
138 
140  ATH_CHECK(FPGAOfflineTracks.record(std::make_unique<FPGATrackSimOfflineTrackCollection>()));
141  // Apply event selection based on truth tracks
142  if (m_doEvtSel) {
143  bool acceptEvent = false;
144  if constexpr (enableBenchmark) m_chrono->chronoStart("DataPrep: EventSelection");
146  {
147  if (eventSelector->selectEvent(m_eventHeader)) {
148  ATH_MSG_DEBUG("Event accepted by: " << eventSelector->name());
149  acceptEvent = true;
150  if ((m_writeRegion>=0)&&(m_writeRegion==eventSelector->getRegionID())) {
151  m_writeOutputTool->activateEventOutput();
152  }
153  }
154  }
155  if constexpr (enableBenchmark) m_chrono->chronoStop("DataPrep: EventSelection");
156  if (m_useInternalTruthTracks && acceptEvent) {
157  if constexpr (enableBenchmark) m_chrono->chronoStart("DataPrep: TruthMatching");
158  SG::ReadHandle<xAOD::TruthParticleContainer> truthParticleContainer(m_inputTruthParticleContainerKey, ctx); // Read offline TruthParticles
159  if (!truthParticleContainer.isValid()) {
160  ATH_MSG_ERROR("No valid truth particle container with key " << truthParticleContainer.key());
161  return StatusCode::FAILURE;
162  }
163  ATH_MSG_DEBUG("making mp of truth particles");
164  std::unordered_map<HepMcParticleLink::barcode_type, std::pair<const xAOD::TruthParticle*, size_t>> truthParticlesMap;
165  size_t truthParticleIndex = 0;
166  for (const xAOD::TruthParticle* truthParticle : *truthParticleContainer) {
167  truthParticlesMap.insert(std::make_pair(HepMC::uniqueID(truthParticle), std::make_pair(truthParticle,truthParticleIndex)));
168  truthParticleIndex++;
169  }
171  truthLinkVec->reserve(fpgaTruthTracks.size());
172  ATH_MSG_DEBUG("begin truth matching for " << fpgaTruthTracks.size() << " FPGA truth tracks");
173  for (const FPGATrackSimTruthTrack& fpgaTruthTrack : fpgaTruthTracks) {
174  auto it = truthParticlesMap.find(fpgaTruthTrack.getUniqueID()); // TODO FIXME need to check FPGATrackSimTruthTrack uniqueIDs are properly filled
175  if (it != truthParticlesMap.end()) {
176  ElementLink<xAOD::TruthParticleContainer> truthParticleLink(*truthParticleContainer, it->second.second);
177  // TODO: check if we can avoid using the previously-created map and look directly for the unique ID in the link vector container
178  truthLinkVec->push_back(new xAODTruthParticleLink(HepMcParticleLink(HepMC::uniqueID(it->second.first), 0,
180  ATH_MSG_DEBUG("Truth link added");
181  }
182  }
183  if (truthLinkVec->empty()) {
184  ATH_MSG_DEBUG("No truth particles selected. Skipping event...");
185  return StatusCode::SUCCESS;
186  }
187  std::stable_sort(truthLinkVec->begin(), truthLinkVec->end(), SortTruthParticleLink());
188  if constexpr (enableBenchmark) m_chrono->chronoStop("DataPrep: TruthMatching");
189  }
190  }
191  else {
192  ATH_MSG_DEBUG("No Event Selection applied");
193  for (auto eventSelector : m_eventSelectionTools) {
194  eventSelector->setSelectedEvent(true);
195  }
196  }
197 
198  // Event passes cuts, count it
199  m_evt++;
200 
201  // Map, cluster, and filter hits
202  ATH_CHECK(processInputs(FPGAHitUnmapped, FPGAClusters));
203 
204  if constexpr (enableBenchmark) m_chrono->chronoStart("DataPrep: get truth/offline tracks");
205  // Now that this is done, push truth tracks back to storegate.
206  for (const auto& truthtrack : m_logicEventHeader->optional().getTruthTracks()) {
207  FPGATruthTracks->push_back(truthtrack);
208  }
209 
210  // Need to do the same for offline tracks.
211  for (const auto& offlineTrack : m_logicEventHeader->optional().getOfflineTracks()) {
212  FPGAOfflineTracks->push_back(offlineTrack);
213  }
214 
215  if constexpr (enableBenchmark) m_chrono->chronoStop("DataPrep: get truth/offline tracks");
216 
217  // Get reference to hits
218 
219  // Recording Data
221  {
222  // Get reference to hits
223  const unsigned& regionID = eventSelector->getRegionID();
224 
225  auto mon_regionID = Monitored::Scalar<unsigned>("regionID", regionID);
226  Monitored::Group(m_monTool, mon_regionID);
227  }
228 
229  std::vector<FPGATrackSimHit> const& hits = m_logicEventHeader->towers().at(0).hits();
230  if (m_recordHits) {
231  if constexpr (enableBenchmark) m_chrono->chronoStart("DataPrep: record hits");
232  // If and when we set up code to run over more than one region/tower at a time this will need to be updated
233  FPGAHits->reserve(hits.size());
234  for (const auto& hit : hits) {
235  if (hit.isReal()) FPGAHits->push_back(hit);
236  }
237  if constexpr (enableBenchmark) m_chrono->chronoStop("DataPrep: record hits");
238  }
239 
240  auto mon_nhits = Monitored::Scalar<unsigned>("nHits", hits.size());
241  auto mon_nhits_unmapped = Monitored::Scalar<unsigned>("nHits_unmapped", m_hits_miss.size());
242  Monitored::Group(m_monTool, mon_nhits, mon_nhits_unmapped);
243 
244  // Put the FPGATrackSim event info on storegate so later algorithms can access it easily.
246  ATH_CHECK(FPGAEventInfo.record(std::make_unique<FPGATrackSimEventInfo>(m_eventHeader.event())));
247 
248  // Write the output and reset
249  if (m_writeOutputData)
250  ATH_CHECK(m_writeOutputTool->writeData());
251 
252  // Reset data pointers
256 
257  return StatusCode::SUCCESS;
258 }
259 
260 
262 // INPUT PASSING, READING AND PROCESSING //
264 
266 {
267 
268  if ( !m_hitSGInputTool.empty()) {
269  ATH_CHECK(m_hitSGInputTool->readData(&m_eventHeader, Gaudi::Hive::currentContext()));
270  ATH_MSG_DEBUG("Loaded " << m_eventHeader.nHits() << " hits in event header from SG");
271 
272  return StatusCode::SUCCESS;
273  }
274 
275  if (m_ev % m_firstInputToolN == 0)
276  {
277  // Read primary input
278  ATH_CHECK(m_hitInputTool->readData(&m_firstInputHeader, done));
279  if (done)
280  {
281  ATH_MSG_DEBUG("Cannot read more events from file, returning");
282  return StatusCode::SUCCESS; // end of loop over events
283  }
284  }
285 
287 
288  // Read secondary input
289  for (int i = 0; i < m_secondInputToolN; i++)
290  {
291  ATH_CHECK(m_hitInputTool2->readData(&m_eventHeader, done, false));
292  if (done)
293  {
294  ATH_MSG_INFO("Cannot read more events from file, returning");
295  return StatusCode::SUCCESS;
296  }
297  }
298 
299  m_ev++;
300 
301  return StatusCode::SUCCESS;
302 }
303 
304 
305 // Applies clustering, mapping, hit filtering, and space points
308 {
309  m_clusters->clear();
310  m_hits_miss.clear();
311 
312  // Map hits
313  ATH_MSG_DEBUG("Running hits conversion");
316  if constexpr (enableBenchmark) m_chrono->chronoStart("DataPrep: RawToLogical");
317  for (auto hitMapTool : m_hitMapTools){
318  ATH_CHECK(hitMapTool->convert(1, m_eventHeader, *m_logicEventHeader));
319  }
320  if constexpr (enableBenchmark) m_chrono->chronoStop("DataPrep: RawToLogical");
321 
322 
323  for (const FPGATrackSimHit& hit : m_hits_miss) FPGAHitUnmapped->push_back(hit);
324 
325 
326  ATH_MSG_DEBUG("Hits conversion done, #unmapped hists = " << m_hits_miss.size());
327 
328  // At this stage, copy the logicEventHeader.
330 
331  if constexpr (enableBenchmark) m_chrono->chronoStart("DataPrep: Clustering");
332  // Clustering
333  for (int ic = 0; ic < m_clustering; ic++) {
334  ATH_MSG_DEBUG("Running clustering");
336  // I think I also want to pass m_clusters to random removal (but won't work currently)
337  if (m_doHitFiltering) ATH_CHECK(m_hitFilteringTool->DoRandomRemoval(*m_logicEventHeader, false));
338  unsigned npix(0), nstrip(0);
339  for (const FPGATrackSimCluster& cluster : *m_clusters) {
340  if (cluster.getClusterEquiv().isPixel()) npix++;
341  else nstrip++;
342  }
343  m_nPixClusters += npix;
344  m_nStripClusters += nstrip;
345  if (npix > m_nMaxPixClusters) m_nMaxPixClusters = npix;
346  if (nstrip > m_nMaxStripClusters) m_nMaxStripClusters = nstrip;
347  if (m_clusters->size() > m_nMaxClusters) m_nMaxClusters = m_clusters->size();
348  }
349  FPGAClusters->insert(
350  FPGAClusters->end(),
351  std::make_move_iterator(m_clusters->begin()),
352  std::make_move_iterator(m_clusters->end()));
353 
354  if constexpr (enableBenchmark) m_chrono->chronoStop("DataPrep: Clustering");
355 
356  return StatusCode::SUCCESS;
357 }
358 
360 // Finalize
361 
363 {
364  ATH_MSG_INFO("PRINTING FPGATRACKSIM SIMPLE DATAPREP STATS");
365  ATH_MSG_INFO("========================================================================================");
366  ATH_MSG_INFO("Number of pixel clusters/event = " << m_nPixClusters/m_evt);
367  ATH_MSG_INFO("Number of strip clusters/event = " << m_nStripClusters/m_evt);
368  ATH_MSG_INFO("Max number of pixel clusters in an event = " << m_nMaxPixClusters);
369  ATH_MSG_INFO("Max number of strip clusters in an event = " << m_nMaxStripClusters);
370  ATH_MSG_INFO("Max number of clusters in an event = " << m_nMaxClusters);
371 
372  return StatusCode::SUCCESS;
373 }
DataVector::reserve
void reserve(size_type n)
Attempt to preallocate enough memory for a specified number of elements.
FPGATrackSimDataPrepAlg::readInputs
StatusCode readInputs(bool &done)
Definition: FPGATrackSimDataPrepAlg.cxx:265
FPGATrackSimDataPrepAlg::m_chrono
ServiceHandle< IChronoStatSvc > m_chrono
Definition: FPGATrackSimDataPrepAlg.h:82
FPGATrackSimDataPrepAlg::m_evt
double m_evt
Definition: FPGATrackSimDataPrepAlg.h:113
FPGATrackSimDataPrepAlg::m_recordHits
Gaudi::Property< bool > m_recordHits
Definition: FPGATrackSimDataPrepAlg.h:95
FPGATrackSimDataPrepAlg::m_monTool
ToolHandle< GenericMonitoringTool > m_monTool
Definition: FPGATrackSimDataPrepAlg.h:126
TrigDefs::Group
Group
Properties of a chain group.
Definition: GroupProperties.h:13
FPGATrackSimDataPrepAlg::m_hitSGInputTool
ToolHandle< IFPGATrackSimInputTool > m_hitSGInputTool
Definition: FPGATrackSimDataPrepAlg.h:73
FPGATrackSimOptionalEventInfo::getOfflineTracks
const std::vector< FPGATrackSimOfflineTrack > & getOfflineTracks() const
Definition: FPGATrackSimOptionalEventInfo.h:32
FPGATrackSimRegionSlices.h
Stores slice definitions for FPGATrackSim regions.
TRTCalib_Extractor.hits
hits
Definition: TRTCalib_Extractor.py:35
FPGATrackSimDataPrepAlg::m_hitInputTool2
ToolHandle< FPGATrackSimReadRawRandomHitsTool > m_hitInputTool2
Definition: FPGATrackSimDataPrepAlg.h:75
FPGATrackSimDataPrepAlg::m_nMaxStripClusters
unsigned m_nMaxStripClusters
Definition: FPGATrackSimDataPrepAlg.h:118
PowhegControl_ttHplus_NLO.ss
ss
Definition: PowhegControl_ttHplus_NLO.py:83
FPGATrackSimDataPrepAlg::initialize
virtual StatusCode initialize() override
Definition: FPGATrackSimDataPrepAlg.cxx:45
FPGATrackSimDataPrepAlg::m_eventHeader
FPGATrackSimEventInputHeader m_eventHeader
Definition: FPGATrackSimDataPrepAlg.h:103
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
FPGATrackSimCluster
Definition: FPGATrackSimCluster.h:24
FPGATrackSimDataPrepAlg::execute
virtual StatusCode execute() override
Definition: FPGATrackSimDataPrepAlg.cxx:107
FPGATrackSimDataPrepAlg::m_logicEventHeader_precluster
FPGATrackSimLogicalEventInputHeader * m_logicEventHeader_precluster
Definition: FPGATrackSimDataPrepAlg.h:105
FPGATrackSimDataPrepAlg::m_useInternalTruthTracks
Gaudi::Property< bool > m_useInternalTruthTracks
Definition: FPGATrackSimDataPrepAlg.h:94
SG::ReadHandle< xAOD::TruthParticleContainer >
FPGATrackSimDataPrepAlg::m_writePreClusterBranch
Gaudi::Property< bool > m_writePreClusterBranch
Definition: FPGATrackSimDataPrepAlg.h:90
FPGATrackSimNNTrackTool.h
Utilize NN score to build track candidates.
FPGATrackSimDataPrepAlg::m_logicEventHeader
FPGATrackSimLogicalEventInputHeader * m_logicEventHeader
Definition: FPGATrackSimDataPrepAlg.h:106
FPGATrackSimTruthTrack
Definition: FPGATrackSimTruthTrack.h:14
FPGATrackSimDataPrepAlg::m_hitMapTools
ToolHandleArray< FPGATrackSimRawToLogicalHitsTool > m_hitMapTools
Definition: FPGATrackSimDataPrepAlg.h:76
FPGATrackSimDataPrepAlg::m_ev
int m_ev
Definition: FPGATrackSimDataPrepAlg.h:70
skel.it
it
Definition: skel.GENtoEVGEN.py:407
FPGATrackSimDataPrepAlg::m_FPGAEventInfoKey
SG::WriteHandleKey< FPGATrackSimEventInfo > m_FPGAEventInfoKey
Definition: FPGATrackSimDataPrepAlg.h:138
FPGATrackSimReadRawRandomHitsTool.h
FPGATrackSimDataPrepAlg::m_description
std::string m_description
Definition: FPGATrackSimDataPrepAlg.h:69
FPGATrackSimDataPrepAlg::m_FPGAOfflineTrackKey
SG::WriteHandleKey< FPGATrackSimOfflineTrackCollection > m_FPGAOfflineTrackKey
Definition: FPGATrackSimDataPrepAlg.h:137
dq_defect_bulk_create_defects.line
line
Definition: dq_defect_bulk_create_defects.py:27
FPGATrackSimOptionalEventInfo::getTruthTracks
const std::vector< FPGATrackSimTruthTrack > & getTruthTracks() const
Definition: FPGATrackSimOptionalEventInfo.h:37
FPGATrackSimHit
Definition: FPGATrackSimHit.h:41
FPGATrackSimEventInputHeader::nHits
int nHits() const
Definition: FPGATrackSimEventInputHeader.h:38
FPGATrackSimRegionMap.h
Maps ITK module indices to FPGATrackSim regions.
FPGATrackSimDataPrepAlg::m_nStripClusters
unsigned long m_nStripClusters
Definition: FPGATrackSimDataPrepAlg.h:117
FPGATrackSimDataPrepAlg::m_writeOutputData
Gaudi::Property< bool > m_writeOutputData
Definition: FPGATrackSimDataPrepAlg.h:89
FPGATrackSimDataPrepAlg::m_hitFilteringTool
ToolHandle< IFPGATrackSimHitFilteringTool > m_hitFilteringTool
Definition: FPGATrackSimDataPrepAlg.h:77
FPGATrackSimDataPrepAlg::m_doEvtSel
Gaudi::Property< bool > m_doEvtSel
Definition: FPGATrackSimDataPrepAlg.h:93
FPGATrackSimLogicalEventInputHeader::optional
FPGATrackSimOptionalEventInfo const & optional() const
Definition: FPGATrackSimLogicalEventInputHeader.h:32
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
FPGATrackSimDataPrepAlg::m_FPGAHitKey
SG::WriteHandleKey< FPGATrackSimHitCollection > m_FPGAHitKey
Definition: FPGATrackSimDataPrepAlg.h:130
lumiFormat.i
int i
Definition: lumiFormat.py:85
FPGATrackSimDataPrepAlg::m_nMaxPixClusters
unsigned m_nMaxPixClusters
Definition: FPGATrackSimDataPrepAlg.h:116
FPGATrackSimDataPrepAlg::m_doHitFiltering
Gaudi::Property< bool > m_doHitFiltering
Definition: FPGATrackSimDataPrepAlg.h:87
FPGATrackSimDataPrepAlg::m_FPGAHitUnmappedKey
SG::WriteHandleKey< FPGATrackSimHitCollection > m_FPGAHitUnmappedKey
Definition: FPGATrackSimDataPrepAlg.h:131
FPGATrackSimLogicalEventOutputHeader.h
FPGATrackSimDataPrepAlg::m_clustering
Gaudi::Property< int > m_clustering
Definition: FPGATrackSimDataPrepAlg.h:88
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
FPGATrackSimDataPrepAlg::m_inputTruthParticleContainerKey
SG::ReadHandleKey< xAOD::TruthParticleContainer > m_inputTruthParticleContainerKey
Definition: FPGATrackSimDataPrepAlg.h:133
xAOD::TruthParticle_v1
Class describing a truth particle in the MC record.
Definition: TruthParticle_v1.h:37
FPGATrackSimRawToLogicalHitsTool.h
HepMC::uniqueID
int uniqueID(const T &p)
Definition: MagicNumbers.h:117
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
FPGATrackSimDataPrepAlg.h
AthAlgorithm
Definition: AthAlgorithm.h:47
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
FPGATrackSimLogicalEventInputHeader::reset
void reset()
Definition: FPGATrackSimLogicalEventInputHeader.cxx:10
FPGATrackSimEventInputHeader::event
FPGATrackSimEventInfo const & event() const
Definition: FPGATrackSimEventInputHeader.h:33
grepfile.ic
int ic
Definition: grepfile.py:33
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
FPGATrackSimDataPrepAlg::m_secondInputToolN
Gaudi::Property< int > m_secondInputToolN
Definition: FPGATrackSimDataPrepAlg.h:86
FPGATrackSimDataPrepAlg::m_FPGAClusterKey
SG::WriteHandleKeyArray< FPGATrackSimClusterCollection > m_FPGAClusterKey
Definition: FPGATrackSimDataPrepAlg.h:129
FPGATrackSimHit.h
: FPGATrackSim-specific class to represent an hit in the detector.
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
FPGATrackSimDataPrepAlg::m_nMaxClusters
unsigned m_nMaxClusters
Definition: FPGATrackSimDataPrepAlg.h:119
FPGATrackSimOverlapRemovalTool.h
Overlap removal tool for FPGATrackSimTrack.
FPGATrackSimDataPrepAlg::m_writeOutputTool
ToolHandle< FPGATrackSimOutputHeaderTool > m_writeOutputTool
Definition: FPGATrackSimDataPrepAlg.h:79
SG::VarHandleBase::key
virtual const std::string & key() const override final
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleBase.cxx:64
FPGATrackSimEventInputHeader::optional
FPGATrackSimOptionalEventInfo const & optional() const
Definition: FPGATrackSimEventInputHeader.h:34
FPGATrackSimDataPrepAlg::m_clusteringTool
ToolHandle< FPGATrackSimClusteringToolI > m_clusteringTool
Definition: FPGATrackSimDataPrepAlg.h:78
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
FPGATrackSimDataPrepAlg::m_preClusterBranch
Gaudi::Property< std::string > m_preClusterBranch
Definition: FPGATrackSimDataPrepAlg.h:99
FPGATrackSimDataPrepAlg::processInputs
StatusCode processInputs(SG::WriteHandle< FPGATrackSimHitCollection > &FPGAHitUnmapped, SG::WriteHandle< FPGATrackSimClusterCollection > &FPGAClusters)
Definition: FPGATrackSimDataPrepAlg.cxx:306
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:73
FPGATrackSimDataPrepAlg::m_postClusterBranch
Gaudi::Property< std::string > m_postClusterBranch
Definition: FPGATrackSimDataPrepAlg.h:100
SG::WriteHandle::record
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
FPGATrackSimDataPrepAlg::m_clusters
std::unique_ptr< FPGATrackSimClusterCollection > m_clusters
Definition: FPGATrackSimDataPrepAlg.h:109
FPGATrackSimDataPrepAlg::m_truthLinkContainerKey
SG::WriteHandleKey< xAODTruthParticleLinkVector > m_truthLinkContainerKey
Definition: FPGATrackSimDataPrepAlg.h:134
FPGATrackSimDataPrepAlg::m_firstInputToolN
Gaudi::Property< int > m_firstInputToolN
Definition: FPGATrackSimDataPrepAlg.h:85
FPGATrackSimDataPrepAlg::m_hits_miss
std::vector< FPGATrackSimHit > m_hits_miss
Definition: FPGATrackSimDataPrepAlg.h:110
LArNewCalib_DelayDump_OFC_Cali.eventSelector
eventSelector
Definition: LArNewCalib_DelayDump_OFC_Cali.py:112
FPGATrackSimDataPrepAlg::FPGATrackSimDataPrepAlg
FPGATrackSimDataPrepAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: FPGATrackSimDataPrepAlg.cxx:39
FPGATrackSimDataPrepAlg::m_eventSelectionTools
ToolHandleArray< FPGATrackSim::FPGATrackSimEventSelectionTool > m_eventSelectionTools
Definition: FPGATrackSimDataPrepAlg.h:80
enableBenchmark
constexpr bool enableBenchmark
Definition: FPGATrackSimDataPrepAlg.cxx:29
FPGATrackSimLogicalEventInputHeader::towers
const std::vector< FPGATrackSimTowerInputHeader > & towers() const
Definition: FPGATrackSimLogicalEventInputHeader.h:36
FPGATrackSimDataPrepAlg::m_hitInputTool
ToolHandle< IFPGATrackSimEventInputHeaderTool > m_hitInputTool
Definition: FPGATrackSimDataPrepAlg.h:74
FPGATrackSimRoad.h
Defines a class for roads.
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
FPGATrackSimDataPrepAlg::m_firstInputHeader
FPGATrackSimEventInputHeader m_firstInputHeader
Definition: FPGATrackSimDataPrepAlg.h:104
FPGATrackSimLogicalEventInputHeader.h
FPGATrackSimEventInputHeader::reset
void reset()
Definition: FPGATrackSimEventInputHeader.cxx:14
FPGATrackSimDataPrepAlg::finalize
virtual StatusCode finalize() override
Definition: FPGATrackSimDataPrepAlg.cxx:362
FPGATrackSimTrackFitterTool.h
FPGATrackSimDataPrepAlg::m_FPGATruthTrackKey
SG::WriteHandleKey< FPGATrackSimTruthTrackCollection > m_FPGATruthTrackKey
Definition: FPGATrackSimDataPrepAlg.h:136
FPGATrackSimTruthTrackCollection
std::vector< FPGATrackSimTruthTrack > FPGATrackSimTruthTrackCollection
Definition: FPGATrackSimTruthTrackCollection.h:14
DataVector::empty
bool empty() const noexcept
Returns true if the collection is empty.
FPGATrackSimTrackPars.h
Structs that store the 5 track parameters.
FPGATrackSimTrack.h
FPGATrackSimCluster.h
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
FPGATrackSimDataPrepAlg::m_writeRegion
Gaudi::Property< int > m_writeRegion
Definition: FPGATrackSimDataPrepAlg.h:96
FPGATrackSimDataPrepAlg::m_nPixClusters
unsigned long m_nPixClusters
Definition: FPGATrackSimDataPrepAlg.h:115