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

Design descriptor for forward modules in the SCT, carries the bounds, and readout information. More...

#include <SCT_ForwardModuleSideDesign.h>

Inheritance diagram for InDetDD::SCT_ForwardModuleSideDesign:
Collaboration diagram for InDetDD::SCT_ForwardModuleSideDesign:

Public Types

enum  Axis { xAxis =0 , yAxis , zAxis }

Public Member Functions

 SCT_ForwardModuleSideDesign (const double thickness, const int crystals, const int diodes, const int cells, const int shift, const bool swapStripReadout, InDetDD::CarrierType carrierType, const double radius1, const double halfHeight1, const double radius2, const double halfHeight2, const double step, const double etaCenter, const double phiCenter, int readoutSide=-1)
 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 crystals within module side number of diodes within crystal number of cells within module side index of diode connected to cell with index 0 r from inner crystal center to beam inner crystal half height r from outer crystal (if present) center to beam outer crystal (if present) half height strip step in angle (same for both crystals) eta coordinate of crystal center phi coordinate of crystal center.
virtual ~SCT_ForwardModuleSideDesign ()=default
 Destructor:
double sinStripAngleReco (double phiCoord, double etaCoord) const
 Give strip angle in the reco frame.
virtual void distanceToDetectorEdge (const SiLocalPosition &localPosition, double &etaDist, double &phiDist) const
 Returns distance to nearest detector active edge +ve = inside -ve = outside.
virtual bool nearBondGap (const SiLocalPosition &localPosition, double etaTol) const
 Test if near bond gap within tolerances.
virtual bool inActiveArea (const SiLocalPosition &chargePos, bool checkBondGap=true) const
 check if the position is in active area
virtual double scaledDistanceToNearestDiode (const SiLocalPosition &chargePos) const
 give distance to the nearest diode in units of pitch, from 0.0 to 0.5, this method should be fast as it is called for every surface charge in the SCT_SurfaceChargesGenerator
virtual double stripPitch (const SiLocalPosition &chargePos) const
 give the strip pitch (dependence on position needed for forward)
virtual double stripPitch () const
 give the strip pitch (For Forward returns pitch at center)
virtual SiDiodesParameters parameters (const SiCellId &cellId) const
 readout or diode id -> position, size
virtual SiLocalPosition localPositionOfCell (const SiCellId &cellId) const
 id -> position
virtual SiLocalPosition localPositionOfCluster (const SiCellId &cellId, int clusterSize) const
virtual SiCellId cellIdOfPosition (const SiLocalPosition &localPos) const
 position -> id
virtual std::pair< SiLocalPosition, SiLocalPositionendsOfStrip (const SiLocalPosition &position) const
 this method returns the ends of the strip
virtual HepGeom::Vector3D< double > phiMeasureSegment (const SiLocalPosition &position) const
 method for stereo angle computation - returns a vector parallel to the strip being hit
double radius () const
 Nominal center radius of double wafer.
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 deadAreaLength () const
 give length of dead area
virtual double deadAreaUpperBoundary () const
 give upper boundary of dead area
virtual double deadAreaLowerBoundary () const
 give lower boundary of dead area
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 angularPitch () const
 Angular pitch.
virtual DetectorShape shape () const
 Shape of element.
virtual const Trk::SurfaceBoundsbounds () const
 Element boundary.
virtual int numberOfConnectedCells (const SiReadoutCellId &readoutId) const override
 readout id -> id of connected diodes Not particularly useful for the SCT but implemented to keep a uniform interface.
virtual SiCellId connectedCell (const SiReadoutCellId &readoutId, int number) const override
 readout id -> id of connected diodes.
virtual SiCellId gangedCell (const SiCellId &cellId) const override
 If cell is ganged return the other cell, otherwise return an invalid id.
virtual SiReadoutCellId readoutIdOfCell (const SiCellId &cellId) const override
 diode id -> readout id
virtual SiReadoutCellId readoutIdOfPosition (const SiLocalPosition &localPos) const override
 position -> id
virtual SiCellId cellIdInRange (const SiCellId &cellId) const override
 Check if cell is in range.
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 cells which are neighbours of the given one.
virtual SiLocalPosition positionFromStrip (const int stripNumber) const
 gives position of strip center ALTERNATIVE/PREFERED way is to use localPositionOfCell(const SiCellId & cellId) or rawLocalPositionOfCell method in SiDetectorElement.
int crystals () const
 number of crystals within module side:
int diodes () const
 number of strips within crystal:
virtual int diodesInRow (const int row) const
int cells () const
 number of readout stips within module side:
int shift () const
 number of edge strips before first readout strip.
virtual bool swapHitPhiReadoutDirection () const override
 Return true if hit local direction is the same as readout direction.
