ATLAS Offline Software
Classes | Public Types | Public Member Functions | Static Public Attributes | Private Attributes | List of all members
MdtMezzanineCard Class Reference

MdtMezzanineCard - Helper struct to represent the structure of a mezzanine card in a consistent way Each mezzanine card reads out in total 24 tubes of a chamber covering all tube layers of a chamber. More...

#include <MdtMezzanineCard.h>

Collaboration diagram for MdtMezzanineCard:

Classes

struct  OfflineCh
 Helper struct to pipe the result from the tdc -> offline channel translation. More...
 

Public Types

using MezzCardPtr = std::shared_ptr< const MdtMezzanineCard >
 
using Mapping = std::array< uint8_t, 24 >
 

Public Member Functions

 MdtMezzanineCard (const Mapping &tdcToTubeMap, uint8_t num_layers, uint8_t mezz_id)
 Standard constructor of the mezzanine card. More...
 
uint8_t tdcChannel (uint8_t tubeLay, uint8_t tube, MsgStream &msg) const
 returns the tdc channel number More...
 
uint8_t tubeNumber (uint8_t tubeLay, uint8_t tube) const
 returns the tube number More...
 
bool checkConsistency (MsgStream &msg) const
 checks whether the tdc mapping is complete. More...
 
uint8_t id () const
 returns mezzanine database identifier More...
 
uint8_t numTubeLayers () const
 returns the number of layers More...
 
uint8_t numTubesPerLayer () const
 returns the number of tubes per layer; More...
 
OfflineCh offlineTube (uint8_t tdc, MsgStream &msg) const
 
const MappingtdcToTubeMap () const
 Returns the underlying TDC -> Tube conversion map. More...
 
const MappingtubeToTdcMap () const
 Returns the underlying Tube -> Tdc conversion map. More...
 

Static Public Attributes

static constexpr uint8_t NOTSET = 250
 

Private Attributes

Mapping m_tdcToTubes {make_array<uint8_t, 24>(NOTSET)}
 Mapping of the tdc channels to the mezzanine tube number. More...
 
Mapping m_tubesToTdc {make_array<uint8_t, 24>(NOTSET)}
 Mapping of the mezzanine tube number to the tdc channel. More...
 
uint8_t m_nlay {0}
 Number of tube layers. More...
 
uint8_t m_nTubes {0}
 Number of tubes per layer. More...
 
uint8_t m_mezzId {0}
 Mezzanine database identifier. More...
 

Detailed Description

MdtMezzanineCard - Helper struct to represent the structure of a mezzanine card in a consistent way Each mezzanine card reads out in total 24 tubes of a chamber covering all tube layers of a chamber.

Given that a chamber has either 3 or 4 layers, 8 or 6 tubes per layer are read out by the cards. The assignment of the tdc channels to the tubes does not follow a distinct pattern:

       Layer 2:   (01) (03) (05) (07) (06) (04) (02) (00)
       Layer 1: (09) (11) (13) (15) (14) (12) (10) (08)
       Layer 0:   (17) (19) (21) (23) (22) (20) (18) (16)

To preserve a continuous memory layout and to ease the translation of online -> offline numbering scheme, the tubes are numbered sequentially Layer 2: (16) (17) (18) (19) (20) (21) (22) (23) Layer 1: (08) (09) (10) (11) (12) (13) (14) (15) Layer 0: (00) (01) (02) (03) (04) (05) (06) (07) The mapping between the two schemes is represented by a 24 long array, where the index is the channel number, tdc in the case of online -> offline, and tube number in the case of online to online.

Definition at line 34 of file MdtMezzanineCard.h.

Member Typedef Documentation

◆ Mapping

using MdtMezzanineCard::Mapping = std::array<uint8_t, 24>

Definition at line 39 of file MdtMezzanineCard.h.

◆ MezzCardPtr

Definition at line 38 of file MdtMezzanineCard.h.

Constructor & Destructor Documentation

