Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:31:30

0001 #ifndef MultiStatePropagation_h_
0002 #define MultiStatePropagation_h_
0003 
0004 #include "TrackingTools/GeomPropagators/interface/Propagator.h"
0005 #include "TrackingTools/GsfTools/interface/MultiTrajectoryStateAssembler.h"
0006 #include "TrackingTools/GeomPropagators/interface/PropagationDirectionFromPath.h"
0007 
0008 /** \class MultiStatePropagation
0009  *  Helper class to propagate all components of a state,
0010  *  using a single state propagator and keeping the specialisation 
0011  *  into planes / cylinders. Designed for short lifetime: will 
0012  *  directly use the propagator passed by invoking object.
0013  */
0014 template <class T>
0015 class MultiStatePropagation {
0016 public:
0017   /** Constructor with explicit propagator
0018    */
0019   MultiStatePropagation(const Propagator& aPropagator) : thePropagator(aPropagator) {}
0020 
0021   ~MultiStatePropagation(){};
0022 
0023   /** Propagation to surface with path length calculation:
0024    */
0025   std::pair<TrajectoryStateOnSurface, double> propagateWithPath(const TrajectoryStateOnSurface& tsos,
0026                                                                 const T& surface) const;
0027 
0028 private:
0029   /// creation of new state with different weight
0030   TrajectoryStateOnSurface setWeight(const TrajectoryStateOnSurface, const double) const;
0031 
0032 private:
0033   // Single state propagator
0034   const Propagator& thePropagator;
0035 
0036   typedef std::pair<TrajectoryStateOnSurface, double> TsosWP;
0037   typedef std::vector<TrajectoryStateOnSurface> MultiTSOS;
0038 };
0039 
0040 #include "TrackingTools/GsfTools/src/MultiStatePropagation.icc"
0041 #endif