Project
Loading...
Searching...
No Matches
HmpidDecoder2.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
17
18#ifndef COMMON_HMPIDDECODER2_H_
19#define COMMON_HMPIDDECODER2_H_
20
21#include <cstdio>
22#include <cstdint>
23#include <iostream>
24#include <cstring>
25
30
32
33#include <fairlogger/Logger.h>
34
36
37#define MAXDESCRIPTIONLENGHT 70
38
39// ---- RDH 6 standard dimension -------
40#define RAWBLOCKDIMENSION_W 2048
41#define HEADERDIMENSION_W 16
42#define PAYLOADDIMENSION_W 2032
43
44// ---- Defines for the decoding
45#define WTYPE_ROW 1
46#define WTYPE_EOS 2
47#define WTYPE_PAD 3
48#define WTYPE_EOE 4
49#define WTYPE_NONE 0
50
51using namespace o2::raw;
52
53// Hmpid Equipment class
54namespace o2
55{
56
57namespace hmpid
58{
59
61{
62
63 // Members
64 public:
68
71
72 public:
73 uint64_t mHeEvent;
77
80 int mHeVer;
85
88
90 int mHeDW;
93 int mHePAR;
94
102
104 uint32_t* mEndStreamPtr;
108
110 std::vector<o2::hmpid::Digit> mDigits;
111
112 // Methods
113 public:
114 HmpidDecoder2(int* EqIds, int* CruIds, int* LinkIds, int numOfEquipments);
115 HmpidDecoder2(int numOfEquipments);
117
118 void init();
119 bool setUpStream(void* Buffer, long BufferLen);
120 void setVerbosity(int Level)
121 {
122 mVerbose = Level;
123 };
125 {
126 return (mVerbose);
127 };
128
130 {
131 return (mNumberOfEquipments);
132 };
133 int getEquipmentIndex(int EquipmentId);
134 int getEquipmentIndex(int CruID, int LinkId);
135 int getEquipmentID(int CruId, int LinkId);
136
137 void decodePage(uint32_t** streamBuffer);
138 void decodePageFast(uint32_t** streamBuf);
139 bool decodeBuffer();
140 bool decodeBufferFast();
141
142 uint16_t getChannelSamples(int Equipment, int Column, int Dilogic, int Channel);
143 double getChannelSum(int Equipment, int Column, int Dilogic, int Channel);
144 double getChannelSquare(int Equipment, int Column, int Dilogic, int Channel);
145 uint16_t getPadSamples(int Module, int Row, int Column);
146 double getPadSum(int Module, int Row, int Column);
147 double getPadSquares(int Module, int Row, int Column);
148
149 void dumpErrors(int Equipment);
150 void dumpPads(int Equipment, int type = 0);
151 void writeSummaryFile(char* summaryFileName);
152
153 float getAverageEventSize(int Equipment);
154 float getAverageBusyTime(int Equipment);
155
156 protected:
157 int checkType(uint32_t wp, int* p1, int* p2, int* p3, int* p4);
158 bool isRowMarker(uint32_t wp, int* Err, int* rowSize, int* mark);
159 bool isSegmentMarker(uint32_t wp, int* Err, int* segSize, int* Seg, int* mark);
160 bool isEoEmarker(uint32_t wp, int* Err, int* Col, int* Dilogic, int* Eoesize);
161 void setPad(HmpidEquipment* eq, int col, int dil, int ch, uint16_t charge);
162
163 public:
164 bool decodeHmpidError(int ErrorField, char* outbuf);
165 void dumpHmpidError(HmpidEquipment* eq, int ErrorField, int mHeBCDI, int mHeORBIT);
166 void dumpMemory(const void* MemoryStartPtr, std::size_t Dimension);
167 bool isPadWord(uint32_t wp, int* Err, int* Col, int* Dilogic, int* Channel, int* Charge);
168 int decodeHeader(uint32_t* streamPtrAdr, int* EquipIndex);
169 HmpidEquipment* evaluateHeaderContents(int EquipmentIndex);
171
172 protected:
173 bool getBlockFromStream(uint32_t** streamPtr, uint32_t Size);
174 bool getHeaderFromStream(uint32_t** streamPtr);
175 uint32_t readWordFromStream();
177 {
178 return (mActualStreamPtr);
179 };
180};
181} // namespace hmpid
182} // namespace o2
183#endif /* COMMON_HMPIDDECODER2ß_H_ */
int16_t charge
Definition RawEventData.h:5
constexpr int p2()
constexpr int p1()
constexpr to accelerate the coordinates changing
#define MAXDESCRIPTIONLENGHT
Definition of the RAW Data Header.
uint32_t col
Definition RawData.h:4
Reader for (multiple) raw data files.
static constexpr int MAXEQUIPMENTS
Definition Geo.h:79
float getAverageEventSize(int Equipment)
static char sHmpidErrorDescription[MAXHMPIDERRORS][MAXDESCRIPTIONLENGHT]
HMPID Firmware Error Messages Definitions.
void dumpPads(int Equipment, int type=0)
bool isPadWord(uint32_t wp, int *Err, int *Col, int *Dilogic, int *Channel, int *Charge)
void setPad(HmpidEquipment *eq, int col, int dil, int ch, uint16_t charge)
int checkType(uint32_t wp, int *p1, int *p2, int *p3, int *p4)
bool isEoEmarker(uint32_t wp, int *Err, int *Col, int *Dilogic, int *Eoesize)
void decodePageFast(uint32_t **streamBuf)
void init()
Init all the members variables.
std::vector< o2::hmpid::Digit > mDigits
bool decodeHmpidError(int ErrorField, char *outbuf)
void dumpMemory(const void *MemoryStartPtr, std::size_t Dimension)
double getChannelSquare(int Equipment, int Column, int Dilogic, int Channel)
static char sErrorDescription[MAXERRORS][MAXDESCRIPTIONLENGHT]
Decoding Error Messages Definitions.
HmpidEquipment * evaluateHeaderContents(int EquipmentIndex)
uint32_t * getActualStreamPtr()
void decodePage(uint32_t **streamBuffer)
uint16_t getChannelSamples(int Equipment, int Column, int Dilogic, int Channel)
~HmpidDecoder2()
Destructor : remove the Equipments instances.
bool isRowMarker(uint32_t wp, int *Err, int *rowSize, int *mark)
o2::InteractionRecord mIntReco
bool setUpStream(void *Buffer, long BufferLen)
int decodeHeader(uint32_t *streamPtrAdr, int *EquipIndex)
void writeSummaryFile(char *summaryFileName)
void dumpErrors(int Equipment)
int getEquipmentIndex(int EquipmentId)
double getPadSum(int Module, int Row, int Column)
bool isSegmentMarker(uint32_t wp, int *Err, int *segSize, int *Seg, int *mark)
HmpidEquipment * mTheEquipments[Geo::MAXEQUIPMENTS]
uint16_t getPadSamples(int Module, int Row, int Column)
bool getHeaderFromStream(uint32_t **streamPtr)
void setVerbosity(int Level)
void updateStatistics(HmpidEquipment *eq)
void dumpHmpidError(HmpidEquipment *eq, int ErrorField, int mHeBCDI, int mHeORBIT)
float getAverageBusyTime(int Equipment)
bool getBlockFromStream(uint32_t **streamPtr, uint32_t Size)
double getPadSquares(int Module, int Row, int Column)
double getChannelSum(int Equipment, int Column, int Dilogic, int Channel)
int getEquipmentID(int CruId, int LinkId)
GLint GLint GLsizei GLint GLenum GLenum type
Definition glcorearb.h:275
const int MAXHMPIDERRORS
const int MAXERRORS
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...