ATLAS Offline Software
Loading...
Searching...
No Matches
MuonCalib::MdtCalibDataContainer Class Reference

#include <MdtCalibDataContainer.h>

Collaboration diagram for MuonCalib::MdtCalibDataContainer:

Public Types

enum class  RegionGranularity { OneRt , OnePerChamber , OnePerMultiLayer }
using CorrectionPtr = MdtFullCalibData::CorrectionPtr
using RtRelationPtr = MdtFullCalibData::RtRelationPtr
using TubeContainerPtr = MdtFullCalibData::TubeContainerPtr

Public Member Functions

 MdtCalibDataContainer (const Muon::IMuonIdHelperSvc *idHelprSvc, const RegionGranularity granularity)
 ~MdtCalibDataContainer ()=default
const MdtFullCalibDatagetCalibData (const Identifier &measId, MsgStream &msg) const
 Returns the calibration data associated with this station.
bool hasDataForChannel (const Identifier &measId, MsgStream &msg) const
 Checks whether a calibration data object is already present.
bool storeData (const Identifier &mlID, CorrectionPtr corrFuncSet, MsgStream &msg)
bool storeData (const Identifier &mlID, RtRelationPtr rtRelation, MsgStream &msg)
bool storeData (const Identifier &mlID, TubeContainerPtr tubeContainer, MsgStream &msg)
RegionGranularity granularity () const
void setInversePropSpeed (const float speed)
float inversePropSpeed () const

Private Member Functions

std::optional< unsigned int > containerIndex (const Identifier &measId, MsgStream &msg) const

Private Attributes

const Muon::IMuonIdHelperSvcm_idHelperSvc {nullptr}
const RegionGranularity m_granularity {RegionGranularity::OneRt}
const MdtIdHelperm_idHelper {m_idHelperSvc->mdtIdHelper()}
std::vector< MdtFullCalibDatam_dataCache {}
float m_invPropSpeed {0.f}

Detailed Description

Definition at line 27 of file MdtCalibDataContainer.h.

Member Typedef Documentation

◆ CorrectionPtr

◆ RtRelationPtr

◆ TubeContainerPtr

Member Enumeration Documentation

◆ RegionGranularity

Enumerator
OneRt 
OnePerChamber 
OnePerMultiLayer 

Definition at line 33 of file MdtCalibDataContainer.h.

33{ OneRt, OnePerChamber, OnePerMultiLayer };

Constructor & Destructor Documentation

◆ MdtCalibDataContainer()

MuonCalib::MdtCalibDataContainer::MdtCalibDataContainer ( const Muon::IMuonIdHelperSvc * idHelprSvc,
const RegionGranularity granularity )

Definition at line 13 of file MdtCalibDataContainer.cxx.

14 :
15 m_idHelperSvc{idHelperSvc},
17}
const Muon::IMuonIdHelperSvc * m_idHelperSvc

◆ ~MdtCalibDataContainer()

MuonCalib::MdtCalibDataContainer::~MdtCalibDataContainer ( )
default

Member Function Documentation

◆ containerIndex()

std::optional< unsigned int > MuonCalib::MdtCalibDataContainer::containerIndex ( const Identifier & measId,
MsgStream & msg ) const
inlineprivate

Definition at line 22 of file MdtCalibDataContainer.cxx.

22 {
23 IdentifierHash hash{0};
24
25 if (m_granularity == RegionGranularity::OnePerMultiLayer &&
26 (m_idHelper.get_detectorElement_hash(measId, hash) ||
27 m_idHelper.detectorElement_hash_max() < static_cast<unsigned int>(hash))) {
28 msg<<MSG::ERROR <<__FILE__<<":"<<__LINE__<<" Failed to look up a proper detector element hash for "
29 <<m_idHelperSvc->toString(measId)<<endmsg;
30 return std::nullopt;
31 } else if (m_granularity == RegionGranularity::OnePerChamber &&
32 (m_idHelper.get_module_hash(measId, hash) ||
33 m_idHelper.module_hash_max() < static_cast<unsigned int>(hash))) {
34 msg<<MSG::ERROR <<__FILE__<<":"<<__LINE__<<" Failed to look up a proper detector element hash for "
35 <<m_idHelperSvc->toString(measId)<<endmsg;
36 return std::nullopt;
37 }
38 return std::make_optional<unsigned int>(static_cast<unsigned int>(hash));
39}
#define endmsg
MsgStream & msg
Definition testRead.cxx:32

