76 const EventContext& ctx = Gaudi::Hive::currentContext();
78 std::vector<bool> vtxMask(vertexContainer->size(),
true);
83 std::vector<SG::ReadDecorHandle<xAOD::VertexContainer, Char_t>> handles;
86 handles.emplace_back(key, ctx);
87 if(!handles.back().isPresent())
return StatusCode::FAILURE;
89 for(
auto vtxItr = vertexContainer->cbegin(); vtxItr!=vertexContainer->cend(); ++vtxItr, ++k) {
95 for(
auto &flagAcc : handles) {
96 if(flagAcc(*vtx) != 0) {
105 if(vtxMask[k] ==
false)
continue;
107 if(!
passed)vtxMask[k]=
false;
114 std::vector<const xAOD::TrackParticle*> presentVertex, compareVertex;
117 presentVertex.clear();
121 sort( presentVertex.begin(), presentVertex.end() );
125 for(
auto vtxLoopItr = vtxItr+1; vtxLoopItr!=vertexContainer->cend(); vtxLoopItr++, loop_k++){
135 compareVertex.clear();
140 std::sort( compareVertex.begin(), compareVertex.end());
142 vtxMask[loop_k] =
false;
145 ATH_MSG_DEBUG(std::setw(14)<<compareVertex[0]<<std::setw(14) << compareVertex[1]<<std::setw(14)<<compareVertex[2]);
146 ATH_MSG_DEBUG(std::setw(14)<<presentVertex[0]<<std::setw(14) << presentVertex[1]<<std::setw(14)<<presentVertex[2]);
149 if( compareVertex[j] != presentVertex[j] ){vtxMask[loop_k] =
true;
break;}
151 ATH_MSG_DEBUG(
"Verdict:"<<(vtxMask[loop_k]?
"keep":
"erase") );
160 vertexContainer.
keep(vtxMask);
162 m_nVtxTot.fetch_add( vtxTot, std::memory_order_relaxed);
163 m_nVtxPass.fetch_add( nVtxPass, std::memory_order_relaxed);
167 return StatusCode::SUCCESS;