38 ISvcLocator* pSvcLocator)
47 ATH_MSG_FATAL(
"SCTs selected and no name set for SCT clusters");
48 return StatusCode::FAILURE;
53 ATH_MSG_FATAL(
"Pixels selected and no name set for Pixel clusters");
54 return StatusCode::FAILURE;
60 return StatusCode::FAILURE;
66 return StatusCode::FAILURE;
72 return StatusCode::FAILURE;
99 ATH_MSG_INFO(
"Use SCT SP overlap cuts based on layer number parity");
102 ATH_MSG_INFO(
"Doing eta overlap space points in strips endcap");
104 return StatusCode::SUCCESS;
122 elements = sctDetEle.retrieve();
123 if (elements==
nullptr) {
125 return StatusCode::SUCCESS;
131 return StatusCode::SUCCESS;
134 SPFCache r_cache(ctx);
138 r_cache.vertex =
beamSpot->beamVtx().position();
145 std::unique_ptr<DataPool<PixelSpacePoint>> dataItemsPixel =
nullptr;
154 ATH_CHECK( spacePointContainerPixel.
record( std::make_unique<SpacePointContainer>(updateH.ptr()) ) );
158 if (!hasExternalCache) {
159 dataItemsPixel = std::make_unique<DataPool<PixelSpacePoint>>(ctx);
160 dataItemsPixel->reserve(5000);
162 dataItemsPixel = std::make_unique<DataPool<PixelSpacePoint>>(ctx);
168 std::unique_ptr<DataPool<SCT_SpacePoint>> dataItemsSCT =
nullptr;
177 ATH_CHECK( spacePointContainer_SCT.
record( std::make_unique<SpacePointContainer>(updateH.ptr()) ) );
181 if (!hasExternalCache) {
182 dataItemsSCT = std::make_unique<DataPool<SCT_SpacePoint>>(ctx);
183 dataItemsSCT->reserve(10000);
185 dataItemsSCT = std::make_unique<DataPool<SCT_SpacePoint>>(ctx);
193 ATH_CHECK( spacepointoverlapCollection.
record( std::make_unique<SpacePointOverlapCollection>() ) );
198 ATH_MSG_DEBUG(
"Container '" << spacepointoverlapCollection.
name() <<
"' initialised" );
201 int sctCacheCount = 0;
202 int pixCacheCount = 0;
207 if (!sct_clcontainer.isValid()){
208 msg(
MSG:: FATAL) <<
"Could not find the data object "<< sct_clcontainer.name() <<
" !" <<
endmsg;
209 return StatusCode::RECOVERABLE;
212 r_cache.SCTCContainer = sct_clcontainer.cptr();
214 ATH_MSG_DEBUG(
"SCT Cluster container found: " << sct_clcontainer->size() <<
" collections" );
220 SCT_ClusterContainer::const_iterator
it = sct_clcontainer->begin();
221 SCT_ClusterContainer::const_iterator itend = sct_clcontainer->end();
223 for (;
it != itend; ++
it){
229 if(
lock.OnlineAndPresentInAnotherView()){
230 ATH_MSG_DEBUG(
"SCT Hash " << idHash <<
" is already in cache");
236 auto spacepointCollection = std::make_unique<SpacePointCollection>(idHash);
237 spacepointCollection->setIdentifier(elementID);
245 colNext,
properties, elements, spacepointCollection.get(),
246 spacepointoverlapCollection.
ptr(), r_cache, dataItemsSCT.get());
251 size_t size = spacepointCollection->size();
253 ATH_MSG_VERBOSE(
"SiTrackerSpacePointFinder algorithm found no space points" );
259 return StatusCode::RECOVERABLE;
262 nReceivedSPsSCT +=
size;
273 if (!pixel_clcontainer.isValid()){
274 msg(
MSG:: FATAL) <<
"Could not find the data object "<< pixel_clcontainer.name() <<
" !" <<
endmsg;
275 return StatusCode::RECOVERABLE;
278 ATH_MSG_DEBUG(
"Data object " << pixel_clcontainer.name() <<
" found" );
281 PixelClusterContainer::const_iterator colNext = pixel_clcontainer->begin();
282 PixelClusterContainer::const_iterator lastCol = pixel_clcontainer->end();
286 for (; colNext != lastCol; ++colNext)
291 if(
lock.OnlineAndPresentInAnotherView()){
292 ATH_MSG_DEBUG(
"pixel Hash " << idHash <<
" is already in cache");
297 Identifier elementID = (*colNext)->identify();
298 auto spacepointCollection = std::make_unique< SpacePointCollection >(idHash);
299 spacepointCollection->setIdentifier(elementID);
305 if (!(*colNext)->empty())
308 *colNext, spacepointCollection.get(), dataItemsPixel.get());
312 size_t size = spacepointCollection->size();
315 ATH_MSG_DEBUG(
"SiTrackerSpacePointFinder algorithm found no space points" );
323 return StatusCode::RECOVERABLE;
326 <<
" SpacePoints successfully added to Container !" );
327 nReceivedSPsPIX +=
size;
337 if (spacepointoverlapCollection->
empty())
343 ATH_MSG_DEBUG( spacepointoverlapCollection->
size() <<
" overlap space points registered." );
354 return StatusCode::SUCCESS;
373 return StatusCode::SUCCESS;
422 std::array<const SCT_ClusterCollection*, nNeighbours> neighbourClusters{};
423 std::array<const InDetDD::SiDetectorElement*, nNeighbours> neighbourElements{};
424 std::array<double, 14> overlapExtents{};
432 const std::vector<IdentifierHash>* others(
properties->neighbours(triggerIdHash));
433 if (others==
nullptr || others->empty() )
return;
436 neighbourElements[0] = triggerElement;
437 neighbourClusters[0] = sctClusters;
450 float hwidth(
properties->halfWidth(triggerIdHash));
463 for (
const auto& otherHash : *others) {
469 if(!otherElement || !otherClusters)
continue;
471 neighbourElements[neigbourIndices[
n]] = otherElement;
472 neighbourClusters[neigbourIndices[
n]] = otherClusters;
482 overlapExtents[ 6] =-hwidth;
485 overlapExtents[ 9] = hwidth;
490 overlapExtents[11] = hwidth;
491 overlapExtents[12] =-hwidth;
518 neighbourElements, neighbourClusters, overlapExtents,
m_allClusters,
519 r_cache.
vertex, spacepointCollection, spacepointOverlapCollection,