File indexing completed on 2025-08-07 08:10:47
0001
0002
0003
0004
0005
0006
0007
0008 #pragma once
0009
0010 #include "Acts/Geometry/GeometryContext.hpp"
0011 #include "ActsExamples/EventData/Cluster.hpp"
0012 #include "ActsExamples/EventData/Measurement.hpp"
0013 #include "ActsExamples/EventData/Trajectories.hpp"
0014 #include "ActsFatras/EventData/Hit.hpp"
0015 #include "ActsFatras/EventData/Particle.hpp"
0016
0017 #include <functional>
0018
0019 #include "edm4hep/MCParticle.h"
0020 #include "edm4hep/MutableMCParticle.h"
0021 #include "edm4hep/MutableSimTrackerHit.h"
0022 #include "edm4hep/MutableTrack.h"
0023 #include "edm4hep/MutableTrackerHit.h"
0024 #include "edm4hep/MutableTrackerHitPlane.h"
0025 #include "edm4hep/SimTrackerHit.h"
0026 #include "edm4hep/TrackerHit.h"
0027 #include "edm4hep/TrackerHitCollection.h"
0028 #include "edm4hep/TrackerHitPlane.h"
0029
0030 namespace ActsExamples::EDM4hepUtil {
0031
0032 using MapParticleIdFrom =
0033 std::function<ActsFatras::Barcode(const edm4hep::MCParticle& particle)>;
0034 using MapParticleIdTo =
0035 std::function<edm4hep::MCParticle(ActsFatras::Barcode particleId)>;
0036
0037 inline ActsFatras::Barcode zeroParticleMapper(
0038 const edm4hep::MCParticle& ) {
0039 return 0;
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 ActsFatras::Particle readParticle(
0053 const edm4hep::MCParticle& from,
0054 const MapParticleIdFrom& particleMapper = zeroParticleMapper);
0055
0056
0057
0058
0059
0060
0061 void writeParticle(const ActsFatras::Particle& from,
0062 edm4hep::MutableMCParticle to);
0063
0064
0065
0066
0067
0068
0069
0070 ActsFatras::Hit readSimHit(const edm4hep::SimTrackerHit& from,
0071 const MapParticleIdFrom& particleMapper,
0072 const MapGeometryIdFrom& geometryMapper);
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 Measurement readMeasurement(const edm4hep::TrackerHitPlane& from,
0095 const edm4hep::TrackerHitCollection* fromClusters,
0096 Cluster* toCluster,
0097 const MapGeometryIdFrom& geometryMapper);
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109 void writeMeasurement(const Measurement& from,
0110 edm4hep::MutableTrackerHitPlane to,
0111 const Cluster* fromCluster,
0112 edm4hep::TrackerHitCollection& toClusters,
0113 const MapGeometryIdTo& geometryMapper);
0114
0115
0116
0117
0118
0119
0120 void writeTrajectory(const Acts::GeometryContext& gctx, double Bz,
0121 const Trajectories& from, edm4hep::MutableTrack to,
0122 std::size_t fromIndex,
0123 const Acts::ParticleHypothesis& particleHypothesis,
0124 const IndexMultimap<ActsFatras::Barcode>& hitParticlesMap);
0125
0126
0127
0128
0129
0130
0131 template <typename T>
0132 uint64_t podioObjectIDToInteger(T&& o) {
0133 if constexpr (!std::is_same_v<T, podio::ObjectID>) {
0134 return o;
0135 } else {
0136 return o.index;
0137 }
0138 }
0139
0140 }