ATLAS Offline Software
Public Member Functions | List of all members
InDetDD::SiDetectorElement Class Referencefinal

#include <SiDetectorElement.h>

Inheritance diagram for InDetDD::SiDetectorElement:
Collaboration diagram for InDetDD::SiDetectorElement:

Public Member Functions

 SiDetectorElement (const Identifier &id, const SiDetectorDesign *design, const GeoVFullPhysVol *geophysvol, const SiCommonItems *commonItems, const GeoAlignmentStore *geoAlignStore=nullptr)
 Constructor with parameters. More...
 
virtual ~SiDetectorElement ()
 Destructor. More...
 
 SiDetectorElement ()=delete
 Don't allow no-argument constructor. More...
 
 SiDetectorElement (const SiDetectorElement &)=delete
 Don't allow copy constructor. More...
 
SiDetectorElementoperator= (const SiDetectorElement &)=delete
 Don't allow assignment operator. More...
 
 SiDetectorElement (SiDetectorElement &&)=delete
 Don't allow move constructor. More...
 
SiDetectorElementoperator= (SiDetectorElement &&)=delete
 Don't allow move assignment operator. More...
 
std::string detectorTypeString () const
 Returns a string of the Detector element type. More...
 
Cache handling

Methods to handle invalidating and updating caches.

The cached values include values that are affected by alignment

void invalidate ()
 Signal that cached values are no longer valid. More...
 
void setCache ()
 Set/calculate cache values (inline) More...
 
Common items

Inline method

const SiCommonItemsgetCommonItems () const
 
Identification

Methods to identify the element and identifier manipulation.

virtual Identifier identify () const override final
 identifier of this detector element (inline) More...
 
virtual IdentifierHash identifyHash () const override final
 identifier hash (inline) More...
 
const AtlasDetectorIDgetIdHelper () const
 Returns the id helper (inline) More...
 
Surface
Trk::Surfacesurface ()
 Element Surface. More...
 
virtual const Trk::Surfacesurface () const override final
 Return surface associated with this detector element. More...
 
virtual const Trk::Surfacesurface (const Identifier &) const override final
 TrkDetElementBase interface (inline) More...
 
Transformation
const GeoTrf::Transform3D & transformHit () const
 Local (simulation/hit frame) to global transform. More...
 
const HepGeom::Transform3D & transformCLHEP () const
 Local (reconstruction frame) to global transform. More...
 
virtual const Amg::Transform3Dtransform () const override final
 Return local to global transform. More...
 
virtual const Amg::Transform3Dtransform (const Identifier &) const override final
 TrkDetElementBase interface (inline) More...
 
const HepGeom::Transform3D defTransformCLHEP () const
 Default Local (reconstruction frame) to global transform ie with no misalignment. More...
 
const Amg::Transform3D defTransform () const
 
const HepGeom::Transform3D recoToHitTransform () const
 Transform to go from local reconstruction frame to local hit frame. More...
 
Orientation
double hitDepthDirection () const
 Directions of hit depth,phi,eta axes relative to reconstruction local position axes (LocalPosition). More...
 
double hitPhiDirection () const
 See previous method. More...
 
double hitEtaDirection () const
 See previous method. More...
 
const HepGeom::Vector3D< double > & phiAxisCLHEP () const
 To determine if readout direction between online and offline needs swapping, see methods swapPhiReadoutDirection() and swapEtaReadoutDirection() below in "Readout Cell id" section. More...
 
const Amg::Vector3DphiAxis () const
 
const HepGeom::Vector3D< double > & etaAxisCLHEP () const
 Get reconstruction local eta axes in global frame. More...
 
const Amg::Vector3DetaAxis () const
 
virtual const Amg::Vector3Dnormal () const override final
 Get reconstruction local normal axes in global frame. More...
 
virtual const Amg::Vector3Dnormal (const Identifier &) const override final
 TrkDetElementBase interface (inline) More...
 
Element Extent

Inline methods to get extent of element in r,phi and z.

double rMin () const
 
double rMax () const
 
double zMin () const
 
double zMax () const
 
double phiMin () const
 
double phiMax () const
 
void getEtaPhiRegion (double deltaZ, double &etaMin, double &etaMax, double &phiMin, double &phiMax, double &rz) const
 Method for building up region of interest table. More...
 
Intersection Tests
SiIntersect inDetector (const Amg::Vector2D &localPosition, double phiTol, double etaTol) const
 Test that it is in the active region. More...
 
SiIntersect inDetector (const Amg::Vector3D &globalPosition, double phiTol, double etaTol) const
 
Navigation setters

Non-const methods.

These are inline methods and set neighbours.

void setNextInEta (const SiDetectorElement *element)
 
void setPrevInEta (const SiDetectorElement *element)
 
void setNextInPhi (const SiDetectorElement *element)
 
void setPrevInPhi (const SiDetectorElement *element)
 
void setOtherSide (const SiDetectorElement *element)
 For SCT only. More...
 
Navigation

Inline methods to access neighbours.

const SiDetectorElementnextInEta () const
 
const SiDetectorElementprevInEta () const
 
const SiDetectorElementnextInPhi () const
 
const SiDetectorElementprevInPhi () const
 
const SiDetectorElementotherSide () const
 Useful for SCT only. More...
 
Identification

Methods to identify the element and identifier manipulation.

bool isPixel () const
 
bool isSCT () const
 
bool isPLR () const
 
bool isDBM () const
 
bool isBarrel () const
 
bool isEndcap () const
 
bool isBlayer () const
 
bool isInnermostPixelLayer () const
 
bool isNextToInnermostPixelLayer () const
 
virtual Identifier identifierFromCellId (const SiCellId &cellId) const override final
 Identifier <-> SiCellId (ie strip number or pixel eta_index,phi_index) Identifier from SiCellId (ie strip number or pixel eta_index,phi_index) More...
 
virtual SiCellId cellIdFromIdentifier (const Identifier &identifier) const override final
 SiCellId from Identifier. More...
 
Surface
const std::vector< const Trk::Surface * > & surfaces () const
 Returns the full list of surfaces associated to this detector element. More...
 
Module Frame

Methods to help work with the module frame.

This is mainly of of use in the SCT where the module frame can in general be different from the element frame. It is actully defined as the frame of one of the sides (currently the axial side), but using these methods one does not need to make any assumptions about what the actual frame is. In the following methods the local element frame is the local reconstruction frame of this element.

const Amg::Transform3DmoduleTransform () const
 Module to global frame transform. More...
 
Amg::Transform3D defModuleTransform () const
 Default module to global frame transform, ie with no misalignment. More...
 
Amg::Transform3D localToModuleFrame (const Amg::Transform3D &localTransform) const
 Take a transform of the local element frame and return its equivalent in the module frame. More...
 
Amg::Transform3D localToModuleTransform () const
 Transformation from local element to module frame. More...
 
bool isModuleFrame () const
 Check if the element and module frame are the same. More...
 
Element Extent

Methods to get extent of element in r,phi and z.

virtual double get_rz () const override final
 
Angle
double sinTilt () const
 Compute sin(tilt angle) at a given position: at center. More...
 
double sinTilt (const Amg::Vector2D &localPos) const
 at given local position More...
 
double sinTilt (const Amg::Vector3D &globalPosition) const
 at given global position More...
 
double sinStereo () const
 Compute sin(stereo angle) at a given position: at center. More...
 
double sinStereo (const Amg::Vector2D &localPos) const
 at given local position More...
 
double sinStereo (const Amg::Vector3D &globalPosition) const
 at given global position More...
 
double sinStereoLocal (const Amg::Vector2D &localPos) const
 Angle of strip in local frame with respect to the etaAxis. More...
 
double sinStereoLocal (const Amg::Vector3D &globalPos) const
 See previous method. More...
 
bool isStereo () const
 Check if it is the stereo side (useful for SCT) More...
 
Design methods
virtual const SiDetectorDesigndesign () const override final
 access to the local description (inline): More...
 
double phiPitch () const
 Pitch (inline methods) More...
 
double phiPitch (const Amg::Vector2D &localPosition) const
 Useful for SCT Forward. More...
 
InDetDD::CarrierType carrierType () const
 carrier type for readout. More...
 
bool swapPhiReadoutDirection () const
 Determine if readout direction between online and offline needs swapping. More...
 
bool swapEtaReadoutDirection () const
 For eta_index (only relevant for pixel) (inline) More...
 
Intersection Tests
bool nearBondGap (const Amg::Vector2D &localPosition, double etaTol) const
 Test if near bond gap within tolerances. More...
 
bool nearBondGap (const Amg::Vector3D &globalPosition, double etaTol) const
 
SiCellId gangedCell (const SiCellId &cellId) const
 If cell is ganged return the id of the other cell which shares the readout for this cell, otherwise return an invalid id. More...
 
Miscellaneous
std::pair< Amg::Vector3D, Amg::Vector3DendsOfStrip (const Amg::Vector2D &position) const
 Special method for SCT to retrieve the two ends of a "strip" Returned coordinates are in global frame. More...
 
virtual Trk::DetectorElemType detectorType () const override final
 TrkDetElementBase interface detectorType. More...
 
Cache handling

Methods to handle invalidating and updating caches.

The cached values include values that are affected by alignment

void invalidate ()
 Signal that cached values are no longer valid. More...
 
void setCache ()
 Set/calculate cache values (inline) More...
 
Common items

Inline method

const SiCommonItemsgetCommonItems () const
 
Identification

Methods to identify the element and identifier manipulation.

virtual Identifier identify () const override final
 identifier of this detector element (inline) More...
 
virtual IdentifierHash identifyHash () const override final
 identifier hash (inline) More...
 
const AtlasDetectorIDgetIdHelper () const
 Returns the id helper (inline) More...
 
Surface
Trk::Surfacesurface ()
 Element Surface. More...
 
virtual const Trk::Surfacesurface () const override final
 Return surface associated with this detector element. More...
 
virtual const Trk::Surfacesurface (const Identifier &) const override final
 TrkDetElementBase interface (inline) More...
 
Transformation
const GeoTrf::Transform3D & transformHit () const
 Local (simulation/hit frame) to global transform. More...
 
const HepGeom::Transform3D & transformCLHEP () const
 Local (reconstruction frame) to global transform. More...
 
virtual const Amg::Transform3Dtransform () const override final
 Return local to global transform. More...
 
virtual const Amg::Transform3Dtransform (const Identifier &) const override final
 TrkDetElementBase interface (inline) More...
 
const HepGeom::Transform3D defTransformCLHEP () const
 Default Local (reconstruction frame) to global transform ie with no misalignment. More...
 
const Amg::Transform3D defTransform () const
 
const HepGeom::Transform3D recoToHitTransform () const
 Transform to go from local reconstruction frame to local hit frame. More...
 
Orientation
double hitDepthDirection () const
 Directions of hit depth,phi,eta axes relative to reconstruction local position axes (LocalPosition). More...
 
double hitPhiDirection () const
 See previous method. More...
 
double hitEtaDirection () const
 See previous method. More...
 
const HepGeom::Vector3D< double > & phiAxisCLHEP () const
 To determine if readout direction between online and offline needs swapping, see methods swapPhiReadoutDirection() and swapEtaReadoutDirection() below in "Readout Cell id" section. More...
 
const Amg::Vector3DphiAxis () const
 
const HepGeom::Vector3D< double > & etaAxisCLHEP () const
 Get reconstruction local eta axes in global frame. More...
 
const Amg::Vector3DetaAxis () const
 
virtual const Amg::Vector3Dnormal () const override final
 Get reconstruction local normal axes in global frame. More...
 
virtual const Amg::Vector3Dnormal (const Identifier &) const override final
 TrkDetElementBase interface (inline) More...
 
Position
virtual const Amg::Vector3Dcenter () const override final
 Center in global coordinates. More...
 
virtual const Amg::Vector3Dcenter (const Identifier &) const override final
 TrkDetElementBase interface (inline) More...
 
HepGeom::Point3D< double > globalPositionHit (const HepGeom::Point3D< double > &simulationLocalPos) const
 transform a hit local position into a global position (inline): More...
 
Amg::Vector3D globalPositionHit (const Amg::Vector3D &simulationLocalPos) const
 
HepGeom::Point3D< double > globalPosition (const HepGeom::Point3D< double > &localPos) const
 transform a reconstruction local position into a global position (inline): More...
 
Amg::Vector3D globalPosition (const Amg::Vector3D &localPos) const
 
Amg::Vector3D globalPosition (const Amg::Vector2D &localPos) const
 as in previous method but for 2D local position (inline) More...
 
Amg::Vector2D hitLocalToLocal (double xEta, double xPhi) const
 Simulation/Hit local frame to reconstruction local frame. More...
 
HepGeom::Point3D< double > hitLocalToLocal3D (const HepGeom::Point3D< double > &hitPosition) const
 Same as previuos method but 3D. More...
 
Amg::Vector2D localPosition (const HepGeom::Point3D< double > &globalPosition) const
 transform a global position into a 2D local position (reconstruction frame) (inline) More...
 
Amg::Vector2D localPosition (const Amg::Vector3D &globalPosition) const
 
Element Extent

Inline methods to get extent of element in r,phi and z.

double rMin () const
 
double rMax () const
 
double zMin () const
 
double zMax () const
 
double phiMin () const
 
double phiMax () const
 
