41 {
42 std::unique_ptr<InDet::PixelClusterCollection> PixelCollFromHits = std::make_unique<InDet::PixelClusterCollection>();
43 std::unique_ptr<InDet::SCT_ClusterCollection> SCTCollFromHits = std::make_unique<InDet::SCT_ClusterCollection>();
44
45 std::unique_ptr<InDet::PixelClusterCollection> PixelCollFromClusters = std::make_unique<InDet::PixelClusterCollection>();
46 std::unique_ptr<InDet::SCT_ClusterCollection> SCTCollFromClusters = std::make_unique<InDet::SCT_ClusterCollection>();
47
48 std::unique_ptr<InDet::SCT_ClusterCollection> SCTCollFromSP = std::make_unique<InDet::SCT_ClusterCollection>();
49 std::unique_ptr<xAOD::PixelClusterContainer> PixelContFromHits = std::make_unique<xAOD::PixelClusterContainer>();
50 std::unique_ptr<xAOD::PixelClusterAuxContainer> PixelAuxContFromHits = std::make_unique<xAOD::PixelClusterAuxContainer>();
51 PixelContFromHits->setStore (PixelAuxContFromHits.get());
52
53 std::unique_ptr<xAOD::StripClusterContainer> SCTContFromHits = std::make_unique<xAOD::StripClusterContainer>();
54 std::unique_ptr<xAOD::StripClusterAuxContainer> SCTAuxContFromHits = std::make_unique<xAOD::StripClusterAuxContainer>();
55 SCTContFromHits->setStore(SCTAuxContFromHits.get() );
56
57 std::unique_ptr<xAOD::PixelClusterContainer> PixelContFromClusters = std::make_unique<xAOD::PixelClusterContainer>();
58 std::unique_ptr<xAOD::PixelClusterAuxContainer> PixelAuxContFromClusters = std::make_unique<xAOD::PixelClusterAuxContainer>();
59 PixelContFromClusters->setStore (PixelAuxContFromClusters.get());
60
61 std::unique_ptr<xAOD::StripClusterContainer> SCTContFromClusters = std::make_unique<xAOD::StripClusterContainer>();
62 std::unique_ptr<xAOD::StripClusterAuxContainer> SCTAuxContFromClusters = std::make_unique<xAOD::StripClusterAuxContainer>();
63 SCTContFromClusters->setStore(SCTAuxContFromClusters.get() );
64
65 std::unique_ptr<xAOD::SpacePointContainer> StripSPCont = std::make_unique<xAOD::SpacePointContainer>();
66 std::unique_ptr<xAOD::SpacePointAuxContainer> StripSPAuxCont = std::make_unique<xAOD::SpacePointAuxContainer>();
67 StripSPCont->setStore(StripSPAuxCont.get() );
68
69 std::unique_ptr<xAOD::SpacePointContainer> PixelSPCont = std::make_unique<xAOD::SpacePointContainer>();
70 std::unique_ptr<xAOD::SpacePointAuxContainer> PixelSPAuxCont = std::make_unique<xAOD::SpacePointAuxContainer>();
71 PixelSPCont->setStore(PixelSPAuxCont.get() );
72
73 std::unique_ptr<ActsTrk::ProtoTrackCollection> ProtoTracksFromRoads = std::make_unique<ActsTrk::ProtoTrackCollection>();
74 std::unique_ptr<ActsTrk::ProtoTrackCollection> ProtoTracksFromTracks = std::make_unique<ActsTrk::ProtoTrackCollection>();
75
77
78 SG::ReadHandle<FPGATrackSimClusterCollection> FPGAClustersHandle (
m_FPGAClusterKey, ctx);
79 if (FPGAClustersHandle.isValid()) {
81
82
86 }
87
88
93
96 SG::ReadHandle<FPGATrackSimRoadCollection> FPGARoadsHandle(
m_FPGARoadKey, ctx);
97 if (!FPGARoadsHandle.isValid()) {
98 ATH_MSG_FATAL(
"Failed to retrieve 1st stage FPGATrackSimRoadCollection");
99 return StatusCode::FAILURE;
100 }
103 ATH_CHECK(
m_ActsTrkConverter->findProtoTracks(ctx, *PixelContFromClusters, *SCTContFromClusters, *ProtoTracksFromRoads, *FPGARoadColl));
105 }
106 else{
107 SG::ReadHandle<FPGATrackSimTrackCollection> FPGATracksHandle(
m_FPGATrackKey, ctx);
108 if (!FPGATracksHandle.isValid()) {
109 ATH_MSG_FATAL(
"Failed to retrieve 1st stage FPGATrackSimTrackCollection");
110 return StatusCode::FAILURE;
111 }
113
115 ATH_CHECK(
m_ActsTrkConverter->findProtoTracks(ctx, *PixelContFromClusters, *SCTContFromClusters, *ProtoTracksFromTracks, *FPGATrackColl));
117 }
118 }
119
122 SG::ReadHandle<FPGATrackSimClusterCollection> FPGASPHandle (
m_FPGASPKey, ctx);
123
124 if (FPGASPHandle.isValid()) {
126 ATH_CHECK(
m_ClusterConverter->convertSpacePoints(*FPGASPColl, *StripSPCont, *PixelSPCont, *SCTContFromClusters, *PixelContFromClusters) );
127 }
128 else {{
ATH_MSG_WARNING(
"Failed to retrieve 1st stage FPGATrackSimSpacePointCollection. Will skip SP conversion ");}}
129 }
130 }
131
132 else {
ATH_MSG_WARNING(
"Failed to retrieve 1st stage FPGATrackSimClusterCollection. Will skip clusters and track conversion ");}
135
136 ATH_CHECK( xAODPixelClusterFromFPGAClusterHandle.record (std::move(PixelContFromClusters), std::move(PixelAuxContFromClusters)));
137 ATH_CHECK( xAODStripClusterFromFPGAClusterHandle.record (std::move(SCTContFromClusters), std::move(SCTAuxContFromClusters)));
139 {
141 ATH_CHECK( ActsProtoTrackFromFPGATrackHandle.record (std::move(ProtoTracksFromTracks)));
144 ATH_CHECK( ActsProtoTrackFromFPGARoadHandle.record (std::move(ProtoTracksFromRoads)));
145 }
146 }
148 {
151 ATH_CHECK( xAODStripSpacePointFromFPGAHandle.record (std::move(StripSPCont), std::move(StripSPAuxCont)));
152 ATH_CHECK( xAODPixelSpacePointFromFPGAHandle.record (std::move(PixelSPCont), std::move(PixelSPAuxCont)));
153 }
154 }
155
157 SG::ReadHandle<FPGATrackSimHitCollection> FPGAHitsHandle (
m_FPGAHitKey, ctx);
158
159 if (FPGAHitsHandle.isValid()) {
161
162
166 }
169 }
170
171 else {
ATH_MSG_WARNING(
"Failed to retrieve 1st stage FPGATrackSimHitCollection. Will skip hit conversion ");}
172
173
176 ATH_CHECK( xAODPixelClusterFromFPGAHitHandle.record (std::move(PixelContFromHits),std::move(PixelAuxContFromHits)));
177 ATH_CHECK( xAODStripClusterFromFPGAHitHandle.record (std::move(SCTContFromHits),std::move(SCTAuxContFromHits)));
178
179
181 SG::ReadHandle<FPGATrackSimTrackCollection> FPGATracksHandle(
m_FPGATrackKey, ctx);
182 if (!FPGATracksHandle.isValid()) {
183 ATH_MSG_FATAL(
"Failed to retrieve 1st stage FPGATrackSimTrackCollection");
184 return StatusCode::FAILURE;
185 }
187
189 ATH_CHECK(
m_ActsTrkConverter->findProtoTracks(ctx, *PixelContFromClusters, *SCTContFromClusters, *ProtoTracksFromTracks, *FPGATrackColl));
191 }
192 }
193
194 return StatusCode::SUCCESS;
195 }
#define ATH_MSG_WARNING(x)
std::vector< FPGATrackSimCluster > FPGATrackSimClusterCollection
DataVector< FPGATrackSimHit > FPGATrackSimHitCollection
std::vector< FPGATrackSimRoad > FPGATrackSimRoadCollection
std::vector< FPGATrackSimTrack > FPGATrackSimTrackCollection
SG::WriteHandleKey< ActsTrk::ProtoTrackCollection > m_ActsProtoTrackFromFPGARoadKey
SG::WriteHandleKey< xAOD::PixelClusterContainer > m_xAODPixelClusterFromFPGAHitKey
SG::WriteHandleKey< xAOD::SpacePointContainer > m_xAODStripSpacePointFromFPGAKey
ServiceHandle< IChronoStatSvc > m_chrono
SG::WriteHandleKey< xAOD::PixelClusterContainer > m_xAODPixelClusterFromFPGAClusterKey
ToolHandle< IFPGAActsTrkConverter > m_ActsTrkConverter
ToolHandle< IFPGAClusterConverter > m_ClusterConverter
SG::ReadHandleKey< FPGATrackSimTrackCollection > m_FPGATrackKey
SG::ReadHandleKey< FPGATrackSimHitCollection > m_FPGAHitKey
Gaudi::Property< bool > m_doSP
Gaudi::Property< bool > m_doActsTrk
SG::ReadHandleKey< FPGATrackSimClusterCollection > m_FPGASPKey
SG::WriteHandleKey< xAOD::StripClusterContainer > m_xAODStripClusterFromFPGAHitKey
SG::WriteHandleKey< ActsTrk::ProtoTrackCollection > m_ActsProtoTrackFromFPGATrackKey
Gaudi::Property< bool > m_doIndet
SG::WriteHandleKey< xAOD::StripClusterContainer > m_xAODStripClusterFromFPGAClusterKey
Gaudi::Property< bool > m_doClusters
SG::WriteHandleKey< xAOD::SpacePointContainer > m_xAODPixelSpacePointFromFPGAKey
SG::ReadHandleKey< FPGATrackSimClusterCollection > m_FPGAClusterKey
Gaudi::Property< bool > m_doHits
Gaudi::Property< bool > m_useRoads
SG::ReadHandleKey< FPGATrackSimRoadCollection > m_FPGARoadKey
constexpr bool enableBenchmark