Project
Loading...
Searching...
No Matches
ZDCTDCData.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#ifndef ZDC_TDC_DATA_H
13#define ZDC_TDC_DATA_H
14
15#include "Framework/Logger.h"
16#include "ZDCBase/Constants.h"
17#include <array>
18#include <TMath.h>
19#include <Rtypes.h>
20
24
25namespace o2
26{
27namespace zdc
28{
29
31
32 static uint32_t mErrVal[NTDCChannels]; // Errors in encoding TDC values
33 static uint32_t mErrId; // Errors with TDC Id
34
35 static void print()
36 {
37 if (mErrId > 0) {
38 LOG(error) << "TDCId was out of range #times = " << mErrId;
39 }
40 for (int itdc = 0; itdc < NTDCChannels; itdc++) {
41 if (mErrVal[itdc] > 0) {
42 LOG(error) << "TDCVal itdc=" << itdc << " " << ChannelNames[TDCSignal[itdc]] << " was out of range #times = " << mErrVal[itdc];
43 }
44 }
45 }
46};
47
48struct ZDCTDCData {
49
50 uint8_t id = 0xff; // channel ID
51 int16_t val = 0; // tdc value
52 float amp = 0; // tdc amplitude
53
54 ZDCTDCData() = default;
55
56 ZDCTDCData(uint8_t ida, int16_t vala, float ampa, bool isbeg = false, bool isend = false)
57 {
58 // TDC value and amplitude are encoded externally
59 id = ida < NTDCChannels ? ida : 0xf;
60 id = id | (isbeg ? 0x80 : 0x00);
61 id = id | (isend ? 0x40 : 0x00);
62
63 if (ida < NTDCChannels) {
64 val = vala;
65 amp = ampa;
66 } else {
67 val = kMaxShort;
68 amp = FInfty;
69#ifdef O2_ZDC_DEBUG
70 LOG(error) << __func__ << "TDC Id = " << int(ida) << " is out of range";
71#endif
73 }
74 }
75
76 ZDCTDCData(uint8_t ida, float vala, float ampa, bool isbeg = false, bool isend = false)
77 {
78 // TDC value and amplitude are encoded externally but argument is float
79 id = ida < NTDCChannels ? ida : 0xf;
80 id = id | (isbeg ? 0x80 : 0x00);
81 id = id | (isend ? 0x40 : 0x00);
82
83 if (ida >= NTDCChannels) {
84 val = kMaxShort;
85 amp = FInfty;
86#ifdef O2_ZDC_DEBUG
87 LOG(error) << __func__ << "TDC Id = " << int(ida) << " is out of range";
88#endif
90 return;
91 }
92
93 auto TDCVal = std::nearbyint(vala);
94
95 if (TDCVal < kMinShort) {
96 int itdc = int(id);
97#ifdef O2_ZDC_DEBUG
98 LOG(error) << __func__ << "TDCVal itdc=" << itdc << " " << ChannelNames[TDCSignal[itdc]] << " = " << TDCVal << " is out of range";
99#endif
101 TDCVal = kMinShort;
102 }
103
104 if (TDCVal > kMaxShort) {
105 int itdc = int(ida);
106#ifdef O2_ZDC_DEBUG
107 LOG(error) << __func__ << "TDCVal itdc=" << itdc << " " << ChannelNames[TDCSignal[itdc]] << " = " << TDCVal << " is out of range";
108#endif
110 TDCVal = kMaxShort;
111 }
112
113 val = TDCVal;
114 amp = ampa;
115 }
116
117 inline float amplitude() const
118 {
119 return amp;
120 }
121
122 inline float value() const
123 {
124 // Return decoded value (ns)
125 return FTDCVal * val;
126 }
127
128 inline int ch() const
129 {
130 return (id & 0x0f);
131 }
132
133 inline bool isBeg() const
134 {
135 return id & 0x80 ? true : false;
136 }
137
138 inline bool isEnd() const
139 {
140 return id & 0x40 ? true : false;
141 }
142
143 void print() const;
144
146};
147} // namespace zdc
148} // namespace o2
149
150#endif
GLuint GLfloat * val
Definition glcorearb.h:1582
struct o2::upgrades_utils::@463 zdc
structure to keep FT0 information
const int TDCSignal[NTDCChannels]
Definition Constants.h:181
constexpr float FInfty
Definition Constants.h:77
constexpr int NTDCChannels
Definition Constants.h:90
constexpr std::string_view ChannelNames[]
Definition Constants.h:147
constexpr float FTDCVal
Definition Constants.h:103
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
static uint32_t mErrId
Definition ZDCTDCData.h:33
static uint32_t mErrVal[NTDCChannels]
Definition ZDCTDCData.h:32
static void print()
Definition ZDCTDCData.h:35
void print() const
ClassDefNV(ZDCTDCData, 2)
bool isEnd() const
Definition ZDCTDCData.h:138
bool isBeg() const
Definition ZDCTDCData.h:133
float value() const
Definition ZDCTDCData.h:122
ZDCTDCData(uint8_t ida, int16_t vala, float ampa, bool isbeg=false, bool isend=false)
Definition ZDCTDCData.h:56
float amplitude() const
Definition ZDCTDCData.h:117
ZDCTDCData(uint8_t ida, float vala, float ampa, bool isbeg=false, bool isend=false)
Definition ZDCTDCData.h:76
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"