Belle II Software  release-05-02-19
ROIpayload.h
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2013 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Giulia Casarosa, Eugenio Paoloni *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #pragma once
12 
13 #include <tracking/dataobjects/ROIrawID.h>
14 #include "TObject.h"
15 #include <stdint.h>
16 #include <boost/spirit/home/support/detail/endian.hpp>
17 
18 namespace Belle2 {
37  class ROIpayload : public TObject {
38  enum { OFFSET_MAGIC = 0, OFFSET_LENGTH = 1, OFFSET_HEADER = 2, OFFSET_TRIGNR = 3, OFFSET_RUNNR = 4, OFFSET_ROIS = 5};
39  enum { HEADER_SIZE_WO_LENGTH = 3, HEADER_SIZE_WITH_LENGTH = 5, HEADER_SIZE_WITH_LENGTH_AND_CRC = 6};
40 
41  public:
43  typedef boost::spirit::endian::ubig32_t ubig32_t;
44 
47  explicit ROIpayload(int rois = 0);
48 
52  virtual ~ROIpayload() { delete[] m_rootdata; };
53 
54  int m_packetLengthByte = 0;
55  int m_length;
57  int* m_rootdata; //[m_length]
58 
60  int m_index;
61 
62  uint32_t* m_data32;
63 
65 
66  void setPayloadLength(int length);
67  void setPayloadLength();
68  void setHeader(bool Accepted, bool SendAll, bool SendROIs);
69  void setTriggerNumber(unsigned long int triggerNumber);
71  void setRunSubrunExpNumber(int run , int subrun , int exp);
74  // void addROIraw(ROIrawID roiraw);
75  void addROIraw(unsigned long int roiraw);
76  void setCRC();
78  int getPacketLengthByte() {return m_packetLengthByte;}
79  int getLength() {return m_length;}
81  int* getRootdata() {return m_rootdata;} //[m_length]
82 
83  void init(int length);
88  int getNrROIs() const
89  {
90  return (m_length - HEADER_SIZE_WITH_LENGTH_AND_CRC) / 2; // only minus checksum
91  }
92 
97  int getDHHID(int j) const
98  {
99  if (j < 0 || j >= getNrROIs()) return -1;
100  return (((ubig32_t*)m_rootdata)[HEADER_SIZE_WITH_LENGTH + 2 * j] & 0x3F0) >> 4; // & 0x3F0
101  }
102 
107  int getMinVid(int j) const
108  {
109  if (j < 0 || j >= getNrROIs()) return -1;
110  return ((((ubig32_t*)m_rootdata)[HEADER_SIZE_WITH_LENGTH + 2 * j] & 0xF) << 6) | ((((ubig32_t*)m_rootdata)[HEADER_SIZE_WITH_LENGTH +
111  2 * j + 1] & 0xFC000000) >> 26) ;
112  }
113 
118  int getMaxVid(int j) const
119  {
120  if (j < 0 || j >= getNrROIs()) return -1;
121  return (((ubig32_t*)m_rootdata)[HEADER_SIZE_WITH_LENGTH + 2 * j + 1] & 0x3FF00) >> 8;
122  }
123 
128  int getMinUid(int j) const
129  {
130  if (j < 0 || j >= getNrROIs()) return -1;
131  return (((ubig32_t*)m_rootdata)[HEADER_SIZE_WITH_LENGTH + 2 * j + 1] & 0x03FC0000) >> 18;
132  }
133 
138  int getMaxUid(int j) const
139  {
140  if (j < 0 || j >= getNrROIs()) return -1;
141  return (((ubig32_t*)m_rootdata)[HEADER_SIZE_WITH_LENGTH + 2 * j + 1]) & 0xFF;
142  }
143 
148  int getType(int j) const
149  {
150  if (j < 0 || j >= getNrROIs()) return -1;
151  return (((ubig32_t*)m_rootdata)[HEADER_SIZE_WITH_LENGTH + 2 * j] & 0x400) >> 10;
152  }
153 
154  private:
156  ClassDef(ROIpayload, 2)
157  };
159 }
Belle2::ROIpayload::getDHHID
int getDHHID(int j) const
Return DHH ID of ROI j.
Definition: ROIpayload.h:105
Belle2::ROIrawID::baseType
uint64_t baseType
base type
Definition: ROIrawID.h:38
Belle2::ROIpayload::getType
int getType(int j) const
Return Type (Datcon or HLT) of ROI j.
Definition: ROIpayload.h:156
Belle2::ROIpayload::init
void init(int length)
initializer
Definition: ROIpayload.cc:27
Belle2::ROIpayload::setHeader
void setHeader(bool Accepted, bool SendAll, bool SendROIs)
set header
Definition: ROIpayload.cc:60
Belle2::ROIpayload::m_length
int m_length
packet length
Definition: ROIpayload.h:63
Belle2::ROIpayload::ROIpayload
ROIpayload(int rois=0)
Default constructor.
Definition: ROIpayload.cc:22
Belle2::ROIpayload::m_index
int m_index
transient index
Definition: ROIpayload.h:68
Belle2::ROIpayload::ubig32_t
boost::spirit::endian::ubig32_t ubig32_t
Shorthand for 32-bit integer stored in big-endian format.
Definition: ROIpayload.h:51
Belle2::ROIpayload::~ROIpayload
virtual ~ROIpayload()
destructor.
Definition: ROIpayload.h:60
Belle2::ROIpayload
ROIpayload @TODO: Better explanation, Is there a reason to inherit from TObject and not Relationsobje...
Definition: ROIpayload.h:45
Belle2::ROIpayload::setCRC
void setCRC()
set CRC
Definition: ROIpayload.cc:94
Belle2::ROIpayload::setPayloadLength
void setPayloadLength()
set payload length
Definition: ROIpayload.cc:46
Belle2::ROIpayload::m_data32
uint32_t * m_data32
transient value
Definition: ROIpayload.h:70
Belle2::ROIpayload::getMinVid
int getMinVid(int j) const
Return MinVid (Row 1) of ROI j.
Definition: ROIpayload.h:115
Belle2::ROIpayload::getMinUid
int getMinUid(int j) const
Return MinUid (Col 1) of ROI j.
Definition: ROIpayload.h:136
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::ROIpayload::getMaxUid
int getMaxUid(int j) const
Return MaxUid (Col 2) of ROI j.
Definition: ROIpayload.h:146
Belle2::ROIpayload::getRootdata
int * getRootdata()
get pointer to the data packet
Definition: ROIpayload.h:89
Belle2::ROIpayload::m_rootdata
int * m_rootdata
pointer to data packet of m_length words
Definition: ROIpayload.h:65
Belle2::ROIpayload::getMaxVid
int getMaxVid(int j) const
Return MaxVid (Row 2) of ROI j.
Definition: ROIpayload.h:126
Belle2::ROIpayload::m_packetLengthByte
int m_packetLengthByte
packet length in byte
Definition: ROIpayload.h:62
Belle2::ROIpayload::m_data64
ROIrawID::baseType * m_data64
transient value
Definition: ROIpayload.h:72
Belle2::ROIpayload::getNrROIs
int getNrROIs() const
Get the nr of ROIs.
Definition: ROIpayload.h:96
Belle2::ROIpayload::addROIraw
void addROIraw(unsigned long int roiraw)
add a ROIrawID
Definition: ROIpayload.cc:84
Belle2::ROIpayload::setRunSubrunExpNumber
void setRunSubrunExpNumber(int run, int subrun, int exp)
set run/ subrun/exp number
Definition: ROIpayload.cc:76
Belle2::ROIpayload::setTriggerNumber
void setTriggerNumber(unsigned long int triggerNumber)
set trigger number
Definition: ROIpayload.cc:71