12#include "detray/builders/detail/radius_getter.hpp"
13#include "detray/core/concepts.hpp"
14#include "detray/geometry/surface.hpp"
15#include "detray/utils/grid/concepts.hpp"
18#include "detray/plugins/svgtools/conversion/grid.hpp"
19#include "detray/plugins/svgtools/styling/styling.hpp"
22#include "actsvg/proto/surface.hpp"
28namespace detray::svgtools::conversion {
39template <concepts::detector detector_t,
typename view_t>
40auto material_grid(
const detector_t& detector,
const dindex index,
42 const styling::grid_style& style =
46 const auto& sf_desc = detector.surface(index);
47 const auto& link = sf_desc.material();
52 detector.mask_store().template visit<detray::detail::outer_radius_getter>(
55 scalar_t cyl_ref_radius{0.f};
60 return svgtools::conversion::grid(detector.material_store(), link, view,
61 cyl_ref_radius, style);
73 template <
typename mat_coll_t,
typename index_t,
75 DETRAY_HOST
inline auto operator()(
const mat_coll_t& mat_coll,
77 const transform3_t& )
const {
78 using material_t =
typename mat_coll_t::value_type;
80 std::vector<std::vector<actsvg::proto::material_slab>> m_matrix;
84 using loc_bin_idx_t =
typename material_t::loc_bin_index;
85 using algebra_t =
typename material_t::local_frame_type::algebra_type;
95 constexpr bool is_cyl{
96 std::is_same_v<
typename material_t::local_frame_type,
98 std::is_same_v<
typename material_t::local_frame_type,
100 if constexpr (is_cyl) {
106 m_matrix.reserve(edges1);
109 for (
dindex j = 0u; j < edges1; ++j) {
110 std::vector<actsvg::proto::material_slab> m_matrix_row;
111 m_matrix_row.reserve(edges1);
113 for (
dindex i = 0u; i < edges0; ++i) {
114 loc_bin_idx_t bin_idx{i, j};
115 if constexpr (is_cyl) {
120 const auto& mat = mat_slab.get_material();
122 actsvg::proto::material_slab p_mat_slab;
123 p_mat_slab._properties = {
124 static_cast<actsvg::scalar
>(mat.X0()),
125 static_cast<actsvg::scalar
>(mat.L0()),
126 static_cast<actsvg::scalar
>(mat.Ar()),
127 static_cast<actsvg::scalar
>(mat.Z()),
128 static_cast<actsvg::scalar
>(mat.mass_density()),
129 static_cast<actsvg::scalar
>(mat_slab.thickness())};
131 m_matrix_row.push_back(p_mat_slab);
134 m_matrix.push_back(std::move(m_matrix_row));
150template <concepts::detector detector_t,
typename view_t>
151auto surface_material(
const detector_t& detector,
157 auto [p_grid, grid_type] = svgtools::conversion::material_grid(
158 detector, d_surface.
index(), view, style._grid_style);
160 actsvg::proto::surface_material p_material;
163 if (p_grid.has_value()) {
165 auto m_matrix = d_surface.template visit_material<material_converter>(
168 p_material = {m_matrix, *p_grid};
169 p_material._material_ranges =
170 actsvg::proto::material_ranges(p_material._material_matrix);
172 svgtools::styling::apply_style(p_material, style);
Facade for a detray detector surface.
Definition surface.hpp:36
constexpr auto transform(const context &ctx) const -> const transform3_type &
Definition surface.hpp:197
constexpr auto index() const -> dindex
Definition surface.hpp:124
Material map concept: Material grid.
Definition concepts.hpp:106
Material that can used for surfaces.
Definition concepts.hpp:111
get_scalar_t< A, T > dscalar
Scalar type for algebra A and value type T.
Definition algebra.hpp:64
grid< algebra_t, axes< shape_t >, bins::single< material_slab< dscalar< algebra_t > > >, simple_serializer, container_t, owning > material_map
Definition of binned material.
Definition material_map.hpp:29
unsigned int dindex
Default index type.
Definition indexing.hpp:18
Projection into a 2D concentric cylindrical frame (No rotation in coordinate transformation).
Definition concentric_cylindrical2D.hpp:21
Projection into a 2D cylindrical coordinate frame.
Definition cylindrical2D.hpp:20