ATLAS Offline Software
Loading...
Searching...
No Matches
FPGATrackSimSecondStageAlg Class Reference

#include <FPGATrackSimSecondStageAlg.h>

Inheritance diagram for FPGATrackSimSecondStageAlg:

Public Member Functions

 FPGATrackSimSecondStageAlg (const std::string &name, ISvcLocator *pSvcLocator)
virtual ~FPGATrackSimSecondStageAlg ()=default
virtual StatusCode initialize () override
virtual StatusCode execute () override
virtual StatusCode finalize () override
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

StatusCode writeOutputData (const std::vector< FPGATrackSimRoad > &roads_2nd, std::vector< FPGATrackSimTrack > const &tracks_2nd, FPGATrackSimDataFlowInfo const *dataFlowInfo)
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

std::string m_description
ToolHandle< IFPGATrackSimTrackExtensionToolm_trackExtensionTool {this, "TrackExtensionTool", "FPGATrackSimTrackExtensionTool", "Track extensoin tool"}
ToolHandle< FPGATrackSimHoughRootOutputToolm_houghRootOutputTool {this, "HoughRootOutputTool", "FPGATrackSimHoughRootOutputTool/FPGATrackSimHoughRootOutputTool", "Hough ROOT Output Tool"}
ToolHandle< FPGATrackSimNNTrackToolm_NNTrackTool {this, "NNTrackTool", "FPGATrackSimNNTrackTool/FPGATrackSimNNTrackTool_2nd", "NN Track Tool"}
ToolHandle< FPGATrackSimTrackFitterToolm_trackFitterTool {this, "TrackFitter_2nd", "FPGATrackSimTrackFitterTool/FPGATrackSimTrackFitterTool_2nd", "2nd stage track fit tool"}
ToolHandle< FPGATrackSimOverlapRemovalToolm_overlapRemovalTool {this, "OverlapRemoval_2nd", "FPGATrackSimOverlapRemovalTool/FPGATrackSimOverlapRemovalTool_2nd", "2nd stage overlap removal tool"}
ToolHandle< FPGATrackSimOutputHeaderToolm_writeOutputTool {this, "OutputTool", "FPGATrackSimOutputHeaderTool/FPGATrackSimOutputHeaderTool", "Output tool"}
ServiceHandle< IFPGATrackSimMappingSvcm_FPGATrackSimMapping {this, "FPGATrackSimMapping", "FPGATrackSimMappingSvc", "FPGATrackSimMappingSvc"}
ServiceHandle< IFPGATrackSimEventSelectionSvcm_evtSel {this, "eventSelector", "", "Event selection Svc"}
ServiceHandle< IChronoStatSvc > m_chrono {this,"ChronoStatSvc","ChronoStatSvc"}
Gaudi::Property< int > m_SetTruthParametersForTracks {this, "SetTruthParametersForTracks", -1, "flag to override track parameters and set them to the truth values"}
Gaudi::Property< bool > m_doSpacepoints {this, "Spacepoints", false, "flag to enable the spacepoint formation"}
Gaudi::Property< bool > m_doTracking {this, "tracking", false, "flag to enable the tracking"}
Gaudi::Property< bool > m_doMissingHitsChecks {this, "DoMissingHitsChecks", false}
Gaudi::Property< bool > m_doHoughRootOutput2nd {this, "DoHoughRootOutput2nd", false, "Dump output from the Hough Transform to flat ntuples"}
Gaudi::Property< bool > m_doNNTrack_2nd {this, "DoNNTrack_2nd", false, "Run NN track filtering for 2nd Stage"}
Gaudi::Property< bool > m_writeOutputData {this, "writeOutputData", true,"write the output TTree"}
Gaudi::Property< float > m_trackScoreCut {this, "TrackScoreCut", 25.0, "Minimum track score (e.g. chi2 or NN)." }
Gaudi::Property< bool > m_writeOutNonSPStripHits {this, "writeOutNonSPStripHits", true, "Write tracks to RootOutput if they have strip hits which are not SPs"}
Gaudi::Property< int > m_NumOfHitPerGrouping { this, "NumOfHitPerGrouping", 5, "Number of minimum overlapping hits for a track candidate to be removed in the HoughRootOutputTool"}
Gaudi::Property< bool > m_passLowestChi2TrackOnly {this, "passLowestChi2TrackOnly", false}
Gaudi::Property< bool > m_doNNPathFinder {this, "doNNPathFinder", false}
Gaudi::Property< bool > m_filterRoads {this, "FilterRoads", false, "enable first road filter"}
Gaudi::Property< bool > m_filterRoads2 {this, "FilterRoads2", false, "enable second road filter"}
Gaudi::Property< std::string > m_sliceBranch {this, "SliceBranchName", "LogicalEventSlicedHeader", "Name of the branch for slied hits in output ROOT file." }
Gaudi::Property< std::string > m_outputBranch {this, "outputBranchName", "LogicalEventOutputHeader", "Name of the branch for output data in output ROOT file." }
FPGATrackSimLogicalEventInputHeaderm_slicedHitHeader = nullptr
FPGATrackSimLogicalEventOutputHeaderm_logicEventOutputHeader = nullptr
long m_evt = 0
long m_nRoadsTot = 0
long m_nTracksTot = 0
long m_nTracksChi2Tot = 0
long m_nTracksChi2OLRTot = 0
long m_evt_truth = 0
long m_nRoadsFound = 0
long m_nTracksFound = 0
long m_nTracksChi2Found = 0
long m_nTracksChi2OLRFound = 0
unsigned long m_maxNRoadsFound = 0
unsigned long m_maxNTracksTot = 0
unsigned long m_maxNTracksChi2Tot = 0
unsigned long m_maxNTracksChi2OLRTot = 0
ToolHandle< GenericMonitoringToolm_monTool {this,"MonTool", "", "Monitoring tool"}
SG::ReadHandleKey< FPGATrackSimHitCollectionm_FPGAHitKey {this, "FPGATrackSimHitKey", "FPGAHits_2nd", "FPGATrackSim Hits key"}
SG::ReadHandleKey< FPGATrackSimTrackCollectionm_FPGAInputTrackKey {this, "FPGATrackSimTrack1stKey", "FPGATracks_1st", "FPGATrackSim tracks 1st stage key"}
SG::WriteHandleKey< FPGATrackSimHitContainerm_FPGAHitInRoadsKey {this, "FPGATrackSimHitInRoads2ndKey","FPGAHitsInRoads_2nd","FPGATrackSim Hits in 1st stage roads key"}
SG::WriteHandleKey< FPGATrackSimRoadCollectionm_FPGARoadKey {this, "FPGATrackSimRoad2ndKey","FPGARoads_2nd","FPGATrackSim Roads 2nd stage key"}
SG::WriteHandleKey< FPGATrackSimTrackCollectionm_FPGATrackKey {this, "FPGATrackSimTrack2ndKey","FPGATracks_2nd","FPGATrackSim Tracks 2nd stage key"}
SG::ReadHandleKey< FPGATrackSimTruthTrackCollectionm_FPGATruthTrackKey {this, "FPGATrackSimTruthTrackKey", "FPGATruthTracks", "FPGATrackSim truth tracks"}
SG::ReadHandleKey< FPGATrackSimOfflineTrackCollectionm_FPGAOfflineTrackKey {this, "FPGATrackSimOfflineTrackKey", "FPGAOfflineTracks", "FPGATrackSim offline tracks"}
SG::ReadHandleKey< FPGATrackSimEventInfom_FPGAEventInfoKey {this, "FPGATrackSimEventInfoKey", "FPGAEventInfo", "FPGATrackSim event info"}
DataObjIDColl m_extendedExtraObjects
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Definition at line 46 of file FPGATrackSimSecondStageAlg.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ FPGATrackSimSecondStageAlg()

