CMS 3D CMS Logo

KFTrajectoryFitter.cc
Go to the documentation of this file.
11 
13 
15  if (aTraj.empty())
16  return Trajectory();
17 
18  const TM& firstTM = aTraj.firstMeasurement();
19  TSOS firstTsos = TrajectoryStateWithArbitraryError()(firstTM.updatedState());
20 
21  return fitOne(aTraj.seed(), aTraj.recHits(), firstTsos, type);
22 }
23 
25  throw cms::Exception("TrackFitters",
26  "KFTrajectoryFitter::fit(TrajectorySeed, <TransientTrackingRecHit>) not implemented");
27 
28  return Trajectory();
29 }
30 
32  const RecHitContainer& hits,
33  const TSOS& firstPredTsos,
34  fitType) const {
35  if (hits.empty())
36  return Trajectory();
37 
38  if UNLIKELY (aSeed.direction() == anyDirection)
39  throw cms::Exception("KFTrajectoryFitter", "TrajectorySeed::direction() requested but not set");
40 
41  std::unique_ptr<Propagator> p_cloned = SetPropagationDirection(*thePropagator, aSeed.direction());
42 
43 #ifdef EDM_ML_DEBUG
44  LogDebug("TrackFitters")
45  << " +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"
46  << " KFTrajectoryFitter::fit starting with " << hits.size() << " HITS";
47 
48  for (unsigned int j = 0; j < hits.size(); j++) {
49  if (hits[j]->det())
50  LogTrace("TrackFitters") << "hit #:" << j + 1 << " rawId=" << hits[j]->det()->geographicalId().rawId()
51  << " validity=" << hits[j]->isValid();
52  else
53  LogTrace("TrackFitters") << "hit #:" << j + 1 << " Hit with no Det information";
54  }
55  LogTrace("TrackFitters") << " INITIAL STATE " << firstPredTsos;
56 #endif
57 
58  Trajectory ret(aSeed, p_cloned->propagationDirection());
59  Trajectory& myTraj = ret;
60  myTraj.reserve(hits.size());
61 
62  TSOS predTsos(firstPredTsos);
63  TSOS currTsos;
64 
65  int hitcounter = 0;
66  for (const auto& ihit : hits) {
67  ++hitcounter;
68 
69  const TransientTrackingRecHit& hit = (*ihit);
70 
71  // if UNLIKELY(hit.det() == nullptr) continue;
72 
73  if UNLIKELY ((!hit.isValid()) && hit.surface() == nullptr) {
74  LogDebug("TrackFitters") << " Error: invalid hit with no GeomDet attached .... skipping";
75  continue;
76  }
77  // if (hit.det() && hit.geographicalId()<1000U) LogDebug("TrackFitters")<< "Problem 0 det id for " << typeid(hit).name() << ' ' << hit.det()->geographicalId() ;
78  // if (hit.isValid() && hit.geographicalId()<1000U) LogDebug("TrackFitters")<< "Problem 0 det id for " << typeid(hit).name() << ' ' << hit.det()->geographicalId();
79 
80  if (hitcounter != 1) //no propagation needed for the first hit
81  predTsos = p_cloned->propagate(currTsos, *(hit.surface()));
82 
83  if UNLIKELY (!predTsos.isValid()) {
84  LogDebug("TrackFitters") << "SOMETHING WRONG !"
85  << "\n"
86  << "KFTrajectoryFitter: predicted tsos not valid!\n"
87  << "current TSOS: " << currTsos << "\n";
88 
89  if (hit.surface())
90  LogTrace("TrackFitters") << "next Surface: " << hit.surface()->position() << "\n";
91 
92  if (myTraj.foundHits() >= minHits_) {
93  LogDebug("TrackFitters") << " breaking trajectory"
94  << "\n";
95  break;
96  } else {
97  LogDebug("TrackFitters") << " killing trajectory"
98  << "\n";
99  return Trajectory();
100  }
101  }
102 
103  if LIKELY (hit.isValid()) {
104  assert((hit.geographicalId() != 0U) | !hit.canImproveWithTrack());
105  assert(hit.surface() != nullptr);
106  //update
107  LogTrace("TrackFitters") << "THE HIT IS VALID: updating hit with predTsos";
108  assert((!hit.canImproveWithTrack()) | (nullptr != theHitCloner));
109  assert((!hit.canImproveWithTrack()) | (nullptr != dynamic_cast<BaseTrackerRecHit const*>((ihit).get())));
110  auto preciseHit = theHitCloner->makeShared(ihit, predTsos);
111  dump(*preciseHit, hitcounter, "TrackFitters");
112  assert(preciseHit->isValid());
113  assert((preciseHit->geographicalId() != 0U) | (!preciseHit->canImproveWithTrack()));
114  assert(preciseHit->surface() != nullptr);
115 
116  if UNLIKELY (!preciseHit->isValid()) {
117  LogTrace("TrackFitters") << "THE Precise HIT IS NOT VALID: using currTsos = predTsos"
118  << "\n";
119  currTsos = predTsos;
120  myTraj.push(TM(predTsos, ihit, 0, theGeometry->idToLayer((ihit)->geographicalId())));
121  } else {
122  LogTrace("TrackFitters") << "THE Precise HIT IS VALID: updating currTsos"
123  << "\n";
124  currTsos = updator()->update(predTsos, *preciseHit);
125  //check for valid hits with no det (refitter with constraints)
126  bool badState = (!currTsos.isValid()) ||
127  (hit.geographicalId().det() == DetId::Tracker &&
128  (std::abs(currTsos.localParameters().qbp()) > 100 ||
129  std::abs(currTsos.localParameters().position().y()) > 1000 ||
130  std::abs(currTsos.localParameters().position().x()) > 1000)) ||
131  edm::isNotFinite(currTsos.localParameters().qbp()) || !currTsos.localError().posDef();
132  if UNLIKELY (badState) {
133  if (!currTsos.isValid()) {
134  edm::LogError("FailedUpdate") << "updating with the hit failed. Not updating the trajectory with the hit";
135 
136  } else if (edm::isNotFinite(currTsos.localParameters().qbp())) {
137  edm::LogError("TrajectoryNaN") << "Trajectory has NaN";
138 
139  } else if (!currTsos.localError().posDef()) {
140  edm::LogError("TrajectoryNotPosDef") << "Trajectory covariance is not positive-definite";
141 
142  } else {
143  LogTrace("FailedUpdate") << "updated state is valid but pretty bad, skipping. currTsos " << currTsos
144  << "\n predTsos " << predTsos;
145  }
146  myTraj.push(TM(predTsos, ihit, 0, theGeometry->idToLayer((ihit)->geographicalId())));
147  //There is a no-fail policy here. So, it's time to give up
148  //Keep the traj with invalid TSOS so that it's clear what happened
149  if (myTraj.foundHits() >= minHits_) {
150  LogDebug("TrackFitters") << " breaking trajectory"
151  << "\n";
152  break;
153  } else {
154  LogDebug("TrackFitters") << " killing trajectory"
155  << "\n";
156  return Trajectory();
157  }
158  } else {
159  if (preciseHit->det()) {
160  myTraj.push(TM(predTsos,
161  currTsos,
162  preciseHit,
163  estimator()->estimate(predTsos, *preciseHit).second,
164  theGeometry->idToLayer(preciseHit->geographicalId())));
165  } else {
166  myTraj.push(TM(predTsos, currTsos, preciseHit, estimator()->estimate(predTsos, *preciseHit).second));
167  }
168  }
169  }
170  } else { // invalid hit
171  dump(hit, hitcounter, "TrackFitters");
172  //no update
173  LogDebug("TrackFitters") << "THE HIT IS NOT VALID: using currTsos"
174  << "\n";
175  currTsos = predTsos;
176  assert(((ihit)->det() == nullptr) || (ihit)->geographicalId() != 0U);
177  if ((ihit)->det())
178  myTraj.push(TM(predTsos, ihit, 0, theGeometry->idToLayer((ihit)->geographicalId())));
179  else
180  myTraj.push(TM(predTsos, ihit, 0));
181  }
182  LogTrace("TrackFitters") << "predTsos !"
183  << "\n"
184  << predTsos << " with local position " << predTsos.localPosition() << "currTsos !"
185  << "\n"
186  << currTsos << " with local position " << currTsos.localPosition();
187  }
188 
189  LogDebug("TrackFitters") << "Found 1 trajectory with " << myTraj.foundHits() << " valid hits\n";
190 
191  return ret;
192 }
runTheMatrix.ret
ret
prodAgent to be discontinued
Definition: runTheMatrix.py:367
Likely.h
anyDirection
Definition: PropagationDirection.h:4
MessageLogger.h
hfClusterShapes_cfi.hits
hits
Definition: hfClusterShapes_cfi.py:5
edm::isNotFinite
constexpr bool isNotFinite(T x)
Definition: isFinite.h:9
PV3DBase::x
T x() const
Definition: PV3DBase.h:59
LocalTrajectoryParameters::qbp
float qbp() const
Definition: LocalTrajectoryParameters.h:158
cms::cuda::assert
assert(be >=bs)
DetLayerGeometry::idToLayer
virtual const DetLayer * idToLayer(const DetId &detId) const
Definition: DetLayerGeometry.h:33
KFTrajectoryFitter::theGeometry
const DetLayerGeometry * theGeometry
Definition: KFTrajectoryFitter.h:104
edm::second
U second(std::pair< T, U > const &p)
Definition: ParameterSet.cc:222
TransientTrackingRecHit.h
SetPropagationDirection
std::unique_ptr< Propagator > SetPropagationDirection(Propagator const &iprop, PropagationDirection dir)
Definition: HelperPropagatorUtility.cc:5
TrajectoryMeasurement::updatedState
TrajectoryStateOnSurface const & updatedState() const
Definition: TrajectoryMeasurement.h:184
TrajectoryStateWithArbitraryError
Definition: TrajectoryStateWithArbitraryError.h:15
KFTrajectoryFitter::dummyGeometry
static const DetLayerGeometry dummyGeometry
Definition: KFTrajectoryFitter.h:99
UNLIKELY
#define UNLIKELY(x)
Definition: Likely.h:21
TrajectoryStateOnSurface
Definition: TrajectoryStateOnSurface.h:16
KFTrajectoryFitter::updator
const TrajectoryStateUpdator * updator() const
Definition: KFTrajectoryFitter.h:83
LocalTrajectoryParameters::position
LocalPoint position() const
Local x and y position coordinates.
Definition: LocalTrajectoryParameters.h:85
KFTrajectoryFitter::TM
TrajectoryMeasurement TM
Definition: KFTrajectoryFitter.h:26
TrajectoryStateWithArbitraryError.h
mitigatedMETSequence_cff.U
U
Definition: mitigatedMETSequence_cff.py:36
TrajectoryStateOnSurface::localParameters
const LocalTrajectoryParameters & localParameters() const
Definition: TrajectoryStateOnSurface.h:73
TrajectoryStateUpdator::update
virtual TrajectoryStateOnSurface update(const TrajectoryStateOnSurface &, const TrackingRecHit &) const =0
KFTrajectoryFitter::fitOne
Trajectory fitOne(const Trajectory &aTraj, fitType) const override
Definition: KFTrajectoryFitter.cc:14
TrajectoryStateOnSurface::localPosition
LocalPoint localPosition() const
Definition: TrajectoryStateOnSurface.h:74
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:223
TrajectorySeed::direction
PropagationDirection direction() const
Definition: TrajectorySeed.h:54
DetId::Tracker
Definition: DetId.h:25
type
type
Definition: SiPixelVCal_PayloadInspector.cc:37
gainCalibHelper::gainCalibPI::type
type
Definition: SiPixelGainCalibHelper.h:39
DetLayerGeometry
Definition: DetLayerGeometry.h:18
PV3DBase::y
T y() const
Definition: PV3DBase.h:60
FrontierConditions_GlobalTag_cff.dump
dump
Definition: FrontierConditions_GlobalTag_cff.py:12
TkCloner.h
TkCloner::makeShared
TrackingRecHit::ConstRecHitPointer makeShared(TrackingRecHit::ConstRecHitPointer const &hit, TrajectoryStateOnSurface const &tsos) const
Definition: TkCloner.h:24
DebugHelpers.h
KFTrajectoryFitter::thePropagator
const Propagator * thePropagator
Definition: KFTrajectoryFitter.h:100
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
get
#define get
KFTrajectoryFitter::minHits_
int minHits_
Definition: KFTrajectoryFitter.h:105
TrackingRecHit
Definition: TrackingRecHit.h:21
BaseTrackerRecHit.h
Trajectory::recHits
ConstRecHitContainer recHits() const
Definition: Trajectory.h:186
Trajectory::firstMeasurement
TrajectoryMeasurement const & firstMeasurement() const
Definition: Trajectory.h:166
isFinite.h
Trajectory
Definition: Trajectory.h:38
LIKELY
#define LIKELY(x)
Definition: Likely.h:20
Exception
Definition: hltDiff.cc:246
Trajectory::seed
TrajectorySeed const & seed() const
Access to the seed used to reconstruct the Trajectory.
Definition: Trajectory.h:263
TrajectorySeed
Definition: TrajectorySeed.h:18
KFTrajectoryFitter::estimator
const MeasurementEstimator * estimator() const
Definition: KFTrajectoryFitter.h:84
Exception.h
KFTrajectoryFitter.h
cms::Exception
Definition: Exception.h:70
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
LogTrace
#define LogTrace(id)
Definition: MessageLogger.h:224
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
TrajectoryStateOnSurface::localError
const LocalTrajectoryError & localError() const
Definition: TrajectoryStateOnSurface.h:77
TrajectoryMeasurement
Definition: TrajectoryMeasurement.h:25
TrajectoryFitter::RecHitContainer
Trajectory::RecHitContainer RecHitContainer
Definition: TrajectoryFitter.h:24
KFTrajectoryFitter::theHitCloner
TkCloner const * theHitCloner
Definition: KFTrajectoryFitter.h:103
TrajectoryStateOnSurface::isValid
bool isValid() const
Definition: TrajectoryStateOnSurface.h:54
hit
Definition: SiStripHitEffFromCalibTree.cc:88
LocalTrajectoryError::posDef
bool posDef() const
Definition: LocalTrajectoryError.h:35
Trajectory::empty
bool empty() const
True if trajectory has no measurements.
Definition: Trajectory.h:233
TrajectoryFitter::fitType
fitType
Definition: TrajectoryFitter.h:21