virtual bool swapHitEtaReadoutDirection () const override
virtual int row (int stripId1Dim) const
virtual int strip (int stripId1Dim) const
virtual int strip1Dim (int strip, int row) const override
 only relevant for SCT.
void setMother (SCT_ModuleSideDesign *mother)
const SCT_ModuleSideDesigngetMother () const
const std::map< int, const SCT_ModuleSideDesign * > & getChildren () const
void addChildDesign (int index, const SCT_ModuleSideDesign *element)
virtual std::pair< int, int > getStripRow (SiCellId id) const
 Get the strip and row number of the cell.
virtual SiIntersect inDetector (const SiLocalPosition &localPosition, double phiTol, double etaTol) const override
 Test if point is in the active part of the detector with specified tolerances.
virtual Amg::Vector3D sensorCenter () const
 Return the centre of a sensor in the local reference frame.
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 DetectorType type () const
 Type of element.
virtual const Amg::Transform3D moduleShift () const

Protected Attributes

SCT_ReadoutScheme m_scheme
InDetDD::DetectorType m_detectorType {Undefined}

Private Member Functions

 SCT_ForwardModuleSideDesign ()
 Forbidden default constructor.
 SCT_ForwardModuleSideDesign (const SCT_ForwardModuleSideDesign &design)
 Copy constructor:
SCT_ForwardModuleSideDesignoperator= (const SCT_ForwardModuleSideDesign &design)
 Assignment operator:

Private Attributes

SCT_ForwardModuleSideGeometry m_geometry
 geometry of module side
SCT_ForwardFrameTransformation m_frame
 polar / cartesian frame transformation
Trk::TrapezoidBounds m_bounds
bool m_swapStripReadout
const SCT_ModuleSideDesignm_motherDesign {nullptr}
std::map< int, const SCT_ModuleSideDesign * > m_childDesigns
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

Design descriptor for forward modules in the SCT, carries the bounds, and readout information.

Author
Grant Gorfine
  • modified & maintained: Nick Styles, Andreas Salzburger

Definition at line 39 of file SCT_ForwardModuleSideDesign.h.

Member Enumeration Documentation

◆ Axis

Enumerator
xAxis 
yAxis 
zAxis 

Definition at line 59 of file DetectorDesign.h.

Constructor & Destructor Documentation

◆ SCT_ForwardModuleSideDesign() [1/3]

InDetDD::SCT_ForwardModuleSideDesign::SCT_ForwardModuleSideDesign ( const double thickness,
const int crystals,
const int diodes,
const int cells,
const int shift,
const bool swapStripReadout,
InDetDD::CarrierType carrierType,
const double radius1,
const double halfHeight1,
const double radius2,
const double halfHeight2,
const double step,
const double etaCenter,
const double phiCenter,
int readoutSide = -1 )

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 crystals within module side number of diodes within crystal number of cells within module side index of diode connected to cell with index 0 r from inner crystal center to beam inner crystal half height r from outer crystal (if present) center to beam outer crystal (if present) half height strip step in angle (same for both crystals) eta coordinate of crystal center phi coordinate of crystal center.

Definition at line 23 of file SCT_ForwardModuleSideDesign.cxx.

37 :
39 true, // phi
40 false, // eta: For trapezoid we cant swap z (xEta) axis.
41 true, // depth
43 m_geometry(radius1,halfHeight1,radius2,halfHeight2,diodes,step,crystals),
44 m_frame(etaCenter,phiCenter,radius1)
45{
46 if (crystals > 1) {
47 double radius = 0.5 * (radius1 + radius2 + halfHeight2 - halfHeight1);
48 m_frame=SCT_ForwardFrameTransformation(etaCenter,phiCenter,radius);
49 }
51}
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 double length() const
Method to calculate length of a module.
SCT_ForwardModuleSideGeometry m_geometry
geometry of module side
SCT_ForwardFrameTransformation m_frame
polar / cartesian frame transformation
double radius() const
Nominal center radius of double wafer.
virtual double maxWidth() const
Method to calculate maximum width of a module.
virtual double minWidth() const
Method to calculate minimum width of a module.
int diodes() const
number of strips within crystal:
int cells() const
number of readout stips within module side:
int crystals() const
number of crystals within module side:
int shift() const
number of edge strips before first readout strip.

◆ ~SCT_ForwardModuleSideDesign()

virtual InDetDD::SCT_ForwardModuleSideDesign::~SCT_ForwardModuleSideDesign ( )
virtualdefault

Destructor:

◆ SCT_ForwardModuleSideDesign() [2/3]

InDetDD::SCT_ForwardModuleSideDesign::SCT_ForwardModuleSideDesign ( )
private