◆ MdtMezzanineCard()

MdtMezzanineCard::MdtMezzanineCard ( const Mapping tdcToTubeMap,
uint8_t  num_layers,
uint8_t  mezz_id 
)

Standard constructor of the mezzanine card.

Parameters
tdcToTubeMaparray mapping the tdc channels to the tube numbers covered by the card
num_layersnumber of tube layers (3 or 4)
mezz_idGlobal identifier number to map the card in the online <-> offline conversion

Should be 6 or 8 tubes per layer

Fill the map from tdc -> tube number

Definition at line 39 of file MdtMezzanineCard.cxx.

43  m_nTubes = m_tdcToTubes.size() / num_layers;
45  for (unsigned int tdc = 0; tdc < m_tdcToTubes.size(); ++tdc) {
46  uint8_t tube = m_tdcToTubes[tdc];
47  if (tube < m_tubesToTdc.size())
48  m_tubesToTdc[tube] = tdc;
49  }
50 }

Member Function Documentation

◆ checkConsistency()

bool MdtMezzanineCard::checkConsistency ( MsgStream &  msg) const

checks whether the tdc mapping is complete.

I.e. – all channels are uniquely defined – number of layers is 4 or 3

Check that all channels are actually set

Definition at line 52 of file MdtMezzanineCard.cxx.

52  {
53  const bool debug = (log.level() <= MSG::VERBOSE);
54  if (debug) {
55  log << MSG::VERBOSE << " Check consistency of mezzanine card "
56  << static_cast<int>(id()) << "." << endmsg;
57  }
58  if (numTubeLayers() != 3 && numTubeLayers() != 4) {
59  log << MSG::ERROR << "Mezzanine card " << static_cast<int>(id())
60  << " has invalid many tube layers "
61  << static_cast<int>(numTubeLayers()) << endmsg;
62  return false;
63  }
65  std::set<uint8_t> uniqueSet{};
66  std::copy_if(m_tdcToTubes.begin(), m_tdcToTubes.end(),
67  std::inserter(uniqueSet, uniqueSet.end()),
68  [](const uint8_t ch) { return ch != NOTSET; });
69  unsigned int unmapped =
70  std::count_if(m_tdcToTubes.begin(), m_tdcToTubes.end(),
71  [](const uint8_t ch) { return ch == NOTSET; });
72  if ((uniqueSet.size() + unmapped) != m_tdcToTubes.size()) {
73  log << MSG::ERROR
74  << "Mezzanine card has unassigned tdc -> tube channels " << endmsg;
75  log << MSG::ERROR << "Mapped channels " << uniqueSet.size()
76  << " dead channels: " << unmapped << std::endl;
77  log << MSG::ERROR << "Please check " << (*this) << endmsg;
78  return false;
79  }
80  if (unmapped == m_tdcToTubes.size()) {
81  log << MSG::ERROR
82  << "Mezzanine card does not have any associated channel " << endmsg;
83  log << MSG::ERROR << "Please check " << (*this) << endmsg;
84  }
85  uniqueSet.clear();
86  std::copy_if(m_tubesToTdc.begin(), m_tubesToTdc.end(),
87  std::inserter(uniqueSet, uniqueSet.end()),
88  [](const uint8_t ch) { return ch != NOTSET; });
89  unmapped = std::count_if(m_tubesToTdc.begin(), m_tubesToTdc.end(),
90  [](const uint8_t ch) { return ch == NOTSET; });
91  if ((uniqueSet.size() + unmapped) != m_tubesToTdc.size()) {
92  log << MSG::ERROR << " Mezzanine card maps tubes -> tdc inconsitently "
93  << endmsg;
94  log << MSG::ERROR << "Mapped channels " << uniqueSet.size()
95  << " dead channels: " << unmapped << std::endl;
96  log << MSG::ERROR << " Please check " << (*this) << endmsg;
97  return false;
98  }
99  if (debug) {
100  log << MSG::VERBOSE << " All checks passed " << std::endl
101  << (*this) << endmsg;
102  }
103  return true;
104 }

