CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_3_3/src/TrackPropagation/NavPropagator/interface/NavPropagator.h

Go to the documentation of this file.
00001 #ifndef NavPropagator_H_
00002 #define NavPropagator_H_
00003 
00004 #include "TrackingTools/GeomPropagators/interface/Propagator.h"
00005 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
00006 
00007 #include "TrackingTools/MaterialEffects/interface/VolumeMediumProperties.h"
00008 #include "TrackingTools/MaterialEffects/interface/VolumeMaterialEffectsUpdator.h"
00009 #include "TrackingTools/MaterialEffects/interface/VolumeMultipleScatteringEstimator.h"
00010 #include "TrackingTools/MaterialEffects/interface/VolumeEnergyLossEstimator.h"
00011 
00012 #include <map>
00013 
00014 class MagneticField; 
00015 class VolumeBasedMagneticField;
00016 class RKPropagatorInS;
00017 class NavVolume;
00018 class MagVolume;
00019 
00020 
00021 class NavPropagator : public Propagator {
00022 
00023 public:
00024 
00025   NavPropagator( const MagneticField* field,
00026                  PropagationDirection dir = alongMomentum);
00027 
00028   ~NavPropagator();
00029   //
00030   // use base class methods where necessary:
00031   // - propagation from TrajectoryStateOnSurface 
00032   //     (will use propagation from FreeTrajectoryState)
00033   // - propagation to general Surface
00034   //     (will use specialised methods for planes or cylinders)
00035   //
00036   using Propagator::propagate;
00037   using Propagator::propagateWithPath;
00038 
00040   TrajectoryStateOnSurface propagate(const TrajectoryStateOnSurface& ts, 
00041                                      const Plane& plane) const {
00042     return propagateWithPath(ts,plane).first;
00043   }
00045   std::pair<TrajectoryStateOnSurface,double> 
00046   propagateWithPath(const TrajectoryStateOnSurface& , 
00047                     const Plane& plane) const; 
00048   
00050   TrajectoryStateOnSurface propagate(const FreeTrajectoryState& ts, 
00051                                      const Plane& plane) const {
00052     return propagateWithPath(ts,plane).first;
00053   }
00055   std::pair<TrajectoryStateOnSurface,double> 
00056   propagateWithPath(const FreeTrajectoryState& , 
00057                     const Plane& plane) const; 
00058   
00060   TrajectoryStateOnSurface propagate(const FreeTrajectoryState& fts, 
00061                                      const Cylinder& cylinder) const {
00062     return propagateWithPath(fts,cylinder).first;
00063   }
00065   std::pair<TrajectoryStateOnSurface,double> 
00066   propagateWithPath(const FreeTrajectoryState& fts, 
00067                     const Cylinder& cylinder) const;
00068 
00069   virtual NavPropagator * clone() const {return new NavPropagator(*this);}
00070 
00071   virtual const MagneticField* magneticField() const;
00072 
00073 private:
00074 
00075   typedef std::pair<TrajectoryStateOnSurface,double> TsosWP;
00076   typedef RKPropagatorInS                            PropagatorType;
00077   typedef std::map<const MagVolume*, NavVolume*>     MagVolumeMap;
00078   typedef TrajectoryStateOnSurface                   TSOS;
00079 
00080 
00081   const VolumeBasedMagneticField*   theField;
00082   mutable MagVolumeMap              theNavVolumeMap;
00083   bool  isIronVolume[272];
00084 
00085 
00086   const NavVolume* findVolume( const TrajectoryStateOnSurface& inputState) const;
00087 
00088   const NavVolume* navVolume( const MagVolume* magVolume) const;
00089 
00090   bool destinationCrossed( const TSOS& startState,
00091                            const TSOS& endState, const Plane& plane) const;
00092 
00093   TrajectoryStateOnSurface noNextVolume( TrajectoryStateOnSurface startingState) const;
00094 
00095   std::pair<TrajectoryStateOnSurface,double> 
00096   propagateInVolume( const NavVolume* currentVolume, 
00097                      const TrajectoryStateOnSurface& startingState, 
00098                      const Plane& targetPlane) const;
00099 
00100   const VolumeMediumProperties  theAirMedium;
00101   const VolumeMediumProperties  theIronMedium;
00102   const VolumeMultipleScatteringEstimator theMSEstimator;
00103   const VolumeEnergyLossEstimator theELEstimator;
00104   const VolumeMaterialEffectsUpdator theMaterialUpdator;
00105 };
00106 
00107 #endif