CMS 3D CMS Logo

Classes | Functions
GhostTrackVertexFinder.cc File Reference
#include <algorithm>
#include <iterator>
#include <vector>
#include <map>
#include <set>
#include <Math/SVector.h>
#include <Math/SMatrix.h>
#include <Math/MatrixFunctions.h>
#include "DataFormats/GeometryVector/interface/GlobalPoint.h"
#include "DataFormats/GeometryVector/interface/GlobalVector.h"
#include "DataFormats/GeometryCommonDetAlgo/interface/GlobalError.h"
#include "DataFormats/BeamSpot/interface/BeamSpot.h"
#include "TrackingTools/TrajectoryParametrization/interface/GlobalTrajectoryParameters.h"
#include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
#include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h"
#include "TrackingTools/GeomPropagators/interface/AnalyticalImpactPointExtrapolator.h"
#include "TrackingTools/TransientTrack/interface/TransientTrack.h"
#include "TrackingTools/TransientTrack/interface/TransientTrackFromFTSFactory.h"
#include "RecoVertex/VertexPrimitives/interface/TransientVertex.h"
#include "RecoVertex/VertexPrimitives/interface/VertexFitter.h"
#include "RecoVertex/VertexPrimitives/interface/VertexState.h"
#include "RecoVertex/VertexPrimitives/interface/CachingVertex.h"
#include "RecoVertex/VertexPrimitives/interface/LinearizedTrackState.h"
#include "RecoVertex/VertexPrimitives/interface/ConvertError.h"
#include "RecoVertex/VertexPrimitives/interface/ConvertToFromReco.h"
#include "RecoVertex/VertexTools/interface/LinearizedTrackStateFactory.h"
#include "RecoVertex/VertexTools/interface/VertexTrackFactory.h"
#include "RecoVertex/VertexTools/interface/VertexDistance3D.h"
#include "RecoVertex/VertexTools/interface/GeometricAnnealing.h"
#include "RecoVertex/KalmanVertexFit/interface/KalmanVertexFitter.h"
#include "RecoVertex/AdaptiveVertexFit/interface/AdaptiveVertexFitter.h"
#include "RecoVertex/GhostTrackFitter/interface/GhostTrack.h"
#include "RecoVertex/GhostTrackFitter/interface/GhostTrackState.h"
#include "RecoVertex/GhostTrackFitter/interface/GhostTrackFitter.h"
#include "RecoVertex/GhostTrackFitter/interface/GhostTrackPrediction.h"
#include "RecoVertex/GhostTrackFitter/interface/SequentialGhostTrackFitter.h"
#include "RecoVertex/GhostTrackFitter/interface/KalmanGhostTrackUpdater.h"
#include "RecoVertex/GhostTrackFitter/interface/GhostTrackVertexFinder.h"

Go to the source code of this file.

Classes

struct  reco::GhostTrackVertexFinder::FinderInfo
 

Functions

static bool covarianceUpdate (Matrix3S &cov, const Vector3 &residual, const Matrix3S &error, double &chi2, double theta, double phi)
 
static GhostTrackPrediction dummyPrediction (const Vertex &primaryVertex, const Track &ghostTrack)
 
static double fitChi2 (const CachingVertex< 5 > &vtx)
 
static void mergeTrackHelper (const std::vector< RefCountedVertexTrack > &tracks, std::vector< RefCountedVertexTrack > &newTracks, const VertexState &state, const VtxTrackIs &ghostTrackFinder, RefCountedVertexTrack &ghostTrack, const VertexTrackFactory< 5 > &factory)
 
static RefCountedVertexTrack relinearizeTrack (const RefCountedVertexTrack &track, const VertexState &state, const VertexTrackFactory< 5 > factory)
 
static std::vector< RefCountedVertexTrack > relinearizeTracks (const std::vector< RefCountedVertexTrack > &tracks, const VertexState &state)
 
static VertexState stateMean (const VertexState &v1, const VertexState &v2)
 
static double trackVertexCompat (const CachingVertex< 5 > &vtx, const RefCountedVertexTrack &vertexTrack)
 
static TransientTrack transientGhostTrack (const GhostTrackPrediction &pred, const MagneticField *field)
 
static CachingVertex< 5 > vertexAtState (const TransientTrack &ghostTrack, const GhostTrackPrediction &pred, const GhostTrackState &state)
 
static double vtxErrorLong (const GlobalError &error, const GlobalVector &dir)
 
static GlobalPoint vtxMean (const GlobalPoint &p1, const GlobalError &e1, const GlobalPoint &p2, const GlobalError &e2)
 

Function Documentation

