Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-23 08:39:44

0001 // This file is part of the ACTS project.
0002 //
0003 // Copyright (C) 2016 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 https://mozilla.org/MPL/2.0/.
0008 
0009 #pragma once
0010 
0011 #include "Acts/Definitions/Algebra.hpp"
0012 #include "Acts/Geometry/GeometryContext.hpp"
0013 #include "Acts/Utilities/BinUtility.hpp"
0014 #include "ActsFatras/Digitization/Segmentizer.hpp"
0015 #include "ActsFatras/Digitization/SurfaceDrift.hpp"
0016 #include "ActsFatras/Digitization/SurfaceMask.hpp"
0017 #include "ActsFatras/EventData/Hit.hpp"
0018 
0019 #include <numeric>
0020 
0021 namespace Acts {
0022 class Surface;
0023 }
0024 
0025 namespace ActsFatras {
0026 
0027 /// @brief Class that ties the digitization modules together and produces the channels
0028 ///
0029 /// The drift and masking steps are surface-type agnostic: SurfaceDrift and
0030 /// SurfaceMask each dispatch internally on the surface type (plane / disc /
0031 /// cylinder). The resulting (already-clipped) 2-D segment is fed into the
0032 /// Segmentizer, which steps through the channel grid defined by the supplied
0033 /// BinUtility.
0034 class Channelizer {
0035   SurfaceDrift m_surfaceDrift;
0036   SurfaceMask m_surfaceMask;
0037   Segmentizer m_segmentizer;
0038 
0039  public:
0040   /// Do the geometric channelizing
0041   ///
0042   /// @param hit The hit we want to channelize
0043   /// @param surface the surface on which the hit is
0044   /// @param gctx the Geometry context
0045   /// @param driftDir the drift direction
0046   /// @param segmentation the segmentation of the surface
0047   /// @param thickness the thickness of the surface
0048   /// @param minRelPerpDrift minimum relative perpendicular drift (to avoid numerical instability)
0049   ///
0050   /// @return the list of channels
0051   Acts::Result<std::vector<Segmentizer::ChannelSegment>> channelize(
0052       const Hit& hit, const Acts::Surface& surface,
0053       const Acts::GeometryContext& gctx, const Acts::Vector3& driftDir,
0054       const Acts::BinUtility& segmentation, double thickness,
0055       double minRelPerpDrift = 0.001) const;
0056 };
0057 
0058 }  // namespace ActsFatras