CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_5/src/RecoMuon/Navigation/interface/MuonNavigationSchool.h

Go to the documentation of this file.
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