void getEtaPhiRegion (double deltaZ, double &etaMin, double &etaMax, double &phiMin, double &phiMax, double &rz) const
 Method for building up region of interest table. More...
 
Design methods
virtual const Trk::SurfaceBoundsbounds () const override final
 Return the boundaries of the element. More...
 
virtual const Trk::SurfaceBoundsbounds (const Identifier &) const override final
 TrkDetElementBase interface (inline) More...
 
double width () const
 Methods from design (inline) More...
 
double minWidth () const
 Min width. More...
 
double maxWidth () const
 Max width. More...
 
double length () const
 Length in eta direction (z - barrel, r - endcap) More...
 
double thickness () const
 
double etaPitch () const
 Pitch (inline methods) More...
 
Intersection Tests
SiIntersect inDetector (const Amg::Vector2D &localPosition, double phiTol, double etaTol) const
 Test that it is in the active region. More...
 
SiIntersect inDetector (const Amg::Vector3D &globalPosition, double phiTol, double etaTol) const
 
Readout cell id

Cell id's are the strip number in SCT and phi_index,eta_index in the pixel as defined in the offline identifier.

Their direction runs in the distPhi, distEta direction in the Reconstruction local frame.

For methods taking a SiCellId (basically phi,eta index for pixel or strip for SCT) you can do the following fro example:

  • For pixel
    localPositionOfCell(SiCellId(phi_index,eta_index));
  • For SCT
    localPositionOfCell(SiCellId(strip));
Identifier identifierOfPosition (const Amg::Vector2D &localPos) const
 Full identifier of the cell for a given position: assumes a raw local position (no Lorentz shift) More...
 
SiCellId cellIdOfPosition (const Amg::Vector2D &localPos) const
 As in previous method but returns SiCellId. More...
 
Amg::Vector2D rawLocalPositionOfCell (const SiCellId &cellId) const
 Returns position (center) of cell. More...
 
Amg::Vector2D rawLocalPositionOfCell (const Identifier &id) const
 As above. More...
 
int numberOfConnectedCells (const SiCellId cellId) const
 Test if readout cell has more than one diode associated with it. More...
 
SiCellId connectedCell (const SiCellId cellId, int number) const
 Get the cell ids sharing the readout for this cell. More...
 
bool depthDirection () const
 Return information on orientation. More...
 
bool etaDirection () const
 
bool phiDirection () const
 
double depthAngle () const
 
double etaAngle () const
 
double phiAngle () const
 
Cache handling

Methods to handle invalidating and updating caches.

The cached values include values that are affected by alignment

void invalidate ()
 Signal that cached values are no longer valid. More...
 
void setCache ()
 Set/calculate cache values (inline) More...
 
Common items

Inline method

const SiCommonItemsgetCommonItems () const
 
Surface
Trk::Surfacesurface ()
 Element Surface. More...
 
virtual const Trk::Surfacesurface () const override final
 Return surface associated with this detector element. More...
 
virtual const Trk::Surfacesurface (const Identifier &) const override final
 TrkDetElementBase interface (inline) More...
 
Transformation
const GeoTrf::Transform3D & transformHit () const
 Local (simulation/hit frame) to global transform. More...
 
const HepGeom::Transform3D & transformCLHEP () const
 Local (reconstruction frame) to global transform. More...
 
virtual const Amg::Transform3Dtransform () const override final
 Return local to global transform. More...
 
virtual const Amg::Transform3Dtransform (const Identifier &) const override final
 TrkDetElementBase interface (inline) More...
 
const HepGeom::Transform3D defTransformCLHEP () const
 Default Local (reconstruction frame) to global transform ie with no misalignment. More...
 
const Amg::Transform3D defTransform () const
 
const HepGeom::Transform3D recoToHitTransform () const
 Transform to go from local reconstruction frame to local hit frame. More...
 
Orientation
double hitDepthDirection () const
 Directions of hit depth,phi,eta axes relative to reconstruction local position axes (LocalPosition). More...
 
double hitPhiDirection () const
 See previous method. More...
 
double hitEtaDirection () const
 See previous method. More...
 
const HepGeom::Vector3D< double > & phiAxisCLHEP () const
 To determine if readout direction between online and offline needs swapping, see methods swapPhiReadoutDirection() and swapEtaReadoutDirection() below in "Readout Cell id" section. More...
 
const Amg::Vector3DphiAxis () const
 
const HepGeom::Vector3D< double > & etaAxisCLHEP () const
 Get reconstruction local eta axes in global frame. More...
 
const Amg::Vector3DetaAxis () const
 
virtual const Amg::Vector3Dnormal () const override final
 Get reconstruction local normal axes in global frame. More...
 
virtual const Amg::Vector3Dnormal (const Identifier &) const override final
 TrkDetElementBase interface (inline) More...
 
Intersection Tests
SiIntersect inDetector (const Amg::Vector2D &localPosition, double phiTol, double etaTol) const
 Test that it is in the active region. More...
 
SiIntersect inDetector (const Amg::Vector3D &globalPosition, double phiTol, double etaTol) const
 

Protected Attributes

Variables set by constructor

Protected data:

Identifier m_id {}
 identifier of this detector element More...
 
const DetectorDesignm_design {nullptr}
 local description of this detector element More...
 
const SiCommonItemsm_commonItems {nullptr}
 
std::unique_ptr< Trk::Surfacem_surface
 
const GeoAlignmentStorem_geoAlignStore {}
 
DetectorDesign::Axis m_hitEta
 Axes. More...
 
DetectorDesign::Axis m_hitPhi
 
DetectorDesign::Axis m_hitDepth
 
Variables set by commonConstructor
IdentifierHash m_idHash {}
 hash id of this detector element More...
 
Variables set by updateCache and not invalidated.

Directions of axes.

These are true if the hit/simulation and reconstruction local frames are in the same direction and false if they are opposite.

CxxUtils::CachedValue< AxisDirm_axisDir
 
Variables set by updateCache
CxxUtils::CachedValue< CachedValsm_cache
 
Cache vector of surfaces.
CxxUtils::CachedValue< std::vector< const Trk::Surface * > > m_surfaces
 
Variables set by constructor
const SiDetectorDesignm_siDesign
 
Variables set by commonConstructor
bool m_isPixel {false}
 
bool m_isSCT {false}
 
bool m_isPLR {false}
 
bool m_isDBM {false}
 
bool m_isBarrel {false}
 
Variables set by individual setter methods
const SiDetectorElementm_nextInEta {nullptr}
 
const SiDetectorElementm_prevInEta {nullptr}
 
const SiDetectorElementm_nextInPhi {nullptr}
 
const SiDetectorElementm_prevInPhi {nullptr}
 
const SiDetectorElementm_otherSide {nullptr}
 
Variables set by constructor

Protected data:

Identifier m_id {}
 identifier of this detector element More...
 
const DetectorDesignm_design {nullptr}
 local description of this detector element More...
 
const SiCommonItemsm_commonItems {nullptr}
 
std::unique_ptr< Trk::Surfacem_surface
 
const GeoAlignmentStorem_geoAlignStore {}
 
DetectorDesign::Axis m_hitEta
 Axes. More...
 
DetectorDesign::Axis m_hitPhi
 
DetectorDesign::Axis m_hitDepth
 
Variables set by commonConstructor
IdentifierHash m_idHash {}
 hash id of this detector element More...
 
Variables set by updateCache and not invalidated.

Directions of axes.

These are true if the hit/simulation and reconstruction local frames are in the same direction and false if they are opposite.

CxxUtils::CachedValue< AxisDirm_axisDir
 
Variables set by updateCache
CxxUtils::CachedValue< CachedValsm_cache
 
Variables set by constructor

Protected data:

Identifier m_id {}
 identifier of this detector element More...
 
const DetectorDesignm_design {nullptr}
 local description of this detector element More...
 
const SiCommonItemsm_commonItems {nullptr}
 
std::unique_ptr< Trk::Surfacem_surface
 
const GeoAlignmentStorem_geoAlignStore {}
 
DetectorDesign::Axis m_hitEta
 Axes. More...
 
DetectorDesign::Axis m_hitPhi
 
DetectorDesign::Axis m_hitDepth
 
Variables set by commonConstructor
IdentifierHash m_idHash {}
 hash id of this detector element More...
 
Variables set by updateCache and not invalidated.

Directions of axes.

These are true if the hit/simulation and reconstruction local frames are in the same direction and false if they are opposite.

CxxUtils::CachedValue< AxisDirm_axisDir
 
Variables set by updateCache
CxxUtils::CachedValue< CachedValsm_cache
 

Private Member Functions

Private Methods

Do not use locks.

void commonConstructor ()
 Common code for constructors. More...
 
virtual void updateCache () const override final
 Recalculate cached values. More...
 
bool determineStereo () const
 Find isStereo. More...
 
double sinStereoImpl () const
 Private implementation method with no lock at center. More...
 
double sinStereoImpl (const Amg::Vector3D &globalPosition) const
 Private implementation method with no lock at given global position. More...
 
Private Methods

Do not use locks.

void getExtent (CachedVals &cache) const
 Calculate extent in r,z and phi. More...
 
void getCorners (HepGeom::Point3D< double > *corners) const
 Return the four corners of an element in local coordinates. More...
 
void getEtaPhiPoint (const HepGeom::Point3D< double > &point, double deltaZ, double &etaMin, double &etaMax, double &phi) const
 Get eta and phi coresponding to a point in local coordinates. More...
 

Cache result of determineStereo().

CxxUtils::CachedValue< bool > m_isStereo
 
MsgStream & msg (MSG::Level lvl) const
 Declaring the Message method for further use (inline) More...
 
bool msgLvl (MSG::Level lvl) const
 Declaring the Method providing Verbosity Level (inline) More...
 

Detailed Description

Class to hold geometrical description of a silicon detector element. A detector element is a module in the pixels and one side of a module in the SCT. This class is shared between the Pixel and SCT detector since there is a lot of commonality. It inherits frm ReadoutGeometryBase/SolidStateDetectorElement, which is also used for HGTD

Coordinate Frames.

The following coordinate frames are used in these elements.

Directions of these correspond to the physical wafer. Consequently hitDepth and hitPhi axes go in different directions depending on the orientation of the module. The readout side is determined from design()->readoutSide().

The directions of the axes are defined as

Overview of Methods

Methods are grouped into the the following categories

Author
Grant Gorfine
  • modified & maintained: Nick Styles, Andreas Salzburger
  • modified Nigel Hessey: get directions from the design instead of hard-wiring them
Some notes on Thread safety for AthenaMT

The private methods of this class do not have locks.

The method updateCache of is of particular interest as it set all cache values.

The const methods call updateCache() when they need to perform lazy initialization

if (!m_cache.isValid()) updateCache();

So as concurrent const operations are valid

The non-const methods can set the state of the cache or the cache itself (invalidate/setCache methods etc)

Note: Synchronisation of creating SiDetElements for different events and accessing for each events can be done via write/read handles or similar EventContext aware framework machinery.

Definition at line 109 of file SiDetectorElement.h.

Constructor & Destructor Documentation

◆ SiDetectorElement() [1/4]

InDetDD::SiDetectorElement::SiDetectorElement ( const Identifier id,
const SiDetectorDesign design,
const GeoVFullPhysVol *  geophysvol,
const SiCommonItems commonItems,
const GeoAlignmentStore geoAlignStore = nullptr 
)

Constructor with parameters.

Definition at line 38 of file SiDetectorElement.cxx.

42  :
43  SolidStateDetectorElementBase(id,design,geophysvol,commonItems,geoAlignStore),
45  {
47  }

◆ ~SiDetectorElement()

InDetDD::SiDetectorElement::~SiDetectorElement ( )
virtualdefault

Destructor.

◆ SiDetectorElement() [2/4]

InDetDD::SiDetectorElement::SiDetectorElement ( )
delete

Don't allow no-argument constructor.

◆ SiDetectorElement() [3/4]

InDetDD::SiDetectorElement::SiDetectorElement ( const SiDetectorElement )
delete

Don't allow copy constructor.

◆ SiDetectorElement() [4/4]

InDetDD::SiDetectorElement::SiDetectorElement ( SiDetectorElement &&  )
delete

Don't allow move constructor.

Member Function Documentation

◆ bounds() [1/2]

const Trk::SurfaceBounds & InDetDD::SolidStateDetectorElementBase::bounds ( ) const
finaloverridevirtualinherited

Return the boundaries of the element.

Implements Trk::TrkDetElementBase.

Definition at line 198 of file SolidStateDetectorElementBase.cxx.

199  {
200  return m_design->bounds();
201  }

◆ bounds() [2/2]

virtual const Trk::SurfaceBounds& InDetDD::SolidStateDetectorElementBase::bounds ( const Identifier ) const
finaloverridevirtualinherited

TrkDetElementBase interface (inline)

Implements Trk::TrkDetElementBase.

◆ carrierType()

InDetDD::CarrierType InDetDD::SiDetectorElement::carrierType ( ) const

carrier type for readout.

ie holes for SCT and electrons for pixels. inline

◆ cellIdFromIdentifier()

SiCellId InDetDD::SiDetectorElement::cellIdFromIdentifier ( const Identifier identifier) const
finaloverridevirtual

SiCellId from Identifier.

Implements InDetDD::SolidStateDetectorElementBase.

Definition at line 120 of file SiDetectorElement.cxx.

