ATLAS Offline Software
MdtROD_Decoder.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // The data format is described in ATL-DAQ-2003-023 / ATL-COM-MUON-2003-011
6 // https://cds.cern.ch/record/685552
7 // http://www.nikhef.nl/pub/experiments/atlas/daq/mrod/mrodprr/daq-2003-023.pdf
8 
9 #include "MdtROD_Decoder.h"
10 
11 #include <algorithm>
12 
13 #include "eformat/Issue.h"
14 
15 using eformat::helper::SourceIdentifier;
16 
17 static const InterfaceID IID_IMdtROD_Decoder("MdtROD_Decoder", 1, 0);
18 
21 MdtROD_Decoder::MdtROD_Decoder(const std::string& type, const std::string& name, const IInterface* parent) :
23  declareInterface<MdtROD_Decoder>(this);
24 
25  declareProperty("SpecialROBNumber", m_specialROBNumber = -1);
26 }
27 
28 const InterfaceID& MdtROD_Decoder::interfaceID() { return IID_IMdtROD_Decoder; }
29 
31  ATH_CHECK(m_idHelperSvc.retrieve());
32 
33  // Here the mapping service has to be initialized
34  m_hid2re = std::make_unique<MDT_Hid2RESrcID>();
35  ATH_CHECK(m_hid2re->set(&m_idHelperSvc->mdtIdHelper()));
37 
38  return StatusCode::SUCCESS;
39 }
40 
42  if (m_nCache > 0 || m_nNotCache > 0) {
43  const float cacheFraction = ((float)m_nCache) / ((float)(m_nCache + m_nNotCache));
44  ATH_MSG_INFO("Fraction of fills that use the cache = " << cacheFraction);
45  }
46 
47  return StatusCode::SUCCESS;
48 }
49 
51 #define WARNING_WITH_LINE(msg) ATH_MSG_WARNING(__func__ << "():" << __LINE__<< " " << msg)
52  // m_debug = (m_log.level() <= MSG::DEBUG); // use to control if output debug info.
53  // decoding classes
54  MdtCsmReadOut csmReadOut;
55  MdtAmtReadOut amtReadOut;
56  MdtHptdcReadOut hptdcReadOut;
57 
58  ATH_MSG_DEBUG("fillCollection: starting");
59  uint32_t wordPos = 0;
60 
61  // Check the ROB and ROD fragment for lenght and version consistency. E.P.
62 
63  try {
64  robFrag.check();
65  } catch (const eformat::Issue& ex) {
66  WARNING_WITH_LINE(ex.what());
67  return StatusCode::FAILURE; // error in fragment - we search for no collection
68  }
69 
70  // Check the ROB status word for truncation or corruption E.P.
71 
72  uint32_t nstat = robFrag.nstatus();
73 
74  if (nstat) {
75  const uint32_t* it{nullptr};
76  robFrag.status(it);
77 
78  if (*it) {
79  WARNING_WITH_LINE("Error in ROB status word: 0x" << std::hex << *it << std::dec);
80 
81  // the status word analysis in case of eformat version > 3.0
82  // if ( (robFrag.version() >> 16) > 0x0300 ) {
83 
84  // various checks to be defined
85 
86  //}
87  return StatusCode::FAILURE;
88  }
89  }
90 
91  // here go the checks on the ROD header
92 
93  const unsigned int size = robFrag.rod_ndata(); // Think this is right - it was size() before. Ed. // Yes it is... Enrico
94 
95  // FIXME - Removed debug output for the moment. EJWM
96  // if (m_debug) log << MSG::DEBUG
97  // << "Collection identifier : " << csmOfflineId.getString() << endmsg;
98  //
99  // if (m_debug) log << MSG::DEBUG
100  // << "**********Decoder dumping the words******** " << endmsg;
101  // if (size > 0) {
102  // log << MSG::DEBUG << "The size of this ROD-read is " << size << endmsg;
103  // for (unsigned int i=0; i < size; i++)
104  // if (m_debug) log << MSG::DEBUG << "word " << i
105  // << " = " << MSG::hex << robFrag[i] << MSG::dec << endmsg;
106  // }
107  // else {
108  // if (m_debug) log << MSG::DEBUG << " Buffer size 0 ! "
109  // << endmsg;
110  // return;
111  // }
112 
113  leading_amt_map leadingHitMap{};
114 
115  // Decode the SourceId from the ROD Header
116  SourceIdentifier sid(robFrag.rod_source_id());
117 
119  cabling_data.subdetectorId = sid.subdetector_id();
120  cabling_data.mrod = sid.module_id();
121 
122  // Get the first word of a buffer:
124  robFrag.rod_data(vint);
125 
126  ATH_MSG_DEBUG("**********Decoder dumping the words******** ");
127 
128  if (size > 0) {
129  ATH_MSG_DEBUG("The size of this ROD-read is ");
130  for (unsigned int i = 0; i < size; i++) ATH_MSG_DEBUG("word " << i << " = " << MSG::hex << vint[i] << MSG::dec);
131  } else {
132  WARNING_WITH_LINE("Buffer size 0 ! ");
133  return StatusCode::FAILURE;
134  }
135 
136  csmReadOut.decodeWord(vint[wordPos]);
137 
138  if (csmReadOut.is_BOB()) {
139  ATH_MSG_DEBUG("Found the beginning of buffer ");
140  // Check that Lvl1d matches the one from the ROD header
141  ATH_MSG_DEBUG("Level 1 Id : " << csmReadOut.lvl1Id());
142  } else {
143  ATH_MSG_ERROR(" Beginning of block not found ! ");
144  ATH_MSG_ERROR(" Subdetector, ROD ID: 0x" << MSG::hex << cabling_data.subdetectorId << MSG::dec << ", 0x" << cabling_data.mrod
145  << MSG::dec);
146  }
147 
148  if (size < 2) {
149  WARNING_WITH_LINE("Too few ROD words: " << size);
150  return StatusCode::FAILURE;
151  }
152  ++wordPos;
153  csmReadOut.decodeWord(vint[wordPos]);
154  if (csmReadOut.is_EOB()) {
155  ATH_MSG_WARNING("No CSM data ROD ID: 0x" << MSG::hex << cabling_data.subdetectorId <<
156  ", 0x" << static_cast<unsigned int>(cabling_data.mrod) << MSG::dec);
157  return StatusCode::SUCCESS;
158  }
159 
161  const MuonMDT_CablingMap* readCdo{*readHandle};
162  if (!readCdo) {
163  WARNING_WITH_LINE("Null pointer to the read conditions object");
164  return StatusCode::FAILURE;
165  }
166  auto& msg = msgStream();
167  while (!csmReadOut.is_EOB()) {
168  while ((!csmReadOut.is_BOL()) && (!csmReadOut.is_EOB())) {
169  wordPos += 1;
170  if (wordPos >= size) {
171  WARNING_WITH_LINE("failure: data corrupted");
172  return StatusCode::FAILURE;
173  }
174  csmReadOut.decodeWord(vint[wordPos]);
175  }
176 
177  if (csmReadOut.is_BOL()) {
178  ATH_MSG_DEBUG("Found the Beginnning of Link ");
179  } else if (csmReadOut.is_EOB()) {
180  WARNING_WITH_LINE(" failure: collection not found");
181  return StatusCode::FAILURE;
182  }
183 
184  // uint16_t subdetId = 0x61;
185  // uint16_t mrodId = csmReadOut.mrodId();
186 
187  cabling_data.csm = csmReadOut.csmId();
188 
189  // Get the offline identifier from the MDT cabling service
190  // TDC and Tube identifier are dummy, only the chamber map is needed here
191 
192  ATH_MSG_DEBUG("subdetId : " << cabling_data.subdetectorId << " "
193  << "mrodId : " << cabling_data.mrod << " "
194  << "csmId : " << cabling_data.csm);
195 
196  cabling_data.tdcId = 0xff;
197  cabling_data.channelId = 0xff;
198 
199  Identifier moduleId{0};
200  IdentifierHash idHash{0};
201  bool cab = readCdo->getOfflineId(cabling_data, msg) && readCdo->getMultiLayerCode(cabling_data, moduleId, idHash, msg);
202 
203  ATH_MSG_DEBUG("getOfflineIdfromOnlineID result: " << cabling_data);
204 
205  if (!cab) {
206  ATH_MSG_WARNING("Cabling not understood");
207  ATH_MSG_WARNING("Skip decoding of CSM link, subdetId : " << MSG::hex << std::showbase << cabling_data.subdetectorId << " "
208  << "mrodId : " << cabling_data.mrod << " " << MSG::dec
209  << "csmId : " << cabling_data.csm);
210  // assert(false);
211  // continue; // Go to next link instead of crashing (here or later) E.P.
212 
213  // In case of failure this produce an infinite loop because
214  // you do not decode the next word before doing "continue".
215  // I commented it out.
216 
217  // The previous implementation was ok, the bad BOL was simply
218  // skipped. This means that you skip decoding this chamber.
219 
220  // I'm not sure how you can recover this error. I think you
221  // simple have to store the error condition in the
222  // StatusCode word returned to the client.
223  // } else if (!isValid) {
224  // ATH_MSG_DEBUG("Offline identifier returned by MdtIdHelper is not valid");
225  // ATH_MSG_DEBUG("Skip decoding of CSM link, subdetId : "
226  // << MSG::hex << std::showbase << subdetId << " "
227  // << "mrodId : " << mrodId << " " << MSG::dec
228  // << "csmId : " << csmId);
229 
230  } else {
231  // EJWM Removed: if ( moduleId == csmOfflineId)
232  // Can't see how to keep that in here now, and also not really sure what the point of it is
233  // Might be wrong though - job for experts to look into.
234  // FIXME
235 
236  const bool isHpTdc = m_idHelperSvc->hasHPTDC(moduleId);
237 
238  // Create MdtCsm and try to get it from the cache via the IDC_WriteHandle
239  std::unique_ptr<MdtCsm> collection{nullptr};
240  MdtCsmContainer::IDC_WriteHandle lock = rdoIDC.getWriteHandle(idHash);
241  if (lock.alreadyPresent()) {
242  ATH_MSG_DEBUG("collections already found, do not convert");
243  ++m_nCache;
244  } else {
245  ATH_MSG_DEBUG(" Collection ID = " << m_idHelperSvc->toString(moduleId) << " does not exist, create it ");
246  collection = std::make_unique<MdtCsm>(moduleId, idHash);
247  ++m_nNotCache;
248  }
249 
250  // Set values (keep Identifier and IdentifierHash the same though)
251  if (collection)
252  collection->set_values(collection->identify(), collection->identifyHash(), cabling_data.subdetectorId, cabling_data.mrod,
253  cabling_data.csm);
254 
255  wordPos += 1;
256  if (wordPos >= size) {
257  WARNING_WITH_LINE("failure: data corrupted");
258  return StatusCode::FAILURE;
259  }
260  csmReadOut.decodeWord(vint[wordPos]);
261  if (!csmReadOut.is_TLP()) { ATH_MSG_DEBUG("failure: TDC Link Present not found "); }
262 
263  // Loop on the TDCs blocks, if present
264  wordPos += 1;
265  if (wordPos >= size) {
266  WARNING_WITH_LINE("failure: data corrupted");
267  return StatusCode::FAILURE;
268  }
269  isHpTdc ? hptdcReadOut.decodeWord(vint[wordPos]) : amtReadOut.decodeWord(vint[wordPos]);
270  csmReadOut.decodeWord(vint[wordPos]);
271  while (!csmReadOut.is_TWC()) {
272  uint16_t tdcNum = isHpTdc ? hptdcReadOut.tdcId() : amtReadOut.tdcId();
273 
274  ATH_MSG_DEBUG(" Decoding data from TDC number : " << tdcNum);
275 
276  // increase word count by one
277  wordPos += 1;
278  if (wordPos >= size) {
279  WARNING_WITH_LINE("failure: data corrupted");
280  return StatusCode::FAILURE;
281  }
282 
283  isHpTdc ? hptdcReadOut.decodeWord(vint[wordPos]) : amtReadOut.decodeWord(vint[wordPos]);
284 
285  std::unique_ptr<MdtAmtHit> amtHit{nullptr};
286  // Loop on the TDC data words and create the corresponding
287  // RDO's
288  while (!((isHpTdc ? hptdcReadOut.is_EOT() : amtReadOut.is_EOT()) ||
289  (isHpTdc ? hptdcReadOut.is_BOT() : amtReadOut.is_BOT()) ||
290  (isHpTdc ? csmReadOut.is_TWC() : amtReadOut.is_TWC()))) {
291  isHpTdc ? hptdcReadOut.decodeWord(vint[wordPos]) : amtReadOut.decodeWord(vint[wordPos]);
292  int tdcCounts;
294  // decode the tdc channel number
295 
296  // Check whether this channel has already been
297  // created for this CSM
298 
299  if ((isHpTdc ? hptdcReadOut.is_TSM() : amtReadOut.is_TSM()) &&
300  (isHpTdc ? hptdcReadOut.isLeading() : amtReadOut.isLeading()) && collection) {
301  chanNum = isHpTdc ? hptdcReadOut.channel() : amtReadOut.channel();
302 
303  amtHit = std::make_unique<MdtAmtHit>(tdcNum, chanNum);
304  amtHit->setValues((isHpTdc ? hptdcReadOut.coarse() : amtReadOut.coarse()),
305  (isHpTdc ? hptdcReadOut.fine() : amtReadOut.fine()), 0);
306  amtHit->addData(vint[wordPos]);
307  leadingHitMap.insert(std::make_pair(chanNum, std::move(amtHit)));
308  } else if ((isHpTdc ? hptdcReadOut.is_TSM() : amtReadOut.is_TSM()) &&
309  !(isHpTdc ? hptdcReadOut.isLeading() : amtReadOut.isLeading()) && collection) {
310  chanNum = isHpTdc ? hptdcReadOut.channel() : amtReadOut.channel();
311  leading_amt_map::iterator chanPosition = leadingHitMap.find(chanNum);
312 
313  if (chanPosition != leadingHitMap.end()) {
314  // get the amt hit corresponding to the first data word
315  amtHit = std::move(chanPosition->second);
316  uint16_t coarse = amtHit->coarse();
317  uint16_t fine = amtHit->fine();
318  int tdcCountsFirst = coarse * 32 + fine;
319 
320  // get the tdc counts of the current data word
321  tdcCounts =
322  isHpTdc ? hptdcReadOut.coarse() * 32 + hptdcReadOut.fine() : amtReadOut.coarse() * 32 + amtReadOut.fine();
323  int width = tdcCounts - tdcCountsFirst;
324 
325  amtHit->setValues(coarse, fine, width);
326  amtHit->addData(vint[wordPos]);
327  collection->push_back(std::move(amtHit));
328 
329  // delete the channel from the map
330  leadingHitMap.erase(chanPosition);
331  } else {
332  ATH_MSG_DEBUG("failure: corresponding leading edge not found for the trailing edge tdc: " << tdcNum << " chan: "
333  << chanNum);
334  }
335 
336  } else if ((isHpTdc ? hptdcReadOut.is_TCM() : amtReadOut.is_TCM()) && collection) {
337  uint16_t chanNum = isHpTdc ? hptdcReadOut.channel() : amtReadOut.channel();
338 
339  amtHit = std::make_unique<MdtAmtHit>(tdcNum, chanNum);
340  amtHit->setValues((isHpTdc ? hptdcReadOut.coarse() : amtReadOut.coarse()),
341  (isHpTdc ? hptdcReadOut.fine() : amtReadOut.fine()),
342  (isHpTdc ? hptdcReadOut.width() : amtReadOut.width()));
343  amtHit->addData(vint[wordPos]);
344  collection->push_back(std::move(amtHit));
345  }
346 
347  // increase word count by one
348  wordPos += 1;
349  if (wordPos >= size) {
350  WARNING_WITH_LINE("failure: data corrupted");
351  return StatusCode::FAILURE;
352  }
353 
354  isHpTdc ? hptdcReadOut.decodeWord(vint[wordPos]) : amtReadOut.decodeWord(vint[wordPos]);
355 
356  if (isHpTdc) csmReadOut.decodeWord(vint[wordPos]);
357 
358  } // End of loop on AMTs
359 
360  if (collection) {
361  for (auto& itHit : leadingHitMap) { collection->push_back(std::move(itHit.second)); }
362  }
363  leadingHitMap.clear();
364 
365  // increase the decoding position only if it's end of TDC
366  // i.e. not operating in TDC trailer suppression mode
367  if ((isHpTdc ? hptdcReadOut.is_EOT() : amtReadOut.is_EOT())) {
368  wordPos += 1;
369  if (wordPos >= size) {
370  WARNING_WITH_LINE("failure: data corrupted");
371  return StatusCode::FAILURE;
372  }
373  }
374  csmReadOut.decodeWord(vint[wordPos]);
375  isHpTdc ? hptdcReadOut.decodeWord(vint[wordPos]) : amtReadOut.decodeWord(vint[wordPos]);
376  } // End of loop on TDCs
377  if (collection) ATH_CHECK(lock.addOrDelete(std::move(collection)));
378  // Collection has been found, go out
379  // return;
380  } // Check for the chamber offline id = collection offline id
381  wordPos += 1;
382  if (wordPos >= size) {
383  WARNING_WITH_LINE("Data corrupted");
384  return StatusCode::FAILURE;
385  }
386  csmReadOut.decodeWord(vint[wordPos]);
387  }
388  return StatusCode::SUCCESS;
389 }
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
MdtCsmReadOut::is_TWC
bool is_TWC() const
Definition: MdtCsmReadOut.h:63
MdtAmtReadOut::fine
uint16_t fine()
Definition: MdtAmtReadOut.h:106
MdtCsmReadOut::decodeWord
void decodeWord(uint32_t dataWord)
Definition: MdtCsmReadOut.cxx:26
MdtROD_Decoder::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: MdtROD_Decoder.h:61
MdtHptdcReadOut::is_TSM
bool is_TSM() const
Definition: MdtHptdcReadOut.h:79
MdtHptdcReadOut::decodeWord
void decodeWord(uint32_t dataWord)
Definition: MdtHptdcReadOut.cxx:21
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
MdtAmtReadOut::channel
uint16_t channel()
Definition: MdtAmtReadOut.h:104
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
IdentifiableContainerMT::getWriteHandle
IDC_WriteHandle getWriteHandle(IdentifierHash hash)
Definition: IdentifiableContainerMT.h:251
MdtAmtReadOut
Definition: MdtAmtReadOut.h:15
MdtROD_Decoder::finalize
virtual StatusCode finalize() override
Definition: MdtROD_Decoder.cxx:41
MdtHptdcReadOut::coarse
uint16_t coarse() const
Definition: MdtHptdcReadOut.h:91
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
MdtROD_Decoder::m_hid2re
std::unique_ptr< MDT_Hid2RESrcID > m_hid2re
Definition: MdtROD_Decoder.h:58
Issue
Configuration Issue
Definition: PscIssues.h:31
WARNING_WITH_LINE
#define WARNING_WITH_LINE(msg)
skel.it
it
Definition: skel.GENtoEVGEN.py:423
MdtAmtReadOut::is_TCM
bool is_TCM()
Definition: MdtAmtReadOut.h:91
MdtCsmReadOut::is_TLP
bool is_TLP() const
Definition: MdtCsmReadOut.h:62
createCablingJSON.cabling_data
dictionary cabling_data
Definition: createCablingJSON.py:18
MdtCsmContainer
This container provides acces to the MDT RDOs.
Definition: MdtCsmContainer.h:22
IdentifiableContainerMT::IDC_WriteHandle::alreadyPresent
bool alreadyPresent()
Definition: IdentifiableContainerMT.h:62
MdtROD_Decoder::m_readKey
SG::ReadCondHandleKey< MuonMDT_CablingMap > m_readKey
Definition: MdtROD_Decoder.h:59
MdtHptdcReadOut::width
uint16_t width() const
Definition: MdtHptdcReadOut.h:93
MdtHptdcReadOut::isLeading
bool isLeading() const
Definition: MdtHptdcReadOut.h:95
MdtCsmReadOut::is_BOL
bool is_BOL() const
Definition: MdtCsmReadOut.h:61
MdtHptdcReadOut::fine
uint16_t fine() const
Definition: MdtHptdcReadOut.h:92
MdtCsmReadOut::csmId
uint16_t csmId() const
Definition: MdtCsmReadOut.h:74
MdtAmtReadOut::tdcId
uint16_t tdcId()
Definition: MdtAmtReadOut.h:99
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
MdtCsmReadOut
Definition: MdtCsmReadOut.h:15
MdtCsmReadOut::lvl1Id
uint32_t lvl1Id() const
Definition: MdtCsmReadOut.h:67
OFFLINE_FRAGMENTS_NAMESPACE::PointerType
const DataType * PointerType
Definition: RawEvent.h:25
MuonMDT_CablingMap
Definition: MuonMDT_CablingMap.h:24
MdtROD_Decoder::interfaceID
static const InterfaceID & interfaceID()
AlgTool InterfaceID.
Definition: MdtROD_Decoder.cxx:28
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
MdtHptdcReadOut::is_BOT
bool is_BOT() const
Definition: MdtHptdcReadOut.h:75
checkCoolLatestUpdate.chanNum
chanNum
Definition: checkCoolLatestUpdate.py:27
xAOD::uint16_t
setWord1 uint16_t
Definition: eFexEMRoI_v1.cxx:88
MdtHptdcReadOut::is_EOT
bool is_EOT() const
Definition: MdtHptdcReadOut.h:77
MdtHptdcReadOut::is_TCM
bool is_TCM() const
Definition: MdtHptdcReadOut.h:81
eformat::ROBFragment
Definition: L1CaloBsDecoderUtil.h:12
lumiFormat.i
int i
Definition: lumiFormat.py:92
MdtHptdcReadOut
Definition: MdtHptdcReadOut.h:15
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
MdtHptdcReadOut::tdcId
uint16_t tdcId() const
Definition: MdtHptdcReadOut.h:86
MdtROD_Decoder.h
IdentifiableContainerMT::IDC_WriteHandle
Definition: IdentifiableContainerMT.h:34
MdtCsmReadOut::is_EOB
bool is_EOB() const
Definition: MdtCsmReadOut.h:64
test_pyathena.parent
parent
Definition: test_pyathena.py:15
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
MdtCablingData
Definition: MdtCablingData.h:82
MdtROD_Decoder::MdtROD_Decoder
MdtROD_Decoder(const std::string &type, const std::string &name, const IInterface *parent)
constructor
Definition: MdtROD_Decoder.cxx:21
MdtROD_Decoder::initialize
virtual StatusCode initialize() override
Definition: MdtROD_Decoder.cxx:30
MdtCsmReadOut::is_BOB
bool is_BOB() const
Definition: MdtCsmReadOut.h:59
MdtAmtReadOut::decodeWord
void decodeWord(uint32_t dataWord)
Definition: MdtAmtReadOut.cxx:29
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
IdentifiableContainerMT::IDC_WriteHandle::addOrDelete
StatusCode addOrDelete(std::unique_ptr< T > ptr)
Definition: IdentifiableContainerMT.h:56
MdtAmtReadOut::is_TWC
bool is_TWC()
Definition: MdtAmtReadOut.h:96
MdtAmtReadOut::coarse
uint16_t coarse()
Definition: MdtAmtReadOut.h:105
Base_Fragment.width
width
Definition: Sherpa_i/share/common/Base_Fragment.py:59
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
MdtROD_Decoder::m_specialROBNumber
int m_specialROBNumber
TMP special ROB number for sector13 runs.
Definition: MdtROD_Decoder.h:64
MdtAmtReadOut::is_EOT
bool is_EOT()
Definition: MdtAmtReadOut.h:85
AthAlgTool
Definition: AthAlgTool.h:26
IdentifierHash
Definition: IdentifierHash.h:38
MdtAmtReadOut::is_TSM
bool is_TSM()
Definition: MdtAmtReadOut.h:89
MdtAmtReadOut::isLeading
bool isLeading()
Definition: MdtAmtReadOut.h:111
MdtAmtReadOut::is_BOT
bool is_BOT()
Definition: MdtAmtReadOut.h:83
readCCLHist.float
float
Definition: readCCLHist.py:83
MdtROD_Decoder::fillCollections
StatusCode fillCollections(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment &robFrag, MdtCsmContainer &rdoIDC) const
Definition: MdtROD_Decoder.cxx:50
MdtAmtReadOut::width
uint16_t width()
Definition: MdtAmtReadOut.h:107
MdtHptdcReadOut::channel
uint16_t channel() const
Definition: MdtHptdcReadOut.h:90
MdtROD_Decoder::leading_amt_map
std::map< uint16_t, std::unique_ptr< MdtAmtHit > > leading_amt_map
Definition: MdtROD_Decoder.h:33