Forbidden default constructor.

◆ SCT_ForwardModuleSideDesign() [3/3]

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

Copy constructor:

Member Function Documentation

◆ addChildDesign()

void InDetDD::SCT_ModuleSideDesign::addChildDesign ( int index,
const SCT_ModuleSideDesign * element )
inlineinherited

Definition at line 292 of file SCT_ModuleSideDesign.h.

292 {
293 m_childDesigns.emplace(index,child);
294 }
std::map< int, const SCT_ModuleSideDesign * > m_childDesigns

◆ angularPitch()

double InDetDD::SCT_ForwardModuleSideDesign::angularPitch ( ) const
inline

Angular pitch.

Definition at line 208 of file SCT_ForwardModuleSideDesign.h.

209 {
210 return m_geometry.angularPitch();
211 }

◆ bounds()

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

Element boundary.

Implements InDetDD::DetectorDesign.

Definition at line 285 of file SCT_ForwardModuleSideDesign.cxx.

286{
287 return m_bounds;
288}

◆ 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::SCT_ModuleSideDesign::cellIdInRange ( const SiCellId & cellId) const
overridevirtualinherited

Check if cell is in range.

Check if cell is in range. Returns the original cellId if it is in range, otherwise it.

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

Implements InDetDD::DetectorDesign.

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

Definition at line 101 of file SCT_ModuleSideDesign.cxx.

101 {
102 if (!cellId.isValid() ||
103 cellId.strip() < 0 || cellId.strip() >= cells()) {
104 return {}; // Invalid
105 }
106 return cellId;
107}
int strip() const
Get strip number. Equivalent to phiIndex().
Definition SiCellId.h:131
bool isValid() const
Test if its in a valid state.
Definition SiCellId.h:136

◆ cellIdOfPosition()

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

position -> id

Implements InDetDD::DetectorDesign.

Definition at line 258 of file SCT_ForwardModuleSideDesign.cxx.

259{
260 // NB We do not distinguish between the two crystals anymore.
261 // Check if we are in the active region. No bondgap check.
262 if (!inActiveArea(localPosition, false)) return {}; // return an invalid id
263
264 const SCT_ForwardPolarPosition polar = m_frame.polarFromCartesian(localPosition);
265 double theta = polar.theta();
266
267 double dstrip = theta/angularPitch() + 0.5*diodes();
268
269 if (dstrip < 0) return {}; // return an invalid id
270 int strip = static_cast<int>(dstrip);
271 if (strip > diodes()) return {};// return an invalid id if strip # greater
272 // than number of diodes.
273 return {strip-shift()}; // strip numbering starts from first readout strip.
274 // Those to the left will have negative numbers.
275}
Scalar theta() const
theta method
virtual bool inActiveArea(const SiLocalPosition &chargePos, bool checkBondGap=true) const
check if the position is in active area
virtual int strip(int stripId1Dim) const

◆ cells()

int InDetDD::SCT_ModuleSideDesign::cells ( ) const
inlineinherited

number of readout stips within module side:

Definition at line 228 of file SCT_ModuleSideDesign.h.

228 {
229 return m_scheme.cells();
230}

◆ connectedCell()

SiCellId InDetDD::SCT_ModuleSideDesign::connectedCell ( const SiReadoutCellId & readoutId,
int number ) const
inlineoverridevirtualinherited

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 241 of file SCT_ModuleSideDesign.h.

242 {
243 return m_scheme.connectedCell(readoutId, number);
244}
std::string number(const double &d, const std::string &s)
Definition utils.cxx:186

◆ crystals()

int InDetDD::SCT_ModuleSideDesign::crystals ( ) const
inlineinherited

number of crystals within module side:

Definition at line 216 of file SCT_ModuleSideDesign.h.

216 {
217 return m_scheme.crystals();
218}

◆ deadAreaLength()

double InDetDD::SCT_ForwardModuleSideDesign::deadAreaLength ( ) const
virtual

give length of dead area

Implements InDetDD::SCT_ModuleSideDesign.

Definition at line 175 of file SCT_ForwardModuleSideDesign.cxx.

176{
177 return m_geometry.deadAreaLength();
178}

◆ deadAreaLowerBoundary()

double InDetDD::SCT_ForwardModuleSideDesign::deadAreaLowerBoundary ( ) const
virtual

give lower boundary of dead area

Implements InDetDD::SCT_ModuleSideDesign.

Definition at line 185 of file SCT_ForwardModuleSideDesign.cxx.

186{
187 return m_geometry.deadAreaLowerBoundary();
188}

◆ deadAreaUpperBoundary()

double InDetDD::SCT_ForwardModuleSideDesign::deadAreaUpperBoundary ( ) const
virtual

