CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
StraightLinePropagator.cc
Go to the documentation of this file.
2 
7 
8 std::pair<TrajectoryStateOnSurface,double>
10  const Plane& plane) const
11 {
12  // propagate parameters
13  LocalPoint x;
14  LocalVector p;
15  double s = 0;
16  bool parametersOK = propagateParametersOnPlane(fts, plane, x, p, s);
17  if(!parametersOK) return std::make_pair(TrajectoryStateOnSurface(), 0.);
18 
19  // compute propagated state
20  if (fts.hasError()) {
21  return std::make_pair( propagatedState(fts, plane, jacobian(s), x, p), s);
22  } else {
23  // return state without errors
24  return std::make_pair(TSOS(LocalTrajectoryParameters(x, p, fts.charge()),
25  plane, theField), s);
26  }
27 }
28 
29 std::pair<TrajectoryStateOnSurface,double>
31  const Cylinder& cylinder) const
32 {
33  // propagate parameters
34  GlobalPoint x;
36  double s = 0;
37  bool parametersOK = propagateParametersOnCylinder(fts, cylinder, x, p, s);
38  if(!parametersOK) return std::make_pair(TrajectoryStateOnSurface(), 0.);
39 
40  // compute propagated state
41  if (fts.hasError()) {
42  return std::make_pair( propagatedState(fts, cylinder, jacobian(s), x, p), s);
43  } else {
44  // return state without errors
45  return std::make_pair(TSOS(GlobalTrajectoryParameters(x, p, fts.charge(),theField),
46  cylinder), s);
47  }
48 }
49 
52  const Surface& surface,
53  const AlgebraicMatrix& jacobian,
54  const LocalPoint& x,
55  const LocalVector& p) const {
56  return propagatedState(fts,surface,asSMatrix<5,5>(jacobian),x,p);
57 }
58 
61  const Surface& surface,
62  const AlgebraicMatrix55& jacobian,
63  const LocalPoint& x,
64  const LocalVector& p) const {
65  if(fts.hasError()) {
66  // propagate error
67  TSOS tmp( fts, surface);
68  const AlgebraicSymMatrix55 & eLocal =tmp.localError().matrix();
69  AlgebraicSymMatrix55 lte = ROOT::Math::Similarity(jacobian,eLocal);
70  LocalTrajectoryError eloc(lte);
71  LocalTrajectoryParameters ltp(x, p, fts.charge());
72  return TSOS(ltp, eloc, surface, theField);
73  } else {
74  // return state without errors
75  return TSOS(LocalTrajectoryParameters(x, p, fts.charge()), surface, theField);
76  }
77 }
78 
81  const Surface& surface,
82  const AlgebraicMatrix& jacobian,
83  const GlobalPoint& x,
84  const GlobalVector& p) const {
85  return propagatedState(fts,surface,asSMatrix<5,5>(jacobian),x,p);
86 }
87 
90  const Surface& surface,
91  const AlgebraicMatrix55& jacobian,
92  const GlobalPoint& x,
93  const GlobalVector& p) const {
94 
95  if(fts.hasError()) {
96  // propagate error
97  TSOS tmp(fts, surface);
98  const AlgebraicSymMatrix55 & eLocal =tmp.localError().matrix();
99  AlgebraicSymMatrix55 lte = ROOT::Math::Similarity(jacobian,eLocal);
100  LocalTrajectoryError eloc(lte);
101 
102  TSOS tmp2(tmp.localParameters(), eloc, surface, theField);
103  GlobalTrajectoryParameters gtp(x, p, fts.charge(), theField);
104  return TSOS(gtp, tmp2.cartesianError(), surface);
105  } else {
106  // return state without errors
107  return TSOS(GlobalTrajectoryParameters(x, p, fts.charge(), theField), surface);
108  }
109 }
110 
112  return asHepMatrix(jacobian(s));
113 }
114 
116  //Jacobian for 5*5 local error matrix
117  AlgebraicMatrix55 j = AlgebraicMatrixID(); //Jacobian
118 
119  double dir = (propagationDirection() == alongMomentum) ? 1. : -1.;
120  if (s*dir < 0.) return j;
121 
122  j(3,1) = s;
123  j(4,2) = s;
124 
125  return j;
126 }
127 
129  const Cylinder& cylinder,
130  GlobalPoint& x,
131  GlobalVector& p,
132  double& s) const {
133  GlobalPoint sp = cylinder.toGlobal(LocalPoint(0., 0.));
134  if (sp.x()!=0. || sp.y()!=0.) {
135  throw PropagationException("Cannot propagate to an arbitrary cylinder");
136  }
137 
138  x = fts.position();
139  p = fts.momentum();
140  s = cylinder.radius() - x.perp();
141 
142  double dir = (propagationDirection() == alongMomentum) ? 1. : -1.;
143  if(s*dir < 0.) return false;
144 
145  double dt = s/p.perp();
146  x = GlobalPoint(x.x() + p.x()*dt,
147  x.y() + p.y()*dt,
148  x.z() + p.z()*dt);
149 
150  return true;
151 }
152 
154  const Plane& plane,
155  LocalPoint& x,
156  LocalVector& p,
157  double& s) const {
158 
159  //Do extrapolation in local frame of plane
160  // LocalPoint sp = plane.toLocal(plane.position());
161  x = plane.toLocal(fts.position());
162  p = plane.toLocal(fts.momentum());
163  s = -x.z(); // sp.z() - x.z(); local z of plane always 0
164 
165  //double dir = (propagationDirection() == alongMomentum) ? 1. : -1.;
166  //if(s*dir < 0.) return false;
167  if ((p.x() != 0 || p.y() != 0) && p.z() == 0 && s!= 0) return false;
168 
169  x = LocalPoint( x.x() + (p.x()/p.z())*s,
170  x.y() + (p.y()/p.z())*s,
171  x.z() + s);
172 
173  return true;
174 }
175 
176 
177 
178 
179 
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:78
float dt
Definition: AMPTWrapper.h:126
CLHEP::HepMatrix asHepMatrix(const ROOT::Math::SMatrix< double, N1, N2, typename ROOT::Math::MatRepStd< double, N1, N2 > > &rm)
Definition: Migration.h:49
T perp() const
Definition: PV3DBase.h:66
virtual PropagationDirection propagationDirection() const
Definition: Propagator.h:143
bool propagateParametersOnCylinder(const FreeTrajectoryState &fts, const Cylinder &cylinder, GlobalPoint &x, GlobalVector &p, double &s) const
const LocalTrajectoryParameters & localParameters() const
ROOT::Math::SMatrixIdentity AlgebraicMatrixID
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
T y() const
Definition: PV3DBase.h:57
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
TrackCharge charge() const
Definition: Plane.h:17
Scalar radius() const
Radius of the cylinder.
Definition: Cylinder.h:55
CLHEP::HepMatrix AlgebraicMatrix
TrajectoryStateOnSurface propagatedState(const FreeTrajectoryState &fts, const Surface &surface, const AlgebraicMatrix &jacobian, const GlobalPoint &x, const GlobalVector &p) const
LocalPoint toLocal(const GlobalPoint &gp) const
T z() const
Definition: PV3DBase.h:58
const MagneticField * theField
int j
Definition: DBlmapReader.cc:9
const AlgebraicSymMatrix55 & matrix() const
std::pair< TSOS, double > propagateWithPath(const FreeTrajectoryState &fts, const Surface &surface) const
const LocalTrajectoryError & localError() const
Common base class.
AlgebraicMatrix55 jacobian(double &s) const
GlobalVector momentum() const
TrajectoryStateOnSurface TSOS
GlobalPoint position() const
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
Local3DPoint LocalPoint
Definition: LocalPoint.h:11
AlgebraicMatrix jacobian_old(double &s) const
string s
Definition: asciidump.py:422
dbl *** dir
Definition: mlp_gen.cc:35
Definition: DDAxes.h:10
T x() const
Definition: PV3DBase.h:56
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepStd< double, 5, 5 > > AlgebraicMatrix55
bool propagateParametersOnPlane(const FreeTrajectoryState &fts, const Plane &plane, LocalPoint &x, LocalVector &p, double &s) const