Should be overriden by derived classes to perform meaningful work.
21 {
22 ATH_MSG_DEBUG(
"Executing StripClustering for event slot: " << ctx.slot());
23
24
26 if (!stripRDOHandle.isValid()) {
28 return StatusCode::FAILURE;
29 }
30 std::vector<IdentifierHash> listOfIds;
31 std::vector<uint64_t> outputData;
32 if (!
m_FPGADataFormatTool->convertStripHitsToFPGADataFormat(*stripRDOHandle, outputData, listOfIds, ctx)) {
33 ATH_MSG_ERROR(
"Failed to convert input data to FPGA-compatible format.");
34 return StatusCode::FAILURE;
35 }
36
37
38 ATH_MSG_DEBUG(
"Encoded strip data size: " << outputData.size());
40 for (const auto& var : outputData) {
41 ATH_MSG_DEBUG(
"EncodedData[" << std::dec << std::setw(4) << line <<
"] = 0x"
42 << std::hex << std::setfill('0') << std::setw(16) << var << std::setfill(' '));
44 }
45
46
47 std::vector<uint64_t> kernelOutput(outputData.size(), 0);
48 std::vector<uint64_t> kernelEDMOutput(outputData.size()*10, 0);
49 std::vector<uint64_t> kernel_L2GOutput(outputData.size(), 0);
50 std::vector<uint64_t> kernel_L2GEDMOutput(outputData.size()*10, 0);
51 std::vector<uint32_t> kernel_EDMPrepOutputPixel(outputData.size(), 0);
52
55
57
58
60
61
62 cl::Buffer inputBuffer(
m_context, CL_MEM_READ_ONLY,
sizeof(uint64_t) * outputData.size(),
nullptr, &err);
63 cl::Buffer outputBuffer(
m_context, CL_MEM_READ_WRITE,
sizeof(uint64_t) * kernelOutput.size(),
nullptr, &err);
64 cl::Buffer outputEDMBuffer(
m_context, CL_MEM_READ_WRITE,
sizeof(uint64_t) * kernelEDMOutput.size(),
nullptr, &err);
65
66 cl::Buffer output_L2GBuffer(
m_context, CL_MEM_WRITE_ONLY,
sizeof(uint64_t) * kernel_L2GOutput.size(),
nullptr, &err);
67 cl::Buffer output_L2GEDMBuffer(
m_context, CL_MEM_READ_WRITE,
sizeof(uint64_t) * kernel_L2GEDMOutput.size(),
nullptr, &err);
68
69
70 cl::Buffer inputBufferPixel(
m_context, CL_MEM_READ_ONLY,
sizeof(uint64_t) * outputData.size(),
nullptr, &err);
71 cl::Buffer output_EDMPrepBufferPixel(
m_context, CL_MEM_WRITE_ONLY,
sizeof(uint64_t) * kernel_EDMPrepOutputPixel.size(),
nullptr, &err);
72
73 cl::Buffer stripbuffer(
m_context, CL_MEM_READ_WRITE, stripOutput.size() *
sizeof(uint64_t), NULL, &err);
74
75
77 kernel.setArg(0, inputBuffer);
78 kernel.setArg(1, outputBuffer);
79 kernel.setArg(2, outputEDMBuffer);
80 kernel.setArg(3, static_cast<unsigned int>(outputData.size()));
81
82 cl::Kernel kernel_L2G(
m_program,
"l2g_strip_tool", &err);
83 kernel_L2G.setArg(0, outputBuffer);
84 kernel_L2G.setArg(1, outputEDMBuffer);
85 kernel_L2G.setArg(2, output_L2GBuffer);
86 kernel_L2G.setArg(3, output_L2GEDMBuffer);
87
88 cl::Kernel kernel_EMDPrep(
m_program,
"EDMPrep", &err);
89 kernel_EMDPrep.setArg(0, inputBufferPixel);
90 kernel_EMDPrep.setArg(1, output_L2GEDMBuffer);
91 kernel_EMDPrep.setArg(2, output_EDMPrepBufferPixel);
92 kernel_EMDPrep.setArg(3, stripbuffer);
93
94
95
97
98
99 queue.enqueueWriteBuffer(inputBuffer, CL_TRUE, 0,
sizeof(uint64_t) * outputData.size(), outputData.data());
100 queue.enqueueTask(kernel);
102 queue.enqueueTask(kernel_L2G);
104 queue.enqueueTask(kernel_EMDPrep);
106 queue.enqueueReadBuffer(outputBuffer, CL_TRUE, 0,
sizeof(uint64_t) * kernelOutput.size(), kernelOutput.data());
107 queue.enqueueReadBuffer(outputEDMBuffer, CL_TRUE, 0,
sizeof(uint64_t) * kernelEDMOutput.size(), kernelEDMOutput.data());
108 queue.enqueueReadBuffer(output_L2GBuffer, CL_TRUE, 0,
sizeof(uint64_t) * kernel_L2GOutput.size(), kernel_L2GOutput.data());
109 queue.enqueueReadBuffer(output_L2GEDMBuffer, CL_TRUE, 0,
sizeof(uint64_t) * kernel_L2GEDMOutput.size(), kernel_L2GEDMOutput.data());
110 queue.enqueueReadBuffer(stripbuffer, CL_TRUE, 0, stripOutput.size() *
sizeof(uint64_t), stripOutput.data());
112
113
116 for (const auto& var : kernelOutput) {
117 if(var != 0)
ATH_MSG_DEBUG(
"Clustering KernelOutput[" << std::dec << std::setw(4) << line <<
"] = 0x"
118 << std::hex << std::setfill('0') << std::setw(16) << var << std::setfill(' '));
120 }
122 for (const auto& var : kernelEDMOutput) {
123 if(var != 0)
ATH_MSG_DEBUG(
"Clustering KernelEDMOutput[" << std::dec << std::setw(4) << line <<
"] = 0x"
124 << std::hex << std::setfill('0') << std::setw(16) << var << std::setfill(' '));
126 }
127
129 for (const auto& var : kernel_L2GOutput) {
130 if(var != 0)
ATH_MSG_DEBUG(
"L2G KernelOutput[" << std::dec << std::setw(4) << line <<
"] = 0x"
131 << std::hex << std::setfill('0') << std::setw(16) << var << std::setfill(' '));
133 }
135 for (const auto& var : kernel_L2GEDMOutput) {
136 if(var != 0)
ATH_MSG_DEBUG(
"L2g KernelEDMOutput[" << std::dec << std::setw(4) << line <<
"] = 0x"
137 << std::hex << std::setfill('0') << std::setw(16) << var << std::setfill(' '));
139 }
141 for (const auto& var : stripOutput) {
142 if(var != 0)
ATH_MSG_DEBUG(
"EDM Prep kernel_EMDPrep[" << std::dec << std::setw(4) << line <<
"] = 0x"
143 << std::hex << std::setfill('0') << std::setw(16) << var << std::setfill(' '));
145 }
147
148
149
150
151
152
154
155 unsigned int numStripClusters = stripClusters[0];
157
158
159 std::unique_ptr<EFTrackingTransient::Metadata>
metadata =
160 std::make_unique<EFTrackingTransient::Metadata>();
161
162 metadata->numOfStripClusters = numStripClusters;
163 metadata->scRdoIndexSize = numStripClusters;
164
165 EFTrackingTransient::StripClusterAuxInput scAux;
166
167
170 int rdoCounter = 0;
171
172
173 {
174 for (
unsigned int i = 0;
i < numStripClusters;
i++)
175 {
176 rdoCounter = 0;
183 if (rdo)
184 {
186 rdoCounter++;
187 }
190 if (rdo)
191 {
193 rdoCounter++;
194 }
197 if (rdo)
198 {
200 rdoCounter++;
201 }
204 if (rdo)
205 {
207 rdoCounter++;
208 }
211
223
225 }
226
228 {
229 for (
unsigned int i = 0;
i < numStripClusters;
i++)
230 {
232 ATH_MSG_DEBUG(
"Strip cluster " << i << std::hex <<
" id: " << scAux.
id[i]);
240 }
241 }
242 }
243
244
245
246
247 return StatusCode::SUCCESS;
248}
bool msgLvl(const MSG::Level lvl) const
Gaudi::Property< std::string > m_kernelName
Kernel name.
SG::ReadHandleKey< SCT_RDO_Container > m_stripRDOKey
Input data key.
ToolHandle< FPGADataFormatTool > m_FPGADataFormatTool
cl::Program m_program
Program object containing the kernel.
cl::Context m_context
Context object for the application.
cl::Device m_accelerator
Device object for the accelerator card.
constexpr unsigned int MAX_NUM_CLUSTERS
constexpr uint32_t STRIP_CONTAINER_BUF_SIZE
constexpr uint32_t PIXEL_CONTAINER_BUF_SIZE
row
Appending html table to final .html summary file.
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())