7#include "GeoModelKernel/Units.h"
8#include "Identifier/Identifier.h"
24 const double zShift) :
25 SCT_ModuleSideDesign(
thickness, true, true, true, 1, nRows * nStrips, nRows * nStrips, 0, false, carrier,
readoutSide, stripDirection, thicknessDirection) {
27 throw std::runtime_error(
28 "ERROR: StripBoxDesign called with non-positive number of rows");
63 std::vector<SiCellId> &neighbours)
const {
73 int stripM =
strip - 1;
74 int stripP =
strip + 1;
77 neighbours.emplace_back(stripM);
80 neighbours.emplace_back(stripP);
125 int clusterSize)
const {
129 if (clusterSize <= 1) {
133 double clusterWidth = clusterSize *
m_pitch;
134 pos.xPhi(pos.xPhi() + clusterWidth / 2.);
148 double etaEnd = etaStart +
m_length;
156 return std::pair<SiLocalPosition, SiLocalPosition>(end1, end2);
175 return std::abs(pos.xPhi() - posStrip.
xPhi()) /
m_pitch;
180 throw std::runtime_error(
"Call to StripBoxDesign::parameters; not yet implemented");
231 throw std::runtime_error(
"Call to phiMeasureSegment, DEPRECATED, not implemented.");
237 double & phiDist)
const {
240 double xEta = std::abs(pos.xEta());
241 double xPhi = std::abs(pos.xPhi());
243 double xEtaEdge = 0.5 *
length();
244 double xPhiEdge = 0.5 *
width();
247 etaDist = xEtaEdge - xEta;
250 phiDist = xPhiEdge - xPhi;
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
double thickness() const
Method which returns thickness of the silicon wafer.
int readoutSide() const
ReadoutSide.
SCT_ModuleSideDesign(const double thickness, const bool phiSymmetric, const bool etaSymmetric, const bool depthSymmetric, const int crystals, const int diodes, const int cells, const int shift, const bool swapStripReadout, InDetDD::CarrierType carrierType, int readoutSide)
Constructor with parameters: local axis corresponding to eta direction local axis corresponding to ph...
InDetDD::DetectorType m_detectorType
Identifier for the strip or pixel cell.
int phiIndex() const
Get phi index. Equivalent to strip().
bool isValid() const
Test if its in a valid state.
Class to handle the position of the centre and the width of a diode or a cluster of diodes Version 1....
Class to represent a position in the natural frame of a silicon sensor, for Pixel and SCT For Pixel: ...
double xPhi() const
position along phi direction:
Trk::RectangleBounds m_bounds
virtual double minWidth() const override
Method to calculate minimum width of a module.
virtual double maxWidth() const override
Method to calculate maximum width of a module.
virtual void distanceToDetectorEdge(const SiLocalPosition &localPosition, double &etaDist, double &phiDist) const override
DEPRECATED: Unused (2014)
virtual const Amg::Transform3D moduleShift() const override final
virtual SiCellId cellIdOfPosition(const SiLocalPosition &localPos) const override
position -> id
virtual bool inActiveArea(const SiLocalPosition &chargePos, bool checkBondGap=true) const override
check if the position is in active area
std::pair< int, int > getStripRow(SiCellId id) const final
Get the strip and row number of the cell.
virtual int strip(int stripId1Dim) const override
virtual int row(int stripId1Dim) const override
virtual std::pair< SiLocalPosition, SiLocalPosition > endsOfStrip(const SiLocalPosition &position) const override
Give end points of the strip that covers the given position.
virtual double scaledDistanceToNearestDiode(const SiLocalPosition &chargePos) const override
give distance to the nearest diode in units of pitch, from 0.0 to 0.5, this method should be fast as ...
virtual void neighboursOfCell(const SiCellId &cellId, std::vector< SiCellId > &neighbours) const override
Get the neighbouring diodes of a given diode: Cell for which the neighbours must be found List of cel...
virtual SiCellId cellIdInRange(const SiCellId &) const override
DEPRECATED: only used in a stupid example (2014) Check if cell is in range.
SiLocalPosition positionFromStrip(const SiCellId &cellId) const
virtual double length() const override
Method to calculate length of a module.
virtual double etaPitch() const override
double pitch(const SiCellId &cellId) const
virtual HepGeom::Vector3D< double > phiMeasureSegment(const SiLocalPosition &position) const override
Helper method for stereo angle computation, DEPRECATED.
virtual const Trk::SurfaceBounds & bounds() const override
Element boundary.
virtual double width() const override
Method to calculate average width of a module.
virtual SiLocalPosition localPositionOfCluster(const SiCellId &cellId, int clusterSize) const override
virtual int strip1Dim(int strip, int row) const override
only relevant for SCT.
virtual SiLocalPosition localPositionOfCell(const SiCellId &cellId) const override
id -> position
virtual SiDiodesParameters parameters(const SiCellId &cellId) const override
Return strip width, centre, length etc. Hard to find if this is used or not.
Bounds for a rectangular, planar surface.
Abstract base class for surface bounds to be specified.
Eigen::Affine3d Transform3D
Eigen::Translation< double, 3 > Translation3D