Project
Loading...
Searching...
No Matches
DataBlockFIT.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//
12// file DataBlockFIT.h class for RAW data format data blocks at FIT
13//
14// Artur.Furs
15// afurs@cern.ch
16//
17
18#ifndef ALICEO2_FIT_DATABLOCKFIT_H_
19#define ALICEO2_FIT_DATABLOCKFIT_H_
20#include <iostream>
21#include <Rtypes.h>
24
25#include <gsl/span>
26#include <iostream>
27#include <cassert>
28namespace o2
29{
30namespace fit
31{
32// FIT DATA BLOCK DEFINITIONS
33
34// standard data block from PM
35template <typename ConfigType, typename RawHeaderPMtype, typename RawDataPMtype>
36class DataBlockPM : public DataBlockBase<DataBlockPM, ConfigType, RawHeaderPMtype, RawDataPMtype>
37{
38 public:
39 DataBlockPM() = default;
40 DataBlockPM(const DataBlockPM&) = default;
41 typedef RawHeaderPMtype RawHeaderPM;
42 typedef RawDataPMtype RawDataPM;
45
46 void deserialize(gsl::span<const uint8_t> srcBytes, size_t& srcByteShift)
47 {
48 HeaderPM::deserialize(srcBytes, HeaderPM::MaxNwords, srcByteShift);
49 DataPM::deserialize(srcBytes, HeaderPM::mData[0].nGBTWords, srcByteShift);
50 }
51 const std::size_t getNgbtWords() const { return HeaderPM::mData[0].nGBTWords; }
52 std::vector<char> serialize() const
53 {
54 std::size_t nBytes = HeaderPM::MaxNwords * HeaderPM::sSizeWord;
55 const std::size_t nGBTWords = HeaderPM::mData[0].nGBTWords;
57 std::vector<char> vecBytes(nBytes);
58 std::size_t destBytes = 0;
59 const auto statusBits = HeaderPM::mStatusBits | DataPM::mStatusBits;
61 // Emulation for IncompletePayload
62 auto dataBlockTmp = (*this);
63 dataBlockTmp.HeaderPM::mData[0].nGBTWords = DataPM::MaxNwords + 1;
64 dataBlockTmp.HeaderPM::serialize(vecBytes, HeaderPM::MaxNwords, destBytes);
65 } else {
66 HeaderPM::serialize(vecBytes, HeaderPM::MaxNwords, destBytes);
67 }
68 DataPM::serialize(vecBytes, nGBTWords, destBytes);
69 return vecBytes;
70 }
71 // Custom sanity checking for current deserialized block
72 // put here code for raw data checking
73 void sanityCheck(bool& flag, typename RawDataMetric::Status_t& metric)
74 {
77 }
78 if (DataPM::mNelements == 0) {
80 flag = false;
81 return;
82 }
84 DataPM::mNelements--; // in case of half GBT-word filling
85 }
86 // TODO, Descriptor checking, Channel range
87 }
88};
89
90// standard data block from TCM
91template <typename ConfigType, typename RawHeaderTCMtype, typename RawDataTCMtype>
92class DataBlockTCM : public DataBlockBase<DataBlockTCM, ConfigType, RawHeaderTCMtype, RawDataTCMtype>
93{
94 public:
95 DataBlockTCM() = default;
96 DataBlockTCM(const DataBlockTCM&) = default;
97 typedef RawHeaderTCMtype RawHeaderTCM;
98 typedef RawDataTCMtype RawDataTCM;
101
102 const std::size_t getNgbtWords() const { return HeaderTCM::mData[0].nGBTWords; }
103 void deserialize(gsl::span<const uint8_t> srcBytes, size_t& srcByteShift)
104 {
105 HeaderTCM::deserialize(srcBytes, HeaderTCM::MaxNwords, srcByteShift);
106 DataTCM::deserialize(srcBytes, HeaderTCM::mData[0].nGBTWords, srcByteShift);
107 }
108 std::vector<char> serialize() const
109 {
110 std::size_t nBytes = HeaderTCM::MaxNwords * HeaderTCM::sSizeWord;
111 const std::size_t nGBTWords = HeaderTCM::mData[0].nGBTWords;
113 std::vector<char> vecBytes(nBytes);
114 std::size_t destBytes = 0;
115 const auto statusBits = HeaderTCM::mStatusBits | DataTCM::mStatusBits;
117 // Emulation for IncompletePayload
118 auto dataBlockTmp = (*this);
119 dataBlockTmp.HeaderTCM::mData[0].nGBTWords = DataTCM::MaxNwords + 1;
120 dataBlockTmp.HeaderTCM::serialize(vecBytes, HeaderTCM::MaxNwords, destBytes);
121 } else {
122 HeaderTCM::serialize(vecBytes, HeaderTCM::MaxNwords, destBytes);
123 }
124 DataTCM::serialize(vecBytes, nGBTWords, destBytes);
125 return vecBytes;
126 }
127 // Custom sanity checking for current deserialized block
128 // put here code for raw data checking
129 void sanityCheck(bool& flag, typename RawDataMetric::Status_t& metric)
130 {
133 }
134 if (DataTCM::mNelements == 0) {
136 flag = false;
137 return;
138 }
139 }
140};
141
142// extended TCM mode, 1 TCMdata + 8 TCMdataExtendedstructs
143template <typename ConfigType, typename RawHeaderTCMextType, typename RawDataTCMtype, typename RawDataTCMextType>
144class DataBlockTCMext : public DataBlockBase<DataBlockTCMext, ConfigType, RawHeaderTCMextType, RawDataTCMtype, RawDataTCMextType>
145{
146 public:
147 DataBlockTCMext() = default;
149 typedef RawHeaderTCMextType RawHeaderTCMext;
150 typedef RawDataTCMtype RawDataTCM;
151 typedef RawDataTCMextType RawDataTCMext;
155
156 const std::size_t getNgbtWords() const { return HeaderTCMext::mData[0].nGBTWords; }
157 void deserialize(gsl::span<const uint8_t> srcBytes, size_t& srcByteShift)
158 {
159 HeaderTCMext::deserialize(srcBytes, HeaderTCMext::MaxNwords, srcByteShift);
160 DataTCM::deserialize(srcBytes, DataTCM::MaxNwords, srcByteShift);
162 }
163
164 std::vector<char> serialize() const
165 {
167 const std::size_t nGBTWords = HeaderTCMext::mData[0].nGBTWords;
169 std::vector<char> vecBytes(nBytes);
170 std::size_t destBytes = 0;
171 const auto statusBits = HeaderTCMext::mStatusBits | DataTCM::mStatusBits;
173 // Emulation for IncompletePayload
174 auto dataBlockTmp = (*this);
175 dataBlockTmp.HeaderTCMext::mData[0].nGBTWords = DataTCM::MaxNwords + 1;
176 dataBlockTmp.HeaderTCMext::serialize(vecBytes, HeaderTCMext::MaxNwords, destBytes);
177 } else {
179 }
180 DataTCM::serialize(vecBytes, DataTCM::MaxNwords, destBytes);
181 DataTCMext::serialize(vecBytes, nGBTWords - DataTCM::MaxNwords, destBytes);
182 return vecBytes;
183 }
184 // Custom sanity checking for current deserialized block
185 // put here code for raw data checking
196};
197
198} // namespace fit
199} // namespace o2
200#endif
uint64_t nGBTWords
uint8_t channelID
Definition RawEventData.h:8
bool isBadDescriptor() const
DataBlockWrapper< ConfigType, RawHeaderPM > HeaderPM
DataBlockWrapper< ConfigType, RawDataPM > DataPM
const std::size_t getNgbtWords() const
std::vector< char > serialize() const
void sanityCheck(bool &flag, typename RawDataMetric::Status_t &metric)
DataBlockPM(const DataBlockPM &)=default
void deserialize(gsl::span< const uint8_t > srcBytes, size_t &srcByteShift)
RawDataPMtype RawDataPM
RawHeaderPMtype RawHeaderPM
DataBlockWrapper< ConfigType, RawDataTCM > DataTCM
DataBlockWrapper< ConfigType, RawHeaderTCM > HeaderTCM
std::vector< char > serialize() const
const std::size_t getNgbtWords() const
RawHeaderTCMtype RawHeaderTCM
void deserialize(gsl::span< const uint8_t > srcBytes, size_t &srcByteShift)
DataBlockTCM(const DataBlockTCM &)=default
void sanityCheck(bool &flag, typename RawDataMetric::Status_t &metric)
RawDataTCMtype RawDataTCM
const std::size_t getNgbtWords() const
RawDataTCMtype RawDataTCM
void deserialize(gsl::span< const uint8_t > srcBytes, size_t &srcByteShift)
DataBlockTCMext(const DataBlockTCMext &)=default
DataBlockWrapper< ConfigType, RawHeaderTCMext > HeaderTCMext
RawHeaderTCMextType RawHeaderTCMext
DataBlockWrapper< ConfigType, RawDataTCMext > DataTCMext
void sanityCheck(bool &flag, typename RawDataMetric::Status_t &metric)
RawDataTCMextType RawDataTCMext
std::vector< char > serialize() const
DataBlockWrapper< ConfigType, RawDataTCM > DataTCM
TFitResultPtr fit(const size_t nBins, const T *arr, const T xMin, const T xMax, TF1 &func, std::string_view option="")
Definition fit.h:59
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
void deserialize(const gsl::span< const uint8_t > inputBytes, size_t nWords, size_t &srcPos)
static constexpr int MaxNwords
void serialize(std::vector< char > &vecBytes, size_t nWords, size_t &destPos) const
Data_t mData[Data_t::MaxNelements]
static constexpr std::size_t sSizeWord
RawDataMetric::Status_t mStatusBits
static bool isBitActive(Status_t metric, EStatusBits statusBit)
static void setStatusBit(Status_t &metric, EStatusBits statusBit, bool val=true)