ATLAS Offline Software
Loading...
Searching...
No Matches
HGTD_ModuleDesign.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3*/
4
6// HGTD_ModuleDesign.h, (c) ATLAS Detector software
8
9#ifndef HGTD_READOUTGEOMETRY_HGTD_MODULEDESIGN_H
10#define HGTD_READOUTGEOMETRY_HGTD_MODULEDESIGN_H
11
12// base class
15
16// Data member classes
19
20// Other includes
22
23namespace Trk{
24 class SurfaceBounds;
25}
26
27namespace InDetDD {
28 class SiLocalPosition;
29 class PixelDiodeMatrix;
30
42
44
46 // Public methods:
48public:
49
51 // Constructors/destructor:
53
67 const int circuitsPerColumn,
68 const int circuitsPerRow,
69 const int cellColumnsPerCircuit,
70 const int cellRowsPerCircuit,
71 const int diodeColumnsPerCircuit,
72 const int diodeRowsPerCircuit,
73 std::shared_ptr<const PixelDiodeMatrix> matrix,
75 int readoutSide,
78
79 // Destructor:
80 virtual ~HGTD_ModuleDesign();
81
83 // Const methods:
85
89 virtual void distanceToDetectorEdge(const SiLocalPosition & localPosition,
90 double & etaDist, double & phiDist) const;
91
93 double sensorLeftColumn() const;
94 double sensorRightColumn() const;
95 double sensorLeftRow() const;
96 double sensorRightRow() const;
97
99 int numberOfDiodes() const;
100
102 int numberOfCircuits() const;
103
105 int columnsPerCircuit() const;
106
108 int rowsPerCircuit() const;
109
111 int columns() const;
112
114 int rows() const;
115
117 virtual double length() const;
118
120 virtual double width() const;
121
123 virtual double minWidth() const;
124
126 virtual double maxWidth() const;
127
129 virtual double phiPitch() const;
130
132 virtual double phiPitch(const SiLocalPosition & localPosition) const;
133
135 virtual double etaPitch() const;
136
138 double widthFromColumnRange(const int colMin, const int colMax) const;
139
141 double widthFromRowRange(const int rowMin, const int rowMax) const;
142
144 virtual bool swapHitPhiReadoutDirection() const;
145 virtual bool swapHitEtaReadoutDirection() const;
146
148 virtual const Trk::SurfaceBounds & bounds() const;
149
151 virtual SiDiodesParameters parameters(const SiCellId & cellId) const;
152 virtual SiLocalPosition localPositionOfCell(const SiCellId & cellId) const;
153
155 virtual int numberOfConnectedCells(const SiReadoutCellId & readoutId) const;
156 virtual SiCellId connectedCell(const SiReadoutCellId & readoutId, int number) const;
157
159 virtual SiReadoutCellId readoutIdOfCell(const SiCellId & cellId) const;
160
162 virtual SiReadoutCellId readoutIdOfPosition(const SiLocalPosition & localPos) const;
163 virtual SiCellId cellIdOfPosition(const SiLocalPosition & localPos) const;
164
168 virtual void neighboursOfCell(const SiCellId & cellId, std::vector<SiCellId> &neighbours) const;
169
174 double intersectionLength(const SiCellId &diode1, const SiCellId &diode2) const;
175
177 virtual SiCellId cellIdInRange(const SiCellId & cellId) const;
178
180 // Non-const methods:
182
187 void addMultipleRowConnection(const int lowerRow,
188 const std::vector<int> &connections);
189
191 // Private methods:
193private:
195
197 // Private data:
199private:
203
204 // Disallow Copy and assignment;
207
208};
209
211// Inline methods:
213
214inline void HGTD_ModuleDesign::addMultipleRowConnection(const int lowerRow,
215 const std::vector<int> &connections)
216{
217 m_readoutScheme.addMultipleRowConnection(lowerRow,connections);
218}
219
221{
222 return m_diodeMap.leftColumn();
223}
224
226{
227 return m_diodeMap.rightColumn();
228}
229
231{
232 return m_diodeMap.leftRow();
233}
234
236{
237 return m_diodeMap.rightRow();
238}
239
241{
242 return m_diodeMap.diodes();
243}
244
246{
247 return m_readoutScheme.numberOfCircuits();
248}
249
251{
252 return m_readoutScheme.columnsPerCircuit();
253}
254
256{
257 return m_readoutScheme.rowsPerCircuit();
258}
259
261{
262 return m_readoutScheme.columns();
263}
264
265inline int HGTD_ModuleDesign::rows() const
266{
267 return m_readoutScheme.rows();
268}
269
271{
272 return true;
273}
274
276{
277 return true;
278}
279
281 std::vector<SiCellId> &neighbours) const
282{
283 return m_diodeMap.neighboursOfCell(cellId, neighbours);
284}
285
287 const SiCellId &diode2) const
288{
289 return m_diodeMap.intersectionLength(diode1, diode2);
290}
291
292} // namespace InDetDD
293
294#endif // HGTD_READOUTGEOMETRY_HGTD_MODULEDESIGN_H
DetectorDesign(double thickness, bool phiSymmetric, bool etaSymmetric, bool depthSymmetric, InDetDD::CarrierType carrierType, int readoutSide)
Constructor.
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.
virtual SiCellId connectedCell(const SiReadoutCellId &readoutId, int number) const
readout id -> id of connected diodes.
virtual SiReadoutCellId readoutIdOfPosition(const SiLocalPosition &localPos) const
position -> id
HGTD_ModuleDesign(const HGTD_ModuleDesign &design)
virtual double width() const
Method to calculate average width of a module.
double intersectionLength(const SiCellId &diode1, const SiCellId &diode2) const
Compute the intersection length of two diodes: return: the intersection length when the two diodes ar...
HGTD_ModuleDesign & operator=(const HGTD_ModuleDesign &design)
virtual bool swapHitPhiReadoutDirection() const
Return true if hit local direction is the same as readout direction.
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 vect...
virtual SiCellId cellIdOfPosition(const SiLocalPosition &localPos) const
position -> id
int rows() const
Number of cell rows per module:
virtual SiReadoutCellId readoutIdOfCell(const SiCellId &cellId) const
diode id -> readout id
int columnsPerCircuit() const
Number of cell columns per circuit:
virtual bool swapHitEtaReadoutDirection() const
virtual SiDiodesParameters parameters(const SiCellId &cellId) const
readout or diode id -> position, size
int numberOfDiodes() const
Total number of diodes:
int columns() const
Number of cell columns per module:
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 cel...
virtual const Trk::SurfaceBounds & bounds() const
Element boundary.
PixelReadoutScheme m_readoutScheme
double widthFromColumnRange(const int colMin, const int colMax) const
Method to calculate eta width from a column range.
virtual double etaPitch() const
Pitch in eta direction.
Trk::RectangleBounds m_bounds
double widthFromRowRange(const int rowMin, const int rowMax) const
Method to calculate phi width from a row range.
HGTD_ModuleDesign(double thickness, const int circuitsPerColumn, const int circuitsPerRow, const int cellColumnsPerCircuit, const int cellRowsPerCircuit, const int diodeColumnsPerCircuit, const int diodeRowsPerCircuit, std::shared_ptr< const PixelDiodeMatrix > matrix, InDetDD::CarrierType carrierType, int readoutSide, DetectorDesign::Axis yDirection=InDetDD::DetectorDesign::xAxis, DetectorDesign::Axis depthDirection=InDetDD::DetectorDesign::zAxis)
Constructor.
virtual double phiPitch() const
Pitch in phi direction.
virtual double maxWidth() const
Method to calculate maximum width of a module.
virtual double length() const
Method to calculate length of a module.
virtual SiLocalPosition localPositionOfCell(const SiCellId &cellId) const
readout or diode id -> position.
int numberOfCircuits() const
Total number of circuits:
virtual double minWidth() const
Method to calculate minimum width of a module.
virtual SiCellId cellIdInRange(const SiCellId &cellId) const
Check if cell is in range.
virtual int numberOfConnectedCells(const SiReadoutCellId &readoutId) const
readout id -> id of connected diodes
virtual void distanceToDetectorEdge(const SiLocalPosition &localPosition, double &etaDist, double &phiDist) const
Returns distance to nearest detector active edge +ve = inside -ve = outside.
double sensorLeftColumn() const
Global sensor size:
int rowsPerCircuit() const
Number of cell rows per circuit:
Class used to describe the diode segmentation of a pixel module.
Class used to describe the segmentation of the pixel and allow for conversion between cell id and pos...
Class used to describe the connection scheme of a diode matrix to a set of readout circuits.
Identifier for the strip or pixel cell.
Definition SiCellId.h:29
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: ...
Identifier for the strip or pixel readout cell.
Bounds for a rectangular, planar surface.
Abstract base class for surface bounds to be specified.
Message Stream Member.
Ensure that the ATLAS eigen extensions are properly loaded.
std::string number(const double &d, const std::string &s)
Definition utils.cxx:186