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
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
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
0038 virtual const BoundDiskSector& specificSurface() const { return *theDiskSector; }
0039
0040 private:
0041
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
0067
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