00001 #ifndef Navigation_MuonNavigationSchool_H 00002 #define Navigation_MuonNavigationSchool_H 00003 00024 #include "RecoMuon/Navigation/interface/MuonDetLayerMap.h" 00025 #include "TrackingTools/DetLayers/interface/NavigationSchool.h" 00026 #include "RecoMuon/DetLayers/interface/MuonDetLayerGeometry.h" 00027 #include <vector> 00028 #include <map> 00029 00030 class MuonBarrelNavigableLayer; 00031 class MuonForwardNavigableLayer; 00032 class MuonEtaRange; 00033 class BarrelDetLayer; 00034 class ForwardDetLayer; 00035 00036 class MuonNavigationSchool : public NavigationSchool { 00037 00038 public: 00040 MuonNavigationSchool(const MuonDetLayerGeometry *, bool enableRPC = true); 00042 ~MuonNavigationSchool(); 00044 virtual StateType navigableLayers() const; 00045 private: 00047 void addBarrelLayer(BarrelDetLayer*); 00049 void addEndcapLayer(ForwardDetLayer*); 00051 void linkBarrelLayers(); 00053 void linkEndcapLayers(const MapE&,std::vector<MuonForwardNavigableLayer*>&); 00055 void createInverseLinks() const; 00056 float calculateEta(const float&, const float& ) const; 00057 00058 private: 00059 00060 struct delete_layer 00061 { 00062 template <typename T> 00063 void operator()(T*& p) 00064 { 00065 if( p) 00066 { 00067 delete p; 00068 p = 0; 00069 } 00070 } 00071 }; 00072 00073 MapB theBarrelLayers; 00074 MapE theForwardLayers; 00075 MapE theBackwardLayers; 00076 00077 std::vector<MuonBarrelNavigableLayer*> theBarrelNLC; 00078 std::vector<MuonForwardNavigableLayer*> theForwardNLC; 00079 std::vector<MuonForwardNavigableLayer*> theBackwardNLC; 00080 00081 const MuonDetLayerGeometry * theMuonDetLayerGeometry; 00082 00083 }; 00084 #endif