18     return StatusCode::SUCCESS;
 
   22     ATH_MSG_DEBUG(
"Executing StripClustering for event slot: " << ctx.slot());
 
   26     if (!stripRDOHandle.isValid()) {
 
   28         return StatusCode::FAILURE;
 
   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;
 
   38     ATH_MSG_DEBUG(
"Encoded strip data size: " << outputData.size());
 
   40     for (
const auto& 
var : outputData) {
 
   42                       << std::hex << std::setfill(
'0') << std::setw(16) << 
var << std::setfill(
' '));
 
   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);
 
   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);
 
   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);
 
   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);
 
   73     cl::Buffer stripbuffer(
m_context, CL_MEM_READ_WRITE, stripOutput.size() * 
sizeof(
uint64_t), NULL, &
err);
 
   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()));
 
   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);
 
   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);
 
   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());
 
  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(
' '));
 
  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(
' '));
 
  129     for (
const auto& 
var : kernel_L2GOutput) {
 
  131                       << std::hex << std::setfill(
'0') << std::setw(16) << 
var << std::setfill(
' '));
 
  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(
' '));
 
  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(
' '));
 
  155     unsigned int numStripClusters = stripClusters[0];
 
  159     std::unique_ptr<EFTrackingTransient::Metadata> 
metadata =
 
  160         std::make_unique<EFTrackingTransient::Metadata>();
 
  162     metadata->numOfStripClusters = numStripClusters;
 
  163     metadata->scRdoIndexSize = numStripClusters;
 
  174      for (
unsigned int i = 0; 
i < numStripClusters; 
i++)
 
  229          for (
unsigned int i = 0; 
i < numStripClusters; 
i++)
 
  247     return StatusCode::SUCCESS;