Back to home page

Project CMSSW displayed by LXR

 
 

    


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

0001 #ifndef TkDetLayers_PixelBlade_h
0002 #define TkDetLayers_PixelBlade_h
0003 
0004 #include "DataFormats/GeometrySurface/interface/BoundDiskSector.h"
0005 #include "TrackingTools/DetLayers/interface/GeometricSearchDet.h"
0006 
0007 #include "TrackingTools/DetLayers/interface/PeriodicBinFinderInZ.h"
0008 #include "SubLayerCrossings.h"
0009 
0010 /** A concrete implementation for PixelBlade
0011  */
0012 
0013 #pragma GCC visibility push(hidden)
0014 class PixelBlade final : public GeometricSearchDet {
0015 public:
0016   PixelBlade(std::vector<const GeomDet*>& frontDets, std::vector<const GeomDet*>& backDets) __attribute__((cold));
0017 
0018   ~PixelBlade() override __attribute__((cold));
0019 
0020   // GeometricSearchDet interface
0021   const BoundSurface& surface() const override { return *theDiskSector; }
0022 
0023   const std::vector<const GeomDet*>& basicComponents() const override { return theDets; }
0024 
0025   const std::vector<const GeometricSearchDet*>& components() const override __attribute__((cold));
0026 
0027   std::pair<bool, TrajectoryStateOnSurface> compatible(const TrajectoryStateOnSurface& ts,
0028                                                        const Propagator&,
0029                                                        const MeasurementEstimator&) const override
0030       __attribute__((cold));
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 the interface
0038   virtual const BoundDiskSector& specificSurface() const { return *theDiskSector; }
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) const __attribute__((hot));
0051 
0052   float computeWindowSize(const GeomDet* det,
0053                           const TrajectoryStateOnSurface& tsos,
0054                           const MeasurementEstimator& est) const;
0055 
0056   void searchNeighbors(const TrajectoryStateOnSurface& tsos,
0057                        const Propagator& prop,
0058                        const MeasurementEstimator& est,
0059                        const SubLayerCrossing& crossing,
0060                        float window,
0061                        std::vector<DetGroup>& result,
0062                        bool checkClosest) const __attribute__((hot));
0063 
0064   bool overlap(const GlobalPoint& gpos, const GeomDet& det, float phiWin) const;
0065 
0066   // This 2 find methods should be substituted with the use
0067   // of a GeneralBinFinderInR
0068 
0069   int findBin(float R, int layer) const;
0070 
0071   GlobalPoint findPosition(int index, int diskSectorIndex) const;
0072 
0073   const std::vector<const GeomDet*>& subBlade(int ind) const { return (ind == 0 ? theFrontDets : theBackDets); }
0074 
0075 private:
0076   std::vector<const GeomDet*> theDets;
0077   std::vector<const GeomDet*> theFrontDets;
0078   std::vector<const GeomDet*> theBackDets;
0079 
0080   ReferenceCountingPointer<BoundDiskSector> theDiskSector;
0081   ReferenceCountingPointer<BoundDiskSector> theFrontDiskSector;
0082   ReferenceCountingPointer<BoundDiskSector> theBackDiskSector;
0083 };
0084 
0085 #pragma GCC visibility pop
0086 #endif