ATLAS Offline Software
Loading...
Searching...
No Matches
MuonGM::MdtReadoutElement Class Referencefinal

#include <MdtReadoutElement.h>

Inheritance diagram for MuonGM::MdtReadoutElement:

Classes

struct  GeoInfo

Public Member Functions

 MdtReadoutElement (GeoVFullPhysVol *pv, const std::string &stName, MuonDetectorManager *mgr)
 ~MdtReadoutElement ()=default
unsigned int nMDTinStation () const
 How many MDT chambers are in the station.
void setNMdtInStation (unsigned int numMdt)
bool barrel () const
 Returns whether the chamber is in the barrel (Assement on first later in stationName).
bool endcap () const
 Returns whether the chamber is in the endcap.
int getMultilayer () const
 Returns the multilayer represented by the readout element.
int getNLayers () const
 Returns the number of tube layers inside the multilayer.
int getNtubesperlayer () const
 Returns the number of tubes in each tube layer.
int getNtubesinastep () const
 Returns the number of tubes in the endcap trapezoid sharing the same length.
void setMultilayer (const int ml)
 Sets the multilayer number.
void setNLayers (const int nl)
 Sets the number of layers.
bool getWireFirstLocalCoordAlongZ (int tubeLayer, double &coord) const
bool getWireFirstLocalCoordAlongR (int tubeLayer, double &coord) const
bool containsId (const Identifier &id) const override
double tubeLength (const int tubeLayer, const int tube) const
double getActiveTubeLength (const int tubeLayer, const int tube) const
double getWireLength (const int tubeLayer, const int tube) const
double tubeLength (const Identifier &id) const
double innerTubeRadius () const
 Returns the inner tube radius excluding the aluminium walls.
double outerTubeRadius () const
 Returns the tube radius taking the thickness of the tubes into account.
double tubePitch () const
 Returns the distance between 2 tubes in a tube layer.
const Amg::Transform3DlocalToGlobalTransf (const Identifier &id) const
const Amg::Transform3DlocalToGlobalTransf (const int tubeLayer, const int tube) const
Amg::Transform3D nodeform_localToGlobalTransf (const Identifier &id) const
Amg::Transform3D nodeform_localToGlobalTransf (const int tubeLayer, const int tube) const
Amg::Transform3D globalToLocalTransf (const int tubeLayer, const int tube) const
Amg::Transform3D globalToLocalTransf (const Identifier &id) const
Amg::Transform3D nodeform_globalToLocalTransf (const Identifier &id) const
Amg::Transform3D nodeform_globalToLocalTransf (const int tubeLayer, const int tube) const
Amg::Vector3D localTubePos (const Identifier &id) const
Amg::Vector3D localTubePos (const int tubelayer, const int tube) const
Amg::Vector3D nodeform_localTubePos (const Identifier &id) const
Amg::Vector3D nodeform_localTubePos (const int tubelayer, const int tube) const
Amg::Vector3D tubePos (const Identifier &id) const
 Returns the global position of the given tube.
Amg::Vector3D tubePos (const int tubelayer, const int tube) const
Amg::Vector3D nodeform_tubePos (const Identifier &id) const
 Returns the global position of the tube excluding the B-line & As-built corrections.
Amg::Vector3D nodeform_tubePos (const int tubelayer, const int tube) const
double signedRODistanceFromTubeCentre (const Identifier &id) const
double signedRODistanceFromTubeCentre (const int tubeLayer, const int tube) const
double RODistanceFromTubeCentre (const Identifier &id) const
double RODistanceFromTubeCentre (const int tubeLayer, const int tube) const
double distanceFromRO (const Amg::Vector3D &GlobalHitPosition, const Identifier &id) const
double distanceFromRO (const Amg::Vector3D &GlobalHitPosition, const int tubelayer, const int tube) const
int isAtReadoutSide (const Amg::Vector3D &GlobalHitPosition, const Identifier &id) const
int isAtReadoutSide (const Amg::Vector3D &GlobalHitPosition, const int tubelayer, const int tube) const
Amg::Vector3D localROPos (const Identifier &id) const
Amg::Vector3D localROPos (const int tubelayer, const int tube) const
Amg::Vector3D ROPos (const int tubelayer, const int tube) const
Amg::Vector3D ROPos (const Identifier &id) const
Amg::Vector3D tubeFrame_localROPos (const int tubelayer, const int tube) const
Amg::Vector3D tubeFrame_localROPos (const Identifier &id) const
void setBLinePar (const BLinePar *bLine)
void clearBLinePar ()
const BLinePargetBLinePar () const
void clearCache () override final
void fillCache () override final
virtual const Trk::Surfacesurface () const override final
 Return surface associated with this detector element.
virtual const Trk::StraightLineSurfacesurface (const Identifier &id) const override final
 Return surface associated with this identifier, which should come from the PrepRawData object (i.e.
const Trk::StraightLineSurfacesurface (const int tubeLayer, const int tube) const
virtual const Trk::SurfaceBoundsbounds () const override final
 Return the boundaries of the element.
virtual const Trk::CylinderBoundsbounds (const Identifier &id) const override final
 Return the boundaries of the surface associated with this identifier.
const Trk::CylinderBoundsbounds (const int tubeLayer, const int tube) const
virtual const Amg::Transform3Dtransform (const Identifier &id) const override final
 Return local to global transform associated with this identifier.
virtual const Amg::Transform3Dtransform () const override final
 Return local to global transform.
const Amg::Transform3Dtransform (const int tubeLayer, const int tube) const
virtual const Amg::Vector3Dcenter (const Identifier &) const override final
 Return the center of the surface associated with this identifier In the case of silicon it returns the same as center().
virtual const Amg::Vector3Dcenter () const override final
 Return the center of the element.
const Amg::Vector3Dcenter (const int tubeLayer, const int tube) const
virtual const Amg::Vector3Dnormal (const Identifier &) const override final
 Return the normal of the surface associated with this identifier In the case of silicon it returns the same as normal().
virtual const Amg::Vector3Dnormal () const override final
 Return the normal of the element.
std::vector< const Trk::Surface * > surfaces () const
 returns all the surfaces contained in this detector element
Amg::Transform3D tubeToMultilayerTransf (const Identifier &id) const
Amg::Transform3D tubeToMultilayerTransf (const int tubeLayer, const int tube) const
Identifier identify () const override final
 Returns the ATLAS Identifier of the MuonReadOutElement.
IdentifierHash identifyHash () const override final
 Returns the IdentifierHash of the MuonStation, i.e.
IdentifierHash detectorElementHash () const
 Returns the IdentifierHash of the detector element.
void setIdentifier (const Identifier &id)
 Sets the Identifier, hashes & station names.
int getStationIndex () const
int getStationEta () const
int getStationPhi () const
const Amg::Vector3D globalPosition () const
const Amg::Transform3DabsTransform () const
const Amg::Transform3DdefTransform () const
virtual Amg::Vector3D AmdbLRSToGlobalCoords (const Amg::Vector3D &x) const
virtual Amg::Transform3D AmdbLRSToGlobalTransform () const
virtual Amg::Vector3D GlobalToAmdbLRSCoords (const Amg::Vector3D &x) const
virtual Amg::Transform3D GlobalToAmdbLRSTransform () const
std::string getTechnologyType () const
const std::string & getTechnologyName () const
void setTechnologyName (const std::string &str)
std::string getStationType () const
const std::string & getStationName () const
void setStationName (const std::string &)
double getSsize () const
double getRsize () const
double getZsize () const
double getLongSsize () const
double getLongRsize () const
double getLongZsize () const
double getStationS () const
 Seems to be exclusively used by the MDTs --> Move it to MdtReadoutElement.
void setStationS (double)
void setLongSsize (double)
void setLongRsize (double)
void setLongZsize (double)
void setSsize (double)
void setRsize (double)
void setZsize (double)
bool largeSector () const
bool smallSector () const
bool sideA () const
bool sideC () const
const MuonStationparentMuonStation () const
void setParentMuonStation (const MuonStation *)
Amg::Transform3D toParentStation () const
Amg::Vector3D parentMuonStationPos () const
bool hasCutouts () const
void setHasCutouts (bool flag)
void refreshCache ()
const Muon::IMuonIdHelperSvcidHelperSvc () const
Trk::DetectorElemType detectorType () const override final
 Return the Detector element type.
std::string detectorTypeString () const
 Returns a string of the Detector element type.
bool msgLvl (const MSG::Level lvl) const
 Test the output level.
MsgStream & msg () const
 The standard message stream.
MsgStream & msg (const MSG::Level lvl) const
 The standard message stream.
void setLevel (MSG::Level lvl)
 Change the current logging level.

Protected Member Functions

const MuonDetectorManagermanager () const

Protected Attributes

double m_Ssize {-9999.}
double m_Rsize {-9999.}
double m_Zsize {-9999.}
double m_LongSsize {-9999.}
double m_LongRsize {-9999.}
double m_LongZsize {-9999.}
 size in the specified direction
std::string m_techname {"TTT0"}
 MDT or RPC or TGC or CSC plus a two digits subtype; example RPC17.
std::string m_statname {"XXX0"}
 examples are BMS5, CSS1, EML1
int m_caching {-1}
 0 if we want to avoid caching geometry info for tracking interface
bool m_hasCutouts {false}
 true is there are cutouts in the readdout-element

Private Member Functions

void geoInitDone ()
unsigned boundHash (const int tubeLayer, const int tube) const
 Return the hash for the bounds.
double getTubeLengthForCaching (const int tubeLayer, const int tube) const
double getNominalTubeLengthWoCutouts (const int tubeLayer, const int tube) const
Amg::Vector3D localNominalTubePosWoCutouts (const int tubelayer, const int tube) const
const Amg::Transform3DfromIdealToDeformed (const int tubelayer, const int tube) const
Amg::Vector3D posOnDefChamWire (const Amg::Vector3D &locAMDBPos, const double width_narrow, const double width_wide, const double height, const double thickness, const Amg::Vector3D &fixedPoint) const
void wireEndpointsAsBuilt (Amg::Vector3D &locAMDBWireEndP, Amg::Vector3D &locAMDBWireEndN, const int tubelayer, const int tube) const
Amg::Transform3D globalTransform (const Amg::Vector3D &tubePos, const Amg::Transform3D &toDeform) const
GeoInfo makeGeoInfo (const int tubelayer, const int tube) const
const GeoInfogeoInfo (const int tubeLayer, const int tube) const
Amg::Transform3D deformedTransform (const int tubelayer, const int tube) const
void initMessaging () const
 Initialize our message level and MessageSvc.

Static Private Member Functions

static Amg::Transform3D tubeToMultilayerTransf (const Amg::Vector3D &tubePos, const Amg::Transform3D &toDeform)

Private Attributes

const MdtIdHelperm_idHelper {idHelperSvc()->mdtIdHelper()}
const int m_stIdx_BIS {m_idHelper.stationNameIndex("BIS")}
const int m_stIdx_BOL {m_idHelper.stationNameIndex("BOL")}
unsigned int m_nMDTinStation {0}
int m_multilayer {0}
int m_nlayers {-1}
double m_tubepitch {-9999.}
double m_tubelayerpitch {-9999.}
int m_ntubesperlayer {-1}
int m_nsteps {-1}
int m_ntubesinastep {-1}
double m_tubelenStepSize {-9999.}
double m_cutoutShift {-9999.}
double m_endpluglength {-9999.}
double m_deadlength {-9999.}
bool m_inBarrel {false}
std::array< double, maxnstepsm_tubelength {make_array<double, maxnsteps>(-9999.)}
std::array< double, maxnlayersm_firstwire_x {make_array<double, maxnlayers>(-9999.)}
std::array< double, maxnlayersm_firstwire_y {make_array<double, maxnlayers>(-9999.)}
double m_innerRadius {-9999.}
double m_tubeWallThickness {-9999.}
CxxUtils::CachedValue< int > m_zsignRO_tubeFrame {}
std::vector< GeoInfom_tubeGeo {}
const BLineParm_BLinePar {nullptr}
CxxUtils::CachedValue< Amg::Vector3Dm_elemNormal {}
std::vector< std::unique_ptr< Trk::StraightLineSurface > > m_tubeSurfaces {}
std::vector< std::unique_ptr< Trk::CylinderBounds > > m_tubeBounds {}
std::unique_ptr< Trk::Surfacem_associatedSurface {}
std::shared_ptr< Trk::SurfaceBoundsm_associatedBounds {}
bool m_builtFromCnv {false}
 Flag indicating whether the RE is built by the ReadoutGeomCnvAlg.
ServiceHandle< Muon::IMuonIdHelperSvcm_idHelperSvc {"Muon::MuonIdHelperSvc/MuonIdHelperSvc", "MuonDetectorManager"}
Trk::DetectorElemType m_type {Trk::DetectorElemType::SolidState}
Identifier m_id {}
 extended data-collection identifier
IdentifierHash m_idhash {0}
 data-collection hash identifier
IdentifierHash m_detectorElIdhash {0}
 detector element hash identifier
double m_stationS {0.}
int m_stIdx {-1}
 Identifier field of the station index.
int m_eta {-1}
 Identifier field of the station eta.
int m_phi {-1}
 Identifier field of the station phi.
const MuonStationm_parentMuonStation {nullptr}
MuonDetectorManagerm_muon_mgr {nullptr}
std::string m_nm
 Message source name.
boost::thread_specific_ptr< MsgStream > m_msg_tls
 MsgStream instance (a std::cout like with print-out levels).
std::atomic< IMessageSvc * > m_imsg { nullptr }
 MessageSvc pointer.
std::atomic< MSG::Level > m_lvl { MSG::NIL }
 Current logging level.
std::atomic_flag m_initialized ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT
 Messaging initialized (initMessaging).

Friends

class MuonGMR4::ReadoutGeomCnvAlg
class MuonChamber
class MuonChamberLite

Detailed Description

Constructor & Destructor Documentation

◆ MdtReadoutElement()

MuonGM::MdtReadoutElement::MdtReadoutElement ( GeoVFullPhysVol * pv,
const std::string & stName,
MuonDetectorManager * mgr )

Definition at line 60 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

60 :
62 // get the setting of the caching flag from the manager
63 m_inBarrel = stName[0]== 'B';
64
65 setStationName(stName);
66 }
MuonReadoutElement(GeoVFullPhysVol *pv, MuonDetectorManager *mgr, Trk::DetectorElemType detType)
const std::string & stName(StIndex index)
convert StIndex into a string

