File indexing completed on 2025-10-31 08:32:14
0001 
0002 
0003 
0004 
0005 
0006 
0007 
0008 
0009 #pragma once
0010 
0011 #include "Acts/EventData/SourceLink.hpp"
0012 #include "Acts/Geometry/GeometryIdentifier.hpp"
0013 #include "Acts/Geometry/TrackingGeometry.hpp"
0014 #include "Acts/Plugins/Podio/PodioDynamicColumns.hpp"
0015 #include "Acts/Utilities/HashedString.hpp"
0016 
0017 #include <limits>
0018 #include <memory>
0019 
0020 #include <podio/podioVersion.h>
0021 
0022 #if podio_VERSION_MAJOR >= 1 || \
0023     (podio_VERSION_MAJOR == 0 && podio_VERSION_MINOR == 99)
0024 #include <podio/ROOTReader.h>
0025 #include <podio/ROOTWriter.h>
0026 #else
0027 #include <podio/ROOTFrameReader.h>
0028 #include <podio/ROOTFrameWriter.h>
0029 #endif
0030 
0031 namespace ActsPodioEdm {
0032 class Surface;
0033 }
0034 
0035 namespace podio {
0036 class Frame;
0037 }
0038 
0039 namespace Acts {
0040 namespace PodioUtil {
0041 
0042 
0043 
0044 
0045 #if podio_VERSION_MAJOR >= 1 || \
0046     (podio_VERSION_MAJOR == 0 && podio_VERSION_MINOR == 99)
0047 using ROOTWriter = podio::ROOTWriter;
0048 using ROOTReader = podio::ROOTReader;
0049 #else
0050 using ROOTWriter = podio::ROOTFrameWriter;
0051 using ROOTReader = podio::ROOTFrameReader;
0052 #endif
0053 
0054 
0055 template <typename T>
0056 decltype(auto) getDataMutable(T&& object) {
0057   if constexpr (podio::version::build_version.major >= 1) {
0058     return std::forward<T>(object).getData();
0059   } else {
0060     return std::forward<T>(object).data();
0061   }
0062 }
0063 
0064 template <typename T>
0065 decltype(auto) getReferenceSurfaceMutable(T&& object) {
0066   if constexpr (podio::version::build_version.major >= 1) {
0067     return std::forward<T>(object).getReferenceSurface();
0068   } else {
0069     return std::forward<T>(object).referenceSurface();
0070   }
0071 }
0072 
0073 using Identifier = std::uint64_t;
0074 constexpr Identifier kNoIdentifier = std::numeric_limits<Identifier>::max();
0075 constexpr int kNoSurface = -1;
0076 
0077 
0078 class ConversionHelper {
0079  public:
0080   virtual std::optional<Identifier> surfaceToIdentifier(
0081       const Surface& surface) const = 0;
0082   virtual const Surface* identifierToSurface(Identifier identifier) const = 0;
0083 
0084   virtual Identifier sourceLinkToIdentifier(const SourceLink& sl) = 0;
0085   virtual SourceLink identifierToSourceLink(Identifier identifier) const = 0;
0086 };
0087 
0088 std::shared_ptr<const Surface> convertSurfaceFromPodio(
0089     const ConversionHelper& helper, const ActsPodioEdm::Surface& surface);
0090 
0091 ActsPodioEdm::Surface convertSurfaceToPodio(const ConversionHelper& helper,
0092                                             const Acts::Surface& surface);
0093 }  
0094 
0095 namespace podio_detail {
0096 
0097 
0098 void recoverDynamicColumns(
0099     const podio::Frame& frame, const std::string& stem,
0100     std::unordered_map<HashedString,
0101                        std::unique_ptr<podio_detail::ConstDynamicColumnBase>>&
0102         dynamic);
0103 }  
0104 }