ATLAS Offline Software
ITkPixelCnvTool.cxx
Go to the documentation of this file.
1 /*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 /*
6 * Author: Ondra Kovanda, ondrej.kovanda at cern.ch
7 * Date: 03/2025
8 * Description: Top-level tool to be called from BS converter or algorithm
9 */
10 
11 #include "ITkPixelCnvTool.h"
14 #include "ITkPixelRDO_Container.h"
15 #include "ITkPixelHitSortingTool.h"
16 #include "ITkPixelEncodingTool.h"
18 
19 
20 
21 
22 ITkPixelCnvTool::ITkPixelCnvTool(const std::string& type,const std::string& name,const IInterface* parent)
24  m_hitSortingTool("ITkPixelHitSortingTool", this),
25  m_encodingTool("ITkPixelEncodingTool", this),
26  m_byteStreamCnvSvc(this, "ByteStreamCnvSvc", "ByteStreamCnvSvc")
27 {}
28 
33 
34  //Initialize the sub-tools
35  ATH_CHECK(m_hitSortingTool.retrieve());
36 
37  ATH_CHECK(m_encodingTool.retrieve());
38 
40 
41  return StatusCode::SUCCESS;
42 
43 }
44 
49 template<class ContainerType>
50 StatusCode ITkPixelCnvTool::convertToByteStream(const ContainerType* cont) const {
51 
52  //Get the cabling
54  const ITkPixelCablingData* cabling = *cablingData;
55 
56  //Get the full event assembler from ByteStreamCnvSvcBase
57  //SrcIdMap translates lower lvl IDs into higher lvl, e. g. ROD -> ROB, ROB -> ROS, ROS -> Det
59  ATH_CHECK(m_byteStreamCnvSvc->getFullEventAssembler(fea, "ITkPixelRawCont"));
60 
61  fea->setDetEvtType(0x0);
62  fea->setLvl1TriggerType(0x0);
63 
64  //Expose the buffer to be filled with the encoded data
65  //Other BS converters use FullEventAssembler<SrcIdMap>::RODDATA,
66  //which is just a typedef for std::vector<uint32_t>. Why the extra
67  //layer of renaming?
68  std::vector<uint32_t>* rod;
69 
70  //sort the RDO hits based on the FE
71  const std::map<ITkPixelOnlineId, ITkPixLayout<uint16_t>> EventHitMaps = m_hitSortingTool->sortRDOHits(cont, cabling);
72 
73  int nRODs = 0;
74 
75  for (const auto& [onlineID, hitMap] : EventHitMaps){
76 
77  //make a copy of the onlineID
78  uint32_t onID = (uint32_t)onlineID;
79 
80  //Encode the FE hits
81  std::vector<uint32_t> encodedStream = m_encodingTool->encodeFE(hitMap, onID & 0x3);
82 
83  //Is this a merged quad? If so, collapse the chip ID in the online identifier to 00
84  //we can get the information from cabling's online -> modlue Info map.
85  ITkPixelCabling::ModuleInfo mi = cabling->offlineModuleInfo((onID >> 2) << 2);
86  if (mi.type == ITkPixelCabling::ModuleType::MergedQuad) onID = (onID >> 2) << 2;
87 
88  //At this point, the ROD identifier will be labelled with lowest two bits 00 for single
89  //chips, chip 00 in unmerged quads and for entire merged quads, and with
90  //the rest up to 0x3 for the remaining 3 chips in unmerged quads. The higher bits are
91  //the online 'base'. We need this because of the unmerged quads, where one
92  //offline entity maps on 4 online entities.
93 
94 
95  //Create ROD and insert the payload
96  rod = fea->getRodData(onID);
97  if (rod->size() == 0) nRODs++;
98  rod->insert(rod->end(), encodedStream.begin(), encodedStream.end());
99 
100  }
101  std::cout << "nRODs = " << nRODs << "\n";
102 
103  return StatusCode::SUCCESS;
104 }
105 
106 template StatusCode ITkPixelCnvTool::convertToByteStream<ITkPixelRDO_Container>(const ITkPixelRDO_Container* cont) const;
107 template StatusCode ITkPixelCnvTool::convertToByteStream<PixelRDO_Container>(const PixelRDO_Container* cont) const;
ITkPixelHitSortingTool.h
ITkPixelCablingData.h
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
FullEventAssembler< SrcIdMap >
FullEventAssembler::setLvl1TriggerType
void setLvl1TriggerType(uint8_t m)
change LVL1 Trigger Type
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
ITkPixelOnlineId.h
ITkPixelEncodingTool.h
ReadCellNoiseFromCool.cabling
cabling
Definition: ReadCellNoiseFromCool.py:154
InDetRawDataContainer
Definition: InDetRawDataContainer.h:27
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
ITkPixelCnvTool::ITkPixelCnvTool
ITkPixelCnvTool(const std::string &type, const std::string &name, const IInterface *parent)
Definition: ITkPixelCnvTool.cxx:22
ITkPixelCnvTool::convertToByteStream
StatusCode convertToByteStream(const ContainerType *cont) const
Take ITkPixelRDO_Container or PixelRDO_Container and translate it to bytestream.
Definition: ITkPixelCnvTool.cxx:50
ITkPixelRDO_Container.h
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ITkPixelCnvTool::m_encodingTool
ToolHandle< ITkPixelEncodingTool > m_encodingTool
Definition: ITkPixelCnvTool.h:45
test_pyathena.parent
parent
Definition: test_pyathena.py:15
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
RunTileMonitoring.rod
rod
Definition: RunTileMonitoring.py:134
ITkPixelCnvTool::m_byteStreamCnvSvc
ServiceHandle< IByteStreamCnvSvc > m_byteStreamCnvSvc
Definition: ITkPixelCnvTool.h:47
ITkPixelCnvTool::initialize
virtual StatusCode initialize() override
Retrieve helper tools.
Definition: ITkPixelCnvTool.cxx:32
ITkPixelCnvTool::m_pixelCablingKey
SG::ReadCondHandleKey< ITkPixelCablingData > m_pixelCablingKey
Definition: ITkPixelCnvTool.h:49
ITkPixelCablingData
Definition: ITkPixelCablingData.h:105
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
ITkPixelCabling::ModuleInfo
Definition: ITkPixelCablingData.h:49
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
PixelRDO_Container.h
ITkPixelCnvTool::m_hitSortingTool
ToolHandle< ITkPixelHitSortingTool > m_hitSortingTool
Definition: ITkPixelCnvTool.h:43
AthAlgTool
Definition: AthAlgTool.h:26
ITkPixelCnvTool.h
ITkPixelCabling::ModuleInfo::type
ModuleType type
Definition: ITkPixelCablingData.h:51
ITkPixelCabling::MergedQuad
@ MergedQuad
Definition: ITkPixelCablingData.h:28
FullEventAssembler::getRodData
RODDATA * getRodData(uint32_t id)
get a block of ROD data
FullEventAssembler::setDetEvtType
void setDetEvtType(uint32_t m)
change Detector Event Type