Project
Loading...
Searching...
No Matches
AltroDecoder.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#ifndef ALICEO2_PHOS_ALTRODECODER_H
12#define ALICEO2_PHOS_ALTRODECODER_H
13
14#include <iosfwd>
15#include <gsl/span>
16#include <string>
17#include <bitset>
18#include "PHOSBase/RCUTrailer.h"
20#include "PHOSBase/Mapping.h"
24
25namespace o2
26{
27namespace phos
28{
29
33class AltroDecoderError : public std::exception
34{
35 public:
47
52 AltroDecoderError(ErrorType_t errtype, const char* message) : mErrorType(errtype), mErrorMessage(message) {}
53
55 ~AltroDecoderError() noexcept override = default;
56
59 const char* what() const noexcept override { return mErrorMessage.data(); }
60
63 ErrorType_t getErrorType() const noexcept { return mErrorType; }
64
65 private:
66 ErrorType_t mErrorType;
67 std::string mErrorMessage;
68};
69
84
86{
87 public:
89 AltroDecoder() = default;
90
92 ~AltroDecoder() = default;
93
104 std::vector<o2::phos::Cell>& cellContainer,
105 std::vector<o2::phos::Cell>& truContainer);
106
108 const std::vector<o2::phos::RawReaderError>& hwerrors() { return mOutputHWErrors; }
109
110 const std::vector<short>& chi2list() { return mOutputFitChi; }
111
114 const RCUTrailer& getRCUTrailer() const { return mRCUTrailer; }
115
117 void readChannels(const std::vector<uint32_t>& payloadwords, CaloRawFitter* rawFitter,
118 std::vector<o2::phos::Cell>& cellContainer,
119 std::vector<o2::phos::Cell>& truContainer);
121 {
122 mPedestalRun = true;
123 mCombineGHLG = false;
124 }
125 void setCombineHGLG(bool a) { mCombineGHLG = a; }
126
127 void setKeepTruNoise(bool a) { mKeepTruNoise = a; }
128
129 void setPresamples(int ps) { mPreSamples = ps; }
130
131 private:
132 union truDigitPack {
133 int32_t mDataWord;
134 struct {
135 int32_t mHeader : 1;
136 int32_t mAmp : 15;
137 int32_t mTime : 16;
138 };
139 };
140
141 static constexpr int kGeneralSRUErr = 15;
142 static constexpr int kGeneralTRUErr = 16;
143 // check and convert HW address to absId and caloFlag
144 bool hwToAbsAddress(short hwaddress, short& absId, Mapping::CaloFlag& caloFlag);
145 // read trigger digits
146 void readTRUDigits(short absId, int payloadSize);
147 // read trigger summary tables
148 void readTRUFlags(short hwAddress, int payloadSize);
149 // Check if TRU digit belongs/matches TRU flag
150 bool matchTruDigits(const Cell& cTruFlag, float& sumAmp);
151
152 bool mCombineGHLG = true;
153 bool mPedestalRun = false;
154 bool mKeepTruNoise = false;
155 short mddl;
156 short mPreSamples = 0;
157 std::vector<uint16_t> mBunchwords;
158 std::vector<o2::phos::RawReaderError> mOutputHWErrors;
159 std::vector<short> mOutputFitChi;
160 std::vector<Cell> mTRUFlags;
161 std::array<int32_t, 224> mTRUDigits;
162 std::bitset<128> mFlag4x4Bitset;
163 std::bitset<128> mFlag2x2Bitset;
164 RCUTrailer mRCUTrailer;
165
166 ClassDefNV(AltroDecoder, 2);
167};
168
169} // namespace phos
170
171} // namespace o2
172
173#endif
Error handling of the ALTRO Decoder.
const char * what() const noexcept override
Access to error message cnnected to the error.
AltroDecoderError(ErrorType_t errtype, const char *message)
Constructor.
~AltroDecoderError() noexcept override=default
Destructor.
@ RCU_VERSION_ERROR
RCU trailer version not matching with the version in the raw header.
@ RCU_TRAILER_ERROR
RCU trailer cannot be decoded or invalid.
@ ALTRO_BUNCH_LENGTH_ERROR
ALTRO bunch has incorrect length.
@ ALTRO_MAPPING_ERROR
Incorrect ALTRO channel mapping.
@ ALTRO_PAYLOAD_ERROR
ALTRO payload cannot be decoded.
@ RCU_TRAILER_SIZE_ERROR
RCU trailer size length.
@ ALTRO_BUNCH_HEADER_ERROR
ALTRO bunch header cannot be decoded or is invalid.
@ CHANNEL_ERROR
Channels not initialized.
ErrorType_t getErrorType() const noexcept
Access to the error type connected to the error.
Decoder of the ALTRO data in the raw page.
AltroDecoderError::ErrorType_t decode(RawReaderMemory &rawreader, CaloRawFitter *rawFitter, std::vector< o2::phos::Cell > &cellContainer, std::vector< o2::phos::Cell > &truContainer)
Decode the ALTRO stream.
void setPresamples(int ps)
const std::vector< short > & chi2list()
void setCombineHGLG(bool a)
const RCUTrailer & getRCUTrailer() const
Get reference to the RCU trailer object.
const std::vector< o2::phos::RawReaderError > & hwerrors()
Get list of hw errors found in decoding.
~AltroDecoder()=default
Destructor.
void setKeepTruNoise(bool a)
AltroDecoder()=default
Constructor.
void readChannels(const std::vector< uint32_t > &payloadwords, CaloRawFitter *rawFitter, std::vector< o2::phos::Cell > &cellContainer, std::vector< o2::phos::Cell > &truContainer)
Read channels for the current event in the raw buffer.
Information stored in the RCU trailer.
Definition RCUTrailer.h:56
Reader for raw data produced by the Readout application in in-memory format.
GLuint GLsizei const GLchar * message
Definition glcorearb.h:2517
GLboolean GLboolean GLboolean GLboolean a
Definition glcorearb.h:1233
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...