◆ ~MdtReadoutElement()

MuonGM::MdtReadoutElement::~MdtReadoutElement ( )
default

Member Function Documentation

◆ absTransform()

const Amg::Transform3D & MuonGM::MuonReadoutElement::absTransform ( ) const
inlineinherited

Definition at line 199 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h.

199{ return getMaterialGeom()->getAbsoluteTransform(); }

◆ AmdbLRSToGlobalCoords()

Amg::Vector3D MuonGM::MuonReadoutElement::AmdbLRSToGlobalCoords ( const Amg::Vector3D & x) const
virtualinherited

◆ AmdbLRSToGlobalTransform()

Amg::Transform3D MuonGM::MuonReadoutElement::AmdbLRSToGlobalTransform ( ) const
virtualinherited

Reimplemented in MuonGM::MMReadoutElement, and MuonGM::sTgcReadoutElement.

Definition at line 90 of file MuonDetDescr/MuonReadoutGeometry/src/MuonReadoutElement.cxx.

90 {
92 }
const Amg::Transform3D & getNativeToAmdbLRS() const
Amg::Transform3D getTransform() const

◆ barrel()

bool MuonGM::MdtReadoutElement::barrel ( ) const

Returns whether the chamber is in the barrel (Assement on first later in stationName).

◆ boundHash()

unsigned MuonGM::MdtReadoutElement::boundHash ( const int tubeLayer,
const int tube ) const
private

Return the hash for the bounds.

Definition at line 280 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

280 {
281 int istep = 0;
282 int ntot_steps = m_nsteps;
283
284 if (hasCutouts() && manager()->MinimalGeoFlag() == 0) {
285 ntot_steps = m_nlayers * m_ntubesperlayer;
286 istep = (tubeLayer - 1) * m_ntubesperlayer + tube - 1;
287 } else {
288 if (endcap()) istep = int((tube - 1) / m_ntubesinastep);
289
290 if (istep < 0 || istep >= ntot_steps) {
291 ATH_MSG_WARNING( "bounds for Element named "<< " with tech. " << getTechnologyType()
292 << " DEid = " << idHelperSvc()->toStringDetEl(identify()) << " called with: tubeL, tube " << tubeLayer << " " << tube
293 << "; step " << istep << " out of range 0-" << m_nsteps - 1 << " m_ntubesinastep " << m_ntubesinastep );
294 ATH_MSG_WARNING( "Please run in DEBUG mode to get extra diagnostic; setting istep = 0" );
295 }
296 }
297 if ((unsigned int)istep >= m_tubeBounds.size()) {
298 THROW_EXCEPTION(__func__<<"("<<tubeLayer<<","<<tube<<") but m_tubeBounds.size()="<<m_tubeBounds.size()<<" for "<<
299 idHelperSvc()->toStringDetEl(identify()));
300 }
301
302 return istep;
303 }
#define ATH_MSG_WARNING(x)
bool endcap() const
Returns whether the chamber is in the endcap.
std::vector< std::unique_ptr< Trk::CylinderBounds > > m_tubeBounds
Identifier identify() const override final
Returns the ATLAS Identifier of the MuonReadOutElement.
#define THROW_EXCEPTION(MESSAGE)
Definition throwExcept.h:10

◆ bounds() [1/3]

const Trk::SurfaceBounds & MuonGM::MdtReadoutElement::bounds ( ) const
finaloverridevirtual

Return the boundaries of the element.

Implements Trk::TrkDetElementBase.

Definition at line 880 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

◆ bounds() [2/3]

virtual const Trk::CylinderBounds & MuonGM::MdtReadoutElement::bounds ( const Identifier & id) const
finaloverridevirtual

Return the boundaries of the surface associated with this identifier.

For TRT this will be a straw, while for silicon it returns the same as bounds()

Implements Trk::TrkDetElementBase.

◆ bounds() [3/3]

const Trk::CylinderBounds & MuonGM::MdtReadoutElement::bounds ( const int tubeLayer,
const int tube ) const

Definition at line 862 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

862 {
863 const auto& bounds = m_tubeBounds.at(boundHash(tubeLayer, tube));
864 assert(bounds!= nullptr);
865 return *bounds;
866 }
unsigned boundHash(const int tubeLayer, const int tube) const
Return the hash for the bounds.
virtual const Trk::SurfaceBounds & bounds() const override final
Return the boundaries of the element.

◆ center() [1/3]

const Amg::Vector3D & MuonGM::MdtReadoutElement::center ( ) const
finaloverridevirtual

Return the center of the element.

Implements Trk::TrkDetElementBase.

Definition at line 878 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

878{ return surface().center(); }
virtual const Trk::Surface & surface() const override final
Return surface associated with this detector element.
const Amg::Vector3D & center() const
Returns the center position of the Surface.

◆ center() [2/3]

virtual const Amg::Vector3D & MuonGM::MdtReadoutElement::center ( const Identifier & id) const
finaloverridevirtual

Return the center of the surface associated with this identifier In the case of silicon it returns the same as center().

Implements Trk::TrkDetElementBase.

◆ center() [3/3]

const Amg::Vector3D & MuonGM::MdtReadoutElement::center ( const int tubeLayer,
const int tube ) const

◆ clearBLinePar()

void MuonGM::MdtReadoutElement::clearBLinePar ( )

◆ clearCache()

void MuonGM::MdtReadoutElement::clearCache ( )
finaloverridevirtual

Implements MuonGM::MuonReadoutElement.

Definition at line 881 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

881 {
882 ATH_MSG_DEBUG( "Clearing cache for ReadoutElement " << idHelperSvc()->toStringDetEl(identify()) );
883 m_elemNormal.reset();
884 }
#define ATH_MSG_DEBUG(x)

◆ containsId()

bool MuonGM::MdtReadoutElement::containsId ( const Identifier & id) const
overridevirtual

Implements MuonGM::MuonReadoutElement.

Definition at line 962 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

962 {
963 if (idHelperSvc()->detElId(id) != identify()) return false;
964 int layer = m_idHelper.tubeLayer(id);
965 if (layer < 1 || layer > getNLayers()) return false;
966 int tube = m_idHelper.tube(id);
967 return tube >= 1 && tube <= getNtubesperlayer();
968 }
int getNLayers() const
Returns the number of tube layers inside the multilayer.
int getNtubesperlayer() const
Returns the number of tubes in each tube layer.
@ layer
Definition HitInfo.h:79

◆ deformedTransform()

Amg::Transform3D MuonGM::MdtReadoutElement::deformedTransform ( const int tubelayer,
const int tube ) const
private

Definition at line 479 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

479 {
480
481 const MuonStation* ms = parentMuonStation();
482 if (!ms->hasBLines() && !ms->hasMdtAsBuiltParams()) {
483 return Amg::Transform3D::Identity();
484 }
485 const Amg::Vector3D fixedPoint = ms->getBlineFixedPointInAmdbLRS();
486
487 // Chamber parameters
488 double moduleWidthS = m_Ssize;
489 double moduleWidthL = m_LongSsize;
490 double height = barrel() ? ms->ZsizeMdtStation() : ms->RsizeMdtStation();
491 double thickness = barrel() ? ms->RsizeMdtStation() : ms->ZsizeMdtStation();
492
493 ATH_MSG_VERBOSE("Calculate deformed transform "<<idHelperSvc()->toStringDetEl(identify())
494 <<", layer: "<<tubeLayer<<", tube: "<<tube<<", fixedPoint: "<<Amg::toString(fixedPoint)<<" / "
495 <<Amg::toString(ms->getGeoTransform()->getDefTransform() *ms->getNativeToAmdbLRS().inverse()* fixedPoint)
496 <<", height: "<<height<<", thickness: "<<thickness
497 <<", ideal tube: "<<Amg::toString(localNominalTubePosWoCutouts(tubeLayer,tube)));
498
499#ifndef NDEBUG
500 double heightML = barrel() ? m_Zsize : m_Rsize;
501 double thicknessML = barrel() ? m_Rsize : m_Zsize;
502 if (std::abs(height - heightML) > 10.) {
503 ATH_MSG_DEBUG( "RE " << idHelperSvc()->toStringDetEl(identify())
504 << "Different ML and MDTStation length in the precision coord.direction --- MultiLayerHeight, MDTstationHeigh "
505 << heightML << " " << height << " MultiLayerThickness, MDTstationThickness " << thicknessML << " " << thickness);
506 }
507#endif
508 // Chamber dimension in Z is defined with extraneous glue width. Correct for it
509 double glue = (tubePitch() - 2. * outerTubeRadius());
510 height -= glue;
511
512 // Calculate transformation from native to AMDB.
513 const Amg::Transform3D toAMDB = ms->getNativeToAmdbLRS() * toParentStation();
514 const Amg::Transform3D fromAMDB = toAMDB.inverse();
515
516 // Get positions of the wire center and end without deformations
517 Amg::Vector3D pt_center = localNominalTubePosWoCutouts(tubeLayer, tube);
518 double halftubelen = 0.5 * getNominalTubeLengthWoCutouts(tubeLayer, tube);
519
520 // Compute tube ends in AMDB coordinates
521 Amg::Vector3D pt_end1 = toAMDB * pt_center + halftubelen * Amg::Vector3D::UnitX(); // s>0 side
522 Amg::Vector3D pt_end2 = toAMDB * pt_center - halftubelen * Amg::Vector3D::UnitX(); // s>0 side
523
524 Amg::Vector3D pt_end1_new = pt_end1;
525 Amg::Vector3D pt_end2_new = pt_end2;
526
527 // if there are as built parameters ... apply them here
528 if (ms->hasMdtAsBuiltParams()) {
529 wireEndpointsAsBuilt(pt_end1_new, pt_end2_new, tubeLayer, tube);
530 }
531
532 // if there are deformation parameters ... apply them here
533 if (ms->hasBLines()) {
534
535 // Get positions after the deformations applied
536 // first wire end point
537 pt_end1_new = posOnDefChamWire(pt_end1_new, moduleWidthS, moduleWidthL, height, thickness, fixedPoint);
538
539 // second wire end point
540 pt_end2_new = posOnDefChamWire(pt_end2_new, moduleWidthS, moduleWidthL, height, thickness, fixedPoint);
541 }
542
543 // Switch tube ends back to MGM coordinates
544 pt_end1 = fromAMDB * pt_end1;
545 pt_end2 = fromAMDB * pt_end2;
546 pt_end1_new = fromAMDB * pt_end1_new;
547 pt_end2_new = fromAMDB * pt_end2_new;
548
549 // Calculate deformation. Make sure that the wire length stays the same.
550 // Code in positionOnDeformedChamber does not provide this by default.
551 // Break transformation into translation of the wire center and the rotation of the wire
552 // Move to the coordinate system originated at the wire center, then rotate the wire, then
553 // move wire center to the new position
554 const Amg::Vector3D pt_center_new = 0.5 * (pt_end1_new + pt_end2_new);
555 const Amg::Transform3D to_center{Amg::getTranslate3D(-pt_center)};
556 const Amg::Transform3D from_center{Amg::getTranslate3D(pt_center_new)};
557 const Amg::Vector3D old_direction = (pt_end2 - pt_end1).unit();
558 const Amg::Vector3D new_direction = (pt_end2_new - pt_end1_new).unit();
559 const Amg::Vector3D rotation_vector = old_direction.cross(new_direction);
560
561
562 Amg::Transform3D deformedTransform{Amg::Transform3D::Identity()};
563 if (rotation_vector.mag() > 10. * std::numeric_limits<double>::epsilon()) {
564 const Amg::AngleAxis3D wire_rotation(std::asin(rotation_vector.mag()), rotation_vector.unit());
565 deformedTransform = from_center * wire_rotation * to_center;
566 } else {
567 deformedTransform = from_center * to_center;
568 }
569 ATH_MSG_VERBOSE("To center "<<GeoTrf::toString(to_center)<<" from: "<<GeoTrf::toString(from_center)<<
570 " -- direction: "<<GeoTrf::toString(old_direction)<<" vs. "<<GeoTrf::toString(new_direction)
571 <<" --> rot: "<<GeoTrf::toString(rotation_vector)<<" ==> "<<GeoTrf::toString(deformedTransform,true));
572 return deformedTransform;
573 }
const PlainObject unit() const
This is a plugin that makes Eigen look like CLHEP & defines some convenience methods.
#define ATH_MSG_VERBOSE(x)
void wireEndpointsAsBuilt(Amg::Vector3D &locAMDBWireEndP, Amg::Vector3D &locAMDBWireEndN, const int tubelayer, const int tube) const
double getNominalTubeLengthWoCutouts(const int tubeLayer, const int tube) const
Amg::Vector3D localNominalTubePosWoCutouts(const int tubelayer, const int tube) const
Amg::Vector3D posOnDefChamWire(const Amg::Vector3D &locAMDBPos, const double width_narrow, const double width_wide, const double height, const double thickness, const Amg::Vector3D &fixedPoint) const
double outerTubeRadius() const
Returns the tube radius taking the thickness of the tubes into account.
double tubePitch() const
Returns the distance between 2 tubes in a tube layer.
bool barrel() const
Returns whether the chamber is in the barrel (Assement on first later in stationName).
Amg::Transform3D deformedTransform(const int tubelayer, const int tube) const
Amg::Transform3D getTranslate3D(const double X, const double Y, const double Z)
: Returns a shift transformation along an arbitrary axis
Eigen::AngleAxisd AngleAxis3D
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 3, 1 > Vector3D

