17 std::size_t readPointer{0};
18 std::span<const std::uint32_t>
data{payload.data(), 3};
20 if (payload.size()!=3) {
21 throw std::runtime_error(
Muon::nsw::format(
"ART Packet size not as expected: expected exactly 3 uint32_t, got {}", payload.size() ));
30 for (uint8_t i = 0; i < 8; i++){
36 std::vector<std::tuple<uint8_t,uint8_t,uint8_t>> artHitInfo =
VMMmapToHits();
38 for (uint8_t i = 0; i < artHitInfo.size(); i++){
46 std::vector<std::tuple<uint8_t,uint8_t>> hitmapBoardVMM;
47 std::vector<std::tuple<uint8_t,uint8_t,uint8_t>> artHitInfo;
49 for (uint8_t i = 0; i<32; i++){
51 hitmapBoardVMM.push_back( std::make_tuple( (
int)(i/8), i%8 ) );
55 if (hitmapBoardVMM.size()>8) {
56 throw std::runtime_error(
"ART Packet cannot contain more than 8 ART hits!");
59 for (uint8_t i = 0; i<hitmapBoardVMM.size(); i++){
60 artHitInfo.push_back( std::make_tuple( std::get<0>(hitmapBoardVMM[i]), std::get<1>(hitmapBoardVMM[i]),
m_art_ARTs[i] ) );
71 int flipBoardOrder = 0;
72 int flipFiberOrder = 0;
75 if ( layer==1 || layer==2 || layer==5 || layer==6 ) {flipFiberOrder = 1;}
76 else {flipBoardOrder = 1;}
78 if ( layer==1 || layer==2 || layer==5 || layer==6 ) {flipBoardOrder = 1;}
79 else {flipFiberOrder = 1;}
81 if (flipBoardOrder) board = 3-board;
93 int boardPosition = -1;
95 if (rightLeft==1) {boardPosition = (pcb-1) * 2;}
96 else {boardPosition = (pcb-1) * 2 + 1;}
98 if (rightLeft==0) {boardPosition = (pcb-1) * 2;}
99 else {boardPosition = (pcb-1) * 2 + 1;}
102 return boardPosition;
108 if (boardPosition%2==0){vmmPosition = 7-vmm;}
109 else {vmmPosition = vmm;}
111 vmmPosition += boardPosition*8;
112 int chPosition = 64*vmmPosition;
114 if (boardPosition%2==0){chPosition += (63 - ch);}
115 else {chPosition += ch;}
char data[hepevt_bytes_allocation_ATLAS]
std::vector< std::pair< uint8_t, uint16_t > > m_channels
std::vector< std::tuple< uint8_t, uint8_t, uint8_t > > VMMmapToHits()
std::vector< uint32_t > m_art_ARTs
MMARTPacket(std::vector< uint32_t > &payload)
int getBoardPosition(int board)
int getVMMChannelPosition(int boardPosition, int vmm, int ch)
constexpr int size_art_fiberID
constexpr int size_art_pipeID
constexpr int size_art_VMMmap
constexpr int size_art_ARTs
constexpr int size_art_BCID
std::string format(const std::string &str, const T &arg)
constexpr Target decode_and_advance(const std::span< const Source > words, std::size_t &start, const std::size_t size)
Decode bits from data of words and advance the read pointer.
void reverse(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of reverse for DataVector/List.