FPGATrackSimSecondStageAlg::FPGATrackSimSecondStageAlg ( const std::string & name,
ISvcLocator * pSvcLocator )

Definition at line 44 of file FPGATrackSimSecondStageAlg.cxx.

44 :
45 AthAlgorithm(name, pSvcLocator)
46{
47}
AthAlgorithm()
Default constructor:

◆ ~FPGATrackSimSecondStageAlg()

virtual FPGATrackSimSecondStageAlg::~FPGATrackSimSecondStageAlg ( )
virtualdefault

Member Function Documentation

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Algorithm > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ execute()

StatusCode FPGATrackSimSecondStageAlg::execute ( )
overridevirtual

Definition at line 104 of file FPGATrackSimSecondStageAlg.cxx.

105{
106 const EventContext& ctx = getContext();
107 // Get reference to hits from StoreGate.
108 // Hits have been procesed by the DataPrep algorithm. Now, we need to read them.
109 // If they aren't passed, assume this means we are done.
110 SG::ReadHandle<FPGATrackSimHitCollection> FPGAHits(m_FPGAHitKey, ctx);
111 if (!FPGAHits.isValid()) {
112 if (m_evt == 0) {
113 ATH_MSG_WARNING("Didn't receive FPGAHits_2nd on first event; assuming no input events.");
114 }
115 SmartIF<IEventProcessor> appMgr{service("ApplicationMgr")};
116 if (!appMgr) {
117 ATH_MSG_ERROR("Failed to retrieve ApplicationMgr as IEventProcessor");
118 return StatusCode::FAILURE;
119 }
120 return appMgr->stopRun();
121 }
122
123 SG::ReadHandle<FPGATrackSimTrackCollection> FPGAInputTracks (m_FPGAInputTrackKey, ctx);
124 if (!FPGAInputTracks.isValid()) {
125 SmartIF<IEventProcessor> appMgr{service("ApplicationMgr")};
126 if (!appMgr) {
127 ATH_MSG_ERROR("Failed to retrieve ApplicationMgr as IEventProcessor");
128 return StatusCode::FAILURE;
129 }
130 return appMgr->stopRun();
131 }
132
133 // Set up write handles.
134 SG::WriteHandle<FPGATrackSimRoadCollection> FPGARoads_2nd (m_FPGARoadKey, ctx);
135 SG::WriteHandle<FPGATrackSimHitContainer> FPGAHitsInRoads_2nd (m_FPGAHitInRoadsKey, ctx);
136
137 ATH_CHECK( FPGARoads_2nd.record (std::make_unique<FPGATrackSimRoadCollection>()));
138 ATH_CHECK( FPGAHitsInRoads_2nd.record (std::make_unique<FPGATrackSimHitContainer>()));
139
140 SG::WriteHandle<FPGATrackSimTrackCollection> FPGATracks_2ndHandle (m_FPGATrackKey, ctx);
141 ATH_CHECK(FPGATracks_2ndHandle.record (std::make_unique<FPGATrackSimTrackCollection>()));
142 {
143 std::optional<Athena::Chrono> chrono;
144 if constexpr (enableBenchmark) chrono.emplace("2nd Stage: EventSelection", m_chrono.get());
145 // Query the event selection service to make sure this event passed cuts.
146 if (!m_evtSel->getSelectedEvent()) {
147 ATH_MSG_DEBUG("Event skipped by: " << m_evtSel->name());
148 return StatusCode::SUCCESS;
149 }
150
151 // Event passes cuts, count it. technically, DataPrep does this now.
152 m_evt++;
153 }
154
155 // If we get here, FPGAHits_2nd is valid, copy it over.
156 std::vector<std::shared_ptr<const FPGATrackSimHit>> phits_2nd;
157 phits_2nd.reserve(FPGAHits->size());
158 for (const auto& hit : *FPGAHits) {
159 phits_2nd.push_back(std::make_shared<const FPGATrackSimHit>(*hit));
160 }
161
162 ATH_MSG_DEBUG("Retrieved " << phits_2nd.size() << " hits and " << FPGAInputTracks->size() << " tracks from storegate");
163
164 // Get truth tracks from DataPrep as well.
165 SG::ReadHandle<FPGATrackSimTruthTrackCollection> FPGATruthTracks(m_FPGATruthTrackKey, ctx);
166 if (!FPGATruthTracks.isValid()) {
167 ATH_MSG_ERROR("Could not find FPGA Truth Track Collection with key " << FPGATruthTracks.key());
168 return StatusCode::FAILURE;
169 }
170
171 // Same for offline tracks.
172 SG::ReadHandle<FPGATrackSimOfflineTrackCollection> FPGAOfflineTracks(m_FPGAOfflineTrackKey, ctx);
173 if (!FPGAOfflineTracks.isValid()) {
174 ATH_MSG_ERROR("Could not find FPGA Offline Track Collection with key " << FPGAOfflineTracks.key());
175 return StatusCode::FAILURE;
176 }
177
178 // Same for event info structure. all we need this for is to propagate to our event info structures.
179 SG::ReadHandle<FPGATrackSimEventInfo> FPGAEventInfo(m_FPGAEventInfoKey, ctx);
180 if (!FPGAEventInfo.isValid()) {
181 ATH_MSG_ERROR("Could not find FPGA Event Info with key " << FPGAEventInfo.key());
182 return StatusCode::FAILURE;
183 }
184 FPGATrackSimEventInfo eventInfo = *FPGAEventInfo.cptr();
185 m_slicedHitHeader->newEvent(eventInfo);
186
187 // Get second stage roads from tracks.
188 std::vector<FPGATrackSimRoad> roads;
189
190 {
191 std::optional<Athena::Chrono> chrono;
192 if constexpr (enableBenchmark) chrono.emplace("2nd Stage: Track Extension", m_chrono.get());
193 // Use the track extension tool to actually produce a new set of roads.
194 ATH_CHECK(m_trackExtensionTool->extendTracks(phits_2nd, *FPGAInputTracks, roads));
195
196 for (auto const& road : roads) {
197 auto road_hits = std::make_unique<FPGATrackSimHitCollection>();
198 ATH_MSG_DEBUG("Hough Road X Y: " << road.getX() << " " << road.getY());
199 for (size_t l = 0; l < road.getNLayers(); ++l) {
200 for (const auto& layerH : road.getHits(l)) {
201 road_hits->push_back(new FPGATrackSimHit(*layerH));
202 }
203 }
204 FPGAHitsInRoads_2nd->push_back(std::move(*road_hits));
205 FPGARoads_2nd->push_back(road);
206 }
207 }
208
209 auto mon_nroads = Monitored::Scalar<unsigned>("nroads_2nd", roads.size());
210 unsigned bitmask_best(0);
211 unsigned nhit_best(0);
212 for (auto const &road : roads) {
213 unsigned bitmask = road.getHitLayers();
214 if (road.getNHitLayers() > nhit_best) {
215 nhit_best = road.getNHitLayers();
216 bitmask_best = bitmask;
217 }
218 for (size_t l = 0; l < m_FPGATrackSimMapping->PlaneMap_2nd(0)->getNLogiLayers(); l++) {
219 if (bitmask & (1 << l)) {
220 auto mon_layerIDs = Monitored::Scalar<unsigned>("layerIDs_2nd",l);
221 Monitored::Group(m_monTool,mon_layerIDs);
222 }
223 }
224 }
225
226 for (size_t l = 0; l < m_FPGATrackSimMapping->PlaneMap_2nd(0)->getNLogiLayers(); l++) {
227 if (bitmask_best & (1 << l)) {
228 auto mon_layerIDs_best = Monitored::Scalar<unsigned>("layerIDs_2nd_best",l);
229 Monitored::Group(m_monTool,mon_layerIDs_best);
230 }
231 }
232 Monitored::Group(m_monTool, mon_nroads);
233
234 // NOTE: for now we don't support road filtering again in the second stage.
235 auto mon_nroads_postfilter = Monitored::Scalar<unsigned>("nroads_2nd_postfilter", roads.size());
236 Monitored::Group(m_monTool, mon_nroads_postfilter);
237
238 // Get tracks, again, after extrapolation.
239 // All of this code is effectively copied from LogicalHitsProcessAlg, except we use 2nd stage now.
240 std::vector<FPGATrackSimTrack> tracks;
241 {
242 std::optional<Athena::Chrono> chrono;
243 if constexpr (enableBenchmark) chrono.emplace("2nd Stage: Track Extraction", m_chrono.get());
244 if (m_doTracking) {
245 if (m_doNNTrack_2nd) {
246 ATH_MSG_DEBUG("Performing NN tracking");
247 ATH_CHECK(m_NNTrackTool->getTracks_2nd(roads, tracks));
248 } else {
249 ATH_MSG_DEBUG("Performing Linear tracking");
250
251 if (m_passLowestChi2TrackOnly) { // Pass only the lowest chi2 track per road
252
253 std::vector<FPGATrackSimTrack> filteredTracks;
254
255 for (const auto& road : roads) {
256 // Collect tracks for the current road
257 std::vector<FPGATrackSimTrack> tracksForCurrentRoad;
258 std::vector<FPGATrackSimRoad> roadVec = {road};
259 ATH_CHECK(m_trackFitterTool->getTracks(roadVec, tracksForCurrentRoad, m_evtSel->getMin(), m_evtSel->getMax()));
260
261 // Find and keep the best track (lowest chi2) for this road
262 if (!tracksForCurrentRoad.empty()) {
263 auto bestTrackIter = std::min_element(
264 tracksForCurrentRoad.begin(), tracksForCurrentRoad.end(),
265 [](const FPGATrackSimTrack& a, const FPGATrackSimTrack& b) {
266 return a.getChi2ndof() < b.getChi2ndof();
267 });
268
269 if (bestTrackIter != tracksForCurrentRoad.end() && bestTrackIter->getChi2ndof() < 1.e15) {
270 filteredTracks.push_back(*bestTrackIter);
271
272 // Monitor chi2 of the best track
273 auto mon_chi2 = Monitored::Scalar<float>("chi2_2nd_all", bestTrackIter->getChi2ndof());
274 Monitored::Group(m_monTool, mon_chi2);
275 }
276 }
277 }
278
279 // Update tracks with filtered tracks
280 tracks = std::move(filteredTracks);
281
282 // Monitor the best chi2 across all roads
283 if (!tracks.empty()) {
284 float bestChi2Overall = std::min_element(
285 tracks.begin(), tracks.end(),
286 [](const FPGATrackSimTrack& a, const FPGATrackSimTrack& b) {
287 return a.getChi2ndof() < b.getChi2ndof();
288 })->getChi2ndof();
289
290 auto mon_best_chi2 = Monitored::Scalar<float>("best_chi2_2nd", bestChi2Overall);
291 Monitored::Group(m_monTool, mon_best_chi2);
292 }
293 } else { // Pass all tracks with chi2 < 1e15
294 ATH_CHECK(m_trackFitterTool->getTracks(roads, tracks, m_evtSel->getMin(), m_evtSel->getMax()));
295 float bestchi2 = 1.e15;
296 for (const FPGATrackSimTrack& track : tracks) {
297 float chi2 = track.getChi2ndof();
298 if (chi2 < bestchi2) bestchi2 = chi2;
299 auto mon_chi2 = Monitored::Scalar<float>("chi2_2nd_all", chi2);
300 Monitored::Group(m_monTool, mon_chi2);
301 }
302 auto mon_best_chi2 = Monitored::Scalar<float>("best_chi2_2nd", bestchi2);
303 Monitored::Group(m_monTool, mon_best_chi2);
304 }
305 }
306 } else {
307 // No tracking; just run road to track
308 roadsToTrack(roads, tracks, m_FPGATrackSimMapping->PlaneMap_2nd(0));
309 }
310 }
311 auto mon_ntracks = Monitored::Scalar<unsigned>("ntrack_2nd", tracks.size());
312 Monitored::Group(m_monTool,mon_ntracks);
313
314 // Overlap removal
315 {
316 std::optional<Athena::Chrono> chrono;
317 if constexpr (enableBenchmark) chrono.emplace("2nd Stage: Overlap Removal", m_chrono.get());
318 ATH_CHECK(m_overlapRemovalTool->runOverlapRemoval(tracks));
319 }
320 {
321 std::optional<Athena::Chrono> chrono;
322 if constexpr (enableBenchmark) chrono.emplace("2nd Stage: Parameter Estimation", m_chrono.get());
323 // If running NN Track tool, now we get the track parameters (it's slow so we only do it for tracks passing OLR)
325 ATH_CHECK(m_NNTrackTool->setTrackParameters(tracks,false,m_evtSel->getMin(), m_evtSel->getMax()));
326 }
327 }
328 const auto& truthtracks = *FPGATruthTracks;
329 const auto& offlineTracks = *FPGAOfflineTracks;
330
331 // Optionally loop over tracks and set track parameters to truth
332 {
333 std::optional<Athena::Chrono> chrono;
334 if constexpr (enableBenchmark) chrono.emplace("2nd Stage: Truth Param Override", m_chrono.get());
335 if (m_SetTruthParametersForTracks >= 0 && truthtracks.size() > 0) {
336 for (auto track : tracks) {
338 track.setQOverPt(truthtracks.front().getQOverPt());
339 else if (m_SetTruthParametersForTracks != 1)
340 track.setD0(truthtracks.front().getD0());
341 else if (m_SetTruthParametersForTracks != 2)
342 track.setPhi(truthtracks.front().getPhi());
343 else if (m_SetTruthParametersForTracks != 3)
344 track.setZ0(truthtracks.front().getZ0());
345 else if (m_SetTruthParametersForTracks != 4)
346 track.setEta(truthtracks.front().getEta());
347 }
348 }
349 }
350
351 unsigned ntrackOLRChi2 = 0;
352 {
353 std::optional<Athena::Chrono> chrono;
354 if constexpr (enableBenchmark) chrono.emplace("2nd Stage: Track Counting", m_chrono.get());
355 for (const FPGATrackSimTrack& track : tracks) {
356 if (track.getChi2ndof() < m_trackScoreCut.value()) {
358 if (track.passedOR()) {
359 ntrackOLRChi2++;
361
362 // For tracks passing overlap removal-- record the chi2 so we can figure out the right cut.
363 float chi2olr = track.getChi2ndof();
364 auto mon_chi2_or = Monitored::Scalar<float>("chi2_2nd_afterOLR", chi2olr);
365 Monitored::Group(m_monTool, mon_chi2_or);
366 }
367 }
368 }
369 auto mon_ntracks_olr = Monitored::Scalar<unsigned>("ntrack_2nd_afterOLR", ntrackOLRChi2);
370 Monitored::Group(m_monTool,mon_ntracks_olr);
371 }
372
373 m_nRoadsTot += roads.size();
374 m_nTracksTot += tracks.size();
375
376 // Do some simple monitoring of efficiencies. okay, we need truth tracks here.
377 {
378 std::optional<Athena::Chrono> chrono;
379 if constexpr (enableBenchmark) chrono.emplace("2nd Stage: Efficiency Monitoring", m_chrono.get());
380 if (truthtracks.size() > 0) {
381 m_evt_truth++;
382 auto passroad = Monitored::Scalar<bool>("eff_road_2nd",(roads.size() > 0));
383 auto passtrack = Monitored::Scalar<bool>("eff_track_2nd",(tracks.size() > 0));
384 auto truthpT_zoom = Monitored::Scalar<float>("pT_zoom",truthtracks.front().getPt()*0.001);
385 auto truthpT = Monitored::Scalar<float>("pT",truthtracks.front().getPt()*0.001);
386 auto trutheta = Monitored::Scalar<float>("eta",truthtracks.front().getEta());
387 auto truthphi= Monitored::Scalar<float>("phi",truthtracks.front().getPhi());
388 auto truthd0= Monitored::Scalar<float>("d0",truthtracks.front().getD0());
389 auto truthz0= Monitored::Scalar<float>("z0",truthtracks.front().getZ0());
390 if (roads.size() > 0) m_nRoadsFound++;
391 if (roads.size() > m_maxNRoadsFound) m_maxNRoadsFound = roads.size();
392
393 unsigned npasschi2(0);
394 unsigned npasschi2OLR(0);
395
396 if (tracks.size() > 0) {
398 if (tracks.size() > m_maxNTracksTot) m_maxNTracksTot = tracks.size();
399 for (const auto& track : tracks) {
400 if (track.getChi2ndof() < m_trackScoreCut.value()) {
401 npasschi2++;
402 if (track.passedOR()) {
403 npasschi2OLR++;
404 }
405 }
406 }
407 }
408 if (npasschi2 > m_maxNTracksChi2Tot) m_maxNTracksChi2Tot = npasschi2;
409 if (npasschi2OLR > m_maxNTracksChi2OLRTot) m_maxNTracksChi2OLRTot = npasschi2OLR;
410 if (npasschi2 > 0) m_nTracksChi2Found++;
411 if (npasschi2OLR > 0) m_nTracksChi2OLRFound++;
412
413 auto passtrackchi2 = Monitored::Scalar<bool>("eff_track_chi2_2nd",(npasschi2 > 0));
414 Monitored::Group(m_monTool,passroad,passtrack,truthpT_zoom,truthpT,trutheta,truthphi,truthd0,truthz0,passtrackchi2);
415 }
416 }
417
418 {
419 std::optional<Athena::Chrono> chrono;
420 if constexpr (enableBenchmark) chrono.emplace("2nd Stage: Write Tracks", m_chrono.get());
421 for (const FPGATrackSimTrack& track : tracks) FPGATracks_2ndHandle->push_back(track);
422 }
423
424 // Write the output and reset
425 {
426 std::optional<Athena::Chrono> chrono;
427 if constexpr (enableBenchmark) chrono.emplace("2nd Stage: Output", m_chrono.get());
428 if (m_writeOutputData) {
429 auto dataFlowInfo = std::make_unique<FPGATrackSimDataFlowInfo>();
430 ATH_CHECK(writeOutputData(roads, tracks, dataFlowInfo.get()));
431 }
432
434 ATH_MSG_DEBUG("Running HoughRootOutputTool in 2nd stage.");
435 ATH_CHECK(m_houghRootOutputTool->fillTree(tracks, truthtracks, offlineTracks, phits_2nd, m_writeOutNonSPStripHits, true));
436 }
437 }
438
439 // Reset data pointers
440 m_slicedHitHeader->reset();
442
443 return StatusCode::SUCCESS;
444}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
void roadsToTrack(std::vector< FPGATrackSimRoad > &roads, std::vector< FPGATrackSimTrack > &track_cands, const FPGATrackSimPlaneMap *pmap)
static Double_t a
ToolHandle< IFPGATrackSimTrackExtensionTool > m_trackExtensionTool
SG::WriteHandleKey< FPGATrackSimRoadCollection > m_FPGARoadKey
ServiceHandle< IChronoStatSvc > m_chrono
Gaudi::Property< float > m_trackScoreCut
SG::ReadHandleKey< FPGATrackSimOfflineTrackCollection > m_FPGAOfflineTrackKey
ToolHandle< GenericMonitoringTool > m_monTool
SG::WriteHandleKey< FPGATrackSimTrackCollection > m_FPGATrackKey
SG::ReadHandleKey< FPGATrackSimTrackCollection > m_FPGAInputTrackKey
SG::ReadHandleKey< FPGATrackSimTruthTrackCollection > m_FPGATruthTrackKey
Gaudi::Property< bool > m_writeOutNonSPStripHits
FPGATrackSimLogicalEventOutputHeader * m_logicEventOutputHeader
SG::ReadHandleKey< FPGATrackSimEventInfo > m_FPGAEventInfoKey
Gaudi::Property< bool > m_doHoughRootOutput2nd
SG::WriteHandleKey< FPGATrackSimHitContainer > m_FPGAHitInRoadsKey
ToolHandle< FPGATrackSimHoughRootOutputTool > m_houghRootOutputTool
Gaudi::Property< bool > m_doNNTrack_2nd
ServiceHandle< IFPGATrackSimEventSelectionSvc > m_evtSel
ToolHandle< FPGATrackSimNNTrackTool > m_NNTrackTool
Gaudi::Property< int > m_SetTruthParametersForTracks
FPGATrackSimLogicalEventInputHeader * m_slicedHitHeader
ToolHandle< FPGATrackSimTrackFitterTool > m_trackFitterTool
ServiceHandle< IFPGATrackSimMappingSvc > m_FPGATrackSimMapping
StatusCode writeOutputData(const std::vector< FPGATrackSimRoad > &roads_2nd, std::vector< FPGATrackSimTrack > const &tracks_2nd, FPGATrackSimDataFlowInfo const *dataFlowInfo)
Gaudi::Property< bool > m_passLowestChi2TrackOnly
ToolHandle< FPGATrackSimOverlapRemovalTool > m_overlapRemovalTool
Gaudi::Property< bool > m_writeOutputData
SG::ReadHandleKey< FPGATrackSimHitCollection > m_FPGAHitKey
double chi2(TH1 *h0, TH1 *h1)
l
Printing final latex table to .tex output file.
constexpr bool enableBenchmark

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ extraOutputDeps()