◆ getCalibData()

const MdtFullCalibData * MuonCalib::MdtCalibDataContainer::getCalibData ( const Identifier & measId,
MsgStream & msg ) const

Returns the calibration data associated with this station.

Definition at line 46 of file MdtCalibDataContainer.cxx.

46 {
47 std::optional<unsigned int> index = containerIndex(measId, msg);
48 if (!index) return nullptr;
49 if ((*index ) < m_dataCache.size()) {
50 const MdtFullCalibData& data = m_dataCache[*index];
51 if (data) {return &data;}
52 }
53 msg<<MSG::WARNING<<__FILE__<<":"<<__LINE__<<" No Mdt calibration data is stored for "
54 <<m_idHelperSvc->toString(measId)<<endmsg;
55 return nullptr;
56}
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
std::optional< unsigned int > containerIndex(const Identifier &measId, MsgStream &msg) const
std::vector< MdtFullCalibData > m_dataCache
str index
Definition DeMoScan.py:362

◆ granularity()

MdtCalibDataContainer::RegionGranularity MuonCalib::MdtCalibDataContainer::granularity ( ) const

Definition at line 21 of file MdtCalibDataContainer.cxx.

21{ return m_granularity; }

◆ hasDataForChannel()

bool MuonCalib::MdtCalibDataContainer::hasDataForChannel ( const Identifier & measId,
MsgStream & msg ) const

Checks whether a calibration data object is already present.

Definition at line 41 of file MdtCalibDataContainer.cxx.

41 {
42 std::optional<unsigned int > index = containerIndex(measId, msg);
43 return !(!index || (*index) >= m_dataCache.size() || !m_dataCache[*index]);
44}

◆ inversePropSpeed()

float MuonCalib::MdtCalibDataContainer::inversePropSpeed ( ) const

Definition at line 19 of file MdtCalibDataContainer.cxx.

◆ setInversePropSpeed()

void MuonCalib::MdtCalibDataContainer::setInversePropSpeed ( const float speed)

Definition at line 18 of file MdtCalibDataContainer.cxx.

18{m_invPropSpeed = speed; }

◆ storeData() [1/3]

bool MuonCalib::MdtCalibDataContainer::storeData ( const Identifier & mlID,
CorrectionPtr corrFuncSet,
MsgStream & msg )

Check for a valid index

Resize the container if neccessary

Definition at line 57 of file MdtCalibDataContainer.cxx.

57 {
59 std::optional<unsigned int> index = containerIndex(mlID, msg);
60 if (!index) return false;
61 if (!corrFuncSet) {
62 msg << MSG::ERROR<<__FILE__<<":"<<__LINE__<<" No correction functional set parsed for multilayer "
63 <<m_idHelperSvc->toString(mlID) << endmsg;
64 return false;
65 }
67 if (m_dataCache.size() <= (*index)) m_dataCache.resize(*index + 1);
68 MdtFullCalibData& cache = m_dataCache[*index];
69 if (cache.corrections && cache.corrections != corrFuncSet) {
70 msg << MSG::ERROR<<__FILE__<<":"<<__LINE__<<" There already exist a rt relation object for multilayer "
71 <<m_idHelperSvc->toString(mlID) << endmsg;
72 return false;
73 }
74 cache.corrections = std::move(corrFuncSet);
75
76 if (msg.level() <= MSG::DEBUG) {
77 msg << MSG::DEBUG<<__FILE__<<":"<<__LINE__<<" Added successfully the rt corrections for "
78 << m_idHelperSvc->toString(mlID)<<endmsg;
79 }
80 return true;
81}

◆ storeData() [2/3]

bool MuonCalib::MdtCalibDataContainer::storeData ( const Identifier & mlID,
RtRelationPtr rtRelation,
MsgStream & msg )

Check for a valid index

Resize the container if neccessary

Definition at line 82 of file MdtCalibDataContainer.cxx.

