Project
Loading...
Searching...
No Matches
ZeroSuppression.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
15#ifndef ALICEO2_DATAFORMATSTPC_ZEROSUPPRESSION_H
16#define ALICEO2_DATAFORMATSTPC_ZEROSUPPRESSION_H
17#ifndef GPUCA_GPUCODE_DEVICE
18#include <cstdint>
19#include <cstddef> // for size_t
20#endif
21#include "GPUCommonDef.h"
22#include "GPUCommonRtypes.h"
23
24namespace o2
25{
26namespace tpc
27{
28
36
37struct TPCZSHDR {
38 static GPUglobalconstexpr() size_t TPC_ZS_PAGE_SIZE = 8192;
39 static GPUglobalconstexpr() size_t TPC_MAX_SEQ_LEN = 138;
40 static GPUglobalconstexpr() size_t TPC_MAX_ZS_ROW_IN_ENDPOINT = 9;
41 static GPUglobalconstexpr() unsigned int MAX_DIGITS_IN_PAGE = (TPC_ZS_PAGE_SIZE - 64 - 6 - 4 - 3) * 8 / 10;
42 static GPUglobalconstexpr() unsigned int TPC_ZS_NBITS_V1 = 10;
43 static GPUglobalconstexpr() unsigned int TPC_ZS_NBITS_V2 = 12;
44
45 unsigned char version; // ZS format version:
46 // 1: original row-based format with 10-bit ADC values
47 // 2: original row-based format with 12-bit ADC values
48 // 3: improved link-based format with extra META header
49 // 4: dense link based
50 unsigned char nTimeBinSpan; // Span of time bins in this raw page, i.e. last timeBin is <= timeOffset + nTimeBinSpan
51 unsigned short cruID; // CRU id
52 unsigned short timeOffset; // Time offset in BC after orbit in RDH
53 unsigned short nADCsamples; // Total number of ADC samples in this raw page
54};
55struct TPCZSHDRV2 : public TPCZSHDR {
56 static GPUglobalconstexpr() unsigned int TPC_ZS_NBITS_V34 = 12;
57 static GPUglobalconstexpr() bool TIGHTLY_PACKED_V3 = false;
58 static GPUglobalconstexpr() unsigned int SAMPLESPER64BIT = 64 / TPC_ZS_NBITS_V34; // 5 12-bit samples with 4 bit padding per 64 bit word for non-TIGHTLY_PACKED data
59 static GPUglobalconstexpr() unsigned int TRIGGER_WORD_SIZE = 16; // trigger word size in bytes
60 enum ZSFlags : unsigned char {
61 TriggerWordPresent = 1,
62 nTimeBinSpanBit8 = 2,
63 payloadExtendsToNextPage = 4
64 };
65
66 unsigned short firstZSDataOffset; // zs Version 3: Offset (after the TPCZSHDRV2 header) in 128bit words to first ZS data (in between can be trigger words, etc.)
67 // zs Version >=4: Offset (from beginning of page) in bytes of the first ZS data.
68 unsigned short nTimebinHeaders; // Number of timebin headers
69 unsigned char flags; // flag field (zs version 4 only): 0 = triggerWordPresent, 1 = bit 8 of nTimeBinSpan (i.e. nTimeBinSpan += 256)
70 unsigned char reserved1; // 16 reserved bits, header is 128 bit
71 unsigned char reserved2; // 8 reserved bits, header is 128 bit
72 unsigned char magicWord; // Magic word
73};
74struct TPCZSTBHDR {
75 unsigned short rowMask;
76 GPUd() unsigned short* rowAddr1() { return (unsigned short*)((unsigned char*)this + sizeof(*this)); }
77 GPUd() const unsigned short* rowAddr1() const { return (unsigned short*)((unsigned char*)this + sizeof(*this)); }
78};
79
80struct ZeroSuppressedContainer { // Struct for the TPC zero suppressed data format
81 // RDH 64 byte
82 // 6 byte header for the zero suppressed format ; 8 bit version, 8 bit number of timebins, 16 bit CRU ID, 16 bit time offset
83 // Time bin information
84 unsigned long int rdh[8] = {}; //< 8 * 64 bit RDH (raw data header)
85 TPCZSHDR hdr; // ZS header
86};
87
92 static GPUglobalconstexpr() uint16_t MaxTriggerEntries = 8;
93
95 enum TriggerType : uint8_t {
96 PhT = 1,
97 PP = 2,
98 Cal = 4,
99 };
100 uint16_t triggerEntries[MaxTriggerEntries] = {};
101
102 uint16_t getTriggerBC(int entry = 0) const { return triggerEntries[entry] & 0xFFF; }
103 uint16_t getTriggerType(int entry = 0) const { return (triggerEntries[entry] >> 12) & 0x7; }
104 bool isValid(int entry = 0) const { return triggerEntries[entry] & 0x8000; }
105
107};
108
111 TriggerWordDLBZS triggerWord{};
112 uint32_t orbit{};
113
115};
116
117} // namespace tpc
118} // namespace o2
119#endif
uint64_t orbit
Definition RawEventData.h:6
GLuint entry
Definition glcorearb.h:5735
@ ZSVersionDenseLinkBased
@ ZSVersionLinkBasedWithMeta
@ ZSVersionDenseLinkBasedV2
@ ZSVersionRowBased10BitADC
@ ZSVersionRowBased12BitADC
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
unsigned short nTimebinHeaders
unsigned char magicWord
unsigned short firstZSDataOffset
unsigned char reserved2
static GPUglobalconstexpr() unsigned int TPC_ZS_NBITS_V34
unsigned char reserved1
unsigned char nTimeBinSpan
unsigned char version
unsigned short timeOffset
unsigned short cruID
static GPUglobalconstexpr() size_t TPC_ZS_PAGE_SIZE
unsigned short nADCsamples
GPUd() unsigned short *rowAddr1()
unsigned short rowMask
GPUd() const unsigned short *rowAddr1() const
Trigger info including the orbit.
ClassDefNV(TriggerInfoDLBZS, 1)
uint16_t getTriggerType(int entry=0) const
uint16_t getTriggerBC(int entry=0) const
static GPUglobalconstexpr() uint16_t MaxTriggerEntries
Maximum number of trigger information.
TriggerType
trigger types as in the ttype bits
ClassDefNV(TriggerWordDLBZS, 1)
bool isValid(int entry=0) const