const DataObjIDColl & AthAlgorithm::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 50 of file AthAlgorithm.cxx.

51{
52 // If we didn't find any symlinks to add, just return the collection
53 // from the base class. Otherwise, return the extended collection.
54 if (!m_extendedExtraObjects.empty()) {
56 }
57 return Algorithm::extraOutputDeps();
58}
DataObjIDColl m_extendedExtraObjects

◆ finalize()

StatusCode FPGATrackSimSecondStageAlg::finalize ( )
overridevirtual

Definition at line 477 of file FPGATrackSimSecondStageAlg.cxx.

478{
479 ATH_MSG_INFO("PRINTING FPGATRACKSIM SIMPLE STATS: SECOND STAGE");
480 ATH_MSG_INFO("========================================================================================");
481 ATH_MSG_INFO("Ran on events = " << m_evt);
482 ATH_MSG_INFO("Inclusive efficiency to find a road = " << (m_evt_truth == 0 ? "NAN" : std::to_string(m_nRoadsFound/(float)m_evt_truth)));
483 ATH_MSG_INFO("Inclusive efficiency to find a track = " << (m_evt_truth == 0 ? "NAN" : std::to_string(m_nTracksFound/(float)m_evt_truth)));
484 ATH_MSG_INFO("Inclusive efficiency to find a track passing chi2 = " << (m_evt_truth == 0 ? "NAN" : std::to_string(m_nTracksChi2Found/(float)m_evt_truth)));
485 ATH_MSG_INFO("Inclusive efficiency to find a track passing chi2 and OLR = " << (m_evt_truth == 0 ? "NAN" : std::to_string(m_nTracksChi2OLRFound/(float)m_evt_truth)));
486
487
488 ATH_MSG_INFO("Number of 2nd stage roads/event = " << (m_evt == 0 ? "NAN" : std::to_string(m_nRoadsTot/(float)m_evt)));
489 ATH_MSG_INFO("Number of 2nd stage track combinations/event = " << (m_evt == 0 ? "NAN" : std::to_string(m_nTracksTot/(float)m_evt)));
490 ATH_MSG_INFO("Number of 2nd stage tracks passing chi2/event = " << (m_evt == 0 ? "NAN" : std::to_string(m_nTracksChi2Tot/(float)m_evt)));
491 ATH_MSG_INFO("Number of 2nd stage tracks passing chi2 and OLR/event = " << (m_evt == 0 ? "NAN" : std::to_string(m_nTracksChi2OLRTot/(float)m_evt)));
492 ATH_MSG_INFO("========================================================================================");
493
494 ATH_MSG_INFO("Max number of 2nd stage roads in an event = " << m_maxNRoadsFound);
495 ATH_MSG_INFO("Max number of 2nd stage track combinations in an event = " << m_maxNTracksTot);
496 ATH_MSG_INFO("Max number of 2nd stage tracks passing chi2 in an event = " << m_maxNTracksChi2Tot);
497 ATH_MSG_INFO("Max number of 2nd stage tracks passing chi2 and OLR in an event = " << m_maxNTracksChi2OLRTot);
498 ATH_MSG_INFO("========================================================================================");
499 return StatusCode::SUCCESS;
500}
#define ATH_MSG_INFO(x)