static bool covarianceUpdate ( Matrix3S &  cov,
const Vector3 &  residual,
const Matrix3S &  error,
double &  chi2,
double  theta,
double  phi 
)
static

Definition at line 138 of file GhostTrackVertexFinder.cc.

References funct::cos(), and funct::sin().

Referenced by vertexAtState().

141 {
142  using namespace ROOT::Math;
143 
144  Matrix23 jacobian;
145  jacobian(0, 0) = std::cos(phi) * std::cos(theta);
146  jacobian(0, 1) = std::sin(phi) * std::cos(theta);
147  jacobian(0, 2) = -std::sin(theta);
148  jacobian(1, 0) = -std::sin(phi);
149  jacobian(1, 1) = std::cos(phi);
150 
151  Matrix2S measErr = Similarity(jacobian, error);
152  Matrix2S combErr = Similarity(jacobian, cov) + measErr;
153  if (!measErr.Invert() || !combErr.Invert())
154  return false;
155 
156  cov -= SimilarityT(jacobian * cov, combErr);
157  chi2 += Similarity(jacobian * residual, measErr);
158 
159  return true;
160 }
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
Geom::Theta< T > theta() const
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
static GhostTrackPrediction dummyPrediction ( const Vertex primaryVertex,
const Track ghostTrack 
)
static

Definition at line 626 of file GhostTrackVertexFinder.cc.

References RecoVertex::convertError(), RecoVertex::convertPos(), reco::Vertex::error(), reco::Vertex::position(), reco::TrackBase::px(), reco::TrackBase::py(), and reco::TrackBase::pz().

Referenced by reco::GhostTrackVertexFinder::vertices().

628 {
629  return GhostTrackPrediction(
630  RecoVertex::convertPos(primaryVertex.position()),
631  RecoVertex::convertError(primaryVertex.error()),
632  GlobalVector(ghostTrack.px(), ghostTrack.py(),
633  ghostTrack.pz()), 0.05);
634 }
reco::Vertex::Point convertPos(const GlobalPoint &p)
reco::Vertex::Error convertError(const GlobalError &ge)
Definition: ConvertError.h:8
double px() const
x coordinate of momentum vector
Definition: TrackBase.h:660
const Point & position() const
position
Definition: Vertex.h:109
double pz() const
z coordinate of momentum vector
Definition: TrackBase.h:672
Error error() const
return SMatrix
Definition: Vertex.h:139
double py() const
y coordinate of momentum vector
Definition: TrackBase.h:666
Global3DVector GlobalVector
Definition: GlobalVector.h:10
static double fitChi2 ( const CachingVertex< 5 > &  vtx)
static
static void mergeTrackHelper ( const std::vector< RefCountedVertexTrack > &  tracks,
std::vector< RefCountedVertexTrack > &  newTracks,
const VertexState state,
const VtxTrackIs &  ghostTrackFinder,
RefCountedVertexTrack &  ghostTrack,
const VertexTrackFactory< 5 > &  factory 
)
static

Definition at line 776 of file GhostTrackVertexFinder.cc.

References relinearizeTrack().

Referenced by reco::GhostTrackVertexFinder::mergeVertices().

782 {
783  for(std::vector<RefCountedVertexTrack>::const_iterator iter =
784  tracks.begin(); iter != tracks.end(); ++iter) {
785  bool gt = ghostTrackFinder(*iter);
786  if (gt && ghostTrack)
787  continue;
788 
789  RefCountedVertexTrack track =
790  relinearizeTrack(*iter, state, factory);
791 
792  if (gt)
793  ghostTrack = *iter;
794  else
795  newTracks.push_back(*iter);
796  }
797 }
static RefCountedVertexTrack relinearizeTrack(const RefCountedVertexTrack &track, const VertexState &state, const VertexTrackFactory< 5 > factory)
static RefCountedVertexTrack relinearizeTrack ( const RefCountedVertexTrack &  track,
const VertexState state,
const VertexTrackFactory< 5 >  factory 
)
static

Definition at line 210 of file GhostTrackVertexFinder.cc.

References VertexState::position(), and VertexTrackFactory< N >::vertexTrack().

Referenced by mergeTrackHelper(), reco::GhostTrackVertexFinder::reassignTracks(), and relinearizeTracks().

214 {
215  RefCountedLinearizedTrackState linTrack = track->linearizedTrack();
216  linTrack = linTrack->stateWithNewLinearizationPoint(state.position());
217  return factory.vertexTrack(linTrack, state);
218 }
RefCountedVertexTrack vertexTrack(const RefCountedLinearizedTrackState lt, const VertexState vs, float weight=1.0) const
GlobalPoint position() const
Definition: VertexState.h:69
static std::vector<RefCountedVertexTrack> relinearizeTracks ( const std::vector< RefCountedVertexTrack > &  tracks,
const VertexState state 
)
static

