ATLAS Offline Software
Public Member Functions | Private Member Functions | Private Attributes | List of all members
Muon::MuonIntersectGeoData Class Reference

#include <MuonIntersectGeoData.h>

Collaboration diagram for Muon::MuonIntersectGeoData:

Public Member Functions

 ~MuonIntersectGeoData ()
 
 MuonIntersectGeoData ()
 
 MuonIntersectGeoData (MsgStream &msg, const MuonGM::MuonDetectorManager *detMgr, const IMuonIdHelperSvc *idHelperSvc, const MdtCondDbData *cond_data)
 
Muon::MuonStationIntersect tubesCrossedByTrack (const MuonGM::MuonDetectorManager *detMgr, const Identifier &id, const Amg::Vector3D &pos, const Amg::Vector3D &dir) const
 
std::vector< std::shared_ptr< const MdtIntersectGeometry > > getStationGeometry (const Identifier &id) const
 get geometry description of the given chamber + neighbouring chambers More...
 
std::shared_ptr< const MdtIntersectGeometrygetChamber (const Identifier &id) const
 get a pointer to the cached chamber More...
 

Private Member Functions

std::vector< IdentifierbinPlusneighbours (const Identifier &id) const
 

Private Attributes

std::vector< std::shared_ptr< MdtIntersectGeometry > > m_geometry {}
 
const IMuonIdHelperSvcm_idHelperSvc {nullptr}
 
const MdtCondDbDatam_dbData {nullptr}
 

Detailed Description

Definition at line 22 of file MuonIntersectGeoData.h.

Constructor & Destructor Documentation

◆ ~MuonIntersectGeoData()

Muon::MuonIntersectGeoData::~MuonIntersectGeoData ( )
default

◆ MuonIntersectGeoData() [1/2]

Muon::MuonIntersectGeoData::MuonIntersectGeoData ( )
default

◆ MuonIntersectGeoData() [2/2]

Muon::MuonIntersectGeoData::MuonIntersectGeoData ( MsgStream &  msg,
const MuonGM::MuonDetectorManager detMgr,
const IMuonIdHelperSvc idHelperSvc,
const MdtCondDbData cond_data 
)

Definition at line 18 of file MuonIntersectGeoData.cxx.

19  :
20  m_idHelperSvc{idHelperSvc}, m_dbData{dbData} {
22  for (unsigned int n = 0; n < m_geometry.size(); ++n) {
23  IdentifierHash id_hash{n};
24  const MuonGM::MdtReadoutElement* mdt_ele = detMgr->getMdtReadoutElement(id_hash);
25  // The Mdt intersectionGeometry relies on the first multi layer. We can skip the other layers
26  if (!mdt_ele || mdt_ele->getMultilayer() != 1) continue;
27  m_geometry[id_hash] = std::make_unique<Muon::MdtIntersectGeometry>(log, mdt_ele->identify(), idHelperSvc, detMgr, dbData);
28  }
29  }

Member Function Documentation

◆ binPlusneighbours()

std::vector< Identifier > Muon::MuonIntersectGeoData::binPlusneighbours ( const Identifier id) const
private

Definition at line 68 of file MuonIntersectGeoData.cxx.

