ATLAS Offline Software
Loading...
Searching...
No Matches
TestVectorTool.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
10
14#include <fstream>
15
17{
18 ATH_MSG_INFO("Initializing TestVectorTool tool");
19
20 return StatusCode::SUCCESS;
21}
22
23StatusCode TestVectorTool::prepareTV(const std::string &inputFile, std::vector<uint64_t> &testVector) const
24{
25 ATH_MSG_DEBUG("Preparing input test vector from " << inputFile);
26
27 // Check if the input file ends with .txt or .bin
28 if (inputFile.find(".txt") == std::string::npos && inputFile.find(".bin") == std::string::npos)
29 {
30 ATH_MSG_ERROR("Input TV file must be either .txt or .bin");
31 return StatusCode::FAILURE;
32 }
33
34 // clear the test vector before reading
35 testVector.clear();
36
37 // if .txt
38 if (inputFile.find(".txt") != std::string::npos)
39 {
40 std::ifstream file(inputFile, std::ios::in);
41 if (!file.is_open())
42 {
43 ATH_MSG_ERROR("Cannot open file " << inputFile);
44 return StatusCode::FAILURE;
45 }
46
47 uint64_t cache;
48 while (file >> std::hex >> cache)
49 {
50 testVector.push_back(cache);
51 }
52
53 // close the file
54 file.close();
55 }
56 else
57 {
58 std::ifstream file(inputFile, std::ios::binary);
59 if (!file.is_open())
60 {
61 ATH_MSG_ERROR("Cannot open input TV file " << inputFile);
62 return StatusCode::FAILURE;
63 }
64
65 uint64_t cache;
66 while (file.read(reinterpret_cast<char *>(&cache), sizeof(uint64_t)))
67 {
68 // Reverse the byte order
69 cache = __builtin_bswap64(cache);
70 testVector.push_back(cache);
71 }
72
73 // close the file
74 file.close();
75 }
76
77 return StatusCode::SUCCESS;
78}
79
80StatusCode TestVectorTool::compare(const std::vector<uint64_t> &tv_1, const std::vector<uint64_t> &tv_2) const
81{
82 ATH_MSG_DEBUG("Comparing two test vectors");
83
84 std::vector<uint64_t>::size_type size = -1;
85
86 if (tv_1.size() != tv_2.size())
87 {
88 ATH_MSG_WARNING("The two test vectors have different sizes: " << tv_1.size() << " and " << tv_2.size());
89 // Use the shorter one for comparison
90 size = tv_1.size() < tv_2.size() ? tv_1.size() : tv_2.size();
91 }
92 else
93 {
94 ATH_MSG_DEBUG("The two test vectors have the same size: " << tv_1.size());
95 size = tv_1.size();
96 }
97
98 bool pass = true;
99 for (std::vector<uint64_t>::size_type i = 0; i < size; i++)
100 {
101 if (tv_1[i] != tv_2[i])
102 {
103 ATH_MSG_DEBUG("The two test vectors are different at index " << i);
104 pass = false;
105 }
106 }
107
108 if (pass)
109 {
110 ATH_MSG_DEBUG("The two test vectors are the same");
111 }
112 else
113 {
114 ATH_MSG_WARNING("The two test vectors are different!");
115 }
116
117 return StatusCode::SUCCESS;
118}
119
120StatusCode TestVectorTool::compare(const EFTrackingFPGAIntegration::TVHolder &tvHolder, const std::vector<uint64_t> &tv_comp) const
121{
122 ATH_MSG_DEBUG("Comparing the FPGA output to the reference vector for " << tvHolder.name);
123
124 std::vector<uint64_t>::size_type size = -1;
125
126 if (tvHolder.refTV.size() != tv_comp.size())
127 {
128 ATH_MSG_WARNING("The two test vectors have different sizes: " << tvHolder.refTV.size() << " and " << tv_comp.size());
129 // Use the shorter one for comparison
130 size = tvHolder.refTV.size() < tv_comp.size() ? tvHolder.refTV.size() : tv_comp.size();
131 }
132 else
133 {
134 ATH_MSG_DEBUG("The two test vectors have the same size: " << tvHolder.refTV.size());
135 size = tvHolder.refTV.size();
136 }
137
138 bool pass = true;
139 for (std::vector<uint64_t>::size_type i = 0; i < size; i++)
140 {
141 if (tvHolder.refTV[i] != tv_comp[i])
142 {
143 ATH_MSG_DEBUG("The two test vectors are different at index " << i);
144 pass = false;
145 }
146 }
147
148 if (pass)
149 {
150 ATH_MSG_DEBUG(tvHolder.name << " FPGA output matches the reference vector");
151 }
152 else
153 {
154 ATH_MSG_WARNING(tvHolder.name << " FPGA output does not match the reference vector");
155 }
156
157 return StatusCode::SUCCESS;
158}
159
160StatusCode TestVectorTool::encodePixelL2G(const xAOD::PixelClusterContainer *pixelClusters, std::vector<uint64_t> &encodedData) const
161{
162 ATH_MSG_DEBUG("Encoding xAOD pixel clusters to L2G EDM TV");
163
164 // Fill the event header
165 // Event header w1
167 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EVT_HDR_w1(header_w1));
168
169 // Event header w2
170 auto header_w2 = FPGADataFormatUtilities::fill_EVT_HDR_w2(242000, 0);
171 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EVT_HDR_w2(header_w2));
172
173 // Event header w3
174 auto header_w3 = FPGADataFormatUtilities::fill_EVT_HDR_w3(0, 0);
175 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EVT_HDR_w3(header_w3));
176
177 // L2G conetent
178 // Loop over the pixel clusters
179 unsigned int isLast = 0;
180 for (unsigned int i = 0; i < pixelClusters->size(); i++)
181 {
182 // Pixel cluster w1
184 pixelClusters->at(i)->identifierHash(),
185 0);
186 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_PIXELCLUSTER_w1(pixelCluster_w1));
187
188
189
190 // Determine the size of rdo list and retrieve accordingly
191 uint64_t rdoList[4] = {0, 0, 0, 0}; // Current dataformat only supports 4 RDOs
192
193 unsigned int rdoListSize = pixelClusters->at(i)->rdoList().size();
194 rdoListSize = rdoListSize > 4 ? 4 : rdoListSize; // restrict to 4 RDOs if more
195 for (unsigned int j = 0; j < rdoListSize; j++)
196 {
197 rdoList[j] = pixelClusters->at(i)->rdoList().at(j).get_compact();
198 }
199
200 // Pixel cluster w2
201 auto pixelCluster_w2 = FPGADataFormatUtilities::fill_EDM_PIXELCLUSTER_w2(rdoList[0]);
202 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_PIXELCLUSTER_w2(pixelCluster_w2));
203
204 // Pixel cluster w3
205 auto pixelCluster_w3 = FPGADataFormatUtilities::fill_EDM_PIXELCLUSTER_w3(rdoList[1]);
206 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_PIXELCLUSTER_w3(pixelCluster_w3));
207
208 // Pixel cluster w4
209 auto pixelCluster_w4 = FPGADataFormatUtilities::fill_EDM_PIXELCLUSTER_w4(rdoList[2]);
210 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_PIXELCLUSTER_w4(pixelCluster_w4));
211
212 // Pixel cluster w5
213 auto pixelCluster_w5 = FPGADataFormatUtilities::fill_EDM_PIXELCLUSTER_w5(rdoList[3]);
214 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_PIXELCLUSTER_w5(pixelCluster_w5));
215
216 // Pixel cluster w6
217 auto pixelCluster_w6 = FPGADataFormatUtilities::fill_EDM_PIXELCLUSTER_w6(pixelClusters->at(i)->localPosition<2>()(0, 0),
218 pixelClusters->at(i)->localPosition<2>()(1, 0),
219 pixelClusters->at(i)->channelsInPhi(),
220 pixelClusters->at(i)->channelsInEta(),
221 pixelClusters->at(i)->widthInEta()
222 );
223 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_PIXELCLUSTER_w6(pixelCluster_w6));
224
225 // Pixel cluster w7
226 auto pixelCluster_w7 = FPGADataFormatUtilities::fill_EDM_PIXELCLUSTER_w7(pixelClusters->at(i)->localCovariance<2>()(0, 0),
227 pixelClusters->at(i)->localCovariance<2>()(1, 1),
228 0,
229 0
230 );
231 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_PIXELCLUSTER_w7(pixelCluster_w7));
232
233 // Pixel cluster w8
234 auto pixelCluster_w8 = FPGADataFormatUtilities::fill_EDM_PIXELCLUSTER_w8(pixelClusters->at(i)->globalPosition()[0],
235 pixelClusters->at(i)->globalPosition()[1],
236 0);
237 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_PIXELCLUSTER_w8(pixelCluster_w8));
238
239 // Pixel cluster w9
240 auto pixelCluster_w9 = FPGADataFormatUtilities::fill_EDM_PIXELCLUSTER_w9(pixelClusters->at(i)->identifier());
241 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_PIXELCLUSTER_w9(pixelCluster_w9));
242
243 // Pixel cluster w10
244 isLast = i == (pixelClusters->size() - 1) ? 1 : 0;
245 auto pixelCluster_w10 = FPGADataFormatUtilities::fill_EDM_PIXELCLUSTER_w10(pixelClusters->at(i)->globalPosition()[2],
246 pixelClusters->at(i)->totalToT(),
247 isLast,
248 0);
249 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_PIXELCLUSTER_w10(pixelCluster_w10));
250 }
251
252 // Fill the event footer
253 // Event footer w1
255 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EVT_FTR_w1(footer_w1));
256
257 // Event footer w2
259 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EVT_FTR_w2(footer_w2));
260
261 // Event footer w3
262 auto footer_w3 = FPGADataFormatUtilities::fill_EVT_FTR_w3(encodedData.size(), 44939973);
263 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EVT_FTR_w3(footer_w3));
264
265 return StatusCode::SUCCESS;
266}
267
268StatusCode TestVectorTool::encodeStripL2G(const xAOD::StripClusterContainer *stripClusters, std::vector<uint64_t> &encodedData) const
269{
270 ATH_MSG_DEBUG("Encoding xAOD strip clusters to L2G EDM TV");
271
272 // Fill the event header
273 // Event header w1
275 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EVT_HDR_w1(header_w1));
276
277 // Event header w2
278 auto header_w2 = FPGADataFormatUtilities::fill_EVT_HDR_w2(242000, 0);
279 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EVT_HDR_w2(header_w2));
280
281 // Event header w3
282 auto header_w3 = FPGADataFormatUtilities::fill_EVT_HDR_w3(0, 0);
283 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EVT_HDR_w3(header_w3));
284
285 // L2G conetent
286 // Loop over the strip clusters
287 unsigned int isLast = 0;
288 for (unsigned int i = 0; i < stripClusters->size(); i++)
289 {
290 // Strip cluster w1
292 stripClusters->at(i)->identifierHash(),
293 0);
294 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_STRIPCLUSTER_w1(stripCluster_w1));
295
296
297
298 // Determine the size of rdo list and retrieve accordingly
299 uint64_t rdoList[4] = {0, 0, 0, 0}; // Current dataformat only supports 4 RDOs
300
301 unsigned int rdoListSize = stripClusters->at(i)->rdoList().size();
302 rdoListSize = rdoListSize > 4 ? 4 : rdoListSize; // restrict to 4 RDOs if more
303 for (unsigned int j = 0; j < rdoListSize; j++)
304 {
305 rdoList[j] = stripClusters->at(i)->rdoList().at(j).get_compact();
306 }
307
308 // Strip cluster w3
309 auto stripCluster_w2 = FPGADataFormatUtilities::fill_EDM_STRIPCLUSTER_w2(rdoList[0]);
310 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_STRIPCLUSTER_w2(stripCluster_w2));
311
312 // Strip cluster w3
313 auto stripCluster_w3 = FPGADataFormatUtilities::fill_EDM_STRIPCLUSTER_w3(rdoList[1]);
314 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_STRIPCLUSTER_w3(stripCluster_w3));
315
316 // Strip cluster w4
317 auto stripCluster_w4 = FPGADataFormatUtilities::fill_EDM_STRIPCLUSTER_w4(rdoList[2]);
318 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_STRIPCLUSTER_w4(stripCluster_w4));
319
320 // Strip cluster w5
321 auto stripCluster_w5 = FPGADataFormatUtilities::fill_EDM_STRIPCLUSTER_w5(rdoList[3]);
322 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_STRIPCLUSTER_w5(stripCluster_w5));
323
324 // Strip cluster w6
325 auto stripCluster_w6 = FPGADataFormatUtilities::fill_EDM_STRIPCLUSTER_w6(stripClusters->at(i)->localPosition<1>()(0, 0),
326 0, // Strip cluster has no local position y
327 stripClusters->at(i)->localCovariance<1>()(0, 0),
328 0);
329 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_STRIPCLUSTER_w6(stripCluster_w6));
330
331 // Strip cluster w7
332 auto stripCluster_w7 = FPGADataFormatUtilities::fill_EDM_STRIPCLUSTER_w7(stripClusters->at(i)->globalPosition()[0],
333 stripClusters->at(i)->globalPosition()[1],
334 stripClusters->at(i)->channelsInPhi(),
335 0);
336 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_STRIPCLUSTER_w7(stripCluster_w7));
337
338 // Strip cluster w8
339 auto stripCluster_w8 = FPGADataFormatUtilities::fill_EDM_STRIPCLUSTER_w8(stripClusters->at(i)->identifier());
340 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_STRIPCLUSTER_w8(stripCluster_w8));
341
342 // Strip cluster w9
343 isLast = i == (stripClusters->size() - 1) ? 1 : 0;
344 auto stripCluster_w9 = FPGADataFormatUtilities::fill_EDM_STRIPCLUSTER_w9(stripClusters->at(i)->globalPosition()[2],
345 isLast, i, 0);
346 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_STRIPCLUSTER_w9(stripCluster_w9));
347 }
348
349 // Fill the event footer
350 // Event footer w1
352 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EVT_FTR_w1(footer_w1));
353
354 // Event footer w2
356 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EVT_FTR_w2(footer_w2));
357
358 // Event footer w3
359 // 44939973 in the crc field is a dummy value for now
360 auto footer_w3 = FPGADataFormatUtilities::fill_EVT_FTR_w3(encodedData.size(), 44939973);
361 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EVT_FTR_w3(footer_w3));
362
363 return StatusCode::SUCCESS;
364}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
const T * at(size_type n) const
Access an element, as an rvalue.
size_type size() const noexcept
Returns the number of elements in the collection.
StatusCode encodePixelL2G(const xAOD::PixelClusterContainer *pixelClusters, std::vector< uint64_t > &encodedData) const
Encode xAOD pixel cluster to L2G EDM TV.
StatusCode initialize() override
StatusCode prepareTV(const std::string &inputFile, std::vector< uint64_t > &testVector) const
Prepare test vector in the form of std::vector<uint64_t>, can be either .txt or .bin.
StatusCode encodeStripL2G(const xAOD::StripClusterContainer *stripClusters, std::vector< uint64_t > &encodedData) const
Encode xAOD strip cluster to L2G EDM TV.
StatusCode compare(const std::vector< uint64_t > &tv_1, const std::vector< uint64_t > &tv_2) const
Compare two TV in the form of std::vector<uint64_t>
int channelsInPhi() const
Returns the dimensions of the cluster in numbers of channels in phi (x) and eta (y) directions,...
const std::vector< Identifier > rdoList() const
Returns the list of identifiers of the channels building the cluster.
ConstVectorMap< 3 > globalPosition() const
Returns the global position of the pixel cluster.
int channelsInEta() const
float widthInEta() const
Returns the width of the cluster in phi (x) and eta (y) directions, respectively.
int totalToT() const
Returns the sum of the ToTs of the channels building the cluster.
ConstVectorMap< 3 > globalPosition() const
Returns the global position of the strip cluster.
int channelsInPhi() const
Returns the dimensions of the cluster in numbers of channels in phi (x), respectively.
const std::vector< Identifier > rdoList() const
Returns the list of identifiers of the channels building the cluster.
ConstMatrixMap< N > localCovariance() const
Returns the local covariance of the measurement.
DetectorIDHashType identifierHash() const
Returns the IdentifierHash of the measurement (corresponds to the detector element IdentifierHash)
DetectorIdentType identifier() const
Returns the full Identifier of the measurement.
ConstVectorMap< N > localPosition() const
Returns the local position of the measurement.
EDM_PIXELCLUSTER_w6 fill_EDM_PIXELCLUSTER_w6(const double &localposition_x, const double &localposition_y, const uint64_t &channels_in_phi, const uint64_t &channels_in_eta, const uint64_t &width_in_eta)
EDM_STRIPCLUSTER_w2 fill_EDM_STRIPCLUSTER_w2(const uint64_t &rdo_list_w1)
EDM_STRIPCLUSTER_w6 fill_EDM_STRIPCLUSTER_w6(const double &localposition_x, const double &localposition_y, const double &localcovariance_xx, const uint64_t &spare)
EVT_HDR_w2 fill_EVT_HDR_w2(const uint64_t &runnumber, const uint64_t &time)
EDM_STRIPCLUSTER_w9 fill_EDM_STRIPCLUSTER_w9(const double &globalposition_z, const uint64_t &lastword, const uint64_t &index, const uint64_t &spare)
EDM_STRIPCLUSTER_w8 fill_EDM_STRIPCLUSTER_w8(const uint64_t &identifier)
EVT_HDR_w1 fill_EVT_HDR_w1(const uint64_t &flag, const uint64_t &l0id, const uint64_t &bcid, const uint64_t &spare)
EDM_PIXELCLUSTER_w9 fill_EDM_PIXELCLUSTER_w9(const uint64_t &identifier)
EDM_STRIPCLUSTER_w1 fill_EDM_STRIPCLUSTER_w1(const uint64_t &flag, const uint64_t &id_hash, const uint64_t &spare)
EDM_PIXELCLUSTER_w3 fill_EDM_PIXELCLUSTER_w3(const uint64_t &rdo_list_w2)
uint64_t get_dataformat_EVT_FTR_w3(const EVT_FTR_w3 &in)
EDM_PIXELCLUSTER_w8 fill_EDM_PIXELCLUSTER_w8(const double &globalposition_x, const double &globalposition_y, const uint64_t &spare)
uint64_t get_dataformat_EDM_PIXELCLUSTER_w8(const EDM_PIXELCLUSTER_w8 &in)
EDM_STRIPCLUSTER_w4 fill_EDM_STRIPCLUSTER_w4(const uint64_t &rdo_list_w3)
EDM_STRIPCLUSTER_w7 fill_EDM_STRIPCLUSTER_w7(const double &globalposition_x, const double &globalposition_y, const uint64_t &channels_in_phi, const uint64_t &spare)
EDM_PIXELCLUSTER_w5 fill_EDM_PIXELCLUSTER_w5(const uint64_t &rdo_list_w4)
uint64_t get_dataformat_EDM_STRIPCLUSTER_w3(const EDM_STRIPCLUSTER_w3 &in)
uint64_t get_dataformat_EDM_STRIPCLUSTER_w5(const EDM_STRIPCLUSTER_w5 &in)
EVT_FTR_w2 fill_EVT_FTR_w2(const uint64_t &error_flags)
uint64_t get_dataformat_EVT_FTR_w1(const EVT_FTR_w1 &in)
uint64_t get_dataformat_EDM_PIXELCLUSTER_w2(const EDM_PIXELCLUSTER_w2 &in)
uint64_t get_dataformat_EDM_PIXELCLUSTER_w9(const EDM_PIXELCLUSTER_w9 &in)
uint64_t get_dataformat_EDM_STRIPCLUSTER_w6(const EDM_STRIPCLUSTER_w6 &in)
EDM_PIXELCLUSTER_w2 fill_EDM_PIXELCLUSTER_w2(const uint64_t &rdo_list_w1)
uint64_t get_dataformat_EDM_STRIPCLUSTER_w1(const EDM_STRIPCLUSTER_w1 &in)
uint64_t get_dataformat_EDM_STRIPCLUSTER_w7(const EDM_STRIPCLUSTER_w7 &in)
uint64_t get_dataformat_EVT_HDR_w3(const EVT_HDR_w3 &in)
uint64_t get_dataformat_EVT_HDR_w2(const EVT_HDR_w2 &in)
EDM_STRIPCLUSTER_w5 fill_EDM_STRIPCLUSTER_w5(const uint64_t &rdo_list_w4)
EDM_PIXELCLUSTER_w10 fill_EDM_PIXELCLUSTER_w10(const double &globalposition_z, const uint64_t &total_tot, const uint64_t &lastword, const uint64_t &index)
uint64_t get_dataformat_EDM_PIXELCLUSTER_w3(const EDM_PIXELCLUSTER_w3 &in)
EDM_PIXELCLUSTER_w1 fill_EDM_PIXELCLUSTER_w1(const uint64_t &flag, const uint64_t &id_hash, const uint64_t &spare)
uint64_t get_dataformat_EDM_PIXELCLUSTER_w7(const EDM_PIXELCLUSTER_w7 &in)
EDM_STRIPCLUSTER_w3 fill_EDM_STRIPCLUSTER_w3(const uint64_t &rdo_list_w2)
uint64_t get_dataformat_EDM_STRIPCLUSTER_w9(const EDM_STRIPCLUSTER_w9 &in)
EVT_FTR_w1 fill_EVT_FTR_w1(const uint64_t &flag, const uint64_t &spare, const uint64_t &hdr_crc)
uint64_t get_dataformat_EDM_PIXELCLUSTER_w10(const EDM_PIXELCLUSTER_w10 &in)
uint64_t get_dataformat_EDM_PIXELCLUSTER_w5(const EDM_PIXELCLUSTER_w5 &in)
uint64_t get_dataformat_EDM_PIXELCLUSTER_w4(const EDM_PIXELCLUSTER_w4 &in)
EDM_PIXELCLUSTER_w4 fill_EDM_PIXELCLUSTER_w4(const uint64_t &rdo_list_w3)
uint64_t get_dataformat_EDM_STRIPCLUSTER_w4(const EDM_STRIPCLUSTER_w4 &in)
uint64_t get_dataformat_EDM_PIXELCLUSTER_w6(const EDM_PIXELCLUSTER_w6 &in)
EVT_HDR_w3 fill_EVT_HDR_w3(const uint64_t &status, const uint64_t &crc)
EDM_PIXELCLUSTER_w7 fill_EDM_PIXELCLUSTER_w7(const double &localcovariance_xx, const double &localcovariance_yy, const double &omega_x, const double &omega_y)
uint64_t get_dataformat_EDM_STRIPCLUSTER_w8(const EDM_STRIPCLUSTER_w8 &in)
uint64_t get_dataformat_EDM_STRIPCLUSTER_w2(const EDM_STRIPCLUSTER_w2 &in)
uint64_t get_dataformat_EVT_FTR_w2(const EVT_FTR_w2 &in)
uint64_t get_dataformat_EVT_HDR_w1(const EVT_HDR_w1 &in)
uint64_t get_dataformat_EDM_PIXELCLUSTER_w1(const EDM_PIXELCLUSTER_w1 &in)
EVT_FTR_w3 fill_EVT_FTR_w3(const uint64_t &word_count, const uint64_t &crc)
PixelClusterContainer_v1 PixelClusterContainer
Define the version of the pixel cluster container.
StripClusterContainer_v1 StripClusterContainer
Define the version of the strip cluster container.
TFile * file