 |
ATLAS Offline Software
|
Helper service that creates muon Identifiers and can be used to print Identifiers.
More...
#include <MuonIdHelperSvc.h>
|
const RpcIdHelper * | m_rpcIdHelper {nullptr} |
| Sub detector specific IdHelpers. More...
|
|
const TgcIdHelper * | m_tgcIdHelper {nullptr} |
|
const CscIdHelper * | m_cscIdHelper {nullptr} |
|
const MdtIdHelper * | m_mdtIdHelper {nullptr} |
|
const MmIdHelper * | m_mmIdHelper {nullptr} |
|
const sTgcIdHelper * | m_stgcIdHelper {nullptr} |
|
const MuonIdHelper * | m_primaryHelper {nullptr} |
|
Gaudi::Property< bool > | m_hasMDT {this, "HasMDT", true, "Specify whether the current detector layour contains MDT chambers"} |
|
Gaudi::Property< bool > | m_hasRPC {this, "HasRPC", true, "Specify whether the current detector layour contains RPC chambers"} |
|
Gaudi::Property< bool > | m_hasTGC {this, "HasTGC", true, "Specify whether the current detector layour contains TGC chambers"} |
|
Gaudi::Property< bool > | m_hasCSC {this, "HasCSC", true, "Specify whether current detector layout contains CSC chambers"} |
|
Gaudi::Property< bool > | m_hasSTGC {this, "HasSTGC", true, "Specify whether current detector layout contains STGC chambers"} |
|
Gaudi::Property< bool > | m_hasMM {this, "HasMM", true, "Specify whether current detector layout contains MicroMegas chambers"} |
|
ServiceHandle< StoreGateSvc > | m_detStore {this, "DetectorStore", "DetectorStore"} |
|
std::vector< StationNameData > | m_stationNameData {} |
|
std::vector< TechIdx > | m_technologies {} |
|
int | m_BIS_stat {-1} |
|
std::unordered_set< Identifier > | m_smdt_stat {} |
|
std::array< std::set< TechIdx >, static_cast< int >StIdx::StIndexMax)> | m_techPerStation {} |
| Array holding which technologies are there per station. More...
|
|
Helper service that creates muon Identifiers and can be used to print Identifiers.
Definition at line 19 of file MuonIdHelperSvc.h.
◆ ChIdx
◆ PhiIdx
◆ StIdx
◆ TechIdx
◆ MuonIdHelperSvc()
Muon::MuonIdHelperSvc::MuonIdHelperSvc |
( |
const std::string & |
name, |
|
|
ISvcLocator * |
svc |
|
) |
| |
◆ ~MuonIdHelperSvc()
virtual Muon::MuonIdHelperSvc::~MuonIdHelperSvc |
( |
| ) |
|
|
overridevirtualdefault |
◆ chamberId()
◆ chamberIndex()
◆ chamberNameString()
std::string Muon::MuonIdHelperSvc::chamberNameString |
( |
const Identifier & |
id | ) |
const |
|
overridevirtual |
◆ cscIdHelper()
◆ detElementHash() [1/2]
◆ detElementHash() [2/2]
◆ detElId()
◆ gasGap()
returns gas gap: gasGap for RPC + TGC, wireLayer for CSC, tube for MDT
Definition at line 186 of file MuonIdHelperSvc.cxx.
189 }
else if (
isTgc(
id)) {
191 }
else if (
isCsc(
id)) {
195 }
else if (
isMM(
id)) {
◆ gasGapId()
create a gasGap ID (will return layer Id for MDTs)
Definition at line 474 of file MuonIdHelperSvc.cxx.
479 }
else if (
isRpc(
id)) {
483 }
else if (
isCsc(
id)) {
485 }
else if (
isMM(
id)) {
490 sTgcIdHelper::sTgcChannelTypes::Strip, 1);
◆ hasCSC()
bool Muon::MuonIdHelperSvc::hasCSC |
( |
| ) |
const |
|
override |
◆ hasHPTDC()
returns whether this Identifier belongs to an MDT with HPTDC or not NOTE that in Run4, no HPTDCs at all are planned to be present any more, so this function should be obsolete from Run4 onwards
NOTE that in Run4, no HPTDCs at all are planned to be present any more, so this function should be obsolete from Run4 onwards
Definition at line 241 of file MuonIdHelperSvc.cxx.
◆ hasMDT()
bool Muon::MuonIdHelperSvc::hasMDT |
( |
| ) |
const |
|
override |
◆ hasMM()
bool Muon::MuonIdHelperSvc::hasMM |
( |
| ) |
const |
|
override |
◆ hasRPC()
bool Muon::MuonIdHelperSvc::hasRPC |
( |
| ) |
const |
|
override |
◆ hasSTGC()
bool Muon::MuonIdHelperSvc::hasSTGC |
( |
| ) |
const |
|
override |
◆ hasTGC()
bool Muon::MuonIdHelperSvc::hasTGC |
( |
| ) |
const |
|
override |
◆ initialize()
StatusCode Muon::MuonIdHelperSvc::initialize |
( |
| ) |
|
|
overridevirtual |
AlgTool initilize.
Find an id helper that is not a nullptr
Cache the sMDT stations
Definition at line 18 of file MuonIdHelperSvc.cxx.
28 using AllHelperArray = std::array<const MuonIdHelper*, 6>;
31 AllHelperArray::const_iterator itr = std::ranges::find_if(allHelpers,
33 if (itr == allHelpers.end()){
34 ATH_MSG_WARNING(
"No MuonIdHelper has been created before. Please do not setup the service if no muon layout is loaded");
35 return StatusCode::SUCCESS;
39 std::stringstream techStr{};
50 techStr<<
", " << tech <<
" " <<
name;
67 if (
data.stationName[1] ==
'1')
69 else if (
data.stationName[1] ==
'2')
71 else if (
data.stationName[1] ==
'3')
73 else if (
data.stationName[1] ==
'4')
76 if (
data.stationName[1] ==
'O') {
77 if (
data.stationName[2] ==
'L')
81 }
else if (
data.stationName[1] ==
'M') {
82 if (
data.stationName[2] ==
'L')
86 }
else if (
data.stationName[1] ==
'I') {
87 if (
data.stationName[2] ==
'L')
91 }
else if (
data.stationName[1] ==
'E') {
92 if (
data.stationName[0] ==
'B') {
95 if (
data.stationName[2] ==
'L')
100 }
else if (
data.stationName[0] ==
'C') {
101 if (
data.stationName[2] ==
'L')
106 if (
data.stationName[0] ==
'S' ||
data.stationName[0] ==
'M') {
114 if (
data.stationName[1] ==
'O') {
115 if (
data.stationName[2] ==
'L')
119 }
else if (
data.stationName[1] ==
'M') {
120 if (
data.stationName[2] ==
'L' ||
data.stationName[2] ==
'E')
124 }
else if (
data.stationName[1] ==
'I') {
125 if (
data.stationName[2] ==
'L' ||
data.stationName[2] ==
'M' ||
data.stationName[2] ==
'R')
131 if (
data.chIndex == ChIdx::ChUnknown) {
132 ATH_MSG_ERROR(
"data.chIndex is negative in MuonIdHelperSvc::initialize ");
133 return StatusCode::FAILURE;
157 for (
int phi = 1;
phi <= 8; ++
phi) {
171 std::ranges::for_each(allHelpers, [
this](
const MuonIdHelper* idHelper){
172 if (!idHelper)
return;
176 if (
idx == StIndex::StUnknown)
continue;
183 return StatusCode::SUCCESS;
◆ isCsc()
◆ isEndcap()
◆ isMdt()
◆ isMM()
◆ isMuon()
◆ isRpc()
◆ isSmallChamber()
returns whether this is a small chamber, always returns true for TGCs
Definition at line 269 of file MuonIdHelperSvc.cxx.
◆ issMdt()
◆ issTgc()
◆ isTgc()
◆ isTrigger()
◆ layerId()
◆ layerIndex()
◆ mdtIdHelper()
◆ measuresPhi()
◆ mmIdHelper()
◆ moduleHash() [1/2]
◆ moduleHash() [2/2]
◆ phiIndex()
calculate phi index from Identifier (not supported for MDT hits)
Definition at line 287 of file MuonIdHelperSvc.cxx.
288 if (!
id.is_valid() || !
isMuon(
id)) {
290 return PhiIdx::PhiUnknown;
294 return PhiIdx::PhiUnknown;
307 }
else if (
isTgc(
id)) {
310 index = PhiIdx::STGC1;
312 index = PhiIdx::STGC2;
316 if (chamberName[1] ==
'1')
318 else if (chamberName[1] ==
'2')
◆ regionIndex()
◆ rpcIdHelper()
◆ sector()
return sector number 1-16, odd=large, even=small
Definition at line 580 of file MuonIdHelperSvc.cxx.
583 auto initTgcSectorMapping = [&]() -> std::vector<int>* {
584 std::vector<int>*
mapping =
nullptr;
593 static const std::vector<int> tgcSectorMapping = *initTgcSectorMapping();
597 if (
hash >= tgcSectorMapping.size()) {
601 return tgcSectorMapping[
hash];
◆ stationEta()
Return stationEta for all technologies.
Definition at line 517 of file MuonIdHelperSvc.cxx.
518 if (!
id.is_valid()) {
524 }
else if (
isTgc(
id)) {
526 }
else if (
isMdt(
id)) {
528 }
else if (
isCsc(
id)) {
532 }
else if (
isMM(
id)) {
◆ stationIndex()
◆ stationName()
Return stationName for all technologies.
Definition at line 538 of file MuonIdHelperSvc.cxx.
539 if (!
id.is_valid()) {
545 }
else if (
isTgc(
id)) {
547 }
else if (
isMdt(
id)) {
549 }
else if (
isCsc(
id)) {
553 }
else if (
isMM(
id)) {
◆ stationNameString()
std::string Muon::MuonIdHelperSvc::stationNameString |
( |
const Identifier & |
id | ) |
const |
|
overridevirtual |
◆ stationPhi()
Return stationPhi for all technologies.
Definition at line 496 of file MuonIdHelperSvc.cxx.
497 if (!
id.is_valid()) {
503 }
else if (
isTgc(
id)) {
505 }
else if (
isMdt(
id)) {
507 }
else if (
isCsc(
id)) {
511 }
else if (
isMM(
id)) {
◆ stationRegion()
Return stationRegion for all technologies.
Definition at line 559 of file MuonIdHelperSvc.cxx.
560 if (!
id.is_valid()) {
566 }
else if (
isTgc(
id)) {
568 }
else if (
isMdt(
id)) {
570 }
else if (
isCsc(
id)) {
574 }
else if (
isMM(
id)) {
◆ stgcIdHelper()
◆ technologiesInStation()
◆ technologyIndex()
◆ tgcIdHelper()
◆ toString()
print all fields to string
Definition at line 344 of file MuonIdHelperSvc.cxx.
345 if (!
id.is_valid())
return " Invalid Identifier";
349 const std::string_view phiStr{
measuresPhi(
id) ?
"phi" :
"eta"};
352 }
else if (
isTgc(
id)) {
354 }
else if (
isCsc(
id)) {
356 }
else if (
isMM(
id)) {
362 channelType == sTgcType::Strip ?
"eta" : channelType == sTgcType::Wire ?
"phi" :
"pad" ,
◆ toStringChamber()
std::string Muon::MuonIdHelperSvc::toStringChamber |
( |
const Identifier & |
id | ) |
const |
|
overridevirtual |
print all fields up to chamber to string
Definition at line 378 of file MuonIdHelperSvc.cxx.
379 if (!
id.is_valid()) {
380 return " Invalid Identifier";
◆ toStringDetEl()
std::string Muon::MuonIdHelperSvc::toStringDetEl |
( |
const Identifier & |
id | ) |
const |
|
overridevirtual |
print all fields up to detector element to string
Definition at line 388 of file MuonIdHelperSvc.cxx.
390 if (!
id.is_valid())
return " Invalid Identifier";
393 }
else if (
isRpc(
id)) {
395 }
else if (
isTgc(
id)) {
401 }
else if (
isMM(
id)) {
◆ toStringGasGap()
std::string Muon::MuonIdHelperSvc::toStringGasGap |
( |
const Identifier & |
id | ) |
const |
|
overridevirtual |
print all fields up to gas gap to string
Definition at line 409 of file MuonIdHelperSvc.cxx.
410 if (!
id.is_valid())
return " Invalid Identifier";
◆ toStringStation()
std::string Muon::MuonIdHelperSvc::toStringStation |
( |
const Identifier & |
id | ) |
const |
|
overridevirtual |
◆ toStringTech()
std::string Muon::MuonIdHelperSvc::toStringTech |
( |
const Identifier & |
id | ) |
const |
|
overridevirtual |
◆ m_BIS_stat
int Muon::MuonIdHelperSvc::m_BIS_stat {-1} |
|
private |
◆ m_cscIdHelper
◆ m_detStore
◆ m_hasCSC
Gaudi::Property<bool> Muon::MuonIdHelperSvc::m_hasCSC {this, "HasCSC", true, "Specify whether current detector layout contains CSC chambers"} |
|
private |
◆ m_hasMDT
Gaudi::Property<bool> Muon::MuonIdHelperSvc::m_hasMDT {this, "HasMDT", true, "Specify whether the current detector layour contains MDT chambers"} |
|
private |
◆ m_hasMM
Gaudi::Property<bool> Muon::MuonIdHelperSvc::m_hasMM {this, "HasMM", true, "Specify whether current detector layout contains MicroMegas chambers"} |
|
private |
◆ m_hasRPC
Gaudi::Property<bool> Muon::MuonIdHelperSvc::m_hasRPC {this, "HasRPC", true, "Specify whether the current detector layour contains RPC chambers"} |
|
private |
◆ m_hasSTGC
Gaudi::Property<bool> Muon::MuonIdHelperSvc::m_hasSTGC {this, "HasSTGC", true, "Specify whether current detector layout contains STGC chambers"} |
|
private |
◆ m_hasTGC
Gaudi::Property<bool> Muon::MuonIdHelperSvc::m_hasTGC {this, "HasTGC", true, "Specify whether the current detector layour contains TGC chambers"} |
|
private |
◆ m_mdtIdHelper
◆ m_mmIdHelper
◆ m_primaryHelper
◆ m_rpcIdHelper
◆ m_smdt_stat
std::unordered_set<Identifier> Muon::MuonIdHelperSvc::m_smdt_stat {} |
|
private |
◆ m_stationNameData
◆ m_stgcIdHelper
◆ m_technologies
std::vector<TechIdx> Muon::MuonIdHelperSvc::m_technologies {} |
|
private |
◆ m_techPerStation
std::array<std::set<TechIdx>, static_cast<int>StIdx::StIndexMax)> Muon::MuonIdHelperSvc::m_techPerStation {} |
|
private |
Array holding which technologies are there per station.
Definition at line 218 of file MuonIdHelperSvc.h.
◆ m_tgcIdHelper
The documentation for this class was generated from the following files:
bool isBMG(const Identifier &id) const
is this a BMG chamber
bool is_muon(const Identifier &id) const
int multilayer(const Identifier &id) const
Access to components of the ID.
const MmIdHelper * m_mmIdHelper
virtual bool isTgc(const Identifier &id) const override
returns whether this is a TGC Identifier or not
int stationNameIndex(const std::string &name) const
int multilayer(const Identifier &id) const
char data[hepevt_bytes_allocation_ATLAS]
int stationRegion(const Identifier &id) const
Gaudi::Property< bool > m_hasSTGC
static int stationEtaMin(bool barrel)
Access to min and max of level ranges.
bool is_rpc(const Identifier &id) const
Gaudi::Property< bool > m_hasMDT
const RpcIdHelper * m_rpcIdHelper
Sub detector specific IdHelpers.
int gasGap(const Identifier &id) const override
get the hashes
virtual int stationName(const Identifier &id) const override
Return stationName for all technologies.
Identifier elementID(int stationName, int stationEta, int stationPhi, int doubletR) const
virtual std::string toString(const Identifier &id) const override
print all fields to string
bool is_mdt(const Identifier &id) const
int doubletZ(const Identifier &id) const
Identifier channelID(int stationName, int stationEta, int stationPhi, int multilayer, int gasGap, int channelType, int channel) const
virtual bool isCsc(const Identifier &id) const override
returns whether this is a CSC Identifier or not
size_type detectorElement_hash_max() const
const MuonIdHelper * m_primaryHelper
Gaudi::Property< bool > m_hasRPC
bool measuresPhi(const Identifier &id) const override
returns measuresPhi
const std::string & stName(StIndex index)
convert StIndex into a string
bool measuresPhi(const Identifier &id) const override
virtual std::string stationNameString(const Identifier &id) const override
Return the station name string for all technologies.
virtual bool isEndcap(const Identifier &id) const override
returns whether this is an endcap Identifier or not
bool is_csc(const Identifier &id) const
int tubeLayer(const Identifier &id) const
virtual bool isSmallChamber(const Identifier &id) const override
returns whether this is a small chamber, always returns true for TGCs
const std::string & technologyString(const int &index) const
const_id_iterator module_end() const
virtual MuonStationIndex::ChIndex chamberIndex(const Identifier &id) const override
calculate chamber index from Identifier
ServiceHandle< StoreGateSvc > m_detStore
const sTgcIdHelper * m_stgcIdHelper
int stationName(const Identifier &id) const
#define ATH_MSG_VERBOSE(x)
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
Identifier channelID(int stationName, int stationEta, int stationPhi, int doubletR, int doubletZ, int doubletPhi, int gasGap, int measuresPhi, int strip) const
int stationNameIndexMax() const
bool measuresPhi(const Identifier &id) const override
std::vector< StationNameData > m_stationNameData
int channel(const Identifier &id) const override
bool is_tgc(const Identifier &id) const
int multilayer(const Identifier &id) const
Gaudi::Property< bool > m_hasMM
bool isSmall(const Identifier &id) const
int gasGap(const Identifier &id) const override
get the hashes
virtual bool isMM(const Identifier &id) const override
returns whether this is a MM Identifier or not
int channel(const Identifier &id) const override
virtual int stationPhi(const Identifier &id) const override
Return stationPhi for all technologies.
MuonStationIndex::StIndex StIdx
int wireLayer(const Identifier &id) const
bool is_stgc(const Identifier &id) const
StIndex toStationIndex(ChIndex index)
convert ChIndex into StIndex
const MdtIdHelper * m_mdtIdHelper
virtual bool issTgc(const Identifier &id) const override
returns whether this is a sTGC Identifier or not
virtual std::string toStringGasGap(const Identifier &id) const override
print all fields up to gas gap to string
int channel(const Identifier &id) const override
MuonStationIndex::PhiIndex PhiIdx
Gaudi::Property< bool > m_hasCSC
int doubletR(const Identifier &id) const
static int stationEtaMax(bool barrel)
::StatusCode StatusCode
StatusCode definition for legacy code.
const std::string & chName(ChIndex index)
convert ChIndex into a string
int channel(const Identifier &id) const override
virtual bool isMdt(const Identifier &id) const override
returns whether this is a MDT Identifier or not
virtual int get_module_hash(const Identifier &id, IdentifierHash &hash_id) const override
virtual int get_module_hash(const Identifier &id, IdentifierHash &hash_id) const
int gasGap(const Identifier &id) const override
get the hashes
int tube(const Identifier &id) const
virtual int get_detectorElement_hash(const Identifier &id, IdentifierHash &hash_id) const
AthROOTErrorHandlerSvc * svc
const std::string & technologyName(TechnologyIndex index)
convert LayerIndex into a string
bool is_mm(const Identifier &id) const
bool hasCSC() const override
const TgcIdHelper * m_tgcIdHelper
int technologyNameIndexMax() const
bool hasTGC() const override
virtual bool isRpc(const Identifier &id) const override
returns whether this is a RPC Identifier or not
std::array< std::set< TechIdx >, static_cast< int >StIdx::StIndexMax)> m_techPerStation
Array holding which technologies are there per station.
Identifier elementID(int stationName, int stationEta, int stationPhi) const
int stationPhi(const Identifier &id) const
Gaudi::Property< bool > m_hasTGC
int channel(const Identifier &id) const override
const std::string & stationNameString(const int &index) const
std::string print_to_string(Identifier id, const IdContext *context=0) const
or provide the printout in string form
virtual int stationEta(const Identifier &id) const override
Return stationEta for all technologies.
Identifier elementID(int stationName, int stationEta, int stationPhi) const
virtual IdentifierHash detElementHash(const Identifier &id) const override
Returns the detector element hash associated to an Identifier.
virtual std::string toStringTech(const Identifier &id) const override
print all fields up to technology to string
Identifier channelID(int stationName, int stationEta, int stationPhi, int chamberLayer, int wireLayer, int measuresPhi, int strip) const
Identifier channelID(int stationName, int stationEta, int stationPhi, int multilayer, int tubeLayer, int tube) const
constexpr int toInt(const ParamDefs p)
virtual std::string chamberNameString(const Identifier &id) const override
print chamber name to string
virtual bool measuresPhi(const Identifier &id) const override
returns whether channel measures phi or not
virtual MuonStationIndex::StIndex stationIndex(const Identifier &id) const override
calculate station index from Identifier
int stationEta(const Identifier &id) const
virtual bool isMuon(const Identifier &id) const override
returns whether this is a Muon Identifier or not
virtual bool issMdt(const Identifier &id) const override
returns whether this is a sMDT Identifier or not
virtual std::string toStringDetEl(const Identifier &id) const override
print all fields up to detector element to string
size_type module_hash_max() const
the maximum hash value
bool isBME(const Identifier &id) const
is this a BME chamber
bool isEndcap(const Identifier &id) const
Identifier elementID(int stationName, int stationEta, int stationPhi) const
bool hasMDT() const override
Identifier elementID(int stationName, int stationEta, int stationPhi) const
MuonStationIndex::TechnologyIndex TechIdx
int channel(const Identifier &id) const override
int gasGap(const Identifier &id) const override
get the hashes
std::unordered_set< Identifier > m_smdt_stat
#define ATH_MSG_WARNING(x)
const CscIdHelper * m_cscIdHelper
virtual IdentifierHash moduleHash(const Identifier &id) const override
Returns the module hash associated to an Identifier.
bool hasSTGC() const override
virtual std::string toStringStation(const Identifier &id) const override
print all fields up to stationName to string
virtual MuonStationIndex::TechnologyIndex technologyIndex(const Identifier &id) const override
calculate layer index from Identifier
Identifier channelID(int stationName, int stationEta, int stationPhi, int gasGap, int isStrip, int channel) const
LayerIndex toLayerIndex(ChIndex index)
convert ChIndex into LayerIndex
bool hasRPC() const override
bool measuresPhi(const Identifier &id) const override
virtual std::string toStringChamber(const Identifier &id) const override
print all fields up to chamber to string
const_id_iterator module_begin() const
Iterators over full set of ids.
This is a "hash" representation of an Identifier. This encodes a 32 bit index which can be used to lo...
std::vector< TechIdx > m_technologies
bool hasMM() const override
Identifier channelID(int stationName, int stationEta, int stationPhi, int multilayer, int gasGap, int channel) const
int channelType(const Identifier &id) const
int chamberLayer(const Identifier &id) const
virtual int gasGap(const Identifier &id) const override
returns gas gap: gasGap for RPC + TGC, wireLayer for CSC, tube for MDT
int doubletPhi(const Identifier &id) const
static const std::string BAD_NAME