Project
Loading...
Searching...
No Matches
HmpidDecoder.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_HMPIDDECODER_H_
19#define COMMON_HMPIDDECODER_H_
20
21#include <cstdio>
22#include <cstdint>
23#include <iostream>
24#include <cstring>
25
26#include <fairlogger/Logger.h>
28
30
31#define MAXDESCRIPTIONLENGHT 50
32
33// ---- RDH 6 standard dimension -------
34#define RAWBLOCKDIMENSION_W 2048
35#define HEADERDIMENSION_W 16
36#define PAYLOADDIMENSION_W 2032
37
38// ---- Defines for the decoding
39#define WTYPE_ROW 1
40#define WTYPE_EOS 2
41#define WTYPE_PAD 3
42#define WTYPE_EOE 4
43#define WTYPE_NONE 0
44
45using namespace o2;
46
47// Hmpid Equipment class
48namespace o2
49{
50
51namespace hmpid
52{
53
55{
56
57 // Members
58 public:
62
65
66 public:
67 uint64_t mHeEvent;
71
74 int mHeVer;
79
82
84 int mHeDW;
87 int mHePAR;
88
96
98 uint32_t* mEndStreamPtr;
99 uint32_t* mStartStreamPtr;
102
103 // Methods
104 public:
105 HmpidDecoder(int* EqIds, int* CruIds, int* LinkIds, int numOfEquipments);
106 HmpidDecoder(int numOfEquipments);
108
109 void init();
110 virtual bool setUpStream(void* Buffer, long BufferLen) = 0;
111 void setVerbosity(int Level)
112 {
113 mVerbose = Level;
114 };
116 {
117 return (mVerbose);
118 };
119
121 {
122 return (mNumberOfEquipments);
123 };
124 int getEquipmentIndex(int EquipmentId);
125 int getEquipmentIndex(int CruID, int LinkId);
126 int getEquipmentID(int CruId, int LinkId);
127
128 void decodePage(uint32_t** streamBuffer);
129 void decodePageFast(uint32_t** streamBuf);
130 bool decodeBuffer();
131 bool decodeBufferFast();
132
133 uint16_t getChannelSamples(int Equipment, int Column, int Dilogic, int Channel);
134 double getChannelSum(int Equipment, int Column, int Dilogic, int Channel);
135 double getChannelSquare(int Equipment, int Column, int Dilogic, int Channel);
136 uint16_t getPadSamples(int Module, int Row, int Column);
137 double getPadSum(int Module, int Row, int Column);
138 double getPadSquares(int Module, int Row, int Column);
139
140 void dumpErrors(int Equipment);
141 void dumpPads(int Equipment, int type = 0);
142 void writeSummaryFile(char* summaryFileName);
143
144 float getAverageEventSize(int Equipment);
145 float getAverageBusyTime(int Equipment);
146
148
149 protected:
150 int checkType(uint32_t wp, int* p1, int* p2, int* p3, int* p4);
151 bool isRowMarker(uint32_t wp, int* Err, int* rowSize, int* mark);
152 bool isSegmentMarker(uint32_t wp, int* Err, int* segSize, int* Seg, int* mark);
153 bool isEoEmarker(uint32_t wp, int* Err, int* Col, int* Dilogic, int* Eoesize);
154
155 public:
156 bool decodeHmpidError(int ErrorField, char* outbuf);
157 void dumpHmpidError(int ErrorField);
158 bool isPadWord(uint32_t wp, int* Err, int* Col, int* Dilogic, int* Channel, int* Charge);
159 int decodeHeader(uint32_t* streamPtrAdr, int* EquipIndex);
160 HmpidEquipment* evaluateHeaderContents(int EquipmentIndex);
162
163 protected:
164 virtual void setPad(HmpidEquipment* eq, int col, int dil, int ch, uint16_t charge) = 0;
165 virtual bool getBlockFromStream(uint32_t** streamPtr, uint32_t Size) = 0;
166 virtual bool getHeaderFromStream(uint32_t** streamPtr) = 0;
167 virtual bool getWordFromStream(uint32_t* word) = 0;
169 {
170 return (mActualStreamPtr);
171 };
172};
173} // namespace hmpid
174} // namespace o2
175#endif /* COMMON_HMPIDDECODER_H_ */
int16_t charge
Definition RawEventData.h:5
constexpr int p2()
constexpr int p1()
constexpr to accelerate the coordinates changing
#define MAXDESCRIPTIONLENGHT
uint32_t col
Definition RawData.h:4
static constexpr int MAXEQUIPMENTS
Definition Geo.h:79
double getChannelSum(int Equipment, int Column, int Dilogic, int Channel)
uint16_t getPadSamples(int Module, int Row, int Column)
virtual bool setUpStream(void *Buffer, long BufferLen)=0
bool isRowMarker(uint32_t wp, int *Err, int *rowSize, int *mark)
int checkType(uint32_t wp, int *p1, int *p2, int *p3, int *p4)
int decodeHeader(uint32_t *streamPtrAdr, int *EquipIndex)
void decodePage(uint32_t **streamBuffer)
uint16_t getChannelSamples(int Equipment, int Column, int Dilogic, int Channel)
static char sErrorDescription[MAXERRORS][MAXDESCRIPTIONLENGHT]
Decoding Error Messages Definitions.
virtual bool getHeaderFromStream(uint32_t **streamPtr)=0
bool decodeHmpidError(int ErrorField, char *outbuf)
void updateStatistics(HmpidEquipment *eq)
void dumpHmpidError(int ErrorField)
double getPadSquares(int Module, int Row, int Column)
int getEquipmentIndex(int EquipmentId)
bool isPadWord(uint32_t wp, int *Err, int *Col, int *Dilogic, int *Channel, int *Charge)
uint32_t * getActualStreamPtr()
void decodePageFast(uint32_t **streamBuf)
virtual bool getWordFromStream(uint32_t *word)=0
virtual void setPad(HmpidEquipment *eq, int col, int dil, int ch, uint16_t charge)=0
~HmpidDecoder()
Destructor : remove the Equipments instances.
bool isEoEmarker(uint32_t wp, int *Err, int *Col, int *Dilogic, int *Eoesize)
double getChannelSquare(int Equipment, int Column, int Dilogic, int Channel)
HmpidEquipment * evaluateHeaderContents(int EquipmentIndex)
o2::InteractionRecord mIntReco
void writeSummaryFile(char *summaryFileName)
HmpidEquipment * mTheEquipments[Geo::MAXEQUIPMENTS]
void setVerbosity(int Level)
float getAverageBusyTime(int Equipment)
void init()
Init all the members variables.
double getPadSum(int Module, int Row, int Column)
static char sHmpidErrorDescription[MAXHMPIDERRORS][MAXDESCRIPTIONLENGHT]
HMPID Firmware Error Messages Definitions.
float getAverageEventSize(int Equipment)
void dumpErrors(int Equipment)
void dumpPads(int Equipment, int type=0)
virtual bool getBlockFromStream(uint32_t **streamPtr, uint32_t Size)=0
int getEquipmentID(int CruId, int LinkId)
bool isSegmentMarker(uint32_t wp, int *Err, int *segSize, int *Seg, int *mark)
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 ...