give upper boundary of dead area

Implements InDetDD::SCT_ModuleSideDesign.

Definition at line 180 of file SCT_ForwardModuleSideDesign.cxx.

181{
182 return m_geometry.deadAreaUpperBoundary();
183}

◆ 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}

◆ diodes()

int InDetDD::SCT_ModuleSideDesign::diodes ( ) const
inlineinherited

number of strips within crystal:

Definition at line 220 of file SCT_ModuleSideDesign.h.

220 {
221 return m_scheme.diodes();
222}

◆ diodesInRow()

int InDetDD::SCT_ModuleSideDesign::diodesInRow ( const int row) const
inlinevirtualinherited

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

Definition at line 224 of file SCT_ModuleSideDesign.h.

224 {
225 return m_scheme.diodes();
226}

◆ distanceToDetectorEdge()

void InDetDD::SCT_ForwardModuleSideDesign::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 66 of file SCT_ForwardModuleSideDesign.cxx.

68{
69 m_geometry.distanceToDetectorEdge(localPosition,
70 m_frame.polarFromCartesian(localPosition),
71 etaDist, phiDist);
72}

◆ endsOfStrip()

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

this method returns the ends of the strip

Implements InDetDD::SCT_ModuleSideDesign.

Definition at line 120 of file SCT_ForwardModuleSideDesign.cxx.

