Back to home page

Project CMSSW displayed by LXR

 
 

    


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 /** Concrete navigation school for the Tracker
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   // from base class
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  // SimpleNavigationSchool_H