18                                    ISvcLocator *pSvcLocator)
 
   47     return StatusCode::SUCCESS; 
 
   60     std::unique_ptr< xAOD::PixelClusterContainer > pixel_cluster_xaod_container = std::make_unique< xAOD::PixelClusterContainer >();
 
   61     std::unique_ptr< xAOD::PixelClusterAuxContainer > pixel_cluster_xaod_aux_container = std::make_unique< xAOD::PixelClusterAuxContainer >();
 
   62     pixel_cluster_xaod_container->setStore( pixel_cluster_xaod_aux_container.get() );
 
   64     std::unique_ptr< xAOD::StripClusterContainer > strip_cluster_xaod_container = std::make_unique< xAOD::StripClusterContainer >();
 
   65     std::unique_ptr< xAOD::StripClusterAuxContainer > strip_cluster_xaod_aux_container =  std::make_unique< xAOD::StripClusterAuxContainer >();
 
   66     strip_cluster_xaod_container->setStore( strip_cluster_xaod_aux_container.get() );
 
   74       std::unordered_map<Identifier, std::size_t> mapClusters{};
 
   76                   strip_cluster_xaod_container.get(),
 
   79                      strip_cluster_xaod_container.get(),
 
   87     ATH_CHECK( pixel_cluster_xaod_handle.
record( std::move(pixel_cluster_xaod_container),
 
   88                              std::move(pixel_cluster_xaod_aux_container) ) );
 
   93     ATH_CHECK( strip_cluster_xaod_handle.
record( std::move(strip_cluster_xaod_container),
 
   94                              std::move(strip_cluster_xaod_aux_container) ) );
 
   98     return StatusCode::SUCCESS; 
 
  109       if (not pixelDetEleHandle.
isValid()) {
 
  111     return StatusCode::FAILURE;
 
  113       pixElements = pixelDetEleHandle.
cptr();
 
  123     std::unique_ptr< xAOD::SpacePointAuxContainer > pixel_xaod_aux_container = std::make_unique< xAOD::SpacePointAuxContainer >();
 
  124     pixel_xaod_container->setStore( pixel_xaod_aux_container.get() );
 
  127     for (const ::SpacePointCollection *spc : *pixel_container) {
 
  131     pixel_xaod_container->
push_new (nsp, [&
pool](){
return pool.nextElementPtr();});
 
  135     for (const ::SpacePointCollection *spc : *pixel_container) {
 
  144       const std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>& clusterList = sp->clusterList();
 
  146       if (theCluster == 
nullptr) {
 
  150       auto clusterId = clusterList.first->identify();
 
  152       if ( element == 
nullptr ) {
 
  153         ATH_MSG_FATAL( 
"Invalid pixel detector element for cluster identifier " << clusterId );
 
  154         return StatusCode::FAILURE;
 
  158       cluster_xaod_container->
push_back(pixelCl);
 
  165     linkAcc(*pixel_sp) = link;
 
  171     ATH_CHECK( pixel_xaod_handle.
record( std::move(pixel_xaod_container), std::move(pixel_xaod_aux_container) ) );
 
  173     return StatusCode::SUCCESS;
 
  179                                std::unordered_map<Identifier, std::size_t>& mapClusters)
 const 
  184       if (not stripDetEleHandle.
isValid()) {
 
  186     return StatusCode::FAILURE;
 
  188       stripElements = stripDetEleHandle.
cptr();
 
  199     std::unique_ptr< xAOD::SpacePointContainer > strip_xaod_container = std::make_unique< xAOD::SpacePointContainer >();
 
  200     std::unique_ptr< xAOD::SpacePointAuxContainer > strip_xaod_aux_container = std::make_unique< xAOD::SpacePointAuxContainer >();
 
  201     strip_xaod_container->setStore( strip_xaod_aux_container.get() );
 
  203     strip_xaod_container->
reserve(strip_container->size());
 
  204     strip_xaod_aux_container->
reserve(strip_container->size());
 
  207     for (const ::SpacePointCollection *spc : *strip_container) {
 
  216       const std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>& clusterList = sp->clusterList();
 
  219           if (theCluster1 == 
nullptr or
 
  220           theCluster2 == 
nullptr) {
 
  224       auto clusterId1 = clusterList.first->identify();
 
  225       auto clusterId2 = clusterList.second->identify();
 
  228     if ( element1 == 
nullptr ) {
 
  229       ATH_MSG_FATAL( 
"Invalid strip detector element for cluster (1) identifiers " << clusterId1 );
 
  230       return StatusCode::FAILURE;
 
  232     if ( element2 == 
nullptr ) {
 
  233       ATH_MSG_FATAL( 
"Invalid strip detector element for cluster (2) identifiers " << clusterId2 );
 
  234       return StatusCode::FAILURE;
 
  237     auto insertEntry = [&mapClusters, cluster_xaod_container](
const auto & clusterId)-> 
bool{
 
  238       const auto & [
p,inserted] = mapClusters.try_emplace(clusterId, cluster_xaod_container->
size());
 
  242       if (insertEntry(clusterId1)){
 
  244         cluster_xaod_container->
push_back(stripCl1);
 
  247       if (insertEntry(clusterId2)) {
 
  249         cluster_xaod_container->
push_back(stripCl2);
 
  255       strip_xaod_container->
back()->setMeasurements( {stripCl1, stripCl2} );
 
  260     linkAcc(*strip_xaod_container->
back()) = link;
 
  266     ATH_CHECK( strip_xaod_handle.
record( std::move(strip_xaod_container), std::move(strip_xaod_aux_container) ) );
 
  268     return StatusCode::SUCCESS;
 
  275                                   std::unordered_map<Identifier, std::size_t>& mapClusters)
 const 
  280       if (not stripDetEleHandle.
isValid()) {
 
  282         return StatusCode::FAILURE;
 
  284       stripElements = stripDetEleHandle.
cptr();
 
  290     const ::SpacePointOverlapCollection* strip_overlap_container = strip_overlap_handle.
cptr();
 
  293     std::unique_ptr< xAOD::SpacePointContainer > strip_overlap_xaod_container = std::make_unique< xAOD::SpacePointContainer >();
 
  294     std::unique_ptr< xAOD::SpacePointAuxContainer > strip_overlap_xaod_aux_container = std::make_unique< xAOD::SpacePointAuxContainer >();
 
  295     strip_overlap_xaod_container->setStore( strip_overlap_xaod_aux_container.get() );
 
  297     strip_overlap_xaod_container->
reserve(strip_overlap_container->size());
 
  298     strip_overlap_xaod_aux_container->
reserve(strip_overlap_container->size());
 
  311     const std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>& clusterList = sp->clusterList();
 
  314     if (theCluster1 == 
nullptr or
 
  315         theCluster2 == 
nullptr) {
 
  319     auto clusterId1 = clusterList.first->identify();
 
  320     auto clusterId2 = clusterList.second->identify();
 
  324     if ( element1 == 
nullptr ) {
 
  325       ATH_MSG_FATAL( 
"Invalid strip detector element for cluster (1) identifiers " << clusterId1 );
 
  326       return StatusCode::FAILURE;
 
  328     if ( element2 == 
nullptr ) {
 
  329       ATH_MSG_FATAL( 
"Invalid strip detector element for cluster (2) identifiers " << clusterId2 );
 
  330       return StatusCode::FAILURE;
 
  333   auto insertEntry = [&mapClusters, cluster_xaod_container](
const auto & clusterId)-> 
bool{
 
  334     const auto & [
p,inserted] = mapClusters.try_emplace(clusterId, cluster_xaod_container->
size());
 
  337     if (insertEntry(clusterId1)) {
 
  339       cluster_xaod_container->
push_back(stripCl1);
 
  342     if (insertEntry(clusterId2)) {
 
  344       cluster_xaod_container->
push_back(stripCl2);
 
  350     strip_overlap_xaod_container->
back()->setMeasurements( {stripCl1, stripCl2} );
 
  354       stripSpacePointLinkAcc( *strip_overlap_xaod_container->
back() ) = TrkLink;
 
  359     ATH_CHECK( strip_overlap_xaod_handle.
record( std::move(strip_overlap_xaod_container), std::move(strip_overlap_xaod_aux_container) ) );
 
  361     return StatusCode::SUCCESS;