12#include "detray/core/concepts.hpp"
13#include "detray/geometry/tracking_volume.hpp"
22template <concepts::detector detector_t>
25template <concepts::detector detector_t>
65template <concepts::detector detector_t>
95 virtual
void set_name(std::
string volume_name) = 0;
99 virtual std::string_view
name() = 0;
104 virtual auto operator()() const -> const
105 typename detector_t::volume_type & = 0;
109 virtual auto operator()() -> typename detector_t::volume_type & = 0;
118 typename detector_t::geometry_context ctx = {}) ->
119 typename detector_t::volume_type * = 0;
149 typename detector_t::geometry_context ctx = {}) = 0;
155 virtual typename detector_t::surface_lookup_container &
surfaces() = 0;
158 virtual typename detector_t::transform_container &
transforms() = 0;
161 virtual typename detector_t::mask_container &
masks() = 0;
169template <concepts::detector detector_t>
180 : m_builder(std::move(vol_builder)) {
181 assert(m_builder !=
nullptr);
187 auto operator()() ->
typename detector_t::volume_type &
override {
188 return m_builder->operator()();
194 auto operator()() const -> const typename detector_t::volume_type &
override {
195 return m_builder->operator()();
206 void has_accel(
bool toggle)
override { m_builder->has_accel(toggle); };
211 bool has_accel()
const override {
return m_builder->has_accel(); }
217 return m_builder->set_name(volume_name);
222 DETRAY_HOST std::string_view
name()
override {
return m_builder->name(); }
230 typename detector_t::geometry_context = {}) ->
231 typename detector_t::volume_type *
override {
232 return m_builder->build(det, opt);
239 const typename detector_t::transform3_type &trf = {})
override {
240 return m_builder->add_volume_placement(trf);
247 const typename detector_t::point3_type &t)
override {
248 return m_builder->add_volume_placement(t);
257 const typename detector_t::point3_type &t,
258 const typename detector_t::vector3_type &x,
259 const typename detector_t::vector3_type &z)
override {
260 return m_builder->add_volume_placement(t, x, z);
269 typename detector_t::geometry_context ctx = {})
override {
270 return m_builder->add_surfaces(std::move(sf_factory), ctx);
279 return m_builder.get();
283 typename detector_t::surface_lookup_container &
surfaces()
override {
284 return m_builder->surfaces();
288 typename detector_t::transform_container &
transforms()
override {
289 return m_builder->transforms();
293 typename detector_t::mask_container &
masks()
override {
294 return m_builder->masks();
299 std::unique_ptr<volume_builder_interface<detector_t>> m_builder;
How to generate surfaces with their corresponding masks and transforms.
Definition surface_factory_interface.hpp:120
Interface for volume builders (and volume builder decorators).
Definition volume_builder_interface.hpp:66
dscalar< algebra_type > scalar_type
Scalar type used by the detector's algebra.
Definition volume_builder_interface.hpp:74
virtual void set_name(std::string volume_name)=0
Sets the name volume_name for the volume.
virtual detector_t::transform_container & transforms()=0
Returns mutable access to the builder's transforms.
virtual detector_t::surface_lookup_container & surfaces()=0
Access to builder data.
typename detector_t::algebra_type algebra_type
Algebra type used by the detector.
Definition volume_builder_interface.hpp:72
virtual void add_volume_placement(const dpoint3D< algebra_type > &t, const dvector3D< algebra_type > &x, const dvector3D< algebra_type > &z)=0
Add the transform for the volume placement from the translation t , the new x- and z-axis (x,...
virtual auto vol_index() const -> dindex=0
virtual void add_volume_placement(const dpoint3D< algebra_type > &t)=0
Add the transform for the volume placement from the translation t.
virtual auto build(detector_t &det, const volume_builder_options &opt, typename detector_t::geometry_context ctx={}) -> typename detector_t::volume_type *=0
Adds a volume and all of its contents to a detector.
virtual void add_surfaces(std::shared_ptr< surface_factory_interface< detector_t > > sf_factory, typename detector_t::geometry_context ctx={})=0
Add surfaces to the volume.
virtual detector_t::mask_container & masks()=0
Returns mutable access to the builder's masks.
virtual void has_accel(bool toggle)=0
Toggles whether sensitive surfaces are added to the brute force method.
virtual void add_volume_placement(const dtransform3D< algebra_type > &trf={})=0
Add the transform for the volume placement - copy.
virtual std::string_view name()=0
Decorator for the volume builder.
Definition volume_builder_interface.hpp:170
dscalar< typename detector_t::algebra_type > scalar_t
Scalar type used by the detector's algebra.
Definition volume_builder_interface.hpp:173
auto operator()() const -> const typename detector_t::volume_type &override
Returns const access to the wrapped volume.
Definition volume_builder_interface.hpp:194
void add_volume_placement(const typename detector_t::point3_type &t, const typename detector_t::vector3_type &x, const typename detector_t::vector3_type &z) override
Adds a placement using a translation and its x- and z-axes.
Definition volume_builder_interface.hpp:256
detector_t::transform_container & transforms() override
Returns mutable access to the wrapped builder's transforms.
Definition volume_builder_interface.hpp:288
std::string_view name() override
Returns the wrapped volume's name.
Definition volume_builder_interface.hpp:222
void set_name(std::string volume_name) override
Sets the wrapped volume's name.
Definition volume_builder_interface.hpp:216
volume_decorator(std::unique_ptr< volume_builder_interface< detector_t > > vol_builder)
Wraps a volume builder.
Definition volume_builder_interface.hpp:178
void add_volume_placement(const typename detector_t::transform3_type &trf={}) override
Adds a placement transform to the wrapped builder.
Definition volume_builder_interface.hpp:238
volume_builder_interface< detector_t > * get_builder()
Access to underlying builderReturns a pointer to the wrapped builder.
Definition volume_builder_interface.hpp:278
detector_t::surface_lookup_container & surfaces() override
Returns mutable access to the wrapped builder's surface lookup container.
Definition volume_builder_interface.hpp:283
detector_t::mask_container & masks() override
Returns mutable access to the wrapped builder's masks.
Definition volume_builder_interface.hpp:293
void add_surfaces(std::shared_ptr< surface_factory_interface< detector_t > > sf_factory, typename detector_t::geometry_context ctx={}) override
Adds surfaces through the wrapped builder's factory interface.
Definition volume_builder_interface.hpp:267
auto operator()() -> typename detector_t::volume_type &override
Returns the mutable volume being built.
Definition volume_builder_interface.hpp:187
void add_volume_placement(const typename detector_t::point3_type &t) override
Adds a placement using a translation and identity rotation.
Definition volume_builder_interface.hpp:246
auto build(detector_t &det, const volume_builder_options &opt, typename detector_t::geometry_context={}) -> typename detector_t::volume_type *override
Builds the wrapped volume in the detector.
Definition volume_builder_interface.hpp:229
bool has_accel() const override
Returns whether sensitive surfaces are added to brute force lookup.
Definition volume_builder_interface.hpp:211
void has_accel(bool toggle) override
Forwards the brute-force acceleration setting to the wrapped builder.
Definition volume_builder_interface.hpp:206
auto vol_index() const -> dindex override
Returns the index assigned by the wrapped builder.
Definition volume_builder_interface.hpp:201
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
unsigned int dindex
Default index type.
Definition indexing.hpp:18
get_vector3D_t< A, T > dvector3D
Three-dimensional vector type for algebra A and value type T.
Definition algebra.hpp:80
get_transform3D_t< A, T > dtransform3D
Three-dimensional transform type for algebra A and value type T.
Definition algebra.hpp:84
get_point3D_t< A, T > dpoint3D
Three-dimensional point type for algebra A and value type T.
Definition algebra.hpp:72
Options for the volume builder classes.
Definition volume_builder_interface.hpp:29
constexpr volume_builder_options & deduplicate(bool toggle)
Setters.
Definition volume_builder_interface.hpp:50
constexpr volume_builder_options & sort(bool toggle)
Sets whether global sorting is enabled.
Definition volume_builder_interface.hpp:57
bool m_deduplicate
Globally deduplicate identical data that is added by a builder to the detector.
Definition volume_builder_interface.hpp:32
constexpr bool sort() const
Returns whether global sorting is enabled.
Definition volume_builder_interface.hpp:43
bool m_sort
Globally sort data including the one that is added by a builder to the detector.
Definition volume_builder_interface.hpp:35
constexpr bool deduplicate() const
Getters.
Definition volume_builder_interface.hpp:40