12#include "detray/core/detail/multi_store.hpp"
13#include "detray/core/detail/single_store.hpp"
14#include "detray/definitions/algebra.hpp"
15#include "detray/definitions/containers.hpp"
16#include "detray/definitions/indexing.hpp"
17#include "detray/geometry/concepts.hpp"
18#include "detray/geometry/mask.hpp"
19#include "detray/geometry/shapes/rectangle2D.hpp"
20#include "detray/geometry/surface_descriptor.hpp"
21#include "detray/material/material_rod.hpp"
22#include "detray/material/material_slab.hpp"
23#include "detray/navigation/accelerators/brute_force.hpp"
31template <concepts::algebra algebra_t,
typename mask_shape_t = rectangle2D>
43 template <
template <
typename...>
class vector_t =
dvector>
45 single_store<dtransform3D<algebra_type>, vector_t, geometry_context>;
69 e_unbounded_annulus2 = 1u,
70 e_unbounded_cell2 = 1u,
71 e_unbounded_cylinder2 = 1u,
72 e_unbounded_disc2 = 1u,
73 e_unbounded_rectangle2 = 1u,
74 e_unbounded_trapezoid2 = 1u,
75 e_unbounded_line_circular2 = 1u,
79 DETRAY_HOST
inline friend std::ostream&
operator<<(std::ostream& os,
82 case mask_id::e_rectangle2D:
83 os <<
"e_rectangle2D";
85 case mask_id::e_annulus2D:
87 os <<
"telescope module shape";
96 template <
template <
typename...>
class vector_t =
dvector>
98 std::same_as<module_t, rectangle2D_t>,
101 regular_multi_store<
mask_id, empty_context,
dtuple, vector_t,
114 e_material_slab = 0u,
120 DETRAY_HOST
inline friend std::ostream&
operator<<(std::ostream& os,
123 case material_id::e_material_slab:
124 os <<
"e_material_slab";
126 case material_id::e_raw_material:
127 os <<
"e_raw_material";
129 case material_id::e_material_rod:
130 os <<
"e_material_rod";
132 case material_id::e_none:
142 template <
typename container_t = host_container_types>
169 e_surface_brute_force = 0u,
170 e_volume_brute_force = 1u,
171 e_surface_default = e_surface_brute_force,
172 e_volume_default = e_volume_brute_force,
175 DETRAY_HOST
inline friend std::ostream&
operator<<(std::ostream& os,
178 case accel_id::e_surface_brute_force:
179 os <<
"e_surface_brute_force";
181 case accel_id::e_volume_brute_force:
182 os <<
"e_volume_brute_force";
191 template <
typename container_t = host_container_types>
211 DETRAY_HOST
inline friend std::ostream&
operator<<(std::ostream& os,
214 case geo_objects::e_passive:
215 os <<
"e_sensitive/e_portal/e_passive";
217 case geo_objects::e_volume:
220 case geo_objects::e_size:
A collection of brute force surface finders, callable by index.
Definition brute_force.hpp:38
Mask a region on a surface and link it to a volume.
Definition mask.hpp:46
Templated surface class for detector surfaces and portals.
Definition surface_descriptor.hpp:35
Definition concepts.hpp:163
Detray include(s).
Definition array_operators.hpp:18
get_scalar_t< A, T > dscalar
Scalar type for algebra A and value type T.
Definition algebra.hpp:64
vecmem::vector< value_t > dvector
Vector container backed by vecmem.
Definition containers.hpp:34
detray::tuple< types... > dtuple
Tuple type used by detray storage and dispatch.
Definition containers.hpp:46
detail::multi_index< index_t, DIM > dmulti_index
Index that consists of multiple subindices.
Definition indexing.hpp:33
std::ostream & operator<<(std::ostream &os, volume_id vid)
Write the volume shape identifier using its enumerator name.
Definition geometry.hpp:59
Rod structure to be mapped on the line mask.
Definition material_rod.hpp:26
Slab structure to be mapped on the mask (plane, cylinder).
Definition material_slab.hpp:25
Material composition properties and density data used by interactions.
Definition material.hpp:36