◆ defTransform()

const Amg::Transform3D & MuonGM::MuonReadoutElement::defTransform ( ) const
inlineinherited

Definition at line 201 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h.

201{ return getMaterialGeom()->getDefAbsoluteTransform(); }

◆ detectorElementHash()

IdentifierHash MuonGM::MuonReadoutElement::detectorElementHash ( ) const
inlineinherited

Returns the IdentifierHash of the detector element.

Unlike the identifyHash, this hash is unique for each readout element

Definition at line 175 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h.

175{ return m_detectorElIdhash; }

◆ detectorType()

Trk::DetectorElemType MuonGM::MuonReadoutElement::detectorType ( ) const
inlinefinaloverridevirtualinherited

◆ 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";
14 else if (type == Trk::DetectorElemType::Silicon)
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";
26 else if (type == Trk::DetectorElemType::sTgc)
27 return "sTgc";
28 else if (type == Trk::DetectorElemType::MM)
29 return "Mm";
30 return "Unknown";
31}
virtual DetectorElemType detectorType() const =0
Return the Detector element type.

◆ distanceFromRO() [1/2]

double MuonGM::MdtReadoutElement::distanceFromRO ( const Amg::Vector3D & GlobalHitPosition,
const Identifier & id ) const

◆ distanceFromRO() [2/2]

double MuonGM::MdtReadoutElement::distanceFromRO ( const Amg::Vector3D & GlobalHitPosition,
const int tubelayer,
const int tube ) const

Definition at line 188 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

188 {
189 // x is given in the global reference frame
190 const Amg::Vector3D cPos = center(tubeLayer, tube);
191 const Amg::Vector3D roPos = ROPos(tubeLayer, tube);
192 const Amg::Vector3D c_ro = cPos - roPos;
193 const Amg::Vector3D x_ro = x - roPos;
194
195 double scalprod = c_ro.dot(x_ro);
196 double wlen = getWireLength(tubeLayer, tube);
197 if (wlen > 10. * CLHEP::mm)
198 scalprod = std::abs(2. * scalprod / getWireLength(tubeLayer, tube));
199 else {
200 ATH_MSG_WARNING( " Distance of Point " <<Amg::toString(x) << " from RO side cannot be calculated (=0) since wirelength = " << wlen );
201 scalprod = 0.;
202 }
203 return scalprod;
204 }
Amg::Vector3D ROPos(const int tubelayer, const int tube) const
virtual const Amg::Vector3D & center(const Identifier &) const override final
Return the center of the surface associated with this identifier In the case of silicon it returns th...
double getWireLength(const int tubeLayer, const int tube) const

◆ endcap()

bool MuonGM::MdtReadoutElement::endcap ( ) const

Returns whether the chamber is in the endcap.

◆ fillCache()

void MuonGM::MdtReadoutElement::fillCache ( )
finaloverridevirtual

Redo the central surface otherwise Frozen Tier0 changes..

Implements MuonGM::MuonReadoutElement.

Definition at line 895 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

895 {
896 ATH_MSG_DEBUG( "Filling cache for ReadoutElement " << idHelperSvc()->toStringDetEl(identify())
897 <<", nlayers: "<<getNLayers()<<", tubes per lay: "<<getNtubesperlayer());
898
899 if (!m_associatedBounds) {
900 if (barrel()) {
901 m_associatedBounds = std::make_unique<Trk::RectangleBounds>(getSsize() / 2., getZsize() / 2.);
902 } else {
903 m_associatedBounds = std::make_unique<Trk::TrapezoidBounds>(getSsize() / 2.,
904 getLongSsize() / 2.,
905 getRsize() / 2.);
906 }
907 }
908 ATH_MSG_VERBOSE( "global Normal " << Amg::toString(normal()) );
909
910 for (int tubeLayer = 1; tubeLayer <= getNLayers(); ++tubeLayer) {
911 for (int tube = 1; tube <= getNtubesperlayer(); ++tube) {
912 // in case of BMG chambers, do not check the 'dead' tubes
913 // (the tubes are numbered from 1-54 for each however there are cutouts for the
914 // alignment system where no tubes are built-in, meaning, those tubes do not exist/are 'dead')
915 bool addTrf{false};
916
917 if (!m_builtFromCnv && manager()->mdtIdHelper()->isBMG(identify())) {
918 // usually the tube number corresponds to the child number, however for
919 // BMG chambers full tubes are skipped during the building process
920 // therefore the matching needs to be done via the volume ID
921 int packed_id = tube + maxNTubesPerLayer * tubeLayer;
922 geoGetIds(
923 [&](int id) {
924 if (id == packed_id) {
925 addTrf = true;
926 }
927
928 }, getMaterialGeom());
929 } else {
930 addTrf = true;
931 }
932 if (!addTrf) {
933 continue;
934 }
935 size_t itube = (tubeLayer - 1) * m_ntubesperlayer + tube - 1;
936 m_tubeGeo.at(itube) = makeGeoInfo(tubeLayer, tube);
937 auto& surface = m_tubeSurfaces.at(itube);
938 if (!surface) {
939 Identifier id = m_idHelper.channelID(identify(), getMultilayer(), tubeLayer, tube);
940 surface = std::make_unique<Trk::StraightLineSurface>(*this, id);
941 }
942 std::unique_ptr<Trk::CylinderBounds>& ptr = m_tubeBounds.at(boundHash(tubeLayer, tube));
943 if (!ptr) {
944 double tubelength = getTubeLengthForCaching(tubeLayer, tube);
945 ptr = std::make_unique<Trk::CylinderBounds>(innerTubeRadius(), 0.5 * tubelength - m_deadlength);
946 }
947 }
948 }
950 Amg::RotationMatrix3D muonTRotation(transform().rotation());
951 Amg::RotationMatrix3D surfaceTRotation;
952 surfaceTRotation.col(0) = muonTRotation.col(1);
953 surfaceTRotation.col(1) = muonTRotation.col(2);
954 surfaceTRotation.col(2) = muonTRotation.col(0);
955
956 Amg::Transform3D trans3D(surfaceTRotation);
957 trans3D.pretranslate(transform().translation());
958
959 m_associatedSurface = std::make_unique<Trk::PlaneSurface>(Amg::Transform3D(trans3D), m_associatedBounds);
960 }
void geoGetIds(FUNCTION f, const GeoGraphNode *node, int depthLimit=1)
Template helper for running the visitor.
Definition GeoGetIds.h:82
double getTubeLengthForCaching(const int tubeLayer, const int tube) const
bool m_builtFromCnv
Flag indicating whether the RE is built by the ReadoutGeomCnvAlg.
std::vector< std::unique_ptr< Trk::StraightLineSurface > > m_tubeSurfaces
virtual const Amg::Vector3D & normal(const Identifier &) const override final
Return the normal of the surface associated with this identifier In the case of silicon it returns th...
int getMultilayer() const
Returns the multilayer represented by the readout element.
virtual const Amg::Transform3D & transform() const override final
Return local to global transform.
GeoInfo makeGeoInfo(const int tubelayer, const int tube) const
double innerTubeRadius() const
Returns the inner tube radius excluding the aluminium walls.
Eigen::Matrix< double, 3, 3 > RotationMatrix3D
void * ptr(T *p)
Definition SGImplSvc.cxx:74

◆ fromIdealToDeformed()

const Amg::Transform3D & MuonGM::MdtReadoutElement::fromIdealToDeformed ( const int tubelayer,
const int tube ) const
private

Definition at line 456 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

456 {
457 size_t itube = (tubeLayer - 1) * m_ntubesperlayer + tube - 1;
458 if (itube >= m_tubeGeo.size()) {
459 ATH_MSG_WARNING(__func__<<"() :"<<__LINE__<< " called with tubeLayer or tube out of range in chamber "
460 << idHelperSvc()->toStringDetEl(identify()) << " : layer " << tubeLayer << " max " << m_nlayers << " tube " << tube
461 << " max " << m_ntubesperlayer << " will compute deformation for first tube in this chamber" );
462 ATH_MSG_WARNING( "Please run in DEBUG mode to get extra diagnostic" );
463 itube = 0;
464 }
465 static const Amg::Transform3D ident{Amg::Transform3D::Identity()};
466 const GeoInfo& geo = m_tubeGeo.at(itube);
467 return geo.deformedTrf ? *geo.deformedTrf : ident;
468 }
@ ident
Definition HitInfo.h:77

◆ geoInfo()

const MdtReadoutElement::GeoInfo & MuonGM::MdtReadoutElement::geoInfo ( const int tubeLayer,
const int tube ) const
private

Definition at line 827 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

827 {
828 size_t itube = (tubeLayer - 1) * m_ntubesperlayer + tube - 1;
829 if (itube >= m_tubeGeo.size()) {
830 ATH_MSG_WARNING(__func__<<"() :"<<__LINE__<<" called with tubeLayer or tube out of range in chamber "
831 << idHelperSvc()->toStringDetEl(identify()) << " : layer " << tubeLayer << " max " << m_nlayers << " tube " << tube
832 << " max " << m_ntubesperlayer << " will compute transform for first tube in this chamber" );
833 ATH_MSG_WARNING( "Please run in DEBUG mode to get extra diagnostic" );
834 itube = 0;
835 }
836 return m_tubeGeo.at(itube);
837 }

◆ geoInitDone()

void MuonGM::MdtReadoutElement::geoInitDone ( )
private

Definition at line 93 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

93 {
96
97 int ntot_steps = m_nsteps;
98 if (hasCutouts() && manager()->MinimalGeoFlag() == 0) { ntot_steps = m_nlayers * m_ntubesperlayer; }
99 m_tubeBounds.resize(ntot_steps);
100 }

◆ getActiveTubeLength()

double MuonGM::MdtReadoutElement::getActiveTubeLength ( const int tubeLayer,
const int tube ) const

◆ getBLinePar()

const BLinePar * MuonGM::MdtReadoutElement::getBLinePar ( ) const
inline

◆ getLongRsize()

double MuonGM::MuonReadoutElement::getLongRsize ( ) const
inlineinherited

◆ getLongSsize()

double MuonGM::MuonReadoutElement::getLongSsize ( ) const
inlineinherited

◆ getLongZsize()

double MuonGM::MuonReadoutElement::getLongZsize ( ) const
inlineinherited

◆ getMultilayer()

int MuonGM::MdtReadoutElement::getMultilayer ( ) const

Returns the multilayer represented by the readout element.

◆ getNLayers()

int MuonGM::MdtReadoutElement::getNLayers ( ) const

