Back to home page

Project CMSSW displayed by LXR

 
 

    


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 // propagate from glued to mono/stereo
0020 inline TrajectoryStateOnSurface fastProp(const TrajectoryStateOnSurface& ts, const Plane& oPlane, const Plane& tPlane) {
0021   GlobalVector gdir = ts.globalMomentum();
0022   LocalVector ldir = tPlane.toLocal(gdir);  // fast prop!
0023 
0024   // if ldir.z() == 0, return an invalid TrajectoryStateOnSurface
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   // we can also patch it up as only the position-errors are used...
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