96 {
98 if(importedPVerticesCollection->
empty())
return Analysis::CleanUpVertex(
nullptr,
false);
99 double dc = 1e10;
100 std::vector<const xAOD::Vertex*> tocleanup;
101 if(pvRefitter) tocleanup.reserve(importedPVerticesCollection->
size());
102 bool vertexrefitted = false;
103 for (
const xAOD::Vertex* PV : *importedPVerticesCollection) {
106 if(refPV) tocleanup.push_back(refPV);
109 TVector3 posV(helperpos.x(), helperpos.y(), helperpos.z());
110 TVector3 nV = bHelper.
totalP().Unit();
111 TVector3 dposV = posPV-posV;
112 double dposVnV = dposV*nV;
113 double d = std::sqrt(std::abs(dposV.Mag2()-dposVnV*dposVnV));
114 if (d<dc) {
116 vtx_closest = vtx;
117 vertexrefitted = (vtx_closest == refPV);
118 }
119 }
120 for(auto ptr : tocleanup){
121 if(ptr != vtx_closest)
delete ptr;
122 }
123 return Analysis::CleanUpVertex(vtx_closest, vertexrefitted);
124 }
xAOD::Vertex * refitVertex(const xAOD::Vertex *vertex, const xAOD::Vertex *excludeVertex, bool ReturnCopy=true, int *exitcode=nullptr) const
size_type size() const noexcept
Returns the number of elements in the collection.
bool empty() const noexcept
Returns true if the collection is empty.
const xAOD::Vertex * vtx() const
Getter method for the cached xAOD::Vertex.
TVector3 totalP()
: Returns total 3-momentum calculated from the refitted tracks
const Amg::Vector3D & position() const
Returns the 3-pos.
Vertex_v1 Vertex
Define the latest version of the vertex class.