Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-07-26 08:22:27

0001 /** TRACCC library, part of the ACTS project (R&D line)
0002  *
0003  * (c) 2023-2026 CERN for the benefit of the ACTS project
0004  *
0005  * Mozilla Public License Version 2.0
0006  */
0007 
0008 // Project include(s).
0009 #include "tests/cca_test.hpp"
0010 #include "traccc/definitions/common.hpp"
0011 #include "traccc/geometry/detector_conditions_description.hpp"
0012 #include "traccc/geometry/detector_design_description.hpp"
0013 #include "traccc/performance/collection_comparator.hpp"
0014 #include "traccc/sycl/clusterization/clusterization_algorithm.hpp"
0015 
0016 // VecMem include(s).
0017 #include <vecmem/memory/sycl/shared_memory_resource.hpp>
0018 #include <vecmem/utils/sycl/copy.hpp>
0019 
0020 // GTest include(s).
0021 #include <gtest/gtest.h>
0022 
0023 using namespace traccc;
0024 
0025 TEST(SYCLClustering, SingleModule) {
0026   // Creating SYCL queue object
0027   vecmem::sycl::queue_wrapper vecmem_queue;
0028   traccc::sycl::queue_wrapper traccc_queue{vecmem_queue.queue()};
0029   std::cout << "Running on device: " << vecmem_queue.device_name() << "\n";
0030 
0031   // Memory resource used by the EDM.
0032   vecmem::sycl::shared_memory_resource shared_mr{vecmem_queue};
0033   traccc::memory_resource mr{shared_mr};
0034 
0035   // Copy object
0036   vecmem::sycl::copy copy{vecmem_queue};
0037 
0038   // Create cell collection
0039   traccc::edm::silicon_cell_collection::host cells{shared_mr};
0040   cells.reserve(8u);
0041   cells.push_back({1u, 2u, 1.f, 0.f, 0u});
0042   cells.push_back({2u, 2u, 1.f, 0.f, 0u});
0043   cells.push_back({3u, 2u, 1.f, 0.f, 0u});
0044   cells.push_back({6u, 4u, 1.f, 0.f, 0u});
0045   cells.push_back({5u, 5u, 1.f, 0.f, 0u});
0046   cells.push_back({6u, 5u, 1.f, 0.f, 0u});
0047   cells.push_back({7u, 5u, 1.f, 0.f, 0u});
0048   cells.push_back({6u, 6u, 1.f, 0.f, 0u});
0049 
0050   // Create a dummy detector description.
0051   traccc::detector_design_description::host det_desc{shared_mr};
0052   traccc::detector_conditions_description::host det_cond{shared_mr};
0053   det_desc.resize(1u);
0054   det_cond.resize(1u);
0055   det_desc.bin_edges_x()[0] = {0.f, 1.f, 2.f, 3.f, 4.f, 5.f, 6.f, 7.f, 8.f};
0056   det_desc.bin_edges_y()[0] = {0.f, 1.f, 2.f, 3.f, 4.f, 5.f, 6.f, 7.f, 8.f};
0057   det_desc.dimensions()[0] = 2;
0058   det_cond.geometry_id()[0] = detray::geometry::identifier{0u};
0059   det_cond.measurement_translation()[0] = {0.f, 0.f};
0060 
0061   // Run Clusterization
0062   traccc::sycl::clusterization_algorithm ca_sycl(mr, copy, traccc_queue,
0063                                                  default_ccl_test_config());
0064 
0065   auto measurements_buffer =
0066       ca_sycl(vecmem::get_data(cells), vecmem::get_data(det_desc),
0067               vecmem::get_data(det_cond));
0068 
0069   edm::measurement_collection::device measurements(measurements_buffer);
0070 
0071   // Check the results
0072   EXPECT_EQ(copy.get_size(measurements_buffer), 2u);
0073 
0074   edm::measurement_collection::host references{shared_mr};
0075   references.push_back({{2.5f, 2.5f},
0076                         {0.75f, 0.0833333f},
0077                         2u,
0078                         0.f,
0079                         0.f,
0080                         0u,
0081                         detray::geometry::identifier{0u},
0082                         {1u, 1u},
0083                         0u});
0084   references.push_back({{6.5f, 5.5f},
0085                         {0.483333f, 0.483333f},
0086                         2u,
0087                         0.f,
0088                         0.f,
0089                         0u,
0090                         detray::geometry::identifier{0u},
0091                         {1u, 1u},
0092                         1u});
0093 
0094   for (unsigned int i = 0; i < measurements.size(); ++i) {
0095     const auto test = measurements.at(i);
0096     // 0.01 % uncertainty
0097     auto iso = traccc::details::is_same_object<
0098         edm::measurement_collection::const_device::object_type>(test, 0.0001f);
0099     bool matched = false;
0100 
0101     for (std::size_t j = 0; j < references.size(); ++j) {
0102       const auto ref = references.at(j);
0103       if (iso(ref)) {
0104         matched = true;
0105         break;
0106       }
0107     }
0108 
0109     ASSERT_TRUE(matched);
0110   }
0111 }