![]() |
|
|||
File indexing completed on 2025-08-06 08:09:58
0001 // This file is part of the Acts project. 0002 // 0003 // Copyright (C) 2016-2018 CERN for the benefit of the Acts project 0004 // 0005 // This Source Code Form is subject to the terms of the Mozilla Public 0006 // License, v. 2.0. If a copy of the MPL was not distributed with this 0007 // file, You can obtain one at http://mozilla.org/MPL/2.0/. 0008 0009 #pragma once 0010 #include "Acts/Definitions/Algebra.hpp" 0011 #include "Acts/Digitization/DigitizationCell.hpp" 0012 #include "Acts/Surfaces/RegularSurface.hpp" 0013 0014 #include <memory> 0015 #include <vector> 0016 0017 namespace Acts { 0018 0019 class SurfaceBounds; 0020 class Surface; 0021 class BinUtility; 0022 using SurfacePtr = std::shared_ptr<const RegularSurface>; 0023 using SurfacePtrVector = std::vector<SurfacePtr>; 0024 0025 /// @brief Segmentation Base class 0026 /// 0027 /// This helper class allows to define an arbitrary readout 0028 /// segmentation for the geoemtric digitization, provided a shape of the module, 0029 /// it creates the segmentation surfaces and hands them to the digitization 0030 /// module 0031 /// 0032 /// Since the segmentation description might be identical for many elements 0033 /// while the lorentz angle may change, lorentzAngle and readoutDirection 0034 /// are provided and th the segmenation class only creates the surfaces for the 0035 /// module, 0036 /// but hosts the binning information. 0037 /// 0038 class Segmentation { 0039 public: 0040 /// Virtual Destructor 0041 virtual ~Segmentation() = default; 0042 0043 /// Create the segmentation surfaces in X 0044 /// 0045 /// This method is only used if the full 3D digitization is done 0046 /// 0047 /// @param boundarySurfaces vector to be filled 0048 /// @param segmentationSurfacesX are the segmetation boundaries in X 0049 /// @param segmentationSurfacesY are the segmetation boundaries in Y 0050 /// @param halfThickness is the half thickness in z of the module 0051 /// @param readoutDirection is the direction w.r.t normal vector 0052 /// where the readout is given : -1, 0, 1 possible 0053 /// @param lorentzAngle is the lorentz angle measured from the local z 0054 /// towards x axis 0055 virtual void createSegmentationSurfaces( 0056 SurfacePtrVector& boundarySurfaces, 0057 SurfacePtrVector& segmentationSurfacesX, 0058 SurfacePtrVector& segmentationSurfacesY, double halfThickness, 0059 int readoutDirection, double lorentzAngle) const = 0; 0060 0061 /// Get the digitization cell from a 3D position 0062 /// - ignores the shift, i.e. assumenes in to be in cell frame 0063 /// 0064 /// @param position is the position for which the cell is requested 0065 /// 0066 /// @return is a cell with cell ids 0067 virtual DigitizationCell cell(const Vector3& position) const = 0; 0068 0069 /// Get the digitization cell from a 2D position 0070 /// - ignores the shift, i.e. assumenes in to be in cell frame 0071 /// 0072 /// @param position is the position for which the cell is requested 0073 /// 0074 /// @return is a cell with cell ids 0075 virtual DigitizationCell cell(const Vector2& position) const = 0; 0076 0077 /// Calculate the cell Position from the Id 0078 /// 0079 /// @param dCell the digitization cell 0080 /// 0081 /// @return the center position of the associated cell 0082 virtual Vector2 cellPosition(const DigitizationCell& dCell) const = 0; 0083 0084 /// Fill the associated digitization cell from the start and end position in 0085 /// 3D correct for lorentz effect if needed 0086 /// 0087 /// @param start is the start position of the step 0088 /// @param end is the end position of the step 0089 /// @param halfThickness is the half thickness in z 0090 /// @param readoutDirection is the readout direction with respect to local z 0091 /// @param lorentzAngle is the lorentz angle measured from local z towards x 0092 /// 0093 /// @return is a fully calculated digitzation step 0094 virtual DigitizationStep digitizationStep(const Vector3& start, 0095 const Vector3& end, 0096 double halfThickness, 0097 int readoutDirection, 0098 double lorentzAngle) const = 0; 0099 0100 /// return the surface bounds by reference 0101 virtual const SurfaceBounds& moduleBounds() const = 0; 0102 0103 /// return the bin utility that defines the readout 0104 virtual const BinUtility& binUtility() const = 0; 0105 }; 0106 } // namespace Acts
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
![]() ![]() |