121  {
122  SiCellId cellId; // Initialized in invalid state.
123 
124  // If something fails it returns the cellId in an invalid state.
125 
126  if (identifier.is_valid()) {
127  const auto *const pAtlasHelper = getIdHelper();
128  if (isPixel() and pAtlasHelper->helper() == AtlasDetectorID::HelperType::Pixel) {
129  const auto *const pixelIdHelper = static_cast<const PixelID*>(pAtlasHelper);
130  cellId = SiCellId(pixelIdHelper->phi_index(identifier), pixelIdHelper->eta_index(identifier));
131  } else if (isSCT() and pAtlasHelper->helper() == AtlasDetectorID::HelperType::SCT) {
132  const SCT_ID* sctIdHelper = static_cast<const SCT_ID*>(pAtlasHelper);
133  //This adds some extra code for supporting rows,
134  //but this method is only used in validation-type code
135  //So should not add an overhead in normal running
136  //(although we perhaps still try to avoid this...)
137  int strip = sctIdHelper->strip(identifier);
138  int row = sctIdHelper->row(identifier);
139  if(row>0){
140  const auto &sctDesign = *static_cast<const SiDetectorDesign *>(m_siDesign);
141  int strip1D = sctDesign.strip1Dim(strip, row);
142  cellId = SiCellId(strip1D);
143  }else {
144  cellId = SiCellId(strip);
145  }
146 
147  } else if (isPLR() and pAtlasHelper->helper() == AtlasDetectorID::HelperType::PLR) {
148  const PLR_ID* plrIdHelper = static_cast<const PLR_ID*>(pAtlasHelper);
149  cellId = SiCellId(plrIdHelper->phi_index(identifier), plrIdHelper->eta_index(identifier));
150  }
151  }
152 
153  return cellId;
154  }

◆ cellIdOfPosition()

SiCellId InDetDD::SolidStateDetectorElementBase::cellIdOfPosition ( const Amg::Vector2D localPos) const
inherited

As in previous method but returns SiCellId.

Definition at line 224 of file SolidStateDetectorElementBase.cxx.

225  {
227  }

◆ center() [1/2]

virtual const Amg::Vector3D& InDetDD::SolidStateDetectorElementBase::center ( ) const
finaloverridevirtualinherited

Center in global coordinates.

Implements Trk::TrkDetElementBase.

◆ center() [2/2]

virtual const Amg::Vector3D& InDetDD::SolidStateDetectorElementBase::center ( const Identifier ) const
finaloverridevirtualinherited

TrkDetElementBase interface (inline)

Implements Trk::TrkDetElementBase.

◆ commonConstructor()

void InDetDD::SiDetectorElement::commonConstructor ( )
private

Common code for constructors.

Definition at line 349 of file SiDetectorElement.cxx.

350  {
351  if (!m_id.is_valid()) throw std::runtime_error("SiDetectorElement: Invalid identifier");
352 
353  // Set booleans for wether we are pixel/sct barrel/endcap
356  // we use is_lumi here instead of is_plr because is_plr is currently only setup
357  // for ExpandedIdentifiers and not Identifiers, which is what is needed here.
359  if (!m_isPixel && !m_isSCT && !m_isPLR) {
360  ATH_MSG_WARNING("Element id is not for pixel, SCT, or PLR");
361  }
362 
363  // Set m_idHash. Also set m_isBarrel.
365  const PixelID* pixelId = static_cast<const PixelID*>(getIdHelper());
366  if (pixelId) {
367  m_isBarrel = pixelId->is_barrel(m_id);
368  m_idHash = pixelId->wafer_hash(m_id);
369 
370  if (pixelId->is_dbm(m_id)) {
371  m_isBarrel = false;
372  m_isDBM = true;
373  }
374  }
375  } else if (isSCT() and getIdHelper()->helper() == AtlasDetectorID::HelperType::SCT) {
376  const SCT_ID* sctId = static_cast<const SCT_ID*>(getIdHelper());
377  if (sctId) {
378  m_isBarrel = sctId->is_barrel(m_id);
379  m_idHash = sctId->wafer_hash(m_id);
380  }
381  } else if (isPLR() and getIdHelper()->helper() == AtlasDetectorID::HelperType::PLR) {
382  const PLR_ID* plrId = static_cast<const PLR_ID*>(getIdHelper());
383  if (plrId) {
384  m_isBarrel = plrId->is_barrel(m_id);
385  m_idHash = plrId->wafer_hash(m_id);
386  }
387  }
388 
389  if (!m_idHash.is_valid()) throw std::runtime_error("SiDetectorElement: Unable to set IdentifierHash");
390 
391  // Set surface
392  m_surface = std::make_unique<Trk::PlaneSurface>(*this);
393 
394  }

◆ connectedCell()

SiCellId InDetDD::SolidStateDetectorElementBase::connectedCell ( const SiCellId  cellId,
int  number 
) const
inherited

Get the cell ids sharing the readout for this cell.

number = 0 will return the primary readout cell id.

Definition at line 250 of file SolidStateDetectorElementBase.cxx.

251  {
252  SiReadoutCellId readoutId = m_design->readoutIdOfCell(cellId);
253  return m_design->connectedCell(readoutId, number);
254  }

◆ defModuleTransform()

Amg::Transform3D InDetDD::SiDetectorElement::defModuleTransform ( ) const

Default module to global frame transform, ie with no misalignment.

The module frame is defined to be the local reconstruction frame of the axial layer in the SCT. For the pixel it is the same as the element.

Definition at line 179 of file SiDetectorElement.cxx.

180  {
182  }

◆ defTransform()

const Amg::Transform3D InDetDD::SolidStateDetectorElementBase::defTransform ( ) const
inherited

Definition at line 60 of file SolidStateDetectorElementBase.cxx.

61  {
62  HepGeom::Transform3D tmpTransform = defTransformCLHEP();
63  return Amg::CLHEPTransformToEigen(tmpTransform);
64  }

◆ defTransformCLHEP()

const HepGeom::Transform3D InDetDD::SolidStateDetectorElementBase::defTransformCLHEP ( ) const
inherited

Default Local (reconstruction frame) to global transform ie with no misalignment.

Definition at line 50 of file SolidStateDetectorElementBase.cxx.

51  {
52  if (m_geoAlignStore) {
53  const GeoTrf::Transform3D* ptrXf = m_geoAlignStore->getDefAbsPosition(getMaterialGeom());
54  if (ptrXf) return Amg::EigenTransformToCLHEP(*ptrXf) * recoToHitTransform();
55  }
56  return Amg::EigenTransformToCLHEP(getMaterialGeom()->getDefAbsoluteTransform()) * recoToHitTransform();
57  }

◆ depthAngle()

double InDetDD::SolidStateDetectorElementBase::depthAngle ( ) const
inherited

◆ depthDirection()

bool InDetDD::SolidStateDetectorElementBase::depthDirection ( ) const
inherited

Return information on orientation.

◆ design()

virtual const SiDetectorDesign& InDetDD::SiDetectorElement::design ( ) const
finaloverridevirtual

access to the local description (inline):

Reimplemented from InDetDD::SolidStateDetectorElementBase.

◆ detectorType()

virtual Trk::DetectorElemType InDetDD::SiDetectorElement::detectorType ( ) const
finaloverridevirtual

TrkDetElementBase interface detectorType.

Reimplemented from InDetDD::SolidStateDetectorElementBase.

◆ detectorTypeString()

std::string Trk::TrkDetElementBase::detectorTypeString ( ) const
inherited

Returns a string of the Detector element type.

Definition at line 10 of file TrkDetElementBase.cxx.

10  {
11  auto type = detectorType();
13  return "SolidState";
15  return "Silicon";
16  else if (type == Trk::DetectorElemType::TRT)
17  return "TRT";
18  else if (type == Trk::DetectorElemType::Csc)
19  return "Csc";
20  else if (type == Trk::DetectorElemType::Mdt)
21  return "Mdt";
22  else if (type == Trk::DetectorElemType::Rpc)
23  return "Rpc";
24  else if (type == Trk::DetectorElemType::Tgc)
25  return "Tgc";
27  return "sTgc";
28  else if (type == Trk::DetectorElemType::MM)
29  return "Mm";
30  return "Unknown";
31 }

◆ determineStereo()

bool InDetDD::SiDetectorElement::determineStereo ( ) const
private

Find isStereo.

Definition at line 417 of file SiDetectorElement.cxx.

418  {
420  double sinStereoThis = std::abs(sinStereoImpl()); // Call the private impl method
421  double sinStereoOther = std::abs(m_otherSide->sinStereo());
422  if (std::abs(sinStereoThis - sinStereoOther) < 1e-5) {
423  // If they happen to be equal then set side0 as axial and side1 as stereo.
424  const SCT_ID* sctId = static_cast<const SCT_ID*>(getIdHelper());
425  if (sctId) {
426  int side = sctId->side(m_id);
427  return (side == 1);
428  }
429  } else {
430  // set the stereo side as the one with largest absolute sinStereo.
431  return (sinStereoThis > sinStereoOther);
432  }
433  }
434 
435  return false;
436  }

◆ endsOfStrip()

std::pair< Amg::Vector3D, Amg::Vector3D > InDetDD::SiDetectorElement::endsOfStrip ( const Amg::Vector2D position) const

Special method for SCT to retrieve the two ends of a "strip" Returned coordinates are in global frame.

Definition at line 339 of file SiDetectorElement.cxx.

340  {
341  //again with the casting...
342  const std::pair<Amg::Vector2D,Amg::Vector2D> localEnds=
343  static_cast<const SiDetectorDesign *>(m_siDesign)->endsOfStrip(position);
344  return std::pair<Amg::Vector3D,Amg::Vector3D >(globalPosition(localEnds.first),
345  globalPosition(localEnds.second));
346  }

◆ etaAngle()

double InDetDD::SolidStateDetectorElementBase::etaAngle ( ) const
inherited

◆ etaAxis()

const Amg::Vector3D & InDetDD::SolidStateDetectorElementBase::etaAxis ( ) const
inherited

Definition at line 88 of file SolidStateDetectorElementBase.cxx.

89  {
90  if (!m_cache.isValid()) updateCache();
91  return m_cache.ptr()->m_etaAxis;
92  }

◆ etaAxisCLHEP()

const HepGeom::Vector3D< double > & InDetDD::SolidStateDetectorElementBase::etaAxisCLHEP ( ) const
inherited

Get reconstruction local eta axes in global frame.

In direction of increasing z in the barrel and increasing r in the endcap.

Definition at line 81 of file SolidStateDetectorElementBase.cxx.

82  {
83  if (!m_cache.isValid()) updateCache();
84  return m_cache.ptr()->m_etaAxisCLHEP;
85  }

◆ etaDirection()

bool InDetDD::SolidStateDetectorElementBase::etaDirection ( ) const
inherited

◆ etaPitch()

double InDetDD::SolidStateDetectorElementBase::etaPitch ( ) const
inherited

Pitch (inline methods)

NOTE: phiPitch is ambiguous for the Forward SCT where it varies along the strip.
etaPitch is ambiguous for the pixel which has long pixels between FE chips.
For these cases:

phiPitch: For SCT Forward returns pitch at center.
etaPitch: For pixel returns average pitch. (Active_length/number_of_cells)
All return pitch in distance units.

◆ gangedCell()

SiCellId InDetDD::SiDetectorElement::gangedCell ( const SiCellId cellId) const

If cell is ganged return the id of the other cell which shares the readout for this cell, otherwise return an invalid id.

This is a more convenient (and slightly faster) alternative than using the above two methods. Only relevant for pixel. For SCT always returns an invalid ID. (inline)

◆ get_rz()

double InDetDD::SiDetectorElement::get_rz ( ) const
finaloverridevirtual

Implements InDetDD::SolidStateDetectorElementBase.

Definition at line 309 of file SiDetectorElement.cxx.

310  {
311  // Calculate rz = r (barrel) or z (endcap)
312  // Use center of sensor ((0,0,0) in local coordinates) for determining this.
313  // HepGeom::Point3D<double> globalCenter = globalPosition(HepGeom::Point3D<double>(0,0,0));
314  if (isBarrel()) {
315  return center().perp(); // r
316  } else {
317  return center().z(); // z
318  }
319  }

◆ getCommonItems()

const SiCommonItems* InDetDD::SolidStateDetectorElementBase::getCommonItems ( ) const
inherited

◆ getCorners()

void InDetDD::SolidStateDetectorElementBase::getCorners ( HepGeom::Point3D< double > *  corners) const
privateinherited

Return the four corners of an element in local coordinates.

Pass it an array of length 4. This function is used by getEtaPhiRegion()

Definition at line 551 of file SolidStateDetectorElementBase.cxx.

552  {
553  // This makes the assumption that the forward SCT detectors are orientated such that
554  // the positive etaAxis corresponds to the top of the detector where the width is largest.
555  // This is currently always the case.
556  // For the SCT barrel and pixel detectors minWidth and maxWidth are the same and so should
557  // work for all orientations.
558 
559  double tmpMinWidth = minWidth();
560  double tmpMaxWidth = maxWidth();
561  double tmpLength = length();
562 
563  // Lower left
564  corners[0][distPhi] = -0.5 * tmpMinWidth;
565  corners[0][distEta] = -0.5 * tmpLength;
566  corners[0][distDepth] = 0.;
567 
568  // Lower right
569  corners[1][distPhi] = 0.5 * tmpMinWidth;
570  corners[1][distEta] = -0.5 * tmpLength;
571  corners[1][distDepth] = 0.;
572 
573  // Upper Right
574  corners[2][distPhi] = 0.5 * tmpMaxWidth;
575  corners[2][distEta] = 0.5 * tmpLength;
576  corners[2][distDepth] = 0.;
577 
578  // Upper left
579  corners[3][distPhi] = -0.5 * tmpMaxWidth;
580  corners[3][distEta] = 0.5 * tmpLength;
581  corners[3][distDepth] = 0.;
582  }

