CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_2_9_HLT1_bphpatch4/src/RecoTracker/TkNavigation/interface/SimpleNavigableLayer.h

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