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