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"
17 
18 
19 
20 ITkPixelCnvTool::ITkPixelCnvTool(const std::string& type,const std::string& name,const IInterface* parent)
22  m_hitSortingTool("ITkPixelHitSortingTool", this),
23  m_encodingTool("ITkPixelEncodingTool", this),
24  m_byteStreamCnvSvc(this, "ByteStreamCnvSvc", "ByteStreamCnvSvc")
25 {}
26 
31 
32  //Initialize the sub-tools
33  ATH_CHECK(m_hitSortingTool.retrieve());
34  ATH_CHECK(m_encodingTool.retrieve());
35 
36  return StatusCode::SUCCESS;
37 
38 }
39 
44 template<class ContainerType>
45 StatusCode ITkPixelCnvTool::convertToByteStream(const ContainerType* cont) const {
46  //Get the full event assembler from ByteStreamCnvSvcBase
47  //SrcIdMap translates lower lvl IDs into higher lvl, e. g. ROD -> ROB, ROB -> ROS, ROS -> Det
49  ATH_CHECK(m_byteStreamCnvSvc->getFullEventAssembler(fea, "ITkPixelRawCont"));
50 
51  fea->setDetEvtType(0x0);
52  fea->setLvl1TriggerType(0x0);
53 
54  //Expose the buffer to be filled with the encoded data
55  //Other BS converters use FullEventAssembler<SrcIdMap>::RODDATA,
56  //which is just a typedef for std::vector<uint32_t>. Why the extra
57  //layer of renaming?
58  std::vector<uint32_t>* rod;
59 
60  //sort the RDO hits based on the FE
61  const std::map<ITkPixelOnlineId, ITkPixLayout<uint16_t>> EventHitMaps = m_hitSortingTool->sortRDOHits(cont);
62 
63  //Each of the FEs in the map will have it's own ROD
64  for (const auto& [onlineID, hitMap] : EventHitMaps){
65 
66  //Encode the FE hits
67  std::vector<uint32_t> encodedStream = m_encodingTool->encodeFE(hitMap);
68 
69  //Create ROD and insert the payload
70  rod = fea->getRodData((uint32_t)onlineID);
71  rod->insert(rod->end(), encodedStream.begin(), encodedStream.end());
72 
73  }
74 
75  return StatusCode::SUCCESS;
76 }
77 
78 template StatusCode ITkPixelCnvTool::convertToByteStream<ITkPixelRDO_Container>(const ITkPixelRDO_Container* cont) const;
79 template StatusCode ITkPixelCnvTool::convertToByteStream<PixelRDO_Container>(const PixelRDO_Container* cont) const;
ITkPixelHitSortingTool.h
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
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:20
ITkPixelCnvTool::convertToByteStream
StatusCode convertToByteStream(const ContainerType *cont) const
Take ITkPixelRDO_Container or PixelRDO_Container and translate it to bytestream.
Definition: ITkPixelCnvTool.cxx:45
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:43
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:45
ITkPixelCnvTool::initialize
virtual StatusCode initialize() override
Retrieve helper tools.
Definition: ITkPixelCnvTool.cxx:30
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
PixelRDO_Container.h
ITkPixelCnvTool::m_hitSortingTool
ToolHandle< ITkPixelHitSortingTool > m_hitSortingTool
Definition: ITkPixelCnvTool.h:41
AthAlgTool
Definition: AthAlgTool.h:26
ITkPixelCnvTool.h
FullEventAssembler::getRodData
RODDATA * getRodData(uint32_t id)
get a block of ROD data
FullEventAssembler::setDetEvtType
void setDetEvtType(uint32_t m)
change Detector Event Type