File indexing completed on 2026-04-04 07:48:20
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011 #include "Acts/Geometry/GeometryContext.hpp"
0012 #include "ActsExamples/EventData/Cluster.hpp"
0013 #include "ActsExamples/EventData/Measurement.hpp"
0014 #include "ActsExamples/EventData/SimParticle.hpp"
0015 #include "ActsExamples/EventData/Trajectories.hpp"
0016 #include "ActsExamples/EventData/TruthMatching.hpp"
0017 #include "ActsFatras/EventData/Hit.hpp"
0018 #include <ActsPodioEdm/MutableTrackerHitLocal.h>
0019 #include <ActsPodioEdm/TrackerHitLocal.h>
0020
0021 #include <functional>
0022
0023 #include <edm4hep/MCParticle.h>
0024 #include <edm4hep/MutableMCParticle.h>
0025 #include <edm4hep/MutableSimTrackerHit.h>
0026 #include <edm4hep/MutableTrack.h>
0027 #include <edm4hep/MutableTrackerHitPlane.h>
0028 #include <edm4hep/SimTrackerHit.h>
0029 #include <edm4hep/TrackerHitPlane.h>
0030
0031 namespace ActsExamples::EDM4hepUtil {
0032
0033 using MapParticleIdFrom =
0034 std::function<SimBarcode(const edm4hep::MCParticle& particle)>;
0035 using MapParticleIdTo =
0036 std::function<edm4hep::MCParticle(SimBarcode particleId)>;
0037
0038 inline SimBarcode zeroParticleMapper(const edm4hep::MCParticle& ) {
0039 return SimBarcode::Invalid();
0040 }
0041
0042 using MapGeometryIdFrom =
0043 std::function<Acts::GeometryIdentifier(std::uint64_t cellId)>;
0044 using MapGeometryIdTo =
0045 std::function<std::uint64_t(Acts::GeometryIdentifier geometryId)>;
0046
0047
0048
0049
0050
0051
0052 SimParticle readParticle(
0053 const edm4hep::MCParticle& from,
0054 const MapParticleIdFrom& particleMapper = zeroParticleMapper);
0055
0056
0057
0058
0059
0060
0061 void writeParticle(const SimParticle& from, edm4hep::MutableMCParticle to);
0062
0063
0064
0065
0066
0067
0068
0069 ActsFatras::Hit readSimHit(const edm4hep::SimTrackerHit& from,
0070 const MapParticleIdFrom& particleMapper,
0071 const MapGeometryIdFrom& geometryMapper,
0072 std::uint32_t index = -1);
0073
0074
0075
0076
0077
0078
0079
0080 void writeSimHit(const ActsFatras::Hit& from, edm4hep::MutableSimTrackerHit to,
0081 const MapParticleIdTo& particleMapper,
0082 const MapGeometryIdTo& geometryMapper);
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094 VariableBoundMeasurementProxy readMeasurement(
0095 MeasurementContainer& container, const edm4hep::TrackerHitPlane& from,
0096 const edm4hep::TrackerHit3DCollection* fromClusters, Cluster* toCluster,
0097 const MapGeometryIdFrom& geometryMapper);
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111 void writeMeasurement(const Acts::GeometryContext& gctx,
0112 const ConstVariableBoundMeasurementProxy& from,
0113 ActsPodioEdm::MutableTrackerHitLocal& to,
0114 const Acts::Surface& surface);
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126 VariableBoundMeasurementProxy readMeasurement(
0127 MeasurementContainer& container, const ActsPodioEdm::TrackerHitLocal& from,
0128 const MapGeometryIdFrom& geometryMapper);
0129
0130
0131
0132
0133
0134
0135 void writeTrajectory(const Acts::GeometryContext& gctx, double Bz,
0136 const Trajectories& from, edm4hep::MutableTrack to,
0137 std::size_t fromIndex,
0138 const Acts::ParticleHypothesis& particleHypothesis,
0139 const MeasurementParticlesMap& measurementParticlesMap);
0140
0141
0142
0143
0144
0145
0146 template <typename T>
0147 std::uint64_t podioObjectIDToInteger(T&& o) {
0148 if constexpr (!std::is_same_v<T, podio::ObjectID>) {
0149 return o;
0150 } else {
0151 return o.index;
0152 }
0153 }
0154
0155 }