12#include "detray/definitions/algebra.hpp"
13#include "detray/io/utils/file_handle.hpp"
16#include <covfie/core/backend/primitive/constant.hpp>
17#include <covfie/core/backend/transformer/affine.hpp>
18#include <covfie/core/backend/transformer/clamp.hpp>
19#include <covfie/core/backend/transformer/linear.hpp>
20#include <covfie/core/backend/transformer/nearest_neighbour.hpp>
21#include <covfie/core/backend/transformer/strided.hpp>
22#include <covfie/core/field.hpp>
23#include <covfie/core/vector.hpp>
37using const_bknd_t = covfie::backend::constant<covfie::vector::vector_d<T, 3>,
38 covfie::vector::vector_d<T, 3>>;
41using const_field_t = covfie::field<const_bknd_t<T>>;
45using inhom_bknd_t = covfie::backend::affine<
46 covfie::backend::linear<covfie::backend::clamp<covfie::backend::strided<
47 covfie::vector::vector_d<std::size_t, 3>,
48 covfie::backend::array<covfie::vector::vector_d<T, 3>>>>>>;
51static_assert(covfie::concepts::field_backend<inhom_bknd_t<float>>,
52 "inhom_bknd_t is not a valid host field backend type");
56using inhom_bknd_io_t =
57 covfie::backend::affine<covfie::backend::linear<covfie::backend::strided<
58 covfie::vector::vector_d<std::size_t, 3>,
59 covfie::backend::array<covfie::vector::vector_d<T, 3>>>>>;
61static_assert(covfie::concepts::field_backend<inhom_bknd_io_t<float>>,
62 "inhom_bknd_io_t is not a valid host field backend type");
66using inhom_bknd_nn_t =
67 covfie::backend::affine<covfie::backend::nearest_neighbour<
68 covfie::backend::clamp<covfie::backend::strided<
69 covfie::vector::ulong3,
70 covfie::backend::array<covfie::vector::vector_d<T, 3>>>>>>;
72static_assert(covfie::concepts::field_backend<inhom_bknd_nn_t<float>>,
73 "inhom_bknd_nn_t is not a valid host field backend type");
77using inhom_bknd_nn_io_t = covfie::backend::affine<
78 covfie::backend::nearest_neighbour<covfie::backend::strided<
79 covfie::vector::ulong3,
80 covfie::backend::array<covfie::vector::vector_d<T, 3>>>>>;
82static_assert(covfie::concepts::field_backend<inhom_bknd_nn_io_t<float>>,
83 "inhom_bknd_nn_io_t is not a valid host field backend type");
86using inhom_field_t = covfie::field<inhom_bknd_t<T>>;
89using inhom_field_io_t = covfie::field<inhom_bknd_io_t<T>>;
99 io::file_handle file{file_name, std::ios_base::in | std::ios_base::binary};
102 std::uint32_t hdr = covfie::utility::read_binary<std::uint32_t>(*file);
105 return (hdr == covfie::utility::MAGIC_HEADER);
111template <
typename bfield_t>
114 throw std::runtime_error(
"Not a valid covfie file: " + file_name);
118 io::file_handle file{file_name, std::ios_base::in | std::ios_base::binary};
120 return bfield_t(*file);
125template <
typename T, concepts::vector3D vector3_t>
127 return bfield::const_field_t<T>{covfie::make_parameter_pack(
128 typename bfield::const_bknd_t<T>::configuration_t{B[0], B[1], B[2]})};
134 return bfield::inhom_field_t<T>(
read_bfield<bfield::inhom_field_io_t<T>>(
135 !std::getenv(
"DETRAY_BFIELD_FILE") ?
""
136 : std::getenv(
"DETRAY_BFIELD_FILE")));
Wrapper around a file stream.
Definition file_handle.hpp:42
Detray include(s).
Definition array_operators.hpp:18
bool check_covfie_file(const std::string &file_name)
Function that reads the first 4 bytes of a potential bfield file and checks that it contains data for...
Definition bfield.hpp:97
bfield::const_field_t< T > create_const_field(const vector3_t &B)
Definition bfield.hpp:126
bfield_t read_bfield(const std::string &file_name)
function that reads a covfie field from file
Definition bfield.hpp:112
bfield::inhom_field_t< T > create_inhom_field()
Definition bfield.hpp:133