ATLAS Offline Software
Loading...
Searching...
No Matches
NSWElink.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4#ifndef MUONNSWCOMMONDECODE_NSWELINK_H
5#define MUONNSWCOMMONDECODE_NSWELINK_H
6
7#include <stdint.h>
8#include <vector>
9
12
13namespace Muon
14{
15 namespace nsw
16 {
17 class VMMChannel;
18 class NSWResourceId;
19
21 {
22 public:
23 //NSWElink (); to be implemented for simulation
24 NSWElink (const uint32_t *bs, uint32_t remaining);
25 virtual ~NSWElink ();
26
27 NSWElink (const NSWElink&) = delete;
28 NSWElink& operator= (const NSWElink&) = delete;
29
30 const std::vector <Muon::nsw::VMMChannel *> &get_channels () const {return m_channels;};
31
32 unsigned int nwords () const {return m_wordCount;};
33 unsigned int nhits () const {return m_nhits;};
34 unsigned int status () const {return m_packet_status;};
35
36 // Detector Logical ID and components
37 uint32_t elinkWord () const {return m_elinkWord;};
38 const Muon::nsw::NSWResourceId *elinkId () const {return m_elinkId;};
40
41 // ROC header
42 bool isNull () const {return m_isNull;};
43 bool noTdc () const {return m_noTdc;};
44
45 uint16_t l1Id () const {return m_l1Id;};
46 uint16_t rocId () const {return m_rocId;};
47 uint16_t bcId () const {return m_bcId;};
48 uint16_t orbit () const {return m_orbit;};
49
50 // ROC trailer
51 bool tout () const {return m_tout;};
52 bool extended () const {return m_extended;};
53
54 uint8_t checksum () const {return m_checksum;};
55
56 uint16_t nhitsTrail () const {return m_nhitsTrail;};
57 uint16_t l0Id () const {return m_l0Id;};
58 uint16_t flagMiss () const {return m_flagMiss;};
59
60 private:
61 unsigned int test_checksum (const uint8_t *buffer, unsigned int buflen);
62
63 private:
64 unsigned int m_wordCount;
65 unsigned int m_nhits;
66 unsigned int m_running_checksum;
67 unsigned int m_packet_status;
68
70 bool m_noTdc;
71 bool m_tout;
73
74 uint8_t m_checksum;
75
76 uint16_t m_l1Id;
77 uint16_t m_rocId;
78 uint16_t m_bcId;
79 uint16_t m_orbit;
80 uint16_t m_nhitsTrail;
81 uint16_t m_l0Id;
82 uint16_t m_flagMiss;
83
84 uint32_t m_elinkWord;
86 std::vector <Muon::nsw::VMMChannel *> m_channels;
87
88 static const unsigned int s_null_packet_length = 10;
89 };
90 }
91}
92
93inline unsigned int Muon::nsw::NSWElink::test_checksum (const uint8_t *buffer, unsigned int buflen)
94{
95 const uint8_t *p = buffer;
96 unsigned int running_checksum = 0;
97
98 for (unsigned int i = 0; i < buflen; ++i, ++p)
99 running_checksum += *p;
100
101 running_checksum = (running_checksum & 0xff) + (running_checksum >> 8); // add carry bits
102 running_checksum = (running_checksum & 0xff) + (running_checksum >> 8); // do it twice
103 running_checksum = (~running_checksum) & 0xff;
104
105 return running_checksum;
106}
107
108#endif // MUONNSWCOMMONDECODE_NSWELINK_H
NRpcCablingAlg reads raw condition data and writes derived condition data to the condition store.