Class Acts::DigitizationModule

class DigitizationModule

Class that holds the surfaces for a planar digitization detector module.

It needs a descriptor to design different pixel/strixels/strip setups (with a segmentation class) in order to define the readout segmentation

The digitizaiton is done in the local frame of the surface.

The lorentz angle is assumed to be only in x-direction and constant for the module, it is measured from the local z-direction towards the local x-direction.

The readout direction defines the charge drift either: a) towards the surface at -halfThickness if readout is defined at -1 b) towards the surface at +halfThickness if readout is defined at +1


  • 3D positions are within the 3D frame of the module

  • 2D positions are corrected to parameter surface at the center of the module (and not the readout surface)

The lorenzShift is the correction from the readout surface to the parameter surface

Public Functions

DigitizationModule(std::shared_ptr<const Segmentation> moduleSegmentation, double halfThickness, int readoutDirection, double lorentzAngle, double energyThreshold = 0., bool analogue = false)

Constructor from a Segmentation descriptor.

  • moduleSegmentation – is the segmentation descriptions

  • halfThickness – is the half thickness of the module

  • readoutDirection – is the readout drift direction

  • lorentzAngle – is the lorentz drift angle

  • energyThreshold – Optional energy threshold for digitization

  • analogue – Run analogue digitization (defaults to false)

virtual ~DigitizationModule() = default

Virtual Destructor.

inline bool analogue() const

Indicates if the readout of the module is analogue, default is digital.

inline const SurfacePtrVector &boundarySurfaces() const

Return the bounding surfaces inlcuding top and bottom.

const DigitizationCell cell(const Vector2 &position) const

Get the digitization cell from a position.


position – The position to query


inline DigitizationStep digitizationStep(const Vector3 &start, const Vector3 &end) const

Fill the associated digitization cell from this start and end position, correct for lorentz effect if needed.

  • start – is the start position of the step

  • end – is the end position of the step


the digitization step

inline double energyThreshold() const

Return the energy threshold per cell of the module.

inline double halfThickness() const

Return the module thickness.

inline double lorentzAngle() const

Return the lorentz Angle.

inline int readoutDirection() const

Return the readout direction.

inline const Segmentation &segmentation() const

return the segmenation

const SurfacePtrVector segmentationSurfaces(const DigitizationCell &entryCids, const DigitizationCell &exitCids) const

Return the internal test segmentation surfaces to test between entry and exit given by their cell id’s - the boundaries are not given.

  • entryCids – are the entry digitisation cell ids

  • exitCids – are the exit digitisation cell ids


object is a vector of shared surfaces

inline const SurfacePtrVector &segmentationSurfacesX() const

Return all surfaces in X - excluding the boundaries.

inline const SurfacePtrVector &segmentationSurfacesY() const

Return all surfaces in Y - excluding the boundaries.

SurfacePtrVector stepSurfaces(const Vector3 &start, const Vector3 &end) const

Return the test surfaces between these points.

  • start – is the start position of the step

  • end – is the end position of the step


stepSurfaces are the surfaces to test