|
ATLAS Offline Software
|
Go to the documentation of this file.
5 #ifndef INDETREADOUTGEOMETRY_STRIPSTEREOANNULUSDESIGN_H
6 #define INDETREADOUTGEOMETRY_STRIPSTEREOANNULUSDESIGN_H
37 #include "CLHEP/Geometry/Vector3D.h"
38 #include "CLHEP/Geometry/Transform3D.h"
48 class SiDiodesParameters;
58 const std::vector<int> &
nStrips,
59 const std::vector<double> &
pitch,
60 const std::vector<double> &stripStart,
61 const std::vector<double> &stripEnd,
62 const double &stereoAngle,
73 const std::vector<int> &
nStrips,
74 const std::vector<double> &
pitch,
75 const std::vector<double> &stripStart,
76 const std::vector<double> &stripEnd,
77 const double &stereoAngle,
107 double &phiDist)
const override;
116 virtual std::pair<SiLocalPosition, SiLocalPosition>
endsOfStrip(
125 virtual double phiPitch()
const override;
159 virtual int row(
int stripId1Dim)
const override;
160 virtual int strip(
int stripId1Dim)
const override;
164 std::vector<SiCellId> &neighbours)
const override;
286 const int middleRow =
m_nRows*0.5;
287 const int middleStrip =
m_nStrips[middleRow]*0.5;
304 const int middleRow =
m_nRows *0.5;
305 const int middleStrip =
m_nStrips[middleRow] *0.5;
344 if (rowNum < 0 || rowNum >=
m_nRows) {
345 const std::string errMsg=std::string(
"StripId1Dim index out of acceptable range ") + __FILE__+std::string(
": ")+
std::to_string(__LINE__);
346 throw std::runtime_error(errMsg);
352 int rowNum =
row(stripId1Dim);
355 if (strip2D < 0 || strip2D >=
m_firstStrip[rowNum + 1]) {
356 std::cout <<
"str1D " << stripId1Dim <<
" gives strip " << strip2D <<
" which is outside range 0 - " <<
395 #endif // INDETREADOUTGEOMETRY_STRIPSTEREOANNULUSDESIGN_H
virtual double width() const override
Method to calculate average width of a module.
const std::vector< double > m_pitch
virtual double length() const override
Method to calculate length of a module.
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 ...
SiLocalPosition localPositionOfClusterPC(const SiCellId &cellId, int clusterSize) const
This is for debugging only.
SiLocalPosition positionFromStrip(const SiCellId &cellId) const
virtual double stripPitch() const override
give the strip pitch (For Forward returns pitch at center)
SiLocalPosition stripToBeamPC(const SiLocalPosition &pos) const
virtual bool swapHitPhiReadoutDirection() const override
Return true if hit local direction is the same as readout direction.
double thickness() const
Method which returns thickness of the silicon wafer.
virtual SiDiodesParameters parameters(const SiCellId &cellId) const override
Return strip width, centre, length etc. Hard to find if this is used or not.
virtual int strip1Dim(int strip, int row) const override
only relevant for SCT.
virtual SiCellId cellIdInRange(const SiCellId &) const override
DEPRECATED: only used in a stupid example (2014) Check if cell is in range.
SiLocalPosition beamToStripPC(const SiLocalPosition &pos) const
double phiPitchPhi() const
int readoutSide() const
ReadoutSide.
virtual bool inActiveArea(const SiLocalPosition &chargePos, bool checkBondGap=true) const override
check if the position is in active area
const std::vector< double > m_stripEndRadius
int phiIndex() const
Get phi index. Equivalent to strip().
virtual const Trk::SurfaceBounds & bounds() const override
Get a reference to the module bounds object.
bool const RAWDATA *ch2 const
StripStereoAnnulusDesign(const SiDetectorDesign::Axis &stripDirection, const SiDetectorDesign::Axis &thicknessDirection, const double &thickness, const int &readoutSide, const InDetDD::CarrierType &carrier, const int &nRows, const std::vector< int > &nStrips, const std::vector< double > &pitch, const std::vector< double > &stripStart, const std::vector< double > &stripEnd, const double &stereoAngle, const double ¢reR, const bool &usePC, InDetDD::DetectorType detectorType=InDetDD::Undefined)
InDetDD::DetectorType type() const override final
Type of element.
virtual void distanceToDetectorEdge(const SiLocalPosition &localPosition, double &etaDist, double &phiDist) const override
Returns distance to nearest detector active edge +ve = inside -ve = outside.
virtual int diodesInRow(const int row) const override
SiLocalPosition beamToStripPCpolar(const SiLocalPosition &pos) const
Version of StripStereoAnnulusDesign::beamToStripPC transform based exclusively in a polar system.
virtual double minWidth() const override
Method to calculate minimum width of a module.
SiLocalPosition stripPosAtR(int strip, int row, double r) const
int etaIndex() const
Get eta index.
~StripStereoAnnulusDesign()=default
const std::vector< double > m_stripStartRadius
InDetDD::DetectorType m_detectorType
double pitch(const SiCellId &cellId) const
virtual bool swapHitEtaReadoutDirection() const override
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 SiLocalPosition localPositionOfCluster(const SiCellId &cellId, int clusterSize) const override
const double m_waferCentreR
const double m_sinNegStereo
double waferCentreR() const
virtual int strip(int stripId1Dim) const override
std::unique_ptr< Trk::SurfaceBounds > m_bounds
virtual std::pair< SiLocalPosition, SiLocalPosition > endsOfStrip(const SiLocalPosition &position) const override
Give end points of the strip that covers the given position.
virtual int row(int stripId1Dim) const override
SiLocalPosition stripToBeamPCpolar(const SiLocalPosition &pos) const
Version of StripStereoAnnulusDesign::stripToBeamPC transform based exclusively in a polar system.
std::pair< int, int > getStripRow(SiCellId cellId) const final
Get the strip and row number of the cell.
int nStrips(const MuonGM::TgcReadoutElement &readoutEle, int layer)
Ensure that the ATLAS eigen extensions are properly loaded.
virtual Amg::Vector3D sensorCenter() const override
Return the centre of a sensor in the local reference frame.
std::vector< int > m_firstStrip
const double m_cosNegStereo
std::string to_string(const DetectorType &type)
virtual double etaPitch() const override
virtual double deadAreaUpperBoundary() const override
DEPRECATED for StripStereoAnnulusDesign; no dead area.
Eigen::Matrix< double, 3, 1 > Vector3D
virtual DetectorShape shape() const override
Shape of element.
virtual double phiPitch() const override
Pitch in phi direction.
SiLocalPosition stripToBeam(const SiLocalPosition &pos) const
virtual SiCellId cellIdOfPosition(const SiLocalPosition &localPos) const override
position -> id
StripStereoAnnulusDesign(const StripStereoAnnulusDesign &design)
virtual SiReadoutCellId readoutIdOfCell(const SiCellId &cellId) const override
diode id -> readout id
SiLocalPosition beamToStrip(const SiLocalPosition &pos) const
virtual double maxWidth() const override
Method to calculate maximum width of a module.
virtual SiLocalPosition localPositionOfCell(const SiCellId &cellId) const override
id -> position
unsigned constexpr int nRows
virtual double deadAreaLength() const override
give length of dead area
SiLocalPosition localPositionOfCellPC(const SiCellId &cellId) const
This is for debugging only.
const std::vector< int > m_nStrips
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
virtual bool nearBondGap(const SiLocalPosition &, double) const override
Test if near bond gap within tolerances, only relevant for SCT.
StripStereoAnnulusDesign & operator=(const StripStereoAnnulusDesign &design)
virtual HepGeom::Vector3D< double > phiMeasureSegment(const SiLocalPosition &position) const override
Helper method for stereo angle computation, DEPRECATED.
virtual double deadAreaLowerBoundary() const override
give lower boundary of dead area
double stripLength(const SiCellId &cellId) const
virtual double sinStripAngleReco(double phiCoord, double etaCoord) const override
Give strip angle in the reco frame.