◆ initialize()

StatusCode FPGATrackSimSecondStageAlg::initialize ( )
overridevirtual

Definition at line 50 of file FPGATrackSimSecondStageAlg.cxx.

51{
52 std::stringstream ss(m_description);
53 std::string line;
54 ATH_MSG_INFO("Tag config:");
55 if (!m_description.empty()) {
56 while (std::getline(ss, line, '\n')) {
57 ATH_MSG_INFO('\t' << line);
58 }
59 }
60
61 ATH_CHECK(m_houghRootOutputTool.retrieve(EnableTool{m_doHoughRootOutput2nd}));
62 ATH_CHECK(m_NNTrackTool.retrieve(EnableTool{m_doNNTrack_2nd}));
63
64 ATH_CHECK(m_trackFitterTool.retrieve(EnableTool{m_doTracking}));
66 ATH_CHECK(m_writeOutputTool.retrieve());
69
70 ATH_MSG_DEBUG("initialize() Instantiating root objects");
71
72 // This file should only need to generate one input and output branch.
73 m_slicedHitHeader = m_writeOutputTool->addInputBranch(m_sliceBranch.value(), true);
74 m_logicEventOutputHeader = m_writeOutputTool->addOutputBranch(m_outputBranch.value(), true);
75
76 // Connect the sliced hit tool accordingly. This may need to be a separate flag.
78
79 ATH_MSG_DEBUG("initialize() Setting branch");
80
81 if (!m_monTool.empty())
82 ATH_CHECK(m_monTool.retrieve());
83
84 ATH_CHECK( m_FPGAInputTrackKey.initialize());
85 ATH_CHECK( m_FPGAHitInRoadsKey.initialize() );
86 ATH_CHECK( m_FPGARoadKey.initialize() );
87 ATH_CHECK( m_FPGATrackKey.initialize() );
88 ATH_CHECK( m_FPGAHitKey.initialize() );
89 ATH_CHECK( m_FPGATruthTrackKey.initialize() );
90 ATH_CHECK( m_FPGAOfflineTrackKey.initialize() );
91 ATH_CHECK( m_FPGAEventInfoKey.initialize() );
92
93 ATH_CHECK( m_chrono.retrieve() );
94 ATH_MSG_DEBUG("initialize() Finished");
95
96 return StatusCode::SUCCESS;
97}
static Double_t ss
Gaudi::Property< std::string > m_outputBranch
ToolHandle< FPGATrackSimOutputHeaderTool > m_writeOutputTool
Gaudi::Property< std::string > m_sliceBranch

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Algorithm > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ msg()