Returns the number of tube layers inside the multilayer.

◆ getNominalTubeLengthWoCutouts()

double MuonGM::MdtReadoutElement::getNominalTubeLengthWoCutouts ( const int tubeLayer,
const int tube ) const
private

Definition at line 430 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

430 {
431 if (barrel())
432 return m_Ssize;
433 else {
434 int istep = int((tube - 1) / m_ntubesinastep);
435 if (istep < 0 || istep >= m_nsteps) {
436 ATH_MSG_WARNING( "getNominalTubeLengthWoCutouts for Element named " << idHelperSvc()->toStringDetEl(identify())
437 << " called with: tubeL, tube " << tubeLayer
438 << " " << tube << "; step " << istep << " out of range 0-" << m_nsteps - 1 << " m_ntubesinastep " << m_ntubesinastep);
439 istep = 0;
440 }
441 return m_tubelength[istep];
442 }
443 }

◆ getNtubesinastep()

int MuonGM::MdtReadoutElement::getNtubesinastep ( ) const

Returns the number of tubes in the endcap trapezoid sharing the same length.

◆ getNtubesperlayer()

int MuonGM::MdtReadoutElement::getNtubesperlayer ( ) const

Returns the number of tubes in each tube layer.

◆ getRsize()

double MuonGM::MuonReadoutElement::getRsize ( ) const
inlineinherited

◆ getSsize()

double MuonGM::MuonReadoutElement::getSsize ( ) const
inlineinherited

◆ getStationEta()

int MuonGM::MuonReadoutElement::getStationEta ( ) const
inlineinherited

◆ getStationIndex()

int MuonGM::MuonReadoutElement::getStationIndex ( ) const
inlineinherited

◆ getStationName()

const std::string & MuonGM::MuonReadoutElement::getStationName ( ) const
inlineinherited

◆ getStationPhi()

int MuonGM::MuonReadoutElement::getStationPhi ( ) const
inlineinherited

◆ getStationS()

double MuonGM::MuonReadoutElement::getStationS ( ) const
inlineinherited

◆ getStationType()

std::string MuonGM::MuonReadoutElement::getStationType ( ) const
inlineinherited

Definition at line 178 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h.

178{ return m_statname.substr(0,3); }

◆ getTechnologyName()

const std::string & MuonGM::MuonReadoutElement::getTechnologyName ( ) const
inlineinherited

Definition at line 177 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h.

177{ return m_techname; }
std::string m_techname
MDT or RPC or TGC or CSC plus a two digits subtype; example RPC17.

◆ getTechnologyType()

std::string MuonGM::MuonReadoutElement::getTechnologyType ( ) const
inlineinherited

Definition at line 176 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h.

176{ return m_techname.substr(0, 3); }

◆ getTubeLengthForCaching()

double MuonGM::MdtReadoutElement::getTubeLengthForCaching ( const int tubeLayer,
const int tube ) const
private

Definition at line 102 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

102 {
103 double nominalTubeLength = 0.;
104 if (barrel())
105 nominalTubeLength = m_Ssize;
106 else {
107 int istep = int((tube - 1) / m_ntubesinastep);
108 if (istep < 0 || istep >= m_nsteps) {
109 ATH_MSG_WARNING( "getTubeLenght for Element with tech. " << getTechnologyType()
110 << " DEid = " << idHelperSvc()->toStringDetEl(identify()) << " called with: tubeL, tube " << tubeLayer << " " << tube
111 << "; step " << istep << " out of range 0-" << m_nsteps - 1 << " m_ntubesinastep " << m_ntubesinastep );
112 istep = 0;
113 }
114 nominalTubeLength = m_tubelength[istep];
115 }
116
117 double tlength = nominalTubeLength;
118
119 if (hasCutouts()) {
120 if (manager()->MinimalGeoFlag() == 0) {
121 ATH_MSG_VERBOSE( " MdtReadoutElement " <<idHelperSvc()->toStringDetEl(identify())
122 << " has cutouts, check for real tube length for tubeLayer, tube " << tubeLayer << " " << tube );
123 PVConstLink cv = getMaterialGeom(); // it is "Multilayer"
124 int nGrandchildren = cv->getNChildVols();
125 if (nGrandchildren <= 0) return tlength;
126 // child vol 0 is foam; 1 to (nGrandchildren-1) should be tubes
127 int ii = (tubeLayer - 1) * m_ntubesperlayer + tube;
128 // BIS78 only (the BIS7 of Run1/2 has no cutouts, thus, this block won't be reached)
129 if ((getStationIndex() == m_stIdx_BIS && std::abs(getStationEta()) == 7)) --ii;
130 if (m_idHelper.isBMG(identify())) {
131 // usually the tube number corresponds to the child number, however for
132 // BMG chambers full tubes are skipped during the building process
133 // therefore the matching needs to be done via the volume ID
134 int packed_id = tube + maxNTubesPerLayer * tubeLayer;
135 int kk = 0;
136 bool found = false;
137 geoGetIds(
138 [&](int id) {
139 if (!found && id == packed_id) {
140 ii = kk;
141 found = true;
142 }
143 ++kk;
144 }, cv);
145 if (found) {
146 ATH_MSG_DEBUG( " MdtReadoutElement tube match found for BMG - input : tube(" << tube << "), layer("
147 << tubeLayer << ") - output match : tube(" << ii % maxNTubesPerLayer << "), layer(" << ii / maxNTubesPerLayer
148 << ")" );
149 }
150 }
151 if (ii >= nGrandchildren) {
152 ATH_MSG_WARNING( " MdtReadoutElement " << idHelperSvc()->toStringDetEl(identify()) << " has cutouts, nChild = " << nGrandchildren
153 << " --- getTubeLength is looking for child with index ii=" << ii << " for tubeL and tube = " << tubeLayer << " "
154 << tube );
155 ATH_MSG_WARNING( "returning nominalTubeLength " );
156 return tlength;
157 }
158 if (ii < 0) {
159 ATH_MSG_WARNING( " MdtReadoutElement " << idHelperSvc()->toStringDetEl(identify()) << " has cutouts, nChild = " << nGrandchildren
160 << " --- getTubeLength is looking for child with index ii=" << ii << " for tubeL and tube = " << tubeLayer << " "
161 << tube );
162 ATH_MSG_WARNING( "returning nominalTubeLength " );
163 return tlength;
164 }
165 PVConstLink physChild = cv->getChildVol(ii);
166 const GeoShape* shape = physChild->getLogVol()->getShape();
167 if (shape == nullptr) return tlength;
168 const GeoTube* theTube = dynamic_cast<const GeoTube*>(shape);
169 if (theTube != nullptr)
170 tlength = 2. * theTube->getZHalfLength();
171 else
172 ATH_MSG_WARNING( "PhysChild with index " << ii
173 << " out of (tubeLayer-1)*m_ntubesperlayer+tube with tubeLayer=" << tubeLayer << " tubes/lay=" << m_ntubesperlayer
174 << " t=" << tube << " for MdtReadoutElement " << idHelperSvc()->toStringDetEl(identify()) );
175 }
176 if (std::abs(tlength - nominalTubeLength) > 0.1) {
177 ATH_MSG_VERBOSE( "Tube " << tube << " in tubeLayer = " << tubeLayer
178 << " is affected by a cutout: eff. length = " << tlength << " while nominal = " << nominalTubeLength
179 << " in station " << idHelperSvc()->toStringDetEl(identify()));
180 } else {
181 ATH_MSG_VERBOSE( "Tube " << tube << " in tubeLayer = " << tubeLayer
182 << " is NOT affected by the cutout: eff. length = " << tlength << " while nominal = " << nominalTubeLength);
183 }
184 }
185 return tlength;
186 }

◆ getWireFirstLocalCoordAlongR()

bool MuonGM::MdtReadoutElement::getWireFirstLocalCoordAlongR ( int tubeLayer,
double & coord ) const

Definition at line 86 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

86 {
87 coord = -9999.;
88 if (tubeLayer > getNLayers() || tubeLayer < 1) return false;
89 coord = m_firstwire_y[tubeLayer - 1];
90 return true;
91 }
double coord
Type of coordination system.

◆ getWireFirstLocalCoordAlongZ()

bool MuonGM::MdtReadoutElement::getWireFirstLocalCoordAlongZ ( int tubeLayer,
double & coord ) const

Definition at line 80 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

80 {
81 coord = -9999.;
82 if (tubeLayer > getNLayers() || tubeLayer < 1) return false;
83 coord = m_firstwire_x[tubeLayer - 1];
84 return true;
85 }

◆ getWireLength()

double MuonGM::MdtReadoutElement::getWireLength ( const int tubeLayer,
const int tube ) const

◆ getZsize()

double MuonGM::MuonReadoutElement::getZsize ( ) const
inlineinherited

◆ globalPosition()

const Amg::Vector3D MuonGM::MuonReadoutElement::globalPosition ( ) const
inherited

◆ GlobalToAmdbLRSCoords()

Amg::Vector3D MuonGM::MuonReadoutElement::GlobalToAmdbLRSCoords ( const Amg::Vector3D & x) const
virtualinherited

◆ GlobalToAmdbLRSTransform()

Amg::Transform3D MuonGM::MuonReadoutElement::GlobalToAmdbLRSTransform ( ) const
virtualinherited

◆ globalToLocalTransf() [1/2]

Amg::Transform3D MuonGM::MdtReadoutElement::globalToLocalTransf ( const Identifier & id) const

◆ globalToLocalTransf() [2/2]

Amg::Transform3D MuonGM::MdtReadoutElement::globalToLocalTransf ( const int tubeLayer,
const int tube ) const

Definition at line 423 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

423 {
424 return transform(tubeLayer, tube).inverse();
425 }

◆ globalTransform()

Amg::Transform3D MuonGM::MdtReadoutElement::globalTransform ( const Amg::Vector3D & tubePos,
const Amg::Transform3D & toDeform ) const
private

Definition at line 414 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

414 {
415 return transform() * tubeToMultilayerTransf(tubePos, toDeform);
416 }
Amg::Transform3D tubeToMultilayerTransf(const Identifier &id) const
Amg::Vector3D tubePos(const Identifier &id) const
Returns the global position of the given tube.

◆ hasCutouts()

bool MuonGM::MuonReadoutElement::hasCutouts ( ) const
inlineinherited

◆ identify()

Identifier MuonGM::MuonReadoutElement::identify ( ) const
inlinefinaloverridevirtualinherited

Returns the ATLAS Identifier of the MuonReadOutElement.

Usually the Identifier corresponds to the first channel covered by the Element

Implements Trk::TrkDetElementBase.

Definition at line 173 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h.

173{ return m_id; }

◆ identifyHash()

IdentifierHash MuonGM::MuonReadoutElement::identifyHash ( ) const
inlinefinaloverridevirtualinherited

Returns the IdentifierHash of the MuonStation, i.e.

2 readoutelements with same sationIndex, stationEta, stationPhi have the same identifiyHash

Implements Trk::TrkDetElementBase.

Definition at line 174 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h.

174{ return m_idhash; }

◆ idHelperSvc()

const Muon::IMuonIdHelperSvc * MuonGM::MuonReadoutElement::idHelperSvc ( ) const
inlineinherited

◆ initMessaging()

void AthMessaging::initMessaging ( ) const
privateinherited

Initialize our message level and MessageSvc.

This method should only be called once.

Definition at line 39 of file AthMessaging.cxx.

40{
42 // If user did not set an explicit level, set a default
43 if (m_lvl == MSG::NIL) {
44 m_lvl = m_imsg ?
45 static_cast<MSG::Level>( m_imsg.load()->outputLevel(m_nm) ) :
46 MSG::INFO;
47 }
48}
std::string m_nm
Message source name.
std::atomic< IMessageSvc * > m_imsg
MessageSvc pointer.
std::atomic< MSG::Level > m_lvl
Current logging level.
IMessageSvc * getMessageSvc(bool quiet=false)

◆ innerTubeRadius()

double MuonGM::MdtReadoutElement::innerTubeRadius ( ) const

Returns the inner tube radius excluding the aluminium walls.

◆ isAtReadoutSide() [1/2]

int MuonGM::MdtReadoutElement::isAtReadoutSide ( const Amg::Vector3D & GlobalHitPosition,
const Identifier & id ) const

◆ isAtReadoutSide() [2/2]

int MuonGM::MdtReadoutElement::isAtReadoutSide ( const Amg::Vector3D & GlobalHitPosition,
const int tubelayer,
const int tube ) const

Definition at line 206 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

