File indexing completed on 2026-05-27 07:24:24
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "detray/definitions/detail/cuda_definitions.hpp"
0010
0011
0012 #include "mask_store_cuda_kernel.hpp"
0013
0014 namespace detray {
0015
0016
0017
0018 __global__ void mask_test_kernel(
0019 typename host_store_type::view_type store_data,
0020 vecmem::data::vector_view<point3> input_point3_data,
0021 vecmem::data::jagged_vector_view<int> output_data) {
0022
0023 device_store_type store(store_data);
0024
0025
0026 vecmem::device_vector<point3> input_point3(input_point3_data);
0027 vecmem::jagged_device_vector<int> output_device(output_data);
0028
0029 const auto& rectangle_mask = store.get<mask_id::e_rectangle2D>()[0];
0030 const auto& trapezoid_mask = store.get<mask_id::e_trapezoid2D>()[0];
0031 const auto& ring_mask = store.get<mask_id::e_ring2D>()[0];
0032 const auto& cylinder_mask = store.get<mask_id::e_cylinder2D>()[0];
0033 const auto& annulus_mask = store.get<mask_id::e_annulus2D>()[0];
0034
0035
0036 for (int i = 0; i < n_points; i++) {
0037 output_device[0].push_back(rectangle_mask.is_inside(input_point3[i]));
0038 output_device[1].push_back(trapezoid_mask.is_inside(input_point3[i]));
0039 output_device[2].push_back(ring_mask.is_inside(input_point3[i]));
0040 output_device[3].push_back(cylinder_mask.is_inside(input_point3[i]));
0041 output_device[4].push_back(annulus_mask.is_inside(input_point3[i]));
0042 }
0043 }
0044
0045 void mask_test(typename host_store_type::view_type store_data,
0046 vecmem::data::vector_view<point3> input_point3_data,
0047 vecmem::data::jagged_vector_view<int> output_data) {
0048 int block_dim = 1;
0049 int thread_dim = 1;
0050
0051
0052 mask_test_kernel<<<block_dim, thread_dim>>>(store_data, input_point3_data,
0053 output_data);
0054
0055
0056 DETRAY_CUDA_ERROR_CHECK(cudaGetLastError());
0057 DETRAY_CUDA_ERROR_CHECK(cudaDeviceSynchronize());
0058 }
0059
0060 }