MsgStream & AthCommonMsg< Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< Algorithm >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Algorithm > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< Algorithm > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ sysInitialize()

StatusCode AthAlgorithm::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc

Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc

Reimplemented from AthCommonDataStore< AthCommonMsg< Algorithm > >.

Reimplemented in AthAnalysisAlgorithm, AthFilterAlgorithm, AthHistogramAlgorithm, and PyAthena::Alg.

Definition at line 66 of file AthAlgorithm.cxx.

66 {
68
69 if (sc.isFailure()) {
70 return sc;
71 }
72 ServiceHandle<ICondSvc> cs("CondSvc",name());
73 for (auto h : outputHandles()) {
74 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
75 // do this inside the loop so we don't create the CondSvc until needed
76 if ( cs.retrieve().isFailure() ) {
77 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
78 return StatusCode::SUCCESS;
79 }
80 if (cs->regHandle(this,*h).isFailure()) {
81 sc = StatusCode::FAILURE;
82 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
83 << " with CondSvc");
84 }
85 }
86 }
87 return sc;
88}
static Double_t sc
virtual StatusCode sysInitialize() override
Override sysInitialize.
AthCommonDataStore(const std::string &name, T... args)
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override
::StatusCode StatusCode
StatusCode definition for legacy code.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Algorithm > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }
std::vector< SG::VarHandleKeyArray * > m_vhka