206 {
207 double distance = distanceFromRO(GlobalHitPosition, tubeLayer, tube);
208 if (distance < 0) {
209 ATH_MSG_WARNING( "isAtReadoutSide() - GlobalHitPosition appears to be outside the tube volume " << distance );
210 return 1;
211 } else if (distance <= getWireLength(tubeLayer, tube) / 2.)
212 return 1;
213 else if (distance < getWireLength(tubeLayer, tube))
214 return -1;
215 else {
216 ATH_MSG_WARNING( "isAtReadoutSide() - GlobalHitPosition appears to be outside the tube volume " << distance );
217 return -1;
218 }
219 }
double distanceFromRO(const Amg::Vector3D &GlobalHitPosition, const Identifier &id) const
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space

◆ largeSector()

bool MuonGM::MuonReadoutElement::largeSector ( ) const
inherited

Definition at line 49 of file MuonDetDescr/MuonReadoutGeometry/src/MuonReadoutElement.cxx.

49 {
50 // this doesn't apply to TGC
51 if(m_statname.size() >= 3){
52 char c = m_statname[2];
53 if (c == 'L')
54 return true;
55 else if (c == 'S')
56 return false;
57 else {
58 if (c == 'E' || c == 'F' || c == 'G') return false;
59 if (c == 'M' || c == 'R') return true;
60 }
61 }
62 ATH_MSG_FATAL(__FILE__<<":"<<__LINE__<<" largeSector() - is this station a larger sector answer is no for readout element "<<m_idHelperSvc->toStringDetEl(identify()));
63 throw std::runtime_error("Unknown sector");
64 return false;
65 }
#define ATH_MSG_FATAL(x)

◆ localNominalTubePosWoCutouts()

Amg::Vector3D MuonGM::MdtReadoutElement::localNominalTubePosWoCutouts ( const int tubelayer,
const int tube ) const
private

Definition at line 444 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

444 {
445 double xtube{0.}, ztube{0.};
446 if (barrel()) {
447 xtube = -m_Rsize / 2. + m_firstwire_y[tubeLayer - 1];
448 ztube = -m_Zsize / 2. + m_firstwire_x[tubeLayer - 1] + (tube - 1) * m_tubepitch;
449 } else {
450 xtube = -m_Zsize / 2. + m_firstwire_y[tubeLayer - 1];
451 ztube = -m_Rsize / 2. + m_firstwire_x[tubeLayer - 1] + (tube - 1) * m_tubepitch;
452 }
453 return Amg::Vector3D{xtube, 0., ztube};
454 }

◆ localROPos() [1/2]

Amg::Vector3D MuonGM::MdtReadoutElement::localROPos ( const Identifier & id) const

◆ localROPos() [2/2]

Amg::Vector3D MuonGM::MdtReadoutElement::localROPos ( const int tubelayer,
const int tube ) const

Definition at line 308 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

308 {
309 return tubeToMultilayerTransf(tubeLayer, tube) * tubeFrame_localROPos(tubeLayer, tube);
310 }
Amg::Vector3D tubeFrame_localROPos(const int tubelayer, const int tube) const

◆ localToGlobalTransf() [1/2]

const Amg::Transform3D & MuonGM::MdtReadoutElement::localToGlobalTransf ( const Identifier & id) const

◆ localToGlobalTransf() [2/2]

const Amg::Transform3D & MuonGM::MdtReadoutElement::localToGlobalTransf ( const int tubeLayer,
const int tube ) const

◆ localTubePos() [1/2]

Amg::Vector3D MuonGM::MdtReadoutElement::localTubePos ( const Identifier & id) const

◆ localTubePos() [2/2]

Amg::Vector3D MuonGM::MdtReadoutElement::localTubePos ( const int tubelayer,
const int tube ) const

Definition at line 314 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

314 {
315 return fromIdealToDeformed(tubeLayer, tube) * nodeform_localTubePos(tubeLayer, tube);
316 }
Amg::Vector3D nodeform_localTubePos(const Identifier &id) const
const Amg::Transform3D & fromIdealToDeformed(const int tubelayer, const int tube) const

◆ makeGeoInfo()

MdtReadoutElement::GeoInfo MuonGM::MdtReadoutElement::makeGeoInfo ( const int tubelayer,
const int tube ) const
private

Definition at line 820 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

820 {
821 Amg::Transform3D deformedTrf = deformedTransform(tubeLayer, tube);
822 GeoInfo info{globalTransform(nodeform_localTubePos(tubeLayer, tube), deformedTrf)};
823 info.deformedTrf = std::make_unique<Amg::Transform3D>(std::move(deformedTrf));
824 return info;
825 }
Amg::Transform3D globalTransform(const Amg::Vector3D &tubePos, const Amg::Transform3D &toDeform) const

◆ manager()

const MuonDetectorManager * MuonGM::MuonReadoutElement::manager ( ) const
inlineprotectedinherited

◆ msg() [1/2]

MsgStream & AthMessaging::msg ( ) const
inlineinherited

The standard message stream.

Returns a reference to the default message stream May not be invoked before sysInitialize() has been invoked.

Definition at line 167 of file AthMessaging.h.

168{
169 MsgStream* ms = m_msg_tls.get();
170 if (!ms) {
171 if (!m_initialized.test_and_set()) initMessaging();
172 ms = new MsgStream(m_imsg,m_nm);
173 m_msg_tls.reset( ms );
174 }
175
176 ms->setLevel (m_lvl);
177 return *ms;
178}
boost::thread_specific_ptr< MsgStream > m_msg_tls
MsgStream instance (a std::cout like with print-out levels).
void initMessaging() const
Initialize our message level and MessageSvc.

◆ msg() [2/2]

MsgStream & AthMessaging::msg ( const MSG::Level lvl) const
inlineinherited

The standard message stream.

Returns a reference to the default message stream May not be invoked before sysInitialize() has been invoked.

Definition at line 182 of file AthMessaging.h.

183{ return msg() << lvl; }
MsgStream & msg() const
The standard message stream.

◆ msgLvl()

bool AthMessaging::msgLvl ( const MSG::Level lvl) const
inlineinherited

Test the output level.

Parameters
lvlThe message level to test against
Returns
boolean Indicating if messages at given level will be printed
Return values
trueMessages at level "lvl" will be printed

Definition at line 151 of file AthMessaging.h.

152{
153 // If user did not set explicit message level we have to initialize
154 // the messaging and retrieve the default via the MessageSvc.
155 if (m_lvl==MSG::NIL && !m_initialized.test_and_set()) initMessaging();
156
157 if (m_lvl <= lvl) {
158 msg() << lvl;
159 return true;
160 } else {
161 return false;
162 }
163}

◆ nMDTinStation()

unsigned int MuonGM::MdtReadoutElement::nMDTinStation ( ) const
inline

◆ nodeform_globalToLocalTransf() [1/2]

Amg::Transform3D MuonGM::MdtReadoutElement::nodeform_globalToLocalTransf ( const Identifier & id) const

◆ nodeform_globalToLocalTransf() [2/2]

Amg::Transform3D MuonGM::MdtReadoutElement::nodeform_globalToLocalTransf ( const int tubeLayer,
const int tube ) const

Definition at line 427 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

427 {
428 return nodeform_localToGlobalTransf(tubeLayer, tube).inverse();
429 }
Amg::Transform3D nodeform_localToGlobalTransf(const Identifier &id) const

◆ nodeform_localToGlobalTransf() [1/2]

Amg::Transform3D MuonGM::MdtReadoutElement::nodeform_localToGlobalTransf ( const Identifier & id) const

◆ nodeform_localToGlobalTransf() [2/2]

Amg::Transform3D MuonGM::MdtReadoutElement::nodeform_localToGlobalTransf ( const int tubeLayer,
const int tube ) const

Definition at line 420 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

420 {
421 return globalTransform(nodeform_localTubePos(tubeLayer, tube), Amg::Transform3D::Identity());
422 }

◆ nodeform_localTubePos() [1/2]

Amg::Vector3D MuonGM::MdtReadoutElement::nodeform_localTubePos ( const Identifier & id) const

◆ nodeform_localTubePos() [2/2]

Amg::Vector3D MuonGM::MdtReadoutElement::nodeform_localTubePos ( const int tubelayer,
const int tube ) const

Definition at line 318 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

318 {
319 ATH_MSG_VERBOSE( " Computing LocalTubePos for "<< idHelperSvc()->toStringDetEl(identify())
320 << "/" << tubeLayer << "/" << tube );
321 double xtube{0.}, ytube{0.}, ztube{0.};
322 if (barrel()) {
323 xtube = -m_Rsize / 2. + m_firstwire_y[tubeLayer - 1];
324 ztube = -m_Zsize / 2. + m_firstwire_x[tubeLayer - 1] + (tube - 1) * m_tubepitch;
325 } else {
326 xtube = -m_Zsize / 2. + m_firstwire_y[tubeLayer - 1];
327 ztube = -m_Rsize / 2. + m_firstwire_x[tubeLayer - 1] + (tube - 1) * m_tubepitch;
328 }
329 Amg::Vector3D tubePos{xtube, ytube, ztube};
330 if (hasCutouts()) {
331 if (manager()->MinimalGeoFlag() == 0) {
332 ATH_MSG_DEBUG( " MdtReadoutElement " << idHelperSvc()->toStringDetEl(identify()) << " has cutouts, check for real position of tubes " );
333 PVConstLink cv = getMaterialGeom(); // it is "Multilayer"
334 int nGrandchildren = cv->getNChildVols();
335 // child vol 0 is foam; 1 to (nGrandchildren-1) should be tubes
336 int ii = (tubeLayer - 1) * m_ntubesperlayer + tube;
337
338 // BIS78 only (the BIS7 of Run1/2 has no cutouts, thus, this block won't be reached)
339 if ((getStationIndex() == m_stIdx_BIS && std::abs(getStationEta()) == 7)) --ii;
340 if (m_idHelper.isBMG(identify())) {
341 // usually the tube number corresponds to the child number, however for
342 // BMG chambers full tubes are skipped during the building process
343 // therefore the matching needs to be done via the volume ID
344 int packed_id = tube + maxNTubesPerLayer * tubeLayer;
345 int kk = 0;
346 bool found = false;
347 geoGetIds(
348 [&](int id) {
349 if (!found && id == packed_id) {
350 ii = kk;
351 found = true;
352 }
353 ++kk;
354 },
355 &*cv);
356 if (found) {
357 ATH_MSG_DEBUG( " MdtReadoutElement tube match found for BMG - input : tube(" << tube << "), layer("
358 << tubeLayer << ") - output match : tube(" << ii % maxNTubesPerLayer << "), layer(" << ii / maxNTubesPerLayer
359 << ")" );
360 }
361 }
362 GeoTrf::Transform3D tubeTrans = cv->getXToChildVol(ii);
363 PVConstLink tv = cv->getChildVol(ii);
364 constexpr double maxtol = 0.0000001;
365
366 if (std::abs(xtube - tubeTrans(0, 3)) > maxtol || std::abs(ztube - tubeTrans(2, 3)) > maxtol) {
367 THROW_EXCEPTION(__func__<<"("<<tubeLayer<<","<<tube<<")"<<" - mismatch between local from tube-id/pitch/cutout position"<<
368 Amg::toString(tubePos)<<" and GeoModel "<< Amg::toString(tubeTrans.linear().col(3))<<" for detector element "<<
369 idHelperSvc()->toStringDetEl(identify()) <<"There are "<<nGrandchildren<<" child volumes and "<<
370 (m_ntubesperlayer * m_nlayers)<<" are expected. There should be "<<m_nlayers<<" and "<<
371 m_ntubesperlayer<<" tubes per layer");
372 }
373 if (tubeTrans(1, 3) > maxtol) {
374
375 ATH_MSG_DEBUG( "This a tube with cutout stName/Eta/Phi/ml/tubeLayer/t = " << idHelperSvc()->toStringDetEl(identify())
376 << "/" << tubeLayer << "/" << tube);
377 // check only for tubes actually shifted
378 if (std::abs(m_cutoutShift - tubeTrans(1, 3)) > maxtol) {
379 THROW_EXCEPTION(__func__<<"("<<tubeLayer<<","<<tube<<")"<<" - mismatch between local from tube-id/pitch/cutout position"<<
380 Amg::toString(tubePos)<<" and GeoModel "<< Amg::toString(tubeTrans.linear().col(3))<<" for detector element "<<
381 idHelperSvc()->toStringDetEl(identify()) <<"There are "<<nGrandchildren<<" child volumes and "<<
382 (m_ntubesperlayer * m_nlayers)<<" are expected. There should be "<<m_nlayers<<" and "<<
383 m_ntubesperlayer<<" tubes per layer");
384 }
385 }
386
387 Amg::Vector3D x = tubeTrans.translation();
388 if (tube > m_ntubesperlayer || tubeLayer > m_nlayers) { x = tubePos; }
389 return x;
390 }
391 }
392 return tubePos;
393 }

◆ nodeform_tubePos() [1/2]

Amg::Vector3D MuonGM::MdtReadoutElement::nodeform_tubePos ( const Identifier & id) const

Returns the global position of the tube excluding the B-line & As-built corrections.

