00001 #ifndef RecoMuon_GlobalTrackingTools_MuonTkNavigationSchool_H 00002 #define RecoMuon_GlobalTrackingTools_MuonTkNavigationSchool_H 00003 00017 #include "TrackingTools/DetLayers/interface/NavigationSchool.h" 00018 #include "RecoMuon/Navigation/interface/MuonDetLayerMap.h" 00019 #include <vector> 00020 00021 class BarrelDetLayer; 00022 class ForwardDetLayer; 00023 class NavigableLayer; 00024 class SimpleBarrelNavigableLayer; 00025 class SimpleForwardNavigableLayer; 00026 class MuonBarrelNavigableLayer; 00027 class MuonForwardNavigableLayer; 00028 class GeometricSearchTracker; 00029 class MuonDetLayerGeometry; 00030 class MagneticField; 00031 00032 // --------------------- 00033 // -- Class Interface -- 00034 // --------------------- 00035 00036 class MuonTkNavigationSchool : public NavigationSchool { 00037 00038 public: 00039 00041 MuonTkNavigationSchool(const MuonDetLayerGeometry*, 00042 const GeometricSearchTracker*, 00043 const MagneticField*); 00044 00046 ~MuonTkNavigationSchool(); 00047 00049 virtual std::vector<NavigableLayer*> navigableLayers() const; 00050 00051 private: 00052 00054 void addBarrelLayer(BarrelDetLayer*); 00055 00057 void addEndcapLayer(ForwardDetLayer*); 00058 00060 void linkBarrelLayers(); 00061 00063 void linkEndcapLayers(const MapE&, 00064 std::vector<MuonForwardNavigableLayer*>&, 00065 std::vector<SimpleForwardNavigableLayer*>&); 00066 00068 float barrelLength() const; 00069 00071 float calculateEta(float r, float z) const; 00072 00073 private: 00074 00075 struct delete_layer { 00076 template <typename T> 00077 void operator()(T*& p) { 00078 if (p) { 00079 delete p; 00080 p = 0; 00081 } 00082 } 00083 }; 00084 00085 typedef std::vector<BarrelDetLayer*> BDLC; 00086 typedef std::vector<ForwardDetLayer*> FDLC; 00087 00088 MapB theBarrelLayers; 00089 MapE theForwardLayers; // +z 00090 MapE theBackwardLayers; // -z 00091 00092 std::vector<SimpleBarrelNavigableLayer*> theTkBarrelNLC; 00093 std::vector<SimpleForwardNavigableLayer*> theTkForwardNLC; 00094 std::vector<SimpleForwardNavigableLayer*> theTkBackwardNLC; 00095 00096 std::vector<MuonBarrelNavigableLayer*> theMuonBarrelNLC; 00097 std::vector<MuonForwardNavigableLayer*> theMuonForwardNLC; 00098 std::vector<MuonForwardNavigableLayer*> theMuonBackwardNLC; 00099 00100 const MuonDetLayerGeometry* theMuonDetLayerGeometry; 00101 const GeometricSearchTracker* theGeometricSearchTracker; 00102 const MagneticField* theMagneticField; 00103 00104 }; 00105 00106 #endif