Definition at line 220 of file GhostTrackVertexFinder.cc.

References relinearizeTrack().

Referenced by reco::GhostTrackVertexFinder::reassignTracks().

223 {
224  VertexTrackFactory<5> vertexTrackFactory;
225 
226  std::vector<RefCountedVertexTrack> finalTracks;
227  finalTracks.reserve(tracks.size());
228 
229  for(std::vector<RefCountedVertexTrack>::const_iterator iter =
230  tracks.begin(); iter != tracks.end(); ++iter)
231  finalTracks.push_back(
232  relinearizeTrack(*iter, state, vertexTrackFactory));
233 
234  return finalTracks;
235 }
static RefCountedVertexTrack relinearizeTrack(const RefCountedVertexTrack &track, const VertexState &state, const VertexTrackFactory< 5 > factory)
static VertexState stateMean ( const VertexState v1,
const VertexState v2 
)
static

Definition at line 131 of file GhostTrackVertexFinder.cc.

References VertexState::error(), VertexState::position(), and vtxMean().

Referenced by reco::GhostTrackVertexFinder::mergeVertices().

132 {
133  return VertexState(vtxMean(v1.position(), v1.error(),
134  v2.position(), v2.error()),
135  v1.error() + v2.error());
136 }
GlobalPoint position() const
Definition: VertexState.h:69
static GlobalPoint vtxMean(const GlobalPoint &p1, const GlobalError &e1, const GlobalPoint &p2, const GlobalError &e2)
GlobalError error() const
Definition: VertexState.h:74
static double trackVertexCompat ( const CachingVertex< 5 > &  vtx,
const RefCountedVertexTrack &  vertexTrack 
)
static

Definition at line 249 of file GhostTrackVertexFinder.cc.

References conv, dir, relativeConstraints::error, CachingVertex< N >::error(), reco::TransientTrack::field(), reco::TransientTrack::impactPointState(), GlobalErrorBase< T, ErrorWeightType >::matrix(), point, CachingVertex< N >::position(), and HiIsolationCommonParameters_cff::track.

Referenced by reco::GhostTrackVertexFinder::reassignTracks().

251 {
252  using namespace ROOT::Math;
253 
254  TransientTrack track = vertexTrack->linearizedTrack()->track();
255  GlobalPoint point = vtx.position();
258  extrap.extrapolate(track.impactPointState(), point);
259 
260  if (!tsos.isValid())
261  return 1.0e6;
262 
263  GlobalPoint point1 = vtx.position();
264  GlobalPoint point2 = tsos.globalPosition();
265  Vector3 dir = conv(point2 - point1);
266  Matrix3S error = vtx.error().matrix() +
267  tsos.cartesianError().matrix().Sub<Matrix3S>(0, 0);
268  if (!error.Invert())
269  return 1.0e6;
270 
271  return ROOT::Math::Similarity(error, dir);
272 }
static HepMC::IO_HEPEVT conv
const AlgebraicSymMatrix33 matrix() const
const MagneticField * field() const
GlobalPoint position() const
TrajectoryStateOnSurface impactPointState() const
dbl *** dir
Definition: mlp_gen.cc:35
GlobalError error() const
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point
Definition: invegas.h:5
static TransientTrack transientGhostTrack ( const GhostTrackPrediction pred,
const MagneticField field 
)
static

Definition at line 109 of file GhostTrackVertexFinder.cc.

References TransientTrackFromFTSFactory::build(), and reco::GhostTrackPrediction::fts().

Referenced by reco::GhostTrackVertexFinder::refitGhostTrack(), and reco::GhostTrackVertexFinder::vertices().

111 { return TransientTrackFromFTSFactory().build(pred.fts(field)); }
FreeTrajectoryState fts(const MagneticField *fieldProvider) const
reco::TransientTrack build(const FreeTrajectoryState &fts) const
static CachingVertex<5> vertexAtState ( const TransientTrack ghostTrack,
const GhostTrackPrediction pred,
const GhostTrackState state 
)
static

Definition at line 162 of file GhostTrackVertexFinder.cc.

References reco::GhostTrackState::cartesianError(), vertices_cff::chi2, conv, covarianceUpdate(), relativeConstraints::error, reco::GhostTrackState::globalPosition(), reco::GhostTrackState::isValid(), reco::GhostTrackState::lambda(), LinearizedTrackStateFactory::linearizedTrackState(), GlobalErrorBase< T, ErrorWeightType >::matrix(), point, reco::GhostTrackPrediction::position(), reco::GhostTrackPrediction::positionError(), reco::GhostTrackState::track(), VertexTrackFactory< N >::vertexTrack(), and vtxMean().