◆ nodeform_tubePos() [2/2]

Amg::Vector3D MuonGM::MdtReadoutElement::nodeform_tubePos ( const int tubelayer,
const int tube ) const

Definition at line 395 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

395 {
396 return transform() * nodeform_localTubePos(tubeLayer, tube);
397 }

◆ normal() [1/2]

const Amg::Vector3D & MuonGM::MdtReadoutElement::normal ( ) const
finaloverridevirtual

Return the normal of the element.

Implements Trk::TrkDetElementBase.

Definition at line 868 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

868 {
869 if (!m_elemNormal.isValid()) { m_elemNormal.set(transform().linear() * Amg::Vector3D::UnitX()); }
870 return *m_elemNormal.ptr();
871 }

◆ normal() [2/2]

virtual const Amg::Vector3D & MuonGM::MdtReadoutElement::normal ( const Identifier & id) const
finaloverridevirtual

Return the normal of the surface associated with this identifier In the case of silicon it returns the same as normal().

Implements Trk::TrkDetElementBase.

◆ outerTubeRadius()

double MuonGM::MdtReadoutElement::outerTubeRadius ( ) const

Returns the tube radius taking the thickness of the tubes into account.

◆ parentMuonStation()

const MuonStation * MuonGM::MuonReadoutElement::parentMuonStation ( ) const
inherited

◆ parentMuonStationPos()

Amg::Vector3D MuonGM::MuonReadoutElement::parentMuonStationPos ( ) const
inherited

Definition at line 82 of file MuonDetDescr/MuonReadoutGeometry/src/MuonReadoutElement.cxx.

82 {
83 return parentMuonStation()->getTransform().translation();
84 }

◆ posOnDefChamWire()

Amg::Vector3D MuonGM::MdtReadoutElement::posOnDefChamWire ( const Amg::Vector3D & locAMDBPos,
const double width_narrow,
const double width_wide,
const double height,
const double thickness,
const Amg::Vector3D & fixedPoint ) const
private

Definition at line 596 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

601 {
602
603 using Parameter = BLinePar::Parameter;
604 const double sp = m_BLinePar->getParameter(Parameter::sp);
605 const double sn = m_BLinePar->getParameter(Parameter::sn);
606 const double tw = m_BLinePar->getParameter(Parameter::tw);
607 const double eg = m_BLinePar->getParameter(Parameter::eg);
608 double ep = m_BLinePar->getParameter(Parameter::ep);
609 double en = m_BLinePar->getParameter(Parameter::en);
610 // S.Spagnolo Feb.6, 2011, modified by P.F Giraud, 2015-01-17
611 // This version does not implement deformations modifying only the second
612 // coordinate, or leaving the end-plug positions unchanged.
613 // This version should be called only with the coordinates of the end-plugs
614 // as argument, as is done in fromIdealToDeformed
615
616 // MDT deformations like tube bow: bz,bp,bn bend the tube while the wire endpoints are not affected
617 // => the wire keeps it's nominal straight line trajectory but it is not concentric to the tube
618 // ==> in this function bz, bp and bn are ignored or set to 0
619 // MDT deformations that extend/contract the wire longitudinally (while keeping it straight):
620 // delta_s from eg and tr are irrelevant for the tube geometry
621 // and for the wire trajectory => set to 0 here
622 // (should be applied as a correction to the
623 // tube lenght => tube surface bounds
624 // =++>>>> effect in tracking just through the gravitational sagging TOTALLY NEGLIGIBLE=> ignore)
625 // pg is irrelevant for tracking purposes and (at least for the endcaps) is applies to the internal bars only, not to the tubes !!!
626 // =++>>>> IGNORE IT
627 // ep,en: bend the tube by moving (differently) the endplugs ===> the wire straight trajectory is moved w.r.t. the nominal one
628 // in addition the tubes keep their nominal position at the center => the wire is not concentric to
629 // the tube delta_s from ep,en must also be considered for the implementation of the realistic tube
630 // trajectory induced by ep,en
631 // tw,sp,sn,pg (for deltaT and deltaZ) are geometrical effects, that impact on tracking and keep the wire straight.
632
633
634
635 Amg::Vector3D deformPos(locAMDBPos);
636
637 // NOTE s0,z0,t0 are the coord. in the amdb frame of this point: the origin of the frame can be different than the fixed point for
638 // deformations s0mdt,z0mdt,t0mdt
639 // (always equal to the point at lowest t,z and s=0 of the MDT stack)
640 ATH_MSG_VERBOSE( "** In "<<__func__<<" - moduleWidthS " << moduleWidthS<<", moduleWidthL: "
641 <<moduleWidthL <<", height: "<<height<<", thickness: " <<thickness << "." );
642 ATH_MSG_VERBOSE( "** In "<<__func__<<" - going to correct for B-line the position of Point at " <<Amg::toString(locAMDBPos)
643 << " in the amdb-szt frame" );
644
645 double s0mdt = locAMDBPos.x(); // always I think !
646 if (std::abs(fixedPoint.x()) > 0.01) {
647 s0mdt = locAMDBPos.x() - fixedPoint.x();
648 }
649 double z0mdt = locAMDBPos.y();
650 // unless in the D section of this station there's a dy diff. from 0 for the innermost MDT multilayer (sometimes in the barrel)
651 if (std::abs(fixedPoint.y()) > 0.01) {
652 z0mdt = locAMDBPos.y() - fixedPoint.y();
653 }
654 double t0mdt = locAMDBPos.z();
655 // unless in the D section of this station there's a dz diff. from 0 for the innermost MDT multilayer (often in barrel)
656 if (std::abs(fixedPoint.z()) > 0.01) t0mdt = locAMDBPos.z() - fixedPoint.z();
657 if (z0mdt < 0 || t0mdt < 0) {
658 ATH_MSG_WARNING(""<<__func__<<": correcting the local position of a point outside the mdt station (2 multilayers) volume -- RE "
659 << idHelperSvc()->toStringDetEl(identify()) << " local point: szt=" << Amg::toString(locAMDBPos)
660 << " fixedPoint " <<Amg::toString(fixedPoint) );
661 }
662 ATH_MSG_VERBOSE( "** In "<<__func__<<" - correct for offset of B-line fixed point " << s0mdt << " " << z0mdt << " " << t0mdt);
663
664 double ds{0.},dz{0.},dt{0.};
665 double width_actual = moduleWidthS + (moduleWidthL - moduleWidthS) * (z0mdt / height);
666 double s_rel = s0mdt / (width_actual / 2.);
667 double z_rel = (z0mdt - height / 2.) / (height / 2.);
668 double t_rel = (t0mdt - thickness / 2.) / (thickness / 2.);
669
670 ATH_MSG_VERBOSE( "** In "<<__func__<<" - width_actual: "<<width_actual<<", s_rel: "<<s_rel<<", z_rel: "
671 <<z_rel<<", t_rel: "<<t_rel);
672
673 // sp, sn - cross plate sag out of plane
674 if ((sp != 0) || (sn != 0)) {
675 double ztmp = z_rel * z_rel - 1;
676 dt += 0.5 * (sp + sn) * ztmp + 0.5 * (sp - sn) * ztmp * s_rel;
677 }
678
679 // tw - twist
680 if (tw != 0) {
681 dt -= tw * s_rel * z_rel;
682 dz += tw * s_rel * t_rel * thickness / height;
683 ATH_MSG_VERBOSE( "** In "<<__func__<<": tw=" << tw << " dt, dz " << dt << " " << dz );
684 }
685
686 // eg - global expansion
687 if (eg != 0) {
688 double egppm = eg / 1000.;
689 ds += 0.;
690 dz += z0mdt * egppm;
691 dt += t0mdt * egppm;
692 }
693
694 // ep, en - local expansion
695 //
696 // Imporant note: the chamber height and length, as they denoted in Christoph's talk,
697 // correspond to thickness and height parameters of this function;
698 //
699
700 if ((ep != 0) || (en != 0)) {
701 ep = ep / 1000.;
702 en = en / 1000.;
703 double phi = 0.5 * (ep + en) * s_rel * s_rel + 0.5 * (ep - en) * s_rel;
704 double localDt = phi * (t0mdt - thickness / 2.);
705 double localDz = phi * (z0mdt - height / 2.);
706 dt += localDt;
707 dz += localDz;
708 }
709
710 ATH_MSG_VERBOSE( "posOnDefChamStraighWire: ds,z,t = " << ds << " " << dz << " " << dt );
711 deformPos[0] = locAMDBPos[0] + ds;
712 deformPos[1] = locAMDBPos[1] + dz;
713 deformPos[2] = locAMDBPos[2] + dt;
714
715 return deformPos;
716 }
Scalar phi() const
phi method
static Double_t sp

◆ refreshCache()

void MuonGM::MuonReadoutElement::refreshCache ( )
inherited

Definition at line 122 of file MuonDetDescr/MuonReadoutGeometry/src/MuonReadoutElement.cxx.

122 {
123 clearCache();
124 fillCache();
125 }
virtual void fillCache()=0
virtual void clearCache()=0

◆ RODistanceFromTubeCentre() [1/2]

double MuonGM::MdtReadoutElement::RODistanceFromTubeCentre ( const Identifier & id) const

◆ RODistanceFromTubeCentre() [2/2]

double MuonGM::MdtReadoutElement::RODistanceFromTubeCentre ( const int tubeLayer,
const int tube ) const

Definition at line 220 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

220 {
221 return getWireLength(tubeLayer, tube) / 2.;
222 }

◆ ROPos() [1/2]

Amg::Vector3D MuonGM::MdtReadoutElement::ROPos ( const Identifier & id) const

◆ ROPos() [2/2]

Amg::Vector3D MuonGM::MdtReadoutElement::ROPos ( const int tubelayer,
const int tube ) const

Definition at line 311 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

311 {
312 return transform(tubeLayer, tube) * tubeFrame_localROPos(tubeLayer, tube);
313 }

◆ setBLinePar()

void MuonGM::MdtReadoutElement::setBLinePar ( const BLinePar * bLine)

Definition at line 886 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

886 {
887 ATH_MSG_DEBUG( "Setting B-line for " << idHelperSvc()->toStringDetEl(identify()) );
888 if (m_BLinePar == bLine) {
889 return;
890 }
891 m_BLinePar = bLine;
892 refreshCache();
893 }

◆ setHasCutouts()

void MuonGM::MuonReadoutElement::setHasCutouts ( bool flag)
inlineinherited

◆ setIdentifier()

void MuonGM::MuonReadoutElement::setIdentifier ( const Identifier & id)
inherited

Sets the Identifier, hashes & station names.

Definition at line 101 of file MuonDetDescr/MuonReadoutGeometry/src/MuonReadoutElement.cxx.

101 {
102 m_id = id;
103 if (!m_idHelperSvc->isMuon(id)) {
104 ATH_MSG_FATAL("The Identifier "<<m_idHelperSvc->toString(id)<<" is not a muon one.");
105 throw std::runtime_error("Invalid Identifier set");
106 }
107 m_stIdx = m_idHelperSvc->stationName(id);
108 m_eta = m_idHelperSvc->stationEta(id);
109 m_phi = m_idHelperSvc->stationPhi(id);
110 m_idhash = m_idHelperSvc->moduleHash(id);
111 m_detectorElIdhash = m_idHelperSvc->detElementHash(id);
112 }

◆ setLevel()

void AthMessaging::setLevel ( MSG::Level lvl)
inherited

Change the current logging level.

Use this rather than msg().setLevel() for proper operation with MT.

Definition at line 28 of file AthMessaging.cxx.

29{
30 m_lvl = lvl;
31}

◆ setLongRsize()

void MuonGM::MuonReadoutElement::setLongRsize ( double v)
inherited

◆ setLongSsize()

void MuonGM::MuonReadoutElement::setLongSsize ( double v)
inherited

◆ setLongZsize()

void MuonGM::MuonReadoutElement::setLongZsize ( double v)
inherited

◆ setMultilayer()

void MuonGM::MdtReadoutElement::setMultilayer ( const int ml)

◆ setNLayers()

void MuonGM::MdtReadoutElement::setNLayers ( const int nl)

Sets the number of layers.

Definition at line 68 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

68{ m_nlayers = nl; }

◆ setNMdtInStation()

void MuonGM::MdtReadoutElement::setNMdtInStation ( unsigned int numMdt)
inline

◆ setParentMuonStation()

void MuonGM::MuonReadoutElement::setParentMuonStation ( const MuonStation * mstat)
inherited

Definition at line 76 of file MuonDetDescr/MuonReadoutGeometry/src/MuonReadoutElement.cxx.

76 {
77 m_parentMuonStation = mstat;
78 }

◆ setRsize()

void MuonGM::MuonReadoutElement::setRsize ( double v)
inherited

◆ setSsize()

void MuonGM::MuonReadoutElement::setSsize ( double v)
inherited

◆ setStationName()

void MuonGM::MuonReadoutElement::setStationName ( const std::string & str)
inherited

◆ setStationS()

void MuonGM::MuonReadoutElement::setStationS ( double v)
inherited

◆ setTechnologyName()

void MuonGM::MuonReadoutElement::setTechnologyName ( const std::string & str)
inherited

◆ setZsize()

void MuonGM::MuonReadoutElement::setZsize ( double v)
inherited

◆ sideA()

bool MuonGM::MuonReadoutElement::sideA ( ) const
inlineinherited

◆ sideC()

bool MuonGM::MuonReadoutElement::sideC ( ) const
inlineinherited

◆ signedRODistanceFromTubeCentre() [1/2]

double MuonGM::MdtReadoutElement::signedRODistanceFromTubeCentre ( const Identifier & id) const

◆ signedRODistanceFromTubeCentre() [2/2]

double MuonGM::MdtReadoutElement::signedRODistanceFromTubeCentre ( const int tubeLayer,
const int tube ) const

Definition at line 223 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

223 {
224 // it is a signed quantity:
225 // the sign corresponds to the sign of the z coordinate of the RO endplug in the tube
226 // reference frame
227 int amdb_plus_minus1 = 1;
228 if (!m_zsignRO_tubeFrame.isValid()) {
229 const MuonStation* ms = parentMuonStation();
230 if (std::abs(ms->xAmdbCRO()) > 10.) {
231 Amg::Vector3D tem = ms->xAmdbCRO()* Amg::Vector3D::UnitX();
232 Amg::Transform3D amdbToGlobal{ms->getAmdbLRSToGlobal()};
233 Amg::Vector3D temGlo = amdbToGlobal * tem;
234 Amg::Vector3D ROtubeFrame = nodeform_globalToLocalTransf(tubeLayer, tube) * temGlo;
235 if (ROtubeFrame.z() < 0)
236 m_zsignRO_tubeFrame.set(-1);
237 else
238 m_zsignRO_tubeFrame.set(1);
239 }
240 }
241 // if no CRO in a chamber in AMDB (BIS in layout R), use the standard convention for RO-HV side
242 if (!m_zsignRO_tubeFrame.isValid()) {
243 int sign = 0;
244 if (barrel()) {
245 if (sideA()) {
246 if (largeSector())
247 sign = -1;
248 else
249 sign = 1;
250 } else {
251 if (largeSector())
252 sign = 1;
253 else
254 sign = -1;
255 }
256 // a special case is BIS in sector 12
257 if (getStationName().substr(0, 3) == "BIS" && getStationPhi() == 6) sign = -sign;
258 } else {
259 if (sideA()) {
260 if (largeSector())
261 sign = 1;
262 else
263 sign = -1;
264 } else {
265 if (largeSector())
266 sign = -1;
267 else
268 sign = 1;
269 }
270 }
272 }
273 amdb_plus_minus1 = *m_zsignRO_tubeFrame.ptr();
274 if (amdb_plus_minus1 == 0) {
275 ATH_MSG_WARNING( "Unable to get the sign of RO side; signedRODistancefromTubeCenter returns 0" );
276 }
277
278 return amdb_plus_minus1 * getWireLength(tubeLayer, tube) / 2.;
279 }
int sign(int a)
Amg::Transform3D nodeform_globalToLocalTransf(const Identifier &id) const

◆ smallSector()

bool MuonGM::MuonReadoutElement::smallSector ( ) const
inherited

Definition at line 67 of file MuonDetDescr/MuonReadoutGeometry/src/MuonReadoutElement.cxx.

67 {
68 // this doesn't apply to TGC
69 return (!largeSector());
70 }

◆ surface() [1/3]

const Trk::Surface & MuonGM::MdtReadoutElement::surface ( ) const
finaloverridevirtual

Return surface associated with this detector element.

Implements Trk::TrkDetElementBase.

Definition at line 873 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

873 {
874 assert(m_associatedSurface != nullptr);
875 return *m_associatedSurface;
876 }

◆ surface() [2/3]

virtual const Trk::StraightLineSurface & MuonGM::MdtReadoutElement::surface ( const Identifier & id) const
finaloverridevirtual

