File indexing completed on 2025-11-18 09:41:52
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 TrackProtoClusterMatch;
0146 class TrackProtoClusterMatchCollection;
0147 class MutableTrackProtoClusterMatch;
0148 };
0149 namespace edm4eic {
0150 class CherenkovParticleID;
0151 class CherenkovParticleIDCollection;
0152 class MutableCherenkovParticleID;
0153 };
0154 namespace edm4eic {
0155 class Tensor;
0156 class TensorCollection;
0157 class MutableTensor;
0158 };
0159 namespace edm4eic {
0160 class SimPulse;
0161 class SimPulseCollection;
0162 class MutableSimPulse;
0163 };
0164 namespace edm4eic {
0165 class MCRecoVertexParticleAssociation;
0166 class MCRecoVertexParticleAssociationCollection;
0167 class MutableMCRecoVertexParticleAssociation;
0168 };
0169 namespace edm4eic {
0170 class ProtoCluster;
0171 class ProtoClusterCollection;
0172 class MutableProtoCluster;
0173 };
0174 namespace edm4eic {
0175 class TrackSegment;
0176 class TrackSegmentCollection;
0177 class MutableTrackSegment;
0178 };
0179 namespace edm4eic {
0180 class Cluster;
0181 class ClusterCollection;
0182 class MutableCluster;
0183 };
0184 namespace edm4eic {
0185 class Measurement2D;
0186 class Measurement2DCollection;
0187 class MutableMeasurement2D;
0188 };
0189 namespace edm4eic {
0190 class Vertex;
0191 class VertexCollection;
0192 class MutableVertex;
0193 };
0194 namespace edm4eic {
0195 class MCRecoTrackParticleAssociation;
0196 class MCRecoTrackParticleAssociationCollection;
0197 class MutableMCRecoTrackParticleAssociation;
0198 };
0199 namespace edm4eic {
0200 class RawTrackerHit;
0201 class RawTrackerHitCollection;
0202 class MutableRawTrackerHit;
0203 };
0204 namespace edm4eic {
0205 class TrackParameters;
0206 class TrackParametersCollection;
0207 class MutableTrackParameters;
0208 };
0209 namespace edm4eic {
0210 class Trajectory;
0211 class TrajectoryCollection;
0212 class MutableTrajectory;
0213 };
0214 namespace edm4eic {
0215 class MCRecoCalorimeterHitAssociation;
0216 class MCRecoCalorimeterHitAssociationCollection;
0217 class MutableMCRecoCalorimeterHitAssociation;
0218 };
0219 namespace edm4eic {
0220 class PMTHit;
0221 class PMTHitCollection;
0222 class MutablePMTHit;
0223 };
0224 namespace edm4eic {
0225 class CalorimeterHit;
0226 class CalorimeterHitCollection;
0227 class MutableCalorimeterHit;
0228 };
0229 namespace edm4eic {
0230 class Track;
0231 class TrackCollection;
0232 class MutableTrack;
0233 };
0234 namespace edm4eic {
0235 class ReconstructedParticle;
0236 class ReconstructedParticleCollection;
0237 class MutableReconstructedParticle;
0238 };
0239 namespace edm4eic {
0240 class MCRecoTrackerHitAssociation;
0241 class MCRecoTrackerHitAssociationCollection;
0242 class MutableMCRecoTrackerHitAssociation;
0243 };
0244 namespace edm4eic {
0245 class HadronicFinalState;
0246 class HadronicFinalStateCollection;
0247 class MutableHadronicFinalState;
0248 };
0249 namespace edm4eic {
0250 class TrackClusterMatch;
0251 class TrackClusterMatchCollection;
0252 class MutableTrackClusterMatch;
0253 };
0254 namespace edm4eic {
0255 class MCRecoParticleAssociation;
0256 class MCRecoParticleAssociationCollection;
0257 class MutableMCRecoParticleAssociation;
0258 };
0259 namespace edm4eic {
0260 class MCRecoClusterParticleAssociation;
0261 class MCRecoClusterParticleAssociationCollection;
0262 class MutableMCRecoClusterParticleAssociation;
0263 };
0264 namespace edm4eic {
0265 class RingImage;
0266 class RingImageCollection;
0267 class MutableRingImage;
0268 };
0269 namespace edm4eic {
0270 class InclusiveKinematics;
0271 class InclusiveKinematicsCollection;
0272 class MutableInclusiveKinematics;
0273 };
0274 namespace edm4eic {
0275 class TrackSeed;
0276 class TrackSeedCollection;
0277 class MutableTrackSeed;
0278 };
0279 namespace edm4eic {
0280 class RawHGCROCHit;
0281 class RawHGCROCHitCollection;
0282 class MutableRawHGCROCHit;
0283 };
0284 namespace edm4eic {
0285 class TrackerHit;
0286 class TrackerHitCollection;
0287 class MutableTrackerHit;
0288 };
0289
0290 template <typename Visitor> struct VisitPodioCollection {
0291 void operator()(Visitor& visitor, const podio::CollectionBase& collection) {
0292 auto podio_typename = collection.getTypeName();
0293 if (podio_typename == "edm4hep::TrackerHitSimTrackerHitLinkCollection") {
0294 return visitor(*reinterpret_cast<const edm4hep::TrackerHitSimTrackerHitLinkCollection*>(&collection));
0295 }
0296 if (podio_typename == "edm4hep::TrackerHitPlaneCollection") {
0297 return visitor(*reinterpret_cast<const edm4hep::TrackerHitPlaneCollection*>(&collection));
0298 }
0299 if (podio_typename == "edm4hep::CaloHitContributionCollection") {
0300 return visitor(*reinterpret_cast<const edm4hep::CaloHitContributionCollection*>(&collection));
0301 }
0302 if (podio_typename == "edm4hep::TrackMCParticleLinkCollection") {
0303 return visitor(*reinterpret_cast<const edm4hep::TrackMCParticleLinkCollection*>(&collection));
0304 }
0305 if (podio_typename == "edm4hep::RecoMCParticleLinkCollection") {
0306 return visitor(*reinterpret_cast<const edm4hep::RecoMCParticleLinkCollection*>(&collection));
0307 }
0308 if (podio_typename == "edm4hep::ClusterCollection") {
0309 return visitor(*reinterpret_cast<const edm4hep::ClusterCollection*>(&collection));
0310 }
0311 if (podio_typename == "edm4hep::SimCalorimeterHitCollection") {
0312 return visitor(*reinterpret_cast<const edm4hep::SimCalorimeterHitCollection*>(&collection));
0313 }
0314 if (podio_typename == "edm4hep::ParticleIDCollection") {
0315 return visitor(*reinterpret_cast<const edm4hep::ParticleIDCollection*>(&collection));
0316 }
0317 if (podio_typename == "edm4hep::VertexCollection") {
0318 return visitor(*reinterpret_cast<const edm4hep::VertexCollection*>(&collection));
0319 }
0320 if (podio_typename == "edm4hep::RecDqdxCollection") {
0321 return visitor(*reinterpret_cast<const edm4hep::RecDqdxCollection*>(&collection));
0322 }
0323 if (podio_typename == "edm4hep::RawTimeSeriesCollection") {
0324 return visitor(*reinterpret_cast<const edm4hep::RawTimeSeriesCollection*>(&collection));
0325 }
0326 if (podio_typename == "edm4hep::GeneratorEventParametersCollection") {
0327 return visitor(*reinterpret_cast<const edm4hep::GeneratorEventParametersCollection*>(&collection));
0328 }
0329 if (podio_typename == "edm4hep::RawCalorimeterHitCollection") {
0330 return visitor(*reinterpret_cast<const edm4hep::RawCalorimeterHitCollection*>(&collection));
0331 }
0332 if (podio_typename == "edm4hep::ClusterMCParticleLinkCollection") {
0333 return visitor(*reinterpret_cast<const edm4hep::ClusterMCParticleLinkCollection*>(&collection));
0334 }
0335 if (podio_typename == "edm4hep::CalorimeterHitCollection") {
0336 return visitor(*reinterpret_cast<const edm4hep::CalorimeterHitCollection*>(&collection));
0337 }
0338 if (podio_typename == "edm4hep::TrackCollection") {
0339 return visitor(*reinterpret_cast<const edm4hep::TrackCollection*>(&collection));
0340 }
0341 if (podio_typename == "edm4hep::EventHeaderCollection") {
0342 return visitor(*reinterpret_cast<const edm4hep::EventHeaderCollection*>(&collection));
0343 }
0344 if (podio_typename == "edm4hep::GeneratorPdfInfoCollection") {
0345 return visitor(*reinterpret_cast<const edm4hep::GeneratorPdfInfoCollection*>(&collection));
0346 }
0347 if (podio_typename == "edm4hep::MCParticleCollection") {
0348 return visitor(*reinterpret_cast<const edm4hep::MCParticleCollection*>(&collection));
0349 }
0350 if (podio_typename == "edm4hep::ReconstructedParticleCollection") {
0351 return visitor(*reinterpret_cast<const edm4hep::ReconstructedParticleCollection*>(&collection));
0352 }
0353 if (podio_typename == "edm4hep::CaloHitMCParticleLinkCollection") {
0354 return visitor(*reinterpret_cast<const edm4hep::CaloHitMCParticleLinkCollection*>(&collection));
0355 }
0356 if (podio_typename == "edm4hep::SimTrackerHitCollection") {
0357 return visitor(*reinterpret_cast<const edm4hep::SimTrackerHitCollection*>(&collection));
0358 }
0359 if (podio_typename == "edm4hep::TrackerHit3DCollection") {
0360 return visitor(*reinterpret_cast<const edm4hep::TrackerHit3DCollection*>(&collection));
0361 }
0362 if (podio_typename == "edm4hep::TimeSeriesCollection") {
0363 return visitor(*reinterpret_cast<const edm4hep::TimeSeriesCollection*>(&collection));
0364 }
0365 if (podio_typename == "edm4hep::VertexRecoParticleLinkCollection") {
0366 return visitor(*reinterpret_cast<const edm4hep::VertexRecoParticleLinkCollection*>(&collection));
0367 }
0368 if (podio_typename == "edm4hep::CaloHitSimCaloHitLinkCollection") {
0369 return visitor(*reinterpret_cast<const edm4hep::CaloHitSimCaloHitLinkCollection*>(&collection));
0370 }
0371 if (podio_typename == "edm4eic::TrackProtoClusterMatchCollection") {
0372 return visitor(*reinterpret_cast<const edm4eic::TrackProtoClusterMatchCollection*>(&collection));
0373 }
0374 if (podio_typename == "edm4eic::CherenkovParticleIDCollection") {
0375 return visitor(*reinterpret_cast<const edm4eic::CherenkovParticleIDCollection*>(&collection));
0376 }
0377 if (podio_typename == "edm4eic::TensorCollection") {
0378 return visitor(*reinterpret_cast<const edm4eic::TensorCollection*>(&collection));
0379 }
0380 if (podio_typename == "edm4eic::SimPulseCollection") {
0381 return visitor(*reinterpret_cast<const edm4eic::SimPulseCollection*>(&collection));
0382 }
0383 if (podio_typename == "edm4eic::MCRecoVertexParticleAssociationCollection") {
0384 return visitor(*reinterpret_cast<const edm4eic::MCRecoVertexParticleAssociationCollection*>(&collection));
0385 }
0386 if (podio_typename == "edm4eic::ProtoClusterCollection") {
0387 return visitor(*reinterpret_cast<const edm4eic::ProtoClusterCollection*>(&collection));
0388 }
0389 if (podio_typename == "edm4eic::TrackSegmentCollection") {
0390 return visitor(*reinterpret_cast<const edm4eic::TrackSegmentCollection*>(&collection));
0391 }
0392 if (podio_typename == "edm4eic::ClusterCollection") {
0393 return visitor(*reinterpret_cast<const edm4eic::ClusterCollection*>(&collection));
0394 }
0395 if (podio_typename == "edm4eic::Measurement2DCollection") {
0396 return visitor(*reinterpret_cast<const edm4eic::Measurement2DCollection*>(&collection));
0397 }
0398 if (podio_typename == "edm4eic::VertexCollection") {
0399 return visitor(*reinterpret_cast<const edm4eic::VertexCollection*>(&collection));
0400 }
0401 if (podio_typename == "edm4eic::MCRecoTrackParticleAssociationCollection") {
0402 return visitor(*reinterpret_cast<const edm4eic::MCRecoTrackParticleAssociationCollection*>(&collection));
0403 }
0404 if (podio_typename == "edm4eic::RawTrackerHitCollection") {
0405 return visitor(*reinterpret_cast<const edm4eic::RawTrackerHitCollection*>(&collection));
0406 }
0407 if (podio_typename == "edm4eic::TrackParametersCollection") {
0408 return visitor(*reinterpret_cast<const edm4eic::TrackParametersCollection*>(&collection));
0409 }
0410 if (podio_typename == "edm4eic::TrajectoryCollection") {
0411 return visitor(*reinterpret_cast<const edm4eic::TrajectoryCollection*>(&collection));
0412 }
0413 if (podio_typename == "edm4eic::MCRecoCalorimeterHitAssociationCollection") {
0414 return visitor(*reinterpret_cast<const edm4eic::MCRecoCalorimeterHitAssociationCollection*>(&collection));
0415 }
0416 if (podio_typename == "edm4eic::PMTHitCollection") {
0417 return visitor(*reinterpret_cast<const edm4eic::PMTHitCollection*>(&collection));
0418 }
0419 if (podio_typename == "edm4eic::CalorimeterHitCollection") {
0420 return visitor(*reinterpret_cast<const edm4eic::CalorimeterHitCollection*>(&collection));
0421 }
0422 if (podio_typename == "edm4eic::TrackCollection") {
0423 return visitor(*reinterpret_cast<const edm4eic::TrackCollection*>(&collection));
0424 }
0425 if (podio_typename == "edm4eic::ReconstructedParticleCollection") {
0426 return visitor(*reinterpret_cast<const edm4eic::ReconstructedParticleCollection*>(&collection));
0427 }
0428 if (podio_typename == "edm4eic::MCRecoTrackerHitAssociationCollection") {
0429 return visitor(*reinterpret_cast<const edm4eic::MCRecoTrackerHitAssociationCollection*>(&collection));
0430 }
0431 if (podio_typename == "edm4eic::HadronicFinalStateCollection") {
0432 return visitor(*reinterpret_cast<const edm4eic::HadronicFinalStateCollection*>(&collection));
0433 }
0434 if (podio_typename == "edm4eic::TrackClusterMatchCollection") {
0435 return visitor(*reinterpret_cast<const edm4eic::TrackClusterMatchCollection*>(&collection));
0436 }
0437 if (podio_typename == "edm4eic::MCRecoParticleAssociationCollection") {
0438 return visitor(*reinterpret_cast<const edm4eic::MCRecoParticleAssociationCollection*>(&collection));
0439 }
0440 if (podio_typename == "edm4eic::MCRecoClusterParticleAssociationCollection") {
0441 return visitor(*reinterpret_cast<const edm4eic::MCRecoClusterParticleAssociationCollection*>(&collection));
0442 }
0443 if (podio_typename == "edm4eic::RingImageCollection") {
0444 return visitor(*reinterpret_cast<const edm4eic::RingImageCollection*>(&collection));
0445 }
0446 if (podio_typename == "edm4eic::InclusiveKinematicsCollection") {
0447 return visitor(*reinterpret_cast<const edm4eic::InclusiveKinematicsCollection*>(&collection));
0448 }
0449 if (podio_typename == "edm4eic::TrackSeedCollection") {
0450 return visitor(*reinterpret_cast<const edm4eic::TrackSeedCollection*>(&collection));
0451 }
0452 if (podio_typename == "edm4eic::RawHGCROCHitCollection") {
0453 return visitor(*reinterpret_cast<const edm4eic::RawHGCROCHitCollection*>(&collection));
0454 }
0455 if (podio_typename == "edm4eic::TrackerHitCollection") {
0456 return visitor(*reinterpret_cast<const edm4eic::TrackerHitCollection*>(&collection));
0457 }
0458 throw std::runtime_error("Unrecognized podio typename!");
0459 }
0460 };