ATLAS Offline Software
Loading...
Searching...
No Matches
FPGADataFormatTool.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4
5
8
10 ATH_MSG_INFO("Initializing IEFTrackingFPGADataFormatTool tool");
11
12 ATH_CHECK(detStore()->retrieve(m_PIX_mgr, "ITkPixel"));
13 ATH_CHECK(detStore()->retrieve(m_pixelId, "PixelID"));
14 ATH_CHECK(detStore()->retrieve(m_SCT_mgr, "ITkStrip"));
15 ATH_CHECK(detStore()->retrieve(m_sctId, "SCT_ID"));
16
17 return StatusCode::SUCCESS;
18}
19
21 const PixelRDO_Container &pixelRDO,
22 std::vector<uint64_t> &encodedData,
23 const std::vector<IdentifierHash>& hashList,
24 const EventContext &ctx) const {
25
26 // Fill the event header
27 ATH_CHECK(fillHeader(encodedData));
28
29 // Convert the strip RDO
30 ATH_CHECK(convertPixelRDO(pixelRDO, encodedData, hashList, ctx));
31
32 // Fill the event footer
33 ATH_CHECK(fillFooter(encodedData));
34
35
36 return StatusCode::SUCCESS;
37}
38
40 const SCT_RDO_Container &stripRDO,
41 std::vector<uint64_t> &encodedData,
42 const std::vector<IdentifierHash>& hashList,
43 const EventContext &ctx) const {
44
45 // Fill the event header
46 ATH_CHECK(fillHeader(encodedData));
47
48 // Convert the strip RDO
49 ATH_CHECK(convertStripRDO(stripRDO, encodedData, hashList, ctx));
50
51 // Fill the event footer
52 ATH_CHECK(fillFooter(encodedData));
53
54 return StatusCode::SUCCESS;
55}
56
57
58
59
61 const FPGATrackSimHitCollection* slices,
62 bool doPixel,
63 bool doStrip,
64 std::vector<uint64_t> &encodedData,
65 const EventContext &ctx) const {
66
67 // Fill the event header
68 ATH_CHECK(fillHeader(encodedData));
69
70 // Convert Slices
71 ATH_CHECK(convertFPGASlices(slices, doPixel, doStrip, encodedData, ctx));
72
73 // Fill the event footer
74 ATH_CHECK(fillFooter(encodedData));
75
76
77 return StatusCode::SUCCESS;
78}
79
80
81
83 const FPGATrackSimHitCollection* hitsinSlice,
84 bool doPixel,
85 bool doStrip,
86 std::vector<uint64_t> &encodedData,
87 const EventContext &/*ctx*/
88 ) const {
89
90 ATH_MSG_DEBUG("Encoded Slices: ");
91
93 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_SLICE_HDR_w1(sliceWord_w1));
94
95 std::map<unsigned int, std::vector<const FPGATrackSimHit*> > organizedHits;
96
97 for (size_t i = 0; i < hitsinSlice->size(); i++)
98 {
99 const FPGATrackSimHit& hit = hitsinSlice->at(i);
100
101 if((doPixel && hit.isPixel()) || (doStrip && hit.isStrip()))
102 organizedHits[hit.getIdentifier()].push_back(&hit);
103 }
104
105 // encode the hits
106 unsigned int moduleCounter = 0;
107 for (const auto& hits: organizedHits)
108 {
109 const auto& firstHit = hits.second[0];
110 auto mod_w1 = FPGADataFormatUtilities::fill_M_HDR_w1 (FPGADataFormatUtilities::M_HDR_FLAG, firstHit->getIdentifier(), firstHit->getIdentifierHash(), 0);
111 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_M_HDR_w1(mod_w1));
112
113 unsigned int counter = 0;
114 for(const auto& hit: hits.second)
115 {
116 bool isLast = (counter + 1 == hits.second.size());
117 bool isLastofSlice = isLast && (moduleCounter + 1 == organizedHits.size()); // Since we are only doing once slice at a time
118 fillHit(hit, isLast, isLastofSlice, encodedData);
119 counter++;
120 }
121 moduleCounter++;
122 }
123
124 return StatusCode::SUCCESS;
125
126}
127
128
129
131 const FPGATrackSimHitCollection* allHits,
132 bool doPixel,
133 bool doStrip,
134 std::vector<uint64_t> &encodedData,
135 const EventContext &ctx) const {
136
137 // Fill the event header
138 ATH_CHECK(fillHeader(encodedData));
139
140 // Convert Slices
141 ATH_CHECK(convertFPGAHits(allHits, doPixel, doStrip, encodedData, ctx));
142
143 // Fill the event footer
144 ATH_CHECK(fillFooter(encodedData));
145
146
147 return StatusCode::SUCCESS;
148}
149
150
151
153 const FPGATrackSimHitCollection* allHits,
154 bool doPixel,
155 bool doStrip,
156 std::vector<uint64_t> &encodedData,
157 const EventContext &/*ctx*/
158 ) const {
159
160 ATH_MSG_DEBUG("Encodings Hits: ");
161
162 // first organize maps with hits group in module
163 std::map<unsigned int, std::vector<const FPGATrackSimHit*> > organizedHits;
164
165 for (size_t i = 0; i < allHits->size(); i++)
166 {
167 const FPGATrackSimHit& hit = allHits->at(i);
168
169 if((doPixel && hit.isPixel()) || (doStrip && hit.isStrip()))
170 organizedHits[hit.getIdentifier()].push_back(&hit);
171 }
172
173 // encode the hits
174 for (const auto& hits: organizedHits)
175 {
176 const auto& firstHit = hits.second[0];
177 auto mod_w1 = FPGADataFormatUtilities::fill_M_HDR_w1 (FPGADataFormatUtilities::M_HDR_FLAG, firstHit->getIdentifier(), firstHit->getIdentifierHash(), 0);
178 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_M_HDR_w1(mod_w1));
179
180 unsigned int counter = 0;
181 for(const auto& hit: hits.second)
182 {
183 bool isLast = (counter + 1 == hits.second.size());
184 fillHit(hit, isLast, false, encodedData);
185 counter++;
186 }
187 }
188 return StatusCode::SUCCESS;
189
190}
191
192
193
194
195
197 const FPGATrackSimTrackCollection* tracks,
198 std::vector<uint64_t> &encodedData,
199 const EventContext &ctx) const {
200
201 // Fill the event header
202 ATH_CHECK(fillHeader(encodedData));
203
204 // Convert the strip RDO
205 ATH_CHECK(convertFPGATracks(tracks, encodedData, ctx));
206
207 // Fill the event footer
208 ATH_CHECK(fillFooter(encodedData));
209
210
211 return StatusCode::SUCCESS;
212}
213
215 const FPGATrackSimTrackCollection* tracks,
216 std::vector<uint64_t> &encodedData,
217 const EventContext &/*ctx*/
218 ) const {
219
220 for (const FPGATrackSimTrack& track : *tracks)
221 {
222 int bitmask = 0;
223 for(const auto& hit: track.getFPGATrackSimHits())
224 {
225 bitmask |= 2 << hit.getLayer();
226 }
227
228 ATH_MSG_DEBUG("Encoded GTrack: ");
229 ATH_MSG_DEBUG("\tetaregion: " << track.getHoughY());
230 ATH_MSG_DEBUG("\tphiregion: " << track.getHoughX());
231 ATH_MSG_DEBUG("\tlayerbitmask: " << bitmask);
232 ATH_MSG_DEBUG("\td0: " << track.getD0());
233 ATH_MSG_DEBUG("\tz0: " << track.getZ0());
234 ATH_MSG_DEBUG("\tqoverpt: " << track.getQOverPt());
235 ATH_MSG_DEBUG("\tphi: " << track.getPhi());
236 ATH_MSG_DEBUG("\teta: " << track.getEta());
237
238 auto trackBinsIndex = track.getBinIdx();
240 0xee,
241 0,
242 track.getHoughY(),
243 track.getHoughX(),
244 trackBinsIndex[0],
245 trackBinsIndex[1],
246 0,
247 bitmask);
248 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_GTRACK_HDR_w1(gtrackWord_w1));
249
251 trackBinsIndex[2],
252 track.getD0(),
253 track.getZ0(),
254 trackBinsIndex[3]);
255 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_GTRACK_HDR_w2(gtrackWord_w2));
256
258 track.getQOverPt(),
259 track.getPhi(),
260 track.getEta(),
261 trackBinsIndex[3]);
262 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_GTRACK_HDR_w3(gtrackWord_w3));
263
264 auto hits = track.getFPGATrackSimHits();
265 hits.erase(
266 std::remove_if(hits.begin(), hits.end(),
267 [](const FPGATrackSimHit& hit) { return !hit.isReal(); }),
268 hits.end());
269
270 for(unsigned int i = 0 ; i < hits.size(); i++)
271 {
272 const auto& hit = hits[i];
273 bool isLast = (i+1 == hits.size());
274 fillHit(&hit, isLast, false, encodedData);
275 }
276
277
278 }
279
280
281 return StatusCode::SUCCESS;
282}
283
284
285
287 const PixelRDO_Container &pixelRDO,
288 std::vector<uint64_t> &encodedData,
289 const std::vector<IdentifierHash>& hashList,
290 const EventContext &/*ctx*/
291 ) const {
292
293 constexpr int maxChannels = 1000;
294 bool filledHeader = false;
295 for (const InDetRawDataCollection<PixelRDORawData>* pixel_rdoCollection : pixelRDO)
296 {
297 if (pixel_rdoCollection == nullptr) { continue; }
298
299 int nChannels = 0;
300 // loop on all RDOs
301 for (const PixelRDORawData* pixelRawData : *pixel_rdoCollection)
302 {
303 Identifier rdoId = pixelRawData->identify();
304 // get the det element from the det element collection
305 const InDetDD::SiDetectorElement* sielement = m_PIX_mgr->getDetectorElement(rdoId);
306 // if hash list has elements, check if the current Si in the list otherwise, continue
307 if(hashList.size() > 0)
308 {
309 if(std::find(hashList.begin(), hashList.end(), sielement->identifyHash()) == hashList.end()) continue;
310 }
311
312 // Fill the module header
313 if(!filledHeader)
314 {
315 ATH_CHECK(fillModuleHeader(sielement, encodedData));
316 filledHeader = true;
317 }
318
319 // Get the pixel word
321 (pixelRawData == pixel_rdoCollection->back()) || (nChannels == maxChannels), // last
322 m_pixelId->phi_index(rdoId), // ROW
323 m_pixelId->eta_index(rdoId), // COL
324 pixelRawData->getToT(), // TOT
325 pixelRawData->getLVL1A(), // Lvl!
326 0x0F0F0F // Spare
327 );
328
329 // Push the word into the vector
330 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_PIXEL_EF_RDO(pixelWord));
331
332 if(nChannels == maxChannels) break;
333 nChannels++;
334 //}
335 } // end for each RDO in the collection
336
337 // reset the header
338 filledHeader = false;
339
340} // for each pixel RDO collection
341
342return StatusCode::SUCCESS;
343}
344
346 const SCT_RDO_Container &stripRDO,
347 std::vector<uint64_t> &encodedData,
348 const std::vector<IdentifierHash>& hashList,
349 const EventContext &/*ctx*/
350 ) const {
351 constexpr int MaxChannelinStripRow = 128;
352 long unsigned int stripNumber = 0;
353 bool filledHeader = false;
354
355 uint64_t packedWord = 0;
356 bool firstClusterFilled = false;
357
358 for (const InDetRawDataCollection<SCT_RDORawData>* SCT_Collection : stripRDO) {
359 if (SCT_Collection == nullptr) { continue; }
360
361 std::map<int, bool> firedStrips;
362 std::map<int, const SCT_RDORawData*> firedStripsToRDO;
363
364 // Preprocess the SCT collection hits to get information for encoding strip in ITK format
365 // All fired strips are stored in a map to get an overview of the full module that should be
366 // used to encode the data into the ITk format.
367 for (const SCT_RDORawData* sctRawData : *SCT_Collection) {
368 const Identifier rdoId = sctRawData->identify();
369 const int baseLineStrip{m_sctId->strip(rdoId)};
370 for (int i = 0; i < sctRawData->getGroupSize(); i++) {
371 firedStrips[baseLineStrip + i] = true;
372 firedStripsToRDO[baseLineStrip + i] = sctRawData;
373 }
374 }
375 // Loop over the fired hits and encode them in the ITk strips hit map
376 // Finds unique hits in the list that can be encoded and don't overlap
377 std::map<int, int> stripEncodingForITK;
378 std::map<int, const SCT_RDORawData* > stripEncodingForITKToRDO;
379 for (const auto& [stripID, fired] : firedStrips) {
380 // Skip strips that have already been used in a cluster
381 if (!fired) continue;
382
383 // Check the next 3 hits if they exist and have a hit in them
384 std::bitset<3> hitMap;
385 int currChipID = stripID / MaxChannelinStripRow;
386 int maxStripIDForCurrChip = (currChipID + 1) * MaxChannelinStripRow;
387
388 for (int i = 0; i < 3; i++) {
389 // Do not cluster strips that are outside the range of this chip
390 if ((stripID + 1 + i) >= maxStripIDForCurrChip) continue;
391 if (firedStrips.find(stripID + 1 + i) != firedStrips.end()) {
392 if (firedStrips.at(stripID + 1 + i)) {
393 hitMap[2 - i] = 1;
394 firedStrips[stripID + 1 + i] = false;
395 } else {
396 hitMap[2 - i] = 0;
397 }
398 }
399 }
400
401 // Encode the hit map into an integer
402 stripEncodingForITK[stripID] = static_cast<int>(hitMap.to_ulong());
403 stripEncodingForITKToRDO[stripID] = firedStripsToRDO[stripID];
404 }
405
406 stripNumber = 0;
407 firstClusterFilled = false;
408
409 // Process each fired strip and encode it
410 for (const auto& [stripID, encoding] : stripEncodingForITK) {
411 const SCT_RDORawData* sctRawData = stripEncodingForITKToRDO[stripID];
412 const Identifier rdoId = sctRawData->identify();
413 const InDetDD::SiDetectorElement* sielement = m_SCT_mgr->getDetectorElement(rdoId);
414
415 // if hash list has elements, check if the current Si in the list otherwise, continue
416 if(hashList.size() > 0)
417 {
418 if(std::find(hashList.begin(), hashList.end(), sielement->identifyHash()) == hashList.end()) continue;
419 }
420
421 // Fill the module header if not already filled
422 if (!filledHeader) {
423 if (!fillModuleHeader(sielement, encodedData)) return StatusCode::FAILURE;
424 filledHeader = true;
425 }
426
427 // Compute chip ID and ITk strip ID
428 int chipID = stripID / MaxChannelinStripRow;
429 int ITkStripID = stripID % MaxChannelinStripRow;
430
431 // Adjust for row offset based on the eta module index
432 int offset = m_sctId->eta_module(rdoId) % 2;
433 if (m_sctId->barrel_ec(rdoId) == 0) {
434 offset = (std::abs(m_sctId->eta_module(rdoId)) - 1) % 2;
435 }
436 ITkStripID += offset * MaxChannelinStripRow;
437 stripNumber++;
438 // Determine if this is the last cluster in the module
439 bool lastBit = (stripNumber == stripEncodingForITK.size());
440
441 // Create the encoded strip word
443 lastBit, // last bit indicating module boundary
444 chipID, // chip ID
445 ITkStripID, // cluster number
446 stripEncodingForITK.at(stripID), // cluster map
447 0x0F0F // spare bits
448 );
449
450 uint32_t encodedCluster = FPGADataFormatUtilities::get_dataformat_STRIP_EF_RDO(stripWord);
451
452 // **Pack two clusters into a single 64-bit word**
453 if (!firstClusterFilled) {
454 packedWord = (static_cast<uint64_t>(encodedCluster) << 32); // Store first cluster in upper 32 bits
455 firstClusterFilled = true;
456 } else {
457 packedWord |= static_cast<uint64_t>(encodedCluster); // Store second cluster in lower 32 bits
458 encodedData.push_back(packedWord); // Push the full packed word
459 firstClusterFilled = false; // Reset flag
460 packedWord = 0; // Clear for the next pair
461 }
462
463 // If this is the last cluster in the module and a single cluster is left, push it
464 if (lastBit && firstClusterFilled) {
465 encodedData.push_back(packedWord);
466 }
467
468 }
469 // Reset the header flag for the next module
470 filledHeader = false;
471 } // end for each RDO in the strip collection
472
473 return StatusCode::SUCCESS;
474}
475
476// Helper function for common header and Footer info
477StatusCode FPGADataFormatTool::fillHeader(std::vector<uint64_t> &encodedData) const
478{
479 // Fill the event header
481 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EVT_HDR_w1(header_w1));
482
483 // Fill the event header
484 auto header_w2 = FPGADataFormatUtilities::fill_EVT_HDR_w2 (242000, 0);
485 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EVT_HDR_w2(header_w2));
486
487 // Fill the event header
488 auto header_w3 = FPGADataFormatUtilities::fill_EVT_HDR_w3 (0, 0);
489 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EVT_HDR_w3(header_w3));
490
491 return StatusCode::SUCCESS;
492}
493
494StatusCode FPGADataFormatTool::fillFooter(std::vector<uint64_t> &encodedData) const
495{
496 // Fill the event header
498 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EVT_FTR_w1(footer_w1));
499
500 // Fill the event header
501 auto footer_w2 = FPGADataFormatUtilities::fill_EVT_FTR_w2 (0);
502 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EVT_FTR_w2(footer_w2));
503
504 // Fill the event header
505 auto footer_w3 = FPGADataFormatUtilities::fill_EVT_FTR_w3 (encodedData.size(), 44939973);
506 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EVT_FTR_w3(footer_w3));
507
508 return StatusCode::SUCCESS;
509}
510
511StatusCode FPGADataFormatTool::fillModuleHeader(const InDetDD::SiDetectorElement* sielement, std::vector<uint64_t> &encodedData) const
512{
514 sielement->identifyHash().value(), 0);
515 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_M_HDR_w1(mod_w1));
516
517 return StatusCode::SUCCESS;
518}
519
520
521// helper to fill the hit
522void FPGADataFormatTool::fillHit(const FPGATrackSimHit* hit, bool isLast, bool isLastofSlice, std::vector<uint64_t> &encodedData) const
523{
524 int cluster1D=0;
525 int cluster2D=0;
526 if(hit->getOriginalHit().getCluster1ID() >=0)
527 {
528 cluster1D=hit->getOriginalHit().getCluster1ID();
529 }
530
531 if(hit->getOriginalHit().getCluster2ID() >=0)
532 {
533 cluster2D=hit->getOriginalHit().getCluster2ID();
534 }
535
536 ATH_MSG_DEBUG("\tphiregion: " << hit->getLayer());
537 ATH_MSG_DEBUG("\tR: " << hit->getR());
538 ATH_MSG_DEBUG("\tphi: " << hit->getGPhi());
539 ATH_MSG_DEBUG("\tZ: " << hit->getZ());
540 ATH_MSG_DEBUG("\tcluster1D: " << cluster1D);
541 ATH_MSG_DEBUG("\tcluster2D: " << cluster2D);
542
543 auto ghit_w1 = FPGADataFormatUtilities::fill_GHITZ_w1(isLast, hit->getLayer(), hit->getR(), hit->getGPhi(), hit->getZ(), isLastofSlice, 0);
544 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_GHITZ_w1(ghit_w1));
545 // overwrite the information for now
546 cluster1D = hit->getIdentifierHash();
547 auto ghit_w2 = FPGADataFormatUtilities::fill_GHITZ_w2 (cluster1D, cluster2D, hit->getEtaModule(), 0);
548 encodedData.push_back(FPGADataFormatUtilities::get_dataformat_GHITZ_w2(ghit_w2));
549}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_INFO(x)
#define ATH_MSG_DEBUG(x)
std::vector< FPGATrackSimHit > FPGATrackSimHitCollection
std::vector< FPGATrackSimTrack > FPGATrackSimTrackCollection
InDetRawDataContainer< InDetRawDataCollection< PixelRDORawData > > PixelRDO_Container
InDetRawDataContainer< InDetRawDataCollection< SCT_RDORawData > > SCT_RDO_Container
void fillHit(const FPGATrackSimHit *hit, bool isLast, bool isLastofSlice, std::vector< uint64_t > &encodedData) const
virtual StatusCode initialize() override
StatusCode convertStripRDO(const SCT_RDO_Container &stripRDO, std::vector< uint64_t > &encodedData, const std::vector< IdentifierHash > &hashList, const EventContext &ctx) const
virtual StatusCode convertFPGAHitsToFPGADataFormat(const FPGATrackSimHitCollection *allHits, bool doPixel, bool doStrip, std::vector< uint64_t > &encodedData, const EventContext &ctx) const override
virtual StatusCode convertPixelHitsToFPGADataFormat(const PixelRDO_Container &pixelRDO, std::vector< uint64_t > &encodedData, const std::vector< IdentifierHash > &hashList, const EventContext &ctx) const override
Covert the Pixel RDOs to the test vector format as requited by FPGA EF tracking alogrithms.
virtual StatusCode convertFPGATracksToFPGADataFormat(const FPGATrackSimTrackCollection *tracks, std::vector< uint64_t > &encodedData, const EventContext &ctx) const override
StatusCode convertFPGAHits(const FPGATrackSimHitCollection *hits, bool doPixel, bool doStrip, std::vector< uint64_t > &encodedData, const EventContext &ctx) const
StatusCode convertPixelRDO(const PixelRDO_Container &pixelRDO, std::vector< uint64_t > &encodedData, const std::vector< IdentifierHash > &hashList, const EventContext &ctx) const
StatusCode fillFooter(std::vector< uint64_t > &encodedData) const
StatusCode convertFPGATracks(const FPGATrackSimTrackCollection *tracks, std::vector< uint64_t > &encodedData, const EventContext &ctx) const
StatusCode fillModuleHeader(const InDetDD::SiDetectorElement *sielement, std::vector< uint64_t > &encodedData) const
const InDetDD::SiDetectorManager * m_PIX_mgr
StatusCode convertFPGASlices(const FPGATrackSimHitCollection *hitsInSlices, bool doPixel, bool doStrip, std::vector< uint64_t > &encodedData, const EventContext &ctx) const
virtual StatusCode convertFPGASliceToFPGADataFormat(const FPGATrackSimHitCollection *hitsInSlices, bool doPixel, bool doStrip, std::vector< uint64_t > &encodedData, const EventContext &ctx) const override
const PixelID * m_pixelId
virtual StatusCode convertStripHitsToFPGADataFormat(const SCT_RDO_Container &stripRDO, std::vector< uint64_t > &encodedData, const std::vector< IdentifierHash > &hashList, const EventContext &ctx) const override
Covert the Strip RDOs to the test vector format as requited by FPGA EF tracking alogrithms.
StatusCode fillHeader(std::vector< uint64_t > &encodedData) const
const InDetDD::SiDetectorManager * m_SCT_mgr
unsigned int getIdentifier() const
unsigned getIdentifierHash() const
float getGPhi() const
int getEtaModule(bool old=false) const
float getZ() const
int getCluster1ID() const
float getR() const
int getCluster2ID() const
const FPGATrackSimHit getOriginalHit() const
bool isPixel() const
bool isStrip() const
value_type get_compact() const
Get the compact id.
value_type value() const
Identifier32 get_identifier32() const
Get the 32-bit version Identifier, will be invalid if >32 bits needed.
Class to hold geometrical description of a silicon detector element.
virtual IdentifierHash identifyHash() const override final
identifier hash (inline)
virtual Identifier identify() const override final
identifier of this detector element (inline)
virtual Identifier identify() const override final
uint64_t get_dataformat_GTRACK_HDR_w2(const GTRACK_HDR_w2 &in)
PIXEL_EF_RDO fill_PIXEL_EF_RDO(const uint64_t &last, const uint64_t &row, const uint64_t &col, const uint64_t &tot, const uint64_t &lvl1, const uint64_t &spare)
EVT_HDR_w2 fill_EVT_HDR_w2(const uint64_t &runnumber, const uint64_t &time)
STRIP_EF_RDO fill_STRIP_EF_RDO(const uint64_t &last, const uint64_t &chipid, const uint64_t &strip_num, const uint64_t &cluster_map, const uint64_t &spare)
uint64_t get_dataformat_GHITZ_w1(const GHITZ_w1 &in)
EVT_HDR_w1 fill_EVT_HDR_w1(const uint64_t &flag, const uint64_t &l0id, const uint64_t &bcid, const uint64_t &spare)
GTRACK_HDR_w3 fill_GTRACK_HDR_w3(const double &qoverpt, const double &phi, const double &eta, const uint64_t &spare)
uint64_t get_dataformat_EVT_FTR_w3(const EVT_FTR_w3 &in)
GTRACK_HDR_w2 fill_GTRACK_HDR_w2(const double &score, const double &d0, const double &z0, const uint64_t &spare)
uint64_t get_dataformat_GTRACK_HDR_w3(const GTRACK_HDR_w3 &in)
EVT_FTR_w2 fill_EVT_FTR_w2(const uint64_t &error_flags)
uint64_t get_dataformat_M_HDR_w1(const M_HDR_w1 &in)
uint64_t get_dataformat_EVT_FTR_w1(const EVT_FTR_w1 &in)
SLICE_HDR_w1 fill_SLICE_HDR_w1(const uint64_t &flag, const uint64_t &sliceid, const uint64_t &eta_region, const uint64_t &phi_region, const uint64_t &spare)
GHITZ_w1 fill_GHITZ_w1(const uint64_t &last, const uint64_t &lyr, const double &rad, const double &phi, const double &z, const uint64_t &lastofslice, const uint64_t &spare)
M_HDR_w1 fill_M_HDR_w1(const uint64_t &flag, const uint64_t &modid, const uint64_t &modhash, const uint64_t &spare)
uint64_t get_dataformat_EVT_HDR_w3(const EVT_HDR_w3 &in)
uint64_t get_dataformat_EVT_HDR_w2(const EVT_HDR_w2 &in)
GTRACK_HDR_w1 fill_GTRACK_HDR_w1(const uint64_t &flag, const uint64_t &type, const uint64_t &eta_region, const uint64_t &phi_region, const uint64_t &phi_bin, const uint64_t &z_bin, const uint64_t &second_stage, const uint64_t &layer_bitmask)
GHITZ_w2 fill_GHITZ_w2(const uint64_t &cluster1, const uint64_t &cluster2, const uint64_t &row, const uint64_t &spare)
uint64_t get_dataformat_SLICE_HDR_w1(const SLICE_HDR_w1 &in)
uint64_t get_dataformat_PIXEL_EF_RDO(const PIXEL_EF_RDO &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_GTRACK_HDR_w1(const GTRACK_HDR_w1 &in)
uint64_t get_dataformat_STRIP_EF_RDO(const STRIP_EF_RDO &in)
EVT_HDR_w3 fill_EVT_HDR_w3(const uint64_t &status, const uint64_t &crc)
uint64_t get_dataformat_GHITZ_w2(const GHITZ_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)
EVT_FTR_w3 fill_EVT_FTR_w3(const uint64_t &word_count, const uint64_t &crc)
DataModel_detail::iterator< DVL > remove_if(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end, Predicate pred)
Specialization of remove_if for DataVector/List.