121{
122 const SCT_ForwardPolarPosition polarPosition =
123 m_frame.polarFromCartesian(position);
124 const double theta = polarPosition.theta();
125 const double innerRadius = (m_geometry.radius1()-m_geometry.halfHeight1())/cos(theta);
126 double outerRadius;
127 if (crystals()==1) {
128 outerRadius = (m_geometry.radius1()+m_geometry.halfHeight1())/cos(theta);
129 } else {
130 outerRadius = (m_geometry.radius2()+m_geometry.halfHeight2())/cos(theta);
131 }
132 const SCT_ForwardPolarPosition innerPointPolar = SCT_ForwardPolarPosition(innerRadius,theta);
133 const SCT_ForwardPolarPosition outerPointPolar = SCT_ForwardPolarPosition(outerRadius,theta);
134 const SiLocalPosition innerPoint = m_frame.cartesianFromPolar(innerPointPolar);
135 const SiLocalPosition outerPoint = m_frame.cartesianFromPolar(outerPointPolar);
136
137 return std::pair<SiLocalPosition,SiLocalPosition>(innerPoint,outerPoint);
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::SCT_ForwardModuleSideDesign::etaPitch ( ) const
inlinevirtual

Pitch in eta direction.

Implements InDetDD::DetectorDesign.

Definition at line 202 of file SCT_ForwardModuleSideDesign.h.

203 {
204 return length();
205 }

◆ etaSymmetric()

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

Definition at line 283 of file DetectorDesign.h.

283 {
284 return m_etaSymmetric;
285}

◆ gangedCell()

SiCellId InDetDD::SCT_ModuleSideDesign::gangedCell ( const SiCellId & cellId) const
inlineoverridevirtualinherited

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

Not particularly useful for the SCT but implemented to keep a uniform interface. For SCT always returns an invalid id.

Implements InDetDD::SiDetectorDesign.

Definition at line 246 of file SCT_ModuleSideDesign.h.

246 {
247 // No ganged cells in SCT so always return invalid id.
248 return SiCellId();
249}

◆ getChildren()

const std::map< int, const SCT_ModuleSideDesign * > & InDetDD::SCT_ModuleSideDesign::getChildren ( ) const
inlineinherited

Definition at line 287 of file SCT_ModuleSideDesign.h.

287 {
288 return m_childDesigns;
289 }

◆ getMother()

const SCT_ModuleSideDesign * InDetDD::SCT_ModuleSideDesign::getMother ( ) const
inlineinherited

Definition at line 283 of file SCT_ModuleSideDesign.h.

283 {
284 return m_motherDesign;
285 }
const SCT_ModuleSideDesign * m_motherDesign

◆ getStripRow()

std::pair< int, int > InDetDD::SCT_ModuleSideDesign::getStripRow ( SiCellId id) const
virtualinherited

Get the strip and row number of the cell.

Can be used as auto [strip, row] = getStripRow(cellId); For SCT sensors, return 0 as there should only be one row; derived versions for ITk strip implement specializations

Parameters
cellIdThe SiCellId
Returns
std::pair<int,int> A pair of ints representing the strip ID and row ID. In this case, [0,0].

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

Definition at line 127 of file SCT_ModuleSideDesign.cxx.

127 {
128 return {0,0};
129 }

◆ inActiveArea()

bool InDetDD::SCT_ForwardModuleSideDesign::inActiveArea ( const SiLocalPosition & chargePos,
bool checkBondGap = true ) const
virtual

check if the position is in active area

Implements InDetDD::SCT_ModuleSideDesign.

Definition at line 81 of file SCT_ForwardModuleSideDesign.cxx.

82{
83 //const SCT_ForwardPolarPosition polar=m_frame.polarFromCartesian(chargePos);
84 //return m_geometry.inActiveArea(m_frame.polarFromCartesian(chargePos));
85 return m_geometry.inActiveArea(chargePos, checkBondGap);
86}

◆ inDetector()

SiIntersect InDetDD::SCT_ModuleSideDesign::inDetector ( const SiLocalPosition & localPosition,
double phiTol,
double etaTol ) const
overridevirtualinherited

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

Reimplemented from InDetDD::DetectorDesign.

Definition at line 131 of file SCT_ModuleSideDesign.cxx.

131 {
132
133 double etaDist = 0;
134 double phiDist = 0;
135
136 distanceToDetectorEdge(localPosition, etaDist, phiDist);
137
138 SiIntersect state;
139
140 if (phiDist < -phiTol || etaDist < -etaTol) {
141 state.setOut();
142 return state;
143 }
144
145 if (phiDist > phiTol && etaDist > etaTol) {
146 state.setIn();
147 return state;
148 }
149
150 // Near boundary.
151 state.setNearBoundary();
152 return state;
153}
virtual void distanceToDetectorEdge(const SiLocalPosition &localPosition, double &etaDist, double &phiDist) const =0
Returns distance to nearest detector active edge +ve = inside -ve = outside.

◆ length()

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

Method to calculate length of a module.

Implements InDetDD::DetectorDesign.

Definition at line 155 of file SCT_ForwardModuleSideDesign.cxx.

156{
157 return m_geometry.length();
158}

◆ localPositionOfCell()

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

id -> position

Implements InDetDD::SCT_ModuleSideDesign.

Definition at line 192 of file SCT_ForwardModuleSideDesign.cxx.

193{
194 // This method returns the position of the centre of the cell
195
196 // NB. No check is made that cellId is valid or in the correct range.
197
198 int strip = cellId.strip();
199
200 double clusterCenter = strip - 0.5*cells() + 0.5;
201
202 const double theta = m_geometry.angularPitch()*clusterCenter;
203 const double r = radius() / cos(theta);
204
205 // positions in polar coordinates and then cartesian
206 const SCT_ForwardPolarPosition polarPosition(r, theta);
207 return m_frame.cartesianFromPolar(polarPosition);
208}
int r
Definition globals.cxx:22

◆ localPositionOfCluster()

SiLocalPosition InDetDD::SCT_ForwardModuleSideDesign::localPositionOfCluster ( const SiCellId & cellId,
int clusterSize ) const
virtual

Implements InDetDD::SCT_ModuleSideDesign.

Definition at line 212 of file SCT_ForwardModuleSideDesign.cxx.

214{
215 // This method returns the position of the centre of the cluster starting at cellId.strip()
216
217 // NB. No check is made that cellId is valid or in the correct range.
218
219 if (clusterSize < 1) clusterSize = 1;
220
221 int strip = cellId.strip();
222
223 double clusterCenter = strip - 0.5*cells() + 0.5;
224 if (clusterSize>1) clusterCenter += 0.5 * (clusterSize-1);
225
226 const double theta = angularPitch()*clusterCenter;
227 const double r = radius() / cos(theta);
228
229 // positions in polar coordinates and then cartesian
230 const SCT_ForwardPolarPosition polarPosition(r,theta);
231 return m_frame.cartesianFromPolar(polarPosition);
232}

◆ maxWidth()

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

Method to calculate maximum width of a module.

Implements InDetDD::DetectorDesign.

Definition at line 170 of file SCT_ForwardModuleSideDesign.cxx.

171{
172 return m_geometry.maxWidth();
173}

◆ minWidth()

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

Method to calculate minimum width of a module.

Implements InDetDD::DetectorDesign.

Definition at line 165 of file SCT_ForwardModuleSideDesign.cxx.

166{
167 return m_geometry.minWidth();
168}

◆ 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::SCT_ForwardModuleSideDesign::nearBondGap ( const SiLocalPosition & localPosition,
double etaTol ) const
virtual

Test if near bond gap within tolerances.

Implements InDetDD::SiDetectorDesign.

Definition at line 75 of file SCT_ForwardModuleSideDesign.cxx.

76{
77 return m_geometry.nearBondGap(localPosition, etaTol);
78}

◆ neighboursOfCell()

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

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.

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

Definition at line 70 of file SCT_ModuleSideDesign.cxx.

71 {
72 neighbours.clear();
73 neighbours.reserve(2);
74
75 if (!cellId.isValid()) {
76 return;
77 }
78
79 int strip = cellId.strip();
80 int stripM = strip - 1;
81 int stripP = strip + 1;
82
83 if (stripM >= m_scheme.shift()) {
84 neighbours.emplace_back(stripM);
85 }
86 if (stripP < m_scheme.diodes() + m_scheme.shift()) {
87 neighbours.emplace_back(stripP);
88 }
89}

◆ numberOfConnectedCells()

int InDetDD::SCT_ModuleSideDesign::numberOfConnectedCells ( const SiReadoutCellId & readoutId) const
inlineoverridevirtualinherited

readout id -> id of connected diodes Not particularly useful for the SCT but implemented to keep a uniform interface.

Implements InDetDD::DetectorDesign.

Definition at line 236 of file SCT_ModuleSideDesign.h.

237 {
238 return m_scheme.numberOfConnectedCells(readoutId);
239}

◆ operator=()

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

Assignment operator:

◆ parameters()

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

readout or diode id -> position, size

Implements InDetDD::DetectorDesign.

Definition at line 235 of file SCT_ForwardModuleSideDesign.cxx.

236{
237 int strip = cellId.strip();
238
239 double clusterCenter = strip - 0.5*cells() + 0.5;
240
241 const double theta = m_geometry.angularPitch()*clusterCenter;
242 const double r = radius() / cos(theta);
243
244 // positions in polar coordinates and then cartesian
245 const SCT_ForwardPolarPosition polarPosition(r, theta);
246 SiLocalPosition center = m_frame.cartesianFromPolar(polarPosition);
247
248 // The strip is not rectangular put we return pitch at radius.
249 double stripWidth = angularPitch()*r;
250 double stripLength = length() / cos(theta);
251
252 SiLocalPosition width(stripLength, stripWidth);
253 return SiDiodesParameters(center, width);
254}
virtual double width() const
Method to calculate average width of a module.

◆ 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::SCT_ForwardModuleSideDesign::phiMeasureSegment ( const SiLocalPosition & position) const
virtual

method for stereo angle computation - returns a vector parallel to the strip being hit

Implements InDetDD::SiDetectorDesign.

Definition at line 143 of file SCT_ForwardModuleSideDesign.cxx.

144{
145 const SCT_ForwardPolarPosition secondPolarPosition(0,0);
146 const SiLocalPosition secondPosition = m_frame.cartesianFromPolar(secondPolarPosition);
147
148 HepGeom::Vector3D<double> notUnitVector;
149 notUnitVector[phiAxis()]=position.xPhi()-secondPosition.xPhi();
150 notUnitVector[etaAxis()]=position.xEta()-secondPosition.xEta();
151
152 return notUnitVector.unit();
153}
Axis etaAxis() const
local axis corresponding to eta direction:
Axis phiAxis() const
local axis corresponding to phi direction:
double xPhi() const
position along phi direction:
double xEta() const
position along eta direction:

◆ phiPitch() [1/2]

double InDetDD::SCT_ForwardModuleSideDesign::phiPitch ( ) const
inlinevirtual

Pitch in phi direction.

Implements InDetDD::DetectorDesign.

Definition at line 196 of file SCT_ForwardModuleSideDesign.h.

197 {
198 return stripPitch();
199 }
virtual double stripPitch() const
give the strip pitch (For Forward returns pitch at center)

◆ phiPitch() [2/2]

double InDetDD::SCT_ForwardModuleSideDesign::phiPitch ( const SiLocalPosition & localPosition) const
inlinevirtual

Pitch in phi direction.

Implements InDetDD::DetectorDesign.

Definition at line 190 of file SCT_ForwardModuleSideDesign.h.

191 {
192 return stripPitch(localPosition);
193 }

◆ phiSymmetric()

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

Definition at line 279 of file DetectorDesign.h.

279 {
280 return m_phiSymmetric;
281}

◆ positionFromStrip()

SiLocalPosition InDetDD::SCT_ModuleSideDesign::positionFromStrip ( const int stripNumber) const
virtualinherited

gives position of strip center ALTERNATIVE/PREFERED way is to use localPositionOfCell(const SiCellId & cellId) or rawLocalPositionOfCell method in SiDetectorElement.

DEPRECATED

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

Definition at line 95 of file SCT_ModuleSideDesign.cxx.

95 {
96 return localPositionOfCell(SiCellId(stripNumber));
97}
virtual SiLocalPosition localPositionOfCell(const SiCellId &cellId) const override=0
id -> position

◆ radius()

double InDetDD::SCT_ForwardModuleSideDesign::radius ( ) const
inline

Nominal center radius of double wafer.

Definition at line 184 of file SCT_ForwardModuleSideDesign.h.

185 {
186 return m_geometry.radius();
187 }

◆ readoutIdOfCell()

SiReadoutCellId InDetDD::SCT_ModuleSideDesign::readoutIdOfCell ( const SiCellId & cellId) const
inlineoverridevirtualinherited

diode id -> readout id

Implements InDetDD::DetectorDesign.

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

Definition at line 251 of file SCT_ModuleSideDesign.h.

252{
253 return m_scheme.readoutIdOfCell(cellId);
254}

◆ readoutIdOfPosition()

SiReadoutCellId InDetDD::SCT_ModuleSideDesign::readoutIdOfPosition ( const SiLocalPosition & localPos) const
inlineoverridevirtualinherited

position -> id

Implements InDetDD::DetectorDesign.

Definition at line 256 of file SCT_ModuleSideDesign.h.

257 {
258 // Get the cellId then convert it to a readoutId.
259 // NEED to think about active area and bond gap check
260 return readoutIdOfCell(cellIdOfPosition(localPos));
261}
virtual SiCellId cellIdOfPosition(const SiLocalPosition &localPos) const =0
position -> id
virtual SiReadoutCellId readoutIdOfCell(const SiCellId &cellId) const override
diode id -> readout id

◆ 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}

