Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:28:48

0001 #ifndef TkDetLayers_TECLayer_h
0002 #define TkDetLayers_TECLayer_h
0003 
0004 #include "TrackingTools/DetLayers/interface/ForwardDetLayer.h"
0005 #include "TECPetal.h"
0006 #include "Utilities/BinningTools/interface/PeriodicBinFinderInPhi.h"
0007 #include "SubLayerCrossings.h"
0008 #include "TrackingTools/DetLayers/interface/MeasurementEstimator.h"
0009 
0010 /** A concrete implementation for TEC layer 
0011  *  built out of TECPetals
0012  */
0013 
0014 #pragma GCC visibility push(hidden)
0015 class TECLayer : public ForwardDetLayer {
0016 public:
0017   TECLayer(std::vector<const TECPetal*>& innerPetals, std::vector<const TECPetal*>& outerPetals) __attribute__((cold));
0018   ~TECLayer() override __attribute__((cold));
0019 
0020   // GeometricSearchDet interface
0021 
0022   const std::vector<const GeomDet*>& basicComponents() const override { return theBasicComps; }
0023 
0024   const std::vector<const GeometricSearchDet*>& components() const override __attribute__((cold)) { return theComps; }
0025 
0026   void groupedCompatibleDetsV(const TrajectoryStateOnSurface& tsos,
0027                               const Propagator& prop,
0028                               const MeasurementEstimator& est,
0029                               std::vector<DetGroup>& result) const override __attribute__((hot));
0030 
0031   // DetLayer interface
0032   SubDetector subDetector() const override { return GeomDetEnumerators::subDetGeom[GeomDetEnumerators::TEC]; }
0033 
0034 private:
0035   // private methods for the implementation of groupedCompatibleDets()
0036   SubLayerCrossings computeCrossings(const TrajectoryStateOnSurface& startingState, PropagationDirection propDir) const
0037       __attribute__((hot));
0038 
0039   bool addClosest(const TrajectoryStateOnSurface& tsos,
0040                   const Propagator& prop,
0041                   const MeasurementEstimator& est,
0042                   const SubLayerCrossing& crossing,
0043                   std::vector<DetGroup>& result) const __attribute__((hot));
0044 
0045   void searchNeighbors(const TrajectoryStateOnSurface& tsos,
0046                        const Propagator& prop,
0047                        const MeasurementEstimator& est,
0048                        const SubLayerCrossing& crossing,
0049                        float window,
0050                        std::vector<DetGroup>& result,
0051                        bool checkClosest) const __attribute__((hot));
0052 
0053   const std::vector<const TECPetal*>& subLayer(int ind) const { return (ind == 0 ? theFrontComps : theBackComps); }
0054 
0055 protected:
0056   std::vector<const GeometricSearchDet*> theComps;
0057   std::vector<const GeomDet*> theBasicComps;
0058 
0059   std::vector<const TECPetal*> theFrontComps;
0060   std::vector<const TECPetal*> theBackComps;
0061 
0062   ReferenceCountingPointer<BoundDisk> theFrontDisk;
0063   ReferenceCountingPointer<BoundDisk> theBackDisk;
0064 
0065   typedef PeriodicBinFinderInPhi<float> BinFinderPhi;
0066 
0067   BinFinderPhi theFrontBinFinder;
0068   BinFinderPhi theBackBinFinder;
0069 };
0070 
0071 #pragma GCC visibility pop
0072 #endif