File indexing completed on 2026-07-26 08:22:28
0001
0002
0003
0004
0005
0006
0007
0008
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
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
0020 #include <gtest/gtest.h>
0021
0022 using namespace traccc;
0023
0024 TEST(SYCLSpacepointFormation, sycl) {
0025
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
0031 vecmem::sycl::shared_memory_resource shared_mr{vecmem_queue};
0032 traccc::memory_resource mr{shared_mr};
0033
0034
0035 vecmem::sycl::copy copy{vecmem_queue};
0036
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
0042 detray::detail::ray<traccc::default_algebra> traj{
0043 {0, 0, 0}, 0, {1, 0, 0}, -1};
0044
0045
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
0054 auto [det, name_map] = build_telescope_detector(shared_mr, tel_cfg);
0055
0056
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
0066 edm::measurement_collection::host measurements{shared_mr};
0067
0068
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
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
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
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 }