99 {
101 if(importedPVerticesCollection->
empty())
return Analysis::CleanUpVertex(
nullptr,
false);
102 double dc = 1e10;
103 std::vector<const xAOD::Vertex*> tocleanup;
104 if(pvRefitter) tocleanup.reserve(importedPVerticesCollection->
size());
105 bool vertexrefitted = false;
106 for (
const xAOD::Vertex* PV : *importedPVerticesCollection) {
109 if(refPV) tocleanup.push_back(refPV);
112 TVector3 posV(helperpos.x(), helperpos.y(), helperpos.z());
113 TVector3 nV = bHelper.
totalP().Unit();
114 TVector3 dposV = posPV-posV;
115 double dposVnV = dposV*nV;
116 double d = std::sqrt(std::abs(dposV.Mag2()-dposVnV*dposVnV));
117 if (d<dc) {
119 vtx_closest = vtx;
120 vertexrefitted = (vtx_closest == refPV);
121 }
122 }
123 for(auto ptr : tocleanup){
124 if(ptr != vtx_closest)
delete ptr;
125 }
126 return Analysis::CleanUpVertex(vtx_closest, vertexrefitted);
127 }
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.