File indexing completed on 2023-03-17 11:22:50
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
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
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
0038 virtual const BoundDisk& specificSurface() const { return *theDisk; }
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,
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