9#ifndef READOUTGEOMETRYBASE_SOLIDSTATEDETECTORELEMENTBASE_H
10#define READOUTGEOMETRYBASE_SOLIDSTATEDETECTORELEMENTBASE_H
19#include "GeoModelKernel/GeoDefinitions.h"
20#include "Identifier/Identifier.h"
31#include "CLHEP/Geometry/Point3D.h"
141 const GeoVFullPhysVol* geophysvol,
400 double& etaMin,
double& etaMax,
592 double& etaMin,
double& etaMax,
double&
phi)
const;
Scalar phi() const
phi method
Cached value with atomic update.
Eigen::Affine3d Transform3D
This class provides an interface to generate or decode an identifier for the upper levels of the dete...
Cached value with atomic update.
Ensure that the extensions for the Vector3D are properly loaded.
This is a "hash" representation of an Identifier.
Base class for the detector design classes for ITk and HGTD.
Identifier for the strip or pixel cell.
Helper class to concentrate common items, such as the pointer to the IdHelper, the lorentzAngle tool ...
class to run intersection tests
Identifier for the strip or pixel readout cell.
bool depthDirection() const
Return information on orientation.
void getExtent(CachedVals &cache) const
Calculate extent in r,z and phi.
const Amg::Transform3D defTransform() const
double length() const
Length in eta direction (z - barrel, r - endcap)
bool msgLvl(MSG::Level lvl) const
Declaring the Method providing Verbosity Level (inline)
virtual const DetectorDesign & design() const
access to the local description (inline):
HepGeom::Point3D< double > hitLocalToLocal3D(const HepGeom::Point3D< double > &hitPosition) const
Same as previuos method but 3D.
std::unique_ptr< Trk::Surface > m_surface
SiCellId connectedCell(const SiCellId cellId, int number) const
Get the cell ids sharing the readout for this cell.
bool etaDirection() const
SiCellId cellIdOfPosition(const Amg::Vector2D &localPos) const
As in previous method but returns SiCellId.
bool swapEtaReadoutDirection() const
For eta_index (only relevant for pixel) (inline)
SolidStateDetectorElementBase(SolidStateDetectorElementBase &&)=delete
Don't allow move constructor.
void getEtaPhiRegion(double deltaZ, double &etaMin, double &etaMax, double &phiMin, double &phiMax, double &rz) const
Method for building up region of interest table.
const Amg::Vector3D & etaAxis() const
InDetDD::CarrierType carrierType() const
carrier type for readout.
Amg::Vector2D localPosition(const HepGeom::Point3D< double > &globalPosition) const
transform a global position into a 2D local position (reconstruction frame) (inline)
const GeoAlignmentStore * m_geoAlignStore
virtual Trk::DetectorElemType detectorType() const override
TrkDetElementBase interface detectorType.
double hitPhiDirection() const
See previous method.
DetectorDesign::Axis m_hitEta
Axes.
const HepGeom::Transform3D recoToHitTransform() const
Transform to go from local reconstruction frame to local hit frame.
void getCorners(HepGeom::Point3D< double > *corners) const
Return the four corners of an element in local coordinates.
const DetectorDesign * m_design
local description of this detector element
double width() const
Methods from design (inline)
virtual SiCellId cellIdFromIdentifier(const Identifier &identifier) const =0
SiCellId from Identifier.
virtual const Amg::Vector3D & normal() const override final
Get reconstruction local normal axes in global frame.
virtual const Amg::Transform3D & transform() const override final
Return local to global transform.
virtual IdentifierHash identifyHash() const override final
identifier hash (inline)
SolidStateDetectorElementBase & operator=(SolidStateDetectorElementBase &&)=delete
Don't allow move assignment operator.
const SiCommonItems * m_commonItems
SolidStateDetectorElementBase()=delete
Don't allow no-argument constructor.
HepGeom::Point3D< double > globalPositionHit(const HepGeom::Point3D< double > &simulationLocalPos) const
transform a hit local position into a global position (inline):
virtual const Trk::SurfaceBounds & bounds() const override final
Return the boundaries of the element.
CxxUtils::CachedValue< CachedVals > m_cache
int numberOfConnectedCells(const SiCellId cellId) const
Test if readout cell has more than one diode associated with it.
virtual double get_rz() const =0
virtual ~SolidStateDetectorElementBase()
Destructor.
double maxWidth() const
Max width.
HepGeom::Point3D< double > globalPosition(const HepGeom::Point3D< double > &localPos) const
transform a reconstruction local position into a global position (inline):
SolidStateDetectorElementBase & operator=(const SolidStateDetectorElementBase &)=delete
Don't allow assignment operator.
virtual const Amg::Vector3D & center() const override final
Center in global coordinates.
SiIntersect inDetector(const Amg::Vector2D &localPosition, double phiTol, double etaTol) const
Test that it is in the active region.
virtual Identifier identify() const override final
identifier of this detector element (inline)
SolidStateDetectorElementBase(const Identifier &id, const DetectorDesign *design, const GeoVFullPhysVol *geophysvol, const SiCommonItems *commonItems, const GeoAlignmentStore *geoAlignStore=nullptr)
Constructor with parameters.
const Amg::Vector3D & phiAxis() const
double hitDepthDirection() const
Directions of hit depth,phi,eta axes relative to reconstruction local position axes (LocalPosition).
MsgStream & msg(MSG::Level lvl) const
Declaring the Message method for further use (inline)
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.
Identifier identifierOfPosition(const Amg::Vector2D &localPos) const
Full identifier of the cell for a given position: assumes a raw local position (no Lorentz shift)
const GeoTrf::Transform3D & transformHit() const
Local (simulation/hit frame) to global transform.
const HepGeom::Vector3D< double > & phiAxisCLHEP() const
To determine if readout direction between online and offline needs swapping, see methods swapPhiReado...
virtual void updateCache() const
Recalculate cached values.
double depthAngle() const
double minWidth() const
Min width.
IdentifierHash m_idHash
hash id of this detector element
DetectorDesign::Axis m_hitPhi
const SiCommonItems * getCommonItems() const
bool swapPhiReadoutDirection() const
Determine if readout direction between online and offline needs swapping.
const HepGeom::Transform3D & transformCLHEP() const
Local (reconstruction frame) to global transform.
const HepGeom::Vector3D< double > & etaAxisCLHEP() const
Get reconstruction local eta axes in global frame.
CxxUtils::CachedValue< AxisDir > m_axisDir
const HepGeom::Transform3D defTransformCLHEP() const
Default Local (reconstruction frame) to global transform ie with no misalignment.
virtual Identifier identifierFromCellId(const SiCellId &cellId) const =0
Identifier <-> SiCellId (ie strip number or pixel eta_index,phi_index) Identifier from SiCellId (ie s...
SolidStateDetectorElementBase(const SolidStateDetectorElementBase &)=delete
Don't allow copy constructor.
double hitEtaDirection() const
See previous method.
DetectorDesign::Axis m_hitDepth
void commonConstructor()
Common code for constructors.
const AtlasDetectorID * getIdHelper() const
Returns the id helper (inline)
bool phiDirection() const
void invalidate()
Signal that cached values are no longer valid.
Amg::Vector2D rawLocalPositionOfCell(const SiCellId &cellId) const
Returns position (center) of cell.
Amg::Vector2D hitLocalToLocal(double xEta, double xPhi) const
Simulation/Hit local frame to reconstruction local frame.
Trk::Surface & surface()
Element Surface.
Identifier m_id
identifier of this detector element
double etaPitch() const
Pitch (inline methods)
Abstract base class for surface bounds to be specified.
This is the base class for all tracking detector elements with read-out relevant information.
Definition of ATLAS Math & Geometry primitives (Amg)
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 3, 1 > Vector3D
Ensure that the ATLAS eigen extensions are properly loaded.
bool m_depthDirection
Direction of depth axis.
HepGeom::Transform3D m_transformCLHEP
Amg::Transform3D m_transformHit
HepGeom::Vector3D< double > m_centerCLHEP
HepGeom::Vector3D< double > m_etaAxisCLHEP
HepGeom::Vector3D< double > m_phiAxisCLHEP
Amg::Transform3D m_transform
std::string number(const double &d, const std::string &s)