◆ writeOutputData()

StatusCode FPGATrackSimSecondStageAlg::writeOutputData ( const std::vector< FPGATrackSimRoad > & roads_2nd,
std::vector< FPGATrackSimTrack > const & tracks_2nd,
FPGATrackSimDataFlowInfo const * dataFlowInfo )
private

Definition at line 447 of file FPGATrackSimSecondStageAlg.cxx.

450{
452
453 ATH_MSG_DEBUG("NFPGATrackSimRoads_2nd = " << roads_2nd.size() << ", NFPGATrackSimTracks_2nd = " << tracks_2nd.size());
454
455 if (!m_writeOutputData) return StatusCode::SUCCESS;
456 m_logicEventOutputHeader->reserveFPGATrackSimRoads_2nd(roads_2nd.size());
457 m_logicEventOutputHeader->addFPGATrackSimRoads_2nd(roads_2nd);
458 if (m_doTracking) {
459 m_logicEventOutputHeader->reserveFPGATrackSimTracks_2nd(tracks_2nd.size());
460 m_logicEventOutputHeader->addFPGATrackSimTracks_2nd(tracks_2nd);
461 }
462
463
464 m_logicEventOutputHeader->setDataFlowInfo(*dataFlowInfo);
465 ATH_MSG_DEBUG(m_logicEventOutputHeader->getDataFlowInfo());
466
467 // It would be nice to rearrange this so both algorithms use one instance of this tool, I think.
468 // Which means that dataprep can't call writeData because that does Fill().
469 ATH_CHECK(m_writeOutputTool->writeData());
470
471 return StatusCode::SUCCESS;
472}

Member Data Documentation

◆ m_chrono

ServiceHandle<IChronoStatSvc> FPGATrackSimSecondStageAlg::m_chrono {this,"ChronoStatSvc","ChronoStatSvc"}
private

Definition at line 76 of file FPGATrackSimSecondStageAlg.h.

76{this,"ChronoStatSvc","ChronoStatSvc"};

◆ m_description

std::string FPGATrackSimSecondStageAlg::m_description
private

Definition at line 58 of file FPGATrackSimSecondStageAlg.h.

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_doHoughRootOutput2nd

Gaudi::Property<bool> FPGATrackSimSecondStageAlg::m_doHoughRootOutput2nd {this, "DoHoughRootOutput2nd", false, "Dump output from the Hough Transform to flat ntuples"}
private

Definition at line 83 of file FPGATrackSimSecondStageAlg.h.

83{this, "DoHoughRootOutput2nd", false, "Dump output from the Hough Transform to flat ntuples"};

◆ m_doMissingHitsChecks

Gaudi::Property<bool> FPGATrackSimSecondStageAlg::m_doMissingHitsChecks {this, "DoMissingHitsChecks", false}
private

Definition at line 82 of file FPGATrackSimSecondStageAlg.h.

82{this, "DoMissingHitsChecks", false};

◆ m_doNNPathFinder

Gaudi::Property<bool> FPGATrackSimSecondStageAlg::m_doNNPathFinder {this, "doNNPathFinder", false}
private

Definition at line 90 of file FPGATrackSimSecondStageAlg.h.

90{this, "doNNPathFinder", false};

◆ m_doNNTrack_2nd

Gaudi::Property<bool> FPGATrackSimSecondStageAlg::m_doNNTrack_2nd {this, "DoNNTrack_2nd", false, "Run NN track filtering for 2nd Stage"}
private

Definition at line 84 of file FPGATrackSimSecondStageAlg.h.

84{this, "DoNNTrack_2nd", false, "Run NN track filtering for 2nd Stage"};

◆ m_doSpacepoints

Gaudi::Property<bool> FPGATrackSimSecondStageAlg::m_doSpacepoints {this, "Spacepoints", false, "flag to enable the spacepoint formation"}
private

Definition at line 80 of file FPGATrackSimSecondStageAlg.h.

80{this, "Spacepoints", false, "flag to enable the spacepoint formation"};

◆ m_doTracking

Gaudi::Property<bool> FPGATrackSimSecondStageAlg::m_doTracking {this, "tracking", false, "flag to enable the tracking"}
private

Definition at line 81 of file FPGATrackSimSecondStageAlg.h.

81{this, "tracking", false, "flag to enable the tracking"};

◆ m_evt

long FPGATrackSimSecondStageAlg::m_evt = 0
private

Definition at line 109 of file FPGATrackSimSecondStageAlg.h.

◆ m_evt_truth

long FPGATrackSimSecondStageAlg::m_evt_truth = 0
private

Definition at line 115 of file FPGATrackSimSecondStageAlg.h.

◆ m_evtSel

ServiceHandle<IFPGATrackSimEventSelectionSvc> FPGATrackSimSecondStageAlg::m_evtSel {this, "eventSelector", "", "Event selection Svc"}
private

Definition at line 74 of file FPGATrackSimSecondStageAlg.h.

74{this, "eventSelector", "", "Event selection Svc"};

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthAlgorithm::m_extendedExtraObjects
privateinherited

Definition at line 79 of file AthAlgorithm.h.

◆ m_filterRoads

Gaudi::Property<bool> FPGATrackSimSecondStageAlg::m_filterRoads {this, "FilterRoads", false, "enable first road filter"}
private

Definition at line 95 of file FPGATrackSimSecondStageAlg.h.

95{this, "FilterRoads", false, "enable first road filter"};

◆ m_filterRoads2

Gaudi::Property<bool> FPGATrackSimSecondStageAlg::m_filterRoads2 {this, "FilterRoads2", false, "enable second road filter"}
private

Definition at line 96 of file FPGATrackSimSecondStageAlg.h.

96{this, "FilterRoads2", false, "enable second road filter"};

◆ m_FPGAEventInfoKey

SG::ReadHandleKey<FPGATrackSimEventInfo> FPGATrackSimSecondStageAlg::m_FPGAEventInfoKey {this, "FPGATrackSimEventInfoKey", "FPGAEventInfo", "FPGATrackSim event info"}
private

Definition at line 145 of file FPGATrackSimSecondStageAlg.h.

145{this, "FPGATrackSimEventInfoKey", "FPGAEventInfo", "FPGATrackSim event info"};

◆ m_FPGAHitInRoadsKey

