Back to home page

Project CMSSW displayed by LXR

 
 

    


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 }