File indexing completed on 2025-08-05 08:09:11
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010 #include "Acts/Definitions/Algebra.hpp"
0011 #include "Acts/Digitization/DigitizationCell.hpp"
0012 #include "Acts/Digitization/Segmentation.hpp"
0013 #include "Acts/Surfaces/RegularSurface.hpp"
0014
0015 #include <memory>
0016 #include <vector>
0017
0018 namespace Acts {
0019
0020 class Surface;
0021
0022 using SurfacePtr = std::shared_ptr<const RegularSurface>;
0023 using SurfacePtrVector = std::vector<SurfacePtr>;
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050 class DigitizationModule {
0051 public:
0052
0053
0054
0055
0056
0057
0058
0059
0060 DigitizationModule(std::shared_ptr<const Segmentation> moduleSegmentation,
0061 double halfThickness, int readoutDirection,
0062 double lorentzAngle, double energyThreshold = 0.,
0063 bool analogue = false);
0064
0065
0066 virtual ~DigitizationModule() = default;
0067
0068
0069
0070
0071
0072
0073
0074
0075 const SurfacePtrVector segmentationSurfaces(
0076 const DigitizationCell& entryCids,
0077 const DigitizationCell& exitCids) const;
0078
0079
0080
0081
0082 const DigitizationCell cell(const Vector2& position) const;
0083
0084
0085 double halfThickness() const;
0086
0087
0088 int readoutDirection() const;
0089
0090
0091 double lorentzAngle() const;
0092
0093
0094 double energyThreshold() const;
0095
0096
0097 bool analogue() const;
0098
0099
0100 const Segmentation& segmentation() const;
0101
0102
0103
0104
0105
0106
0107
0108 SurfacePtrVector stepSurfaces(const Vector3& start, const Vector3& end) const;
0109
0110
0111
0112
0113
0114
0115
0116 DigitizationStep digitizationStep(const Vector3& start,
0117 const Vector3& end) const;
0118
0119
0120 const SurfacePtrVector& boundarySurfaces() const;
0121
0122
0123 const SurfacePtrVector& segmentationSurfacesX() const;
0124
0125
0126 const SurfacePtrVector& segmentationSurfacesY() const;
0127
0128 private:
0129
0130 double m_halfThickness;
0131
0132 int m_readoutDirection;
0133
0134 double m_lorentzAngle;
0135
0136 double m_tanLorentzAngle;
0137
0138 double m_energyThreshold;
0139
0140 bool m_analogue;
0141
0142 std::shared_ptr<const Segmentation> m_segmentation;
0143
0144 SurfacePtrVector m_boundarySurfaces;
0145
0146 SurfacePtrVector m_segmentationSurfacesX;
0147
0148 SurfacePtrVector m_segmentationSurfacesY;
0149 };
0150
0151 inline double DigitizationModule::halfThickness() const {
0152 return m_halfThickness;
0153 }
0154
0155 inline int DigitizationModule::readoutDirection() const {
0156 return m_readoutDirection;
0157 }
0158
0159 inline double DigitizationModule::lorentzAngle() const {
0160 return m_lorentzAngle;
0161 }
0162
0163 inline double DigitizationModule::energyThreshold() const {
0164 return m_energyThreshold;
0165 }
0166
0167 inline bool DigitizationModule::analogue() const {
0168 return m_analogue;
0169 }
0170
0171 inline const Segmentation& DigitizationModule::segmentation() const {
0172 return (*(m_segmentation.get()));
0173 }
0174
0175 inline const SurfacePtrVector& DigitizationModule::boundarySurfaces() const {
0176 return m_boundarySurfaces;
0177 }
0178
0179 inline const SurfacePtrVector& DigitizationModule::segmentationSurfacesX()
0180 const {
0181 return m_segmentationSurfacesX;
0182 }
0183
0184 inline const SurfacePtrVector& DigitizationModule::segmentationSurfacesY()
0185 const {
0186 return m_segmentationSurfacesY;
0187 }
0188
0189 inline DigitizationStep DigitizationModule::digitizationStep(
0190 const Vector3& start, const Vector3& end) const {
0191 return m_segmentation->digitizationStep(start, end, m_halfThickness,
0192 m_readoutDirection, m_lorentzAngle);
0193 }
0194 }