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 constexpr size_t TPC_ZS_PAGE_SIZE = 8192;
39 static constexpr size_t TPC_MAX_SEQ_LEN = 138;
40 static constexpr size_t TPC_MAX_ZS_ROW_IN_ENDPOINT = 9;
41 static constexpr unsigned int MAX_DIGITS_IN_PAGE = (TPC_ZS_PAGE_SIZE - 64 - 6 - 4 - 3) * 8 / 10;
42 static constexpr unsigned int TPC_ZS_NBITS_V1 = 10;
43 static constexpr 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 constexpr unsigned int TPC_ZS_NBITS_V34 = 12;
57 static constexpr bool TIGHTLY_PACKED_V3 = false;
58 static constexpr 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 constexpr unsigned int TRIGGER_WORD_SIZE = 16; // trigger word size in bytes
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 constexpr uint16_t MaxTriggerEntries = 8;
93
95 enum TriggerType : uint8_t {
96 PhT = 1,
97 PP = 2,
98 Cal = 4,
99 };
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
116
117} // namespace tpc
118} // namespace o2
119#endif
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
static constexpr bool TIGHTLY_PACKED_V3
static constexpr unsigned int TPC_ZS_NBITS_V34
static constexpr unsigned int SAMPLESPER64BIT
static constexpr unsigned int TRIGGER_WORD_SIZE
unsigned char reserved2
unsigned char reserved1
static constexpr size_t TPC_MAX_ZS_ROW_IN_ENDPOINT
unsigned char nTimeBinSpan
static constexpr size_t TPC_MAX_SEQ_LEN
unsigned char version
unsigned short timeOffset
unsigned short cruID
static constexpr unsigned int TPC_ZS_NBITS_V1
static constexpr unsigned int TPC_ZS_NBITS_V2
static constexpr size_t TPC_ZS_PAGE_SIZE
unsigned short nADCsamples
static constexpr unsigned int MAX_DIGITS_IN_PAGE
GPUd() unsigned short *rowAddr1()
unsigned short rowMask
GPUd() const unsigned short *rowAddr1() const
Trigger info including the orbit.
uint32_t orbit
orbit of the trigger word
ClassDefNV(TriggerInfoDLBZS, 1)
TriggerWordDLBZS triggerWord
trigger Word information
uint16_t getTriggerType(int entry=0) const
static constexpr uint16_t MaxTriggerEntries
Maximum number of trigger information.
uint16_t getTriggerBC(int entry=0) const
TriggerType
trigger types as in the ttype bits
@ Cal
Laser (Calibration trigger)
@ PP
Pre Pulse for calibration.
ClassDefNV(TriggerWordDLBZS, 1)
uint16_t triggerEntries[MaxTriggerEntries]
bool isValid(int entry=0) const