Return surface associated with this identifier, which should come from the PrepRawData object (i.e.

Surface s = PRD.detElement().surface( PRD.identify() ). This is only really relevant for the TRT (where there are several surfaces per detector element). For other detector elements it will just return surface() ... the Identifier is ignored.

Implements Trk::TrkDetElementBase.

◆ surface() [3/3]

const Trk::StraightLineSurface & MuonGM::MdtReadoutElement::surface ( const int tubeLayer,
const int tube ) const

Definition at line 848 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

848 {
849 int ntot_tubes = m_nlayers * m_ntubesperlayer;
850 int itube = (tubeLayer - 1) * m_ntubesperlayer + tube - 1;
851 // consistency checks
852 if (itube >= ntot_tubes) {
853 ATH_MSG_WARNING( "surface called with tubeLayer or tube out of range in chamber "
854 << idHelperSvc()->toStringDetEl(identify()) << " : layer " << tubeLayer << " max " << m_nlayers << " tube " << tube
855 << " max " << m_ntubesperlayer << " will compute surface for first tube in this chamber" );
856 ATH_MSG_WARNING( "Please run in DEBUG mode to get extra diagnostic" );
857 itube = 0;
858 }
859 assert(m_tubeSurfaces.at(itube) != nullptr);
860 return *m_tubeSurfaces.at(itube);
861 }

◆ surfaces()

std::vector< const Trk::Surface * > MuonGM::MdtReadoutElement::surfaces ( ) const

returns all the surfaces contained in this detector element

Definition at line 70 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

70 {
71 std::vector<const Trk::Surface*> elementSurfaces;
72 elementSurfaces.reserve(m_tubeSurfaces.size() + 1);
73 if (m_associatedSurface) { elementSurfaces.push_back(m_associatedSurface.get()); }
74 for (const auto& s : m_tubeSurfaces) {
75 if (s) elementSurfaces.push_back(s.get());
76 }
77 return elementSurfaces;
78 }

◆ toParentStation()

Amg::Transform3D MuonGM::MuonReadoutElement::toParentStation ( ) const
inherited

Definition at line 72 of file MuonDetDescr/MuonReadoutGeometry/src/MuonReadoutElement.cxx.

72 {
73 return getMaterialGeom()->getX();
74 }

◆ transform() [1/3]

virtual const Amg::Transform3D & MuonGM::MdtReadoutElement::transform ( ) const
finaloverridevirtual

Return local to global transform.

Implements Trk::TrkDetElementBase.

◆ transform() [2/3]

virtual const Amg::Transform3D & MuonGM::MdtReadoutElement::transform ( const Identifier & id) const
finaloverridevirtual

Return local to global transform associated with this identifier.

Implements Trk::TrkDetElementBase.

◆ transform() [3/3]

const Amg::Transform3D & MuonGM::MdtReadoutElement::transform ( const int tubeLayer,
const int tube ) const

Definition at line 839 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

839 {
840 const GeoInfo& info{geoInfo(tubeLayer, tube)};
841 if (!info.isValid) {
842 THROW_EXCEPTION("There is no transform cached for tubeLayer: "<<tubeLayer
843 <<", tube: "<<tube<<" in "<<idHelperSvc()->toStringDetEl(identify()));
844 }
845 return info.m_transform;
846 }

◆ tubeFrame_localROPos() [1/2]

Amg::Vector3D MuonGM::MdtReadoutElement::tubeFrame_localROPos ( const Identifier & id) const

◆ tubeFrame_localROPos() [2/2]

Amg::Vector3D MuonGM::MdtReadoutElement::tubeFrame_localROPos ( const int tubelayer,
const int tube ) const

Definition at line 305 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

305 {
306 return signedRODistanceFromTubeCentre(tubeLayer, tube) * Amg::Vector3D::UnitZ();
307 }
double signedRODistanceFromTubeCentre(const Identifier &id) const

◆ tubeLength() [1/2]

double MuonGM::MdtReadoutElement::tubeLength ( const Identifier & id) const

◆ tubeLength() [2/2]

double MuonGM::MdtReadoutElement::tubeLength ( const int tubeLayer,
const int tube ) const

◆ tubePitch()

double MuonGM::MdtReadoutElement::tubePitch ( ) const

Returns the distance between 2 tubes in a tube layer.

◆ tubePos() [1/2]

Amg::Vector3D MuonGM::MdtReadoutElement::tubePos ( const Identifier & id) const

Returns the global position of the given tube.

◆ tubePos() [2/2]

Amg::Vector3D MuonGM::MdtReadoutElement::tubePos ( const int tubelayer,
const int tube ) const

Definition at line 398 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

398 {
399 return transform() * localTubePos(tubeLayer, tube);
400 }
Amg::Vector3D localTubePos(const Identifier &id) const

◆ tubeToMultilayerTransf() [1/3]

Amg::Transform3D MuonGM::MdtReadoutElement::tubeToMultilayerTransf ( const Amg::Vector3D & tubePos,
const Amg::Transform3D & toDeform )
staticprivate

Definition at line 417 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

417 {
418 return toDeform * Amg::Translation3D{tubePos} * Amg::getRotateX3D(90. * CLHEP::deg);
419 }
Amg::Transform3D getRotateX3D(double angle)
get a rotation transformation around X-axis
Eigen::Translation< double, 3 > Translation3D

◆ tubeToMultilayerTransf() [2/3]

Amg::Transform3D MuonGM::MdtReadoutElement::tubeToMultilayerTransf ( const Identifier & id) const

◆ tubeToMultilayerTransf() [3/3]

Amg::Transform3D MuonGM::MdtReadoutElement::tubeToMultilayerTransf ( const int tubeLayer,
const int tube ) const

Definition at line 401 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

401 {
402 return tubeToMultilayerTransf(nodeform_localTubePos(tubeLayer, tube),
403 fromIdealToDeformed(tubeLayer, tube));
404 }

◆ wireEndpointsAsBuilt()

void MuonGM::MdtReadoutElement::wireEndpointsAsBuilt ( Amg::Vector3D & locAMDBWireEndP,
Amg::Vector3D & locAMDBWireEndN,
const int tubelayer,
const int tube ) const
private

Definition at line 730 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

731 {
732 const MdtAsBuiltPar* params = parentMuonStation()->getMdtAsBuiltParams();
733 if (!params) {
734 ATH_MSG_WARNING( "Cannot find Mdt AsBuilt parameters for chamber " << idHelperSvc()->toStringDetEl(identify()) );
735 return;
736 }
737
738 ATH_MSG_VERBOSE( "Applying as-built parameters for chamber " << idHelperSvc()->toStringDetEl(identify())
739 << " tubeLayer=" << tubeLayer << " tube=" << tube);
740
741 constexpr int nsid = 2;
742 using tubeSide_t = MdtAsBuiltPar::tubeSide_t;
743 using multilayer_t = MdtAsBuiltPar::multilayer_t;
744 std::array<MdtAsBuiltPar::tubeSide_t, nsid> tubeSide{tubeSide_t::POS, tubeSide_t::NEG};
745 std::array<Amg::Vector3D, nsid> wireEnd{locAMDBWireEndP, locAMDBWireEndN};
746 multilayer_t ml = (getMultilayer() == 1) ? multilayer_t::ML1 : multilayer_t::ML2;
747
748 const double xmin = *std::min_element(m_firstwire_x.begin(), m_firstwire_x.begin() + m_nlayers) - outerTubeRadius();
749 const int ref_layer = (ml == multilayer_t::ML1) ? m_nlayers : 1;
750 const double y_offset = (ml == multilayer_t::ML1) ? outerTubeRadius() : -outerTubeRadius();
751
752 for (int isid = 0; isid < nsid; ++isid) { // first s>0 then s<0
753 // Compute the reference for the as-built parameters
754 double xref{0.}, yref{0.}, zref{0.};
755 if (barrel()) {
756 xref = -m_Rsize / 2. + m_firstwire_y[ref_layer - 1] + y_offset;
757 zref = -m_Zsize / 2. + xmin;
758 } else {
759 xref = -m_Zsize / 2. + m_firstwire_y[ref_layer - 1] + y_offset;
760 zref = -m_Rsize / 2. + xmin;
761 }
763 Amg::Vector3D reference_point{xref, yref, zref};
764
765 reference_point = toAMDB * reference_point;
766
767 if (isid == 0)
768 reference_point = reference_point + 0.5 * getNominalTubeLengthWoCutouts(ref_layer, 1) * Amg::Vector3D::UnitX();
769 else
770 reference_point = reference_point -0.5 * getNominalTubeLengthWoCutouts(ref_layer, 1) * Amg::Vector3D::UnitX();
771
772 ATH_MSG_VERBOSE("AMDB transform "<<idHelperSvc()->toStringDetEl(identify())<<
773 " "<<GeoTrf::toString(toAMDB, true)<<", reference point: "<<Amg::toString(reference_point));
774
775 int layer_delta = tubeLayer;
776 if (ml == multilayer_t::ML1) layer_delta = m_nlayers + 1 - tubeLayer;
777
778 // Get the As-Built parameters for this ML and side of the chamber
779 double zpitch = params->zpitch(ml, tubeSide[isid]);
780 double ypitch = params->ypitch(ml, tubeSide[isid]);
781 double stagg = (double)params->stagg(ml, tubeSide[isid]);
782 double alpha = params->alpha(ml, tubeSide[isid]);
783 double y0 = params->y0(ml, tubeSide[isid]);
784 double z0 = params->z0(ml, tubeSide[isid]);
785
786 // Find the vector from the reference_point to the endplug
787 int do_stagg = (layer_delta - 1) % 2; // 0 for layer 1 and 3, 1 for layer 2 and 4
788 double offset_stagg = ((double)do_stagg) * 0.5 * zpitch * stagg;
789 Amg::Vector3D end_plug(0., (tube - 1.0) * zpitch + offset_stagg, (layer_delta - 1) * ypitch);
790
791 const Amg::Transform3D amgTransf{Amg::getRotateX3D(-alpha)};
792 end_plug = amgTransf * end_plug;
793
794 // Calculate x position, which varies for endcap chambers
795 double xshift = 0.;
796 if (isid == 0)
797 xshift = 0.5 * getNominalTubeLengthWoCutouts(tubeLayer, tube) - 0.5 * getNominalTubeLengthWoCutouts(ref_layer, 1);
798 else
799 xshift = -0.5 * getNominalTubeLengthWoCutouts(tubeLayer, tube) + 0.5 * getNominalTubeLengthWoCutouts(ref_layer, 1);
800
801 Amg::Vector3D ret(reference_point.x() + xshift, reference_point.y() + z0 + end_plug.y(),
802 reference_point.z() + y0 + end_plug.z());
803
804 // Warn if result of calculation is too far off
805 // BIL1A13 has as-built parameters up to 3mm off, giving the size of the cut
806 if ((ret - wireEnd[isid]).mag() > 3. * CLHEP::mm) {
807 ATH_MSG_WARNING( "Large as-built correction for chamber " << idHelperSvc()->toStringDetEl(identify()) << ", side "
808 << isid << ", Delta " << Amg::toString(ret - wireEnd[isid]) );
809 }
810 ATH_MSG_VERBOSE(( tubeSide[isid] == tubeSide_t::POS ? "positive" : "negative")<<" wire end has moved from "
811 <<Amg::toString(wireEnd[isid])<<" to "<<Amg::toString(ret));
812
813 // Save the result
814 if (tubeSide[isid] == tubeSide_t::POS)
815 locAMDBWireEndP = ret;
816 else
817 locAMDBWireEndN = ret;
818 }
819 }
Scalar mag() const
mag method
multilayer_t
MDT multi-layer index.
tubeSide_t
MDT tube side.
const MdtAsBuiltPar * getMdtAsBuiltParams() const
double xmin
Definition listroot.cxx:60

◆ MuonChamber

friend class MuonChamber
friend

◆ MuonChamberLite

friend class MuonChamberLite
friend

◆ MuonGMR4::ReadoutGeomCnvAlg

Member Data Documentation

◆ ATLAS_THREAD_SAFE

std::atomic_flag m_initialized AthMessaging::ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT
mutableprivateinherited

Messaging initialized (initMessaging).

Definition at line 141 of file AthMessaging.h.

◆ m_associatedBounds

std::shared_ptr<Trk::SurfaceBounds> MuonGM::MdtReadoutElement::m_associatedBounds {}
private

◆ m_associatedSurface

std::unique_ptr<Trk::Surface> MuonGM::MdtReadoutElement::m_associatedSurface {}
private

◆ m_BLinePar

const BLinePar* MuonGM::MdtReadoutElement::m_BLinePar {nullptr}
private

◆ m_builtFromCnv

bool MuonGM::MdtReadoutElement::m_builtFromCnv {false}
private

Flag indicating whether the RE is built by the ReadoutGeomCnvAlg.

Definition at line 272 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h.

272{false};

◆ m_caching

int MuonGM::MuonReadoutElement::m_caching {-1}
protectedinherited

0 if we want to avoid caching geometry info for tracking interface

Definition at line 150 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h.

150{-1};

◆ m_cutoutShift

double MuonGM::MdtReadoutElement::m_cutoutShift {-9999.}
private

◆ m_deadlength

double MuonGM::MdtReadoutElement::m_deadlength {-9999.}
private

◆ m_detectorElIdhash

IdentifierHash MuonGM::MuonReadoutElement::m_detectorElIdhash {0}
privateinherited

detector element hash identifier

Definition at line 159 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h.

159{0};

◆ m_elemNormal

CxxUtils::CachedValue<Amg::Vector3D> MuonGM::MdtReadoutElement::m_elemNormal {}
private

◆ m_endpluglength

double MuonGM::MdtReadoutElement::m_endpluglength {-9999.}
private

◆ m_eta

int MuonGM::MuonReadoutElement::m_eta {-1}
privateinherited

Identifier field of the station eta.

Definition at line 165 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h.

165{-1};

◆ m_firstwire_x

std::array<double, maxnlayers> MuonGM::MdtReadoutElement::m_firstwire_x {make_array<double, maxnlayers>(-9999.)}
private

Definition at line 232 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h.

constexpr std::array< T, N > make_array(const T &def_val)
Helper function to initialize in-place arrays with non-zero values.
Definition ArrayHelper.h:10

◆ m_firstwire_y

std::array<double, maxnlayers> MuonGM::MdtReadoutElement::m_firstwire_y {make_array<double, maxnlayers>(-9999.)}
private

◆ m_hasCutouts

bool MuonGM::MuonReadoutElement::m_hasCutouts {false}
protectedinherited

true is there are cutouts in the readdout-element

Definition at line 152 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h.

152{false};

◆ m_id

Identifier MuonGM::MuonReadoutElement::m_id {}
privateinherited

extended data-collection identifier

Definition at line 157 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h.

157{};

◆ m_idhash

IdentifierHash MuonGM::MuonReadoutElement::m_idhash {0}
privateinherited

data-collection hash identifier

Definition at line 158 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h.

158{0};

◆ m_idHelper

const MdtIdHelper& MuonGM::MdtReadoutElement::m_idHelper {idHelperSvc()->mdtIdHelper()}
private

Definition at line 214 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h.

virtual const MdtIdHelper & mdtIdHelper() const =0
access to MdtIdHelper

◆ m_idHelperSvc

ServiceHandle<Muon::IMuonIdHelperSvc> MuonGM::MuonReadoutElement::m_idHelperSvc {"Muon::MuonIdHelperSvc/MuonIdHelperSvc", "MuonDetectorManager"}
privateinherited

Definition at line 155 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h.

155{"Muon::MuonIdHelperSvc/MuonIdHelperSvc", "MuonDetectorManager"};

◆ m_imsg

std::atomic<IMessageSvc*> AthMessaging::m_imsg { nullptr }
mutableprivateinherited

MessageSvc pointer.

Definition at line 135 of file AthMessaging.h.

135{ nullptr };

◆ m_inBarrel

bool MuonGM::MdtReadoutElement::m_inBarrel {false}
private

◆ m_innerRadius

double MuonGM::MdtReadoutElement::m_innerRadius {-9999.}
private

◆ m_LongRsize

double MuonGM::MuonReadoutElement::m_LongRsize {-9999.}
protectedinherited

◆ m_LongSsize

double MuonGM::MuonReadoutElement::m_LongSsize {-9999.}
protectedinherited

◆ m_LongZsize

double MuonGM::MuonReadoutElement::m_LongZsize {-9999.}
protectedinherited

size in the specified direction

Definition at line 142 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h.

142{-9999.};

◆ m_lvl

std::atomic<MSG::Level> AthMessaging::m_lvl { MSG::NIL }
mutableprivateinherited

Current logging level.

Definition at line 138 of file AthMessaging.h.

138{ MSG::NIL };

◆ m_msg_tls

boost::thread_specific_ptr<MsgStream> AthMessaging::m_msg_tls
mutableprivateinherited

MsgStream instance (a std::cout like with print-out levels).

Definition at line 132 of file AthMessaging.h.

◆ m_multilayer

int MuonGM::MdtReadoutElement::m_multilayer {0}
private

◆ m_muon_mgr

MuonDetectorManager* MuonGM::MuonReadoutElement::m_muon_mgr {nullptr}
privateinherited

◆ m_nlayers

int MuonGM::MdtReadoutElement::m_nlayers {-1}
private

◆ m_nm

std::string AthMessaging::m_nm
privateinherited

Message source name.

Definition at line 129 of file AthMessaging.h.

◆ m_nMDTinStation

unsigned int MuonGM::MdtReadoutElement::m_nMDTinStation {0}
private

◆ m_nsteps

int MuonGM::MdtReadoutElement::m_nsteps {-1}
private

◆ m_ntubesinastep

int MuonGM::MdtReadoutElement::m_ntubesinastep {-1}
private

◆ m_ntubesperlayer

int MuonGM::MdtReadoutElement::m_ntubesperlayer {-1}
private

◆ m_parentMuonStation

const MuonStation* MuonGM::MuonReadoutElement::m_parentMuonStation {nullptr}
privateinherited

◆ m_phi

int MuonGM::MuonReadoutElement::m_phi {-1}
privateinherited

Identifier field of the station phi.

Definition at line 167 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h.

167{-1};

◆ m_Rsize

double MuonGM::MuonReadoutElement::m_Rsize {-9999.}
protectedinherited

◆ m_Ssize

double MuonGM::MuonReadoutElement::m_Ssize {-9999.}
protectedinherited

◆ m_stationS

double MuonGM::MuonReadoutElement::m_stationS {0.}
privateinherited

◆ m_statname

std::string MuonGM::MuonReadoutElement::m_statname {"XXX0"}
protectedinherited

examples are BMS5, CSS1, EML1

Definition at line 148 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h.

148{"XXX0"};

◆ m_stIdx

int MuonGM::MuonReadoutElement::m_stIdx {-1}
privateinherited

Identifier field of the station index.

Definition at line 163 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h.

163{-1};

◆ m_stIdx_BIS

const int MuonGM::MdtReadoutElement::m_stIdx_BIS {m_idHelper.stationNameIndex("BIS")}
private

Definition at line 215 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h.

215{m_idHelper.stationNameIndex("BIS")};

◆ m_stIdx_BOL

const int MuonGM::MdtReadoutElement::m_stIdx_BOL {m_idHelper.stationNameIndex("BOL")}
private

Definition at line 216 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h.

216{m_idHelper.stationNameIndex("BOL")};

◆ m_techname

std::string MuonGM::MuonReadoutElement::m_techname {"TTT0"}
protectedinherited

MDT or RPC or TGC or CSC plus a two digits subtype; example RPC17.

Definition at line 146 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h.

146{"TTT0"};

◆ m_tubeBounds

std::vector<std::unique_ptr<Trk::CylinderBounds> > MuonGM::MdtReadoutElement::m_tubeBounds {}
private

Definition at line 266 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h.

266{}; // one per step in tube-length

◆ m_tubeGeo

std::vector<GeoInfo> MuonGM::MdtReadoutElement::m_tubeGeo {}
private

Definition at line 261 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h.

261{}; // one per tube

◆ m_tubelayerpitch

double MuonGM::MdtReadoutElement::m_tubelayerpitch {-9999.}
private

◆ m_tubelength

std::array<double, maxnsteps> MuonGM::MdtReadoutElement::m_tubelength {make_array<double, maxnsteps>(-9999.)}
private

◆ m_tubelenStepSize

double MuonGM::MdtReadoutElement::m_tubelenStepSize {-9999.}
private

◆ m_tubepitch

double MuonGM::MdtReadoutElement::m_tubepitch {-9999.}
private

◆ m_tubeSurfaces

std::vector<std::unique_ptr<Trk::StraightLineSurface> > MuonGM::MdtReadoutElement::m_tubeSurfaces {}
private

Definition at line 265 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h.

265{}; // one per tube

◆ m_tubeWallThickness

double MuonGM::MdtReadoutElement::m_tubeWallThickness {-9999.}
private

◆ m_type

◆ m_zsignRO_tubeFrame

CxxUtils::CachedValue<int> MuonGM::MdtReadoutElement::m_zsignRO_tubeFrame {}
private

Definition at line 236 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h.

236{}; // comes from AMDB CRO location in the station

◆ m_Zsize

double MuonGM::MuonReadoutElement::m_Zsize {-9999.}
protectedinherited

The documentation for this class was generated from the following files: