File indexing completed on 2026-05-27 07:24:26
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include "detector_construction.hpp"
0011
0012 #include "detray/core/detail/alignment.hpp"
0013 #include "detray/test/common/build_toy_detector.hpp"
0014 #include "detray/utils/logging.hpp"
0015
0016
0017 #include <vecmem/memory/cuda/device_memory_resource.hpp>
0018 #include <vecmem/memory/cuda/managed_memory_resource.hpp>
0019 #include <vecmem/memory/host_memory_resource.hpp>
0020 #include <vecmem/utils/cuda/async_copy.hpp>
0021 #include <vecmem/utils/cuda/copy.hpp>
0022
0023
0024 #include <iostream>
0025
0026
0027 int main() {
0028 using algebra_t = detray::tutorial::algebra_t;
0029 using scalar = detray::tutorial::scalar;
0030
0031
0032 vecmem::host_memory_resource host_mr;
0033 vecmem::cuda::managed_memory_resource mng_mr;
0034 vecmem::cuda::device_memory_resource dev_mr;
0035
0036
0037 vecmem::cuda::copy cuda_cpy;
0038
0039 std::clog << "Detector Device Construction "
0040 "Tutorial\n=====================================\n\n";
0041
0042
0043
0044
0045
0046
0047 auto [det_mng, names_mng] = detray::build_toy_detector<algebra_t>(mng_mr);
0048
0049
0050 auto det_mng_data = detray::get_data(det_mng);
0051
0052
0053 DETRAY_INFO_HOST("Using CUDA unified memory:");
0054 detray::tutorial::print(det_mng_data);
0055
0056
0057
0058
0059
0060
0061 auto [det_host, names_host] = detray::build_toy_detector<algebra_t>(host_mr);
0062
0063
0064 auto det_fixed_buff = detray::get_buffer(det_host, dev_mr, cuda_cpy);
0065
0066
0067 DETRAY_INFO_HOST("Synchronous copy, fixed size buffers:");
0068 detray::tutorial::print(detray::get_data(det_fixed_buff));
0069
0070
0071 auto det_resz_buff =
0072 detray::get_buffer(det_host, dev_mr, cuda_cpy, detray::copy::sync,
0073 vecmem::data::buffer_type::resizable);
0074
0075 DETRAY_INFO_HOST("Synchronous copy, resizable buffers:");
0076 detray::tutorial::print(detray::get_data(det_resz_buff));
0077
0078
0079
0080
0081
0082
0083 auto vol_buff = detray::get_buffer(det_host.volumes(), dev_mr, cuda_cpy,
0084 detray::copy::sync,
0085 vecmem::data::buffer_type::fixed_size);
0086 auto sf_buff = detray::get_buffer(det_host.surfaces(), dev_mr, cuda_cpy,
0087 detray::copy::sync,
0088 vecmem::data::buffer_type::fixed_size);
0089 auto trf_buff = detray::get_buffer(det_host.transform_store(), dev_mr,
0090 cuda_cpy, detray::copy::sync,
0091 vecmem::data::buffer_type::fixed_size);
0092 auto msk_buff = detray::get_buffer(det_host.mask_store(), dev_mr, cuda_cpy,
0093 detray::copy::sync,
0094 vecmem::data::buffer_type::fixed_size);
0095 auto mat_buff = detray::get_buffer(det_host.material_store(), dev_mr,
0096 cuda_cpy, detray::copy::sync,
0097 vecmem::data::buffer_type::fixed_size);
0098 auto acc_buff = detray::get_buffer(det_host.accelerator_store(), dev_mr,
0099 cuda_cpy, detray::copy::sync,
0100 vecmem::data::buffer_type::fixed_size);
0101
0102
0103 using host_detector_type = decltype(det_host);
0104 auto det_custom_buff = typename host_detector_type::buffer_type(
0105 std::move(vol_buff), std::move(sf_buff), std::move(trf_buff),
0106 std::move(msk_buff), std::move(mat_buff), std::move(acc_buff));
0107
0108 DETRAY_INFO_HOST("Custom buffer setup:");
0109 detray::tutorial::print(detray::get_data(det_custom_buff));
0110
0111
0112 using host_transform_type =
0113 host_detector_type::transform_container::value_type;
0114
0115 typename host_detector_type::transform_container host_aligned_transforms;
0116 detray::tutorial::point3 shift{.1f * detray::unit<scalar>::mm,
0117 .2f * detray::unit<scalar>::mm,
0118 .3f * detray::unit<scalar>::mm};
0119
0120 for (const auto& tf : det_host.transform_store()) {
0121 detray::tutorial::point3 shifted{tf.translation()[0] + shift[0],
0122 tf.translation()[1] + shift[1],
0123 tf.translation()[2] + shift[2]};
0124 host_aligned_transforms.push_back(
0125 host_transform_type{shifted, tf.x(), tf.y(), tf.z()});
0126 }
0127
0128 auto trf_buff_shifted = detray::get_buffer(
0129 host_aligned_transforms, dev_mr, cuda_cpy, detray::copy::sync,
0130 vecmem::data::buffer_type::fixed_size);
0131
0132 auto detector_view =
0133 detray::detail::misaligned_detector_view<host_detector_type>(
0134 det_custom_buff, trf_buff_shifted);
0135
0136 DETRAY_INFO_HOST("Custom buffer setup (shifted):");
0137 detray::tutorial::print(detector_view);
0138 }