File indexing completed on 2024-04-06 12:28:52
0001 #ifndef TkNavigation_SimpleNavigationSchool_H
0002 #define TkNavigation_SimpleNavigationSchool_H
0003 #include "FWCore/Utilities/interface/Visibility.h"
0004
0005 #include "RecoTracker/TkNavigation/interface/TkNavigationSchool.h"
0006 #include <vector>
0007
0008 class DetLayer;
0009 class BarrelDetLayer;
0010 class ForwardDetLayer;
0011 class SymmetricLayerFinder;
0012 class SimpleBarrelNavigableLayer;
0013 class SimpleForwardNavigableLayer;
0014 class MagneticField;
0015
0016
0017
0018
0019 class dso_hidden SimpleNavigationSchool : public TkNavigationSchool {
0020 public:
0021 SimpleNavigationSchool() : TkNavigationSchool(nullptr, nullptr) {}
0022 SimpleNavigationSchool(const GeometricSearchTracker* tracker, const MagneticField* field)
0023 : TkNavigationSchool(tracker, field) {
0024 init();
0025 }
0026 ~SimpleNavigationSchool() override { cleanMemory(); }
0027
0028
0029 StateType navigableLayers() override;
0030
0031 protected:
0032 typedef std::vector<const DetLayer*> DLC;
0033 typedef std::vector<const BarrelDetLayer*> BDLC;
0034 typedef std::vector<const ForwardDetLayer*> FDLC;
0035 typedef DLC::iterator DLI;
0036 typedef BDLC::iterator BDLI;
0037 typedef FDLC::iterator FDLI;
0038 typedef BDLC::const_iterator ConstBDLI;
0039 typedef FDLC::const_iterator ConstFDLI;
0040
0041 BDLC theBarrelLayers;
0042 FDLC theForwardLayers;
0043 FDLC theRightLayers;
0044 FDLC theLeftLayers;
0045 float theBarrelLength = 0;
0046
0047 typedef std::vector<SimpleBarrelNavigableLayer*> BNLCType;
0048 typedef std::vector<SimpleForwardNavigableLayer*> FNLCType;
0049 BNLCType theBarrelNLC;
0050 FNLCType theForwardNLC;
0051
0052 virtual void linkBarrelLayers(SymmetricLayerFinder& symFinder);
0053 virtual void linkForwardLayers(SymmetricLayerFinder& symFinder);
0054
0055 virtual void linkNextForwardLayer(BarrelDetLayer const*, FDLC&);
0056
0057 virtual void linkNextLargerLayer(BDLI, BDLI, BDLC&);
0058
0059 virtual void linkNextBarrelLayer(ForwardDetLayer const* fl, BDLC&);
0060
0061 virtual void linkOuterGroup(ForwardDetLayer const* fl, const FDLC& group, FDLC& reachableFL);
0062
0063 virtual void linkWithinGroup(FDLI fl, const FDLC& group, FDLC& reachableFL);
0064
0065 virtual ConstFDLI outerRadiusIncrease(FDLI fl, const FDLC& group);
0066
0067 virtual std::vector<FDLC> splitForwardLayers();
0068
0069 virtual float barrelLength();
0070
0071 virtual void establishInverseRelations();
0072
0073 virtual void linkNextLayerInGroup(FDLI fli, const FDLC& group, FDLC& reachableFL);
0074
0075 void cleanMemory();
0076
0077 private:
0078 void init();
0079 };
0080
0081 #endif