Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:10:53

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/Geometry/GeometryContext.hpp"
0012 #include "Acts/MagneticField/MagneticFieldContext.hpp"
0013 #include "Acts/Material/MaterialInteraction.hpp"
0014 
0015 #include <tuple>
0016 #include <utility>
0017 #include <vector>
0018 
0019 namespace Acts {
0020 
0021 /// @brief Interface for the material mapping that seeks the possible
0022 /// assignment candidates for the material interactiosn
0023 class IAssignmentFinder {
0024  public:
0025   /// Virtual destructor
0026   virtual ~IAssignmentFinder() = default;
0027 
0028   /// @brief SurfaceAssignment is a surface, a position and a direction
0029   struct SurfaceAssignment {
0030     /// The surface to which the material interaction is assigned to
0031     const Surface* surface = nullptr;
0032     /// Position of the assignment
0033     Vector3 position = Vector3::Zero();
0034     // Direction of the assignment
0035     Vector3 direction = Vector3::Zero();
0036   };
0037 
0038   /// @brief VolumeAssignment is a volume and a entry and exit of the volume
0039   struct VolumeAssignment {
0040     /// The volume to which the material interaction is assigned to
0041     InteractionVolume volume{};
0042     /// Entry point of the volume
0043     Vector3 entry = Vector3::Zero();
0044     /// Exit point of the volume
0045     Vector3 exit = Vector3::Zero();
0046   };
0047 
0048   /// @brief Interface method for generating assignment candidates for the
0049   /// material interaction assignment to surfaces or volumes
0050   ///
0051   /// @param gctx is the geometry context
0052   /// @param mctx is the magnetic field context
0053   /// @param position is the position of the initial ray
0054   /// @param direction is the direction of initial ray
0055   ///
0056   /// @return a vector of Surface Assignments and Volume Assignments
0057   virtual std::pair<std::vector<SurfaceAssignment>,
0058                     std::vector<VolumeAssignment>>
0059   assignmentCandidates(const GeometryContext& gctx,
0060                        const MagneticFieldContext& mctx,
0061                        const Vector3& position,
0062                        const Vector3& direction) const = 0;
0063 };
0064 
0065 }  // namespace Acts