ACTS
Experiment-independent tracking
Loading...
Searching...
No Matches
ActsFatras::SurfaceDrift Struct Reference

The PlanarSurfaceDrift takes an intersection in the nominal surface and projects the ends into the readout surface, which can be at : -1, 0, 1. More...

#include <ActsFatras/Digitization/SurfaceDrift.hpp>

Public Types

using Segment2D = std::array<Acts::Vector2, 2>
 Shorthand for a 2D segment - drifted segment in 2D readout coordinates.
using Segment3D = std::array<Acts::Vector3, 2>
 Shorthand for a 3D segment - undrifted segment in the local 3D frame.

Public Member Functions

Acts::Result< std::tuple< Segment2D, Segment3D > > toReadout (const Acts::GeometryContext &gctx, const Acts::Surface &surface, double thickness, const Acts::Vector3 &pos, const Acts::Vector3 &dir, const Acts::Vector3 &driftDir=Acts::Vector3(0., 0., 0.)) const
 Drift the full 3D segment onto the surface 2D readout frame.

Detailed Description

The PlanarSurfaceDrift takes an intersection in the nominal surface and projects the ends into the readout surface, which can be at : -1, 0, 1.

A Lorentz drift angle can be applied.

A single implementation handles all supported surface types; the readout frame is selected internally from surface.type():

  • Plane / Disc : the Cartesian local frame (x, y), surface normal = local z. (For discs the polar conversion is done downstream in SurfaceMask / Segmentizer, consistent with the historical behaviour.)
  • Cylinder : the unrolled readout frame (rPhi, z), surface normal = radial direction. rPhi = R * phi is the tangential arc length at the cylinder radius.

In every case the in-plane "x"/"y" coordinates carry the same physical (length) units, so the downstream masking and segmentation are identical.

Member Function Documentation

◆ toReadout()

Acts::Result< std::tuple< Segment2D, Segment3D > > ActsFatras::SurfaceDrift::toReadout ( const Acts::GeometryContext & gctx,
const Acts::Surface & surface,
double thickness,
const Acts::Vector3 & pos,
const Acts::Vector3 & dir,
const Acts::Vector3 & driftDir = Acts::Vector3(0., 0., 0.) ) const

Drift the full 3D segment onto the surface 2D readout frame.

Parameters
gctxThe current Geometry context
surfaceThe nominal intersection surface
thicknessThe emulated module/depletion thickness
posThe position in global coordinates
dirThe direction in global coordinates
driftDirThe drift direction in the readout-local frame (plane/disc: local x, y, normal; cylinder: tangential, axial, radial). A direction with no perpendicular component emulates a 3D pixel sensor / no Lorentz drift.
Note
The readout is always emulated at the central surface, as the mask will be deployed there, and the measurement is presented there.
Returns
a tuple of the (drifted) Segment2D on the readout surface (
Note
without masking ) and the original undrifted 3D segment, or a DigitizationError if the track is parallel to the surface.