ACTS
Experiment-independent tracking
Loading...
Searching...
No Matches
detray::line< kSquareCrossSect > Class Template Reference

Geometrical shape of a line surface. More...

#include <detray/geometry/shapes/line.hpp>

Inheritance diagram for detray::line< kSquareCrossSect >:
[legend]
Collaboration diagram for detray::line< kSquareCrossSect >:
[legend]

Public Types

enum  boundaries : unsigned int { e_cross_section = 0u , e_half_z = 1u , e_size = 2u }
 Indices for the line cross-section and half-length boundary values.
template<concepts::scalar scalar_t>
using bounds_type = darray<scalar_t, boundaries::e_size>
 Container definition for the shape boundary values.
template<concepts::algebra algebra_t>
using local_frame_type = line2D<algebra_t>
 Local coordinate frame for boundary checks.
template<typename bool_t>
using result_type = detail::boundary_check_result<bool_t>
 Result type of a boundary check.

Public Member Functions

template<concepts::scalar scalar_t>
constexpr scalar_t area (const bounds_type< scalar_t > &bounds) const
 The area of a the shape.
template<concepts::algebra algebra_t>
dpoint3D< algebra_t > centroid (const bounds_type< dscalar< algebra_t > > &) const
template<concepts::scalar scalar_t>
constexpr bool check_consistency (const bounds_type< scalar_t > &bounds, std::ostream &os) const
 Check consistency of boundary values.
template<concepts::algebra algebra_t>
darray< dscalar< algebra_t >, 6 > local_min_bounds (const bounds_type< dscalar< algebra_t > > &bounds, const dscalar< algebra_t > env=std::numeric_limits< dscalar< algebra_t > >::epsilon()) const
 Lower and upper point for minimal axis aligned bounding box.
template<concepts::scalar scalar_t>
constexpr scalar_t measure (const bounds_type< scalar_t > &bounds) const
 Measure of the shape: Volume.
template<concepts::scalar scalar_t>
constexpr bounds_type< scalar_t > merge (const bounds_type< scalar_t > &bounds, const bounds_type< scalar_t > &o_bounds) const
 Merge two line shapes.
template<concepts::scalar scalar_t, concepts::point point_t>
scalar_t min_dist_to_boundary (const bounds_type< scalar_t > &bounds, const point_t &loc_p) const
 Find the minimum distance to any boundary.
template<concepts::algebra algebra_t>
dvector< dpoint3D< algebra_t > > vertices (const bounds_type< dscalar< algebra_t > > &bounds, dindex) const
 Generate vertices in local cartesian frame.
template<concepts::algebra algebra_t>
constexpr result_type< dbool< algebra_t > > check_boundaries (const bounds_type< dscalar< algebra_t > > &bounds, const dtransform3D< algebra_t > &trf, const dpoint3D< algebra_t > &glob_p, const dscalar< algebra_t > tol=std::numeric_limits< dscalar< algebra_t > >::epsilon(), const dscalar< algebra_t > edge_tol=0.f) const
 Check boundary values for a local point.
template<concepts::scalar scalar_t, concepts::point point_t>
constexpr auto check_boundaries (const bounds_type< scalar_t > &bounds, const point_t &loc_p, const scalar_t tol=std::numeric_limits< scalar_t >::epsilon(), const scalar_t edge_tol=0.f) const

Static Public Attributes

static constexpr std::size_t dim {2u}
 Dimension of the local coordinate system.
static constexpr std::string_view name = "line"
 The name for this shape.
static constexpr bool square_cross_sect = kSquareCrossSect
 Geometrical cross section of the line.

Detailed Description

template<bool kSquareCrossSect = false>
class detray::line< kSquareCrossSect >

Geometrical shape of a line surface.

Template Parameters
kSquareCrossSectdetermines whether the line has a cricular or square cross section. This also changes the local coord. frame.m

The line can either have a circular or a square cross section. In the first case bounds[0] refers to the radius, while in the second case it is the half length of the square. The second boundary bounds[1] is the half length in z.

Member Function Documentation

◆ area()

template<bool kSquareCrossSect = false>
template<concepts::scalar scalar_t>
scalar_t detray::line< kSquareCrossSect >::area ( const bounds_type< scalar_t > & bounds) const
constexpr

The area of a the shape.

Parameters
boundsthe boundary values for this shape
Returns
the stereo annulus area.

◆ centroid()

template<bool kSquareCrossSect = false>
template<concepts::algebra algebra_t>
dpoint3D< algebra_t > detray::line< kSquareCrossSect >::centroid ( const bounds_type< dscalar< algebra_t > > & ) const
Returns
the shapes centroid in local cartesian coordinates