◆ getEtaPhiPoint()

void InDetDD::SolidStateDetectorElementBase::getEtaPhiPoint ( const HepGeom::Point3D< double > &  point,
double  deltaZ,
double &  etaMin,
double &  etaMax,
double &  phi 
) const
privateinherited

Get eta and phi coresponding to a point in local coordinates.

Requires as input the vertex spread. Returns etaMin, etaMax, and phi. This function is used by getEtaPhiRegion()

Definition at line 589 of file SolidStateDetectorElementBase.cxx.

591  {
592  // Get the point in global coordinates.
593  HepGeom::Point3D<double> globalPoint = globalPosition(point);
594 
595  double r = globalPoint.perp();
596  double z = globalPoint.z();
597 
598  double thetaMin = std::atan2(r,(z + deltaZ));
599  etaMax = -std::log(tan(0.5 * thetaMin));
600  double thetaMax = std::atan2(r,(z - deltaZ));
601  etaMin = -std::log(tan(0.5 * thetaMax));
602 
603  phi = globalPoint.phi();
604  }

◆ getEtaPhiRegion()

void InDetDD::SolidStateDetectorElementBase::getEtaPhiRegion ( double  deltaZ,
double &  etaMin,
double &  etaMax,
double &  phiMin,
double &  phiMax,
double &  rz 
) const
inherited

Method for building up region of interest table.

Get eta/phi extent for the element. Returns min/max eta and phi and r (for barrel) or z (for endcap) Takes as input the vertex spread in z (-deltaZ to +deltaZ)

Definition at line 140 of file SolidStateDetectorElementBase.cxx.

142  {
143  HepGeom::Point3D<double> corners[4];
144  getCorners(corners);
145 
146  bool first = true;
147 
148  double phiOffset = 0.;
149 
150  for (auto & corner : corners) {
151  double etaMinPoint = 0.;
152  double etaMaxPoint = 0.;
153  double phiPoint = 0.;
154 
155  // Get the eta phi value for this corner.
156  getEtaPhiPoint(corner, deltaZ, etaMinPoint, etaMaxPoint, phiPoint);
157 
158  if (first) { // Use the first point to initialize the min/max values.
159 
160  // Put phi in a range so that we are not near -180/+180 division.
161  // Do this by adding an offset if phi > 90 CLHEP::deg or < -90 CLHEP::deg.
162  // This offset is later removed.
163  if (phiPoint < -0.5 * M_PI) {
164  phiOffset = -0.5 * M_PI;
165  } else if (phiPoint > 0.5 * M_PI) {
166  phiOffset = 0.5 * M_PI;
167  }
168  phiMin = phiMax = phiPoint - phiOffset;
169  etaMin = etaMinPoint;
170  etaMax = etaMaxPoint;
171  } else {
172  phiPoint -= phiOffset;
173  // put phi back in -M_PI < phi < +M_PI range
174  if (phiPoint < -M_PI) phiPoint += 2. * M_PI;
175  if (phiPoint > M_PI) phiPoint -= 2. * M_PI;
176  phiMin = std::min(phiMin, phiPoint);
177  phiMax = std::max(phiMax, phiPoint);
178  etaMin = std::min(etaMin, etaMinPoint);
179  etaMax = std::max(etaMax, etaMaxPoint);
180  }
181  first = false;
182  }
183 
184  // put phi back in -M_PI < phi < +M_PI range
185  phiMin += phiOffset;
186  phiMax += phiOffset;
187  if (phiMin < -M_PI) phiMin += 2. * M_PI;
188  if (phiMin > M_PI) phiMin -= 2. * M_PI;
189  if (phiMax < -M_PI) phiMax += 2. * M_PI;
190  if (phiMax > M_PI) phiMax -= 2. * M_PI;
191  //does it make sense having this if the below is pure virtual for this base class?
192  //Should this just be postponed to the derived classes?
193  rz = get_rz();
194 
195  }

◆ getExtent()

void InDetDD::SolidStateDetectorElementBase::getExtent ( CachedVals cache) const
privateinherited

Calculate extent in r,z and phi.

The values are cached and there are rMin(), rMax etc methods. It is only used from updateCache

Definition at line 483 of file SolidStateDetectorElementBase.cxx.

484  {
485  Amg::Vector3D sensorCenter = m_design->sensorCenter();
486  double radialShift = sensorCenter[0];//in sensor frame, x is radius
487 
488  HepGeom::Point3D<double> corners[4];
489  getCorners(corners);
490 
491  bool first = true;
492 
493  double phiOffset = 0.;
494 
495 
496  const HepGeom::Transform3D rShift = HepGeom::TranslateY3D(radialShift);//in local frame, radius is y=distEta
497 
498  for (auto & corner : corners) {
499 
500  corner.transform(rShift);
501 
502  // m_tranform is already there as part of the cache construction
503  // This method seems to be used only as a helper for updateCache
504  HepGeom::Point3D<double> globalPoint = cache.m_transformCLHEP * corner;
505 
506  double rPoint = globalPoint.perp();
507  double zPoint = globalPoint.z();
508  double phiPoint = globalPoint.phi();
509 
510  // Use first point to initializa min/max values.
511  if (first) {
512 
513  // Put phi in a range so that we are not near -180/+180 division.
514  // Do this by adding an offset if phi > 90 CLHEP::deg or < -90 CLHEP::deg.
515  // This offset is later removed.
516  if (phiPoint < -0.5 * M_PI) {
517  phiOffset = -0.5 * M_PI;
518  } else if (phiPoint > 0.5 * M_PI) {
519  phiOffset = 0.5 * M_PI;
520  }
521  cache.m_minPhi = cache.m_maxPhi = phiPoint - phiOffset;
522  cache.m_minR = cache.m_maxR = rPoint;
523  cache.m_minZ = cache.m_maxZ = zPoint;
524 
525  } else {
526  phiPoint -= phiOffset;
527  // put phi back in -M_PI < phi < +M_PI range
528  if (phiPoint < -M_PI) phiPoint += 2. * M_PI;
529  if (phiPoint > M_PI) phiPoint -= 2. * M_PI;
530  cache.m_minPhi = std::min(cache.m_minPhi, phiPoint);
531  cache.m_maxPhi = std::max(cache.m_maxPhi, phiPoint);
532  cache.m_minR = std::min(cache.m_minR, rPoint);
533  cache.m_maxR = std::max(cache.m_maxR, rPoint);
534  cache.m_minZ = std::min(cache.m_minZ, zPoint);
535  cache.m_maxZ = std::max(cache.m_maxZ, zPoint);
536  }
537  first = false;
538  }
539 
540  // put phi back in -M_PI < phi < +M_PI range
541  cache.m_minPhi += phiOffset;
542  cache.m_maxPhi += phiOffset;
543  if (cache.m_minPhi < -M_PI) cache.m_minPhi += 2. * M_PI;
544  if (cache.m_minPhi > M_PI) cache.m_minPhi -= 2. * M_PI;
545  if (cache.m_maxPhi < -M_PI) cache.m_maxPhi += 2. * M_PI;
546  if (cache.m_maxPhi > M_PI) cache.m_maxPhi -= 2. * M_PI;
547 
548  }

◆ getIdHelper()

const AtlasDetectorID* InDetDD::SolidStateDetectorElementBase::getIdHelper ( ) const
inherited

Returns the id helper (inline)

◆ globalPosition() [1/3]

Amg::Vector3D InDetDD::SolidStateDetectorElementBase::globalPosition ( const Amg::Vector2D localPos) const
inherited

as in previous method but for 2D local position (inline)

◆ globalPosition() [2/3]

Amg::Vector3D InDetDD::SolidStateDetectorElementBase::globalPosition ( const Amg::Vector3D localPos) const
inherited

◆ globalPosition() [3/3]

HepGeom::Point3D<double> InDetDD::SolidStateDetectorElementBase::globalPosition ( const HepGeom::Point3D< double > &  localPos) const
inherited

transform a reconstruction local position into a global position (inline):

◆ globalPositionHit() [1/2]

Amg::Vector3D InDetDD::SolidStateDetectorElementBase::globalPositionHit ( const Amg::Vector3D simulationLocalPos) const
inherited

◆ globalPositionHit() [2/2]

HepGeom::Point3D<double> InDetDD::SolidStateDetectorElementBase::globalPositionHit ( const HepGeom::Point3D< double > &  simulationLocalPos) const
inherited

transform a hit local position into a global position (inline):

◆ hitDepthDirection()

double InDetDD::SolidStateDetectorElementBase::hitDepthDirection ( ) const
inherited

Directions of hit depth,phi,eta axes relative to reconstruction local position axes (LocalPosition).

Returns +/-1. inline

◆ hitEtaDirection()

double InDetDD::SolidStateDetectorElementBase::hitEtaDirection ( ) const
inherited

See previous method.

inline

◆ hitLocalToLocal()

Amg::Vector2D InDetDD::SolidStateDetectorElementBase::hitLocalToLocal ( double  xEta,
double  xPhi 
) const
inherited

Simulation/Hit local frame to reconstruction local frame.

2D. TODO: Will change order of parameters at some point.

Definition at line 95 of file SolidStateDetectorElementBase.cxx.

96  { // due to whether module is centred on
97  if (!m_axisDir.isValid()) updateCache(); // z or y axes
98  const AxisDir& dir = *m_axisDir.ptr();
99 
100  if (!dir.m_etaDirection) xEta = -xEta;
101  if (!dir.m_phiDirection) xPhi = -xPhi;
102  auto result = Amg::Vector2D(xPhi, xEta);
103 
104  if (m_design->shape() == InDetDD::PolarAnnulus) { // Do conversion to polar co-ords as well
105  double y = result.x(); // Co-ordinate flip from cartesian needs to be temporarily un-done to
106  double x = result.y(); // allow atan2 to work in conversion
107 
108  double r = std::hypot(x,y);
109  double phi = std::atan2(y,x);
110  result = Amg::Vector2D(phi,r); // now flip again
111  }
112 
113  return result;
114  }

◆ hitLocalToLocal3D()

HepGeom::Point3D< double > InDetDD::SolidStateDetectorElementBase::hitLocalToLocal3D ( const HepGeom::Point3D< double > &  hitPosition) const
inherited

Same as previuos method but 3D.

Definition at line 117 of file SolidStateDetectorElementBase.cxx.

118  {
119  // Equiv to transform().inverse * transformHit() * hitPosition
120  if (!m_axisDir.isValid()) updateCache();
121  const AxisDir& dir = *m_axisDir.ptr();
122 
123  double xDepth = hitPosition[m_hitDepth];
124  double xPhi = hitPosition[m_hitPhi];
125  double xEta = hitPosition[m_hitEta];
126  if (!dir.m_depthDirection) xDepth = -xDepth;
127  if (!dir.m_phiDirection) xPhi = -xPhi;
128  if (!dir.m_etaDirection) xEta = -xEta;
129  return {xPhi, xEta, xDepth};
130  }

◆ hitPhiDirection()

double InDetDD::SolidStateDetectorElementBase::hitPhiDirection ( ) const
inherited

See previous method.

inline

◆ identifierFromCellId()

Identifier InDetDD::SiDetectorElement::identifierFromCellId ( const SiCellId cellId) const
finaloverridevirtual

Identifier <-> SiCellId (ie strip number or pixel eta_index,phi_index) Identifier from SiCellId (ie strip number or pixel eta_index,phi_index)

Implements InDetDD::SolidStateDetectorElementBase.

Definition at line 89 of file SiDetectorElement.cxx.

90  {
91  Identifier id; // Will be initialized in an invalid state.
92 
93  // If something fails it returns the id in an invalid state.
94 
95  if (cellId.isValid()) {
96  const auto *const pAtlasHelper = getIdHelper();
97  if (isPixel()) {
98  if (pAtlasHelper->helper() == AtlasDetectorID::HelperType::Pixel) {
99  const PixelID* pixelIdHelper = static_cast<const PixelID*>(pAtlasHelper);
100  id = pixelIdHelper->pixel_id(m_id, cellId.phiIndex(), cellId.etaIndex());
101  }
102  } else if (isSCT()) {
103 
104  if (pAtlasHelper->helper() == AtlasDetectorID::HelperType::SCT) {
105  const SCT_ID* sctIdHelper = static_cast<const SCT_ID*>(pAtlasHelper);
106  id = sctIdHelper->strip_id(m_id, cellId.strip());
107  }
108  } else if (isPLR()) {
109  if (pAtlasHelper->helper() == AtlasDetectorID::HelperType::PLR) {
110  const PLR_ID* plrIdHelper = static_cast<const PLR_ID*>(pAtlasHelper);
111  id = plrIdHelper->pixel_id(m_id, cellId.phiIndex(), cellId.etaIndex());
112  }
113  }
114  }
115 
116  return id;
117  }

