ATLAS Offline Software
NSWTriggerMMMonElink.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 #include <vector>
5 #include <exception>
6 #include <sstream>
7 #include <string>
8 
10 
14 
16  NSWTriggerElink (bs, remaining)
17 {
18 
19  std::size_t size_word{sizeof(uint32_t) * 8};
20  // 2 felix header 32b words already decoded;
21  std::size_t readPointer{2 * 32};
22  std::span<const std::uint32_t> data{bs, remaining};
23  //once format finalized, checking a minimum size or at least the structure
24 
25  m_head_fragID = Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_head_fragID );
26  m_head_sectID = Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_head_sectID );
27  m_head_EC = Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_head_EC );
28  m_head_flags = Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_head_flags );
29  m_head_BCID = Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_head_BCID );
30  m_head_orbit = Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_head_orbit );
31  m_head_spare = Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_head_spare );
32  m_L1ID = Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_L1ID );
33  m_head_coincBCID = Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_head_coincBCID );
34  m_head_regionCount = Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_head_regionCount );
35  m_head_coincRegion = Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_head_coincRegion );
36  m_head_reserved = Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_head_reserved );
37 
38  //already checked in NSWTriggerElink that remaining >= m_wordCountFlx
39  while ( readPointer < (m_wordCountFlx-1) * size_word ) {
40  //later during commissioning, need to change to ( readPointer < (m_wordCountFlx-1-stream_block_size) * size_word )
41 
42  uint32_t current_streamID = Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_finder_streamID );
43  uint32_t current_regionCount = Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_finder_regionCount );
44  uint32_t current_triggerID = Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_finder_triggerID );
45 
46  if (current_streamID == 0b10110001){
47  //finder
48  m_finder_streamID.push_back(current_streamID);
49  m_finder_regionCount.push_back(current_regionCount);
50  m_finder_triggerID.push_back(current_triggerID);
51  m_finder_V1.push_back(Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_finder_V1));
52  m_finder_V0.push_back(Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_finder_V0));
53  m_finder_U1.push_back(Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_finder_U1));
54  m_finder_U0.push_back(Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_finder_U0));
55  m_finder_X3.push_back(Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_finder_X3));
56  m_finder_X2.push_back(Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_finder_X2));
57  m_finder_X1.push_back(Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_finder_X1));
58  m_finder_X0.push_back(Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_finder_X0));
59 
60  } else if (current_streamID == 0b10110010) {
61  //fitter
62  m_fitter_streamID.push_back(current_streamID);
63  m_fitter_regionCount.push_back(current_regionCount);
64  m_fitter_triggerID.push_back(current_triggerID);
65  m_fitter_filler.push_back(Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_fitter_filler));
66  m_fitter_mxG.push_back(Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_fitter_mxG));
67  m_fitter_muG.push_back(Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_fitter_muG));
68  m_fitter_mvG.push_back(Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_fitter_mvG));
69  m_fitter_mxL.push_back(Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_fitter_mxL));
70  m_fitter_mx_ROI.push_back(Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_fitter_mx_ROI));
71  m_fitter_dTheta.push_back(Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_fitter_dTheta));
72  m_fitter_zero.push_back(Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_fitter_zero));
73  m_fitter_phiSign.push_back(Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_fitter_phiSign));
74  m_fitter_phiBin.push_back(Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_fitter_phiBin));
75  m_fitter_rBin.push_back(Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_fitter_rBin));
76 
77 
78  } else {
79  Muon::nsw::NSWTriggerException e ( Muon::nsw::format("Stream ID in MMTP Monitoring packet now recognized: {}", current_streamID), 4);
80  throw e;
81  }
82 
83  }
84 
85  //warning: how the swROD is behaving if the last work is a uint16 only? Just 0-padding
86  m_trailer_CRC = Muon::nsw::decode_and_advance<uint64_t>(data, readPointer, Muon::nsw::MMTPMON::size_trailer_CRC);
87 
88 
89 }
Muon::nsw::MMTPMON::size_head_BCID
constexpr int size_head_BCID
Definition: NSWMMTPDecodeBitmaps.h:51
Muon::nsw::MMTPMON::size_finder_X1
constexpr int size_finder_X1
Definition: NSWMMTPDecodeBitmaps.h:68
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
Muon::nsw::MMTPMON::size_finder_X0
constexpr int size_finder_X0
Definition: NSWMMTPDecodeBitmaps.h:69
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
Muon::nsw::MMTPMON::size_fitter_muG
constexpr int size_fitter_muG
Definition: NSWMMTPDecodeBitmaps.h:75
Muon::nsw::MMTPMON::size_finder_streamID
constexpr int size_finder_streamID
Definition: NSWMMTPDecodeBitmaps.h:59
Muon::nsw::MMTPMON::size_fitter_mxL
constexpr int size_fitter_mxL
Definition: NSWMMTPDecodeBitmaps.h:77
Muon::nsw::MMTPMON::size_head_reserved
constexpr int size_head_reserved
Definition: NSWMMTPDecodeBitmaps.h:58
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
Muon::nsw::MMTPMON::size_fitter_mx_ROI
constexpr int size_fitter_mx_ROI
Definition: NSWMMTPDecodeBitmaps.h:78
Muon::nsw::MMTPMON::size_finder_V1
constexpr int size_finder_V1
Definition: NSWMMTPDecodeBitmaps.h:62
Muon::nsw::MMTPMON::size_finder_triggerID
constexpr int size_finder_triggerID
Definition: NSWMMTPDecodeBitmaps.h:61
Muon::nsw::MMTPMON::size_fitter_mvG
constexpr int size_fitter_mvG
Definition: NSWMMTPDecodeBitmaps.h:76
Muon::nsw::MMTPMON::size_head_orbit
constexpr int size_head_orbit
Definition: NSWMMTPDecodeBitmaps.h:52
Muon::nsw::MMTPMON::size_head_EC
constexpr int size_head_EC
Definition: NSWMMTPDecodeBitmaps.h:49
Muon::nsw::MMTPMON::size_fitter_phiBin
constexpr int size_fitter_phiBin
Definition: NSWMMTPDecodeBitmaps.h:82
Muon::nsw::MMTPMON::size_fitter_zero
constexpr int size_fitter_zero
Definition: NSWMMTPDecodeBitmaps.h:80
Muon::nsw::MMTPMON::size_finder_V0
constexpr int size_finder_V0
Definition: NSWMMTPDecodeBitmaps.h:63
Muon::nsw::MMTPMON::size_trailer_CRC
constexpr int size_trailer_CRC
Definition: NSWMMTPDecodeBitmaps.h:84
Muon::nsw::MMTPMON::size_L1ID
constexpr int size_L1ID
Definition: NSWMMTPDecodeBitmaps.h:54
Muon::nsw::MMTPMON::size_fitter_filler
constexpr int size_fitter_filler
Definition: NSWMMTPDecodeBitmaps.h:73
Muon::nsw::MMTPMON::size_head_flags
constexpr int size_head_flags
Definition: NSWMMTPDecodeBitmaps.h:50
Muon::nsw::MMTPMON::size_head_sectID
constexpr int size_head_sectID
Definition: NSWMMTPDecodeBitmaps.h:48
Muon::nsw::MMTPMON::size_head_coincBCID
constexpr int size_head_coincBCID
Definition: NSWMMTPDecodeBitmaps.h:55
Muon::nsw::MMTPMON::size_fitter_mxG
constexpr int size_fitter_mxG
Definition: NSWMMTPDecodeBitmaps.h:74
Muon::nsw::MMTPMON::size_fitter_dTheta
constexpr int size_fitter_dTheta
Definition: NSWMMTPDecodeBitmaps.h:79
Muon::nsw::format
std::string format(const std::string &str, const T &arg)
Definition: NSWDecodeHelper.h:43
Muon::nsw::MMTPMON::size_finder_regionCount
constexpr int size_finder_regionCount
Definition: NSWMMTPDecodeBitmaps.h:60
Muon::nsw::MMTPMON::size_finder_X2
constexpr int size_finder_X2
Definition: NSWMMTPDecodeBitmaps.h:67
Muon::nsw::MMTPMON::size_head_regionCount
constexpr int size_head_regionCount
Definition: NSWMMTPDecodeBitmaps.h:56
Muon::nsw::MMTPMON::size_finder_X3
constexpr int size_finder_X3
Definition: NSWMMTPDecodeBitmaps.h:66
NSWMMTPDecodeBitmaps.h
NSWResourceId.h
Muon::nsw::MMTPMON::size_head_spare
constexpr int size_head_spare
Definition: NSWMMTPDecodeBitmaps.h:53
Muon::nsw::MMTPMON::size_head_fragID
constexpr int size_head_fragID
Definition: NSWMMTPDecodeBitmaps.h:47
Muon::nsw::MMTPMON::size_fitter_phiSign
constexpr int size_fitter_phiSign
Definition: NSWMMTPDecodeBitmaps.h:81
Muon::nsw::MMTPMON::size_fitter_rBin
constexpr int size_fitter_rBin
Definition: NSWMMTPDecodeBitmaps.h:83
Muon::nsw::MMTPMON::size_head_coincRegion
constexpr int size_head_coincRegion
Definition: NSWMMTPDecodeBitmaps.h:57
Muon::nsw::MMTPMON::size_finder_U1
constexpr int size_finder_U1
Definition: NSWMMTPDecodeBitmaps.h:64
Muon::nsw::MMTPMON::size_finder_U0
constexpr int size_finder_U0
Definition: NSWMMTPDecodeBitmaps.h:65
Muon::nsw::NSWTriggerException
Definition: NSWTriggerElink.h:20