Back to home page

EIC code displayed by LXR

 
 

    


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

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/test_detectors.hpp"
0010 #include "traccc/definitions/common.hpp"
0011 #include "traccc/edm/spacepoint_collection.hpp"
0012 #include "traccc/sycl/seeding/silicon_pixel_spacepoint_formation_algorithm.hpp"
0013 
0014 // VecMem include(s).
0015 #include <vecmem/memory/host_memory_resource.hpp>
0016 #include <vecmem/memory/sycl/shared_memory_resource.hpp>
0017 #include <vecmem/utils/sycl/copy.hpp>
0018 
0019 // GTest include(s).
0020 #include <gtest/gtest.h>
0021 
0022 using namespace traccc;
0023 
0024 TEST(SYCLSpacepointFormation, sycl) {
0025   // Creating SYCL queue object
0026   vecmem::sycl::queue_wrapper vecmem_queue;
0027   traccc::sycl::queue_wrapper traccc_queue(vecmem_queue.queue());
0028   std::cout << "Running on device: " << vecmem_queue.device_name() << "\n";
0029 
0030   // Memory resource used by the EDM.
0031   vecmem::sycl::shared_memory_resource shared_mr{vecmem_queue};
0032   traccc::memory_resource mr{shared_mr};
0033 
0034   // Copy object
0035   vecmem::sycl::copy copy{vecmem_queue};
0036   // Use rectangle surfaces
0037   detray::mask<detray::rectangle2D, traccc::default_algebra> rectangle{
0038       0u, 10000.f * traccc::unit<scalar>::mm,
0039       10000.f * traccc::unit<scalar>::mm};
0040 
0041   // Plane alignment direction (aligned to x-axis)
0042   detray::detail::ray<traccc::default_algebra> traj{
0043       {0, 0, 0}, 0, {1, 0, 0}, -1};
0044 
0045   // Position of planes (in mm unit)
0046   std::vector<scalar> plane_positions = {20.f,  40.f,  60.f,  80.f, 100.f,
0047                                          120.f, 140.f, 160.f, 180.f};
0048 
0049   detray::tel_det_config tel_cfg{rectangle};
0050   tel_cfg.positions(plane_positions);
0051   tel_cfg.pilot_track(traj);
0052 
0053   // Create telescope geometry
0054   auto [det, name_map] = build_telescope_detector(shared_mr, tel_cfg);
0055 
0056   // Surface lookup
0057   auto surfaces = det.surfaces();
0058 
0059   traccc::host_detector polymorphic_detector;
0060   polymorphic_detector.set<traccc::telescope_detector>(std::move(det));
0061 
0062   const traccc::detector_buffer detector_buffer =
0063       traccc::buffer_from_host_detector(polymorphic_detector, shared_mr, copy);
0064 
0065   // Prepare measurement collection
0066   edm::measurement_collection::host measurements{shared_mr};
0067 
0068   // Add a measurement at the first plane
0069   measurements.push_back({{7.f, 2.f},
0070                           {0.f, 0.f},
0071                           2,
0072                           0.f,
0073                           0.f,
0074                           0u,
0075                           surfaces[0].identifier(),
0076                           {1u, 1u},
0077                           0u});
0078 
0079   // Add a measurement at the last plane
0080   measurements.push_back({{10.f, 15.f},
0081                           {0.f, 0.f},
0082                           2u,
0083                           0.f,
0084                           0.f,
0085                           0u,
0086                           surfaces[8u].identifier(),
0087                           {1u, 1u},
0088                           1u});
0089 
0090   // Run spacepoint formation
0091   traccc::sycl::silicon_pixel_spacepoint_formation_algorithm sp_formation(
0092       mr, copy, traccc_queue);
0093   auto spacepoints_buffer =
0094       sp_formation(detector_buffer, vecmem::get_data(measurements));
0095 
0096   edm::spacepoint_collection::device spacepoints(spacepoints_buffer);
0097 
0098   // Check the results
0099   EXPECT_EQ(copy.get_size(spacepoints_buffer), 2u);
0100   std::set<point3> test;
0101   test.insert(spacepoints[0].global());
0102   test.insert(spacepoints[1].global());
0103 
0104   std::set<point3> ref;
0105   ref.insert({180.f, 10.f, 15.f});
0106   ref.insert({20.f, 7.f, 2.f});
0107 
0108   EXPECT_EQ(test, ref);
0109 }