Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Classes | Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Static Private Member Functions | Private Attributes | Friends | List of all members
MuonGM::MdtReadoutElement Class Referencefinal

#include <MdtReadoutElement.h>

Inheritance diagram for MuonGM::MdtReadoutElement:
Collaboration 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. More...
 
void setNMdtInStation (unsigned int numMdt)
 
bool barrel () const
 Returns whether the chamber is in the barrel (Assement on first later in stationName) More...
 
bool endcap () const
 Returns whether the chamber is in the endcap. More...
 
int getMultilayer () const
 Returns the multilayer represented by the readout element. More...
 
int getNLayers () const
 Returns the number of tube layers inside the multilayer. More...
 
int getNtubesperlayer () const
 Returns the number of tubes in each tube layer. More...
 
int getNtubesinastep () const
 Returns the number of tubes in the endcap trapezoid sharing the same length. More...
 
void setMultilayer (const int ml)
 Sets the multilayer number. More...
 
void setNLayers (const int nl)
 Sets the number of layers. More...
 
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. More...
 
double outerTubeRadius () const
 Returns the tube radius taking the thickness of the tubes into account. More...
 
double tubePitch () const
 Returns the distance between 2 tubes in a tube layer. More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
virtual const Trk::StraightLineSurfacesurface (const int tubeLayer, const int tube) const
 
virtual const Trk::SurfaceBoundsbounds () const override final
 Return the boundaries of the element. More...
 
virtual const Trk::CylinderBoundsbounds (const Identifier &id) const override final
 Return the boundaries of the surface associated with this identifier. More...
 
virtual 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. More...
 
virtual const Amg::Transform3Dtransform () const override final
 Return local to global transform. More...
 
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() More...
 
virtual const Amg::Vector3Dcenter () const override final
 Return the center of the element. More...
 
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() More...
 
virtual const Amg::Vector3Dnormal () const override final
 Return the normal of the element. More...
 
std::vector< const Trk::Surface * > surfaces () const
 returns all the surfaces contained in this detector element More...
 
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. More...
 
IdentifierHash identifyHash () const override final
 Returns the IdentifierHash of the MuonStation, i.e. More...
 
IdentifierHash detectorElementHash () const
 Returns the IdentifierHash of the detector element. More...
 
void setIdentifier (const Identifier &id)
 Sets the Identifier, hashes & station names. More...
 
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. More...
 
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
 
void setParentStationPV (const PVConstLink &)
 
void setParentStationPV ()
 
PVConstLink parentStationPV () const
 
const MuonStationparentMuonStation () const
 
void setParentMuonStation (const MuonStation *)
 
Amg::Transform3D toParentStation () const
 
Amg::Vector3D parentMuonStationPos () const
 
int getIndexOfREinMuonStation () 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. More...
 
std::string detectorTypeString () const
 Returns a string of the Detector element type. More...
 
bool msgLvl (const MSG::Level lvl) const
 Test the output level. More...
 
MsgStream & msg () const
 The standard message stream. More...
 
MsgStream & msg (const MSG::Level lvl) const
 The standard message stream. More...
 
void setLevel (MSG::Level lvl)
 Change the current logging level. More...
 

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 More...
 
std::string m_techname {"TTT0"}
 MDT or RPC or TGC or CSC plus a two digits subtype; example RPC17. More...
 
std::string m_statname {"XXX0"}
 examples are BMS5, CSS1, EML1 More...
 
int m_caching {-1}
 0 if we want to avoid caching geometry info for tracking interface More...
 
bool m_hasCutouts {false}
 true is there are cutouts in the readdout-element More...
 

Private Member Functions

void geoInitDone ()
 
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
 
std::unique_ptr< GeoInfomakeGeoInfo (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 setIndexOfREinMuonStation ()
 
void initMessaging () const
 Initialize our message level and MessageSvc. More...
 

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< CxxUtils::CachedUniquePtr< GeoInfo > > m_tubeGeo {}
 
std::vector< CxxUtils::CachedUniquePtr< GeoInfo > > m_backupTubeGeo {}
 
std::vector< CxxUtils::CachedUniquePtr< Amg::Transform3D > > m_deformTransf {}
 
const BLineParm_BLinePar {nullptr}
 
CxxUtils::CachedValue< Amg::Vector3Dm_elemNormal {}
 
std::vector< CxxUtils::CachedUniquePtr< Trk::StraightLineSurface > > m_tubeSurfaces {}
 
std::vector< CxxUtils::CachedUniquePtr< Trk::CylinderBounds > > m_tubeBounds {}
 
std::atomic< bool > m_haveTubeSurfaces {false}
 Flag whether any elements have been inserted into the corresponding vectors. More...
 
std::atomic< bool > m_haveTubeGeo {false}
 
std::atomic< bool > m_haveTubeBounds {false}
 
std::atomic< bool > m_haveDeformTransf {false}
 
CxxUtils::CachedUniquePtr< Trk::Surfacem_associatedSurface {}
 
CxxUtils::CachedUniquePtr< Trk::SurfaceBoundsm_associatedBounds {}
 
ServiceHandle< Muon::IMuonIdHelperSvcm_idHelperSvc {"Muon::MuonIdHelperSvc/MuonIdHelperSvc", "MuonDetectorManager"}
 
Trk::DetectorElemType m_type {Trk::DetectorElemType::SolidState}
 
Identifier m_id {0}
 extended data-collection identifier More...
 
IdentifierHash m_idhash {0}
 data-collection hash identifier More...
 
IdentifierHash m_detectorElIdhash {0}
 detector element hash identifier More...
 
int m_indexOfREinMuonStation {-999}
 index of this RE in the mother MuonStation More...
 
double m_stationS {0.}
 
int m_stIdx {-1}
 Identifier field of the station index. More...
 
int m_eta {-1}
 Identifier field of the station eta. More...
 
int m_phi {-1}
 Identifier field of the station phi. More...
 
PVConstLink m_parentStationPV {nullptr}
 
const MuonStationm_parentMuonStation {nullptr}
 
MuonDetectorManagerm_muon_mgr {nullptr}
 
std::string m_nm
 Message source name. More...
 
boost::thread_specific_ptr< MsgStream > m_msg_tls
 MsgStream instance (a std::cout like with print-out levels) More...
 
std::atomic< IMessageSvc * > m_imsg { nullptr }
 MessageSvc pointer. More...
 
std::atomic< MSG::Level > m_lvl { MSG::NIL }
 Current logging level. More...
 
std::atomic_flag m_initialized ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT
 Messaging initialized (initMessaging) More...
 

Friends

class MuonGMR4::ReadoutGeomCnvAlg
 
class MuonChamber
 
class MuonChamberLite
 

Detailed Description

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

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  }

◆ ~MdtReadoutElement()

MuonGM::MdtReadoutElement::~MdtReadoutElement ( )
default

Member Function Documentation

◆ absTransform()

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

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

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

◆ AmdbLRSToGlobalCoords()

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

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

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

142  {
143  return AmdbLRSToGlobalTransform() * x;
144  }

◆ AmdbLRSToGlobalTransform()

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

◆ barrel()

bool MuonGM::MdtReadoutElement::barrel ( ) const

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

◆ bounds() [1/3]

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

Return the boundaries of the element.

Implements Trk::TrkDetElementBase.

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

910  {
911  if (!m_associatedBounds) {
912  if (barrel()) {
913  m_associatedBounds.set(
914  std::make_unique<Trk::RectangleBounds>(getSsize() / 2., getZsize() / 2.));
915  } else {
916  m_associatedBounds.set(std::make_unique<Trk::TrapezoidBounds>(
917  getSsize() / 2., getLongSsize() / 2., getRsize() / 2.));
918  }
919  }
920  return *m_associatedBounds;
921  }

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

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

