Project
Loading...
Searching...
No Matches
CalibTimeSlewingParamTOF.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
14
15#ifndef ALICEO2_CALIBTIMESLEWINGPARAMTOF_H
16#define ALICEO2_CALIBTIMESLEWINGPARAMTOF_H
17
18#include <vector>
19#include <array>
20#include "Rtypes.h"
21
22namespace o2
23{
24namespace dataformats
25{
27{
28 public:
29 static const int NCHANNELS = 157248; //
30 static const int NSECTORS = 18; //
31 static const int NCHANNELXSECTOR = NCHANNELS / NSECTORS; //
32
33 static constexpr float MAXTOT = 65535 * 1E-3; // max tot -> max short / 1000.
34
36
38
40
41 float getChannelOffset(int channel) const;
42 void setChannelOffset(int channel, float val);
43
44 float evalTimeSlewing(int channel, float tot) const;
45
46 void addTimeSlewingInfo(int channel, float tot, float time);
47 void setTimeSlewingInfo(int channel, float offsetold, int nold, const unsigned short* oldtot, const short* olddt, int nnew, const unsigned short* newtot, const short* newdt);
48
49 bool updateOffsetInfo(int channel, float residualOffset);
50
51 const std::vector<std::pair<unsigned short, short>>& getVector(int sector) const { return *(mTimeSlewing[sector]); }
52
53 int size() const
54 {
55 int n = 0;
56 for (int i = 0; i < NSECTORS; i++) {
57 n += mTimeSlewing[i]->size();
58 }
59 return n;
60 }
61
62 int getSize(int sector) const { return mTimeSlewing[sector]->size(); }
63
64 int getStartIndexForChannel(int sector, int channel) const { return (*(mChannelStart[sector]))[channel]; }
65 int getStopIndexForChannel(int sector, int channel) const { return channel != NCHANNELXSECTOR - 1 ? (*(mChannelStart[sector]))[channel + 1] : getSize(sector) - 1; }
66 float getFractionUnderPeak(int sector, int channel) const { return (*(mFractionUnderPeak[sector]))[channel]; }
67 float getSigmaPeak(int sector, int channel) const { return (*(mSigmaPeak[sector]))[channel]; }
68 float getFractionUnderPeak(int channel) const
69 {
70 int sector = channel / NCHANNELXSECTOR;
71 int channelInSector = channel % NCHANNELXSECTOR;
72 return getFractionUnderPeak(sector, channelInSector);
73 }
74 float getSigmaPeak(int channel) const
75 {
76 int sector = channel / NCHANNELXSECTOR;
77 int channelInSector = channel % NCHANNELXSECTOR;
78 return getSigmaPeak(sector, channelInSector);
79 }
80 void setFractionUnderPeak(int sector, int channel, float value) { (*(mFractionUnderPeak[sector]))[channel] = value; }
81 void setSigmaPeak(int sector, int channel, float value) { (*(mSigmaPeak[sector]))[channel] = value; }
82
83 bool isProblematic(int channel)
84 {
85 int sector = channel / NCHANNELXSECTOR;
86 int channelInSector = channel % NCHANNELXSECTOR;
87 return (getFractionUnderPeak(sector, channelInSector) < 0);
88 }
89
91 void bind();
92
93 long getStartValidity() const { return mStartValidity; }
94 long getEndValidity() const { return mEndValidity; }
95
96 void setStartValidity(long validity) { mStartValidity = validity; }
97 void setEndValidity(long validity) { mEndValidity = validity; }
98
99 private:
100 std::array<int, NCHANNELXSECTOR> mChannelStartSec0;
101 std::array<float, NCHANNELXSECTOR> mGlobalOffsetSec0;
102 std::vector<std::pair<unsigned short, short>> mTimeSlewingSec0;
103 std::array<float, NCHANNELXSECTOR> mFractionUnderPeakSec0;
104 std::array<float, NCHANNELXSECTOR> mSigmaPeakSec0;
105
106 std::array<int, NCHANNELXSECTOR> mChannelStartSec1;
107 std::array<float, NCHANNELXSECTOR> mGlobalOffsetSec1;
108 std::vector<std::pair<unsigned short, short>> mTimeSlewingSec1;
109 std::array<float, NCHANNELXSECTOR> mFractionUnderPeakSec1;
110 std::array<float, NCHANNELXSECTOR> mSigmaPeakSec1;
111
112 std::array<int, NCHANNELXSECTOR> mChannelStartSec2;
113 std::array<float, NCHANNELXSECTOR> mGlobalOffsetSec2;
114 std::vector<std::pair<unsigned short, short>> mTimeSlewingSec2;
115 std::array<float, NCHANNELXSECTOR> mFractionUnderPeakSec2;
116 std::array<float, NCHANNELXSECTOR> mSigmaPeakSec2;
117
118 std::array<int, NCHANNELXSECTOR> mChannelStartSec3;
119 std::array<float, NCHANNELXSECTOR> mGlobalOffsetSec3;
120 std::vector<std::pair<unsigned short, short>> mTimeSlewingSec3;
121 std::array<float, NCHANNELXSECTOR> mFractionUnderPeakSec3;
122 std::array<float, NCHANNELXSECTOR> mSigmaPeakSec3;
123
124 std::array<int, NCHANNELXSECTOR> mChannelStartSec4;
125 std::array<float, NCHANNELXSECTOR> mGlobalOffsetSec4;
126 std::vector<std::pair<unsigned short, short>> mTimeSlewingSec4;
127 std::array<float, NCHANNELXSECTOR> mFractionUnderPeakSec4;
128 std::array<float, NCHANNELXSECTOR> mSigmaPeakSec4;
129
130 std::array<int, NCHANNELXSECTOR> mChannelStartSec5;
131 std::array<float, NCHANNELXSECTOR> mGlobalOffsetSec5;
132 std::vector<std::pair<unsigned short, short>> mTimeSlewingSec5;
133 std::array<float, NCHANNELXSECTOR> mFractionUnderPeakSec5;
134 std::array<float, NCHANNELXSECTOR> mSigmaPeakSec5;
135
136 std::array<int, NCHANNELXSECTOR> mChannelStartSec6;
137 std::array<float, NCHANNELXSECTOR> mGlobalOffsetSec6;
138 std::vector<std::pair<unsigned short, short>> mTimeSlewingSec6;
139 std::array<float, NCHANNELXSECTOR> mFractionUnderPeakSec6;
140 std::array<float, NCHANNELXSECTOR> mSigmaPeakSec6;
141
142 std::array<int, NCHANNELXSECTOR> mChannelStartSec7;
143 std::array<float, NCHANNELXSECTOR> mGlobalOffsetSec7;
144 std::vector<std::pair<unsigned short, short>> mTimeSlewingSec7;
145 std::array<float, NCHANNELXSECTOR> mFractionUnderPeakSec7;
146 std::array<float, NCHANNELXSECTOR> mSigmaPeakSec7;
147
148 std::array<int, NCHANNELXSECTOR> mChannelStartSec8;
149 std::array<float, NCHANNELXSECTOR> mGlobalOffsetSec8;
150 std::vector<std::pair<unsigned short, short>> mTimeSlewingSec8;
151 std::array<float, NCHANNELXSECTOR> mFractionUnderPeakSec8;
152 std::array<float, NCHANNELXSECTOR> mSigmaPeakSec8;
153
154 std::array<int, NCHANNELXSECTOR> mChannelStartSec9;
155 std::array<float, NCHANNELXSECTOR> mGlobalOffsetSec9;
156 std::vector<std::pair<unsigned short, short>> mTimeSlewingSec9;
157 std::array<float, NCHANNELXSECTOR> mFractionUnderPeakSec9;
158 std::array<float, NCHANNELXSECTOR> mSigmaPeakSec9;
159
160 std::array<int, NCHANNELXSECTOR> mChannelStartSec10;
161 std::array<float, NCHANNELXSECTOR> mGlobalOffsetSec10;
162 std::vector<std::pair<unsigned short, short>> mTimeSlewingSec10;
163 std::array<float, NCHANNELXSECTOR> mFractionUnderPeakSec10;
164 std::array<float, NCHANNELXSECTOR> mSigmaPeakSec10;
165
166 std::array<int, NCHANNELXSECTOR> mChannelStartSec11;
167 std::array<float, NCHANNELXSECTOR> mGlobalOffsetSec11;
168 std::vector<std::pair<unsigned short, short>> mTimeSlewingSec11;
169 std::array<float, NCHANNELXSECTOR> mFractionUnderPeakSec11;
170 std::array<float, NCHANNELXSECTOR> mSigmaPeakSec11;
171
172 std::array<int, NCHANNELXSECTOR> mChannelStartSec12;
173 std::array<float, NCHANNELXSECTOR> mGlobalOffsetSec12;
174 std::vector<std::pair<unsigned short, short>> mTimeSlewingSec12;
175 std::array<float, NCHANNELXSECTOR> mFractionUnderPeakSec12;
176 std::array<float, NCHANNELXSECTOR> mSigmaPeakSec12;
177
178 std::array<int, NCHANNELXSECTOR> mChannelStartSec13;
179 std::array<float, NCHANNELXSECTOR> mGlobalOffsetSec13;
180 std::vector<std::pair<unsigned short, short>> mTimeSlewingSec13;
181 std::array<float, NCHANNELXSECTOR> mFractionUnderPeakSec13;
182 std::array<float, NCHANNELXSECTOR> mSigmaPeakSec13;
183
184 std::array<int, NCHANNELXSECTOR> mChannelStartSec14;
185 std::array<float, NCHANNELXSECTOR> mGlobalOffsetSec14;
186 std::vector<std::pair<unsigned short, short>> mTimeSlewingSec14;
187 std::array<float, NCHANNELXSECTOR> mFractionUnderPeakSec14;
188 std::array<float, NCHANNELXSECTOR> mSigmaPeakSec14;
189
190 std::array<int, NCHANNELXSECTOR> mChannelStartSec15;
191 std::array<float, NCHANNELXSECTOR> mGlobalOffsetSec15;
192 std::vector<std::pair<unsigned short, short>> mTimeSlewingSec15;
193 std::array<float, NCHANNELXSECTOR> mFractionUnderPeakSec15;
194 std::array<float, NCHANNELXSECTOR> mSigmaPeakSec15;
195
196 std::array<int, NCHANNELXSECTOR> mChannelStartSec16;
197 std::array<float, NCHANNELXSECTOR> mGlobalOffsetSec16;
198 std::vector<std::pair<unsigned short, short>> mTimeSlewingSec16;
199 std::array<float, NCHANNELXSECTOR> mFractionUnderPeakSec16;
200 std::array<float, NCHANNELXSECTOR> mSigmaPeakSec16;
201
202 std::array<int, NCHANNELXSECTOR> mChannelStartSec17;
203 std::array<float, NCHANNELXSECTOR> mGlobalOffsetSec17;
204 std::vector<std::pair<unsigned short, short>> mTimeSlewingSec17;
205 std::array<float, NCHANNELXSECTOR> mFractionUnderPeakSec17;
206 std::array<float, NCHANNELXSECTOR> mSigmaPeakSec17;
207
208 // TOF channel calibrations
209 std::array<int, NCHANNELXSECTOR>* mChannelStart[NSECTORS] = {&mChannelStartSec0, &mChannelStartSec1, &mChannelStartSec2, &mChannelStartSec3, &mChannelStartSec4, &mChannelStartSec5, &mChannelStartSec6, &mChannelStartSec7, &mChannelStartSec8, &mChannelStartSec9, &mChannelStartSec10, &mChannelStartSec11, &mChannelStartSec12, &mChannelStartSec13, &mChannelStartSec14, &mChannelStartSec15, &mChannelStartSec16, &mChannelStartSec17};
210 std::array<float, NCHANNELXSECTOR>* mGlobalOffset[NSECTORS] = {&mGlobalOffsetSec0, &mGlobalOffsetSec1, &mGlobalOffsetSec2, &mGlobalOffsetSec3, &mGlobalOffsetSec4, &mGlobalOffsetSec5, &mGlobalOffsetSec6, &mGlobalOffsetSec7, &mGlobalOffsetSec8, &mGlobalOffsetSec9, &mGlobalOffsetSec10, &mGlobalOffsetSec11, &mGlobalOffsetSec12, &mGlobalOffsetSec13, &mGlobalOffsetSec14, &mGlobalOffsetSec15, &mGlobalOffsetSec16, &mGlobalOffsetSec17};
211 std::vector<std::pair<unsigned short, short>>* mTimeSlewing[NSECTORS] = {&mTimeSlewingSec0, &mTimeSlewingSec1, &mTimeSlewingSec2, &mTimeSlewingSec3, &mTimeSlewingSec4, &mTimeSlewingSec5, &mTimeSlewingSec6, &mTimeSlewingSec7, &mTimeSlewingSec8, &mTimeSlewingSec9, &mTimeSlewingSec10, &mTimeSlewingSec11, &mTimeSlewingSec12, &mTimeSlewingSec13, &mTimeSlewingSec14, &mTimeSlewingSec15, &mTimeSlewingSec16, &mTimeSlewingSec17};
212 std::array<float, NCHANNELXSECTOR>* mFractionUnderPeak[NSECTORS] = {&mFractionUnderPeakSec0, &mFractionUnderPeakSec1, &mFractionUnderPeakSec2, &mFractionUnderPeakSec3, &mFractionUnderPeakSec4, &mFractionUnderPeakSec5, &mFractionUnderPeakSec6, &mFractionUnderPeakSec7, &mFractionUnderPeakSec8, &mFractionUnderPeakSec9, &mFractionUnderPeakSec10, &mFractionUnderPeakSec11, &mFractionUnderPeakSec12, &mFractionUnderPeakSec13, &mFractionUnderPeakSec14, &mFractionUnderPeakSec15, &mFractionUnderPeakSec16, &mFractionUnderPeakSec17};
213 std::array<float, NCHANNELXSECTOR>* mSigmaPeak[NSECTORS] = {&mSigmaPeakSec0, &mSigmaPeakSec1, &mSigmaPeakSec2, &mSigmaPeakSec3, &mSigmaPeakSec4, &mSigmaPeakSec5, &mSigmaPeakSec6, &mSigmaPeakSec7, &mSigmaPeakSec8, &mSigmaPeakSec9, &mSigmaPeakSec10, &mSigmaPeakSec11, &mSigmaPeakSec12, &mSigmaPeakSec13, &mSigmaPeakSec14, &mSigmaPeakSec15, &mSigmaPeakSec16, &mSigmaPeakSec17};
214
215 long mStartValidity = 0;
216 long mEndValidity = 0;
217
218 ClassDefNV(CalibTimeSlewingParamTOF, 4); // class for TOF time slewing params
219};
220} // namespace dataformats
221} // namespace o2
222#endif
int16_t time
Definition RawEventData.h:4
int32_t i
const std::vector< std::pair< unsigned short, short > > & getVector(int sector) const
CalibTimeSlewingParamTOF & operator=(const CalibTimeSlewingParamTOF &source)=default
float evalTimeSlewing(int channel, float tot) const
float getFractionUnderPeak(int sector, int channel) const
void addTimeSlewingInfo(int channel, float tot, float time)
void setSigmaPeak(int sector, int channel, float value)
CalibTimeSlewingParamTOF & operator+=(const CalibTimeSlewingParamTOF &other)
float getSigmaPeak(int sector, int channel) const
int getStartIndexForChannel(int sector, int channel) const
void setFractionUnderPeak(int sector, int channel, float value)
int getStopIndexForChannel(int sector, int channel) const
bool updateOffsetInfo(int channel, float residualOffset)
void setTimeSlewingInfo(int channel, float offsetold, int nold, const unsigned short *oldtot, const short *olddt, int nnew, const unsigned short *newtot, const short *newdt)
GLdouble n
Definition glcorearb.h:1982
GLsizei GLsizei GLchar * source
Definition glcorearb.h:798
GLsizei const GLfloat * value
Definition glcorearb.h:819
GLuint GLfloat * val
Definition glcorearb.h:1582
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
VectorOfTObjectPtrs other