◆ id()

uint8_t MdtMezzanineCard::id ( ) const
inline

returns mezzanine database identifier

Definition at line 64 of file MdtMezzanineCard.h.

64 { return m_mezzId; }

◆ numTubeLayers()

uint8_t MdtMezzanineCard::numTubeLayers ( ) const
inline

returns the number of layers

Definition at line 66 of file MdtMezzanineCard.h.

66 { return m_nlay; }

◆ numTubesPerLayer()

uint8_t MdtMezzanineCard::numTubesPerLayer ( ) const
inline

returns the number of tubes per layer;

Definition at line 68 of file MdtMezzanineCard.h.

68 { return m_nTubes; }

◆ offlineTube()

OfflineCh MdtMezzanineCard::offlineTube ( uint8_t  tdc,
MsgStream &  msg 
) const

Do not offset the tube as the tube number needs to be shifted by the first tube of the card

Definition at line 126 of file MdtMezzanineCard.cxx.

126  {
127  if (tdc >= m_tdcToTubes.size()) {
128  msg << MSG::WARNING << " Tdc channel is out of range "
129  << static_cast<int>(tdc) << endmsg;
130  return {};
131  }
132  uint8_t globTubeNum = m_tdcToTubes[tdc];
133  uint8_t tube = globTubeNum % numTubesPerLayer();
134  uint8_t lay = (globTubeNum - tube) / numTubesPerLayer();
135  OfflineCh ret{};
138  ret.tube = tube;
139  ret.layer = lay + 1;
140  ret.isValid = globTubeNum != NOTSET;
141  return ret;
142 }

◆ tdcChannel()

uint8_t MdtMezzanineCard::tdcChannel ( uint8_t  tubeLay,
uint8_t  tube,
MsgStream &  msg 
) const

returns the tdc channel number

Parameters
tubeLaytube layer (1-4)
tubeglobal number of the tube in a layer (1-120)

Definition at line 106 of file MdtMezzanineCard.cxx.

107  {
108  if (tubeLay > numTubeLayers()) {
109  msg << MSG::WARNING << "MdtMezzanineCard::tdcChannel() -- Tube layer "
110  << static_cast<int>(tubeLay) << " is out of range. Max allowed "
111  << static_cast<int>(numTubeLayers()) << endmsg;
112  return NOTSET;
113  }
114  uint8_t globTubeNum = tubeNumber(tubeLay, tube);
115  if (msg.level() <= MSG::VERBOSE) {
116  msg << "MdtMezzanineCard::tdcChannel() -- Resolved layer "
117  << static_cast<int>(tubeLay) << " & tube " << static_cast<int>(tube)
118  << " to " << static_cast<int>(globTubeNum) << endmsg;
119  }
120  return m_tubesToTdc[globTubeNum];
121 }

◆ tdcToTubeMap()

const Mapping& MdtMezzanineCard::tdcToTubeMap ( ) const
inline

Returns the underlying TDC -> Tube conversion map.

Definition at line 80 of file MdtMezzanineCard.h.

80 { return m_tdcToTubes; }

◆ tubeNumber()

uint8_t MdtMezzanineCard::tubeNumber ( uint8_t  tubeLay,
uint8_t  tube 
) const

returns the tube number

Parameters
tubeLaytube layer (1-4)
tubeglobal number of the tube in a layer (1-120)

Definition at line 122 of file MdtMezzanineCard.cxx.

122  {
123  return ((tube - 1) % numTubesPerLayer()) +
124  (numTubesPerLayer() * (tubeLay - 1));
125 }

◆ tubeToTdcMap()

const Mapping& MdtMezzanineCard::tubeToTdcMap ( ) const
inline

Returns the underlying Tube -> Tdc conversion map.

Definition at line 82 of file MdtMezzanineCard.h.

82 { return m_tubesToTdc; }

Member Data Documentation

◆ m_mezzId

uint8_t MdtMezzanineCard::m_mezzId {0}
private

Mezzanine database identifier.

Definition at line 94 of file MdtMezzanineCard.h.

◆ m_nlay

uint8_t MdtMezzanineCard::m_nlay {0}
private

Number of tube layers.

Definition at line 90 of file MdtMezzanineCard.h.

◆ m_nTubes

uint8_t MdtMezzanineCard::m_nTubes {0}
private

Number of tubes per layer.

Definition at line 92 of file MdtMezzanineCard.h.

◆ m_tdcToTubes

Mapping MdtMezzanineCard::m_tdcToTubes {make_array<uint8_t, 24>(NOTSET)}
private

Mapping of the tdc channels to the mezzanine tube number.

Definition at line 86 of file MdtMezzanineCard.h.

◆ m_tubesToTdc

Mapping MdtMezzanineCard::m_tubesToTdc {make_array<uint8_t, 24>(NOTSET)}
private

Mapping of the mezzanine tube number to the tdc channel.

Definition at line 88 of file MdtMezzanineCard.h.

◆ NOTSET

constexpr uint8_t MdtMezzanineCard::NOTSET = 250
staticconstexpr

Definition at line 36 of file MdtMezzanineCard.h.


The documentation for this class was generated from the following files:
sendEI_SPB.ch
ch
Definition: sendEI_SPB.py:35
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:575
MdtMezzanineCard::tdcToTubeMap
const Mapping & tdcToTubeMap() const
Returns the underlying TDC -> Tube conversion map.
Definition: MdtMezzanineCard.h:80
MdtMezzanineCard::numTubesPerLayer
uint8_t numTubesPerLayer() const
returns the number of tubes per layer;
Definition: MdtMezzanineCard.h:68
MdtMezzanineCard::numTubeLayers
uint8_t numTubeLayers() const
returns the number of layers
Definition: MdtMezzanineCard.h:66
MdtMezzanineCard::m_tdcToTubes
Mapping m_tdcToTubes
Mapping of the tdc channels to the mezzanine tube number.
Definition: MdtMezzanineCard.h:86
MdtMezzanineCard::NOTSET
static constexpr uint8_t NOTSET
Definition: MdtMezzanineCard.h:36
MdtMezzanineCard::id
uint8_t id() const
returns mezzanine database identifier
Definition: MdtMezzanineCard.h:64
MdtMezzanineCard::tubeNumber
uint8_t tubeNumber(uint8_t tubeLay, uint8_t tube) const
returns the tube number
Definition: MdtMezzanineCard.cxx:122
MdtMezzanineCard::m_nlay
uint8_t m_nlay
Number of tube layers.
Definition: MdtMezzanineCard.h:90
ret
T ret(T t)
Definition: rootspy.cxx:260
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
MdtMezzanineCard::m_mezzId
uint8_t m_mezzId
Mezzanine database identifier.
Definition: MdtMezzanineCard.h:94
AnalysisUtils::copy_if
Out copy_if(In first, const In &last, Out res, const Pred &p)
Definition: IFilterUtils.h:30
MdtMezzanineCard::m_nTubes
uint8_t m_nTubes
Number of tubes per layer.
Definition: MdtMezzanineCard.h:92
debug
const bool debug
Definition: MakeUncertaintyPlots.cxx:53
MdtMezzanineCard::m_tubesToTdc
Mapping m_tubesToTdc
Mapping of the mezzanine tube number to the tdc channel.
Definition: MdtMezzanineCard.h:88
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
python.Constants.VERBOSE
int VERBOSE
Definition: Control/AthenaCommon/python/Constants.py:14
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7
calibdata.tube
tube
Definition: calibdata.py:31
HitType::unmapped
@ unmapped
doL1CaloHVCorrections.num_layers
num_layers
retrieve num layers and layer names (from new or ref hv input)
Definition: doL1CaloHVCorrections.py:379