File indexing completed on 2025-08-05 08:09:11
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011 #include "Acts/Definitions/Algebra.hpp"
0012 #include "Acts/Digitization/DigitizationCell.hpp"
0013 #include "Acts/Digitization/Segmentation.hpp"
0014 #include "Acts/Surfaces/PlanarBounds.hpp"
0015 #include "Acts/Surfaces/RectangleBounds.hpp"
0016 #include "Acts/Utilities/BinUtility.hpp"
0017
0018 #include <cstddef>
0019 #include <memory>
0020 #include <utility>
0021 #include <vector>
0022
0023 namespace Acts {
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044 class CartesianSegmentation : public Segmentation {
0045 public:
0046
0047
0048
0049
0050
0051
0052 CartesianSegmentation(const std::shared_ptr<const PlanarBounds>& mBounds,
0053 std::size_t numCellsX, std::size_t numCellsY = 1);
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064 CartesianSegmentation(std::shared_ptr<const BinUtility> bUtility,
0065 std::shared_ptr<const PlanarBounds> mBounds = nullptr);
0066
0067
0068 ~CartesianSegmentation() override;
0069
0070
0071
0072
0073
0074 void createSegmentationSurfaces(SurfacePtrVector& boundarySurfaces,
0075 SurfacePtrVector& segmentationSurfacesX,
0076 SurfacePtrVector& segmentationSurfacesY,
0077 double halfThickness,
0078 int readoutDirection = 1.,
0079 double lorentzAngle = 0.) const final;
0080
0081
0082 DigitizationCell cell(const Vector3& position) const final;
0083
0084
0085 DigitizationCell cell(const Vector2& position) const final;
0086
0087
0088 Vector2 cellPosition(const DigitizationCell& dCell) const final;
0089
0090
0091
0092
0093
0094 DigitizationStep digitizationStep(const Vector3& start, const Vector3& end,
0095 double halfThickness,
0096 int readoutDirection = 1,
0097 double lorentzAngle = 0.) const final;
0098
0099
0100
0101 const PlanarBounds& moduleBounds() const final;
0102
0103
0104
0105 const BinUtility& binUtility() const final;
0106
0107
0108 std::pair<double, double> pitch() const;
0109
0110 private:
0111 template <class T>
0112 DigitizationCell cellT(const T& position) const;
0113
0114 std::shared_ptr<const PlanarBounds> m_activeBounds;
0115 std::shared_ptr<const BinUtility> m_binUtility;
0116 };
0117
0118 inline const PlanarBounds& CartesianSegmentation::moduleBounds() const {
0119 return (*(m_activeBounds.get()));
0120 }
0121
0122 inline const BinUtility& CartesianSegmentation::binUtility() const {
0123 return (*(m_binUtility.get()));
0124 }
0125
0126 template <class T>
0127 DigitizationCell CartesianSegmentation::cellT(const T& position) const {
0128 return DigitizationCell(m_binUtility->bin(position, 0),
0129 m_binUtility->bin(position, 1));
0130 }
0131
0132 inline DigitizationCell CartesianSegmentation::cell(
0133 const Vector3& position) const {
0134 return cellT<Vector3>(position);
0135 }
0136
0137 inline DigitizationCell CartesianSegmentation::cell(
0138 const Vector2& position) const {
0139 return cellT<Vector2>(position);
0140 }
0141
0142 inline std::pair<double, double> CartesianSegmentation::pitch() const {
0143 auto boundingBox = m_activeBounds->boundingBox();
0144 auto values = boundingBox.values();
0145 double pitchX = 2. * values[0] / m_binUtility->bins(0);
0146 double pitchY = 2. * values[1] / m_binUtility->bins(1);
0147 return std::pair<double, double>(pitchX, pitchY);
0148 }
0149
0150 }