File indexing completed on 2024-04-06 12:28:06
0001 #include "DataFormats/TrackReco/interface/Track.h"
0002 #include "DataFormats/VertexReco/interface/Vertex.h"
0003 #include "DataFormats/VertexReco/interface/VertexFwd.h"
0004 #include <limits>
0005
0006 using Point = math::XYZPoint;
0007
0008 inline Point getBestVertex(reco::Track const& trk,
0009 reco::VertexCollection const& vertices,
0010 const size_t minNtracks = 2) {
0011 Point p_dz(0, 0, -99999);
0012 float dzmin = std::numeric_limits<float>::max();
0013 for (auto const& vertex : vertices) {
0014 size_t tracks = vertex.tracksSize();
0015 if (tracks < minNtracks) {
0016 continue;
0017 }
0018 float dz = std::abs(trk.dz(vertex.position()));
0019 if (dz < dzmin) {
0020 p_dz = vertex.position();
0021 dzmin = dz;
0022 }
0023 }
0024
0025 return p_dz;
0026 }
0027
0028 inline Point getBestVertex_withError(reco::Track const& trk,
0029 reco::VertexCollection const& vertices,
0030 Point& error,
0031 const size_t minNtracks = 2) {
0032 Point p_dz(0, 0, -99999);
0033 float dzmin = std::numeric_limits<float>::max();
0034 for (auto const& vertex : vertices) {
0035 size_t tracks = vertex.tracksSize();
0036 if (tracks < minNtracks) {
0037 continue;
0038 }
0039 float dz = std::abs(trk.dz(vertex.position()));
0040 if (dz < dzmin) {
0041 p_dz = vertex.position();
0042 error.SetXYZ(vertex.xError(), vertex.yError(), vertex.zError());
0043 dzmin = dz;
0044 }
0045 }
0046
0047 return p_dz;
0048 }