SG::WriteHandleKey<FPGATrackSimHitContainer> FPGATrackSimSecondStageAlg::m_FPGAHitInRoadsKey {this, "FPGATrackSimHitInRoads2ndKey","FPGAHitsInRoads_2nd","FPGATrackSim Hits in 1st stage roads key"}
private

Definition at line 138 of file FPGATrackSimSecondStageAlg.h.

138{this, "FPGATrackSimHitInRoads2ndKey","FPGAHitsInRoads_2nd","FPGATrackSim Hits in 1st stage roads key"};

◆ m_FPGAHitKey

SG::ReadHandleKey<FPGATrackSimHitCollection> FPGATrackSimSecondStageAlg::m_FPGAHitKey {this, "FPGATrackSimHitKey", "FPGAHits_2nd", "FPGATrackSim Hits key"}
private

Definition at line 134 of file FPGATrackSimSecondStageAlg.h.

134{this, "FPGATrackSimHitKey", "FPGAHits_2nd", "FPGATrackSim Hits key"};

◆ m_FPGAInputTrackKey

SG::ReadHandleKey<FPGATrackSimTrackCollection> FPGATrackSimSecondStageAlg::m_FPGAInputTrackKey {this, "FPGATrackSimTrack1stKey", "FPGATracks_1st", "FPGATrackSim tracks 1st stage key"}
private

Definition at line 135 of file FPGATrackSimSecondStageAlg.h.

135{this, "FPGATrackSimTrack1stKey", "FPGATracks_1st", "FPGATrackSim tracks 1st stage key"};

◆ m_FPGAOfflineTrackKey

SG::ReadHandleKey<FPGATrackSimOfflineTrackCollection> FPGATrackSimSecondStageAlg::m_FPGAOfflineTrackKey {this, "FPGATrackSimOfflineTrackKey", "FPGAOfflineTracks", "FPGATrackSim offline tracks"}
private

Definition at line 144 of file FPGATrackSimSecondStageAlg.h.

144{this, "FPGATrackSimOfflineTrackKey", "FPGAOfflineTracks", "FPGATrackSim offline tracks"};

◆ m_FPGARoadKey

SG::WriteHandleKey<FPGATrackSimRoadCollection> FPGATrackSimSecondStageAlg::m_FPGARoadKey {this, "FPGATrackSimRoad2ndKey","FPGARoads_2nd","FPGATrackSim Roads 2nd stage key"}
private

Definition at line 139 of file FPGATrackSimSecondStageAlg.h.

139{this, "FPGATrackSimRoad2ndKey","FPGARoads_2nd","FPGATrackSim Roads 2nd stage key"};

◆ m_FPGATrackKey

SG::WriteHandleKey<FPGATrackSimTrackCollection> FPGATrackSimSecondStageAlg::m_FPGATrackKey {this, "FPGATrackSimTrack2ndKey","FPGATracks_2nd","FPGATrackSim Tracks 2nd stage key"}
private

Definition at line 140 of file FPGATrackSimSecondStageAlg.h.

140{this, "FPGATrackSimTrack2ndKey","FPGATracks_2nd","FPGATrackSim Tracks 2nd stage key"};

◆ m_FPGATrackSimMapping

ServiceHandle<IFPGATrackSimMappingSvc> FPGATrackSimSecondStageAlg::m_FPGATrackSimMapping {this, "FPGATrackSimMapping", "FPGATrackSimMappingSvc", "FPGATrackSimMappingSvc"}
private

Definition at line 73 of file FPGATrackSimSecondStageAlg.h.

73{this, "FPGATrackSimMapping", "FPGATrackSimMappingSvc", "FPGATrackSimMappingSvc"};

◆ m_FPGATruthTrackKey

SG::ReadHandleKey<FPGATrackSimTruthTrackCollection> FPGATrackSimSecondStageAlg::m_FPGATruthTrackKey {this, "FPGATrackSimTruthTrackKey", "FPGATruthTracks", "FPGATrackSim truth tracks"}
private

Definition at line 143 of file FPGATrackSimSecondStageAlg.h.

143{this, "FPGATrackSimTruthTrackKey", "FPGATruthTracks", "FPGATrackSim truth tracks"};

◆ m_houghRootOutputTool

ToolHandle<FPGATrackSimHoughRootOutputTool> FPGATrackSimSecondStageAlg::m_houghRootOutputTool {this, "HoughRootOutputTool", "FPGATrackSimHoughRootOutputTool/FPGATrackSimHoughRootOutputTool", "Hough ROOT Output Tool"}
private

Definition at line 64 of file FPGATrackSimSecondStageAlg.h.

64{this, "HoughRootOutputTool", "FPGATrackSimHoughRootOutputTool/FPGATrackSimHoughRootOutputTool", "Hough ROOT Output Tool"};

◆ m_logicEventOutputHeader

FPGATrackSimLogicalEventOutputHeader* FPGATrackSimSecondStageAlg::m_logicEventOutputHeader = nullptr
private

Definition at line 104 of file FPGATrackSimSecondStageAlg.h.

◆ m_maxNRoadsFound

unsigned long FPGATrackSimSecondStageAlg::m_maxNRoadsFound = 0
private

Definition at line 121 of file FPGATrackSimSecondStageAlg.h.

◆ m_maxNTracksChi2OLRTot

unsigned long FPGATrackSimSecondStageAlg::m_maxNTracksChi2OLRTot = 0
private

Definition at line 124 of file FPGATrackSimSecondStageAlg.h.

◆ m_maxNTracksChi2Tot

unsigned long FPGATrackSimSecondStageAlg::m_maxNTracksChi2Tot = 0
private

Definition at line 123 of file FPGATrackSimSecondStageAlg.h.

◆ m_maxNTracksTot

unsigned long FPGATrackSimSecondStageAlg::m_maxNTracksTot = 0
private

Definition at line 122 of file FPGATrackSimSecondStageAlg.h.

◆ m_monTool

ToolHandle<GenericMonitoringTool> FPGATrackSimSecondStageAlg::m_monTool {this,"MonTool", "", "Monitoring tool"}
private

Definition at line 131 of file FPGATrackSimSecondStageAlg.h.

131{this,"MonTool", "", "Monitoring tool"};

◆ m_NNTrackTool

ToolHandle<FPGATrackSimNNTrackTool> FPGATrackSimSecondStageAlg::m_NNTrackTool {this, "NNTrackTool", "FPGATrackSimNNTrackTool/FPGATrackSimNNTrackTool_2nd", "NN Track Tool"}
private

Definition at line 67 of file FPGATrackSimSecondStageAlg.h.

67{this, "NNTrackTool", "FPGATrackSimNNTrackTool/FPGATrackSimNNTrackTool_2nd", "NN Track Tool"};

◆ m_nRoadsFound

long FPGATrackSimSecondStageAlg::m_nRoadsFound = 0
private

Definition at line 116 of file FPGATrackSimSecondStageAlg.h.

◆ m_nRoadsTot

long FPGATrackSimSecondStageAlg::m_nRoadsTot = 0
private

Definition at line 110 of file FPGATrackSimSecondStageAlg.h.