◆ row()

int InDetDD::SCT_ModuleSideDesign::row ( int stripId1Dim) const
inlinevirtualinherited

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

Definition at line 271 of file SCT_ModuleSideDesign.h.

271 {
272 return -1; // Use -1 to realise this is an SCT module without rows
273}

◆ scaledDistanceToNearestDiode()

double InDetDD::SCT_ForwardModuleSideDesign::scaledDistanceToNearestDiode ( const SiLocalPosition & chargePos) const
virtual

give distance to the nearest diode in units of pitch, from 0.0 to 0.5, this method should be fast as it is called for every surface charge in the SCT_SurfaceChargesGenerator

Implements InDetDD::SCT_ModuleSideDesign.

Definition at line 91 of file SCT_ForwardModuleSideDesign.cxx.

92{
93 const SCT_ForwardPolarPosition polar=m_frame.polarFromCartesian(chargePos);
94 return m_geometry.scaledDistanceToNearestDiode(polar);
95}

◆ 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

◆ setMother()

void InDetDD::SCT_ModuleSideDesign::setMother ( SCT_ModuleSideDesign * mother)
inherited

Definition at line 109 of file SCT_ModuleSideDesign.cxx.

109 {
110 if(m_motherDesign){
111 const std::string errMsg=std::string("SCT_ModuleSideDesign already has a mother set!");
112 throw std::runtime_error(errMsg);
113 }
114 m_motherDesign = mother;
115
116 }

