5#ifndef MUONREADOUTGEOMETRY_STGCREADOUTELEMENT_H
6#define MUONREADOUTGEOMETRY_STGCREADOUTELEMENT_H
36 const std::string& stName,
234 10, 10, 10, 10, 10, 10, 1156.72, 1187.98, 1231.87, 1271.34, 1312.87, 1354.56, 1396.38, 1438.07,
235 1479.73, 1521.44, 1563.11, 1604.8, 1646.48, 1688.02, 1729.84, 1771.51, 1813.2, 1854.89, 1896.57, 1938.26, 1979.93, 2021.61,
236 2063.14, 2104.98, 2146.55, 2181.64, 2209.01, 2251.65, 2282.54, 2313.27, 2356.24, 2396.73, 2438.29, 2480.09, 2521.75, 2563.46,
237 2605.11, 2646.85, 2688.48, 2730.19, 2771.86, 2813.41, 2855.21, 2896.93, 2938.61, 2980.26, 3021.95, 3063.63, 3105.31, 3146.98,
238 3188.85, 3230.37, 3272.05, 3313.77, 3353.77, 3376.19, 3426.09, 3464.49, 3506.78, 3563.91, 3589.03, 3626.17, 3667.84, 3709.56,
239 3751.33, 3792.92, 3834.58, 3876.27, 3917.9, 3959.62, 4001.29, 4043.03, 4084.66, 4126.39, 4168.05, 4209.74, 4251.38, 4293.16,
240 4334.72, 4376.47, 4417.54, 4459.75, 4496.31, 4543.27, 4584.77, 4626.47, 4668.25, 4701.14
245 10.0, 10.0, 958.077, 998.248, 1037.405, 1076.535, 1115.69, 1154.82, 1193.97, 1233.135, 1272.265, 1311.395,
246 1350.59, 1389.705, 1428.865, 1468.01, 1507.175, 1546.305, 1585.435, 1624.58, 1663.71, 1702.895, 1742.055,
247 1781.165, 1820.315, 1859.44, 1898.575, 1937.75, 1976.885, 2016.04, 2055.15, 2094.345, 2136.125, 2172.61,
248 2217.68, 2255.125, 2316.115, 2348.91, 2388.06, 2427.245, 2466.385, 2505.515, 2544.69, 2583.8, 2622.99,
249 2662.115, 2701.31, 2740.395, 2779.55, 2818.715, 2857.905, 2897.0, 2936.185, 2975.315, 3014.47, 3053.615,
250 3092.775, 3131.895, 3171.075, 3210.225, 3249.375, 3288.485, 3317.74, 3347.075, 3396.65, 3440.175, 3475.575,
251 3540.81, 3581.97, 3621.13, 3660.285, 3699.41, 3738.535, 3777.73, 3816.89, 3856.055, 3895.105, 3934.3, 3974.34,
252 4012.565, 4051.71, 4090.865, 4130.04, 4169.145, 4208.285, 4247.55, 4286.65, 4320.075, 4364.84, 4404.12, 4443.14, 4482.29
262 return (gasGap - 1) * 3 + (2 - channelType);
296 if (channelType == 1)
return &(
m_etaDesign[gasGap - 1]);
297 if (channelType == 2)
return &(
m_phiDesign[gasGap - 1]);
305 if (!design)
return -10000.;
367 return design->
channelCorners(std::make_pair(padEta, padPhi), corners);
375 for (
size_t c = 0; c < lcorners.size() ; ++c) {
384 if (std::abs(
m_idHelper.stationEta(
id)) != 1)
return false;
400 localPosition.x() : localPosition.y();
401 if (lpos < 0.5 * wireDesign->xSize() - wireDesign->
wireCutout)
return true;
437 Amg::Vector2D phiPos{Amg::Vector2D::Zero()}, etaPos{Amg::Vector2D::Zero()};
constexpr std::array< T, N > make_array(const T &def_val)
Helper function to initialize in-place arrays with non-zero values.
#define ATH_MSG_WARNING(x)
virtual const Trk::PlaneSurface & surface() const override
access to chamber surface (phi orientation), uses the first gas gap
MuonClusterReadoutElement(GeoVFullPhysVol *pv, MuonDetectorManager *mgr, Trk::DetectorElemType detType)
The MuonDetectorManager stores the transient representation of the Muon Spectrometer geometry and pro...
const Muon::IMuonIdHelperSvc * idHelperSvc() const
const Amg::Transform3D & absTransform() const
int getStationEta() const
double wirePitch(int gas_gap=1) const
single wire pitch.
bool padPosition(const Identifier &id, Amg::Vector2D &pos) const
pad position
const MuonPadDesign * getPadDesign(const Identifier &id) const
returns the MuonChannelDesign class for the given identifier
virtual bool stripPosition(const Identifier &id, Amg::Vector2D &pos) const override final
strip position - should be renamed to channel position If the strip number is outside the range of va...
virtual void fillCache() override final
function to fill tracking cache
bool padCorners(const Identifier &id, std::array< Amg::Vector2D, 4 > &corners) const
pad corners
std::array< MuonChannelDesign, 4 > m_phiDesign
virtual bool measuresPhi(const Identifier &id) const override final
returns whether the current identifier corresponds to a phi measurement
virtual double distanceToReadout(const Amg::Vector2D &pos, const Identifier &id) const override final
distance to readout.
const MuonChannelDesign * getDesign(const Identifier &id) const
returns the MuonChannelDesign class for the given identifier
virtual int layerHash(const Identifier &id) const override
returns the hash to be used to look up the normal and center in the MuonClusterReadoutElement trackin...
std::array< Amg::Transform3D, 4 > m_Xlg
virtual int numberOfStrips(const Identifier &layerId) const override final
number of strips per layer
const BLinePar * getBLinePar() const
int numberOfWires(const Identifier &id) const
Get the total number of wires (single wires) of a chamber.
const sTgcIdHelper & m_idHelper
~sTgcReadoutElement()
destructor
double channelPitch(const Identifier &id) const
Channel pitch.
std::array< MuonPadDesign, 4 > m_padDesign
static constexpr int m_nlayers
const ALinePar * getALinePar() const
virtual int surfaceHash(const Identifier &id) const override final
returns the hash to be used to look up the surface and transform in the MuonClusterReadoutElement tra...
sTgcReadoutElement(GeoVFullPhysVol *pv, const std::string &stName, int zi, int fi, int mL, MuonDetectorManager *mgr)
constructor
const BLinePar * m_BLinePar
const Amg::Transform3D & getDelta() const
read A-line parameters and include the chamber rotation/translation in the local-to-global (ATLAS) re...
Amg::Vector3D localToGlobalCoords(const Amg::Vector3D &locPos, Identifier id) const
simHit local (SD) To Global position - to be used by MuonGeoAdaprors only
void setBLinePar(const BLinePar &bLine)
read B-line (chamber-deformation) parameters
void initDesignFromAGDD(double thickness)
static double triggerBandIdToRadius(bool isLarge, int triggerBand)
static constexpr std::array< double, 92 > SBANDIDSP
std::array< MuonChannelDesign, 4 > m_etaDesign
virtual Amg::Transform3D GlobalToAmdbLRSTransform() const override final
void initDesignFromSQLite(double thickness)
virtual int boundaryHash(const Identifier &id) const override final
returns the hash to be used to look up the normal and center in the MuonClusterReadoutElement trackin...
bool padGlobalPosition(const Identifier &id, Amg::Vector3D &gpos) const
pad global position
static constexpr std::array< double, 94 > LBANDIDSP
void initDesign(double thickness)
initialize the design classes for this readout element
int maxPadNumber(const Identifier &layerId) const
Get largest pad number, which is different to the number of pads in a gas volume due to the pad numbe...
virtual bool spacePointPosition(const Identifier &phiId, const Identifier &etaId, Amg::Vector2D &pos) const override final
space point position for a given pair of phi and eta identifiers The LocalPosition is expressed in th...
bool stripGlobalPosition(const Identifier &id, Amg::Vector3D &gpos) const
bool isEtaZero(const Identifier &id, const Amg::Vector2D &localPosition) const
is eta=0 of QL1 or QS1?
double positionFirstWire(const Identifier &id) const
Get the local position of the first wire of the chamber corresponding to the identifier.
virtual bool containsId(const Identifier &id) const override final
function to be used to check whether a given Identifier is contained in the readout element
void posOnDefChamber(Amg::Vector3D &locPosML) const
transform a position (in chamber-frame coordinates) to the deformed-chamber geometry
virtual Amg::Vector3D AmdbLRSToGlobalCoords(const Amg::Vector3D &x) const override final
int wireNumber(const Amg::Vector2D &pos, const Identifier &id) const
wire number corresponding to local position
virtual int numberOfLayers(bool) const override final
number of layers in phi/eta projection
virtual int stripNumber(const Amg::Vector2D &pos, const Identifier &id) const override final
strip number corresponding to local position.
const ALinePar * m_ALinePar
void setChamberLayer(int ml)
set methods only to be used by MuonGeoModel
void setDelta(const ALinePar &aline)
virtual Amg::Transform3D AmdbLRSToGlobalTransform() const override final
int numberOfPads(const Identifier &layerId) const
Get the number of pad per layer.
bool padGlobalCorners(const Identifier &id, std::array< Amg::Vector3D, 4 > &gcorners) const
pad global corners
int padNumber(const Amg::Vector2D &pos, const Identifier &id) const
pad number corresponding to local position
virtual Amg::Vector3D GlobalToAmdbLRSCoords(const Amg::Vector3D &x) const override final
virtual const sTgcIdHelper & stgcIdHelper() const =0
access to TgcIdHelper
virtual void localToGlobal(const Amg::Vector2D &locp, const Amg::Vector3D &mom, Amg::Vector3D &glob) const override final
Specified for PlaneSurface: LocalToGlobal method without dynamic memory allocation.
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Amg::Transform3D getTranslateZ3D(const double Z)
: Returns a shift transformation along the z-axis
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 2, 1 > Vector2D
Eigen::Matrix< double, 3, 1 > Vector3D
The ReadoutGeomCnvAlg converts the Run4 Readout geometry build from the GeoModelXML into the legacy M...
Ensure that the Athena extensions are properly loaded.
bool center(int channel, Amg::Vector2D &pos) const
STRIPS ONLY: Returns the center on the strip.
double distanceToReadout(const Amg::Vector2D &pos) const
distance to readout
int channelNumber(const Amg::Vector2D &pos) const
calculate local channel number, range 1=nstrips like identifiers. Returns -1 if out of range
Parameters defining the design of the readout sTGC pads.
bool channelPosition(const std::pair< int, int > &pad, Amg::Vector2D &pos) const
calculate local channel position for a given channel number
bool channelCorners(const std::pair< int, int > &pad, CornerArray &corners) const