Belle II Software  release-05-02-19
BinData.h
1 #ifndef _Belle2_BinData_h
2 #define _Belle2_BinData_h
3 
4 #include <daq/slc/system/TCPSocket.h>
5 
6 namespace Belle2 {
12  struct BinTrailer {
13  unsigned int reserved;
14  unsigned int magic; /* should be 0x7FFF000X */
15  };
16 
17  struct BinHeader {
18  unsigned int nword; /* number of total words including header */
19  unsigned int nword_in_header; /* number of words of this header == 6 */
20  unsigned int nevent_nboard; /* number of board in this block, mostly # of COPPER */
21  unsigned int exp_run;
22  unsigned int event_number;
23  unsigned int node_id;
24  };
25 
26  class BinData {
27 
28  public:
29  static const unsigned int TRAILER_MAGIC;
30  static const unsigned int MAX_EVENT_WORDS = 2 * 1024 * 1024;
31 
32  public:
33  BinData(void* buf = NULL);
34  ~BinData() noexcept;
35 
36  public:
37  int getExpNumber() const { return (m_header->exp_run >> 22) & 0x3FF; };
38  int getRunNumber() const { return (m_header->exp_run & 0x3FFFFF) >> 8; };
39  int getSubNumber() const { return (m_header->exp_run & 0x3FFFFF) & 0xFF; };
40  int getEventNumber() const { return m_header->event_number; };
41  int setEventNumber(int number) { return m_header->event_number = number; };
42  int setExpNumber(int exp_no)
43  {
44  m_header->exp_run = ((exp_no & 0x3FF) << 22) | (m_header->exp_run & 0x3FFFFF);
45  return getExpNumber();
46  };
47  int setRunNumber(int run_no, int sub_no)
48  {
49  m_header->exp_run = (m_header->exp_run & 0xFFC00000) |
50  (run_no & 0x3FFFFF) << 8 | (sub_no & 0xFF);
51  return getRunNumber();
52  };
53  int getNEvent() const { return (m_header->nevent_nboard >> 16); };
54  int getNBoard() const { return (m_header->nevent_nboard & 0xFFFF); };
55  int setNEvent(int nev)
56  {
57  m_header->nevent_nboard = ((nev & 0xFFFF) << 16) | (m_header->nevent_nboard & 0xFFFF);
58  return getNEvent();
59  };
60  int setNBoard(int nb)
61  {
62  m_header->nevent_nboard = (m_header->nevent_nboard & 0xFFFF0000) | (nb & 0xFFFF);
63  return getNBoard();
64  };
65  void setWordSize(int nword) { m_header->nword = nword; };
66  int getWordSize() const { return m_header->nword; };
67  int getByteSize() const { return m_header->nword * 4; };
68  int getHeaderWordSize() const { return m_header->nword_in_header; };
69  int getHeaderByteSize() const { return m_header->nword_in_header * 4; };
70  int getBodyByteSize() const
71  {
72  return getByteSize() - sizeof(BinHeader) - sizeof(BinTrailer);
73  }
74  void setBodyWordSize(int nword)
75  {
76  setWordSize(nword + (sizeof(BinHeader) + sizeof(BinTrailer)) / 4);
77  m_trailer = (BinTrailer*)(m_body + getBodyWordSize());
78  m_trailer->magic = TRAILER_MAGIC;
79  }
80  int getBodyWordSize() const { return (getBodyByteSize() / 4); };
81  unsigned int getTrailerMagic()
82  {
83  m_trailer = (BinTrailer*)(m_body + getBodyWordSize());
84  return m_trailer->magic;
85  }
86  int getNodeId() const { return m_header->node_id; };
87  void setNodeId(int id) { m_header->node_id = id; };
88 
89  public:
90  unsigned int recvEvent(TCPSocket& socket);
91  unsigned int sendEvent(TCPSocket& socket) const;
92  int* getBuffer() { return m_buf; }
93  const int* getBuffer() const { return m_buf; }
94  void setBuffer(void* buf);
95  void print() noexcept;
96 
97  public:
98  BinHeader* getHeader() { return m_header; };
99  const BinHeader* getHeader() const { return m_header; };
100  BinTrailer* getTrailer() { return m_trailer; }
101  const BinTrailer* getTrailer() const { return m_trailer; }
102  unsigned int* getBody() { return m_body; };
103  const unsigned int* getBody() const { return m_body; };
104 
105  protected:
106  BinTrailer* m_trailer;
107  BinHeader* m_header;
108  unsigned int* m_body;
109  mutable int* m_buf;
110 
111  };
112 
114 }
115 
116 #endif
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::TCPSocket
Definition: TCPSocket.h:14
Belle2::BinData
Definition: BinData.h:26
Belle2::BinHeader
Definition: BinData.h:17
Belle2::BinTrailer
Definition: BinData.h:12