◆ identifierOfPosition()

Identifier InDetDD::SolidStateDetectorElementBase::identifierOfPosition ( const Amg::Vector2D localPos) const
inherited

Full identifier of the cell for a given position: assumes a raw local position (no Lorentz shift)

Definition at line 217 of file SolidStateDetectorElementBase.cxx.

218  {
219  SiCellId cellId = m_design->cellIdOfPosition(localPosition);
220  return identifierFromCellId(cellId);
221  }

◆ identify()

virtual Identifier InDetDD::SolidStateDetectorElementBase::identify ( ) const
finaloverridevirtualinherited

identifier of this detector element (inline)

Implements Trk::TrkDetElementBase.

◆ identifyHash()

virtual IdentifierHash InDetDD::SolidStateDetectorElementBase::identifyHash ( ) const
finaloverridevirtualinherited

identifier hash (inline)

Implements Trk::TrkDetElementBase.

◆ inDetector() [1/2]

SiIntersect InDetDD::SolidStateDetectorElementBase::inDetector ( const Amg::Vector2D localPosition,
double  phiTol,
double  etaTol 
) const
inherited

Test that it is in the active region.

Intersect has 3 states bool SiIntersect::in() const // definitely in
bool SiIntersect::out() const // definitely out
bool SiIntersect::nearBoundary() const // near a boundary within the tolerances
bool SiIntersect::mayIntersect() const // in() OR nearBoundary()

Definition at line 204 of file SolidStateDetectorElementBase.cxx.

206  {
207  return m_design->inDetector(localPosition, phiTol, etaTol);
208  }

◆ inDetector() [2/2]

SiIntersect InDetDD::SolidStateDetectorElementBase::inDetector ( const Amg::Vector3D globalPosition,
double  phiTol,
double  etaTol 
) const
inherited

Definition at line 211 of file SolidStateDetectorElementBase.cxx.

212  {
213  return m_design->inDetector(localPosition(globalPosition), phiTol, etaTol);
214  }

◆ invalidate()

void InDetDD::SolidStateDetectorElementBase::invalidate ( )
inherited

Signal that cached values are no longer valid.

Invalidate general cache (inline)

◆ isBarrel()

bool InDetDD::SiDetectorElement::isBarrel ( ) const

◆ isBlayer()

bool InDetDD::SiDetectorElement::isBlayer ( ) const

Definition at line 53 of file SiDetectorElement.cxx.

54  {
55  if (const auto *const pIdHelper= getIdHelper();isPixel() and isBarrel() and
56  pIdHelper->helper() == AtlasDetectorID::HelperType::Pixel) {
57  const PixelID* p_pixelId = static_cast<const PixelID*>(pIdHelper);
58  return (0==p_pixelId->layer_disk(m_id));
59  } else {
60  return false;
61  }
62  }

◆ isDBM()

bool InDetDD::SiDetectorElement::isDBM ( ) const

◆ isEndcap()

bool InDetDD::SiDetectorElement::isEndcap ( ) const

◆ isInnermostPixelLayer()

bool InDetDD::SiDetectorElement::isInnermostPixelLayer ( ) const

Definition at line 65 of file SiDetectorElement.cxx.

66  {
67  if (const auto *const pIdHelper= getIdHelper(); isPixel() and isBarrel()
68  and pIdHelper->helper() == AtlasDetectorID::HelperType::Pixel) {
69  const PixelID* p_pixelId = static_cast<const PixelID*>(pIdHelper);
70  return ( 0==p_pixelId->layer_disk(m_id));
71  } else {
72  return false;
73  }
74  }

◆ isModuleFrame()

bool InDetDD::SiDetectorElement::isModuleFrame ( ) const

Check if the element and module frame are the same.

Definition at line 212 of file SiDetectorElement.cxx.

213  {
214  // The module frame is the axial side.
215  // NB isStereo returns false for the pixel and so
216  // isModuleFrame is always true for the pixel.
217 
218  return !isStereo();
219  }

◆ isNextToInnermostPixelLayer()

bool InDetDD::SiDetectorElement::isNextToInnermostPixelLayer ( ) const

Definition at line 77 of file SiDetectorElement.cxx.

78  {
79  if (const auto *const pIdHelper = getIdHelper(); isPixel() and isBarrel() and
80  pIdHelper->helper() == AtlasDetectorID::HelperType::Pixel) {
81  const PixelID* p_pixelId = static_cast<const PixelID*>(pIdHelper);
82  return ( 1==p_pixelId->layer_disk(m_id));
83  } else {
84  return false;
85  }
86  }

◆ isPixel()

bool InDetDD::SiDetectorElement::isPixel ( ) const

◆ isPLR()

bool InDetDD::SiDetectorElement::isPLR ( ) const

◆ isSCT()

bool InDetDD::SiDetectorElement::isSCT ( ) const

◆ isStereo()

bool InDetDD::SiDetectorElement::isStereo ( ) const

Check if it is the stereo side (useful for SCT)

Definition at line 300 of file SiDetectorElement.cxx.

301  {
302  if (!m_isStereo.isValid()) {
304  }
305 
306  return *m_isStereo.ptr();
307  }

◆ length()

double InDetDD::SolidStateDetectorElementBase::length ( ) const
inherited

Length in eta direction (z - barrel, r - endcap)

◆ localPosition() [1/2]

Amg::Vector2D InDetDD::SolidStateDetectorElementBase::localPosition ( const Amg::Vector3D globalPosition) const
inherited

◆ localPosition() [2/2]

Amg::Vector2D InDetDD::SolidStateDetectorElementBase::localPosition ( const HepGeom::Point3D< double > &  globalPosition) const
inherited

transform a global position into a 2D local position (reconstruction frame) (inline)

◆ localToModuleFrame()

Amg::Transform3D InDetDD::SiDetectorElement::localToModuleFrame ( const Amg::Transform3D localTransform) const

Take a transform of the local element frame and return its equivalent in the module frame.

Definition at line 192 of file SiDetectorElement.cxx.

193  {
194  if (isModuleFrame()) {
195  return localTransform;
196  } else {
197  return m_otherSide->transform().inverse() * transform() * localTransform * transform().inverse() * m_otherSide->transform();
198  }
199  }

◆ localToModuleTransform()

Amg::Transform3D InDetDD::SiDetectorElement::localToModuleTransform ( ) const

Transformation from local element to module frame.

This can be used to take a local position in the element frame and transform it to a position in the module frame. If one is already in the module frame it will return the Identity transform.

Definition at line 202 of file SiDetectorElement.cxx.

203  {
204  if (isModuleFrame()) {
205  return {}; // Identity
206  } else {
207  return m_otherSide->transform().inverse() * transform();
208  }
209  }

◆ maxWidth()

double InDetDD::SolidStateDetectorElementBase::maxWidth ( ) const
inherited

Max width.

Needed for the SCT endcap.

◆ minWidth()

double InDetDD::SolidStateDetectorElementBase::minWidth ( ) const
inherited

Min width.

Needed for the SCT endcap.

◆ moduleTransform()

const Amg::Transform3D & InDetDD::SiDetectorElement::moduleTransform ( ) const

Module to global frame transform.

Includes misalignment. The module frame is defined to be the local reconstruction frame of the axial layer in the SCT. For the pixel it is the same as the element.

Definition at line 173 of file SiDetectorElement.cxx.

174  {
175  return (isModuleFrame()) ? transform() : m_otherSide->transform();
176  }

◆ msg()

MsgStream& InDetDD::SiDetectorElement::msg ( MSG::Level  lvl) const
protected

Declaring the Message method for further use (inline)

◆ msgLvl()

bool InDetDD::SiDetectorElement::msgLvl ( MSG::Level  lvl) const
protected

Declaring the Method providing Verbosity Level (inline)

◆ nearBondGap() [1/2]

bool InDetDD::SiDetectorElement::nearBondGap ( const Amg::Vector2D localPosition,
double  etaTol 
) const

Test if near bond gap within tolerances.

Definition at line 323 of file SiDetectorElement.cxx.

324  {
325  //again, can we avoid casting here?
326  return static_cast<const SiDetectorDesign *>(m_siDesign)->nearBondGap(localPosition, etaTol);
327  }

◆ nearBondGap() [2/2]

bool InDetDD::SiDetectorElement::nearBondGap ( const Amg::Vector3D globalPosition,
double  etaTol 
) const

Definition at line 330 of file SiDetectorElement.cxx.

331  {
332  return static_cast<const SiDetectorDesign *>(m_siDesign)->nearBondGap(localPosition(globalPosition), etaTol);
333  }

◆ nextInEta()

const SiDetectorElement* InDetDD::SiDetectorElement::nextInEta ( ) const

◆ nextInPhi()

const SiDetectorElement* InDetDD::SiDetectorElement::nextInPhi ( ) const

◆ normal() [1/2]

virtual const Amg::Vector3D& InDetDD::SolidStateDetectorElementBase::normal ( ) const
finaloverridevirtualinherited

Get reconstruction local normal axes in global frame.

Choosen to give right-handed coordinate frame.

Implements Trk::TrkDetElementBase.

◆ normal() [2/2]

virtual const Amg::Vector3D& InDetDD::SolidStateDetectorElementBase::normal ( const Identifier ) const
finaloverridevirtualinherited

TrkDetElementBase interface (inline)

Implements Trk::TrkDetElementBase.

◆ numberOfConnectedCells()

int InDetDD::SolidStateDetectorElementBase::numberOfConnectedCells ( const SiCellId  cellId) const
inherited

Test if readout cell has more than one diode associated with it.

Number of cells sharing the same readout as this cell. ie generally 1 except for ganged pixels which will be 2.

Definition at line 243 of file SolidStateDetectorElementBase.cxx.

244  {
245  SiReadoutCellId readoutId = m_design->readoutIdOfCell(cellId);
246  return m_design->numberOfConnectedCells(readoutId);
247  }

◆ operator=() [1/2]

SiDetectorElement& InDetDD::SiDetectorElement::operator= ( const SiDetectorElement )
delete

Don't allow assignment operator.

◆ operator=() [2/2]

SiDetectorElement& InDetDD::SiDetectorElement::operator= ( SiDetectorElement &&  )
delete

Don't allow move assignment operator.

◆ otherSide()

const SiDetectorElement* InDetDD::SiDetectorElement::otherSide ( ) const

Useful for SCT only.

◆ phiAngle()

double InDetDD::SolidStateDetectorElementBase::phiAngle ( ) const
inherited

◆ phiAxis()

const Amg::Vector3D & InDetDD::SolidStateDetectorElementBase::phiAxis ( ) const
inherited

Definition at line 74 of file SolidStateDetectorElementBase.cxx.

75  {
76  if (!m_cache.isValid()) updateCache();
77  return m_cache.ptr()->m_phiAxis;
78  }

◆ phiAxisCLHEP()

const HepGeom::Vector3D< double > & InDetDD::SolidStateDetectorElementBase::phiAxisCLHEP ( ) const
inherited

To determine if readout direction between online and offline needs swapping, see methods swapPhiReadoutDirection() and swapEtaReadoutDirection() below in "Readout Cell id" section.

Orientation. Directions.

  • phiAxis in same direction as increasing phi and identifier phi_index/strip. NB. This requires some flipping of axes with repsect to the hits.
  • etaAxis in direction of increasing z in the barrel and increasing r in the endcap.
  • normal choosen to give right-handed coordinate frame (x=normal,y=phiAxis,z=etaAxis) NB. This requires some flipping of axes with repsect to the hits.

Get reconstruction local phi axes in global frame. In same direction as increasing phi and identifier phi_index/strip.

Definition at line 67 of file SolidStateDetectorElementBase.cxx.

68  {
69  if (!m_cache.isValid()) updateCache();
70  return m_cache.ptr()->m_phiAxisCLHEP;
71  }

◆ phiDirection()

bool InDetDD::SolidStateDetectorElementBase::phiDirection ( ) const
inherited

◆ phiMax()

double InDetDD::SolidStateDetectorElementBase::phiMax ( ) const
inherited

◆ phiMin()

double InDetDD::SolidStateDetectorElementBase::phiMin ( ) const
inherited

◆ phiPitch() [1/2]

double InDetDD::SiDetectorElement::phiPitch ( ) const

Pitch (inline methods)

NOTE: phiPitch is ambiguous for the Forward SCT where it varies along the strip.
etaPitch is ambiguous for the pixel which has long pixels between FE chips.
For these cases:

phiPitch: For SCT Forward returns pitch at center.
etaPitch: For pixel returns average pitch. (Active_length/number_of_cells)
All return pitch in distance units.

◆ phiPitch() [2/2]

double InDetDD::SiDetectorElement::phiPitch ( const Amg::Vector2D localPosition) const

Useful for SCT Forward.

◆ prevInEta()

const SiDetectorElement* InDetDD::SiDetectorElement::prevInEta ( ) const

◆ prevInPhi()

const SiDetectorElement* InDetDD::SiDetectorElement::prevInPhi ( ) const

◆ rawLocalPositionOfCell() [1/2]

Amg::Vector2D InDetDD::SolidStateDetectorElementBase::rawLocalPositionOfCell ( const Identifier id) const
inherited

As above.

Definition at line 236 of file SolidStateDetectorElementBase.cxx.

237  {
238  SiCellId cellId = cellIdFromIdentifier(id);
239  return m_design->localPositionOfCell(cellId);
240  }

◆ rawLocalPositionOfCell() [2/2]

Amg::Vector2D InDetDD::SolidStateDetectorElementBase::rawLocalPositionOfCell ( const SiCellId cellId) const
inherited

Returns position (center) of cell.

These are the raw positions NOT corrected for the Lorentz shift

Definition at line 230 of file SolidStateDetectorElementBase.cxx.

231  {
232  return m_design->localPositionOfCell(cellId);
233  }

◆ recoToHitTransform()

const HepGeom::Transform3D InDetDD::SolidStateDetectorElementBase::recoToHitTransform ( ) const
inherited

Transform to go from local reconstruction frame to local hit frame.

Definition at line 607 of file SolidStateDetectorElementBase.cxx.

608  {
609  if (!m_axisDir.isValid()) updateCache();
610  const AxisDir& dir = *m_axisDir.ptr();
611 
612  // = transfromHit * hitLocal
613  // = transformHit * recoToHitTransform * recoLocal
614  // recoToHitTransform takes recoLocal to hitLocal
615  // x,y,z -> y,z,x
616  // equiv to a rotation around Y of 90 deg followed by a rotation around X of 90deg
617  //
618  // recoToHit is static as it needs to be calculated once only.
619  // We use the HepGeom::Transform3D constructor which takes one coordinates system to another where the
620  // coordinate system is defined by it center and two axes.
621  // distPhi, distEta are the reco local axes and hitPhi and hitEta are the hit local axes.
622  // It assume phi, eta, depth makes a right handed system which is the case.
623  static const HepGeom::Vector3D<double> localAxes[3] = {
624  HepGeom::Vector3D<double>(1., 0., 0.),
625  HepGeom::Vector3D<double>(0., 1., 0.),
626  HepGeom::Vector3D<double>(0., 0., 1.)
627  };
628 
629  //correct phi and eta as necessary - do not change depth, this will be defined by the transform based on the other two
630  int signPhi = dir.m_phiDirection? +1:-1;
631  int signEta = dir.m_etaDirection? +1:-1;
632 
633  const HepGeom::Transform3D recoToHit(HepGeom::Point3D<double>(0., 0., 0.),
634  signPhi * localAxes[distPhi],
635  signEta *localAxes[distEta],
636  HepGeom::Point3D<double>(0., 0., 0.),
637  localAxes[m_hitPhi],
638  localAxes[m_hitEta]);
639 
640  return recoToHit ;
641 
642  }

◆ rMax()

double InDetDD::SolidStateDetectorElementBase::rMax ( ) const
inherited

◆ rMin()

double InDetDD::SolidStateDetectorElementBase::rMin ( ) const
inherited

◆ setCache()

void InDetDD::SolidStateDetectorElementBase::setCache ( )
inherited

Set/calculate cache values (inline)

◆ setNextInEta()

void InDetDD::SiDetectorElement::setNextInEta ( const SiDetectorElement element)

◆ setNextInPhi()

void InDetDD::SiDetectorElement::setNextInPhi ( const SiDetectorElement element)

◆ setOtherSide()

void InDetDD::SiDetectorElement::setOtherSide ( const SiDetectorElement element)

For SCT only.

◆ setPrevInEta()

void InDetDD::SiDetectorElement::setPrevInEta ( const SiDetectorElement element)

◆ setPrevInPhi()

void InDetDD::SiDetectorElement::setPrevInPhi ( const SiDetectorElement element)

◆ sinStereo() [1/3]

double InDetDD::SiDetectorElement::sinStereo ( ) const

Compute sin(stereo angle) at a given position: at center.

Definition at line 269 of file SiDetectorElement.cxx.

270  {
271  return sinStereoImpl();
272  }

◆ sinStereo() [2/3]

double InDetDD::SiDetectorElement::sinStereo ( const Amg::Vector2D localPos) const

at given local position

Definition at line 275 of file SiDetectorElement.cxx.

276  {
277  Amg::Vector3D point=globalPosition(localPos);
278  return sinStereoImpl(point);
279  }

◆ sinStereo() [3/3]

double InDetDD::SiDetectorElement::sinStereo ( const Amg::Vector3D globalPosition) const

at given global position

Definition at line 282 of file SiDetectorElement.cxx.

283  {
284  return sinStereoImpl(globalPos);
285  }

◆ sinStereoImpl() [1/2]

double InDetDD::SiDetectorElement::sinStereoImpl ( ) const
private

Private implementation method with no lock at center.

Definition at line 439 of file SiDetectorElement.cxx.

440  {
441  // Stereo is the angle between a refVector and a vector along the strip/pixel in eta direction.
442  // I'm not sure how the sign should be defined. I've defined it here
443  // with rotation sense respect to normal,
444  // where normal is away from IP in barrel and in -ve z direction in endcap
445 
446  // In Barrel refVector = unit vector along z axis,
447  // in endcap refVector = unit vector radial.
448  //
449  // sinStereo = (refVector cross stripAxis) . normal
450  // = (refVector cross etaAxis) . normal
451  // = refVector . (etaAxis cross normal)
452  // = refVector . phiAxis
453  //
454  // in Barrel we use
455  // sinStereo = refVector . phiAxis
456  // = phiAxis.z()
457  //
458  // in endcap we use
459  // sinStereo = (refVector cross etaAxis) . normal
460  // = -(center cross etaAxis) . zAxis
461  // = (etaAxis cross center). z()
462 
463  //Since these are barrel, endcap, sensor-type, specific, might be better for these to be calculated in the design()
464  //However, not clear how one could do that for the annulus calculation which uses global frame
465  double sinStereo = 0.;
466  auto designShape = m_siDesign->shape();
467  if (isBarrel()) {
468  sinStereo = this->phiAxis().z();
469  } else { // endcap
470  if (designShape == InDetDD::Annulus) { //built-in Stereo angle for Annulus shape sensor
471  Amg::Vector3D sensorCenter = m_siDesign->sensorCenter();
472  //Below retrieved method will return -sin(m_Stereo), thus sinStereolocal = sin(m_Stereo)
473  double sinStereoReco = - (m_siDesign->sinStripAngleReco(sensorCenter[1], sensorCenter[0]));
474  double cosStereoReco = sqrt(1-sinStereoReco*sinStereoReco);
475  double radialShift = sensorCenter[0];
476  //The focus of all strips in the local reco frame
477  Amg::Vector2D localfocus(-radialShift*sinStereoReco, radialShift - radialShift*cosStereoReco);
478  //The focus of all strips in the global frame
479  Amg::Vector3D globalfocus(globalPosition(localfocus));
480  //The direction of x-axis of the Strip frame in the global frame
481  const Amg::Vector3D& center = this->center();
482  Amg::Vector3D globalSFxAxis =(center - globalfocus)/radialShift;
483  //Stereo angle is the angle between global radial direction and the x-axis of the Strip frame in the global frame
484  sinStereo = (center.y() * globalSFxAxis.x() - center.x() * globalSFxAxis.y()) / center.perp();
485  }
486  // else if (designShape == InDetDD::PolarAnnulus) {} // Polar specialisation in future
487  else { // barrel
488  const Amg::Vector3D& etaAxis = this->etaAxis();
489  const Amg::Vector3D& center = this->center();
490  sinStereo = (center.y() * etaAxis.x() - center.x() * etaAxis.y()) / center.perp();
491  }
492  }
493  return sinStereo;
494  }

◆ sinStereoImpl() [2/2]

double InDetDD::SiDetectorElement::sinStereoImpl ( const Amg::Vector3D globalPosition) const
private

Private implementation method with no lock at given global position.

Definition at line 497 of file SiDetectorElement.cxx.

498  {
499  //
500  // sinStereo = (refVector cross stripAxis) . normal
501  //
502  double sinStereo = 0.;
503  if (isBarrel()) {
504  if (m_siDesign->shape() != InDetDD::Trapezoid) {
505  sinStereo = this->phiAxis().z();
506  } else { // trapezoid
507  assert (minWidth() != maxWidth());
508  double radius = width() * length() / (maxWidth() - minWidth());
509  const Amg::Vector3D& etaAxis = this->etaAxis();
510  const Amg::Vector3D& center = this->center();
511  const Amg::Vector3D& normal = this->normal();
512  Amg::Vector3D stripAxis = radius * etaAxis + globalPos - center;
513  sinStereo = (stripAxis.x() * normal.y() - stripAxis.y() * normal.x()) / stripAxis.mag();
514  }
515  } else { // endcap
516  if (m_siDesign->shape() != InDetDD::Trapezoid) {
517  const Amg::Vector3D& etaAxis = this->etaAxis();
518  sinStereo = (globalPos.y() * etaAxis.x() - globalPos.x() * etaAxis.y()) / globalPos.perp();
519  } else { // trapezoid
520  assert (minWidth() != maxWidth());
521  const Amg::Vector3D& etaAxis = this->etaAxis();
522  const Amg::Vector3D& center = this->center();
523  double radius = width() * length() / (maxWidth() - minWidth());
524  // Only need projection in xy plane.
525  double stripAxisX = globalPos.x() - center.x() + etaAxis.x()*radius;
526  double stripAxisY = globalPos.y() - center.y() + etaAxis.y()*radius;
527  double norm = 1./(radius*sqrt(stripAxisX*stripAxisX + stripAxisY*stripAxisY));
528  sinStereo = norm * (stripAxisX * globalPos.y() - stripAxisY * globalPos.x());
529  }
530  }
531  return sinStereo;
532  }

◆ sinStereoLocal() [1/2]

double InDetDD::SiDetectorElement::sinStereoLocal ( const Amg::Vector2D localPos) const

Angle of strip in local frame with respect to the etaAxis.

Zero for all elements except trapezoidal detectors (ie SCT forward modules).

Definition at line 288 of file SiDetectorElement.cxx.

289  {
290  return static_cast<const SiDetectorDesign *>(m_design)->sinStripAngleReco(localPos[0], localPos[1]);
291  }

◆ sinStereoLocal() [2/2]

double InDetDD::SiDetectorElement::sinStereoLocal ( const Amg::Vector3D globalPos) const

See previous method.

Definition at line 294 of file SiDetectorElement.cxx.

295  {
296  return sinStereoLocal(localPosition(globalPos));
297  }

◆ sinTilt() [1/3]

double InDetDD::SiDetectorElement::sinTilt ( ) const

Compute sin(tilt angle) at a given position: at center.

Definition at line 223 of file SiDetectorElement.cxx.

224  {
225  // Tilt is defined as the angle between a refVector and the sensor normal.
226  // In barrel refVector = unit vector radial.
227  // in endcap it is assumed there is no tilt.
228  // sinTilt = (refVector cross normal) . z
229 
230  // tilt angle is not defined for the endcap
231  if (isEndcap()) return 0.;
232 
233  // Angle between normal and radial vector.
234  // HepGeom::Vector3D<double> refVector(m_center.x(), m_center.y(), 0);
235  // return (refVector.cross(m_normal)).z()/refVector.mag();
236  // or the equivalent
237  const Amg::Vector3D& normal = this->normal();
238  const Amg::Vector3D& center = this->center();
239  return (center.x() * normal.y() - center.y() * normal.x()) / center.perp();
240  }

◆ sinTilt() [2/3]

double InDetDD::SiDetectorElement::sinTilt ( const Amg::Vector2D localPos) const

at given local position

Definition at line 243 of file SiDetectorElement.cxx.

244  {
245  // tilt angle is not defined for the endcap
246  if (isEndcap()) return 0.;
247 
248  Amg::Vector3D point = globalPosition(localPos);
249  return sinTilt(point);
250  }

◆ sinTilt() [3/3]

double InDetDD::SiDetectorElement::sinTilt ( const Amg::Vector3D globalPosition) const

at given global position

Definition at line 253 of file SiDetectorElement.cxx.

254  {
255  // It is assumed that the global position is already in the plane of the element.
256 
257  // tilt angle is not defined for the endcap
258  if (isEndcap()) return 0.;
259 
260  // Angle between normal and radial vector.
261  //HepGeom::Vector3D<double> refVector(globalPos.x(), globalPos.y(), 0);
262  //return (refVector.cross(m_normal)).z()/refVector.mag();
263  // or the equivalent
264  const Amg::Vector3D& normal = this->normal();
265  return (globalPos.x() * normal.y() - globalPos.y() * normal.x()) / globalPos.perp();
266  }

◆ surface() [1/3]

Trk::Surface& InDetDD::SolidStateDetectorElementBase::surface ( )
inherited

Element Surface.

◆ surface() [2/3]

virtual const Trk::Surface& InDetDD::SolidStateDetectorElementBase::surface ( ) const
finaloverridevirtualinherited

Return surface associated with this detector element.

Implements Trk::TrkDetElementBase.

◆ surface() [3/3]

virtual const Trk::Surface& InDetDD::SolidStateDetectorElementBase::surface ( const Identifier ) const
finaloverridevirtualinherited

TrkDetElementBase interface (inline)

Implements Trk::TrkDetElementBase.

◆ surfaces()

const std::vector< const Trk::Surface * > & InDetDD::SiDetectorElement::surfaces ( ) const

Returns the full list of surfaces associated to this detector element.

Definition at line 157 of file SiDetectorElement.cxx.

158  {
159  if (!m_surfaces.isValid()) {
160  std::vector<const Trk::Surface*> s;
161  s.push_back(&surface());
162  if (otherSide()) {
163  s.push_back(&(otherSide()->surface()));
164  }
165  m_surfaces.set (std::move (s));
166  }
167 
168  // return the surfaces
169  return *m_surfaces.ptr();
170  }

◆ swapEtaReadoutDirection()

bool InDetDD::SiDetectorElement::swapEtaReadoutDirection ( ) const

For eta_index (only relevant for pixel) (inline)

◆ swapPhiReadoutDirection()

bool InDetDD::SiDetectorElement::swapPhiReadoutDirection ( ) const

Determine if readout direction between online and offline needs swapping.

Returns true if online and offline numbers run in opposite directions. For strip/phi_index (inline)

◆ thickness()

double InDetDD::SolidStateDetectorElementBase::thickness ( ) const
inherited

◆ transform() [1/2]

virtual const Amg::Transform3D& InDetDD::SolidStateDetectorElementBase::transform ( ) const
finaloverridevirtualinherited

Return local to global transform.

Implements Trk::TrkDetElementBase.

◆ transform() [2/2]

virtual const Amg::Transform3D& InDetDD::SolidStateDetectorElementBase::transform ( const Identifier ) const
finaloverridevirtualinherited

TrkDetElementBase interface (inline)

Implements Trk::TrkDetElementBase.

◆ transformCLHEP()

const HepGeom::Transform3D & InDetDD::SolidStateDetectorElementBase::transformCLHEP ( ) const
inherited

Local (reconstruction frame) to global transform.

Definition at line 43 of file SolidStateDetectorElementBase.cxx.

44  {
45  if (!m_cache.isValid()) updateCache();
46  return m_cache.ptr()->m_transformCLHEP;
47  }

◆ transformHit()

const GeoTrf::Transform3D& InDetDD::SolidStateDetectorElementBase::transformHit ( ) const
inherited

Local (simulation/hit frame) to global transform.

◆ updateCache()

void InDetDD::SiDetectorElement::updateCache ( ) const
finaloverrideprivatevirtual

Recalculate cached values.

Reimplemented from InDetDD::SolidStateDetectorElementBase.

Definition at line 402 of file SiDetectorElement.cxx.

403  {
404 
405 
407 
408  //Similar to 21.9, but ... Do we actually need this? If not, we could just rely on the base-class implementation?
409  if (isBarrel() && !m_axisDir.ptr()->m_barrelLike) {
410  ATH_MSG_WARNING("Element has endcap like orientation with barrel identifier.");
411  } else if (!isBarrel() && m_axisDir.ptr()->m_barrelLike && (m_siDesign->type())!=InDetDD::PixelInclined && (m_siDesign->type())!=InDetDD::PLR) {
412  ATH_MSG_WARNING("Element has barrel like orientation with endcap identifier.");
413  }
414  }

◆ width()

double InDetDD::SolidStateDetectorElementBase::width ( ) const
inherited

Methods from design (inline)

Width in phi direction. For the SCT endcap it returns the average width.

◆ zMax()

double InDetDD::SolidStateDetectorElementBase::zMax ( ) const
inherited

◆ zMin()

double InDetDD::SolidStateDetectorElementBase::zMin ( ) const
inherited

Member Data Documentation

◆ m_axisDir

CxxUtils::CachedValue<AxisDir> InDetDD::SolidStateDetectorElementBase::m_axisDir
protectedinherited

Definition at line 681 of file SolidStateDetectorElementBase.h.

◆ m_cache

CxxUtils::CachedValue<CachedVals> InDetDD::SolidStateDetectorElementBase::m_cache
protectedinherited

Definition at line 708 of file SolidStateDetectorElementBase.h.

◆ m_commonItems

const SiCommonItems* InDetDD::SolidStateDetectorElementBase::m_commonItems {nullptr}
protectedinherited

Definition at line 630 of file SolidStateDetectorElementBase.h.

◆ m_design

const DetectorDesign* InDetDD::SolidStateDetectorElementBase::m_design {nullptr}
protectedinherited

local description of this detector element

Definition at line 628 of file SolidStateDetectorElementBase.h.

◆ m_geoAlignStore

const GeoAlignmentStore* InDetDD::SolidStateDetectorElementBase::m_geoAlignStore {}
protectedinherited

Definition at line 632 of file SolidStateDetectorElementBase.h.

◆ m_hitDepth

DetectorDesign::Axis InDetDD::SolidStateDetectorElementBase::m_hitDepth
protectedinherited

Definition at line 639 of file SolidStateDetectorElementBase.h.

◆ m_hitEta

DetectorDesign::Axis InDetDD::SolidStateDetectorElementBase::m_hitEta
protectedinherited

Axes.

Definition at line 637 of file SolidStateDetectorElementBase.h.

◆ m_hitPhi

DetectorDesign::Axis InDetDD::SolidStateDetectorElementBase::m_hitPhi
protectedinherited

Definition at line 638 of file SolidStateDetectorElementBase.h.

◆ m_id

Identifier InDetDD::SolidStateDetectorElementBase::m_id {}
protectedinherited

identifier of this detector element

Definition at line 623 of file SolidStateDetectorElementBase.h.

◆ m_idHash

IdentifierHash InDetDD::SolidStateDetectorElementBase::m_idHash {}
protectedinherited

hash id of this detector element

Definition at line 649 of file SolidStateDetectorElementBase.h.

◆ m_isBarrel

bool InDetDD::SiDetectorElement::m_isBarrel {false}
protected

Definition at line 474 of file SiDetectorElement.h.

◆ m_isDBM

bool InDetDD::SiDetectorElement::m_isDBM {false}
protected

Definition at line 473 of file SiDetectorElement.h.

◆ m_isPixel

bool InDetDD::SiDetectorElement::m_isPixel {false}
protected

Definition at line 470 of file SiDetectorElement.h.

◆ m_isPLR

bool InDetDD::SiDetectorElement::m_isPLR {false}
protected

Definition at line 472 of file SiDetectorElement.h.

◆ m_isSCT

bool InDetDD::SiDetectorElement::m_isSCT {false}
protected

Definition at line 471 of file SiDetectorElement.h.

◆ m_isStereo

CxxUtils::CachedValue<bool> InDetDD::SiDetectorElement::m_isStereo
protected

Definition at line 492 of file SiDetectorElement.h.

◆ m_nextInEta

const SiDetectorElement* InDetDD::SiDetectorElement::m_nextInEta {nullptr}
protected

Definition at line 481 of file SiDetectorElement.h.

◆ m_nextInPhi

const SiDetectorElement* InDetDD::SiDetectorElement::m_nextInPhi {nullptr}
protected

Definition at line 483 of file SiDetectorElement.h.

◆ m_otherSide

const SiDetectorElement* InDetDD::SiDetectorElement::m_otherSide {nullptr}
protected

Definition at line 485 of file SiDetectorElement.h.

◆ m_prevInEta

const SiDetectorElement* InDetDD::SiDetectorElement::m_prevInEta {nullptr}
protected

Definition at line 482 of file SiDetectorElement.h.

◆ m_prevInPhi

const SiDetectorElement* InDetDD::SiDetectorElement::m_prevInPhi {nullptr}
protected

Definition at line 484 of file SiDetectorElement.h.

◆ m_siDesign

const SiDetectorDesign* InDetDD::SiDetectorElement::m_siDesign
protected

Definition at line 463 of file SiDetectorElement.h.

◆ m_surface

std::unique_ptr<Trk::Surface> InDetDD::SolidStateDetectorElementBase::m_surface
protectedinherited

Definition at line 631 of file SolidStateDetectorElementBase.h.

◆ m_surfaces

CxxUtils::CachedValue<std::vector<const Trk::Surface*> > InDetDD::SiDetectorElement::m_surfaces
protected

Definition at line 456 of file SiDetectorElement.h.


The documentation for this class was generated from the following files:
AtlasDetectorID::is_pixel
bool is_pixel(Identifier id) const
Definition: AtlasDetectorID.h:760
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
query_example.row
row
Definition: query_example.py:24
beamspotman.r
def r
Definition: beamspotman.py:676
InDetDD::SiDetectorElement::isEndcap
bool isEndcap() const
PlotCalibFromCool.norm
norm
Definition: PlotCalibFromCool.py:100
PixelID::phi_index
int phi_index(const Identifier &id) const
Definition: PixelID.h:658
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
CxxUtils::CachedValue::ptr
const T * ptr() const
Return a pointer to the cached value.
get_generator_info.result
result
Definition: get_generator_info.py:21
InDetDD::PLR
@ PLR
Definition: DetectorDesign.h:46
max
#define max(a, b)
Definition: cfImp.cxx:41
InDetDD::SolidStateDetectorElementBase::phiMax
double phiMax() const
InDetDD::SolidStateDetectorElementBase::getCorners
void getCorners(HepGeom::Point3D< double > *corners) const
Return the four corners of an element in local coordinates.
Definition: SolidStateDetectorElementBase.cxx:551
AtlasDetectorID::HelperType::Pixel
@ Pixel
InDetDD::DetectorDesign::sensorCenter
virtual Amg::Vector3D sensorCenter() const
Return the centre of a sensor in the local reference frame.
Definition: DetectorDesign.cxx:60
Pixel
Definition: PixelFEUtils.h:16
InDetDD::SolidStateDetectorElementBase::m_idHash
IdentifierHash m_idHash
hash id of this detector element
Definition: SolidStateDetectorElementBase.h:649
Trk::DetectorElemType::Tgc
@ Tgc
AtlasDetectorID::is_sct
bool is_sct(Identifier id) const
Definition: AtlasDetectorID.h:770
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
Trk::distDepth
@ distDepth
Definition: SiLocalPosition.h:19
CxxUtils::CachedValue::isValid
bool isValid() const
Test to see if the value is valid.
Trk::DetectorElemType::TRT
@ TRT
InDetDD::DetectorDesign::shape
virtual DetectorShape shape() const
Shape of element.
Definition: DetectorDesign.cxx:96
InDetDD::SolidStateDetectorElementBase::center
virtual const Amg::Vector3D & center() const override final
Center in global coordinates.
InDetDD::DetectorDesign::localPositionOfCell
virtual SiLocalPosition localPositionOfCell(const SiCellId &cellId) const =0
readout or diode id -> position.
InDetDD::SolidStateDetectorElementBase::etaAxis
const Amg::Vector3D & etaAxis() const
Definition: SolidStateDetectorElementBase.cxx:88
AtlasDetectorID::HelperType::SCT
@ SCT
InDetDD::SolidStateDetectorElementBase::SolidStateDetectorElementBase
SolidStateDetectorElementBase()=delete
Don't allow no-argument constructor.
M_PI
#define M_PI
Definition: ActiveFraction.h:11
InDetDD::SolidStateDetectorElementBase::surface
Trk::Surface & surface()
Element Surface.
PLR_ID
This is an Identifier helper class for the PLR subdetector. This class inherits from PixelID.
Definition: PLR_ID.h:24
InDetDD::SolidStateDetectorElementBase::m_geoAlignStore
const GeoAlignmentStore * m_geoAlignStore
Definition: SolidStateDetectorElementBase.h:632
xAOD::etaMax
etaMax
Definition: HIEventShape_v2.cxx:46
InDetDD::DetectorDesign::connectedCell
virtual SiCellId connectedCell(const SiReadoutCellId &readoutId, int number) const =0
readout id -> id of connected diodes.
GeoAlignmentStore::getDefAbsPosition
virtual const GeoTrf::Transform3D * getDefAbsPosition(const GeoNodePositioning *fullPhysVol) const override final
: Returns the nominal position of the full phyiscal volume.
Definition: GeoAlignmentStore.h:98
InDetDD::SiDetectorElement::m_isDBM
bool m_isDBM
Definition: SiDetectorElement.h:473
xAOD::identifier
identifier
Definition: UncalibratedMeasurement_v1.cxx:15
InDetDD::SiDetectorElement::m_surfaces
CxxUtils::CachedValue< std::vector< const Trk::Surface * > > m_surfaces
Definition: SiDetectorElement.h:456
x
#define x
Identifier::is_valid
bool is_valid() const
Check if id is in a valid state.
InDetDD::SiDetectorElement::m_isStereo
CxxUtils::CachedValue< bool > m_isStereo
Definition: SiDetectorElement.h:492
InDetDD::DetectorDesign::numberOfConnectedCells
virtual int numberOfConnectedCells(const SiReadoutCellId &readoutId) const =0
number of connected cells.
keylayer_zslicemap.strip
strip
Definition: keylayer_zslicemap.py:151
InDetDD::SolidStateDetectorElementBase::getIdHelper
const AtlasDetectorID * getIdHelper() const
Returns the id helper (inline)
InDetDD::PixelInclined
@ PixelInclined
Definition: DetectorDesign.h:46
Trk::DetectorElemType::Csc
@ Csc
Trk::TrkDetElementBase::detectorType
virtual DetectorElemType detectorType() const =0
Return the Detector element type.
InDetDD::SolidStateDetectorElementBase::m_cache
CxxUtils::CachedValue< CachedVals > m_cache
Definition: SolidStateDetectorElementBase.h:708
InDetDD::SiDetectorDesign::sinStripAngleReco
virtual double sinStripAngleReco(double phiCoord, double etaCoord) const
Give strip angle in the reco frame.
Definition: SiDetectorDesign.h:132
InDetDD::SolidStateDetectorElementBase::m_surface
std::unique_ptr< Trk::Surface > m_surface
Definition: SolidStateDetectorElementBase.h:631
AtlasDetectorID::HelperType::PLR
@ PLR
TRT::Hit::side
@ side
Definition: HitInfo.h:83
runBeamSpotCalibration.helper
helper
Definition: runBeamSpotCalibration.py:112
InDetDD::SiDetectorElement::commonConstructor
void commonConstructor()
Common code for constructors.
Definition: SiDetectorElement.cxx:349
xAOD::phi
setEt phi
Definition: TrigEMCluster_v1.cxx:29
InDetDD::SiDetectorElement::sinTilt
double sinTilt() const
Compute sin(tilt angle) at a given position: at center.
Definition: SiDetectorElement.cxx:223
Trk::DetectorElemType::Silicon
@ Silicon
InDetDD::SiDetectorElement::m_siDesign
const SiDetectorDesign * m_siDesign
Definition: SiDetectorElement.h:463
InDetDD::DetectorDesign::readoutIdOfCell
virtual SiReadoutCellId readoutIdOfCell(const SiCellId &cellId) const =0
diode id -> readout id NB assignment of a SiReadoutCellId to a SiCellId is allowed so you are can pas...
InDetDD::SolidStateDetectorElementBase::identifierFromCellId
virtual Identifier identifierFromCellId(const SiCellId &cellId) const =0
Identifier <-> SiCellId (ie strip number or pixel eta_index,phi_index) Identifier from SiCellId (ie s...
InDetDD::SolidStateDetectorElementBase::getEtaPhiPoint
void getEtaPhiPoint(const HepGeom::Point3D< double > &point, double deltaZ, double &etaMin, double &etaMax, double &phi) const
Get eta and phi coresponding to a point in local coordinates.
Definition: SolidStateDetectorElementBase.cxx:589
InDetDD::SolidStateDetectorElementBase::m_design
const DetectorDesign * m_design
local description of this detector element
Definition: SolidStateDetectorElementBase.h:628
InDetDD::SolidStateDetectorElementBase::defTransform
const Amg::Transform3D defTransform() const
Definition: SolidStateDetectorElementBase.cxx:60
PixelID::is_barrel
bool is_barrel(const Identifier &id) const
Test for barrel - WARNING: id MUST be pixel id, otherwise answer is not accurate. Use SiliconID for g...
Definition: PixelID.h:605
InDetDD::SolidStateDetectorElementBase::recoToHitTransform
const HepGeom::Transform3D recoToHitTransform() const
Transform to go from local reconstruction frame to local hit frame.
Definition: SolidStateDetectorElementBase.cxx:607
PixelID::wafer_hash
IdentifierHash wafer_hash(Identifier wafer_id) const
wafer hash from id
Definition: PixelID.h:387
InDetDD::DetectorDesign::inDetector
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.
Definition: DetectorDesign.cxx:106
Trk::distEta
@ distEta
readout for silicon
Definition: ParamDefs.h:51
InDetDD::SiDetectorElement::isModuleFrame
bool isModuleFrame() const
Check if the element and module frame are the same.
Definition: SiDetectorElement.cxx:212
Trk::DetectorElemType::SolidState
@ SolidState
z
#define z
InDetDD::SolidStateDetectorElementBase::get_rz
virtual double get_rz() const =0
InDetDD::SiDetectorElement::updateCache
virtual void updateCache() const override final
Recalculate cached values.
Definition: SiDetectorElement.cxx:402
InDetDD::Annulus
@ Annulus
Definition: DetectorDesign.h:42
SCT_ID::row
int row(const Identifier &id) const
Definition: SCT_ID.h:758
InDetDD::SolidStateDetectorElementBase::updateCache
virtual void updateCache() const
Recalculate cached values.
Definition: SolidStateDetectorElementBase.cxx:272
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
InDetDD::PolarAnnulus
@ PolarAnnulus
Definition: DetectorDesign.h:42
InDetDD::SolidStateDetectorElementBase::width
double width() const
Methods from design (inline)
PixelID::eta_index
int eta_index(const Identifier &id) const
Definition: PixelID.h:664
InDetDD::DetectorDesign::type
virtual DetectorType type() const
Type of element.
Definition: DetectorDesign.cxx:101
SCT_ID::wafer_hash
IdentifierHash wafer_hash(const Identifier &wafer_id) const
wafer hash from id - optimized
Definition: SCT_ID.h:492
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
InDetDD::SiDetectorElement::m_isSCT
bool m_isSCT
Definition: SiDetectorElement.h:471
InDetDD::SolidStateDetectorElementBase::normal
virtual const Amg::Vector3D & normal() const override final
Get reconstruction local normal axes in global frame.
Trk::distPhi
@ distPhi
Definition: ParamDefs.h:50
IdentifierHash::is_valid
bool is_valid() const
Check if id is in a valid state.
beamspotman.dir
string dir
Definition: beamspotman.py:623
min
#define min(a, b)
Definition: cfImp.cxx:40
InDetDD::SiDetectorElement::isPixel
bool isPixel() const
InDetDD::SiDetectorElement::sinStereo
double sinStereo() const
Compute sin(stereo angle) at a given position: at center.
Definition: SiDetectorElement.cxx:269
PixelID::layer_disk
int layer_disk(const Identifier &id) const
Definition: PixelID.h:626
AtlasDetectorID::helper
virtual HelperType helper() const
Type of helper, defaulted to 'Unimplemented'.
Definition: AtlasDetectorID.h:95
Trk::DetectorElemType::sTgc
@ sTgc
InDetDD::SiDetectorElement::endsOfStrip
std::pair< Amg::Vector3D, Amg::Vector3D > endsOfStrip(const Amg::Vector2D &position) const
Special method for SCT to retrieve the two ends of a "strip" Returned coordinates are in global frame...
Definition: SiDetectorElement.cxx:339
InDetDD::DetectorDesign::bounds
virtual const Trk::SurfaceBounds & bounds() const =0
Element boundary.
InDetDD::SiDetectorElement::otherSide
const SiDetectorElement * otherSide() const
Useful for SCT only.
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:220
python.selection.number
number
Definition: selection.py:20
InDetDD::SolidStateDetectorElementBase::m_hitDepth
DetectorDesign::Axis m_hitDepth
Definition: SolidStateDetectorElementBase.h:639
InDetDD::SolidStateDetectorElementBase::m_hitEta
DetectorDesign::Axis m_hitEta
Axes.
Definition: SolidStateDetectorElementBase.h:637
InDetDD::SiDetectorElement::m_isPixel
bool m_isPixel
Definition: SiDetectorElement.h:470
InDetDD::SolidStateDetectorElementBase::m_hitPhi
DetectorDesign::Axis m_hitPhi
Definition: SolidStateDetectorElementBase.h:638
InDetDD::SiDetectorElement::isBarrel
bool isBarrel() const
CxxUtils::CachedValue::set
void set(const T &val) const
Set the value, assuming it is currently invalid.
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
ParticleGun_SamplingFraction.radius
radius
Definition: ParticleGun_SamplingFraction.py:96
InDetDD::DetectorDesign::cellIdOfPosition
virtual SiCellId cellIdOfPosition(const SiLocalPosition &localPos) const =0
position -> id
InDetDD::SiDetectorElement::m_otherSide
const SiDetectorElement * m_otherSide
Definition: SiDetectorElement.h:485
PixelID::is_dbm
bool is_dbm(const Identifier &id) const
Test for dbm - WARNING: id MUST be pixel id, otherwise answer is not accurate. Use SiliconID for gene...
Definition: PixelID.h:612
InDetDD::SolidStateDetectorElementBase::m_id
Identifier m_id
identifier of this detector element
Definition: SolidStateDetectorElementBase.h:623
AtlasDetectorID::is_lumi
bool is_lumi(Identifier id) const
Definition: AtlasDetectorID.h:806
InDetDD::SolidStateDetectorElementBase::minWidth
double minWidth() const
Min width.
Trk::DetectorElemType::MM
@ MM
InDetDD::SolidStateDetectorElementBase::phiMin
double phiMin() const
LArCellBinning.etaMin
etaMin
Definition: LArCellBinning.py:84
y
#define y
Trk::DetectorElemType::Rpc
@ Rpc
SCT_ID
Definition: SCT_ID.h:68
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
SCT_ID::strip
int strip(const Identifier &id) const
Definition: SCT_ID.h:764
Amg::CLHEPTransformToEigen
Amg::Transform3D CLHEPTransformToEigen(const HepGeom::Transform3D &CLHEPtransf)
Converts a CLHEP-based HepGeom::Transform3D into an Eigen Amg::Transform3D.
Definition: CLHEPtoEigenConverter.h:38
InDetDD::SolidStateDetectorElementBase::globalPosition
HepGeom::Point3D< double > globalPosition(const HepGeom::Point3D< double > &localPos) const
transform a reconstruction local position into a global position (inline):
InDetDD::SolidStateDetectorElementBase::defTransformCLHEP
const HepGeom::Transform3D defTransformCLHEP() const
Default Local (reconstruction frame) to global transform ie with no misalignment.
Definition: SolidStateDetectorElementBase.cxx:50
InDetDD::SolidStateDetectorElementBase::phiAxis
const Amg::Vector3D & phiAxis() const
Definition: SolidStateDetectorElementBase.cxx:74
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
PixelID::pixel_id
Identifier pixel_id(int barrel_ec, int layer_disk, int phi_module, int eta_module, int phi_index, int eta_index) const
For an individual pixel.
Definition: PixelID.h:432
DeMoScan.first
bool first
Definition: DeMoScan.py:536
InDetDD::SiDetectorElement::sinStereoLocal
double sinStereoLocal(const Amg::Vector2D &localPos) const
Angle of strip in local frame with respect to the etaAxis.
Definition: SiDetectorElement.cxx:288
Amg::EigenTransformToCLHEP
HepGeom::Transform3D EigenTransformToCLHEP(const Amg::Transform3D &eigenTransf)
Converts an Eigen-based Amg::Transform3D into a CLHEP-based HepGeom::Transform3D.
Definition: CLHEPtoEigenConverter.h:120
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
SCT_ID::side
int side(const Identifier &id) const
Definition: SCT_ID.h:752
InDetDD::SiDetectorElement::isSCT
bool isSCT() const
InDetDD::SiDetectorElement::sinStereoImpl
double sinStereoImpl() const
Private implementation method with no lock at center.
Definition: SiDetectorElement.cxx:439
InDetDD::SiDetectorElement::nearBondGap
bool nearBondGap(const Amg::Vector2D &localPosition, double etaTol) const
Test if near bond gap within tolerances.
Definition: SiDetectorElement.cxx:323
InDetDD::SolidStateDetectorElementBase::localPosition
Amg::Vector2D localPosition(const HepGeom::Point3D< double > &globalPosition) const
transform a global position into a 2D local position (reconstruction frame) (inline)
InDetDD::SolidStateDetectorElementBase::length
double length() const
Length in eta direction (z - barrel, r - endcap)
makeComparison.deltaZ
int deltaZ
Definition: makeComparison.py:46
InDetDD::SiDetectorElement::determineStereo
bool determineStereo() const
Find isStereo.
Definition: SiDetectorElement.cxx:417
InDetDD::SiDetectorElement::isStereo
bool isStereo() const
Check if it is the stereo side (useful for SCT)
Definition: SiDetectorElement.cxx:300
InDetDD::SiDetectorElement::design
virtual const SiDetectorDesign & design() const override final
access to the local description (inline):
PixelID
Definition: PixelID.h:67
InDetDD::SiDetectorElement::m_isBarrel
bool m_isBarrel
Definition: SiDetectorElement.h:474
InDetDD::SiDetectorElement::isPLR
bool isPLR() const
InDetDD::SolidStateDetectorElementBase::cellIdFromIdentifier
virtual SiCellId cellIdFromIdentifier(const Identifier &identifier) const =0
SiCellId from Identifier.
AtlasDetectorID
This class provides an interface to generate or decode an identifier for the upper levels of the dete...
Definition: AtlasDetectorID.h:57
Trk::DetectorElemType::Mdt
@ Mdt
InDetDD::SolidStateDetectorElementBase::transform
virtual const Amg::Transform3D & transform() const override final
Return local to global transform.
InDetDD::Trapezoid
@ Trapezoid
Definition: DetectorDesign.h:42
InDetDD::SiDetectorElement::m_isPLR
bool m_isPLR
Definition: SiDetectorElement.h:472
SCT_ID::is_barrel
bool is_barrel(const Identifier &id) const
Test for barrel - WARNING: id MUST be sct id, otherwise answer is not accurate. Use SiliconID for gen...
Definition: SCT_ID.h:721
InDetDD::SolidStateDetectorElementBase::m_axisDir
CxxUtils::CachedValue< AxisDir > m_axisDir
Definition: SolidStateDetectorElementBase.h:681
SCT_ID::strip_id
Identifier strip_id(int barrel_ec, int layer_disk, int phi_module, int eta_module, int side, int strip) const
For an individual strip.
Definition: SCT_ID.h:535
Identifier
Definition: IdentifierFieldParser.cxx:14
InDetDD::SolidStateDetectorElementBase::maxWidth
double maxWidth() const
Max width.