CMS 3D CMS Logo

TrajectoryStateTransform.cc
Go to the documentation of this file.
9 
10 namespace trajectoryStateTransform {
11 
12  using namespace SurfaceSideDefinition;
13 
15  int surfaceSide = static_cast<int>(ts.surfaceSide());
16  auto pt = ts.globalMomentum().perp();
17 
18  if (ts.hasError()) {
19  AlgebraicSymMatrix55 const& m = ts.localError().matrix();
20 
21  int dim = 5;
22  float localErrors[15];
23 
24  int k = 0;
25  for (int i = 0; i < dim; i++) {
26  for (int j = 0; j <= i; j++) {
27  localErrors[k++] = m(i, j);
28  }
29  }
30  return PTrajectoryStateOnDet(ts.localParameters(), pt, localErrors, detid, surfaceSide);
31  }
32  return PTrajectoryStateOnDet(ts.localParameters(), pt, detid, surfaceSide);
33  }
34 
36  const Surface* surface,
37  const MagneticField* field) {
39  bool errInv = true;
40  if (ts.hasError()) {
41  errInv = false;
42  int dim = 5;
43  int k = 0;
44  for (int i = 0; i < dim; i++) {
45  for (int j = 0; j <= i; j++) {
46  m(i, j) = ts.error(k++); // NOTE: here we do a cast float => double.
47  }
48  }
49  }
50 
52  errInv ? LocalTrajectoryError(InvalidError()) : LocalTrajectoryError(m),
53  *surface,
54  field,
55  static_cast<SurfaceSide>(ts.surfaceSide()));
56  }
57 
58  FreeTrajectoryState initialFreeState(const reco::Track& tk, const MagneticField* field, bool withErr) {
60  GlobalPoint gpos(pos);
62  GlobalVector gmom(mom);
63  GlobalTrajectoryParameters par(gpos, gmom, tk.charge(), field);
64  if (!withErr)
65  return FreeTrajectoryState(par);
67  return FreeTrajectoryState(par, err);
68  }
69 
70  FreeTrajectoryState innerFreeState(const reco::Track& tk, const MagneticField* field, bool withErr) {
72  GlobalPoint gpos(pos);
74  GlobalVector gmom(mom);
75  GlobalTrajectoryParameters par(gpos, gmom, tk.charge(), field);
76  if (!withErr)
77  return FreeTrajectoryState(par);
78  CurvilinearTrajectoryError err(tk.extra()->innerStateCovariance());
79  return FreeTrajectoryState(par, err);
80  }
81 
82  FreeTrajectoryState outerFreeState(const reco::Track& tk, const MagneticField* field, bool withErr) {
84  GlobalPoint gpos(pos);
86  GlobalVector gmom(mom);
87  GlobalTrajectoryParameters par(gpos, gmom, tk.charge(), field);
88  if (!withErr)
89  return FreeTrajectoryState(par);
90  CurvilinearTrajectoryError err(tk.extra()->outerStateCovariance());
91  return FreeTrajectoryState(par, err);
92  }
93 
95  const TrackingGeometry& geom,
96  const MagneticField* field,
97  bool withErr) {
98  const Surface& surface = geom.idToDet(DetId(tk.extra()->innerDetId()))->surface();
99  return TrajectoryStateOnSurface(innerFreeState(tk, field, withErr), surface);
100  }
101 
103  const TrackingGeometry& geom,
104  const MagneticField* field,
105  bool withErr) {
106  const Surface& surface = geom.idToDet(DetId(tk.extra()->outerDetId()))->surface();
107  return TrajectoryStateOnSurface(outerFreeState(tk, field, withErr), surface);
108  }
109 
110 } // namespace trajectoryStateTransform
T perp() const
Definition: PV3DBase.h:69
const TrackExtraRef & extra() const
reference to "extra" object
Definition: Track.h:139
const LocalTrajectoryParameters & localParameters() const
TrajectoryStateOnSurface outerStateOnSurface(const reco::Track &tk, const TrackingGeometry &geom, const MagneticField *field, bool withErr=true)
PTrajectoryStateOnDet persistentState(const TrajectoryStateOnSurface &ts, unsigned int detid)
virtual const GeomDet * idToDet(DetId) const =0
const Vector & momentum() const
track momentum vector
Definition: TrackBase.h:629
const math::XYZPoint & outerPosition() const
position of the outermost hit
Definition: Track.h:62
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
const math::XYZPoint & innerPosition() const
position of the innermost hit
Definition: Track.h:56
const Point & vertex() const
reference point on the track. This method is DEPRECATED, please use referencePoint() instead ...
Definition: TrackBase.h:641
CovarianceMatrix covariance() const
return track covariance matrix
Definition: TrackBase.h:677
SurfaceSide surfaceSide() const
Position relative to material, defined relative to momentum vector.
const AlgebraicSymMatrix55 & matrix() const
const LocalTrajectoryError & localError() const
Definition: DetId.h:17
const math::XYZVector & outerMomentum() const
momentum vector at the outermost hit position
Definition: Track.h:65
TrajectoryStateOnSurface transientState(const PTrajectoryStateOnDet &ts, const Surface *surface, const MagneticField *field)
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
GlobalVector globalMomentum() const
const math::XYZVector & innerMomentum() const
momentum vector at the innermost hit position
Definition: Track.h:59
int charge() const
track electric charge
Definition: TrackBase.h:575
FreeTrajectoryState innerFreeState(const reco::Track &tk, const MagneticField *field, bool withErr=true)
FreeTrajectoryState outerFreeState(const reco::Track &tk, const MagneticField *field, bool withErr=true)
FreeTrajectoryState initialFreeState(const reco::Track &tk, const MagneticField *field, bool withErr=true)
const LocalTrajectoryParameters & parameters() const
TrajectoryStateOnSurface innerStateOnSurface(const reco::Track &tk, const TrackingGeometry &geom, const MagneticField *field, bool withErr=true)