◆ m_nTracksChi2Found

long FPGATrackSimSecondStageAlg::m_nTracksChi2Found = 0
private

Definition at line 118 of file FPGATrackSimSecondStageAlg.h.

◆ m_nTracksChi2OLRFound

long FPGATrackSimSecondStageAlg::m_nTracksChi2OLRFound = 0
private

Definition at line 119 of file FPGATrackSimSecondStageAlg.h.

◆ m_nTracksChi2OLRTot

long FPGATrackSimSecondStageAlg::m_nTracksChi2OLRTot = 0
private

Definition at line 113 of file FPGATrackSimSecondStageAlg.h.

◆ m_nTracksChi2Tot

long FPGATrackSimSecondStageAlg::m_nTracksChi2Tot = 0
private

Definition at line 112 of file FPGATrackSimSecondStageAlg.h.

◆ m_nTracksFound

long FPGATrackSimSecondStageAlg::m_nTracksFound = 0
private

Definition at line 117 of file FPGATrackSimSecondStageAlg.h.

◆ m_nTracksTot

long FPGATrackSimSecondStageAlg::m_nTracksTot = 0
private

Definition at line 111 of file FPGATrackSimSecondStageAlg.h.

◆ m_NumOfHitPerGrouping

Gaudi::Property<int> FPGATrackSimSecondStageAlg::m_NumOfHitPerGrouping { this, "NumOfHitPerGrouping", 5, "Number of minimum overlapping hits for a track candidate to be removed in the HoughRootOutputTool"}
private

Definition at line 88 of file FPGATrackSimSecondStageAlg.h.

88{ this, "NumOfHitPerGrouping", 5, "Number of minimum overlapping hits for a track candidate to be removed in the HoughRootOutputTool"};

◆ m_outputBranch

Gaudi::Property<std::string> FPGATrackSimSecondStageAlg::m_outputBranch {this, "outputBranchName", "LogicalEventOutputHeader", "Name of the branch for output data in output ROOT file." }
private

Definition at line 100 of file FPGATrackSimSecondStageAlg.h.

100{this, "outputBranchName", "LogicalEventOutputHeader", "Name of the branch for output data in output ROOT file." };

◆ m_overlapRemovalTool

ToolHandle<FPGATrackSimOverlapRemovalTool> FPGATrackSimSecondStageAlg::m_overlapRemovalTool {this, "OverlapRemoval_2nd", "FPGATrackSimOverlapRemovalTool/FPGATrackSimOverlapRemovalTool_2nd", "2nd stage overlap removal tool"}
private

Definition at line 69 of file FPGATrackSimSecondStageAlg.h.

69{this, "OverlapRemoval_2nd", "FPGATrackSimOverlapRemovalTool/FPGATrackSimOverlapRemovalTool_2nd", "2nd stage overlap removal tool"};

◆ m_passLowestChi2TrackOnly

Gaudi::Property<bool> FPGATrackSimSecondStageAlg::m_passLowestChi2TrackOnly {this, "passLowestChi2TrackOnly", false}
private

Definition at line 89 of file FPGATrackSimSecondStageAlg.h.

89{this, "passLowestChi2TrackOnly", false};

◆ m_SetTruthParametersForTracks

Gaudi::Property<int> FPGATrackSimSecondStageAlg::m_SetTruthParametersForTracks {this, "SetTruthParametersForTracks", -1, "flag to override track parameters and set them to the truth values"}
private

Definition at line 79 of file FPGATrackSimSecondStageAlg.h.

79{this, "SetTruthParametersForTracks", -1, "flag to override track parameters and set them to the truth values"};

◆ m_sliceBranch

Gaudi::Property<std::string> FPGATrackSimSecondStageAlg::m_sliceBranch {this, "SliceBranchName", "LogicalEventSlicedHeader", "Name of the branch for slied hits in output ROOT file." }
private

Definition at line 99 of file FPGATrackSimSecondStageAlg.h.

99{this, "SliceBranchName", "LogicalEventSlicedHeader", "Name of the branch for slied hits in output ROOT file." };

◆ m_slicedHitHeader

FPGATrackSimLogicalEventInputHeader* FPGATrackSimSecondStageAlg::m_slicedHitHeader = nullptr
private

Definition at line 103 of file FPGATrackSimSecondStageAlg.h.

◆ m_trackExtensionTool

ToolHandle<IFPGATrackSimTrackExtensionTool> FPGATrackSimSecondStageAlg::m_trackExtensionTool {this, "TrackExtensionTool", "FPGATrackSimTrackExtensionTool", "Track extensoin tool"}
private

Definition at line 61 of file FPGATrackSimSecondStageAlg.h.

61{this, "TrackExtensionTool", "FPGATrackSimTrackExtensionTool", "Track extensoin tool"};

◆ m_trackFitterTool

ToolHandle<FPGATrackSimTrackFitterTool> FPGATrackSimSecondStageAlg::m_trackFitterTool {this, "TrackFitter_2nd", "FPGATrackSimTrackFitterTool/FPGATrackSimTrackFitterTool_2nd", "2nd stage track fit tool"}
private

Definition at line 68 of file FPGATrackSimSecondStageAlg.h.

68{this, "TrackFitter_2nd", "FPGATrackSimTrackFitterTool/FPGATrackSimTrackFitterTool_2nd", "2nd stage track fit tool"};

◆ m_trackScoreCut

Gaudi::Property<float> FPGATrackSimSecondStageAlg::m_trackScoreCut {this, "TrackScoreCut", 25.0, "Minimum track score (e.g. chi2 or NN)." }
private

Definition at line 86 of file FPGATrackSimSecondStageAlg.h.

86{this, "TrackScoreCut", 25.0, "Minimum track score (e.g. chi2 or NN)." };

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< Algorithm > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.

◆ m_writeOutNonSPStripHits

Gaudi::Property<bool> FPGATrackSimSecondStageAlg::m_writeOutNonSPStripHits {this, "writeOutNonSPStripHits", true, "Write tracks to RootOutput if they have strip hits which are not SPs"}
private

Definition at line 87 of file FPGATrackSimSecondStageAlg.h.

87{this, "writeOutNonSPStripHits", true, "Write tracks to RootOutput if they have strip hits which are not SPs"};

◆ m_writeOutputData

Gaudi::Property<bool> FPGATrackSimSecondStageAlg::m_writeOutputData {this, "writeOutputData", true,"write the output TTree"}
private

Definition at line 85 of file FPGATrackSimSecondStageAlg.h.

85{this, "writeOutputData", true,"write the output TTree"};

◆ m_writeOutputTool

ToolHandle<FPGATrackSimOutputHeaderTool> FPGATrackSimSecondStageAlg::m_writeOutputTool {this, "OutputTool", "FPGATrackSimOutputHeaderTool/FPGATrackSimOutputHeaderTool", "Output tool"}
private

Definition at line 72 of file FPGATrackSimSecondStageAlg.h.

72{this, "OutputTool", "FPGATrackSimOutputHeaderTool/FPGATrackSimOutputHeaderTool", "Output tool"};

The documentation for this class was generated from the following files: