ATLAS Offline Software
Loading...
Searching...
No Matches
InDetDD::PixelModuleDesign Class Reference

Class used to describe the design of a module (diode segmentation and readout scheme) More...

#include <PixelModuleDesign.h>

Inheritance diagram for InDetDD::PixelModuleDesign:
Collaboration diagram for InDetDD::PixelModuleDesign:

Public Types

enum  Axis { xAxis =0 , yAxis , zAxis }

Public Member Functions

 PixelModuleDesign (const double thickness, const int circuitsPerColumn, const int circuitsPerRow, const int cellColumnsPerCircuit, const int cellRowsPerCircuit, const int diodeColumnsPerCircuit, const int diodeRowsPerCircuit, PixelDiodeTree &&diode_tree, InDetDD::CarrierType carrierType, int readoutSide, bool is3D, InDetDD::DetectorType detectorType, PixelReadoutTechnology readoutTechnology)
 Constructor with parameters: local axis corresponding to eta direction local axis corresponding to phi direction local axis corresponding to depth direction thickness of silicon sensor number of circuits in one circuit column number of circuits in one circuit row number of cell columns per circuit number of cell rows per circuit number of diode columns connected to one circuit number of diode rows connected to one circuit.
 PixelModuleDesign (const double thickness, const bool phiSymmetric, const bool etaSymmetric, const bool depthSymmetric, const int circuitsPerColumn, const int circuitsPerRow, const int cellColumnsPerCircuit, const int cellRowsPerCircuit, const int diodeColumnsPerCircuit, const int diodeRowsPerCircuit, PixelDiodeTree &&diode_tree, InDetDD::CarrierType carrierType, int readoutSide, bool is3D, InDetDD::DetectorType detectorType, PixelReadoutTechnology readoutTechnology)
virtual ~PixelModuleDesign ()=default
virtual void distanceToDetectorEdge (const SiLocalPosition &localPosition, double &etaDist, double &phiDist) const
 Returns distance to nearest detector active edge +ve = inside -ve = outside.
virtual SiDiodesParameters parameters (const SiCellId &cellId) const
 readout or diode id -> position, size
virtual SiLocalPosition localPositionOfCell (const SiCellId &cellId) const
 readout or diode id -> position.
virtual int numberOfConnectedCells (const SiReadoutCellId &readoutId) const
 readout id -> id of connected diodes
virtual SiCellId connectedCell (const SiReadoutCellId &readoutId, int number) const
 readout id -> id of connected diodes.
virtual SiCellId gangedCell (const SiCellId &cellId) const
 If cell is ganged return the other cell, otherwise return an invalid id.
virtual SiReadoutCellId readoutIdOfCell (const SiCellId &cellId) const
 diode id -> readout id
virtual SiReadoutCellId readoutIdOfPosition (const SiLocalPosition &localPos) const
 position -> id
virtual SiCellId cellIdOfPosition (const SiLocalPosition &localPos) const
 position -> id
virtual SiCellId cellIdInRange (const SiCellId &cellId) const
 Check if cell is in range.
bool isInsideMatrix (const SiCellId &cellId) const
 Return true if the given index describes a pixel of this matrix.
bool isInsideMatrix (const std::array< InDetDD::PixelDiodeTree::IndexType, 2 > &idx) const
 Return true if the given index describes a pixel of this matrix.
bool isInsideMatrix (const Amg::Vector2D &local_position) const
 Return true if the given position is a position within one of the pixels of this matrix.
virtual HepGeom::Vector3D< double > phiMeasureSegment (const SiLocalPosition &) const
 Helper method for stereo angle computation.
virtual std::pair< SiLocalPosition, SiLocalPositionendsOfStrip (const SiLocalPosition &position) const
 Special method for SCT (irrelevant here):
SiLocalPosition positionFromColumnRow (const int column, const int row) const
 Given row and column index of a diode, return position of diode center ALTERNATIVE/PREFERED way is to use localPositionOfCell(const SiCellId & cellId) or rawLocalPositionOfCell method in SiDetectorElement.
virtual void neighboursOfCell (const SiCellId &cellId, std::vector< SiCellId > &neighbours) const
 Get the neighbouring diodes of a given diode: Cell for which the neighbours must be found List of cells which are neighbours of the given one.
double intersectionLength (const SiCellId &diode1, const SiCellId &diode2) const
 Compute the intersection length of two diodes: return: the intersection length when the two diodes are projected on one of the two axis, or 0 in case of no intersection or problem input: the two diodes for which the intersection length is computed.
int numberOfDiodes () const
 Total number of diodes:
int numberOfCircuits () const
 Total number of circuits:
int numberOfCircuitsPerColumn () const
 Number of circuits per column:
int numberOfCircuitsPerRow () const
 Number of circuits per row:
int columnsPerCircuit () const
 Number of cell columns per circuit:
int rowsPerCircuit () const
 Number of cell rows per circuit:
int columns () const
 Number of cell columns per module:
int rows () const
 Number of cell rows per module:
virtual double length () const
 Method to calculate length of a module.
virtual double width () const
 Method to calculate average width of a module.
virtual double minWidth () const
 Method to calculate minimum width of a module.
virtual double maxWidth () const
 Method to calculate maximum width of a module.
virtual double phiPitch () const
 Pitch in phi direction.
virtual double phiPitch (const SiLocalPosition &localPosition) const
 Pitch in phi direction.
virtual double etaPitch () const
 Pitch in eta direction.
double widthFromColumnRange (const int colMin, const int colMax) const
 Method to calculate eta width from a column range.
double widthFromRowRange (const int rowMin, const int rowMax) const
 Method to calculate phi width from a row range.