68  {
69  std::vector<Identifier> chIds;
71  int stPhi = m_idHelperSvc->mdtIdHelper().stationPhi(id);
72  int stEta = m_idHelperSvc->mdtIdHelper().stationEta(id);
74  auto [stEtaMin, stEtaMax] = m_idHelperSvc->mdtIdHelper().stationEtaMinMax(id);
75 
76  int chEtaLeft = stEta - 1;
77  int chEtaRight = stEta + 1;
78 
79 
80 
81  // chamber with smallest eta
82  if (chEtaLeft < stEtaMin) chEtaLeft = -999;
83 
84  // chamber with largest eta
85  if (chEtaRight > stEtaMax) chEtaRight = -999;
86 
87  using namespace MuonStationIndex;
89 
90  // special treatment of EOS chambers
91  if (chIndex == ChIndex::EOS) {
92  chEtaRight = -999;
93  chEtaLeft = -999;
94  }
95 
96  if (isBarrel) {
97  // eta = 0 doesn't exist take next
98  if (chEtaLeft == 0) chEtaLeft -= 1;
99  if (chEtaRight == 0) chEtaRight += 1;
100  } else {
101  // do not combined positive and negative endcaps
102  if (chEtaLeft == 0) chEtaLeft = -999;
103  if (chEtaRight == 0) chEtaRight = -999;
104  }
105 
106  // no neighbours for BIS8
107  if (chIndex == ChIndex::BIS && std::abs(stEta) == 8) {
108  chEtaLeft = -999;
109  chEtaRight = -999;
110  }
111 
112  // BIS 8 never neighbour of a chamber
113  if (chIndex == ChIndex::BIS) {
114  if (std::abs(chEtaLeft) == 8) chEtaLeft = -999;
115  if (std::abs(chEtaRight) == 8) chEtaRight = -999;
116  }
117 
119  //Chambers can only be -5, -4, 4, 5
120  if( std::abs(chEtaLeft) != 5 && std::abs(chEtaLeft) != 4 ) chEtaLeft = -999;
121  if( std::abs(chEtaRight) != 5 && std::abs(chEtaRight) != 4 ) chEtaRight = -999;
122  }
123 
124  if (chEtaLeft != -999 &&
126  chIds.push_back(m_idHelperSvc->mdtIdHelper().elementID(stName, chEtaLeft, stPhi));
127  chIds.push_back(m_idHelperSvc->mdtIdHelper().elementID(id));
128  if (chEtaRight != -999 &&
130  chIds.push_back(m_idHelperSvc->mdtIdHelper().elementID(stName, chEtaRight, stPhi));
131 
132  // if (msgLvl(MSG::VERBOSE)) {
133  // ATH_MSG_VERBOSE(" returning chambers for id " << m_idHelperSvc->toString(id) << " ids " << chIds.size() << " eta " <<
134  // chEtaLeft
135  // << " " << stEta << " " << chEtaRight << " chambers: ");
136  // for (unsigned int i = 0; i < chIds.size(); ++i) ATH_MSG_VERBOSE(m_idHelperSvc->toString(chIds[i]));
137  // }
138 
139  return chIds;
140  }

◆ getChamber()

std::shared_ptr< const MdtIntersectGeometry > Muon::MuonIntersectGeoData::getChamber ( const Identifier id) const

get a pointer to the cached chamber

Definition at line 46 of file MuonIntersectGeoData.cxx.

46  {
48  const MdtIdHelper& idHelper{m_idHelperSvc->mdtIdHelper()};
49  if (idHelper.get_detectorElement_hash(idHelper.multilayerID(chId), hash)) return nullptr;
50  return hash < m_geometry.size() ? m_geometry[hash] : nullptr;
51  }

◆ getStationGeometry()

std::vector< std::shared_ptr< const Muon::MdtIntersectGeometry > > Muon::MuonIntersectGeoData::getStationGeometry ( const Identifier id) const

get geometry description of the given chamber + neighbouring chambers

Definition at line 31 of file MuonIntersectGeoData.cxx.

31  {
32  // get ids of geometry associated with identifier
33  std::vector<Identifier> chambers = binPlusneighbours(id);
34 
35  // vector to store result
36  std::vector<std::shared_ptr<const Muon::MdtIntersectGeometry>> stations;
37  stations.reserve(chambers.size());
38  // loop over bins, retrieve geometry
39  for (const Identifier& chId : chambers) {
40  if (m_dbData && !m_dbData->isGood(chId)) { continue; }
41  std::shared_ptr<const MdtIntersectGeometry> chamb = getChamber(chId);
42  if (chamb) stations.push_back(std::move(chamb));
43  }
44  return stations;
45  }

◆ tubesCrossedByTrack()

Muon::MuonStationIntersect Muon::MuonIntersectGeoData::tubesCrossedByTrack ( const MuonGM::MuonDetectorManager detMgr,
const Identifier id,
const Amg::Vector3D pos,
const Amg::Vector3D dir 
) const

Definition at line 53 of file MuonIntersectGeoData.cxx.

55  {
56  std::vector<std::shared_ptr<const Muon::MdtIntersectGeometry>> stations = getStationGeometry(id);
57 
59  for (std::shared_ptr<const Muon::MdtIntersectGeometry>& it : stations) {
60  Muon::MuonStationIntersect intersect = it->intersection(detMgr, pos, dir);
61  tubeIntersects.insert(tubeIntersects.end(), intersect.tubeIntersects().begin(), intersect.tubeIntersects().end());
62  }
63 
64  Muon::MuonStationIntersect intersection{std::move(tubeIntersects)};
65  return intersection;
66  }

Member Data Documentation

◆ m_dbData

const MdtCondDbData* Muon::MuonIntersectGeoData::m_dbData {nullptr}
private

Definition at line 42 of file MuonIntersectGeoData.h.

◆ m_geometry

std::vector<std::shared_ptr<MdtIntersectGeometry> > Muon::MuonIntersectGeoData::m_geometry {}
private

Definition at line 40 of file MuonIntersectGeoData.h.

◆ m_idHelperSvc

const IMuonIdHelperSvc* Muon::MuonIntersectGeoData::m_idHelperSvc {nullptr}
private

Definition at line 41 of file MuonIntersectGeoData.h.


The documentation for this class was generated from the following files:
MdtIdHelper::validElement
bool validElement(const Identifier &id) const
Definition: MdtIdHelper.cxx:557
MdtCondDbData::isGood
bool isGood(const Identifier &Id) const
Returns if the identifier (tube/multiLayer/chamber) is masked in the conditions database.
Definition: MdtCondDbData.cxx:25
Muon::MuonIntersectGeoData::m_geometry
std::vector< std::shared_ptr< MdtIntersectGeometry > > m_geometry
Definition: MuonIntersectGeoData.h:40
Muon::IMuonIdHelperSvc::hasCSC
virtual bool hasCSC() const =0
returns whether the CSC identifiers are loaded
Muon::MuonStationIndex::ChIndex::EOS
@ EOS
MuonIdHelper::detectorElement_hash_max
size_type detectorElement_hash_max() const
Definition: MuonIdHelper.h:186
Muon::MuonStationIndex::stName
const std::string & stName(StIndex index)
convert StIndex into a string
Definition: MuonStationIndex.cxx:104
skel.it
it
Definition: skel.GENtoEVGEN.py:407
Muon::MuonIntersectGeoData::getStationGeometry
std::vector< std::shared_ptr< const MdtIntersectGeometry > > getStationGeometry(const Identifier &id) const
get geometry description of the given chamber + neighbouring chambers
Definition: MuonIntersectGeoData.cxx:31
Muon::MuonIntersectGeoData::m_dbData
const MdtCondDbData * m_dbData
Definition: MuonIntersectGeoData.h:42
MuonIdHelper::stationName
int stationName(const Identifier &id) const
Definition: MuonIdHelper.cxx:802
Muon::MuonStationIndex::ChIndex::EIS
@ EIS
intersection
std::vector< std::string > intersection(std::vector< std::string > &v1, std::vector< std::string > &v2)
Definition: compareFlatTrees.cxx:25
Muon::MuonIntersectGeoData::m_idHelperSvc
const IMuonIdHelperSvc * m_idHelperSvc
Definition: MuonIntersectGeoData.h:41
Muon::MuonStationIndex::ChIndex::EIL
@ EIL
MuonGM::MuonDetectorManager::getMdtReadoutElement
const MdtReadoutElement * getMdtReadoutElement(const Identifier &id) const
access via extended identifier (requires unpacking)
Definition: MuonDetDescr/MuonReadoutGeometry/src/MuonDetectorManager.cxx:206
Muon::MuonStationIndex::ChIndex::BIS
@ BIS
MuonGM::MdtReadoutElement
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:51
Muon::MuonStationIndex::chIndex
ChIndex chIndex(const std::string &index)
convert ChIndex name string to enum
Definition: MuonStationIndex.cxx:11
beamspotman.n
n
Definition: beamspotman.py:729
MdtIdHelper
Definition: MdtIdHelper.h:61
MuonGM::MdtReadoutElement::getMultilayer
int getMultilayer() const
Returns the multilayer represented by the readout element.
MdtIdHelper::stationEtaMinMax
std::pair< int, int > stationEtaMinMax(const Identifier &id) const
Definition: MdtIdHelper.cxx:443
Muon::IMuonIdHelperSvc::chamberIndex
virtual MuonStationIndex::ChIndex chamberIndex(const Identifier &id) const =0
calculate chamber index from Identifier
beamspotman.dir
string dir
Definition: beamspotman.py:621
Muon::MuonIntersectGeoData::getChamber
std::shared_ptr< const MdtIntersectGeometry > getChamber(const Identifier &id) const
get a pointer to the cached chamber
Definition: MuonIntersectGeoData.cxx:46
MuonIdHelper::stationPhi
int stationPhi(const Identifier &id) const
Definition: MuonIdHelper.cxx:812
Muon::IMuonIdHelperSvc::mdtIdHelper
virtual const MdtIdHelper & mdtIdHelper() const =0
access to MdtIdHelper
MuonIdHelper::isBarrel
bool isBarrel(const Identifier &id) const
Definition: MuonIdHelper.cxx:827
MuonIdHelper::stationEta
int stationEta(const Identifier &id) const
Definition: MuonIdHelper.cxx:807
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:16
Muon::MuonStationIntersect
Definition: MuonStationIntersect.h:12
MdtIdHelper::elementID
Identifier elementID(int stationName, int stationEta, int stationPhi) const
Definition: MdtIdHelper.cxx:630
CaloCondBlobAlgs_fillNoiseFromASCII.hash
dictionary hash
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:108
Amg::intersect
std::optional< double > intersect(const AmgVector(N)&posA, const AmgVector(N)&dirA, const AmgVector(N)&posB, const AmgVector(N)&dirB)
Calculates the point B' along the line B that's closest to a second line A.
Definition: GeoPrimitivesHelpers.h:347
Muon::MuonIntersectGeoData::binPlusneighbours
std::vector< Identifier > binPlusneighbours(const Identifier &id) const
Definition: MuonIntersectGeoData.cxx:68
MuonGM::MuonReadoutElement::identify
Identifier identify() const override final
Returns the ATLAS Identifier of the MuonReadOutElement.
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:184
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
python.LArCondContChannels.isBarrel
isBarrel
Definition: LArCondContChannels.py:659
Muon::MuonStationIndex::ChIndex
ChIndex
enum to classify the different chamber layers in the muon spectrometer
Definition: MuonStationIndex.h:15
IdentifierHash
This is a "hash" representation of an Identifier. This encodes a 32 bit index which can be used to lo...
Definition: IdentifierHash.h:25
Muon::MuonStationIntersect::TubeIntersects
std::vector< MuonTubeIntersect > TubeIntersects
Definition: MuonStationIntersect.h:14
Identifier
Definition: IdentifierFieldParser.cxx:14