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
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