Go to the documentation of this file.00001 #ifndef TkNavigation_SimpleNavigableLayer_H
00002 #define TkNavigation_SimpleNavigableLayer_H
00003
00004 #include "TrackingTools/DetLayers/interface/NavigableLayer.h"
00005 #include "DataFormats/TrajectorySeed/interface/PropagationDirection.h"
00006 #include "TrackingTools/GeomPropagators/interface/AnalyticalPropagator.h"
00007
00008 #include "TrackingTools/DetLayers/interface/BarrelDetLayer.h"
00009 #include "TrackingTools/DetLayers/interface/ForwardDetLayer.h"
00010 #include "RecoTracker/TkNavigation/interface/TkLayerLess.h"
00011
00012 #include <vector>
00013
00014 class GtfPropagator;
00015
00019 class SimpleNavigableLayer : public NavigableLayer {
00020 public:
00021
00022 typedef std::vector<const DetLayer*> DLC;
00023 typedef std::vector<BarrelDetLayer*> BDLC;
00024 typedef std::vector<ForwardDetLayer*> FDLC;
00025
00026 SimpleNavigableLayer( const MagneticField* field,float eps,bool checkCrossingSide=true) :
00027 theSelfSearch(false),
00028 theEpsilon(eps),thePropagator(field),theCheckCrossingSide(checkCrossingSide) {}
00029
00030 virtual void setInwardLinks(const BDLC&, const FDLC&, TkLayerLess sorter = TkLayerLess(outsideIn)) = 0;
00031
00032 virtual void setAdditionalLink(DetLayer*, NavigationDirection direction=insideOut) = 0;
00033
00034 void setCheckCrossingSide(bool docheck) {theCheckCrossingSide = docheck;}
00035
00036 bool theSelfSearch;
00037
00038 virtual std::vector< const DetLayer * > compatibleLayers (const FreeTrajectoryState &fts,
00039 PropagationDirection timeDirection,
00040 int& counter)const ;
00041
00042 protected:
00043
00044 typedef BDLC::iterator BDLI;
00045 typedef FDLC::iterator FDLI;
00046 typedef BDLC::const_iterator ConstBDLI;
00047 typedef FDLC::const_iterator ConstFDLI;
00048 typedef TrajectoryStateOnSurface TSOS;
00049
00050 float theEpsilon;
00051
00052 mutable AnalyticalPropagator thePropagator;
00053
00054 bool theCheckCrossingSide;
00055
00056 bool wellInside( const FreeTrajectoryState& fts, PropagationDirection dir,
00057 const BarrelDetLayer* bl, DLC& result) const;
00058
00059 bool wellInside( const FreeTrajectoryState& fts, PropagationDirection dir,
00060 const ForwardDetLayer* bl, DLC& result) const;
00061
00062 bool wellInside( const FreeTrajectoryState& fts, PropagationDirection dir,
00063 ConstBDLI begin, ConstBDLI end, DLC& result) const;
00064
00065 bool wellInside( const FreeTrajectoryState& fts, PropagationDirection dir,
00066 const DLC& layers, DLC& result) const;
00067
00068 bool wellInside( const FreeTrajectoryState& fts, PropagationDirection dir,
00069 ConstFDLI begin, ConstFDLI end, DLC& result) const;
00070
00071 Propagator& propagator( PropagationDirection dir) const;
00072
00073 void pushResult( DLC& result, const FDLC& tmp) const;
00074 void pushResult( DLC& result, const BDLC& tmp) const;
00075
00076 TSOS crossingState(const FreeTrajectoryState& fts,PropagationDirection dir) const;
00077
00078 };
00079
00080 #endif // SimpleNavigableLayer_H