SHiP Field Service
Framework-agnostic C++20 library exposing SHiP magnetic field maps.
Loading...
Searching...
No Matches
covfie_chains.h File Reference
#include <array>
#include <cmath>
#include <covfie/core/algebra/affine.hpp>
#include <covfie/core/backend/primitive/array.hpp>
#include <covfie/core/backend/transformer/affine.hpp>
#include <covfie/core/backend/transformer/clamp.hpp>
#include <covfie/core/backend/transformer/linear.hpp>
#include <covfie/core/backend/transformer/nearest_neighbour.hpp>
#include <covfie/core/backend/transformer/strided.hpp>
#include <covfie/core/field.hpp>
#include <covfie/core/field_view.hpp>
#include <covfie/core/parameter_pack.hpp>
#include <covfie/core/vector.hpp>
#include <cstddef>
#include <memory>
#include <stdexcept>
#include <string>
#include <utility>
#include <variant>
Include dependency graph for covfie_chains.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  SHiP::detail::GridSpec
 Axis-aligned grid: n[i] samples spanning [min[i], max[i]] (mm). More...
 

Namespaces

namespace  SHiP
 
namespace  SHiP::detail
 

Typedefs

using SHiP::detail::array_backend_t = covfie::backend::array< covfie::vector::float3 >
 
using SHiP::detail::stored_vector_t = array_backend_t::vector_t
 One stored node: {Bx, By, Bz} in Tesla.
 
using SHiP::detail::stored_backend_t = covfie::backend::strided< covfie::vector::size3, array_backend_t >
 
using SHiP::detail::reader_field_t = covfie::field< covfie::backend::affine< covfie::backend::clamp< covfie::backend::linear< stored_backend_t > > > >
 
using SHiP::detail::writer_field_t = covfie::field< covfie::backend::affine< covfie::backend::clamp< covfie::backend::nearest_neighbour< stored_backend_t > > > >
 

Functions

void SHiP::detail::validate (GridSpec const &spec)
 Throw if spec cannot produce a well-formed grid: every axis needs at least two samples (n - 1 underflows for n == 0 and divides by zero in grid_pos/the affine scale for n == 1) and a positive extent (max > min, otherwise the affine scale is non-positive or infinite).
 
float SHiP::detail::grid_pos (float min, float max, std::size_t n, std::size_t i)
 Position of sample i on an axis with n samples spanning [min, max].
 
covfie::algebra::affine< 3 > SHiP::detail::make_affine (GridSpec const &spec)
 World (mm) to fractional grid index: node i on each axis maps to i.
 
template<typename clamp_cfg_t >
clamp_cfg_t SHiP::detail::make_clamp (GridSpec const &spec)
 Clamp fractional grid indices to the mapped box.
 
writer_field_t SHiP::detail::make_writer_field (GridSpec const &spec)
 Build an empty writer-chain field over spec, ready to be filled via writer_field_t::view_t::at(x, y, z) at grid_pos sample positions.
 
reader_field_t SHiP::detail::make_reader_field (GridSpec const &spec, std::unique_ptr< stored_vector_t[]> values)
 Build a reader-chain field over spec that adopts values: one node per grid point, n[0] * n[1] * n[2] of them in strided order (x-major, z fastest).