74{
75
76 const EventContext& ctx = Gaudi::Hive::currentContext();
78 std::vector<bool> vtxMask(vertexContainer->size(), true);
79 int vtxTot = 0;
80 int nVtxPass = 0;
81
83 std::vector<SG::ReadDecorHandle<xAOD::VertexContainer, Char_t>> handles;
86 handles.emplace_back(key, ctx);
87 if(!handles.back().isPresent()) return StatusCode::FAILURE;
88 }
89 for(auto vtxItr = vertexContainer->cbegin(); vtxItr!=vertexContainer->cend(); ++vtxItr, ++k) {
91
94 else{
95 for(auto &flagAcc : handles) {
96 if(flagAcc(*vtx) != 0) {
98 vtxTot++;
99 break;
100 }
101 }
102 }
103
104
105 if(vtxMask[k] == false)continue;
106
108
110
111 nVtxPass++;
112
113
114 std::vector<const xAOD::TrackParticle*> presentVertex, compareVertex;
115
116
117 presentVertex.clear();
120 }
121 sort( presentVertex.begin(), presentVertex.end() );
122
123
125 for(auto vtxLoopItr = vtxItr+1; vtxLoopItr!=vertexContainer->cend(); vtxLoopItr++, loop_k++){
126
128
129
131
132
133 if(vtxMask[loop_k]){
134
135 compareVertex.clear();
138 }
139
140 std::sort( compareVertex.begin(), compareVertex.end());
141
142 vtxMask[loop_k] = false;
143
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]);
147
149 if( compareVertex[j] != presentVertex[j] ){vtxMask[loop_k] = true; break;}
150 }
151 ATH_MSG_DEBUG(
"Verdict:"<<(vtxMask[loop_k]?
"keep":
"erase") );
152 }
153
154 }
155
156 }
157 }
158
159
160 vertexContainer.keep(vtxMask);
161
162 m_nVtxTot.fetch_add( vtxTot, std::memory_order_relaxed);
163 m_nVtxPass.fetch_add( nVtxPass, std::memory_order_relaxed);
164
165
166
167 return StatusCode::SUCCESS;
168}
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
size_t nTrackParticles() const
Get the number of tracks associated with this vertex.
const TrackParticle * trackParticle(size_t i) const
Get the pointer to a given track that was used in vertex reco.
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
Vertex_v1 Vertex
Define the latest version of the vertex class.