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/mask.hpp"
18#include "detray/geometry/shapes/annulus2D.hpp"
19#include "detray/geometry/shapes/concentric_cylinder2D.hpp"
20#include "detray/geometry/shapes/cuboid3D.hpp"
21#include "detray/geometry/shapes/cylinder2D.hpp"
22#include "detray/geometry/shapes/cylinder3D.hpp"
23#include "detray/geometry/shapes/line.hpp"
24#include "detray/geometry/shapes/rectangle2D.hpp"
25#include "detray/geometry/shapes/ring2D.hpp"
26#include "detray/geometry/shapes/trapezoid2D.hpp"
27#include "detray/geometry/surface_descriptor.hpp"
28#include "detray/material/material.hpp"
29#include "detray/material/material_map.hpp"
30#include "detray/material/material_rod.hpp"
31#include "detray/material/material_slab.hpp"
32#include "detray/navigation/accelerators/brute_force.hpp"
33#include "detray/navigation/accelerators/spatial_grid.hpp"
39template <concepts::algebra algebra_t>
49 template <
template <
typename...>
class vector_t =
dvector>
52 single_store<dtransform3D<algebra_type>, vector_t, geometry_context>;
78 e_concentric_cylinder2D = 4u,
84 DETRAY_HOST
inline friend std::ostream&
operator<<(std::ostream& os,
87 case mask_id::e_rectangle2D:
88 os <<
"e_rectangle2D";
90 case mask_id::e_drift_cell:
93 case mask_id::e_trapezoid2D:
94 os <<
"e_trapezoid2D";
96 case mask_id::e_straw_tube:
99 case mask_id::e_concentric_cylinder2D:
100 os <<
"e_concentric_cylinder2D";
102 case mask_id::e_ring2D:
105 case mask_id::e_annulus2D:
108 case mask_id::e_cylinder2D:
109 os <<
"e_cylinder2D";
117 template <
template <
typename...>
class vector_t =
dvector>
120 regular_multi_store<
mask_id, empty_context,
dtuple, vector_t,
125 template <
typename container_t>
131 template <
typename container_t>
135 template <
typename container_t>
142 template <
typename container_t>
146 template <
typename container_t>
150 template <
typename container_t>
157 e_rectangle2D_map = 0u,
158 e_trapezoid2D_map = 0u,
159 e_material_slab = 1u,
160 e_concentric_cylinder2D_map = 2u,
162 e_annulus2D_map = 3u,
165 e_cylinder3D_map = 6u,
166 e_cylinder2D_map = 7u,
171 DETRAY_HOST
inline friend std::ostream&
operator<<(std::ostream& os,
174 case material_id::e_trapezoid2D_map:
175 os <<
"e_rectangle2D_map/e_trapezoid2D_map";
177 case material_id::e_material_slab:
178 os <<
"e_material_slab";
180 case material_id::e_concentric_cylinder2D_map:
181 os <<
"e_concentric_cylinder2D_map";
183 case material_id::e_annulus2D_map:
184 os <<
"e_ring2D_map/e_annulus2D_map";
186 case material_id::e_raw_material:
187 os <<
"e_raw_material";
189 case material_id::e_material_rod:
190 os <<
"e_material_rod";
192 case material_id::e_cylinder3D_map:
193 os <<
"e_cylinder3D_map";
195 case material_id::e_cylinder2D_map:
196 os <<
"e_cylinder2D_map";
198 case material_id::e_cuboid3D_map:
199 os <<
"e_cuboid3D_map";
201 case material_id::e_none:
210 template <
typename container_t = host_container_types>
215 typename container_t::template vector_type<material_slab_t>,
218 typename container_t::template vector_type<raw_material_t>,
219 typename container_t::template vector_type<material_rod_t>,
234 template <
typename axes_t,
typename bin_entry_t,
typename container_t>
239 detray::simple_serializer, container_t,
false>;
241 template <
typename container_t>
246 template <
typename container_t>
250 template <
typename container_t>
256 template <
typename axes_t,
typename bin_entry_t,
typename container_t>
260 detray::simple_serializer, container_t,
false>;
262 template <
typename container_t>
269 e_surface_brute_force = 0u,
270 e_surface_concentric_cylinder2D_grid = 1u,
271 e_surface_ring2D_grid = 2u,
272 e_surface_cylinder2D_grid = 3u,
273 e_volume_brute_force = 4u,
274 e_volume_cylinder3D_grid = 5u,
275 e_surface_default = e_surface_brute_force,
276 e_volume_default = e_volume_cylinder3D_grid,
279 DETRAY_HOST
inline friend std::ostream&
operator<<(std::ostream& os,
282 case accel_id::e_surface_brute_force:
283 os <<
"e_surface_brute_force";
285 case accel_id::e_surface_concentric_cylinder2D_grid:
286 os <<
"e_surface_concentric_cylinder2D_grid";
288 case accel_id::e_surface_ring2D_grid:
289 os <<
"e_surface_ring2D_grid";
291 case accel_id::e_surface_cylinder2D_grid:
292 os <<
"e_surface_cylinder2D_grid";
294 case accel_id::e_volume_brute_force:
295 os <<
"e_volume_brute_force";
297 case accel_id::e_volume_cylinder3D_grid:
298 os <<
"e_volume_cylinder3D_grid";
306 template <
typename container_t = host_container_types>
327 DETRAY_HOST
inline friend std::ostream&
operator<<(std::ostream& os,
330 case geo_objects::e_sensitive:
333 case geo_objects::e_volume:
336 case geo_objects::e_portal:
337 os <<
"e_passive/e_portal";
339 case geo_objects::e_size:
Bin that views a collection of entries it does not own.
Definition grid_bins.hpp:206
A collection of brute force surface finders, callable by index.
Definition brute_force.hpp:38
A collection of grids that can be moved to device as part of the detector.
Definition grid_collection.hpp:31
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
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
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
spatial_grid_impl< grid_impl< coordinate_axes< axes_t, algebra_t, ownership, containers >, bin_t, simple_serializer > > spatial_grid
Spatial grid alias built from coordinate axes and a bin type.
Definition spatial_grid.hpp:275
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