◆ 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::SCT_ForwardModuleSideDesign::shape ( ) const
virtual

Shape of element.

Reimplemented from InDetDD::DetectorDesign.

Definition at line 279 of file SCT_ForwardModuleSideDesign.cxx.

280{
281 return InDetDD::Trapezoid;
282}

◆ shift()

int InDetDD::SCT_ModuleSideDesign::shift ( ) const
inlineinherited

number of edge strips before first readout strip.

Definition at line 232 of file SCT_ModuleSideDesign.h.

232 {
233 return m_scheme.shift();
234}

◆ sinStripAngleReco()

double InDetDD::SCT_ForwardModuleSideDesign::sinStripAngleReco ( double phiCoord,
double etaCoord ) const
virtual

Give strip angle in the reco frame.

Reimplemented from InDetDD::SiDetectorDesign.

Definition at line 53 of file SCT_ForwardModuleSideDesign.cxx.

53 {
54 // If theta is angle between the edges of a sensor, then tan(theta/2) = (maxW - minW) / 2 / length
55 // and tan(theta/2) = width/2 / radius
56 // So 1/r = (maxW - minW) / (width * length)
57 double oneOverRadius = (maxWidth() - minWidth()) / (width() * length());
58 // We measure the angle from the y (eta) axis towards the x (phi) axis, hence the -ve sign.
59 double sinAngle = -x * oneOverRadius / sqrt(
60 (1 + y * oneOverRadius) * (1 + y * oneOverRadius) + x * oneOverRadius * x * oneOverRadius);
61
62 return sinAngle;
63}
#define y
#define x

◆ strip()

int InDetDD::SCT_ModuleSideDesign::strip ( int stripId1Dim) const
inlinevirtualinherited

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

Definition at line 275 of file SCT_ModuleSideDesign.h.

275 {
276 return stripId1Dim;
277}

◆ strip1Dim()

