CMS 3D CMS Logo

List of all members | Static Public Member Functions
SeedMatcher Class Reference

#include <SeedMatcher.h>

Static Public Member Functions

static std::vector< int > matchRecHitCombinations (const TrajectorySeed &seed, const FastTrackerRecHitCombinationCollection &recHitCombinationCollection, const std::vector< SimTrack > &simTrackCollection, double maxMatchEstimator, const Propagator &propagator, const MagneticField &magneticField, const TrackerGeometry &trackerGeometry)
 
static double matchSimTrack (const TrajectoryStateOnSurface &seedState, const SimTrack &simTrack, const Propagator &propagator, const MagneticField &magneticField)
 

Detailed Description

Definition at line 14 of file SeedMatcher.h.

Member Function Documentation

◆ matchRecHitCombinations()

std::vector< int32_t > SeedMatcher::matchRecHitCombinations ( const TrajectorySeed seed,
const FastTrackerRecHitCombinationCollection recHitCombinationCollection,
const std::vector< SimTrack > &  simTrackCollection,
double  maxMatchEstimator,
const Propagator propagator,
const MagneticField magneticField,
const TrackerGeometry trackerGeometry 
)
static

Definition at line 14 of file SeedMatcher.cc.

21  {
22  // container for result
23  std::vector<int32_t> result;
24 
25  // seed state
26  PTrajectoryStateOnDet ptod = seed.startingState();
27  DetId seedState_detId(ptod.detId());
28  const GeomDet* seedState_det = trackerGeometry.idToDet(seedState_detId);
29  const Surface* seedState_surface = &seedState_det->surface();
31 
32  // find matches
33  int nSimTracks = simTrackCollection.size();
34  for (unsigned recHitCombinationIndex = 0; recHitCombinationIndex < recHitCombinationCollection.size();
35  recHitCombinationIndex++) {
36  const auto& recHitCombination = recHitCombinationCollection[recHitCombinationIndex];
37  int simTrackIndex = recHitCombination.back()->simTrackId(0);
38  if (simTrackIndex < 0 || simTrackIndex >= nSimTracks) {
39  throw cms::Exception("SeedMatcher") << "SimTrack index out of range: " << simTrackIndex << std::endl;
40  }
41  const auto& simTrack = simTrackCollection[recHitCombination.back()->simTrackId(0)];
42  double matchEstimator = matchSimTrack(seedState, simTrack, propagator, magneticField);
43  if (matchEstimator < maxMatchEstimator) {
44  result.push_back(recHitCombinationIndex);
45  }
46  }
47  return result;
48 }

References PTrajectoryStateOnDet::detId(), Exception, TrackerGeometry::idToDet(), HLT_2018_cff::magneticField, matchSimTrack(), TrackCandidateProducer_cfi::propagator, mps_fire::result, SurveyInfoScenario_cff::seed, muonSimHitMatcherPSet::simTrack, caloTruthProducer_cfi::simTrackCollection, and trajectoryStateTransform::transientState().

Referenced by TrackCandidateProducer::produce().

◆ matchSimTrack()

double SeedMatcher::matchSimTrack ( const TrajectoryStateOnSurface seedState,
const SimTrack simTrack,
const Propagator propagator,
const MagneticField magneticField 
)
static

Definition at line 50 of file SeedMatcher.cc.

53  {
54  // simtrack and simvertex at tracker surface
55  GlobalPoint simTrack_atTrackerSurface_position(simTrack.trackerSurfacePosition().x(),
56  simTrack.trackerSurfacePosition().y(),
57  simTrack.trackerSurfacePosition().z());
58  GlobalVector simTrack_atTrackerSurface_momentum(simTrack.trackerSurfaceMomentum().x(),
59  simTrack.trackerSurfaceMomentum().y(),
60  simTrack.trackerSurfaceMomentum().z());
61 
62  // no match if seedstate and simtrack in oposite direction
63  if (simTrack_atTrackerSurface_position.basicVector().dot(simTrack_atTrackerSurface_momentum.basicVector()) *
64  seedState.globalPosition().basicVector().dot(seedState.globalMomentum().basicVector()) <
65  0.) {
66  return 9999.;
67  }
68 
69  // find simtrack state on surface of seed state
70  GlobalTrajectoryParameters simTrack_atTrackerSurface_parameters(
71  simTrack_atTrackerSurface_position, simTrack_atTrackerSurface_momentum, simTrack.charge(), &magneticField);
72  FreeTrajectoryState simtrack_atTrackerSurface_state(simTrack_atTrackerSurface_parameters);
73  TrajectoryStateOnSurface simtrack_atSeedStateSurface_state =
74  propagator.propagate(simtrack_atTrackerSurface_state, seedState.surface());
75 
76  // simtrack does not propagate to surface of seed state
77  if (!simtrack_atSeedStateSurface_state.isValid()) {
78  return 9999.;
79  }
80 
81  // simtrack and seed state have opposite direction
82  if (simtrack_atSeedStateSurface_state.globalPosition().basicVector().dot(
83  simtrack_atSeedStateSurface_state.globalMomentum().basicVector()) *
84  seedState.globalPosition().basicVector().dot(seedState.globalMomentum().basicVector()) <
85  0.) {
86  return 9999.;
87  }
88 
89  AlgebraicVector5 difference(seedState.localParameters().vector() -
90  simtrack_atSeedStateSurface_state.localParameters().vector());
92  if (!error.Invert()) {
93  edm::LogWarning("FastSim SeedToSimTrackMatcher") << "Cannot invert seed state error matrix => no match...";
94  return 9999.;
95  }
96 
97  return ROOT::Math::Similarity(difference, error);
98 }

