CMS 3D CMS Logo

CMSSW_4_4_3_patch1/src/RecoTracker/TkNavigation/interface/SimpleNavigationSchool.h

Go to the documentation of this file.
00001 #ifndef TkNavigation_SimpleNavigationSchool_H
00002 #define TkNavigation_SimpleNavigationSchool_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 SimpleNavigationSchool : public NavigationSchool {
00021 public:
00022   
00023   SimpleNavigationSchool() : theField(0),theTracker(0){};
00024   SimpleNavigationSchool(const GeometricSearchTracker* theTracker,
00025                          const MagneticField* field);
00026   ~SimpleNavigationSchool(){cleanMemory();}
00027 
00028   // from base class
00029   virtual StateType navigableLayers() const;
00030 
00031 protected:
00032 
00033   typedef std::vector<const DetLayer*>              DLC;
00034   typedef std::vector<BarrelDetLayer*>              BDLC;
00035   typedef std::vector<ForwardDetLayer*>             FDLC;
00036   typedef DLC::iterator                        DLI;
00037   typedef BDLC::iterator                       BDLI;
00038   typedef FDLC::iterator                       FDLI;
00039   typedef BDLC::const_iterator                 ConstBDLI;
00040   typedef FDLC::const_iterator                 ConstFDLI;
00041  
00042   BDLC theBarrelLayers;
00043   FDLC theForwardLayers;  
00044   FDLC theRightLayers;
00045   FDLC theLeftLayers;
00046   float theBarrelLength;
00047 
00048   typedef std::vector< SimpleBarrelNavigableLayer*>   BNLCType;
00049   typedef std::vector< SimpleForwardNavigableLayer*>  FNLCType;
00050   BNLCType  theBarrelNLC;
00051   FNLCType  theForwardNLC;
00052 
00053   virtual void linkBarrelLayers( SymmetricLayerFinder& symFinder);
00054   virtual void linkForwardLayers( SymmetricLayerFinder& symFinder);
00055 
00056   virtual void linkNextForwardLayer( BarrelDetLayer*, FDLC&);
00057 
00058   virtual void linkNextLargerLayer( BDLI, BDLI, BDLC&);
00059 
00060   virtual void linkNextBarrelLayer( ForwardDetLayer* fl, BDLC&);
00061 
00062   virtual void linkOuterGroup( ForwardDetLayer* fl,
00063                        const FDLC& group,
00064                        FDLC& reachableFL);
00065 
00066   virtual void linkWithinGroup( FDLI fl, const FDLC& group, FDLC& reachableFL);
00067   
00068   virtual ConstFDLI outerRadiusIncrease( FDLI fl, const FDLC& group);
00069 
00070   virtual std::vector<FDLC> splitForwardLayers();
00071 
00072   virtual float barrelLength();
00073 
00074   virtual void establishInverseRelations();
00075 
00076   virtual void linkNextLayerInGroup( FDLI fli, const FDLC& group, FDLC& reachableFL);
00077 
00078   const MagneticField* theField;
00079   const GeometricSearchTracker* theTracker;
00080 
00081   void cleanMemory();
00082 };
00083 
00084 #endif // SimpleNavigationSchool_H