00001 #ifndef RecoHIMuon_HICSimpleNavigationSchool_H
00002 #define RecoHIMuon_HICSimpleNavigationSchool_H
00003
00004 #include "TrackingTools/DetLayers/interface/NavigationSchool.h"
00005 #include "RecoTracker/TkDetLayers/interface/GeometricSearchTracker.h"
00006
00007 #include <vector>
00008
00009 class DetLayer;
00010 class BarrelDetLayer;
00011 class ForwardDetLayer;
00012 class SymmetricLayerFinder;
00013 class SimpleBarrelNavigableLayer;
00014 class SimpleForwardNavigableLayer;
00015 class MagneticField;
00016
00020 class HICSimpleNavigationSchool : public NavigationSchool {
00021 public:
00022
00023 HICSimpleNavigationSchool() : theField(0),theTracker(0){};
00024 HICSimpleNavigationSchool(const GeometricSearchTracker* theTracker,
00025 const MagneticField* field);
00026
00027
00028 virtual StateType navigableLayers() const;
00029
00030
00031 protected:
00032
00033 typedef std::vector<const DetLayer*> DLC;
00034
00035 typedef std::vector<BarrelDetLayer*> BDLC;
00036 typedef std::vector<ForwardDetLayer*> FDLC;
00037 typedef DLC::iterator DLI;
00038 typedef BDLC::iterator BDLI;
00039 typedef FDLC::iterator FDLI;
00040 typedef BDLC::const_iterator ConstBDLI;
00041 typedef FDLC::const_iterator ConstFDLI;
00042
00043 BDLC theBarrelLayers;
00044 FDLC theForwardLayers;
00045 FDLC theRightLayers;
00046 FDLC theLeftLayers;
00047 float theBarrelLength;
00048
00049 typedef std::vector< SimpleBarrelNavigableLayer*> BNLCType;
00050 typedef std::vector< SimpleForwardNavigableLayer*> FNLCType;
00051 BNLCType theBarrelNLC;
00052 FNLCType theForwardNLC;
00053
00054 virtual void linkBarrelLayers( SymmetricLayerFinder& symFinder);
00055 virtual void linkForwardLayers( SymmetricLayerFinder& symFinder);
00056
00057 virtual void linkNextForwardLayer( BarrelDetLayer*, FDLC&);
00058
00059 virtual void linkNextLargerLayer( BDLI, BDLI, BDLC&);
00060
00061 virtual void linkNextBarrelLayer( ForwardDetLayer* fl, BDLC&);
00062
00063 virtual void linkOuterGroup( ForwardDetLayer* fl,
00064 const FDLC& group,
00065 FDLC& reachableFL);
00066
00067 virtual void linkWithinGroup( FDLI fl, const FDLC& group, FDLC& reachableFL);
00068
00069 virtual ConstFDLI outerRadiusIncrease( FDLI fl, const FDLC& group);
00070
00071 virtual std::vector<FDLC> splitForwardLayers();
00072
00073 virtual float barrelLength();
00074
00075 virtual void establishInverseRelations();
00076
00077 virtual void linkNextLayerInGroup( FDLI fli, const FDLC& group, FDLC& reachableFL);
00078
00079 std::vector<DetLayer*> theDetLayers;
00080 const MagneticField* theField;
00081 const GeometricSearchTracker* theTracker;
00082 };
00083
00084 #endif // SimpleNavigationSchool_H