References PV3DBase< T, PVType, FrameType >::basicVector(), Basic3DVector< T >::dot(), relativeConstraints::error, TrajectoryStateOnSurface::globalMomentum(), TrajectoryStateOnSurface::globalPosition(), TrajectoryStateOnSurface::isValid(), TrajectoryStateOnSurface::localError(), TrajectoryStateOnSurface::localParameters(), HLT_2018_cff::magneticField, LocalTrajectoryError::matrix(), TrackCandidateProducer_cfi::propagator, muonSimHitMatcherPSet::simTrack, TrajectoryStateOnSurface::surface(), and LocalTrajectoryParameters::vector().

Referenced by matchRecHitCombinations().

Vector3DBase
Definition: Vector3DBase.h:8
TrackerGeometry::idToDet
const TrackerGeomDet * idToDet(DetId) const override
Definition: TrackerGeometry.cc:193
GeomDet
Definition: GeomDet.h:27
HLT_2018_cff.magneticField
magneticField
Definition: HLT_2018_cff.py:348
TrajectoryStateOnSurface::globalPosition
GlobalPoint globalPosition() const
Definition: TrajectoryStateOnSurface.h:65
Surface
Definition: Surface.h:36
LocalTrajectoryError::matrix
const AlgebraicSymMatrix55 & matrix() const
Definition: LocalTrajectoryError.h:60
relativeConstraints.error
error
Definition: relativeConstraints.py:53
caloTruthProducer_cfi.simTrackCollection
simTrackCollection
Definition: caloTruthProducer_cfi.py:28
DetId
Definition: DetId.h:17
TrajectoryStateOnSurface
Definition: TrajectoryStateOnSurface.h:16
PTrajectoryStateOnDet::detId
unsigned int detId() const
Definition: PTrajectoryStateOnDet.h:65
TrackCandidateProducer_cfi.propagator
propagator
Definition: TrackCandidateProducer_cfi.py:17
SeedMatcher::matchSimTrack
static double matchSimTrack(const TrajectoryStateOnSurface &seedState, const SimTrack &simTrack, const Propagator &propagator, const MagneticField &magneticField)
Definition: SeedMatcher.cc:50
Basic3DVector::dot
T dot(const Basic3DVector &rh) const
Scalar product, or "dot" product, with a vector of same type.
Definition: extBasic3DVector.h:189
GlobalTrajectoryParameters
Definition: GlobalTrajectoryParameters.h:15
LocalTrajectoryParameters::vector
AlgebraicVector5 vector() const
Definition: LocalTrajectoryParameters.h:120
Point3DBase< float, GlobalTag >
edm::LogWarning
Definition: MessageLogger.h:141
TrajectoryStateOnSurface::localParameters
const LocalTrajectoryParameters & localParameters() const
Definition: TrajectoryStateOnSurface.h:73
muonSimHitMatcherPSet.simTrack
simTrack
Definition: muonSimHitMatcherPSet.py:4
trajectoryStateTransform::transientState
TrajectoryStateOnSurface transientState(const PTrajectoryStateOnDet &ts, const Surface *surface, const MagneticField *field)
Definition: TrajectoryStateTransform.cc:35
AlgebraicVector5
ROOT::Math::SVector< double, 5 > AlgebraicVector5
Definition: AlgebraicROOTObjects.h:14
PV3DBase::basicVector
const BasicVectorType & basicVector() const
Definition: PV3DBase.h:53
TrajectoryStateOnSurface::globalMomentum
GlobalVector globalMomentum() const
Definition: TrajectoryStateOnSurface.h:66
FreeTrajectoryState
Definition: FreeTrajectoryState.h:27
Exception
Definition: hltDiff.cc:246
TrajectoryStateOnSurface::surface
const SurfaceType & surface() const
Definition: TrajectoryStateOnSurface.h:78
mps_fire.result
result
Definition: mps_fire.py:303
PTrajectoryStateOnDet
Definition: PTrajectoryStateOnDet.h:10
TrajectoryStateOnSurface::localError
const LocalTrajectoryError & localError() const
Definition: TrajectoryStateOnSurface.h:77
AlgebraicSymMatrix55
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
Definition: AlgebraicROOTObjects.h:23
TrajectoryStateOnSurface::isValid
bool isValid() const
Definition: TrajectoryStateOnSurface.h:54
SurveyInfoScenario_cff.seed
seed
Definition: SurveyInfoScenario_cff.py:295