82 {
84 std::optional<unsigned int> index = containerIndex(mlID, msg);
85 if (!index) return false;
86 if (!rtRelation) {
87 msg << MSG::ERROR<<__FILE__<<":"<<__LINE__<<" No rt relation parsed for multilayer "
88 <<m_idHelperSvc->toString(mlID) << endmsg;
89 return false;
90 }
92 if (m_dataCache.size() <= (*index)) m_dataCache.resize(*index + 1);
93 MdtFullCalibData& cache = m_dataCache[*index];
94 if (cache.rtRelation && cache.rtRelation != rtRelation) {
95 msg << MSG::ERROR<<__FILE__<<":"<<__LINE__<<" There already exist a rt relation object for multilayer "
96 <<m_idHelperSvc->toString(mlID) << endmsg;
97 return false;
98 }
99 cache.rtRelation = std::move(rtRelation);
100
101 if (msg.level() <= MSG::DEBUG) {
102 msg << MSG::DEBUG<<__FILE__<<":"<<__LINE__<<" Added successfully the rt relations for "
103 << m_idHelperSvc->toString(mlID)<<endmsg;
104 }
105 return true;
106}

◆ storeData() [3/3]

bool MuonCalib::MdtCalibDataContainer::storeData ( const Identifier & mlID,
TubeContainerPtr tubeContainer,
MsgStream & msg )

Check for a valid index

Resize the container if neccessary

Definition at line 107 of file MdtCalibDataContainer.cxx.

107 {
109 std::optional<unsigned int> index = containerIndex(mlID, msg);
110 if (!index) return false;
111 if (!tubeContainer) {
112 msg << MSG::ERROR<<__FILE__<<":"<<__LINE__<<" No tube ontainer parsed for multilayer "
113 <<m_idHelperSvc->toString(mlID) << endmsg;
114 return false;
115 }
116
118 if (m_dataCache.size() <= (*index)) m_dataCache.resize(*index + 1);
119 MdtFullCalibData& cache = m_dataCache[*index];
120 if (cache.tubeCalib && cache.tubeCalib != tubeContainer) {
121 msg << MSG::ERROR<<__FILE__<<":"<<__LINE__<<" There already exist a tube calibration container for multilayer "
122 <<m_idHelperSvc->toString(mlID) << endmsg;
123 return false;
124 }
125 if (msg.level() <= MSG::DEBUG) {
126 msg << MSG::DEBUG<<__FILE__<<":"<<__LINE__<<" Added successfully the tube calibrations for "
127 << m_idHelperSvc->toString(mlID)<<endmsg;
128 }
129 cache.tubeCalib = tubeContainer;
130 if (m_granularity == RegionGranularity::OneRt ||
131 m_idHelper.multilayer(mlID) == 2 ||
132 m_idHelper.numberOfMultilayers(mlID) == 1) return true;
133 return storeData(m_idHelper.multilayerID(mlID, 2), std::move(tubeContainer), msg);
134}
bool storeData(const Identifier &mlID, CorrectionPtr corrFuncSet, MsgStream &msg)

Member Data Documentation

◆ m_dataCache

std::vector<MdtFullCalibData> MuonCalib::MdtCalibDataContainer::m_dataCache {}
private

Definition at line 60 of file MdtCalibDataContainer.h.

60{};

◆ m_granularity

const RegionGranularity MuonCalib::MdtCalibDataContainer::m_granularity {RegionGranularity::OneRt}
private

Definition at line 58 of file MdtCalibDataContainer.h.

58{RegionGranularity::OneRt};

◆ m_idHelper

const MdtIdHelper& MuonCalib::MdtCalibDataContainer::m_idHelper {m_idHelperSvc->mdtIdHelper()}
private

Definition at line 59 of file MdtCalibDataContainer.h.

59{m_idHelperSvc->mdtIdHelper()};

◆ m_idHelperSvc

const Muon::IMuonIdHelperSvc* MuonCalib::MdtCalibDataContainer::m_idHelperSvc {nullptr}
private

Definition at line 57 of file MdtCalibDataContainer.h.

57{nullptr};

◆ m_invPropSpeed

float MuonCalib::MdtCalibDataContainer::m_invPropSpeed {0.f}
private

Definition at line 61 of file MdtCalibDataContainer.h.

61{0.f};

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