virtual bool nearBondGap (const SiLocalPosition &localPosition, double etaTol) const
 Test if near bond gap within tolerances Only relevant for SCT.
virtual bool swapHitPhiReadoutDirection () const
 Return true if hit local direction is the same as readout direction.
virtual bool swapHitEtaReadoutDirection () const
virtual const Trk::SurfaceBoundsbounds () const
 Element boundary.
virtual bool is3D () const
PixelReadoutTechnology getReadoutTechnology () const
virtual DetectorType type () const final
 Type of element.
void addMultipleRowConnection (const int lowerRow, const std::vector< int > &connections)
 Add a new multiple connection for rows: lower diode row for which the connection scheme is given vector containing, for each diode, the readout cell row number to which the corresponding diode is connected.
std::string debugStringRepr () const
 Debug string representation.
PixelDiodeTree::DiodeProxy diodeProxyFromIdx (const std::array< PixelDiodeTree::IndexType, 2 > &idx) const
PixelDiodeTree::DiodeProxyWithPosition diodeProxyFromIdxCachePosition (const std::array< PixelDiodeTree::IndexType, 2 > &idx) const
PixelDiodeTree::DiodeProxy diodeProxyFromPosition (const Amg::Vector2D &pos) const
virtual double sinStripAngleReco (double phiCoord, double etaCoord) const
 Give strip angle in the reco frame.
virtual int strip1Dim (int strip, int row) const
 only relevant for SCT.
virtual Amg::Vector3D sensorCenter () const
 Return the centre of a sensor in the local reference frame.
virtual SiIntersect inDetector (const SiLocalPosition &localPosition, double phiTol, double etaTol) const
 Test if point is in the active part of the detector with specified tolerances.
void setSymmetry (bool phiSymmetric, bool etaSymmetric, bool depthSymmetric)
 Override default symmetries to prevent swapping of axes.
Axis etaAxis () const
 local axis corresponding to eta direction:
Axis phiAxis () const
 local axis corresponding to phi direction:
Axis depthAxis () const
 local axis corresponding to depth direction:
double thickness () const
 Method which returns thickness of the silicon wafer.
InDetDD::CarrierType carrierType () const
 Return carrier type (ie electrons or holes)
bool phiSymmetric () const
bool etaSymmetric () const
bool depthSymmetric () const
int readoutSide () const
 ReadoutSide.
virtual DetectorShape shape () const
 Shape of element.
virtual const Amg::Transform3D moduleShift () const

Static Public Member Functions

static unsigned int getFE (const PixelDiodeTree::DiodeProxy &diode_proxy)
static InDetDD::PixelDiodeType getDiodeType (const PixelDiodeTree::DiodeProxy &diode_proxy)

Private Member Functions

 PixelModuleDesign ()
 PixelModuleDesign (const PixelModuleDesign &design)
PixelModuleDesignoperator= (const PixelModuleDesign &design)

Private Attributes

PixelDiodeTree m_diodeTree
PixelReadoutScheme m_readoutScheme
CxxUtils::CachedUniquePtr< Trk::RectangleBoundsm_bounds
InDetDD::DetectorType m_detectorType
PixelReadoutTechnology m_readoutTechnology
bool m_is3D
Axis m_etaAxis
Axis m_phiAxis
Axis m_depthAxis
double m_thickness
InDetDD::CarrierType m_carrierType
bool m_phiSymmetric
bool m_etaSymmetric
bool m_depthSymmetric
bool m_readoutSidePosDepth

Detailed Description

Class used to describe the design of a module (diode segmentation and readout scheme)

  • to get the PixelReadoutCell connected to a PixelDiode
  • to get the list of PixelDiodes connected to a PixelReadoutCell
Author
Alessandro Fornaini
  • modified: Grant Gorfine, Nick Styles, Andreas Salzburger

Definition at line 45 of file PixelModuleDesign.h.

Member Enumeration Documentation

◆ Axis

Enumerator
xAxis 
yAxis 
zAxis 

Definition at line 59 of file DetectorDesign.h.

Constructor & Destructor Documentation

◆ PixelModuleDesign() [1/4]

InDetDD::PixelModuleDesign::PixelModuleDesign ( const double thickness,
const int circuitsPerColumn,
const int circuitsPerRow,
const int cellColumnsPerCircuit,
const int cellRowsPerCircuit,
const int diodeColumnsPerCircuit,
const int diodeRowsPerCircuit,
PixelDiodeTree && diode_tree,
InDetDD::CarrierType carrierType,
int readoutSide,
bool is3D,
InDetDD::DetectorType detectorType,
PixelReadoutTechnology readoutTechnology )

Constructor with parameters: local axis corresponding to eta direction local axis corresponding to phi direction local axis corresponding to depth direction thickness of silicon sensor number of circuits in one circuit column number of circuits in one circuit row number of cell columns per circuit number of cell rows per circuit number of diode columns connected to one circuit number of diode rows connected to one circuit.

Definition at line 62 of file PixelModuleDesign.cxx.

75 :
77 true,true,true, //if symmetry not explicitly set, assume fully symmetric
78 circuitsPerColumn,circuitsPerRow,cellColumnsPerCircuit,cellRowsPerCircuit,
79 diodeColumnsPerCircuit,diodeRowsPerCircuit,std::move(diode_tree),carrierType,readoutSide,
80 is3D,detectorType, readoutTechnology)
81{
82}
double thickness() const
Method which returns thickness of the silicon wafer.
InDetDD::CarrierType carrierType() const
Return carrier type (ie electrons or holes)
int readoutSide() const
ReadoutSide.

◆ PixelModuleDesign() [2/4]

InDetDD::PixelModuleDesign::PixelModuleDesign ( const double thickness,
const bool phiSymmetric,
const bool etaSymmetric,
const bool depthSymmetric,
const int circuitsPerColumn,
const int circuitsPerRow,
const int cellColumnsPerCircuit,
const int cellRowsPerCircuit,
const int diodeColumnsPerCircuit,
const int diodeRowsPerCircuit,
PixelDiodeTree && diode_tree,
InDetDD::CarrierType carrierType,
int readoutSide,
bool is3D,
InDetDD::DetectorType detectorType,
PixelReadoutTechnology readoutTechnology )

Definition at line 29 of file PixelModuleDesign.cxx.

45 :
46
51 m_diodeTree(std::move(diode_tree)),
52 m_readoutScheme(circuitsPerColumn,circuitsPerRow,
53 cellColumnsPerCircuit,cellRowsPerCircuit,
54 diodeColumnsPerCircuit,diodeRowsPerCircuit),
55 m_bounds(),
56 m_detectorType(detectorType),
57 m_readoutTechnology(readoutTechnology),
59{
60}
CxxUtils::CachedUniquePtr< Trk::RectangleBounds > m_bounds
PixelReadoutTechnology m_readoutTechnology
InDetDD::DetectorType m_detectorType
PixelReadoutScheme m_readoutScheme

◆ ~PixelModuleDesign()

virtual InDetDD::PixelModuleDesign::~PixelModuleDesign ( )
virtualdefault

◆ PixelModuleDesign() [3/4]

InDetDD::PixelModuleDesign::PixelModuleDesign ( )
private

◆ PixelModuleDesign() [4/4]

InDetDD::PixelModuleDesign::PixelModuleDesign ( const PixelModuleDesign & design)
private

Member Function Documentation

◆ addMultipleRowConnection()

void InDetDD::PixelModuleDesign::addMultipleRowConnection ( const int lowerRow,
const std::vector< int > & connections )
inline

Add a new multiple connection for rows: lower diode row for which the connection scheme is given vector containing, for each diode, the readout cell row number to which the corresponding diode is connected.

Definition at line 295 of file PixelModuleDesign.h.

297 {
298 m_readoutScheme.addMultipleRowConnection(lowerRow,connections);
299 }

◆ bounds()

const Trk::SurfaceBounds & InDetDD::PixelModuleDesign::bounds ( ) const
virtual

Element boundary.

Implements InDetDD::DetectorDesign.

Definition at line 267 of file PixelModuleDesign.cxx.

268{
269 // We create on demand as width and length are 0 when PixeModuleDesign first gets
270 // created.
271 if (not m_bounds) m_bounds.set(std::make_unique<Trk::RectangleBounds>(0.5*width(), 0.5*length()));
272 return *m_bounds;
273}
virtual double length() const
Method to calculate length of a module.
virtual double width() const
Method to calculate average width of a module.

◆ carrierType()

InDetDD::CarrierType InDetDD::DetectorDesign::carrierType ( ) const
inlineinherited

Return carrier type (ie electrons or holes)

Definition at line 275 of file DetectorDesign.h.

275 {
276 return m_carrierType;
277}
InDetDD::CarrierType m_carrierType

◆ cellIdInRange()

SiCellId InDetDD::PixelModuleDesign::cellIdInRange ( const SiCellId & cellId) const
virtual

Check if cell is in range.

Returns the original cellId if it is in range, otherwise it returns an invalid id.

Implements InDetDD::DetectorDesign.

Definition at line 276 of file PixelModuleDesign.cxx.

277{
278 return (isInsideMatrix(cellId) ? cellId : SiCellId());
279}
bool isInsideMatrix(const SiCellId &cellId) const
Return true if the given index describes a pixel of this matrix.

◆ cellIdOfPosition()

SiCellId InDetDD::PixelModuleDesign::cellIdOfPosition ( const SiLocalPosition & localPos) const
virtual

position -> id

Implements InDetDD::DetectorDesign.

Definition at line 214 of file PixelModuleDesign.cxx.

215{
216 InDetDD::PixelDiodeTree::Vector2D pos{ localPosition.xPhi(),localPosition.xEta() };
217 auto idx=m_diodeTree.findFromPos(pos);
218 if (!isInsideMatrix(idx)) {
219 return SiCellId();
220 }
221 return SiCellId(idx[0],idx[1]);
222}

◆ columns()

int InDetDD::PixelModuleDesign::columns ( ) const
inline

Number of cell columns per module:

Definition at line 331 of file PixelModuleDesign.h.

332 {
333 return m_readoutScheme.columns();
334 }

◆ columnsPerCircuit()

int InDetDD::PixelModuleDesign::columnsPerCircuit ( ) const
inline

Number of cell columns per circuit:

Definition at line 321 of file PixelModuleDesign.h.

322 {
323 return m_readoutScheme.columnsPerCircuit();
324 }

◆ connectedCell()

SiCellId InDetDD::PixelModuleDesign::connectedCell ( const SiReadoutCellId & readoutId,
int number ) const
virtual

readout id -> id of connected diodes.

parameter number = 0 will refer to the primary diode and in general the cell number will be the same. NB. SiCellId cellId = connectedCell(readoutId, 0) will in general be equivalent to SiCellId cellId = readoutId

Implements InDetDD::DetectorDesign.

Definition at line 230 of file PixelModuleDesign.cxx.

231{
232 return m_readoutScheme.connectedCell(readoutId, number);
233}
std::string number(const double &d, const std::string &s)
Definition utils.cxx:186

◆ debugStringRepr()

std::string InDetDD::PixelModuleDesign::debugStringRepr ( ) const
inline

Debug string representation.

Definition at line 395 of file PixelModuleDesign.h.

396 {
397 return m_diodeTree.debugStringRepr();
398 }

◆ depthAxis()

DetectorDesign::Axis InDetDD::DetectorDesign::depthAxis ( ) const
inlineinherited

local axis corresponding to depth direction:

Definition at line 267 of file DetectorDesign.h.

267 {
268 return m_depthAxis;
269}

◆ depthSymmetric()

bool InDetDD::DetectorDesign::depthSymmetric ( ) const
inlineinherited

Definition at line 287 of file DetectorDesign.h.

287 {
288 return m_depthSymmetric;
289}

◆ diodeProxyFromIdx()

PixelDiodeTree::DiodeProxy InDetDD::PixelModuleDesign::diodeProxyFromIdx ( const std::array< PixelDiodeTree::IndexType, 2 > & idx) const
inline

Definition at line 248 of file PixelModuleDesign.h.

248 {
249 return m_diodeTree.diodeProxyFromIdx(idx);
250 }

◆ diodeProxyFromIdxCachePosition()

PixelDiodeTree::DiodeProxyWithPosition InDetDD::PixelModuleDesign::diodeProxyFromIdxCachePosition ( const std::array< PixelDiodeTree::IndexType, 2 > & idx) const
inline

Definition at line 251 of file PixelModuleDesign.h.

251 {
252 return m_diodeTree.diodeProxyFromIdxCachePosition(idx);
253 }

◆ diodeProxyFromPosition()

PixelDiodeTree::DiodeProxy InDetDD::PixelModuleDesign::diodeProxyFromPosition ( const Amg::Vector2D & pos) const
inline

Definition at line 254 of file PixelModuleDesign.h.

254 {
255 return m_diodeTree.diodeProxyFromPos(pos);
256 }

◆ distanceToDetectorEdge()

void InDetDD::PixelModuleDesign::distanceToDetectorEdge ( const SiLocalPosition & localPosition,
double & etaDist,
double & phiDist ) const
virtual

Returns distance to nearest detector active edge +ve = inside -ve = outside.

Implements InDetDD::DetectorDesign.

Definition at line 88 of file PixelModuleDesign.cxx.

90{
91 // This assume element is centered at 0,0
92 // As the calculation is symmetric around 0,0 we only have to test it for one side.
93 double xEta = abs(localPosition.xEta());
94 double xPhi = abs(localPosition.xPhi());
95
96 double xEtaEdge = 0.5*length();
97 double xPhiEdge = 0.5*width();
98
99 // Distance to top/bottom
100 etaDist = xEtaEdge - xEta;
101
102 // Distance to right/left edge
103 phiDist = xPhiEdge - xPhi;
104
105}
double xPhi() const
position along phi direction:
double xEta() const
position along eta direction:

◆ endsOfStrip()

std::pair< SiLocalPosition, SiLocalPosition > InDetDD::PixelModuleDesign::endsOfStrip ( const SiLocalPosition & position) const
virtual

Special method for SCT (irrelevant here):

Implements InDetDD::SiDetectorDesign.

Definition at line 135 of file PixelModuleDesign.cxx.

136{
137 return std::pair<SiLocalPosition,SiLocalPosition>(position,position);
138}

◆ etaAxis()

DetectorDesign::Axis InDetDD::DetectorDesign::etaAxis ( ) const
inlineinherited

local axis corresponding to eta direction:

Definition at line 259 of file DetectorDesign.h.

259 {
260 return m_etaAxis;
261}

◆ etaPitch()

double InDetDD::PixelModuleDesign::etaPitch ( ) const
virtual

Pitch in eta direction.

Implements InDetDD::DetectorDesign.

Definition at line 208 of file PixelModuleDesign.cxx.

209{
210 // Average pitch
211 return length() / columns();
212}
int columns() const
Number of cell columns per module:

◆ etaSymmetric()

bool InDetDD::DetectorDesign::etaSymmetric ( ) const
inlineinherited

Definition at line 283 of file DetectorDesign.h.

283 {
284 return m_etaSymmetric;
285}

◆ gangedCell()

SiCellId InDetDD::PixelModuleDesign::gangedCell ( const SiCellId & cellId) const
virtual

If cell is ganged return the other cell, otherwise return an invalid id.

Implements InDetDD::SiDetectorDesign.

Definition at line 236 of file PixelModuleDesign.cxx.

237{
238 return m_readoutScheme.gangedCell(cellId);
239}

◆ getDiodeType()

InDetDD::PixelDiodeType InDetDD::PixelModuleDesign::getDiodeType ( const PixelDiodeTree::DiodeProxy & diode_proxy)
inlinestatic

Definition at line 261 of file PixelModuleDesign.h.

261 {
262 return static_cast<InDetDD::PixelDiodeType>(diode_proxy.diodeAttribute());
263 }

◆ getFE()

unsigned int InDetDD::PixelModuleDesign::getFE ( const PixelDiodeTree::DiodeProxy & diode_proxy)
inlinestatic

Definition at line 258 of file PixelModuleDesign.h.

258 {
259 return diode_proxy.subMatrixAttribute();
260 }

◆ getReadoutTechnology()

PixelReadoutTechnology InDetDD::PixelModuleDesign::getReadoutTechnology ( ) const
inline

Definition at line 391 of file PixelModuleDesign.h.

391 {
392 return m_readoutTechnology;
393 }

◆ inDetector()

SiIntersect InDetDD::DetectorDesign::inDetector ( const SiLocalPosition & localPosition,
double phiTol,
double etaTol ) const
virtualinherited

Test if point is in the active part of the detector with specified tolerances.

Reimplemented in InDetDD::SCT_ModuleSideDesign, and SCT_ModuleSideDesign.

Definition at line 106 of file DetectorDesign.cxx.

107 {
108 double etaDist = 0;
109 double phiDist = 0;
110
111 distanceToDetectorEdge(localPosition, etaDist, phiDist);
112
113 SiIntersect state;
114
115 if (phiDist < -phiTol || etaDist < -etaTol) {
116 state.setOut();
117 return state;
118 }
119
120 if (phiDist > phiTol && etaDist > etaTol) {
121 state.setIn();
122 return state;
123 }
124
125 // Near boundary.
126 state.setNearBoundary();
127 return state;
128}
virtual void distanceToDetectorEdge(const SiLocalPosition &localPosition, double &etaDist, double &phiDist) const =0
Returns distance to nearest detector active edge +ve = inside -ve = outside.

◆ intersectionLength()

double InDetDD::PixelModuleDesign::intersectionLength ( const SiCellId & diode1,
const SiCellId & diode2 ) const
inline

Compute the intersection length of two diodes: return: the intersection length when the two diodes are projected on one of the two axis, or 0 in case of no intersection or problem input: the two diodes for which the intersection length is computed.

Definition at line 367 of file PixelModuleDesign.h.

369 {
370 PixelDiodeTree::DiodeProxy diode1_proxy=diodeProxyFromIdx(PixelDiodeTree::makeCellIndex(diode1.phiIndex(),
371 diode1.etaIndex()));
372 std::array<int,2> abs_delta;
373 abs_delta[0] = std::abs(diode1.phiIndex() - diode2.phiIndex());
374 abs_delta[1] = std::abs(diode1.etaIndex() - diode2.etaIndex());
375
376 if (abs_delta[0]+abs_delta[1]==1) {
377 // i.e. delta[0]=1 or delta[1]=1 since delta[0]>=0 and delta[1]>=0
378 // diode1_proxy.width()[1] for delta[0]==1 && delta[1]==0 <= delta[0]==1 because sum delta[i]=1
379 // diode1_proxy.width()[0] for delta[0]==0 && delta[1]==1 <= delta[0]!=1
380 // ==
381 return diode1_proxy.width() [ abs_delta[0]==1 ];
382 }
383 return 0.;
384 }
static constexpr std::array< PixelDiodeTree::CellIndexType, 2 > makeCellIndex(T local_x_idx, T local_y_idx)
Create a 2D cell index from the indices in local-x (phi, row) and local-y (eta, column) direction.
PixelDiodeTree::DiodeProxy diodeProxyFromIdx(const std::array< PixelDiodeTree::IndexType, 2 > &idx) const
int phiIndex() const
Get phi index. Equivalent to strip().
Definition SiCellId.h:122
int etaIndex() const
Get eta index.
Definition SiCellId.h:114

◆ is3D()

bool InDetDD::PixelModuleDesign::is3D ( ) const
inlinevirtual

Definition at line 386 of file PixelModuleDesign.h.

387 {
388 return m_is3D;
389 }

◆ isInsideMatrix() [1/3]

bool InDetDD::PixelModuleDesign::isInsideMatrix ( const Amg::Vector2D & local_position) const
inline

Return true if the given position is a position within one of the pixels of this matrix.

Definition at line 407 of file PixelModuleDesign.h.

407 {
408 return m_diodeTree.isInsideMatrix(local_position);
409 }

◆ isInsideMatrix() [2/3]

bool InDetDD::PixelModuleDesign::isInsideMatrix ( const SiCellId & cellId) const
inline

Return true if the given index describes a pixel of this matrix.

Definition at line 400 of file PixelModuleDesign.h.

400 {
401 return m_diodeTree.isInsideMatrix( std::array<PixelDiodeTree::CellIndexType,2>{cellId.phiIndex(),
402 cellId.etaIndex()});
403 }

◆ isInsideMatrix() [3/3]

bool InDetDD::PixelModuleDesign::isInsideMatrix ( const std::array< InDetDD::PixelDiodeTree::IndexType, 2 > & idx) const
inline

Return true if the given index describes a pixel of this matrix.

Definition at line 404 of file PixelModuleDesign.h.

404 {
405 return m_diodeTree.isInsideMatrix(idx);
406 }

◆ length()

double InDetDD::PixelModuleDesign::length ( ) const
virtual

Method to calculate length of a module.

Implements InDetDD::DetectorDesign.

Definition at line 142 of file PixelModuleDesign.cxx.

143{
144 return m_diodeTree.totalWidth()[1]; // eta
145}

◆ localPositionOfCell()

SiLocalPosition InDetDD::PixelModuleDesign::localPositionOfCell ( const SiCellId & cellId) const
virtual

readout or diode id -> position.

Implements InDetDD::DetectorDesign.

Definition at line 117 of file PixelModuleDesign.cxx.

118{
119 std::array<InDetDD::PixelDiodeTree::CellIndexType,2> diode_idx
121 auto pos=m_diodeTree.findFromIdx(diode_idx);
122 return SiLocalPosition(Amg::Vector2D{pos[0],pos[1]});
123}
Eigen::Matrix< double, 2, 1 > Vector2D

◆ maxWidth()

double InDetDD::PixelModuleDesign::maxWidth ( ) const
virtual

Method to calculate maximum width of a module.

Implements InDetDD::DetectorDesign.

Definition at line 160 of file PixelModuleDesign.cxx.

161{
162 return width();
163}

◆ minWidth()

double InDetDD::PixelModuleDesign::minWidth ( ) const
virtual

Method to calculate minimum width of a module.

Implements InDetDD::DetectorDesign.

Definition at line 154 of file PixelModuleDesign.cxx.

155{
156 return width();
157}

◆ moduleShift()

const Amg::Transform3D InDetDD::DetectorDesign::moduleShift ( ) const
virtualinherited

Reimplemented in InDetDD::StripBoxDesign.

Definition at line 130 of file DetectorDesign.cxx.

130 {
131 return Amg::Transform3D::Identity();
132 }

◆ nearBondGap()

bool InDetDD::PixelModuleDesign::nearBondGap ( const SiLocalPosition & localPosition,
double etaTol ) const
inlinevirtual

Test if near bond gap within tolerances Only relevant for SCT.

Always returns false for pixels.

Implements InDetDD::SiDetectorDesign.

Definition at line 341 of file PixelModuleDesign.h.

342 {
343 // No bond gap in pixel module
344 return false;
345 }

◆ neighboursOfCell()

void InDetDD::PixelModuleDesign::neighboursOfCell ( const SiCellId & cellId,
std::vector< SiCellId > & neighbours ) const
inlinevirtual

Get the neighbouring diodes of a given diode: Cell for which the neighbours must be found List of cells which are neighbours of the given one.

Implements InDetDD::DetectorDesign.

Definition at line 358 of file PixelModuleDesign.h.

360 {
361
362 m_diodeTree.neighboursOfCell(PixelDiodeTree::makeCellIndex(cellId.phiIndex(),cellId.etaIndex()),
364 neighbours);
365 }
int rows() const
Number of cell rows per module:

◆ numberOfCircuits()

int InDetDD::PixelModuleDesign::numberOfCircuits ( ) const
inline

Total number of circuits:

Definition at line 306 of file PixelModuleDesign.h.

307 {
308 return m_readoutScheme.numberOfCircuits();
309 }

◆ numberOfCircuitsPerColumn()

int InDetDD::PixelModuleDesign::numberOfCircuitsPerColumn ( ) const
inline

Number of circuits per column:

Definition at line 311 of file PixelModuleDesign.h.

312 {
313 return m_readoutScheme.numberOfCircuitsPerColumn();
314 }

◆ numberOfCircuitsPerRow()

int InDetDD::PixelModuleDesign::numberOfCircuitsPerRow ( ) const
inline

Number of circuits per row:

Definition at line 316 of file PixelModuleDesign.h.

317 {
318 return m_readoutScheme.numberOfCircuitsPerRow();
319 }

◆ numberOfConnectedCells()

int InDetDD::PixelModuleDesign::numberOfConnectedCells ( const SiReadoutCellId & readoutId) const
virtual

readout id -> id of connected diodes

Implements InDetDD::DetectorDesign.

Definition at line 224 of file PixelModuleDesign.cxx.

225{
226 return m_readoutScheme.numberOfConnectedCells(readoutId);
227}

◆ numberOfDiodes()

int InDetDD::PixelModuleDesign::numberOfDiodes ( ) const
inline

Total number of diodes:

Definition at line 301 of file PixelModuleDesign.h.

302 {
304 }
int rowsPerCircuit() const
Number of cell rows per circuit:
int numberOfCircuits() const
Total number of circuits:
int columnsPerCircuit() const
Number of cell columns per circuit:

◆ operator=()

PixelModuleDesign & InDetDD::PixelModuleDesign::operator= ( const PixelModuleDesign & design)
private

◆ parameters()

SiDiodesParameters InDetDD::PixelModuleDesign::parameters ( const SiCellId & cellId) const
virtual

readout or diode id -> position, size

Implements InDetDD::DetectorDesign.

Definition at line 107 of file PixelModuleDesign.cxx.

108{
109 std::array<InDetDD::PixelDiodeTree::CellIndexType,2> diode_idx
111 InDetDD::PixelDiodeTree::DiodeProxyWithPosition si_param ( m_diodeTree.diodeProxyFromIdxCachePosition(diode_idx));
112
113 return SiDiodesParameters(SiLocalPosition(Amg::Vector2D{si_param.position()[0],si_param.position()[1]}),
114 SiLocalPosition(Amg::Vector2D{si_param.width()[0],si_param.width()[1]}));
115}

◆ phiAxis()

DetectorDesign::Axis InDetDD::DetectorDesign::phiAxis ( ) const
inlineinherited

local axis corresponding to phi direction:

Definition at line 263 of file DetectorDesign.h.

263 {
264 return m_phiAxis;
265}

◆ phiMeasureSegment()

HepGeom::Vector3D< double > InDetDD::PixelModuleDesign::phiMeasureSegment ( const SiLocalPosition & ) const
virtual

Helper method for stereo angle computation.

Implements InDetDD::SiDetectorDesign.

Definition at line 127 of file PixelModuleDesign.cxx.

128{
129 HepGeom::Vector3D<double> segment;
130 segment[etaAxis()]=1;
131 return segment;
132}
Axis etaAxis() const
local axis corresponding to eta direction:

◆ phiPitch() [1/2]

double InDetDD::PixelModuleDesign::phiPitch ( ) const
virtual

Pitch in phi direction.

Implements InDetDD::DetectorDesign.

Definition at line 192 of file PixelModuleDesign.cxx.

193{
194 // Average pitch.
195 return width() / rows();
196}

◆ phiPitch() [2/2]

double InDetDD::PixelModuleDesign::phiPitch ( const SiLocalPosition & localPosition) const
virtual

Pitch in phi direction.

Implements InDetDD::DetectorDesign.

Definition at line 200 of file PixelModuleDesign.cxx.

201{
202 // Cheat since we know its constant.
203 return phiPitch();
204}
virtual double phiPitch() const
Pitch in phi direction.

◆ phiSymmetric()

bool InDetDD::DetectorDesign::phiSymmetric ( ) const
inlineinherited

Definition at line 279 of file DetectorDesign.h.

279 {
280 return m_phiSymmetric;
281}

◆ positionFromColumnRow()

SiLocalPosition InDetDD::PixelModuleDesign::positionFromColumnRow ( const int column,
const int row ) const

Given row and column index of a diode, return position of diode center ALTERNATIVE/PREFERED way is to use localPositionOfCell(const SiCellId & cellId) or rawLocalPositionOfCell method in SiDetectorElement.

DEPRECATED

Definition at line 260 of file PixelModuleDesign.cxx.

261{
262 return localPositionOfCell(SiCellId(row,column));
263}
virtual SiLocalPosition localPositionOfCell(const SiCellId &cellId) const
readout or diode id -> position.

◆ readoutIdOfCell()

SiReadoutCellId InDetDD::PixelModuleDesign::readoutIdOfCell ( const SiCellId & cellId) const
virtual

diode id -> readout id

Implements InDetDD::DetectorDesign.

Definition at line 242 of file PixelModuleDesign.cxx.

243{
244 return m_readoutScheme.readoutIdOfCell(cellId);
245}

◆ readoutIdOfPosition()

SiReadoutCellId InDetDD::PixelModuleDesign::readoutIdOfPosition ( const SiLocalPosition & localPos) const
virtual

position -> id

Implements InDetDD::DetectorDesign.

Definition at line 249 of file PixelModuleDesign.cxx.

250{
251 InDetDD::PixelDiodeTree::Vector2D pos{ localPosition.xPhi(),localPosition.xEta() };
252 auto idx=m_diodeTree.findFromPos(pos);
253 return m_readoutScheme.readoutIdOfCell(SiCellId(idx[0],idx[1]));
254}

◆ readoutSide()

int InDetDD::DetectorDesign::readoutSide ( ) const
inlineinherited

ReadoutSide.

+1 = postive depth side, -1 = negative depth side.

Definition at line 291 of file DetectorDesign.h.

291 {
292 return (m_readoutSidePosDepth) ? +1 : -1;
293}

◆ rows()

int InDetDD::PixelModuleDesign::rows ( ) const
inline

Number of cell rows per module:

Definition at line 336 of file PixelModuleDesign.h.

337 {
338 return m_readoutScheme.rows();
339 }

◆ rowsPerCircuit()

int InDetDD::PixelModuleDesign::rowsPerCircuit ( ) const
inline

Number of cell rows per circuit:

Definition at line 326 of file PixelModuleDesign.h.

327 {
328 return m_readoutScheme.rowsPerCircuit();
329 }

◆ sensorCenter()

Amg::Vector3D InDetDD::DetectorDesign::sensorCenter ( ) const
virtualinherited

Return the centre of a sensor in the local reference frame.

For most designs, this is the origin of the local reference frame. For StripStereoAnnulusDesign, this is not the case (coordinate origin is "on the beamline")

Reimplemented in InDetDD::StripAnnulusDesign, and InDetDD::StripStereoAnnulusDesign.

Definition at line 60 of file DetectorDesign.cxx.

60 {
61 return Amg::Vector3D(0., 0., 0.);
62}
Eigen::Matrix< double, 3, 1 > Vector3D

◆ setSymmetry()

void InDetDD::DetectorDesign::setSymmetry ( bool phiSymmetric,
bool etaSymmetric,
bool depthSymmetric )
inherited

Override default symmetries to prevent swapping of axes.

NB. Flags can be changed from true to false but not false to true.

Definition at line 65 of file DetectorDesign.cxx.

66 {
67 // Flags can be changed from true to false but not false to true.
68 if (m_phiSymmetric) {
70 }
71 else if (phiSymmetric) {
72 std::cout <<
73 "SiDetectorDesign: WARNING! Attempt to allow swapping of xPhi axis direction ignored."
74 << std::endl;
75 }
76
77 if (m_etaSymmetric) {
79 }
80 else if (etaSymmetric) {
81 std::cout <<
82 "SiDetectorDesign: WARNING! Attempt to allow swapping of xEta axis direction ignored."
83 << std::endl;
84 }
85
86 if (m_depthSymmetric) {
88 }
89 else if (depthSymmetric) {
90 std::cout <<
91 "SiDetectorDesign: WARNING! Attempt to allow swapping of xDepth axis direction ignored."
92 << std::endl;
93 }
94}

◆ shape()

DetectorShape InDetDD::DetectorDesign::shape ( ) const
virtualinherited

Shape of element.

Reimplemented in InDetDD::SCT_ForwardModuleSideDesign, and InDetDD::StripStereoAnnulusDesign.

Definition at line 96 of file DetectorDesign.cxx.

96 {
97 // Default is Box.
98 return InDetDD::Box;
99}

◆ sinStripAngleReco()

double InDetDD::SiDetectorDesign::sinStripAngleReco ( double phiCoord,
double etaCoord ) const
inlinevirtualinherited

Give strip angle in the reco frame.

Reimplemented in InDetDD::SCT_ForwardModuleSideDesign, and InDetDD::StripStereoAnnulusDesign.

Definition at line 132 of file SiDetectorDesign.h.

132 {
133 return 0.0; // pixel and barrel strip sensors always zero
134 }

◆ strip1Dim()

int InDetDD::SiDetectorDesign::strip1Dim ( int strip,
int row ) const
inlinevirtualinherited

only relevant for SCT.

Return strip1Dim(int strip, int row) if SCT; otherwise -1

Reimplemented in InDetDD::SCT_ModuleSideDesign, InDetDD::StripBoxDesign, InDetDD::StripStereoAnnulusDesign, and SCT_ModuleSideDesign.

Definition at line 136 of file SiDetectorDesign.h.

136 {
137 return -1.0;
138 }

◆ swapHitEtaReadoutDirection()

bool InDetDD::PixelModuleDesign::swapHitEtaReadoutDirection ( ) const
inlinevirtual

Implements InDetDD::DetectorDesign.

Definition at line 352 of file PixelModuleDesign.h.

353 {
354 return true;
355 }

◆ swapHitPhiReadoutDirection()

bool InDetDD::PixelModuleDesign::swapHitPhiReadoutDirection ( ) const
inlinevirtual

Return true if hit local direction is the same as readout direction.

Implements InDetDD::DetectorDesign.

Definition at line 347 of file PixelModuleDesign.h.

348 {
349 return true;
350 }

◆ thickness()

double InDetDD::DetectorDesign::thickness ( ) const
inlineinherited

Method which returns thickness of the silicon wafer.

Definition at line 271 of file DetectorDesign.h.

271 {
272 return m_thickness;
273}

◆ type()

DetectorType InDetDD::PixelModuleDesign::type ( ) const
finalvirtual

Type of element.

Reimplemented from InDetDD::DetectorDesign.

Definition at line 281 of file PixelModuleDesign.cxx.

282{
283 return m_detectorType;
284}

◆ width()

double InDetDD::PixelModuleDesign::width ( ) const
virtual

Method to calculate average width of a module.

Implements InDetDD::DetectorDesign.

Definition at line 148 of file PixelModuleDesign.cxx.

149{
150 return m_diodeTree.totalWidth()[0]; // phi
151}

◆ widthFromColumnRange()

double InDetDD::PixelModuleDesign::widthFromColumnRange ( const int colMin,
const int colMax ) const

Method to calculate eta width from a column range.

Definition at line 167 of file PixelModuleDesign.cxx.

168{
169 SiCellId idMin(0, colMin);
170 SiCellId idMax(0, colMax);
171
172 double minEta = parameters(idMin).xEtaMin();
173 double maxEta = parameters(idMax).xEtaMax();
174
175 return fabs(maxEta-minEta);
176}
virtual SiDiodesParameters parameters(const SiCellId &cellId) const
readout or diode id -> position, size
double xEtaMin() const
boundaries of the diodes:
constexpr float maxEta

◆ widthFromRowRange()

double InDetDD::PixelModuleDesign::widthFromRowRange ( const int rowMin,
const int rowMax ) const

Method to calculate phi width from a row range.

Definition at line 179 of file PixelModuleDesign.cxx.

180{
181
182 SiCellId idMin(rowMin, 0);
183 SiCellId idMax(rowMax, 0);
184 double minPhi = parameters(idMin).xPhiMin();
185 double maxPhi = parameters(idMax).xPhiMax();
186
187 return fabs(maxPhi-minPhi);
188}

Member Data Documentation

◆ m_bounds

CxxUtils::CachedUniquePtr<Trk::RectangleBounds> InDetDD::PixelModuleDesign::m_bounds
private

Definition at line 285 of file PixelModuleDesign.h.

◆ m_carrierType

InDetDD::CarrierType InDetDD::DetectorDesign::m_carrierType
privateinherited

Definition at line 240 of file DetectorDesign.h.

◆ m_depthAxis

Axis InDetDD::DetectorDesign::m_depthAxis
privateinherited

Definition at line 238 of file DetectorDesign.h.

◆ m_depthSymmetric

bool InDetDD::DetectorDesign::m_depthSymmetric
privateinherited

Definition at line 244 of file DetectorDesign.h.

◆ m_detectorType

InDetDD::DetectorType InDetDD::PixelModuleDesign::m_detectorType
private

Definition at line 286 of file PixelModuleDesign.h.

◆ m_diodeTree

PixelDiodeTree InDetDD::PixelModuleDesign::m_diodeTree
private

Definition at line 283 of file PixelModuleDesign.h.

◆ m_etaAxis

Axis InDetDD::DetectorDesign::m_etaAxis
privateinherited

Definition at line 236 of file DetectorDesign.h.

◆ m_etaSymmetric

bool InDetDD::DetectorDesign::m_etaSymmetric
privateinherited

Definition at line 243 of file DetectorDesign.h.

◆ m_is3D

bool InDetDD::PixelModuleDesign::m_is3D
private

Definition at line 288 of file PixelModuleDesign.h.

◆ m_phiAxis

Axis InDetDD::DetectorDesign::m_phiAxis
privateinherited

Definition at line 237 of file DetectorDesign.h.

◆ m_phiSymmetric

bool InDetDD::DetectorDesign::m_phiSymmetric
privateinherited

Definition at line 242 of file DetectorDesign.h.

◆ m_readoutScheme

PixelReadoutScheme InDetDD::PixelModuleDesign::m_readoutScheme
private

Definition at line 284 of file PixelModuleDesign.h.

◆ m_readoutSidePosDepth

bool InDetDD::DetectorDesign::m_readoutSidePosDepth
privateinherited

Definition at line 246 of file DetectorDesign.h.

◆ m_readoutTechnology

PixelReadoutTechnology InDetDD::PixelModuleDesign::m_readoutTechnology
private

Definition at line 287 of file PixelModuleDesign.h.

◆ m_thickness

double InDetDD::DetectorDesign::m_thickness
privateinherited

Definition at line 239 of file DetectorDesign.h.


The documentation for this class was generated from the following files: