ATLAS Offline Software
HedgehogBoard.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
5 #include <cassert>
6 #include <iostream>
7 #include <iomanip>
8 
9 
10 namespace Muon {
11  std::ostream& operator<<(std::ostream& ostr, const Muon::HedgehogBoard& board) {
12  ostr<<"boardID: "<<static_cast<int>(board.boardId())<<", ";
13  ostr<<"nLayers: "<<static_cast<int>(board.numTubeLayers())<<", ";
14  ostr<<"nTubesPerLay: "<<static_cast<int>(board.numTubesPerLayer())<<", ";
15  ostr<<"mapping: "<<std::endl;
16  for (uint8_t lay = board.numTubeLayers(); lay > 0; --lay) {
17  if (!(lay % 2))
18  ostr << " ";
19  for (uint8_t tube = 1; tube <= board.numTubesPerLayer(); ++tube) {
20  ostr << std::setw(5) << static_cast<int>(board.pairPin(lay, tube));
21  }
22  ostr << std::endl;
23  }
24  return ostr;
25  }
26 
29  const uint8_t nTubeLay,
30  const uint16_t boardId):
31  m_hedgePins{map},
32  m_nTubeLay{nTubeLay},
33  m_id{boardId} {
34  assert(nTubeLay == 3 || nTubeLay == 4);
35  m_nTubePerLay = m_hedgePins.size() / nTubeLay;
36  }
38  return boardId() < other.boardId();
39  }
40  uint16_t HedgehogBoard::boardId() const { return m_id; }
44  uint8_t HedgehogBoard::pinNumber(const TubeLayer& tubeLay) const {
45  return pinNumber(tubeLay.layer, tubeLay.tube);
46  }
48  uint8_t pin = (layer-1) * m_nTubePerLay + (tube -1) % m_nTubePerLay;
49  assert(pin < m_hedgePins.size());
50  return pin;
51  }
52  uint8_t HedgehogBoard::pairPin(const TubeLayer& tubeLay) const {
53  return m_hedgePins[pinNumber(tubeLay)];
54  }
56  return m_hedgePins[pinNumber(layer, tube)];
57  }
58 
60  return twinPair(tubeLay.layer, tubeLay.tube);
61  }
63  const uint8_t pin = pinNumber(layer, tube);
64  const uint8_t twin = m_hedgePins[pin];
65  TubeLayer result{};
66  if (pin != twin) {
67  result.layer = (twin - twin%m_nTubePerLay) / m_nTubePerLay + 1;
68  result.tube = (twin % m_nTubePerLay) + 1;
69  } else {
70  result.tube = tube;
71  result.layer = layer;
72  }
73  return result;
74  }
75  void HedgehogBoard::setHVDelayTime(const double hvTime) {
76  m_hvDelay = std::make_optional<double>(hvTime);
77  }
79  return m_hvDelay.has_value();
80  }
81  double HedgehogBoard::hvDelayTime() const {
82  return m_hvDelay.value_or(0.);
83  }
84 }
Muon::HedgehogBoard::twinPair
TubeLayer twinPair(const TubeLayer &tubeLay) const
Returns the tube & layer short circuited with the given tubeLayer.
Definition: HedgehogBoard.cxx:59
get_generator_info.result
result
Definition: get_generator_info.py:21
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:557
Muon::HedgehogBoard::HedgehogBoard
HedgehogBoard()=default
Default constructor.
Muon::HedgehogBoard::setHVDelayTime
void setHVDelayTime(const double hvTime)
Define a HV delay in the time of arrival between the primary & twin electronics signal.
Definition: HedgehogBoard.cxx:75
Muon::HedgehogBoard::m_id
uint16_t m_id
Definition: HedgehogBoard.h:115
Muon::HedgehogBoard::m_hvDelay
std::optional< double > m_hvDelay
Definition: HedgehogBoard.h:116
Muon::HedgehogBoard::operator<
bool operator<(const HedgehogBoard &other) const
Ordering of hedgehog boards, performed by Identifier.
Definition: HedgehogBoard.cxx:37
Muon::HedgehogBoard::pinNumber
uint8_t pinNumber(const TubeLayer &tubeLay) const
Returns the pinNumber of the tubeLayer.
Definition: HedgehogBoard.cxx:44
Muon
This class provides conversion from CSC RDO data to CSC Digits.
Definition: TrackSystemController.h:45
Muon::HedgehogBoard::pairPin
uint8_t pairPin(const TubeLayer &tubeLay) const
Returns the number of the pin that's twin to the tubeLayer If the pin is not short circuited,...
Definition: HedgehogBoard.cxx:52
Muon::HedgehogBoard::Mapping
std::array< uint8_t, nChPerBoard > Mapping
Definition: HedgehogBoard.h:37
Muon::TubeLayer
HedgehogBoard::TubeLayer TubeLayer
Definition: HedgehogBoard.cxx:27
Muon::HedgehogBoard::m_nTubeLay
uint8_t m_nTubeLay
Definition: HedgehogBoard.h:113
Muon::HedgehogBoard::boardId
uint16_t boardId() const
Returns the identifier of the hedgehog board.
Definition: HedgehogBoard.cxx:40
Muon::HedgehogBoard::TubeLayer::layer
uint8_t layer
Layer number [1- numTubeLayers()].
Definition: HedgehogBoard.h:61
xAOD::uint16_t
setWord1 uint16_t
Definition: eFexEMRoI_v1.cxx:88
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
Muon::HedgehogBoard
Helper struct to represent the High-voltage pins and a possible connection between them.
Definition: HedgehogBoard.h:32
HedgehogBoard.h
Muon::HedgehogBoard::m_hedgePins
Mapping m_hedgePins
Definition: HedgehogBoard.h:112
Muon::operator<<
std::ostream & operator<<(std::ostream &ostr, const Muon::HedgehogBoard &board)
Definition: HedgehogBoard.cxx:11
Muon::HedgehogBoard::data
const Mapping & data() const
Returns the underlying map.
Definition: HedgehogBoard.cxx:43
InDetDD::other
@ other
Definition: InDetDD_Defs.h:16
Muon::HedgehogBoard::hvDelayTime
double hvDelayTime() const
Returns the HV delay time.
Definition: HedgehogBoard.cxx:81
Muon::HedgehogBoard::m_nTubePerLay
uint8_t m_nTubePerLay
Definition: HedgehogBoard.h:114
Muon::HedgehogBoard::TubeLayer
Helper struct to return a tube & tube layer pair.
Definition: HedgehogBoard.h:57
Muon::HedgehogBoard::hasHVDelayTime
bool hasHVDelayTime() const
Returns whether the HedgehogBoard has a specifc delay time.
Definition: HedgehogBoard.cxx:78
Muon::HedgehogBoard::numTubeLayers
uint8_t numTubeLayers() const
Returns the number of tube layers 3 or 4.
Definition: HedgehogBoard.cxx:41
calibdata.tube
tube
Definition: calibdata.py:31
Muon::HedgehogBoard::TubeLayer::tube
uint8_t tube
Tube number [1- 24/numTubeLayers()].
Definition: HedgehogBoard.h:59
Muon::HedgehogBoard::numTubesPerLayer
uint8_t numTubesPerLayer() const
Returns the number of tubes per layer.
Definition: HedgehogBoard.cxx:42