Referenced by reco::GhostTrackVertexFinder::initialVertices(), reco::GhostTrackVertexFinder::reassignTracks(), and reco::GhostTrackVertexFinder::refitGhostTrack().

165 {
166  LinearizedTrackStateFactory linTrackFactory;
167  VertexTrackFactory<5> vertexTrackFactory;
168 
169  if (!state.isValid())
170  return CachingVertex<5>();
171 
172  GlobalPoint pca1 = pred.position(state.lambda());
173  GlobalError err1 = pred.positionError(state.lambda());
174 
175  GlobalPoint pca2 = state.globalPosition();
176  GlobalError err2 = state.cartesianError();
177 
178  GlobalPoint point = vtxMean(pca1, err1, pca2, err2);
179 
180  const TransientTrack& recTrack = state.track();
181 
182  RefCountedLinearizedTrackState linState[2] = {
183  linTrackFactory.linearizedTrackState(point, ghostTrack),
184  linTrackFactory.linearizedTrackState(point, recTrack)
185  };
186  if ( !linState[0]->isValid() || !linState[1]->isValid() )
187  return CachingVertex<5>();
188 
189  Matrix3S cov = SMatrixIdentity();
190  cov *= 10000;
191  double chi2 = 0.;
192  if (!covarianceUpdate(cov, conv(pca1 - point), err1.matrix(), chi2,
193  linState[0]->predictedStateParameters()[1],
194  linState[0]->predictedStateParameters()[2]) ||
195  !covarianceUpdate(cov, conv(pca2 - point), err2.matrix(), chi2,
196  linState[1]->predictedStateParameters()[1],
197  linState[1]->predictedStateParameters()[2]))
198  return CachingVertex<5>();
199 
200  GlobalError error(cov);
201  VertexState vtxState(point, error);
202 
203  std::vector<RefCountedVertexTrack> linTracks(2);
204  linTracks[0] = vertexTrackFactory.vertexTrack(linState[0], vtxState);
205  linTracks[1] = vertexTrackFactory.vertexTrack(linState[1], vtxState);
206 
207  return CachingVertex<5>(point, error, linTracks, chi2);
208 }
static bool covarianceUpdate(Matrix3S &cov, const Vector3 &residual, const Matrix3S &error, double &chi2, double theta, double phi)
const TransientTrack & track() const
static HepMC::IO_HEPEVT conv
RefCountedVertexTrack vertexTrack(const RefCountedLinearizedTrackState lt, const VertexState vs, float weight=1.0) const
const AlgebraicSymMatrix33 matrix() const
GlobalError cartesianError() const
static GlobalPoint vtxMean(const GlobalPoint &p1, const GlobalError &e1, const GlobalPoint &p2, const GlobalError &e2)
double lambda() const
RefCountedLinearizedTrackState linearizedTrackState(const GlobalPoint &linP, const reco::TransientTrack &track) const override
GlobalPoint position(double lambda=0.) const
GlobalPoint globalPosition() const
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point
Definition: invegas.h:5
GlobalError positionError(double lambda=0.) const
static double vtxErrorLong ( const GlobalError error,
const GlobalVector dir 
)
static

Definition at line 113 of file GhostTrackVertexFinder.cc.

References conv, and GlobalErrorBase< T, ErrorWeightType >::matrix().

Referenced by reco::GhostTrackVertexFinder::vertexFitter(), and vtxMean().

114 {
115  return ROOT::Math::Similarity(conv(dir), error.matrix());
116 }
static HepMC::IO_HEPEVT conv
const AlgebraicSymMatrix33 matrix() const
static GlobalPoint vtxMean ( const GlobalPoint p1,
const GlobalError e1,
const GlobalPoint p2,
const GlobalError e2 
)
static

Definition at line 118 of file GhostTrackVertexFinder.cc.

References diffTreeTool::diff, p1, and vtxErrorLong().

Referenced by GlobalTrackingRegion::checkRZ(), RectangularEtaPhiTrackingRegion::checkRZOld(), stateMean(), and vertexAtState().

120 {
121  GlobalVector diff = p2 - p1;
122 
123  double err1 = vtxErrorLong(e1, diff);
124  double err2 = vtxErrorLong(e2, diff);
125 
126  double weight = err1 / (err1 + err2);
127 
128  return p1 + weight * diff;
129 }
Definition: weight.py:1
double p1[4]
Definition: TauolaWrapper.h:89
static double vtxErrorLong(const GlobalError &error, const GlobalVector &dir)