File indexing completed on 2024-04-06 12:28:11
0001 #ifndef RecHitPropagator_H
0002 #define RecHitPropagator_H
0003
0004 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
0005
0006 class TrackingRecHit;
0007 class MagneticField;
0008 class Plane;
0009
0010 class dso_hidden RecHitPropagator {
0011 public:
0012 TrajectoryStateOnSurface propagate(const TrackingRecHit& hit,
0013 const Plane& plane,
0014 const TrajectoryStateOnSurface& ts) const;
0015 };
0016
0017 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
0018
0019
0020 inline TrajectoryStateOnSurface fastProp(const TrajectoryStateOnSurface& ts, const Plane& oPlane, const Plane& tPlane) {
0021 GlobalVector gdir = ts.globalMomentum();
0022 LocalVector ldir = tPlane.toLocal(gdir);
0023
0024
0025 if (ldir.z() == 0) {
0026 return TrajectoryStateOnSurface();
0027 }
0028
0029 double delta = tPlane.localZ(oPlane.position());
0030 LocalPoint lPos = tPlane.toLocal(ts.globalPosition());
0031 LocalPoint projectedPos = lPos - ldir * delta / ldir.z();
0032
0033 GlobalTrajectoryParameters gp(
0034 tPlane.toGlobal(projectedPos), gdir, ts.charge(), &ts.globalParameters().magneticField());
0035 if (ts.hasError())
0036 return TrajectoryStateOnSurface(gp, ts.curvilinearError(), tPlane);
0037 else
0038 return TrajectoryStateOnSurface(gp, tPlane);
0039 }
0040
0041 #endif