Back to home page

EIC code displayed by LXR

 
 

    


Warning, /acts/Traccc/device/sycl_utils/src/make_magnetic_field.sycl is written in an unsupported language. File is not indexed.

0001 /** TRACCC library, part of the ACTS project (R&D line)
0002  *
0003  * (c) 2025-2026 CERN for the benefit of the ACTS project
0004  *
0005  * Mozilla Public License Version 2.0
0006  */
0007 
0008 // Local include(s).
0009 #include "traccc/sycl/utils/make_magnetic_field.hpp"
0010 
0011 // Project include(s).
0012 #include "traccc/bfield/magnetic_field_types.hpp"
0013 #include "traccc/definitions/common.hpp"
0014 
0015 // Covfie include(s).
0016 #include <covfie/core/backend/primitive/constant.hpp>
0017 #include <covfie/core/backend/transformer/affine.hpp>
0018 #include <covfie/core/backend/transformer/clamp.hpp>
0019 #include <covfie/core/backend/transformer/linear.hpp>
0020 #include <covfie/core/backend/transformer/strided.hpp>
0021 #include <covfie/core/concepts.hpp>
0022 #include <covfie/core/field.hpp>
0023 #include <covfie/core/vector.hpp>
0024 #include <covfie/sycl/backend/primitive/sycl_device_array.hpp>
0025 #include <covfie/sycl/utility/copy.hpp>
0026 
0027 // SYCL include(s).
0028 #include <sycl/sycl.hpp>
0029 
0030 // System include(s).
0031 #include <cassert>
0032 #include <stdexcept>
0033 
0034 namespace traccc::sycl {
0035 
0036 /// Inhomogeneous B-field backend type for SYCL
0037 template <typename scalar_t>
0038 using inhom_bfield_backend_t =
0039     covfie::backend::affine<covfie::backend::linear<covfie::backend::clamp<
0040         covfie::backend::strided<covfie::vector::vector_d<std::size_t, 3>,
0041                                  covfie::backend::sycl_device_array<
0042                                      covfie::vector::vector_d<scalar_t, 3>>>>>>;
0043 // Test that the type is a valid backend for a field
0044 static_assert(covfie::concepts::field_backend<inhom_bfield_backend_t<float>>,
0045               "sycl::inhom_bfield_backend_t is not a valid field backend type");
0046 
0047 magnetic_field make_magnetic_field(const magnetic_field& bfield,
0048                                    queue_wrapper& queue) {
0049   if (bfield.is<const_bfield_backend_t<scalar>>()) {
0050     return magnetic_field{covfie::field<const_bfield_backend_t<scalar>>{
0051         bfield.as_field<const_bfield_backend_t<scalar>>()}};
0052   } else if (bfield.is<host::inhom_bfield_backend_t<scalar>>()) {
0053     ::sycl::queue* sycl_queue = static_cast<::sycl::queue*>(queue.queue());
0054     assert(sycl_queue != nullptr);
0055     magnetic_field result{covfie::utility::sycl::copy_field_with_queue<
0056         covfie::field<sycl::inhom_bfield_backend_t<scalar>>>(
0057         bfield.as_field<host::inhom_bfield_backend_t<scalar>>(), *sycl_queue)};
0058     sycl_queue->wait_and_throw();
0059     return result;
0060   } else {
0061     throw std::invalid_argument("Unsupported b-field type received");
0062   }
0063 }
0064 
0065 }  // namespace traccc::sycl