850  {
851  int istep = 0;
852  int ntot_steps = m_nsteps;
853 
854  if (hasCutouts() && manager()->MinimalGeoFlag() == 0) {
855  ntot_steps = m_nlayers * m_ntubesperlayer;
856  istep = (tubeLayer - 1) * m_ntubesperlayer + tube - 1;
857  } else {
858  if (endcap()) istep = int((tube - 1) / m_ntubesinastep);
859 
860  if (istep < 0 || istep >= ntot_steps) {
861  ATH_MSG_WARNING( "bounds for Element named "<< " with tech. " << getTechnologyType()
862  << " DEid = " << idHelperSvc()->toStringDetEl(identify()) << " called with: tubeL, tube " << tubeLayer << " " << tube
863  << "; step " << istep << " out of range 0-" << m_nsteps - 1 << " m_ntubesinastep " << m_ntubesinastep );
864  ATH_MSG_WARNING( "Please run in DEBUG mode to get extra diagnostic; setting istep = 0" );
865  }
866  }
867  if ((unsigned int)istep >= m_tubeBounds.size()) {
868  THROW_EXCEPTION(__func__<<"("<<tubeLayer<<","<<tube<<") but m_tubeBounds.size()="<<m_tubeBounds.size()<<" for "<<
869  idHelperSvc()->toStringDetEl(identify()));
870  }
872  if (!ptr) {
873  double tubelength = getTubeLengthForCaching(tubeLayer, tube);
874  ptr.set(std::make_unique<Trk::CylinderBounds>(innerTubeRadius(), 0.5 * tubelength - m_deadlength));
875  if (!m_haveTubeBounds) m_haveTubeBounds = true;
876  }
877  return *ptr;
878  }

◆ center() [1/3]

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

Return the center of the element.

Implements Trk::TrkDetElementBase.

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

908 { return surface().center(); }

◆ 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

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

879 { return geoInfo(tubeLayer, tube).m_center; }

◆ clearBLinePar()

void MuonGM::MdtReadoutElement::clearBLinePar ( )

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

69 { m_BLinePar = nullptr; }

◆ clearCache()

void MuonGM::MdtReadoutElement::clearCache ( )
finaloverridevirtual

Implements MuonGM::MuonReadoutElement.

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

922  {
923  ATH_MSG_DEBUG( "Clearing cache for ReadoutElement " << idHelperSvc()->toStringDetEl(identify()) );
924  if (m_associatedSurface) {
925  m_associatedSurface.release();
926  }
927  else ATH_MSG_VERBOSE( "no associated surface to be deleted" );
928 
929  if (m_associatedBounds) {
930  m_associatedBounds.release();
931  } ATH_MSG_VERBOSE( "no associated bounds to be deleted" );
933  if (m_haveTubeSurfaces) {
934  m_haveTubeSurfaces = false;
935  for (auto& s : m_tubeSurfaces) { s.release(); }
936  }
937  if (m_haveTubeGeo) {
938  m_haveTubeGeo = false;
939  for (auto& g : m_tubeGeo) { g.release(); }
940  }
941  if (m_haveTubeBounds) {
942  m_haveTubeBounds = false;
943  for (auto& b : m_tubeBounds) { b.release(); }
944  }
945  // reset here the deform-related transforms
946  if (m_haveDeformTransf) {
947  m_haveDeformTransf = false;
948  for (auto& d : m_deformTransf) { d.release(); }
949  }
950  }

◆ containsId()

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

Implements MuonGM::MuonReadoutElement.

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

1023  {
1024  if (idHelperSvc()->detElId(id) != identify()) return false;
1025  int layer = m_idHelper.tubeLayer(id);
1026  if (layer < 1 || layer > getNLayers()) return false;
1027  int tube = m_idHelper.tube(id);
1028  return tube >= 1 && tube <= getNtubesperlayer();
1029  }

◆ deformedTransform()

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

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

461  {
462 
463  const MuonStation* ms = parentMuonStation();
464  if (!ms->hasBLines() && !ms->hasMdtAsBuiltParams()) {
465  return Amg::Transform3D::Identity();
466  }
467  const Amg::Vector3D fixedPoint = ms->getBlineFixedPointInAmdbLRS();
468 
469  // Chamber parameters
470  double moduleWidthS = m_Ssize;
471  double moduleWidthL = m_LongSsize;
472  double height = barrel() ? ms->ZsizeMdtStation() : ms->RsizeMdtStation();
473  double thickness = barrel() ? ms->RsizeMdtStation() : ms->ZsizeMdtStation();
474 
475  ATH_MSG_VERBOSE("Calculate deformed transform "<<idHelperSvc()->toStringDetEl(identify())
476  <<", layer: "<<tubeLayer<<", tube: "<<tube<<", fixedPoint: "<<Amg::toString(fixedPoint)<<" / "
477  <<Amg::toString(ms->getGeoTransform()->getDefTransform() *ms->getNativeToAmdbLRS().inverse()* fixedPoint)
478  <<", height: "<<height<<", thickness: "<<thickness
479  <<", ideal tube: "<<Amg::toString(localNominalTubePosWoCutouts(tubeLayer,tube)));
480 
481 #ifndef NDEBUG
482  double heightML = barrel() ? m_Zsize : m_Rsize;
483  double thicknessML = barrel() ? m_Rsize : m_Zsize;
484  if (std::abs(height - heightML) > 10.) {
485  ATH_MSG_DEBUG( "RE " << idHelperSvc()->toStringDetEl(identify())
486  << "Different ML and MDTStation length in the precision coord.direction --- MultiLayerHeight, MDTstationHeigh "
487  << heightML << " " << height << " MultiLayerThickness, MDTstationThickness " << thicknessML << " " << thickness);
488  }
489 #endif
490  // Chamber dimension in Z is defined with extraneous glue width. Correct for it
491  double glue = (tubePitch() - 2. * outerTubeRadius());
492  height -= glue;
493 
494  // Calculate transformation from native to AMDB.
495  const Amg::Transform3D toAMDB = ms->getNativeToAmdbLRS() * toParentStation();
496  const Amg::Transform3D fromAMDB = toAMDB.inverse();
497 
498  // Get positions of the wire center and end without deformations
499  Amg::Vector3D pt_center = localNominalTubePosWoCutouts(tubeLayer, tube);
500  double halftubelen = 0.5 * getNominalTubeLengthWoCutouts(tubeLayer, tube);
501 
502  // Compute tube ends in AMDB coordinates
503  Amg::Vector3D pt_end1 = toAMDB * pt_center + halftubelen * Amg::Vector3D::UnitX(); // s>0 side
504  Amg::Vector3D pt_end2 = toAMDB * pt_center - halftubelen * Amg::Vector3D::UnitX(); // s>0 side
505 
506  Amg::Vector3D pt_end1_new = pt_end1;
507  Amg::Vector3D pt_end2_new = pt_end2;
508 
509  // if there are as built parameters ... apply them here
510  if (ms->hasMdtAsBuiltParams()) {
511  wireEndpointsAsBuilt(pt_end1_new, pt_end2_new, tubeLayer, tube);
512  }
513 
514  // if there are deformation parameters ... apply them here
515  if (ms->hasBLines()) {
516 
517  // Get positions after the deformations applied
518  // first wire end point
519  pt_end1_new = posOnDefChamWire(pt_end1_new, moduleWidthS, moduleWidthL, height, thickness, fixedPoint);
520 
521  // second wire end point
522  pt_end2_new = posOnDefChamWire(pt_end2_new, moduleWidthS, moduleWidthL, height, thickness, fixedPoint);
523  }
524 
525  // Switch tube ends back to MGM coordinates
526  pt_end1 = fromAMDB * pt_end1;
527  pt_end2 = fromAMDB * pt_end2;
528  pt_end1_new = fromAMDB * pt_end1_new;
529  pt_end2_new = fromAMDB * pt_end2_new;
530 
531  // Calculate deformation. Make sure that the wire length stays the same.
532  // Code in positionOnDeformedChamber does not provide this by default.
533  // Break transformation into translation of the wire center and the rotation of the wire
534  // Move to the coordinate system originated at the wire center, then rotate the wire, then
535  // move wire center to the new position
536  const Amg::Vector3D pt_center_new = 0.5 * (pt_end1_new + pt_end2_new);
537  const Amg::Transform3D to_center{Amg::getTranslate3D(-pt_center)};
538  const Amg::Transform3D from_center{Amg::getTranslate3D(pt_center_new)};
539  const Amg::Vector3D old_direction = (pt_end2 - pt_end1).unit();
540  const Amg::Vector3D new_direction = (pt_end2_new - pt_end1_new).unit();
541  const Amg::Vector3D rotation_vector = old_direction.cross(new_direction);
542 
543 
544  Amg::Transform3D deformedTransform{Amg::Transform3D::Identity()};
545  if (rotation_vector.mag() > 10. * std::numeric_limits<double>::epsilon()) {
546  const Amg::AngleAxis3D wire_rotation(std::asin(rotation_vector.mag()), rotation_vector.unit());
547  deformedTransform = from_center * wire_rotation * to_center;
548  } else {
549  deformedTransform = from_center * to_center;
550  }
551  ATH_MSG_VERBOSE("To center "<<GeoTrf::toString(to_center)<<" from: "<<GeoTrf::toString(from_center)<<
552  " -- direction: "<<GeoTrf::toString(old_direction)<<" vs. "<<GeoTrf::toString(new_direction)
553  <<" --> rot: "<<GeoTrf::toString(rotation_vector)<<" ==> "<<GeoTrf::toString(deformedTransform,true));
554  return deformedTransform;
555  }

◆ defTransform()

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

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

212 { 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 186 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h.

186 { return m_detectorElIdhash; }

◆ detectorType()

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

Return the Detector element type.

Implements Trk::TrkDetElementBase.

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

138 { return m_type; }

◆ detectorTypeString()

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

Returns a string of the Detector element type.

Definition at line 10 of file TrkDetElementBase.cxx.

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

◆ 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 189 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

189  {
190  // x is given in the global reference frame
191  const Amg::Vector3D cPos = center(tubeLayer, tube);
192  const Amg::Vector3D roPos = ROPos(tubeLayer, tube);
193  const Amg::Vector3D c_ro = cPos - roPos;
194  const Amg::Vector3D x_ro = x - roPos;
195 
196  double scalprod = c_ro.dot(x_ro);
197  double wlen = getWireLength(tubeLayer, tube);
198  if (wlen > 10. * CLHEP::mm)
199  scalprod = std::abs(2. * scalprod / getWireLength(tubeLayer, tube));
200  else {
201  ATH_MSG_WARNING( " Distance of Point " <<Amg::toString(x) << " from RO side cannot be calculated (=0) since wirelength = " << wlen );
202  scalprod = 0.;
203  }
204  return scalprod;
205  }

◆ endcap()

bool MuonGM::MdtReadoutElement::endcap ( ) const

Returns whether the chamber is in the endcap.

◆ fillCache()

void MuonGM::MdtReadoutElement::fillCache ( )
finaloverridevirtual

Implements MuonGM::MuonReadoutElement.

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

961  {
962  ATH_MSG_DEBUG( "Filling cache for ReadoutElement " << idHelperSvc()->toStringDetEl(identify()));
963 
964  const Trk::PlaneSurface* tmpSurface = dynamic_cast<const Trk::PlaneSurface*>(&surface()); //<! filling m_associatedSurface
965  const Trk::SurfaceBounds* tmpBounds = nullptr; //<! filling m_associatedBounds
966  if (barrel())
967  tmpBounds = dynamic_cast<const Trk::RectangleBounds*>(&bounds());
968  else
969  tmpBounds = dynamic_cast<const Trk::TrapezoidBounds*>(&bounds());
970  ATH_MSG_VERBOSE( "global Surface / Bounds pointers " << tmpSurface << " " << tmpBounds );
971  ATH_MSG_VERBOSE( "global Normal " << normal() );
972 
973  const Trk::CylinderBounds* tmpCil = nullptr;
974  const Trk::StraightLineSurface* tmpSaggL = nullptr;
976  Amg::Transform3D myTransform{Amg::Transform3D::Identity()};
977  for (int tl = 1; tl <= getNLayers(); ++tl) {
978  for (int tube = 1; tube <= getNtubesperlayer(); ++tube) {
979  // in case of BMG chambers, do not check the 'dead' tubes
980  // (the tubes are numbered from 1-54 for each however there are cutouts for the
981  // alignment system where no tubes are built-in, meaning, those tubes do not exist/are 'dead')
982  if (manager()->mdtIdHelper()->isBMG(identify())) {
983  PVConstLink cv = getMaterialGeom();
984  // usually the tube number corresponds to the child number, however for
985  // BMG chambers full tubes are skipped during the building process
986  // therefore the matching needs to be done via the volume ID
987  int packed_id = tube + maxNTubesPerLayer * tl;
988  bool found = false;
989  geoGetIds(
990  [&](int id) {
991  if (!found && id == packed_id) {
992  myTransform = transform(tl, tube); //<! filling m_tubeTransf
993  myPoint = center(tl, tube); //<! filling m_tubeCenter
994  tmpCil = dynamic_cast<const Trk::CylinderBounds*>(&bounds(tl, tube)); //<! filling m_tubeBounds
995  tmpSaggL = dynamic_cast<const Trk::StraightLineSurface*>(&surface(tl, tube)); //<! filling m_tubeSurfaces
996  found = true;
997  }
998  },
999  &*cv);
1000  if (found) {
1001  ATH_MSG_VERBOSE( "tubeLayer/tube " << tl << " " << tube << " transform at origin "
1002  << Amg::toString(myTransform.linear()) );
1003  ATH_MSG_VERBOSE( "tubeLayer/tube " << tl << " " << tube << " tube center " << myPoint );
1004  ATH_MSG_VERBOSE( "tubeLayer/tube " << tl << " " << tube << " tube bounds pointer " << tmpCil );
1005  ATH_MSG_VERBOSE( "tubeLayer/tube " << tl << " " << tube << " tube surface pointer " << tmpSaggL );
1006  }
1007  } else {
1008  // print in order to compute !!!
1009  myTransform = transform(tl, tube); //<! filling m_tubeTransf
1010  myPoint = center(tl, tube); //<! filling m_tubeCenter
1011  tmpCil = dynamic_cast<const Trk::CylinderBounds*>(&bounds(tl, tube)); //<! filling m_tubeBounds
1012  tmpSaggL = dynamic_cast<const Trk::StraightLineSurface*>(&surface(tl, tube)); //<! filling m_tubeSurfaces
1013  ATH_MSG_VERBOSE( "tubeLayer/tube " << tl << " " << tube << " transform at origin "
1014  << Amg::toString(myTransform.translation()) );
1015  ATH_MSG_VERBOSE( "tubeLayer/tube " << tl << " " << tube << " tube center " << myPoint );
1016  ATH_MSG_VERBOSE( "tubeLayer/tube " << tl << " " << tube << " tube bounds pointer " << tmpCil );
1017  ATH_MSG_VERBOSE( "tubeLayer/tube " << tl << " " << tube << " tube surface pointer " << tmpSaggL );
1018  }
1019  }
1020  }
1021  }

◆ fromIdealToDeformed()

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

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

433  {
434  size_t itube = (tubeLayer - 1) * m_ntubesperlayer + tube - 1;
435  if (itube >= m_deformTransf.size()) {
436  ATH_MSG_WARNING(__func__<<"() :"<<__LINE__<< " called with tubeLayer or tube out of range in chamber "
437  << idHelperSvc()->toStringDetEl(identify()) << " : layer " << tubeLayer << " max " << m_nlayers << " tube " << tube
438  << " max " << m_ntubesperlayer << " will compute deformation for first tube in this chamber" );
439  ATH_MSG_WARNING( "Please run in DEBUG mode to get extra diagnostic" );
440  itube = 0;
441  }
442 
444  if (!ptr) {
445  Amg::Transform3D trans = deformedTransform(tubeLayer, tube);
446  ptr.set(std::make_unique<Amg::Transform3D>(std::move(trans)));
448  }
449  return *ptr;
450  }

◆ geoInfo()

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

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

807  {
808  size_t itube = (tubeLayer - 1) * m_ntubesperlayer + tube - 1;
809  if (itube >= m_tubeGeo.size()) {
810  ATH_MSG_WARNING(__func__<<"() :"<<__LINE__<<" called with tubeLayer or tube out of range in chamber "
811  << idHelperSvc()->toStringDetEl(identify()) << " : layer " << tubeLayer << " max " << m_nlayers << " tube " << tube
812  << " max " << m_ntubesperlayer << " will compute transform for first tube in this chamber" );
813  ATH_MSG_WARNING( "Please run in DEBUG mode to get extra diagnostic" );
814  itube = 0;
815  }
816 
818  if (!ptr) {
819  ptr.set(makeGeoInfo(tubeLayer, tube));
820  if (!m_haveTubeGeo) m_haveTubeGeo = true;
821  }
822  return *ptr;
823  }

◆ geoInitDone()

void MuonGM::MdtReadoutElement::geoInitDone ( )
private

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

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

◆ getActiveTubeLength()

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

◆ getBLinePar()

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

◆ getIndexOfREinMuonStation()

int MuonGM::MuonReadoutElement::getIndexOfREinMuonStation ( ) const
inherited

◆ 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 407 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

407  {
408  if (barrel())
409  return m_Ssize;
410  else {
411  int istep = int((tube - 1) / m_ntubesinastep);
412  if (istep < 0 || istep >= m_nsteps) {
413  ATH_MSG_WARNING( "getNominalTubeLengthWoCutouts for Element named " << idHelperSvc()->toStringDetEl(identify())
414  << " called with: tubeL, tube " << tubeLayer
415  << " " << tube << "; step " << istep << " out of range 0-" << m_nsteps - 1 << " m_ntubesinastep " << m_ntubesinastep);
416  istep = 0;
417  }
418  return m_tubelength[istep];
419  }
420  }

◆ 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

Seems to be exclusively used by the MDTs --> Move it to MdtReadoutElement.

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

202 { return m_stationS; }

◆ getStationType()

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

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

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

◆ getTechnologyName()

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

◆ getTechnologyType()

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

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

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

◆ getTubeLengthForCaching()

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

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

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

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

◆ 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

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

47 { return absTransform().translation(); }

◆ GlobalToAmdbLRSCoords()

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

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

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

150  {
151  return GlobalToAmdbLRSTransform() * x;
152  }

◆ 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 400 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

400  {
401  return transform(tubeLayer, tube).inverse();
402  }

◆ globalTransform()

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

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

391  {
392  return transform() * tubeToMultilayerTransf(tubePos, toDeform);
393  }

◆ 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 184 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h.

184 { 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 185 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h.

185 { 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  m_lvl = m_imsg ?
43  static_cast<MSG::Level>( m_imsg.load()->outputLevel(m_nm) ) :
44  MSG::INFO;
45 }

◆ 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 207 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

207  {
208  double distance = distanceFromRO(GlobalHitPosition, tubeLayer, tube);
209  if (distance < 0) {
210  ATH_MSG_WARNING( "isAtReadoutSide() - GlobalHitPosition appears to be outside the tube volume " << distance );
211  return 1;
212  } else if (distance <= getWireLength(tubeLayer, tube) / 2.)
213  return 1;
214  else if (distance < getWireLength(tubeLayer, tube))
215  return -1;
216  else {
217  ATH_MSG_WARNING( "isAtReadoutSide() - GlobalHitPosition appears to be outside the tube volume " << distance );
218  return -1;
219  }
220  }

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

◆ localNominalTubePosWoCutouts()

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

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

421  {
422  double xtube{0.}, ztube{0.};
423  if (barrel()) {
424  xtube = -m_Rsize / 2. + m_firstwire_y[tubeLayer - 1];
425  ztube = -m_Zsize / 2. + m_firstwire_x[tubeLayer - 1] + (tube - 1) * m_tubepitch;
426  } else {
427  xtube = -m_Zsize / 2. + m_firstwire_y[tubeLayer - 1];
428  ztube = -m_Rsize / 2. + m_firstwire_x[tubeLayer - 1] + (tube - 1) * m_tubepitch;
429  }
430  return Amg::Vector3D{xtube, 0., ztube};
431  }

◆ 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 285 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

285  {
286  return tubeToMultilayerTransf(tubeLayer, tube) * tubeFrame_localROPos(tubeLayer, tube);
287  }

◆ 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 291 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

291  {
292  return fromIdealToDeformed(tubeLayer, tube) * nodeform_localTubePos(tubeLayer, tube);
293  }

◆ makeGeoInfo()

std::unique_ptr< MdtReadoutElement::GeoInfo > MuonGM::MdtReadoutElement::makeGeoInfo ( const int  tubelayer,
const int  tube 
) const
private

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

802  {
804  return std::make_unique<GeoInfo>(std::move(transform));
805  }

◆ 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 164 of file AthMessaging.h.

165 {
166  MsgStream* ms = m_msg_tls.get();
167  if (!ms) {
168  if (!m_initialized.test_and_set()) initMessaging();
169  ms = new MsgStream(m_imsg,m_nm);
170  m_msg_tls.reset( ms );
171  }
172 
173  ms->setLevel (m_lvl);
174  return *ms;
175 }

◆ 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 179 of file AthMessaging.h.

180 { return msg() << lvl; }

◆ 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 (!m_initialized.test_and_set()) initMessaging();
154  if (m_lvl <= lvl) {
155  msg() << lvl;
156  return true;
157  } else {
158  return false;
159  }
160 }

◆ nMDTinStation()

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

How many MDT chambers are in the station.

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

62  {
63  return m_nMDTinStation;
64  }

◆ 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 404 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

404  {
405  return nodeform_localToGlobalTransf(tubeLayer, tube).inverse();
406  }

◆ 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 397 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

397  {
398  return globalTransform(nodeform_localTubePos(tubeLayer, tube), Amg::Transform3D::Identity());
399  }

◆ 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 295 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

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

◆ 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 372 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

372  {
373  return transform() * nodeform_localTubePos(tubeLayer, tube);
374  }

◆ normal() [1/2]

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

Return the normal of the element.

Implements Trk::TrkDetElementBase.

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

880  {
881  if (!m_elemNormal.isValid()) { m_elemNormal.set(transform().linear() * Amg::Vector3D::UnitX()); }
882  return *m_elemNormal.ptr();
883  }

◆ 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 138 of file MuonDetDescr/MuonReadoutGeometry/src/MuonReadoutElement.cxx.

138  {
139  return parentMuonStation()->getTransform().translation();
140  }

◆ parentStationPV()

PVConstLink MuonGM::MuonReadoutElement::parentStationPV ( ) const
inherited

◆ 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 578 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

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

◆ refreshCache()

void MuonGM::MuonReadoutElement::refreshCache ( )
inherited

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

178  {
179  clearCache();
180  fillCache();
181  }

◆ 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 221 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

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

◆ 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 288 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

288  {
289  return transform(tubeLayer, tube) * tubeFrame_localROPos(tubeLayer, tube);
290  }

◆ setBLinePar()

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

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

952  {
953  ATH_MSG_DEBUG( "Setting B-line for " << idHelperSvc()->toStringDetEl(identify()) );
954  if (m_BLinePar == bLine) {
955  return;
956  }
957  m_BLinePar = bLine;
958  refreshCache();
959  }

◆ 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 157 of file MuonDetDescr/MuonReadoutGeometry/src/MuonReadoutElement.cxx.

157  {
158  m_id = id;
159  if (!m_idHelperSvc->isMuon(id)) {
160  ATH_MSG_FATAL("The Identifier "<<m_idHelperSvc->toString(id)<<" is not a muon one.");
161  throw std::runtime_error("Invalid Identifier set");
162  }
163  m_stIdx = m_idHelperSvc->stationName(id);
164  m_eta = m_idHelperSvc->stationEta(id);
165  m_phi = m_idHelperSvc->stationPhi(id);
166  m_idhash = m_idHelperSvc->moduleHash(id);
167  m_detectorElIdhash = m_idHelperSvc->detElementHash(id);
168  }

◆ setIndexOfREinMuonStation()

void MuonGM::MuonReadoutElement::setIndexOfREinMuonStation ( )
privateinherited

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

104  {
105  PVConstLink par = parentStationPV();
106  if (par == PVConstLink(nullptr)) {
107  ATH_MSG_FATAL(__FILE__<<":"<<__LINE__<<" No parent station found for "<<m_idHelperSvc->toStringDetEl(identify()));
108  throw std::runtime_error("Parent station is a nullptr");
109  }
110  std::optional<unsigned int> c = par->indexOf(getMaterialGeom());
111  if (c) {
113  } else {
115  }
116  }

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

Sets the multilayer number.

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

67 { m_multilayer = 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 129 of file MuonDetDescr/MuonReadoutGeometry/src/MuonReadoutElement.cxx.

129  {
130  m_parentMuonStation = mstat;
131  if (mstat->getPhysVol()) {
132  setParentStationPV(mstat->getPhysVol());
133  }
134  }

◆ setParentStationPV() [1/2]

void MuonGM::MuonReadoutElement::setParentStationPV ( )
inherited

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

77  {
78  if (m_parentStationPV) return;
79 
80  std::string::size_type npos;
81  PVConstLink pStat = PVConstLink(nullptr);
82  PVConstLink myphysvol(getMaterialGeom());
83 
84  std::string name = (myphysvol->getLogVol())->getName();
85  if ((npos = name.find("Station")) != std::string::npos) {
86  pStat = myphysvol;
87  } else {
88  for (unsigned int k = 0; k < 10; k++) {
89  pStat = myphysvol->getParent();
90  if (pStat == PVConstLink(nullptr)) break;
91  name = (pStat->getLogVol())->getName();
92  if ((npos = name.find("Station")) != std::string::npos) { break; }
93  myphysvol = pStat;
94  }
95  }
96  m_parentStationPV = pStat;
98  }

◆ setParentStationPV() [2/2]

void MuonGM::MuonReadoutElement::setParentStationPV ( const PVConstLink &  x)
inherited

◆ 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 224 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

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

◆ 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 885 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

885  {
886  if (!m_associatedSurface) {
887  Amg::RotationMatrix3D muonTRotation(transform().rotation());
888  Amg::RotationMatrix3D surfaceTRotation;
889  surfaceTRotation.col(0) = muonTRotation.col(1);
890  surfaceTRotation.col(1) = muonTRotation.col(2);
891  surfaceTRotation.col(2) = muonTRotation.col(0);
892 
893  Amg::Transform3D trans3D(surfaceTRotation);
894  trans3D.pretranslate(transform().translation());
895 
896  if (barrel()) {
897  m_associatedSurface.set(std::make_unique<Trk::PlaneSurface>(Amg::Transform3D(trans3D), getSsize() * 0.5,
898  getZsize() * 0.5));
899  } else {
900  m_associatedSurface.set(std::make_unique<Trk::PlaneSurface>(Amg::Transform3D(trans3D), getSsize() * 0.5,
901  getLongSsize() * 0.5,
902  getRsize() * 0.5));
903  }
904  }
905  return *m_associatedSurface;
906  }

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

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

829  {
830 
831  int ntot_tubes = m_nlayers * m_ntubesperlayer;
832  int itube = (tubeLayer - 1) * m_ntubesperlayer + tube - 1;
833  // consistency checks
834  if (itube >= ntot_tubes) {
835  ATH_MSG_WARNING( "surface called with tubeLayer or tube out of range in chamber "
836  << idHelperSvc()->toStringDetEl(identify()) << " : layer " << tubeLayer << " max " << m_nlayers << " tube " << tube
837  << " max " << m_ntubesperlayer << " will compute surface for first tube in this chamber" );
838  ATH_MSG_WARNING( "Please run in DEBUG mode to get extra diagnostic" );
839  itube = 0;
840  }
841 
843  if (!ptr) {
844  Identifier id = m_idHelper.channelID(identify(), getMultilayer(), tubeLayer, tube);
845  ptr.set(std::make_unique<Trk::StraightLineSurface>(*this, id));
847  }
848  return *ptr;
849  }

◆ 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 118 of file MuonDetDescr/MuonReadoutGeometry/src/MuonReadoutElement.cxx.

118  {
119  PVConstLink par = parentStationPV();
120  if (par == PVConstLink(nullptr)) {
121  ATH_MSG_FATAL(__FILE__<<":"<<__LINE__<<" No parent station found for "<<m_idHelperSvc->toStringDetEl(identify()));
122  throw std::runtime_error("Parent station is a nullptr");
123  }
124 
125  if (m_indexOfREinMuonStation >= 0) return par->getXToChildVol((unsigned int)m_indexOfREinMuonStation);
126  return GeoTrf::Transform3D::Identity();
127  }

◆ 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 825 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

825  {
826  return geoInfo(tubeLayer, tube).m_transform;
827  }

◆ 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 282 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

282  {
283  return signedRODistanceFromTubeCentre(tubeLayer, tube) * Amg::Vector3D::UnitZ();
284  }

◆ 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 375 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

375  {
376  return transform() * localTubePos(tubeLayer, tube);
377  }

◆ tubeToMultilayerTransf() [1/3]

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

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

394  {
395  return toDeform * Amg::Translation3D{tubePos} * Amg::getRotateX3D(90. * CLHEP::deg);
396  }

◆ 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 378 of file MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx.

378  {
380  fromIdealToDeformed(tubeLayer, tube));
381  }

◆ wireEndpointsAsBuilt()

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

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

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

Friends And Related Function Documentation

◆ MuonChamber

friend class MuonChamber
friend

◆ MuonChamberLite

friend class MuonChamberLite
friend

◆ MuonGMR4::ReadoutGeomCnvAlg

friend class MuonGMR4::ReadoutGeomCnvAlg
friend

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

CxxUtils::CachedUniquePtr<Trk::SurfaceBounds> MuonGM::MdtReadoutElement::m_associatedBounds {}
private

◆ m_associatedSurface

CxxUtils::CachedUniquePtr<Trk::Surface> MuonGM::MdtReadoutElement::m_associatedSurface {}
private

◆ m_backupTubeGeo

std::vector<CxxUtils::CachedUniquePtr<GeoInfo> > MuonGM::MdtReadoutElement::m_backupTubeGeo {}
private

◆ m_BLinePar

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

◆ m_caching

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

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

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

◆ m_cutoutShift

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

◆ m_deadlength

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

◆ m_deformTransf

std::vector<CxxUtils::CachedUniquePtr<Amg::Transform3D> > MuonGM::MdtReadoutElement::m_deformTransf {}
private

◆ m_detectorElIdhash

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

detector element hash identifier

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

◆ 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 175 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h.

◆ m_firstwire_x

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

◆ 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 158 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h.

◆ m_haveDeformTransf

std::atomic<bool> MuonGM::MdtReadoutElement::m_haveDeformTransf {false}
mutableprivate

◆ m_haveTubeBounds

std::atomic<bool> MuonGM::MdtReadoutElement::m_haveTubeBounds {false}
mutableprivate

◆ m_haveTubeGeo

std::atomic<bool> MuonGM::MdtReadoutElement::m_haveTubeGeo {false}
mutableprivate

◆ m_haveTubeSurfaces

std::atomic<bool> MuonGM::MdtReadoutElement::m_haveTubeSurfaces {false}
mutableprivate

Flag whether any elements have been inserted into the corresponding vectors.

Used to speed up the clear-cache operations for the case where the vectors are empty.

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

◆ m_id

Identifier MuonGM::MuonReadoutElement::m_id {0}
privateinherited

extended data-collection identifier

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

◆ m_idhash

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

data-collection hash identifier

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

◆ m_idHelper

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

◆ m_idHelperSvc

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

◆ m_imsg

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

MessageSvc pointer.

Definition at line 135 of file AthMessaging.h.

◆ m_inBarrel

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

◆ m_indexOfREinMuonStation

int MuonGM::MuonReadoutElement::m_indexOfREinMuonStation {-999}
privateinherited

index of this RE in the mother MuonStation

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

◆ 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 148 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h.

◆ m_lvl

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

Current logging level.

Definition at line 138 of file AthMessaging.h.

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

PVConstLink MuonGM::MuonReadoutElement::m_parentStationPV {nullptr}
privateinherited

◆ m_phi

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

Identifier field of the station phi.

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

◆ 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 154 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h.

◆ m_stIdx

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

Identifier field of the station index.

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

◆ m_stIdx_BIS

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

◆ m_stIdx_BOL

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

◆ 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 152 of file MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h.

◆ m_tubeBounds

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

◆ m_tubeGeo

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

◆ 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<CxxUtils::CachedUniquePtr<Trk::StraightLineSurface> > MuonGM::MdtReadoutElement::m_tubeSurfaces {}
private

◆ m_tubeWallThickness

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

◆ m_type

Trk::DetectorElemType MuonGM::MuonReadoutElement::m_type {Trk::DetectorElemType::SolidState}
privateinherited

◆ m_zsignRO_tubeFrame

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

◆ m_Zsize

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

The documentation for this class was generated from the following files:
MdtIdHelper::isBMG
bool isBMG(const Identifier &id) const
is this a BMG chamber
Definition: MdtIdHelper.cxx:734
AthMessaging::m_lvl
std::atomic< MSG::Level > m_lvl
Current logging level.
Definition: AthMessaging.h:138
MuonGM::MdtReadoutElement::wireEndpointsAsBuilt
void wireEndpointsAsBuilt(Amg::Vector3D &locAMDBWireEndP, Amg::Vector3D &locAMDBWireEndN, const int tubelayer, const int tube) const
Definition: MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx:712
Trk::RectangleBounds
Definition: RectangleBounds.h:38
MuonGM::MdtReadoutElement::m_firstwire_x
std::array< double, maxnlayers > m_firstwire_x
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:229
CxxUtils::CachedValue::reset
void reset()
Reset the value to invalid.
checkxAOD.ds
ds
Definition: Tools/PyUtils/bin/checkxAOD.py:260
MuonGM::MdtReadoutElement::getNLayers
int getNLayers() const
Returns the number of tube layers inside the multilayer.
MuonGM::MuonReadoutElement::AmdbLRSToGlobalTransform
virtual Amg::Transform3D AmdbLRSToGlobalTransform() const
Definition: MuonDetDescr/MuonReadoutGeometry/src/MuonReadoutElement.cxx:146
MuonGM::MuonDetectorManager::MinimalGeoFlag
int MinimalGeoFlag() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonDetectorManager.h:247
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
MuonGM::MuonReadoutElement::m_statname
std::string m_statname
examples are BMS5, CSS1, EML1
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:154
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
CxxUtils::CachedValue::ptr
const T * ptr() const
Return a pointer to the cached value.
MuonGM::MdtReadoutElement::m_ntubesinastep
int m_ntubesinastep
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:222
MuonGM::MuonReadoutElement::absTransform
const Amg::Transform3D & absTransform() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:210
add-xsec-uncert-quadrature-N.alpha
alpha
Definition: add-xsec-uncert-quadrature-N.py:110
MuonGM::MuonReadoutElement::m_id
Identifier m_id
extended data-collection identifier
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:165
MuonGM::MdtReadoutElement::center
virtual const Amg::Vector3D & center() const override final
Return the center of the element.
Definition: MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx:908
MuonGM::MuonReadoutElement::m_techname
std::string m_techname
MDT or RPC or TGC or CSC plus a two digits subtype; example RPC17.
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:152
MuonGM::MuonReadoutElement::m_Zsize
double m_Zsize
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:145
MuonGM::MdtReadoutElement::m_deformTransf
std::vector< CxxUtils::CachedUniquePtr< Amg::Transform3D > > m_deformTransf
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:254
MuonGM::MdtReadoutElement::geoInfo
const GeoInfo & geoInfo(const int tubeLayer, const int tube) const
Definition: MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx:807
MuonGM::MuonReadoutElement::m_LongRsize
double m_LongRsize
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:147
ParticleTest.eg
eg
Definition: ParticleTest.py:29
MuonGM::MuonReadoutElement::m_eta
int m_eta
Identifier field of the station eta.
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:175
MuonGM::MuonReadoutElement::m_detectorElIdhash
IdentifierHash m_detectorElIdhash
detector element hash identifier
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:167
MuonGM::MdtReadoutElement::innerTubeRadius
double innerTubeRadius() const
Returns the inner tube radius excluding the aluminium walls.
MuonGM::MuonReadoutElement::fillCache
virtual void fillCache()=0
MuonGM::MdtReadoutElement::makeGeoInfo
std::unique_ptr< GeoInfo > makeGeoInfo(const int tubelayer, const int tube) const
Definition: MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx:802
Trk::DetectorElemType::Tgc
@ Tgc
MuonGM::MdtReadoutElement::m_ntubesperlayer
int m_ntubesperlayer
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:220
hist_file_dump.d
d
Definition: hist_file_dump.py:143
Trk::SurfaceBounds
Definition: SurfaceBounds.h:47
CxxUtils::CachedValue::isValid
bool isValid() const
Test to see if the value is valid.
Trk::DetectorElemType::TRT
@ TRT
MuonGM::MdtReadoutElement::localNominalTubePosWoCutouts
Amg::Vector3D localNominalTubePosWoCutouts(const int tubelayer, const int tube) const
Definition: MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx:421
MuonGM::MdtReadoutElement::m_haveTubeBounds
std::atomic< bool > m_haveTubeBounds
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:267
MuonGM::MdtReadoutElement::tubePitch
double tubePitch() const
Returns the distance between 2 tubes in a tube layer.
CxxUtils::CachedUniquePtrT
Cached pointer with atomic update.
Definition: CachedUniquePtr.h:54
MuonGM::MdtReadoutElement::globalTransform
Amg::Transform3D globalTransform(const Amg::Vector3D &tubePos, const Amg::Transform3D &toDeform) const
Definition: MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx:391
MuonGM::MuonReadoutElement::largeSector
bool largeSector() const
Definition: MuonDetDescr/MuonReadoutGeometry/src/MuonReadoutElement.cxx:49
MuonGM::MuonReadoutElement::GlobalToAmdbLRSTransform
virtual Amg::Transform3D GlobalToAmdbLRSTransform() const
Definition: MuonDetDescr/MuonReadoutGeometry/src/MuonReadoutElement.cxx:154
MuonGM::MdtReadoutElement::m_haveTubeGeo
std::atomic< bool > m_haveTubeGeo
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:266
MuonGM::MuonStation::getTransform
Amg::Transform3D getTransform() const
Definition: MuonStation.h:180
MuonGM::MuonReadoutElement::m_Ssize
double m_Ssize
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:143
MuonGM::MuonReadoutElement::getZsize
double getZsize() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:198
MuonGM::MdtReadoutElement::bounds
virtual const Trk::SurfaceBounds & bounds() const override final
Return the boundaries of the element.
Definition: MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx:910
MuonGM::MdtReadoutElement::nodeform_localTubePos
Amg::Vector3D nodeform_localTubePos(const Identifier &id) const
MuonGM::MdtReadoutElement::nodeform_localToGlobalTransf
Amg::Transform3D nodeform_localToGlobalTransf(const Identifier &id) const
MuonGM::MdtReadoutElement::m_idHelper
const MdtIdHelper & m_idHelper
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:211
deg
#define deg
Definition: SbPolyhedron.cxx:17
MuonGM::MuonReadoutElement::setParentStationPV
void setParentStationPV()
Definition: MuonDetDescr/MuonReadoutGeometry/src/MuonReadoutElement.cxx:77
MdtAsBuiltPar::multilayer_t
multilayer_t
MDT multi-layer index.
Definition: MdtAsBuiltPar.h:28
MdtIdHelper::tubeLayer
int tubeLayer(const Identifier &id) const
Definition: MdtIdHelper.cxx:724
MuonGM::MdtReadoutElement::getTubeLengthForCaching
double getTubeLengthForCaching(const int tubeLayer, const int tube) const
Definition: MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx:103
MuonGM::MuonReadoutElement::m_parentMuonStation
const MuonStation * m_parentMuonStation
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:180
MuonGM::MdtReadoutElement::barrel
bool barrel() const
Returns whether the chamber is in the barrel (Assement on first later in stationName)
MuonGM::MuonReadoutElement::m_type
Trk::DetectorElemType m_type
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:164
MuonGM::MuonReadoutElement::m_stationS
double m_stationS
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:171
MuonGM::MdtReadoutElement::transform
virtual const Amg::Transform3D & transform() const override final
Return local to global transform.
MuonGM::MdtReadoutElement::m_tubeBounds
std::vector< CxxUtils::CachedUniquePtr< Trk::CylinderBounds > > m_tubeBounds
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:259
MuonGM::MdtReadoutElement::m_zsignRO_tubeFrame
CxxUtils::CachedValue< int > m_zsignRO_tubeFrame
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:233
BLinePar::getParameter
float getParameter(const Parameter p) const
Returns a given parameter.
Definition: BLinePar.h:40
MuonGM::MdtReadoutElement::normal
virtual const Amg::Vector3D & normal() const override final
Return the normal of the element.
Definition: MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx:880
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
dbg::ptr
void * ptr(T *p)
Definition: SGImplSvc.cxx:74
Trk::Surface::center
const Amg::Vector3D & center() const
Returns the center position of the Surface.
MuonGM::MuonReadoutElement::getLongSsize
double getLongSsize() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:199
AthMessaging::m_imsg
std::atomic< IMessageSvc * > m_imsg
MessageSvc pointer.
Definition: AthMessaging.h:135
x
#define x
python.SystemOfUnits.ms
int ms
Definition: SystemOfUnits.py:132
MuonGM::MuonReadoutElement::setIndexOfREinMuonStation
void setIndexOfREinMuonStation()
Definition: MuonDetDescr/MuonReadoutGeometry/src/MuonReadoutElement.cxx:104
MuonGM::MdtReadoutElement::m_cutoutShift
double m_cutoutShift
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:224
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
Athena::getMessageSvc
IMessageSvc * getMessageSvc(bool quiet=false)
Definition: getMessageSvc.cxx:20
Trk::DetectorElemType::Csc
@ Csc
dumpTruth.getName
getName
Definition: dumpTruth.py:34
Trk::TrkDetElementBase::detectorType
virtual DetectorElemType detectorType() const =0
Return the Detector element type.
MuonGM::MdtReadoutElement::m_firstwire_y
std::array< double, maxnlayers > m_firstwire_y
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:230
MuonGM::MdtReadoutElement::distanceFromRO
double distanceFromRO(const Amg::Vector3D &GlobalHitPosition, const Identifier &id) const
MuonGM::MuonReadoutElement::m_phi
int m_phi
Identifier field of the station phi.
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:177
MuonGM::MdtReadoutElement::deformedTransform
Amg::Transform3D deformedTransform(const int tubelayer, const int tube) const
Definition: MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx:461
MuonGM::MuonReadoutElement::idHelperSvc
const Muon::IMuonIdHelperSvc * idHelperSvc() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:136
xAOD::phi
setEt phi
Definition: TrigEMCluster_v1.cxx:29
MuonGM::MuonReadoutElement::getSsize
double getSsize() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:196
BchCleanup.mgr
mgr
Definition: BchCleanup.py:294
Trk::DetectorElemType::Silicon
@ Silicon
MuonGM::MdtReadoutElement::getWireLength
double getWireLength(const int tubeLayer, const int tube) const
python.changerun.kk
list kk
Definition: changerun.py:41
MuonGM::MuonReadoutElement::refreshCache
void refreshCache()
Definition: MuonDetDescr/MuonReadoutGeometry/src/MuonReadoutElement.cxx:178
Amg::getRotateX3D
Amg::Transform3D getRotateX3D(double angle)
get a rotation transformation around X-axis
Definition: GeoPrimitivesHelpers.h:252
MuonGM::MuonReadoutElement::clearCache
virtual void clearCache()=0
Amg::toString
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Definition: GeoPrimitivesToStringConverter.h:40
TrigConf::MSGTC::Level
Level
Definition: Trigger/TrigConfiguration/TrigConfBase/TrigConfBase/MsgStream.h:21
MuonGM::MuonReadoutElement::getStationName
const std::string & getStationName() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:190
MuonGM::MdtReadoutElement::fromIdealToDeformed
const Amg::Transform3D & fromIdealToDeformed(const int tubelayer, const int tube) const
Definition: MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx:433
MuonGM::MdtReadoutElement::m_haveTubeSurfaces
std::atomic< bool > m_haveTubeSurfaces
Flag whether any elements have been inserted into the corresponding vectors.
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:265
Trk::DetectorElemType::SolidState
@ SolidState
MuonGM::MdtReadoutElement::m_haveDeformTransf
std::atomic< bool > m_haveDeformTransf
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:268
MuonGM::MdtReadoutElement::localTubePos
Amg::Vector3D localTubePos(const Identifier &id) const
xmin
double xmin
Definition: listroot.cxx:60
MuonGM::MuonReadoutElement::m_Rsize
double m_Rsize
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:144
MuonGM::MdtReadoutElement::GeoInfo::m_transform
Amg::Transform3D m_transform
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:245
python.CaloCondTools.g
g
Definition: CaloCondTools.py:15
MuonGM::MdtReadoutElement::m_nMDTinStation
unsigned int m_nMDTinStation
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:215
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
CaloNoise_fillDB.dt
dt
Definition: CaloNoise_fillDB.py:58
xAOD::rotation
rotation
Definition: TrackSurface_v1.cxx:15
Trk::CylinderBounds
Definition: CylinderBounds.h:46
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
MuonGM::MuonReadoutElement::parentMuonStation
const MuonStation * parentMuonStation() const
Definition: MuonDetDescr/MuonReadoutGeometry/src/MuonReadoutElement.cxx:136
python.CaloAddPedShiftConfig.str
str
Definition: CaloAddPedShiftConfig.py:42
python.LArMinBiasAlgConfig.int
int
Definition: LArMinBiasAlgConfig.py:59
master.flag
bool flag
Definition: master.py:29
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
dumpNswErrorDb.linear
def linear
Definition: dumpNswErrorDb.py:29
MuonGM::MdtReadoutElement::m_stIdx_BIS
const int m_stIdx_BIS
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:212
MuonGM::MdtReadoutElement::outerTubeRadius
double outerTubeRadius() const
Returns the tube radius taking the thickness of the tubes into account.
MuonGM::MuonReadoutElement::m_parentStationPV
PVConstLink m_parentStationPV
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:179
MdtIdHelper::tube
int tube(const Identifier &id) const
Definition: MdtIdHelper.cxx:726
sign
int sign(int a)
Definition: TRT_StrawNeighbourSvc.h:107
MuonGM::MdtReadoutElement::m_elemNormal
CxxUtils::CachedValue< Amg::Vector3D > m_elemNormal
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:257
MuonGM::MuonStation::getNativeToAmdbLRS
const Amg::Transform3D & getNativeToAmdbLRS() const
Definition: MuonStation.h:193
MuonGM::MdtReadoutElement::getMultilayer
int getMultilayer() const
Returns the multilayer represented by the readout element.
MuonGM::MuonReadoutElement::manager
const MuonDetectorManager * manager() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:204
MuonGM::MuonReadoutElement::m_hasCutouts
bool m_hasCutouts
true is there are cutouts in the readdout-element
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:158
MuonGM::MuonReadoutElement::getTechnologyType
std::string getTechnologyType() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:187
MuonGM::MuonDetectorManager::mdtIdHelper
const MdtIdHelper * mdtIdHelper() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonDetectorManager.h:226
xAOD::double
double
Definition: CompositeParticle_v1.cxx:159
TRT::Track::z0
@ z0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:63
MuonGM::MdtReadoutElement::m_deadlength
double m_deadlength
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:226
MuonGM::MdtReadoutElement::m_inBarrel
bool m_inBarrel
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:227
MuonGM::MdtReadoutElement::signedRODistanceFromTubeCentre
double signedRODistanceFromTubeCentre(const Identifier &id) const
AthMessaging::msg
MsgStream & msg() const
The standard message stream.
Definition: AthMessaging.h:164
MuonGM::MuonReadoutElement::setStationName
void setStationName(const std::string &)
Definition: MuonDetDescr/MuonReadoutGeometry/src/MuonReadoutElement.cxx:170
MuonGM::MuonReadoutElement::m_LongSsize
double m_LongSsize
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:146
MdtAsBuiltPar::tubeSide_t
tubeSide_t
MDT tube side.
Definition: MdtAsBuiltPar.h:33
Trk::DetectorElemType::sTgc
@ sTgc
MuonR4::SegmentFit::ParamDefs::y0
@ y0
MuonGM::MdtReadoutElement::posOnDefChamWire
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
Definition: MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx:578
MuonGM::MdtReadoutElement::m_BLinePar
const BLinePar * m_BLinePar
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:256
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:239
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
MdtIdHelper::channelID
Identifier channelID(int stationName, int stationEta, int stationPhi, int multilayer, int tubeLayer, int tube) const
Definition: MdtIdHelper.cxx:659
createCoolChannelIdFile.par
par
Definition: createCoolChannelIdFile.py:29
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
MuonGM::MuonReadoutElement::m_idhash
IdentifierHash m_idhash
data-collection hash identifier
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:166
PlotCalibFromCool.en
en
Definition: PlotCalibFromCool.py:399
MuonGM::MdtReadoutElement::getNominalTubeLengthWoCutouts
double getNominalTubeLengthWoCutouts(const int tubeLayer, const int tube) const
Definition: MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx:407
MuonGM::MdtReadoutElement::m_tubeGeo
std::vector< CxxUtils::CachedUniquePtr< GeoInfo > > m_tubeGeo
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:252
checkTriggerxAOD.found
found
Definition: checkTriggerxAOD.py:328
MuonGM::MdtReadoutElement::endcap
bool endcap() const
Returns whether the chamber is in the endcap.
CxxUtils::CachedValue::set
void set(const T &val) const
Set the value, assuming it is currently invalid.
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
THROW_EXCEPTION
#define THROW_EXCEPTION(MESSAGE)
Definition: throwExcept.h:10
MuonGM::MdtReadoutElement::tubeToMultilayerTransf
Amg::Transform3D tubeToMultilayerTransf(const Identifier &id) const
MuonGM::MdtReadoutElement::nodeform_globalToLocalTransf
Amg::Transform3D nodeform_globalToLocalTransf(const Identifier &id) const
MuonGM::MuonReadoutElement::m_LongZsize
double m_LongZsize
size in the specified direction
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:148
JetVoronoiDiagramHelpers::coord
double coord
Definition: JetVoronoiDiagramHelpers.h:45
Trk::TrapezoidBounds
Definition: TrapezoidBounds.h:43
MuonGM::MdtReadoutElement::m_associatedBounds
CxxUtils::CachedUniquePtr< Trk::SurfaceBounds > m_associatedBounds
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:272
MuonGM::MdtReadoutElement::ROPos
Amg::Vector3D ROPos(const int tubelayer, const int tube) const
Definition: MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx:288
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
python.PyAthena.v
v
Definition: PyAthena.py:154
MuonGM::MdtReadoutElement::tubeFrame_localROPos
Amg::Vector3D tubeFrame_localROPos(const int tubelayer, const int tube) const
Definition: MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx:282
BLinePar::Parameter
Parameter
Definition: BLinePar.h:21
MuonGM::MuonReadoutElement::toParentStation
Amg::Transform3D toParentStation() const
Definition: MuonDetDescr/MuonReadoutGeometry/src/MuonReadoutElement.cxx:118
geoGetIds
void geoGetIds(FUNCTION f, const GeoGraphNode *node, int depthLimit=1)
Template helper for running the visitor.
Definition: GeoGetIds.h:82
MuonGM::MuonReadoutElement::getStationIndex
int getStationIndex() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:192
MuonGM::MuonReadoutElement::m_muon_mgr
MuonDetectorManager * m_muon_mgr
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:181
MdtAsBuiltPar
Container classifier the MDT as-built parameters See parameter description in http://atlas-muon-align...
Definition: MdtAsBuiltPar.h:18
MuonGM::MdtReadoutElement::tubePos
Amg::Vector3D tubePos(const Identifier &id) const
Returns the global position of the given tube.
Trk::DetectorElemType::MM
@ MM
MuonGM::MuonReadoutElement::getRsize
double getRsize() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:197
Trk::DetectorElemType::Rpc
@ Rpc
MuonGM::MdtReadoutElement::m_tubelength
std::array< double, maxnsteps > m_tubelength
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:228
MuonGM::MdtReadoutElement::m_multilayer
int m_multilayer
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:216
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
MuonGM::MuonReadoutElement::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:163
Trk::PlaneSurface
Definition: PlaneSurface.h:64
Amg::RotationMatrix3D
Eigen::Matrix< double, 3, 3 > RotationMatrix3D
Definition: GeoPrimitives.h:49
unit
const PlainObject unit() const
This is a plugin that makes Eigen look like CLHEP & defines some convenience methods.
Definition: AmgMatrixBasePlugin.h:21
AthMessaging::m_nm
std::string m_nm
Message source name.
Definition: AthMessaging.h:129
Amg::Translation3D
Eigen::Translation< double, 3 > Translation3D
Definition: GeoPrimitives.h:44
MuonGM::MuonReadoutElement::identify
Identifier identify() const override final
Returns the ATLAS Identifier of the MuonReadOutElement.
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:184
MuonGM::MuonStation::getMdtAsBuiltParams
const MdtAsBuiltPar * getMdtAsBuiltParams() const
Definition: MuonStation.cxx:386
MuonGM::MdtReadoutElement::surface
virtual const Trk::Surface & surface() const override final
Return surface associated with this detector element.
Definition: MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx:885
python.changerun.pv
pv
Definition: changerun.py:81
MuonGM::MdtReadoutElement::m_nsteps
int m_nsteps
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:221
MuonGM::MdtReadoutElement::GeoInfo::m_center
Amg::Vector3D m_center
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:246
MuonGM::MdtReadoutElement::m_tubeSurfaces
std::vector< CxxUtils::CachedUniquePtr< Trk::StraightLineSurface > > m_tubeSurfaces
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:258
Amg::AngleAxis3D
Eigen::AngleAxisd AngleAxis3D
Definition: GeoPrimitives.h:45
MuonGM::MuonReadoutElement::m_indexOfREinMuonStation
int m_indexOfREinMuonStation
index of this RE in the mother MuonStation
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:169
MuonGM::MuonReadoutElement::m_stIdx
int m_stIdx
Identifier field of the station index.
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:173
dqt_zlumi_alleff_HIST.tl
tl
Definition: dqt_zlumi_alleff_HIST.py:73
MuonGM::MuonReadoutElement::sideA
bool sideA() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:207
AthMessaging::initMessaging
void initMessaging() const
Initialize our message level and MessageSvc.
Definition: AthMessaging.cxx:39
PowhegControl_ttFCNC_NLO.params
params
Definition: PowhegControl_ttFCNC_NLO.py:226
MuonGM::MdtReadoutElement::m_tubepitch
double m_tubepitch
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:218
MuonGM::MdtReadoutElement::getNtubesperlayer
int getNtubesperlayer() const
Returns the number of tubes in each tube layer.
AthMessaging::m_msg_tls
boost::thread_specific_ptr< MsgStream > m_msg_tls
MsgStream instance (a std::cout like with print-out levels)
Definition: AthMessaging.h:132
MuonGM::MuonReadoutElement::hasCutouts
bool hasCutouts() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:126
Amg::distance
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
Definition: GeoPrimitivesHelpers.h:54
python.compressB64.c
def c
Definition: compressB64.py:93
MuonGM::MuonReadoutElement::MuonReadoutElement
MuonReadoutElement(GeoVFullPhysVol *pv, MuonDetectorManager *mgr, Trk::DetectorElemType detType)
Definition: MuonDetDescr/MuonReadoutGeometry/src/MuonReadoutElement.cxx:34
MuonGM::MuonReadoutElement::parentStationPV
PVConstLink parentStationPV() const
Definition: MuonDetDescr/MuonReadoutGeometry/src/MuonReadoutElement.cxx:100
mag
Scalar mag() const
mag method
Definition: AmgMatrixBasePlugin.h:26
MuonGM::MdtReadoutElement::m_associatedSurface
CxxUtils::CachedUniquePtr< Trk::Surface > m_associatedSurface
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:271
calibdata.tube
tube
Definition: calibdata.py:31
MuonGM::MdtReadoutElement::m_nlayers
int m_nlayers
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:217
MuonGM::MuonReadoutElement::getStationPhi
int getStationPhi() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:194
MuonGM::MuonReadoutElement::getStationEta
int getStationEta() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:193
Trk::DetectorElemType::Mdt
@ Mdt
Trk::StraightLineSurface
Definition: StraightLineSurface.h:51
fitman.k
k
Definition: fitman.py:528
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32
Amg::getTranslate3D
Amg::Transform3D getTranslate3D(const double X, const double Y, const double Z)
: Returns a shift transformation along an arbitrary axis
Definition: GeoPrimitivesHelpers.h:289
Identifier
Definition: IdentifierFieldParser.cxx:14