Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:29:02

0001 #ifndef __RecoVertex_AdaptiveVertexFinder_SVTimeHelpers_h__
0002 #define __RecoVertex_AdaptiveVertexFinder_SVTimeHelpers_h__
0003 
0004 #include "RecoVertex/VertexPrimitives/interface/TransientVertex.h"
0005 #include "TrackingTools/TransientTrack/interface/TransientTrack.h"
0006 
0007 #include "FWCore/Utilities/interface/isFinite.h"
0008 
0009 namespace svhelper {
0010 
0011   inline void updateVertexTime(TransientVertex& vtx) {
0012     const auto& trks = vtx.originalTracks();
0013     double meantime = 0., expv_x2 = 0., normw = 0., timecov = 0.;
0014     for (const auto& trk : trks) {
0015       if (edm::isFinite(trk.timeExt())) {
0016         const double time = trk.timeExt();
0017         const double inverr = 1.0 / trk.dtErrorExt();
0018         const double w = inverr * inverr;
0019         meantime += time * w;
0020         expv_x2 += time * time * w;
0021         normw += w;
0022       }
0023     }
0024     if (normw > 0.) {
0025       meantime = meantime / normw;
0026       expv_x2 = expv_x2 / normw;
0027       timecov = expv_x2 - meantime * meantime;
0028       auto err = vtx.positionError().matrix4D();
0029       err(3, 3) = timecov / (double)trks.size();
0030       vtx = TransientVertex(vtx.position(), meantime, err, vtx.originalTracks(), vtx.totalChiSquared());
0031     }
0032   }
0033 }  // namespace svhelper
0034 
0035 #endif