10 ATH_MSG_INFO(
"Initializing IEFTrackingFPGADataFormatTool tool");
17 return StatusCode::SUCCESS;
22 std::vector<uint64_t> &encodedData,
23 const std::vector<IdentifierHash>& hashList,
24 const EventContext &ctx)
const {
36 return StatusCode::SUCCESS;
41 std::vector<uint64_t> &encodedData,
42 const std::vector<IdentifierHash>& hashList,
43 const EventContext &ctx)
const {
54 return StatusCode::SUCCESS;
64 std::vector<uint64_t> &encodedData,
65 const EventContext &ctx)
const {
77 return StatusCode::SUCCESS;
86 std::vector<uint64_t> &encodedData,
95 std::map<unsigned int, std::vector<const FPGATrackSimHit*> > organizedHits;
97 for (
size_t i = 0; i < hitsinSlice->
size(); i++)
106 unsigned int moduleCounter = 0;
107 for (
const auto& hits: organizedHits)
109 const auto& firstHit = hits.second[0];
113 unsigned int counter = 0;
114 for(
const auto& hit: hits.second)
116 bool isLast = (counter + 1 == hits.second.size());
117 bool isLastofSlice = isLast && (moduleCounter + 1 == organizedHits.size());
118 fillHit(hit, isLast, isLastofSlice, encodedData);
124 return StatusCode::SUCCESS;
134 std::vector<uint64_t> &encodedData,
135 const EventContext &ctx)
const {
147 return StatusCode::SUCCESS;
156 std::vector<uint64_t> &encodedData,
163 std::map<unsigned int, std::vector<const FPGATrackSimHit*> > organizedHits;
165 for (
size_t i = 0; i < allHits->
size(); i++)
174 for (
const auto& hits: organizedHits)
176 const auto& firstHit = hits.second[0];
180 unsigned int counter = 0;
181 for(
const auto& hit: hits.second)
183 bool isLast = (counter + 1 == hits.second.size());
184 fillHit(hit, isLast,
false, encodedData);
188 return StatusCode::SUCCESS;
198 std::vector<uint64_t> &encodedData,
199 const EventContext &ctx)
const {
211 return StatusCode::SUCCESS;
216 std::vector<uint64_t> &encodedData,
223 for (
const auto& hit : track.getFPGATrackSimHitPtrs())
226 ATH_MSG_ERROR(
"Null hit pointer from getFPGATrackSimHitPtrs() in convertFPGATracks");
227 return StatusCode::FAILURE;
229 bitmask |= 2 << hit->getLayer();
242 auto trackBinsIndex = track.getBinIdx();
268 std::vector<std::shared_ptr<const FPGATrackSimHit>> hits = track.getFPGATrackSimHitPtrs();
271 [](
const std::shared_ptr<const FPGATrackSimHit>& hit) { return !hit || !hit->isReal(); }),
274 for(
unsigned int i = 0 ; i < hits.size(); i++)
276 const auto& hit = hits[i];
277 bool isLast = (i+1 == hits.size());
278 fillHit(hit.get(), isLast,
false, encodedData);
285 return StatusCode::SUCCESS;
292 std::vector<uint64_t> &encodedData,
293 const std::vector<IdentifierHash>& hashList,
297 constexpr int maxChannels = 1000;
298 bool filledHeader =
false;
301 if (pixel_rdoCollection ==
nullptr) {
continue; }
311 if(hashList.size() > 0)
313 if(std::find(hashList.begin(), hashList.end(), sielement->
identifyHash()) == hashList.end())
continue;
325 (pixelRawData == pixel_rdoCollection->back()) || (nChannels == maxChannels),
328 pixelRawData->getToT(),
329 pixelRawData->getLVL1A(),
336 if(nChannels == maxChannels)
break;
342 filledHeader =
false;
346return StatusCode::SUCCESS;
351 std::vector<uint64_t> &encodedData,
352 const std::vector<IdentifierHash>& hashList,
355 constexpr int MaxChannelinStripRow = 128;
356 long unsigned int stripNumber = 0;
357 bool filledHeader =
false;
359 uint64_t packedWord = 0;
360 bool firstClusterFilled =
false;
363 if (SCT_Collection ==
nullptr) {
continue; }
365 std::map<int, bool> firedStrips;
366 std::map<int, const SCT_RDORawData*> firedStripsToRDO;
372 const Identifier rdoId = sctRawData->identify();
373 const int baseLineStrip{
m_sctId->strip(rdoId)};
374 for (
int i = 0; i < sctRawData->getGroupSize(); i++) {
375 firedStrips[baseLineStrip + i] =
true;
376 firedStripsToRDO[baseLineStrip + i] = sctRawData;
381 std::map<int, int> stripEncodingForITK;
382 std::map<int, const SCT_RDORawData* > stripEncodingForITKToRDO;
383 for (
const auto& [stripID, fired] : firedStrips) {
385 if (!fired)
continue;
388 std::bitset<3> hitMap;
389 int currChipID = stripID / MaxChannelinStripRow;
390 int maxStripIDForCurrChip = (currChipID + 1) * MaxChannelinStripRow;
392 for (
int i = 0; i < 3; i++) {
394 if ((stripID + 1 + i) >= maxStripIDForCurrChip)
continue;
395 if (firedStrips.find(stripID + 1 + i) != firedStrips.end()) {
396 if (firedStrips.at(stripID + 1 + i)) {
398 firedStrips[stripID + 1 + i] =
false;
406 stripEncodingForITK[stripID] =
static_cast<int>(hitMap.to_ulong());
407 stripEncodingForITKToRDO[stripID] = firedStripsToRDO[stripID];
411 firstClusterFilled =
false;
414 for (
const auto& [stripID, encoding] : stripEncodingForITK) {
415 const SCT_RDORawData* sctRawData = stripEncodingForITKToRDO[stripID];
420 if(hashList.size() > 0)
422 if(std::find(hashList.begin(), hashList.end(), sielement->
identifyHash()) == hashList.end())
continue;
432 int chipID = stripID / MaxChannelinStripRow;
433 int ITkStripID = stripID % MaxChannelinStripRow;
436 int offset =
m_sctId->eta_module(rdoId) % 2;
437 if (
m_sctId->barrel_ec(rdoId) == 0) {
438 offset = (std::abs(
m_sctId->eta_module(rdoId)) - 1) % 2;
440 ITkStripID += offset * MaxChannelinStripRow;
443 bool lastBit = (stripNumber == stripEncodingForITK.size());
450 stripEncodingForITK.at(stripID),
457 if (!firstClusterFilled) {
458 packedWord = (
static_cast<uint64_t
>(encodedCluster) << 32);
459 firstClusterFilled =
true;
461 packedWord |=
static_cast<uint64_t
>(encodedCluster);
462 encodedData.push_back(packedWord);
463 firstClusterFilled =
false;
468 if (lastBit && firstClusterFilled) {
469 encodedData.push_back(packedWord);
474 filledHeader =
false;
477 return StatusCode::SUCCESS;
495 return StatusCode::SUCCESS;
512 return StatusCode::SUCCESS;
521 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
DataVector< FPGATrackSimHit > FPGATrackSimHitCollection
std::vector< FPGATrackSimTrack > FPGATrackSimTrackCollection
InDetRawDataContainer< InDetRawDataCollection< PixelRDORawData > > PixelRDO_Container
InDetRawDataContainer< InDetRawDataCollection< SCT_RDORawData > > SCT_RDO_Container
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.
unsigned int getIdentifier() const
unsigned getIdentifierHash() const
int getEtaModule(bool old=false) const
int getCluster1ID() const
int getCluster2ID() const
const FPGATrackSimHit getOriginalHit() const
value_type get_compact() const
Get the compact id.
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
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.