File indexing completed on 2026-05-27 07:24:17
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011
0012 #include "detray/core/detector.hpp"
0013 #include "detray/detectors/toy_metadata.hpp"
0014
0015
0016 #include "detray/test/common/bfield.hpp"
0017 #include "detray/test/device/propagator_test.hpp"
0018
0019
0020 #include <vecmem/memory/memory_resource.hpp>
0021 #include <vecmem/utils/hip/copy.hpp>
0022
0023 namespace detray {
0024
0025 using scalar = test::scalar;
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040 template <typename bfield_bknd_t, typename detector_t>
0041 void propagator_test(
0042 typename detector_t::view_type, const propagation::config &,
0043 covfie::field_view<bfield_bknd_t>, vecmem::data::vector_view<test_track> &,
0044 vecmem::data::jagged_vector_view<detail::step_data<test_algebra>> &);
0045
0046
0047 template <typename bfield_bknd_t, typename detector_t>
0048 inline auto run_propagation_device(
0049 vecmem::memory_resource *mr, const propagation::config &cfg,
0050 typename detector_t::view_type det_view,
0051 covfie::field_view<bfield_bknd_t> field_data, dvector<test_track> &tracks,
0052 const vecmem::jagged_vector<detail::step_data<test_algebra>> &host_steps)
0053 -> vecmem::jagged_vector<detail::step_data<test_algebra>> {
0054
0055 vecmem::copy copy;
0056
0057
0058 auto tracks_data = vecmem::get_data(tracks);
0059
0060
0061 std::vector<std::size_t> sizes(tracks.size(), 0);
0062 std::vector<std::size_t> capacities;
0063 for (auto &st : host_steps) {
0064
0065
0066 capacities.push_back(st.size() + 10u);
0067 }
0068
0069 vecmem::data::jagged_vector_buffer<detail::step_data<test_algebra>>
0070 steps_buffer(capacities, *mr, nullptr,
0071 vecmem::data::buffer_type::resizable);
0072
0073 copy.setup(steps_buffer)->wait();
0074
0075
0076 propagator_test<bfield_bknd_t, detector_t>(det_view, cfg, field_data,
0077 tracks_data, steps_buffer);
0078
0079 vecmem::jagged_vector<detail::step_data<test_algebra>> steps(mr);
0080
0081 copy(steps_buffer, steps)->wait();
0082
0083 return steps;
0084 }
0085
0086
0087 template <typename device_bfield_bknd_t, typename host_bfield_bknd_t,
0088 typename detector_t>
0089 inline auto run_propagation_test(vecmem::memory_resource *mr, detector_t &det,
0090 const propagator_test_config &cfg,
0091 typename detector_t::view_type det_view,
0092 covfie::field<host_bfield_bknd_t> &&field) {
0093
0094 auto tracks_host = generate_tracks<generator_t>(mr, cfg.track_generator);
0095 vecmem::vector<test_track> tracks_device(tracks_host, mr);
0096
0097
0098 auto host_steps =
0099 run_propagation_host(mr, det, cfg.propagation, field, tracks_host);
0100
0101
0102 covfie::field<device_bfield_bknd_t> device_field(field);
0103 auto device_steps = run_propagation_device<device_bfield_bknd_t, detector_t>(
0104 mr, cfg.propagation, det_view, device_field, tracks_device, host_steps);
0105
0106
0107 compare_propagation_results(host_steps, device_steps);
0108 }
0109
0110 }