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 
57  ATH_CHECK(m_hitSGInputTool.retrieve(EnableTool{!m_hitSGInputTool.empty()}));
58 
59  ATH_CHECK(m_hitInputTool.retrieve(EnableTool{!m_hitInputTool.empty()}));
60  ATH_CHECK(m_hitInputTool2.retrieve(EnableTool{m_secondInputToolN > 0 && !m_hitInputTool2.empty()}));
61  ATH_CHECK(m_hitMapTools.retrieve());
62  ATH_CHECK(m_hitFilteringTool.retrieve(EnableTool{m_doHitFiltering}));
63  ATH_CHECK(m_clusteringTool.retrieve(EnableTool{m_clustering > 0}));
64 
65  ATH_CHECK(m_writeOutputTool.retrieve());
66  ATH_CHECK(m_eventSelectionTools.retrieve());
67 
68 
69  ATH_MSG_DEBUG("initialize() Instantiating root objects");
71  m_logicEventHeader = m_writeOutputTool->addInputBranch(m_postClusterBranch.value(), true);
72 
73  ATH_MSG_DEBUG("initialize() Setting branch");
74 
75  if (!m_monTool.empty())
76  ATH_CHECK(m_monTool.retrieve());
77 
78  ATH_CHECK( m_FPGAClusterKey.initialize() );
86 
87  ATH_CHECK( m_chrono.retrieve() );
88  ATH_MSG_DEBUG("initialize() Finished");
89 
90 
91  return StatusCode::SUCCESS;
92 }
93 
94 
96 // MAIN EXECUTE ROUTINE //
98 
100 {
101  const EventContext& ctx = getContext();
102 
103  // Read inputs
104  bool done = false;
105  ATH_CHECK(readInputs(done));
106 
107  if (done) {
108  SmartIF<IEventProcessor> appMgr{service("ApplicationMgr")};
109  if (!appMgr) {
110  ATH_MSG_ERROR("Failed to retrieve ApplicationMgr as IEventProcessor");
111  return StatusCode::FAILURE;
112  }
113  return appMgr->stopRun();
114  }
115 
117  ATH_CHECK( FPGAHits.record (std::make_unique<FPGATrackSimHitCollection>()));
118 
120  ATH_CHECK( FPGAHitUnmapped.record (std::make_unique<FPGATrackSimHitCollection>()));
121 
123  ATH_CHECK( FPGAClusters.record (std::make_unique<FPGATrackSimClusterCollection>()));
124 
126  ATH_CHECK(truthLinkVec.record(std::make_unique<xAODTruthParticleLinkVector>()));
127 
129  ATH_CHECK(FPGATruthTracks.record(std::make_unique<FPGATrackSimTruthTrackCollection>()));
130 
132  ATH_CHECK(FPGAOfflineTracks.record(std::make_unique<FPGATrackSimOfflineTrackCollection>()));
133  // Apply event selection based on truth tracks
134  if (m_doEvtSel) {
135  bool acceptEvent = false;
136  if constexpr (enableBenchmark) m_chrono->chronoStart("DataPrep: EventSelection");
138  {
139  if (eventSelector->selectEvent(m_eventHeader)) {
140  ATH_MSG_DEBUG("Event accepted by: " << eventSelector->name());
141  acceptEvent = true;
142  }
143  }
144  if constexpr (enableBenchmark) m_chrono->chronoStop("DataPrep: EventSelection");
145  if (m_useInternalTruthTracks && acceptEvent) {
146  if constexpr (enableBenchmark) m_chrono->chronoStart("DataPrep: TruthMatching");
147  SG::ReadHandle<xAOD::TruthParticleContainer> truthParticleContainer(m_inputTruthParticleContainerKey, ctx); // Read offline TruthParticles
148  if (!truthParticleContainer.isValid()) {
149  ATH_MSG_ERROR("No valid truth particle container with key " << truthParticleContainer.key());
150  return StatusCode::FAILURE;
151  }
152  ATH_MSG_DEBUG("making mp of truth particles");
153  std::unordered_map<HepMcParticleLink::barcode_type, std::pair<const xAOD::TruthParticle*, size_t>> truthParticlesMap;
154  size_t truthParticleIndex = 0;
155  for (const xAOD::TruthParticle* truthParticle : *truthParticleContainer) {
156  truthParticlesMap.insert(std::make_pair(HepMC::uniqueID(truthParticle), std::make_pair(truthParticle,truthParticleIndex)));
157  truthParticleIndex++;
158  }
160  truthLinkVec->reserve(fpgaTruthTracks.size());
161  ATH_MSG_DEBUG("begin truth matching for " << fpgaTruthTracks.size() << " FPGA truth tracks");
162  for (const FPGATrackSimTruthTrack& fpgaTruthTrack : fpgaTruthTracks) {
163  auto it = truthParticlesMap.find(fpgaTruthTrack.getUniqueID()); // TODO FIXME need to check FPGATrackSimTruthTrack uniqueIDs are properly filled
164  if (it != truthParticlesMap.end()) {
165  ElementLink<xAOD::TruthParticleContainer> truthParticleLink(*truthParticleContainer, it->second.second);
166  // TODO: check if we can avoid using the previously-created map and look directly for the unique ID in the link vector container
167  truthLinkVec->push_back(new xAODTruthParticleLink(HepMcParticleLink(HepMC::uniqueID(it->second.first), 0,
169  ATH_MSG_DEBUG("Truth link added");
170  }
171  }
172  if (truthLinkVec->empty()) {
173  ATH_MSG_DEBUG("No truth particles selected. Skipping event...");
174  return StatusCode::SUCCESS;
175  }
176  std::stable_sort(truthLinkVec->begin(), truthLinkVec->end(), SortTruthParticleLink());
177  if constexpr (enableBenchmark) m_chrono->chronoStop("DataPrep: TruthMatching");
178  }
179  }
180  else {
181  ATH_MSG_DEBUG("No Event Selection applied");
182  for (auto eventSelector : m_eventSelectionTools) {
183  eventSelector->setSelectedEvent(true);
184  }
185  }
186 
187  // Event passes cuts, count it
188  m_evt++;
189 
190  // Map, cluster, and filter hits
191  ATH_CHECK(processInputs(FPGAHitUnmapped, FPGAClusters));
192 
193  if constexpr (enableBenchmark) m_chrono->chronoStart("DataPrep: get truth/offline tracks");
194  // Now that this is done, push truth tracks back to storegate.
195  for (const auto& truthtrack : m_logicEventHeader->optional().getTruthTracks()) {
196  FPGATruthTracks->push_back(truthtrack);
197  }
198 
199  // Need to do the same for offline tracks.
200  for (const auto& offlineTrack : m_logicEventHeader->optional().getOfflineTracks()) {
201  FPGAOfflineTracks->push_back(offlineTrack);
202  }
203 
204  if constexpr (enableBenchmark) m_chrono->chronoStop("DataPrep: get truth/offline tracks");
205 
206  // Get reference to hits
207 
208  // Recording Data
210  {
211  // Get reference to hits
212  const unsigned& regionID = eventSelector->getRegionID();
213 
214  auto mon_regionID = Monitored::Scalar<unsigned>("regionID", regionID);
215  Monitored::Group(m_monTool, mon_regionID);
216  }
217 
218  std::vector<FPGATrackSimHit> const& hits = m_logicEventHeader->towers().at(0).hits();
219  if (m_recordHits) {
220  if constexpr (enableBenchmark) m_chrono->chronoStart("DataPrep: record hits");
221  // If and when we set up code to run over more than one region/tower at a time this will need to be updated
222  FPGAHits->reserve(hits.size());
223  for (const auto& hit : hits) {
224  if (hit.isReal()) FPGAHits->push_back(hit);
225  }
226  if constexpr (enableBenchmark) m_chrono->chronoStop("DataPrep: record hits");
227  }
228 
229  auto mon_nhits = Monitored::Scalar<unsigned>("nHits", hits.size());
230  auto mon_nhits_unmapped = Monitored::Scalar<unsigned>("nHits_unmapped", m_hits_miss.size());
231  Monitored::Group(m_monTool, mon_nhits, mon_nhits_unmapped);
232 
233  // Put the FPGATrackSim event info on storegate so later algorithms can access it easily.
235  ATH_CHECK(FPGAEventInfo.record(std::make_unique<FPGATrackSimEventInfo>(m_eventHeader.event())));
236 
237  // Write the output and reset
238  if (m_writeOutputData)
239  ATH_CHECK(m_writeOutputTool->writeData());
240 
241  // Reset data pointers
245 
246  return StatusCode::SUCCESS;
247 }
248 
249 
251 // INPUT PASSING, READING AND PROCESSING //
253 
255 {
256 
257  if ( !m_hitSGInputTool.empty()) {
258  ATH_CHECK(m_hitSGInputTool->readData(&m_eventHeader, Gaudi::Hive::currentContext()));
259  ATH_MSG_DEBUG("Loaded " << m_eventHeader.nHits() << " hits in event header from SG");
260 
261  return StatusCode::SUCCESS;
262  }
263 
264  if (m_ev % m_firstInputToolN == 0)
265  {
266  // Read primary input
267  ATH_CHECK(m_hitInputTool->readData(&m_firstInputHeader, done));
268  if (done)
269  {
270  ATH_MSG_DEBUG("Cannot read more events from file, returning");
271  return StatusCode::SUCCESS; // end of loop over events
272  }
273  }
274 
276 
277  // Read secondary input
278  for (int i = 0; i < m_secondInputToolN; i++)
279  {
280  ATH_CHECK(m_hitInputTool2->readData(&m_eventHeader, done, false));
281  if (done)
282  {
283  ATH_MSG_INFO("Cannot read more events from file, returning");
284  return StatusCode::SUCCESS;
285  }
286  }
287 
288  m_ev++;
289 
290  return StatusCode::SUCCESS;
291 }
292 
293 
294 // Applies clustering, mapping, hit filtering, and space points
297 {
298  m_clusters->clear();
299  m_hits_miss.clear();
300 
301  // Map hits
302  ATH_MSG_DEBUG("Running hits conversion");
305  if constexpr (enableBenchmark) m_chrono->chronoStart("DataPrep: RawToLogical");
306  for (auto hitMapTool : m_hitMapTools){
307  ATH_CHECK(hitMapTool->convert(1, m_eventHeader, *m_logicEventHeader));
308  }
309  if constexpr (enableBenchmark) m_chrono->chronoStop("DataPrep: RawToLogical");
310 
311 
312  for (const FPGATrackSimHit& hit : m_hits_miss) FPGAHitUnmapped->push_back(hit);
313 
314 
315  ATH_MSG_DEBUG("Hits conversion done, #unmapped hists = " << m_hits_miss.size());
316 
317  // At this stage, copy the logicEventHeader.
319 
320  if constexpr (enableBenchmark) m_chrono->chronoStart("DataPrep: Clustering");
321  // Clustering
322  for (int ic = 0; ic < m_clustering; ic++) {
323  ATH_MSG_DEBUG("Running clustering");
325  // I think I also want to pass m_clusters to random removal (but won't work currently)
326  if (m_doHitFiltering) ATH_CHECK(m_hitFilteringTool->DoRandomRemoval(*m_logicEventHeader, false));
327  unsigned npix(0), nstrip(0);
328  for (const FPGATrackSimCluster& cluster : *m_clusters) {
329  if (cluster.getClusterEquiv().isPixel()) npix++;
330  else nstrip++;
331  }
332  m_nPixClusters += npix;
333  m_nStripClusters += nstrip;
334  if (npix > m_nMaxPixClusters) m_nMaxPixClusters = npix;
335  if (nstrip > m_nMaxStripClusters) m_nMaxStripClusters = nstrip;
336  if (m_clusters->size() > m_nMaxClusters) m_nMaxClusters = m_clusters->size();
337  }
338  FPGAClusters->insert(
339  FPGAClusters->end(),
340  std::make_move_iterator(m_clusters->begin()),
341  std::make_move_iterator(m_clusters->end()));
342 
343  if constexpr (enableBenchmark) m_chrono->chronoStop("DataPrep: Clustering");
344 
345  return StatusCode::SUCCESS;
346 }
347 
349 // Finalize
350 
352 {
353  ATH_MSG_INFO("PRINTING FPGATRACKSIM SIMPLE DATAPREP STATS");
354  ATH_MSG_INFO("========================================================================================");
355  ATH_MSG_INFO("Number of pixel clusters/event = " << m_nPixClusters/m_evt);
356  ATH_MSG_INFO("Number of strip clusters/event = " << m_nStripClusters/m_evt);
357  ATH_MSG_INFO("Max number of pixel clusters in an event = " << m_nMaxPixClusters);
358  ATH_MSG_INFO("Max number of strip clusters in an event = " << m_nMaxStripClusters);
359  ATH_MSG_INFO("Max number of clusters in an event = " << m_nMaxClusters);
360 
361  return StatusCode::SUCCESS;
362 }
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:254
FPGATrackSimDataPrepAlg::m_chrono
ServiceHandle< IChronoStatSvc > m_chrono
Definition: FPGATrackSimDataPrepAlg.h:82
FPGATrackSimDataPrepAlg::m_evt
double m_evt
Definition: FPGATrackSimDataPrepAlg.h:112
FPGATrackSimDataPrepAlg::m_recordHits
Gaudi::Property< bool > m_recordHits
Definition: FPGATrackSimDataPrepAlg.h:95
FPGATrackSimDataPrepAlg::m_monTool
ToolHandle< GenericMonitoringTool > m_monTool
Definition: FPGATrackSimDataPrepAlg.h:125
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:117
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:102
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:99
FPGATrackSimDataPrepAlg::m_logicEventHeader_precluster
FPGATrackSimLogicalEventInputHeader * m_logicEventHeader_precluster
Definition: FPGATrackSimDataPrepAlg.h:104
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:105
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:137
FPGATrackSimReadRawRandomHitsTool.h
FPGATrackSimDataPrepAlg::m_description
std::string m_description
Definition: FPGATrackSimDataPrepAlg.h:69
FPGATrackSimDataPrepAlg::m_FPGAOfflineTrackKey
SG::WriteHandleKey< FPGATrackSimOfflineTrackCollection > m_FPGAOfflineTrackKey
Definition: FPGATrackSimDataPrepAlg.h:136
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:116
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:129
lumiFormat.i
int i
Definition: lumiFormat.py:85
FPGATrackSimDataPrepAlg::m_nMaxPixClusters
unsigned m_nMaxPixClusters
Definition: FPGATrackSimDataPrepAlg.h:115
FPGATrackSimDataPrepAlg::m_doHitFiltering
Gaudi::Property< bool > m_doHitFiltering
Definition: FPGATrackSimDataPrepAlg.h:87
FPGATrackSimDataPrepAlg::m_FPGAHitUnmappedKey
SG::WriteHandleKey< FPGATrackSimHitCollection > m_FPGAHitUnmappedKey
Definition: FPGATrackSimDataPrepAlg.h:130
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:132
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:116
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:128
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:118
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:98
FPGATrackSimDataPrepAlg::processInputs
StatusCode processInputs(SG::WriteHandle< FPGATrackSimHitCollection > &FPGAHitUnmapped, SG::WriteHandle< FPGATrackSimClusterCollection > &FPGAClusters)
Definition: FPGATrackSimDataPrepAlg.cxx:295
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:73
FPGATrackSimDataPrepAlg::m_postClusterBranch
Gaudi::Property< std::string > m_postClusterBranch
Definition: FPGATrackSimDataPrepAlg.h:99
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:108
FPGATrackSimDataPrepAlg::m_truthLinkContainerKey
SG::WriteHandleKey< xAODTruthParticleLinkVector > m_truthLinkContainerKey
Definition: FPGATrackSimDataPrepAlg.h:133
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:109
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:103
FPGATrackSimLogicalEventInputHeader.h
FPGATrackSimEventInputHeader::reset
void reset()
Definition: FPGATrackSimEventInputHeader.cxx:14
FPGATrackSimDataPrepAlg::finalize
virtual StatusCode finalize() override
Definition: FPGATrackSimDataPrepAlg.cxx:351
FPGATrackSimTrackFitterTool.h
FPGATrackSimDataPrepAlg::m_FPGATruthTrackKey
SG::WriteHandleKey< FPGATrackSimTruthTrackCollection > m_FPGATruthTrackKey
Definition: FPGATrackSimDataPrepAlg.h:135
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_nPixClusters
unsigned long m_nPixClusters
Definition: FPGATrackSimDataPrepAlg.h:114