File indexing completed on 2025-06-30 08:34:31
0001
0002
0003 #pragma once
0004
0005 #include <stdexcept>
0006 #include <podio/CollectionBase.h>
0007
0008
0009 template <typename T> struct PodioTypeMap {
0010 using collection_t = typename T::collection_type;
0011 using mutable_t = typename T::mutable_type;
0012 };
0013
0014 namespace edm4hep {
0015 class TrackerHitSimTrackerHitLink;
0016 class TrackerHitSimTrackerHitLinkCollection;
0017 class MutableTrackerHitSimTrackerHitLink;
0018 };
0019 namespace edm4hep {
0020 class TrackerHitPlane;
0021 class TrackerHitPlaneCollection;
0022 class MutableTrackerHitPlane;
0023 };
0024 namespace edm4hep {
0025 class CaloHitContribution;
0026 class CaloHitContributionCollection;
0027 class MutableCaloHitContribution;
0028 };
0029 namespace edm4hep {
0030 class TrackMCParticleLink;
0031 class TrackMCParticleLinkCollection;
0032 class MutableTrackMCParticleLink;
0033 };
0034 namespace edm4hep {
0035 class RecoMCParticleLink;
0036 class RecoMCParticleLinkCollection;
0037 class MutableRecoMCParticleLink;
0038 };
0039 namespace edm4hep {
0040 class Cluster;
0041 class ClusterCollection;
0042 class MutableCluster;
0043 };
0044 namespace edm4hep {
0045 class SimCalorimeterHit;
0046 class SimCalorimeterHitCollection;
0047 class MutableSimCalorimeterHit;
0048 };
0049 namespace edm4hep {
0050 class ParticleID;
0051 class ParticleIDCollection;
0052 class MutableParticleID;
0053 };
0054 namespace edm4hep {
0055 class Vertex;
0056 class VertexCollection;
0057 class MutableVertex;
0058 };
0059 namespace edm4hep {
0060 class RecDqdx;
0061 class RecDqdxCollection;
0062 class MutableRecDqdx;
0063 };
0064 namespace edm4hep {
0065 class RawTimeSeries;
0066 class RawTimeSeriesCollection;
0067 class MutableRawTimeSeries;
0068 };
0069 namespace edm4hep {
0070 class GeneratorEventParameters;
0071 class GeneratorEventParametersCollection;
0072 class MutableGeneratorEventParameters;
0073 };
0074 namespace edm4hep {
0075 class RawCalorimeterHit;
0076 class RawCalorimeterHitCollection;
0077 class MutableRawCalorimeterHit;
0078 };
0079 namespace edm4hep {
0080 class ClusterMCParticleLink;
0081 class ClusterMCParticleLinkCollection;
0082 class MutableClusterMCParticleLink;
0083 };
0084 namespace edm4hep {
0085 class CalorimeterHit;
0086 class CalorimeterHitCollection;
0087 class MutableCalorimeterHit;
0088 };
0089 namespace edm4hep {
0090 class Track;
0091 class TrackCollection;
0092 class MutableTrack;
0093 };
0094 namespace edm4hep {
0095 class EventHeader;
0096 class EventHeaderCollection;
0097 class MutableEventHeader;
0098 };
0099 namespace edm4hep {
0100 class GeneratorPdfInfo;
0101 class GeneratorPdfInfoCollection;
0102 class MutableGeneratorPdfInfo;
0103 };
0104 namespace edm4hep {
0105 class MCParticle;
0106 class MCParticleCollection;
0107 class MutableMCParticle;
0108 };
0109 namespace edm4hep {
0110 class ReconstructedParticle;
0111 class ReconstructedParticleCollection;
0112 class MutableReconstructedParticle;
0113 };
0114 namespace edm4hep {
0115 class CaloHitMCParticleLink;
0116 class CaloHitMCParticleLinkCollection;
0117 class MutableCaloHitMCParticleLink;
0118 };
0119 namespace edm4hep {
0120 class SimTrackerHit;
0121 class SimTrackerHitCollection;
0122 class MutableSimTrackerHit;
0123 };
0124 namespace edm4hep {
0125 class TrackerHit3D;
0126 class TrackerHit3DCollection;
0127 class MutableTrackerHit3D;
0128 };
0129 namespace edm4hep {
0130 class TimeSeries;
0131 class TimeSeriesCollection;
0132 class MutableTimeSeries;
0133 };
0134 namespace edm4hep {
0135 class VertexRecoParticleLink;
0136 class VertexRecoParticleLinkCollection;
0137 class MutableVertexRecoParticleLink;
0138 };
0139 namespace edm4hep {
0140 class CaloHitSimCaloHitLink;
0141 class CaloHitSimCaloHitLinkCollection;
0142 class MutableCaloHitSimCaloHitLink;
0143 };
0144 namespace edm4eic {
0145 class CherenkovParticleID;
0146 class CherenkovParticleIDCollection;
0147 class MutableCherenkovParticleID;
0148 };
0149 namespace edm4eic {
0150 class Tensor;
0151 class TensorCollection;
0152 class MutableTensor;
0153 };
0154 namespace edm4eic {
0155 class SimPulse;
0156 class SimPulseCollection;
0157 class MutableSimPulse;
0158 };
0159 namespace edm4eic {
0160 class MCRecoVertexParticleAssociation;
0161 class MCRecoVertexParticleAssociationCollection;
0162 class MutableMCRecoVertexParticleAssociation;
0163 };
0164 namespace edm4eic {
0165 class ProtoCluster;
0166 class ProtoClusterCollection;
0167 class MutableProtoCluster;
0168 };
0169 namespace edm4eic {
0170 class TrackSegment;
0171 class TrackSegmentCollection;
0172 class MutableTrackSegment;
0173 };
0174 namespace edm4eic {
0175 class Cluster;
0176 class ClusterCollection;
0177 class MutableCluster;
0178 };
0179 namespace edm4eic {
0180 class Measurement2D;
0181 class Measurement2DCollection;
0182 class MutableMeasurement2D;
0183 };
0184 namespace edm4eic {
0185 class Vertex;
0186 class VertexCollection;
0187 class MutableVertex;
0188 };
0189 namespace edm4eic {
0190 class MCRecoTrackParticleAssociation;
0191 class MCRecoTrackParticleAssociationCollection;
0192 class MutableMCRecoTrackParticleAssociation;
0193 };
0194 namespace edm4eic {
0195 class RawTrackerHit;
0196 class RawTrackerHitCollection;
0197 class MutableRawTrackerHit;
0198 };
0199 namespace edm4eic {
0200 class TrackParameters;
0201 class TrackParametersCollection;
0202 class MutableTrackParameters;
0203 };
0204 namespace edm4eic {
0205 class Trajectory;
0206 class TrajectoryCollection;
0207 class MutableTrajectory;
0208 };
0209 namespace edm4eic {
0210 class MCRecoCalorimeterHitAssociation;
0211 class MCRecoCalorimeterHitAssociationCollection;
0212 class MutableMCRecoCalorimeterHitAssociation;
0213 };
0214 namespace edm4eic {
0215 class PMTHit;
0216 class PMTHitCollection;
0217 class MutablePMTHit;
0218 };
0219 namespace edm4eic {
0220 class CalorimeterHit;
0221 class CalorimeterHitCollection;
0222 class MutableCalorimeterHit;
0223 };
0224 namespace edm4eic {
0225 class Track;
0226 class TrackCollection;
0227 class MutableTrack;
0228 };
0229 namespace edm4eic {
0230 class ReconstructedParticle;
0231 class ReconstructedParticleCollection;
0232 class MutableReconstructedParticle;
0233 };
0234 namespace edm4eic {
0235 class MCRecoTrackerHitAssociation;
0236 class MCRecoTrackerHitAssociationCollection;
0237 class MutableMCRecoTrackerHitAssociation;
0238 };
0239 namespace edm4eic {
0240 class HadronicFinalState;
0241 class HadronicFinalStateCollection;
0242 class MutableHadronicFinalState;
0243 };
0244 namespace edm4eic {
0245 class TrackClusterMatch;
0246 class TrackClusterMatchCollection;
0247 class MutableTrackClusterMatch;
0248 };
0249 namespace edm4eic {
0250 class MCRecoParticleAssociation;
0251 class MCRecoParticleAssociationCollection;
0252 class MutableMCRecoParticleAssociation;
0253 };
0254 namespace edm4eic {
0255 class MCRecoClusterParticleAssociation;
0256 class MCRecoClusterParticleAssociationCollection;
0257 class MutableMCRecoClusterParticleAssociation;
0258 };
0259 namespace edm4eic {
0260 class RingImage;
0261 class RingImageCollection;
0262 class MutableRingImage;
0263 };
0264 namespace edm4eic {
0265 class InclusiveKinematics;
0266 class InclusiveKinematicsCollection;
0267 class MutableInclusiveKinematics;
0268 };
0269 namespace edm4eic {
0270 class TrackSeed;
0271 class TrackSeedCollection;
0272 class MutableTrackSeed;
0273 };
0274 namespace edm4eic {
0275 class TrackerHit;
0276 class TrackerHitCollection;
0277 class MutableTrackerHit;
0278 };
0279
0280 template <typename Visitor> struct VisitPodioCollection {
0281 void operator()(Visitor& visitor, const podio::CollectionBase& collection) {
0282 auto podio_typename = collection.getTypeName();
0283 if (podio_typename == "edm4hep::TrackerHitSimTrackerHitLinkCollection") {
0284 return visitor(*reinterpret_cast<const edm4hep::TrackerHitSimTrackerHitLinkCollection*>(&collection));
0285 }
0286 if (podio_typename == "edm4hep::TrackerHitPlaneCollection") {
0287 return visitor(*reinterpret_cast<const edm4hep::TrackerHitPlaneCollection*>(&collection));
0288 }
0289 if (podio_typename == "edm4hep::CaloHitContributionCollection") {
0290 return visitor(*reinterpret_cast<const edm4hep::CaloHitContributionCollection*>(&collection));
0291 }
0292 if (podio_typename == "edm4hep::TrackMCParticleLinkCollection") {
0293 return visitor(*reinterpret_cast<const edm4hep::TrackMCParticleLinkCollection*>(&collection));
0294 }
0295 if (podio_typename == "edm4hep::RecoMCParticleLinkCollection") {
0296 return visitor(*reinterpret_cast<const edm4hep::RecoMCParticleLinkCollection*>(&collection));
0297 }
0298 if (podio_typename == "edm4hep::ClusterCollection") {
0299 return visitor(*reinterpret_cast<const edm4hep::ClusterCollection*>(&collection));
0300 }
0301 if (podio_typename == "edm4hep::SimCalorimeterHitCollection") {
0302 return visitor(*reinterpret_cast<const edm4hep::SimCalorimeterHitCollection*>(&collection));
0303 }
0304 if (podio_typename == "edm4hep::ParticleIDCollection") {
0305 return visitor(*reinterpret_cast<const edm4hep::ParticleIDCollection*>(&collection));
0306 }
0307 if (podio_typename == "edm4hep::VertexCollection") {
0308 return visitor(*reinterpret_cast<const edm4hep::VertexCollection*>(&collection));
0309 }
0310 if (podio_typename == "edm4hep::RecDqdxCollection") {
0311 return visitor(*reinterpret_cast<const edm4hep::RecDqdxCollection*>(&collection));
0312 }
0313 if (podio_typename == "edm4hep::RawTimeSeriesCollection") {
0314 return visitor(*reinterpret_cast<const edm4hep::RawTimeSeriesCollection*>(&collection));
0315 }
0316 if (podio_typename == "edm4hep::GeneratorEventParametersCollection") {
0317 return visitor(*reinterpret_cast<const edm4hep::GeneratorEventParametersCollection*>(&collection));
0318 }
0319 if (podio_typename == "edm4hep::RawCalorimeterHitCollection") {
0320 return visitor(*reinterpret_cast<const edm4hep::RawCalorimeterHitCollection*>(&collection));
0321 }
0322 if (podio_typename == "edm4hep::ClusterMCParticleLinkCollection") {
0323 return visitor(*reinterpret_cast<const edm4hep::ClusterMCParticleLinkCollection*>(&collection));
0324 }
0325 if (podio_typename == "edm4hep::CalorimeterHitCollection") {
0326 return visitor(*reinterpret_cast<const edm4hep::CalorimeterHitCollection*>(&collection));
0327 }
0328 if (podio_typename == "edm4hep::TrackCollection") {
0329 return visitor(*reinterpret_cast<const edm4hep::TrackCollection*>(&collection));
0330 }
0331 if (podio_typename == "edm4hep::EventHeaderCollection") {
0332 return visitor(*reinterpret_cast<const edm4hep::EventHeaderCollection*>(&collection));
0333 }
0334 if (podio_typename == "edm4hep::GeneratorPdfInfoCollection") {
0335 return visitor(*reinterpret_cast<const edm4hep::GeneratorPdfInfoCollection*>(&collection));
0336 }
0337 if (podio_typename == "edm4hep::MCParticleCollection") {
0338 return visitor(*reinterpret_cast<const edm4hep::MCParticleCollection*>(&collection));
0339 }
0340 if (podio_typename == "edm4hep::ReconstructedParticleCollection") {
0341 return visitor(*reinterpret_cast<const edm4hep::ReconstructedParticleCollection*>(&collection));
0342 }
0343 if (podio_typename == "edm4hep::CaloHitMCParticleLinkCollection") {
0344 return visitor(*reinterpret_cast<const edm4hep::CaloHitMCParticleLinkCollection*>(&collection));
0345 }
0346 if (podio_typename == "edm4hep::SimTrackerHitCollection") {
0347 return visitor(*reinterpret_cast<const edm4hep::SimTrackerHitCollection*>(&collection));
0348 }
0349 if (podio_typename == "edm4hep::TrackerHit3DCollection") {
0350 return visitor(*reinterpret_cast<const edm4hep::TrackerHit3DCollection*>(&collection));
0351 }
0352 if (podio_typename == "edm4hep::TimeSeriesCollection") {
0353 return visitor(*reinterpret_cast<const edm4hep::TimeSeriesCollection*>(&collection));
0354 }
0355 if (podio_typename == "edm4hep::VertexRecoParticleLinkCollection") {
0356 return visitor(*reinterpret_cast<const edm4hep::VertexRecoParticleLinkCollection*>(&collection));
0357 }
0358 if (podio_typename == "edm4hep::CaloHitSimCaloHitLinkCollection") {
0359 return visitor(*reinterpret_cast<const edm4hep::CaloHitSimCaloHitLinkCollection*>(&collection));
0360 }
0361 if (podio_typename == "edm4eic::CherenkovParticleIDCollection") {
0362 return visitor(*reinterpret_cast<const edm4eic::CherenkovParticleIDCollection*>(&collection));
0363 }
0364 if (podio_typename == "edm4eic::TensorCollection") {
0365 return visitor(*reinterpret_cast<const edm4eic::TensorCollection*>(&collection));
0366 }
0367 if (podio_typename == "edm4eic::SimPulseCollection") {
0368 return visitor(*reinterpret_cast<const edm4eic::SimPulseCollection*>(&collection));
0369 }
0370 if (podio_typename == "edm4eic::MCRecoVertexParticleAssociationCollection") {
0371 return visitor(*reinterpret_cast<const edm4eic::MCRecoVertexParticleAssociationCollection*>(&collection));
0372 }
0373 if (podio_typename == "edm4eic::ProtoClusterCollection") {
0374 return visitor(*reinterpret_cast<const edm4eic::ProtoClusterCollection*>(&collection));
0375 }
0376 if (podio_typename == "edm4eic::TrackSegmentCollection") {
0377 return visitor(*reinterpret_cast<const edm4eic::TrackSegmentCollection*>(&collection));
0378 }
0379 if (podio_typename == "edm4eic::ClusterCollection") {
0380 return visitor(*reinterpret_cast<const edm4eic::ClusterCollection*>(&collection));
0381 }
0382 if (podio_typename == "edm4eic::Measurement2DCollection") {
0383 return visitor(*reinterpret_cast<const edm4eic::Measurement2DCollection*>(&collection));
0384 }
0385 if (podio_typename == "edm4eic::VertexCollection") {
0386 return visitor(*reinterpret_cast<const edm4eic::VertexCollection*>(&collection));
0387 }
0388 if (podio_typename == "edm4eic::MCRecoTrackParticleAssociationCollection") {
0389 return visitor(*reinterpret_cast<const edm4eic::MCRecoTrackParticleAssociationCollection*>(&collection));
0390 }
0391 if (podio_typename == "edm4eic::RawTrackerHitCollection") {
0392 return visitor(*reinterpret_cast<const edm4eic::RawTrackerHitCollection*>(&collection));
0393 }
0394 if (podio_typename == "edm4eic::TrackParametersCollection") {
0395 return visitor(*reinterpret_cast<const edm4eic::TrackParametersCollection*>(&collection));
0396 }
0397 if (podio_typename == "edm4eic::TrajectoryCollection") {
0398 return visitor(*reinterpret_cast<const edm4eic::TrajectoryCollection*>(&collection));
0399 }
0400 if (podio_typename == "edm4eic::MCRecoCalorimeterHitAssociationCollection") {
0401 return visitor(*reinterpret_cast<const edm4eic::MCRecoCalorimeterHitAssociationCollection*>(&collection));
0402 }
0403 if (podio_typename == "edm4eic::PMTHitCollection") {
0404 return visitor(*reinterpret_cast<const edm4eic::PMTHitCollection*>(&collection));
0405 }
0406 if (podio_typename == "edm4eic::CalorimeterHitCollection") {
0407 return visitor(*reinterpret_cast<const edm4eic::CalorimeterHitCollection*>(&collection));
0408 }
0409 if (podio_typename == "edm4eic::TrackCollection") {
0410 return visitor(*reinterpret_cast<const edm4eic::TrackCollection*>(&collection));
0411 }
0412 if (podio_typename == "edm4eic::ReconstructedParticleCollection") {
0413 return visitor(*reinterpret_cast<const edm4eic::ReconstructedParticleCollection*>(&collection));
0414 }
0415 if (podio_typename == "edm4eic::MCRecoTrackerHitAssociationCollection") {
0416 return visitor(*reinterpret_cast<const edm4eic::MCRecoTrackerHitAssociationCollection*>(&collection));
0417 }
0418 if (podio_typename == "edm4eic::HadronicFinalStateCollection") {
0419 return visitor(*reinterpret_cast<const edm4eic::HadronicFinalStateCollection*>(&collection));
0420 }
0421 if (podio_typename == "edm4eic::TrackClusterMatchCollection") {
0422 return visitor(*reinterpret_cast<const edm4eic::TrackClusterMatchCollection*>(&collection));
0423 }
0424 if (podio_typename == "edm4eic::MCRecoParticleAssociationCollection") {
0425 return visitor(*reinterpret_cast<const edm4eic::MCRecoParticleAssociationCollection*>(&collection));
0426 }
0427 if (podio_typename == "edm4eic::MCRecoClusterParticleAssociationCollection") {
0428 return visitor(*reinterpret_cast<const edm4eic::MCRecoClusterParticleAssociationCollection*>(&collection));
0429 }
0430 if (podio_typename == "edm4eic::RingImageCollection") {
0431 return visitor(*reinterpret_cast<const edm4eic::RingImageCollection*>(&collection));
0432 }
0433 if (podio_typename == "edm4eic::InclusiveKinematicsCollection") {
0434 return visitor(*reinterpret_cast<const edm4eic::InclusiveKinematicsCollection*>(&collection));
0435 }
0436 if (podio_typename == "edm4eic::TrackSeedCollection") {
0437 return visitor(*reinterpret_cast<const edm4eic::TrackSeedCollection*>(&collection));
0438 }
0439 if (podio_typename == "edm4eic::TrackerHitCollection") {
0440 return visitor(*reinterpret_cast<const edm4eic::TrackerHitCollection*>(&collection));
0441 }
0442 throw std::runtime_error("Unrecognized podio typename!");
0443 }
0444 };