Back to home page

Project CMSSW displayed by LXR

 
 

    


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

0001 #ifndef TkDetLayers_Phase2EndcapRing_h
0002 #define TkDetLayers_Phase2EndcapRing_h
0003 
0004 #include "TrackingTools/DetLayers/interface/GeometricSearchDet.h"
0005 #include "Utilities/BinningTools/interface/PeriodicBinFinderInPhi.h"
0006 #include "SubLayerCrossings.h"
0007 #include "DataFormats/GeometrySurface/interface/BoundDisk.h"
0008 
0009 /** A concrete implementation for TID rings 
0010  */
0011 
0012 #pragma GCC visibility push(hidden)
0013 class Phase2EndcapRing final : public GeometricSearchDet {
0014 public:
0015   Phase2EndcapRing(std::vector<const GeomDet*>& innerDets,
0016                    std::vector<const GeomDet*>& outerDets,
0017                    const std::vector<const GeomDet*>& innerDetBrothers = std::vector<const GeomDet*>(),
0018                    const std::vector<const GeomDet*>& outerDetBrothers = std::vector<const GeomDet*>());
0019   ~Phase2EndcapRing() override;
0020 
0021   // GeometricSearchDet interface
0022   const BoundSurface& surface() const override { return *theDisk; }
0023 
0024   const std::vector<const GeomDet*>& basicComponents() const override { return theDets; }
0025 
0026   const std::vector<const GeometricSearchDet*>& components() const override __attribute__((cold));
0027 
0028   std::pair<bool, TrajectoryStateOnSurface> compatible(const TrajectoryStateOnSurface&,
0029                                                        const Propagator&,
0030                                                        const MeasurementEstimator&) const override;
0031 
0032   void groupedCompatibleDetsV(const TrajectoryStateOnSurface& tsos,
0033                               const Propagator& prop,
0034                               const MeasurementEstimator& est,
0035                               std::vector<DetGroup>& result) const override __attribute__((hot));
0036 
0037   //Extension of interface
0038   virtual const BoundDisk& specificSurface() const { return *theDisk; }
0039 
0040 private:
0041   // private methods for the implementation of groupedCompatibleDets()
0042 
0043   SubLayerCrossings computeCrossings(const TrajectoryStateOnSurface& tsos, PropagationDirection propDir) const
0044       __attribute__((hot));
0045 
0046   bool addClosest(const TrajectoryStateOnSurface& tsos,
0047                   const Propagator& prop,
0048                   const MeasurementEstimator& est,
0049                   const SubLayerCrossing& crossing,
0050                   std::vector<DetGroup>& result,
0051                   std::vector<DetGroup>& brotherresult) const __attribute__((hot));
0052 
0053   void searchNeighbors(const TrajectoryStateOnSurface& tsos,
0054                        const Propagator& prop,
0055                        const MeasurementEstimator& est,
0056                        const SubLayerCrossing& crossing,
0057                        float window,
0058                        std::vector<DetGroup>& result,
0059                        std::vector<DetGroup>& brotherresult,
0060                        bool checkClosest) const __attribute__((hot));
0061 
0062   const std::vector<const GeomDet*>& subLayer(int ind) const { return (ind == 0 ? theFrontDets : theBackDets); }
0063 
0064   const std::vector<const GeomDet*>& subLayerBrothers(int ind) const {
0065     return (ind == 0 ? theFrontDetBrothers : theBackDetBrothers);
0066   }
0067 
0068 private:
0069   std::vector<const GeomDet*> theDets;
0070   std::vector<const GeomDet*> theFrontDets;
0071   std::vector<const GeomDet*> theBackDets;
0072   std::vector<const GeomDet*> theFrontDetBrothers;
0073   std::vector<const GeomDet*> theBackDetBrothers;
0074 
0075   ReferenceCountingPointer<BoundDisk> theDisk;
0076   ReferenceCountingPointer<BoundDisk> theFrontDisk;
0077   ReferenceCountingPointer<BoundDisk> theBackDisk;
0078 
0079   typedef PeriodicBinFinderInPhi<float> BinFinderType;
0080 
0081   BinFinderType theFrontBinFinder;
0082   BinFinderType theBackBinFinder;
0083 };
0084 
0085 #pragma GCC visibility pop
0086 #endif