◆ check_boundaries() [1/2]

template<bool kSquareCrossSect = false>
template<concepts::algebra algebra_t>
result_type< dbool< algebra_t > > detray::line< kSquareCrossSect >::check_boundaries ( const bounds_type< dscalar< algebra_t > > & bounds,
const dtransform3D< algebra_t > & trf,
const dpoint3D< algebra_t > & glob_p,
const dscalar< algebra_t > tol = std::numeric_limits<dscalar<algebra_t>>::epsilon(),
const dscalar< algebra_t > edge_tol = 0.f ) const
constexpr

Check boundary values for a local point.

Parameters
boundsthe boundary values for this shape
trfthe surface transform
glob_pthe point to be checked in the global coordinate system
toldynamic tolerance determined by caller
edge_tolAdditional tolerance used to classify points near an edge.
Returns
true if the local point lies within the given boundaries.

◆ check_boundaries() [2/2]

template<bool kSquareCrossSect = false>
template<concepts::scalar scalar_t, concepts::point point_t>
auto detray::line< kSquareCrossSect >::check_boundaries ( const bounds_type< scalar_t > & bounds,
const point_t & loc_p,
const scalar_t tol = std::numeric_limits<scalar_t>::epsilon(),
const scalar_t edge_tol = 0.f ) const
constexpr
Note
the point is expected to be given in local coordinates by the caller. For the conversion from global cartesian coordinates, the nested shape struct can be used. The point is assumed to be in the cylinder 2D frame (sgn * r, z, phi) or (sgn * r, z), the latter only works for the circular cross section line shape.
Parameters
boundsthe boundary values for this shape
loc_pthe point to be checked in the local coordinate system
toldynamic tolerance determined by caller
edge_tolAdditional tolerance used to classify points near an edge.
Returns
true if the local point lies within the given boundaries.

◆ check_consistency()

template<bool kSquareCrossSect = false>
template<concepts::scalar scalar_t>
bool detray::line< kSquareCrossSect >::check_consistency ( const bounds_type< scalar_t > & bounds,
std::ostream & os ) const
constexpr

Check consistency of boundary values.

Parameters
boundsthe boundary values for this shape
osoutput stream for error messages
Returns
true if the bounds are consistent.

◆ local_min_bounds()

template<bool kSquareCrossSect = false>
template<concepts::algebra algebra_t>
darray< dscalar< algebra_t >, 6 > detray::line< kSquareCrossSect >::local_min_bounds ( const bounds_type< dscalar< algebra_t > > & bounds,
const dscalar< algebra_t > env = std::numeric_limits<dscalar<algebra_t>>::epsilon() ) const

Lower and upper point for minimal axis aligned bounding box.

Computes the min and max vertices in a local cartesian frame.

Parameters
boundsthe boundary values for this shape
envdynamic envelope around the shape
Returns
and array of coordinates that contains the lower point (first three values) and the upper point (latter three values) .

◆ measure()

template<bool kSquareCrossSect = false>
template<concepts::scalar scalar_t>
scalar_t detray::line< kSquareCrossSect >::measure ( const bounds_type< scalar_t > & bounds) const
constexpr

Measure of the shape: Volume.

Parameters
boundsthe boundary values for this shape
Returns
the line volume.

◆ merge()

template<bool kSquareCrossSect = false>
template<concepts::scalar scalar_t>
bounds_type< scalar_t > detray::line< kSquareCrossSect >::merge ( const bounds_type< scalar_t > & bounds,
const bounds_type< scalar_t > & o_bounds ) const
constexpr

Merge two line shapes.

Parameters
boundsthe boundary values for this shape
o_boundsthe boundary values for the other shape
Returns
merged bound values

◆ min_dist_to_boundary()

template<bool kSquareCrossSect = false>
template<concepts::scalar scalar_t, concepts::point point_t>
scalar_t detray::line< kSquareCrossSect >::min_dist_to_boundary ( const bounds_type< scalar_t > & bounds,
const point_t & loc_p ) const

Find the minimum distance to any boundary.

Note
the point is expected to be given in local coordinates by the caller.
Parameters
boundsthe boundary values for this shape
loc_pthe point to be checked in the local coordinate system
Returns
the minimum distance.

◆ vertices()

template<bool kSquareCrossSect = false>
template<concepts::algebra algebra_t>
dvector< dpoint3D< algebra_t > > detray::line< kSquareCrossSect >::vertices ( const bounds_type< dscalar< algebra_t > > & bounds,
dindex  ) const

Generate vertices in local cartesian frame.

Parameters
boundsthe boundary values for the line The second argument is unused; the line is represented by its endpoints.
Returns
a generated list of vertices