ATLAS Offline Software
Loading...
Searching...
No Matches
NswT0Data.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
8
9#include "Identifier/Identifier.h"
12#include "GeoModelKernel/throwExcept.h"
13
14
16 m_idHelperSvc{idHelperSvc} {
17 if (m_idHelperSvc->hasMM()) {
18 const MmIdHelper& idHelper{m_idHelperSvc->mmIdHelper()};
19 m_data_mmg.resize((idHelper.detectorElement_hash_max()+1)*idHelper.gasGapMax());
20 }
21 if (m_idHelperSvc->hasSTGC()) {
22 const sTgcIdHelper& idHelper{m_idHelperSvc->stgcIdHelper()};
23 m_data_stg.resize((idHelper.detectorElement_hash_max() +1)*(idHelper.gasGapMax()*3 /*3 channel types*/));
24
25 }
26}
27
28std::size_t NswT0Data::identToModuleIdx(const Identifier& chan_id) const{
29 const IdentifierHash hash = m_idHelperSvc->detElementHash(chan_id);
30 if (m_idHelperSvc->isMM(chan_id)) {
31 const MmIdHelper& idHelper{m_idHelperSvc->mmIdHelper()};
32 return static_cast<std::size_t>(hash)*(idHelper.gasGapMax()) + (idHelper.gasGap(chan_id) -1);
33 } else if (m_idHelperSvc->issTgc(chan_id)) {
34 const sTgcIdHelper& idHelper{m_idHelperSvc->stgcIdHelper()};
35 return static_cast<std::size_t>(hash)*(idHelper.gasGapMax() * 3 /*3 channel types*/) +
36 (idHelper.gasGap(chan_id) -1 + idHelper.gasGapMax() * idHelper.channelType(chan_id));
37 }
38 THROW_EXCEPTION("NswT0Data() - No MM or sTGC identifier");
39 return -1;
40}
41
42void NswT0Data::setData(const Identifier& id, const float value){
43 std::size_t idx = identToModuleIdx(id);
45 std::size_t channelIdx{0};
46 if(m_idHelperSvc->isMM(id)){
47 const MmIdHelper& idHelper{m_idHelperSvc->mmIdHelper()};
48 if(data.at(idx).empty()) {
49 data.at(idx).resize(idHelper.channelMax(id));
50 }
51 channelIdx = idHelper.channel(id) -1;
52 } else {
53 const sTgcIdHelper& idHelper{m_idHelperSvc->stgcIdHelper()};
54 if(data.at(idx).empty()) {
55 data.at(idx).resize(idHelper.channelMax(id));
56 }
57 channelIdx = idHelper.channel(id) -1;
58 }
59 data.at(idx).at(channelIdx) = value;
60}
61
62std::optional<float> NswT0Data::getT0(const Identifier& id) const {
63 std::size_t idx = identToModuleIdx(id);
64
65 if (m_idHelperSvc->isMM(id)) {
66 std::size_t channelId = m_idHelperSvc->mmIdHelper().channel(id) -1;
67 if (m_data_mmg.size() <= idx || m_data_mmg[idx].size() <= channelId){
68 return std::nullopt;
69 }
70 return m_data_mmg[idx].at(channelId);
71 }
72 std::size_t channelId = m_idHelperSvc->stgcIdHelper().channel(id) - 1;
73 if(m_data_stg.size() <= idx || m_data_stg[idx].size() <= channelId) {
74 return std::nullopt;
75 }
76 return m_data_stg[idx].at(channelId);
77}
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
This is a "hash" representation of an Identifier.
static int gasGapMax()
static int channelMax()
int channel(const Identifier &id) const override
int gasGap(const Identifier &id) const override
get the hashes
size_type detectorElement_hash_max() const
Interface for Helper service that creates muon Identifiers and can be used to print Identifiers.
const Muon::IMuonIdHelperSvc * m_idHelperSvc
Definition NswT0Data.h:52
NswT0Data(const Muon::IMuonIdHelperSvc *idHelperSvc)
Definition NswT0Data.cxx:15
std::size_t identToModuleIdx(const Identifier &channelId) const
The calibration data is internally stored as two jagged vectors, one for MM the other for sTGC.
Definition NswT0Data.cxx:28
ChannelArray m_data_mmg
Definition NswT0Data.h:55
void setData(const Identifier &channelId, const float channelT0)
Set the t0 calibration constant for a given nsw channel.
Definition NswT0Data.cxx:42
std::vector< std::vector< std::optional< float > > > ChannelArray
Definition NswT0Data.h:54
ChannelArray m_data_stg
Definition NswT0Data.h:56
std::optional< float > getT0(const Identifier &channelId) const
Retrieve the t0 calibration constant for a given NSW channel.
Definition NswT0Data.cxx:62
int channelType(const Identifier &id) const
static int channelMax()
static int gasGapMax()
int channel(const Identifier &id) const override
int gasGap(const Identifier &id) const override
get the hashes
#define THROW_EXCEPTION(MESSAGE)
Definition throwExcept.h:10