File indexing completed on 2023-03-17 11:05:23
0001 #ifndef Geometry_TrackerTopology_ProxyStripTopology_H
0002 #define Geometry_TrackerTopology_ProxyStripTopology_H
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027 #include "Geometry/CommonTopologies/interface/SurfaceDeformation.h"
0028 #include "Geometry/CommonTopologies/interface/StripTopology.h"
0029 #include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetType.h"
0030 class Plane;
0031
0032 class ProxyStripTopology final : public StripTopology {
0033 public:
0034 ProxyStripTopology(StripGeomDetType const* type, Plane* bp);
0035
0036 LocalPoint localPosition(const MeasurementPoint& mp) const override { return specificTopology().localPosition(mp); }
0037
0038 LocalPoint localPosition(const MeasurementPoint& mp, const Topology::LocalTrackPred& trkPred) const override;
0039
0040 LocalPoint localPosition(float strip) const override { return specificTopology().localPosition(strip); }
0041
0042 LocalPoint localPosition(float strip, const Topology::LocalTrackPred& trkPred) const override;
0043
0044 LocalError localError(float strip, float stripErr2) const override {
0045 return specificTopology().localError(strip, stripErr2);
0046 }
0047
0048 LocalError localError(float strip, float stripErr2, const Topology::LocalTrackPred& trkPred) const override;
0049
0050 LocalError localError(const MeasurementPoint& mp, const MeasurementError& me) const override {
0051 return specificTopology().localError(mp, me);
0052 }
0053
0054 LocalError localError(const MeasurementPoint& mp,
0055 const MeasurementError& me,
0056 const Topology::LocalTrackPred& trkPred) const override;
0057
0058 MeasurementPoint measurementPosition(const LocalPoint& lp) const override {
0059 return specificTopology().measurementPosition(lp);
0060 }
0061 MeasurementPoint measurementPosition(const LocalPoint& lp, const Topology::LocalTrackAngles& dir) const override;
0062
0063 MeasurementError measurementError(const LocalPoint& lp, const LocalError& le) const override {
0064 return specificTopology().measurementError(lp, le);
0065 }
0066 MeasurementError measurementError(const LocalPoint& lp,
0067 const LocalError& le,
0068 const Topology::LocalTrackAngles& dir) const override;
0069
0070 int channel(const LocalPoint& lp) const override { return specificTopology().channel(lp); }
0071 int channel(const LocalPoint& lp, const Topology::LocalTrackAngles& dir) const override;
0072
0073 float strip(const LocalPoint& lp) const override { return specificTopology().strip(lp); }
0074
0075 float strip(const LocalPoint& lp, const Topology::LocalTrackAngles& dir) const override;
0076
0077 float coveredStrips(const LocalPoint& lp1, const LocalPoint& lp2) const override {
0078 return specificTopology().coveredStrips(lp1, lp2);
0079 }
0080
0081 float pitch() const override { return specificTopology().pitch(); }
0082 float localPitch(const LocalPoint& lp) const override { return specificTopology().localPitch(lp); }
0083
0084 float localPitch(const LocalPoint& lp, const Topology::LocalTrackAngles& dir) const override;
0085
0086 float stripAngle(float strip) const override { return specificTopology().stripAngle(strip); }
0087
0088 int nstrips() const override { return specificTopology().nstrips(); }
0089
0090 float stripLength() const override { return specificTopology().stripLength(); }
0091 float localStripLength(const LocalPoint& lp) const override { return specificTopology().localStripLength(lp); }
0092 float localStripLength(const LocalPoint& lp, const Topology::LocalTrackAngles& dir) const override;
0093
0094 virtual const GeomDetType& type() const { return *theType; }
0095 virtual StripGeomDetType const& specificType() const { return *theType; }
0096
0097 const SurfaceDeformation* surfaceDeformation() const { return theSurfaceDeformation.operator->(); }
0098 virtual void setSurfaceDeformation(const SurfaceDeformation* deformation);
0099
0100 virtual const StripTopology& specificTopology() const { return specificType().specificTopology(); }
0101
0102 private:
0103
0104
0105 SurfaceDeformation::Local2DVector positionCorrection(const LocalPoint& pos,
0106 const Topology::LocalTrackAngles& dir) const;
0107
0108
0109 SurfaceDeformation::Local2DVector positionCorrection(const Topology::LocalTrackPred& trk) const;
0110
0111 StripGeomDetType const* theType;
0112 float theLength, theWidth;
0113 std::unique_ptr<const SurfaceDeformation> theSurfaceDeformation;
0114 };
0115
0116 #endif