int InDetDD::SCT_ModuleSideDesign::strip1Dim ( int strip,
int row ) const
inlineoverridevirtualinherited

only relevant for SCT.

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

Reimplemented from InDetDD::SiDetectorDesign.

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

Definition at line 279 of file SCT_ModuleSideDesign.h.

279 {
280 return strip;
281}

◆ stripPitch() [1/2]

double InDetDD::SCT_ForwardModuleSideDesign::stripPitch ( ) const
virtual

give the strip pitch (For Forward returns pitch at center)

Implements InDetDD::SCT_ModuleSideDesign.

Definition at line 108 of file SCT_ForwardModuleSideDesign.cxx.

109{
110 // Use center.
111 const SCT_ForwardPolarPosition polarCenter(m_frame.radius(), 0);
112 // No longer make inActive check
113 // if (!m_geometry.inActiveArea(polar)) return 0;
114 return m_geometry.stripPitch(polarCenter);
115}

◆ stripPitch() [2/2]

double InDetDD::SCT_ForwardModuleSideDesign::stripPitch ( const SiLocalPosition & chargePos) const
virtual

give the strip pitch (dependence on position needed for forward)

Implements InDetDD::SCT_ModuleSideDesign.

Definition at line 99 of file SCT_ForwardModuleSideDesign.cxx.

100{
101 const SCT_ForwardPolarPosition polar=m_frame.polarFromCartesian(chargePos);
102 // No longer make inActive check
103 // if (!m_geometry.inActiveArea(polar)) return 0;
104 return m_geometry.stripPitch(polar);
105}

◆ swapHitEtaReadoutDirection()

bool InDetDD::SCT_ModuleSideDesign::swapHitEtaReadoutDirection ( ) const
inlineoverridevirtualinherited

Implements InDetDD::DetectorDesign.

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

Definition at line 267 of file SCT_ModuleSideDesign.h.

267 {
268 return false;
269}

◆ swapHitPhiReadoutDirection()

bool InDetDD::SCT_ModuleSideDesign::swapHitPhiReadoutDirection ( ) const
inlineoverridevirtualinherited

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

Implements InDetDD::DetectorDesign.

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

Definition at line 263 of file SCT_ModuleSideDesign.h.

◆ 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::DetectorDesign::type ( ) const
virtualinherited

Type of element.

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

Definition at line 101 of file DetectorDesign.cxx.

101 {
102 // Default is Undefined.
103 return InDetDD::Undefined;
104}

◆ width()

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

Method to calculate average width of a module.

Implements InDetDD::DetectorDesign.

Definition at line 160 of file SCT_ForwardModuleSideDesign.cxx.

161{
162 return m_geometry.width();
163}

Member Data Documentation

◆ m_bounds

Trk::TrapezoidBounds InDetDD::SCT_ForwardModuleSideDesign::m_bounds
private

Definition at line 175 of file SCT_ForwardModuleSideDesign.h.

◆ m_carrierType

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

Definition at line 240 of file DetectorDesign.h.

◆ m_childDesigns

std::map<int, const SCT_ModuleSideDesign *> InDetDD::SCT_ModuleSideDesign::m_childDesigns
privateinherited

Definition at line 210 of file SCT_ModuleSideDesign.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::SCT_ModuleSideDesign::m_detectorType {Undefined}
protectedinherited

Definition at line 197 of file SCT_ModuleSideDesign.h.

197{Undefined};

◆ 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_frame

SCT_ForwardFrameTransformation InDetDD::SCT_ForwardModuleSideDesign::m_frame
private

polar / cartesian frame transformation

Definition at line 174 of file SCT_ForwardModuleSideDesign.h.

◆ m_geometry

SCT_ForwardModuleSideGeometry InDetDD::SCT_ForwardModuleSideDesign::m_geometry
private

geometry of module side

Definition at line 173 of file SCT_ForwardModuleSideDesign.h.

◆ m_motherDesign

const SCT_ModuleSideDesign* InDetDD::SCT_ModuleSideDesign::m_motherDesign {nullptr}
privateinherited

Definition at line 208 of file SCT_ModuleSideDesign.h.

208{nullptr};

◆ 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_readoutSidePosDepth

bool InDetDD::DetectorDesign::m_readoutSidePosDepth
privateinherited

Definition at line 246 of file DetectorDesign.h.

◆ m_scheme

SCT_ReadoutScheme InDetDD::SCT_ModuleSideDesign::m_scheme
protectedinherited

Definition at line 196 of file SCT_ModuleSideDesign.h.

◆ m_swapStripReadout

bool InDetDD::SCT_ModuleSideDesign::m_swapStripReadout
privateinherited

Definition at line 204 of file SCT_ModuleSideDesign.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: