Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2021-02-14 14:27:47

0001 #ifndef TkDetLayers_TIDRing_h
0002 #define TkDetLayers_TIDRing_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 TIDRing final : public GeometricSearchDet {
0014 public:
0015   TIDRing(std::vector<const GeomDet*>& innerDets, std::vector<const GeomDet*>& outerDets);
0016   ~TIDRing() override;
0017 
0018   // GeometricSearchDet interface
0019   const BoundSurface& surface() const override { return *theDisk; }
0020 
0021   const std::vector<const GeomDet*>& basicComponents() const override { return theDets; }
0022 
0023   const std::vector<const GeometricSearchDet*>& components() const override __attribute__((cold));
0024 
0025   std::pair<bool, TrajectoryStateOnSurface> compatible(const TrajectoryStateOnSurface&,
0026                                                        const Propagator&,
0027                                                        const MeasurementEstimator&) const override;
0028 
0029   void groupedCompatibleDetsV(const TrajectoryStateOnSurface& tsos,
0030                               const Propagator& prop,
0031                               const MeasurementEstimator& est,
0032                               std::vector<DetGroup>& result) const override __attribute__((hot));
0033 
0034   //Extension of interface
0035   virtual const BoundDisk& specificSurface() const { return *theDisk; }
0036 
0037 private:
0038   // private methods for the implementation of groupedCompatibleDets()
0039 
0040   SubLayerCrossings computeCrossings(const TrajectoryStateOnSurface& tsos, PropagationDirection propDir) const
0041       __attribute__((hot));
0042 
0043   bool addClosest(const TrajectoryStateOnSurface& tsos,
0044                   const Propagator& prop,
0045                   const MeasurementEstimator& est,
0046                   const SubLayerCrossing& crossing,
0047                   std::vector<DetGroup>& result) const __attribute__((hot));
0048 
0049   void searchNeighbors(const TrajectoryStateOnSurface& tsos,
0050                        const Propagator& prop,
0051                        const MeasurementEstimator& est,
0052                        const SubLayerCrossing& crossing,
0053                        float window,
0054                        std::vector<DetGroup>& result,
0055                        bool checkClosest) const __attribute__((hot));
0056 
0057   const std::vector<const GeomDet*>& subLayer(int ind) const { return (ind == 0 ? theFrontDets : theBackDets); }
0058 
0059 private:
0060   std::vector<const GeomDet*> theDets;
0061   std::vector<const GeomDet*> theFrontDets;
0062   std::vector<const GeomDet*> theBackDets;
0063 
0064   ReferenceCountingPointer<BoundDisk> theDisk;
0065   ReferenceCountingPointer<BoundDisk> theFrontDisk;
0066   ReferenceCountingPointer<BoundDisk> theBackDisk;
0067 
0068   typedef PeriodicBinFinderInPhi<float> BinFinderType;
0069 
0070   BinFinderType theFrontBinFinder;
0071   BinFinderType theBackBinFinder;
0072 };
0073 
0074 #pragma GCC visibility pop
0075 #endif