Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-06-29 07:39:54

0001 // SPDX-License-Identifier: LGPL-3.0-or-later
0002 // Copyright (C) 2022 - 2025, Dmitry Romanov, Tyler Kutz, Wouter Deconinck, Dmitry Kalinkin
0003 
0004 #include <Acts/Definitions/Units.hpp>
0005 #include <Evaluator/DD4hepUnits.h>
0006 #include <JANA/JApplication.h>
0007 #include <JANA/JApplicationFwd.h>
0008 #include <JANA/Utils/JTypeInfo.h>
0009 #include <edm4eic/EDM4eicVersion.h>
0010 #include <edm4eic/MCRecoTrackParticleAssociationCollection.h>
0011 #include <edm4eic/MCRecoTrackerHitAssociationCollection.h>
0012 #include <edm4eic/Measurement2D.h>
0013 #include <cmath>
0014 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0015 #include <edm4eic/MCRecoTrackerHitLinkCollection.h>
0016 #endif
0017 #include <edm4eic/TrackCollection.h>
0018 #include <edm4eic/TrackParameters.h>
0019 #include <edm4eic/TrackSeed.h>
0020 #include <edm4eic/TrackerHitCollection.h>
0021 #include <podio/detail/Link.h>
0022 #include <deque>
0023 #include <functional>
0024 #include <memory>
0025 #include <string>
0026 #include <utility>
0027 #include <variant>
0028 #include <vector>
0029 
0030 #include "algorithms/meta/SubDivideFunctors.h"
0031 #include "algorithms/tracking/TrackPropagationConfig.h"
0032 #include "extensions/jana/JOmniFactoryGeneratorT.h"
0033 #include "factories/meta/CollectionCollector_factory.h"
0034 #include "factories/meta/SubDivideCollection_factory.h"
0035 #include "factories/tracking/ActsToTracks_factory.h"
0036 #include "factories/tracking/ActsTrackMerger_factory.h"
0037 #include "factories/tracking/AmbiguitySolver_factory.h"
0038 #include "factories/tracking/CKFTracking_factory.h"
0039 #include "factories/tracking/IterativeVertexFinder_factory.h"
0040 #include "factories/tracking/SecondaryVertexFinder_factory.h"
0041 #include "factories/tracking/TrackParamTruthInit_factory.h"
0042 #include "factories/tracking/TrackProjector_factory.h"
0043 #include "factories/tracking/TrackPropagation_factory.h"
0044 #include "factories/tracking/TrackSeeding_factory.h"
0045 #include "factories/tracking/TrackerMeasurementFromHits_factory.h"
0046 #include "factories/tracking/TracksToParticles_factory.h"
0047 
0048 //
0049 extern "C" {
0050 void InitPlugin(JApplication* app) {
0051   InitJANAPlugin(app);
0052 
0053   using namespace eicrecon;
0054 
0055   app->Add(new JOmniFactoryGeneratorT<TrackParamTruthInit_factory>(
0056       "TrackerTruthSeeds", {"EventHeader", "MCParticles"},
0057       {"TrackerTruthSeeds", "TrackerTruthSeedParameters"}, {}, app));
0058 
0059   std::vector<std::pair<double, double>> thetaRanges{{0, 50 * dd4hep::mrad},
0060                                                      {50 * dd4hep::mrad, 180 * dd4hep::deg}};
0061   app->Add(new JOmniFactoryGeneratorT<SubDivideCollection_factory<edm4eic::TrackSeed>>(
0062       "CentralB0TrackerTruthSeeds", {"TrackerTruthSeeds"},
0063       {"B0TrackerTruthSeeds", "CentralTrackerTruthSeeds"},
0064       {
0065           .function = RangeSplit<
0066               Chain<&edm4eic::TrackSeed::getParams, &edm4eic::TrackParameters::getTheta>>(
0067               thetaRanges),
0068       },
0069       app));
0070 
0071   // CENTRAL TRACKER
0072 
0073   // Tracker hits collector
0074   app->Add(new JOmniFactoryGeneratorT<CollectionCollector_factory<edm4eic::TrackerHit, true>>(
0075       "CentralTrackingRecHits",
0076       {"SiBarrelTrackerRecHits", "SiBarrelVertexRecHits", "SiEndcapTrackerRecHits",
0077        "MPGDBarrelRecHits", "OuterMPGDBarrelRecHits", "BackwardMPGDEndcapRecHits",
0078        "ForwardMPGDEndcapRecHits"},
0079       {"CentralTrackingRecHits"}, // Output collection name
0080       app));
0081 
0082   // Tracker hit associations collector
0083   app->Add(new JOmniFactoryGeneratorT<
0084            CollectionCollector_factory<edm4eic::MCRecoTrackerHitAssociation, true>>(
0085       "CentralTrackingRawHitAssociations",
0086       {"SiBarrelRawHitAssociations", "SiBarrelVertexRawHitAssociations",
0087        "SiEndcapTrackerRawHitAssociations", "MPGDBarrelRawHitAssociations",
0088        "OuterMPGDBarrelRawHitAssociations", "BackwardMPGDEndcapRawHitAssociations",
0089        "ForwardMPGDEndcapRawHitAssociations"},
0090       {"CentralTrackingRawHitAssociations"}, // Output collection name
0091       app));
0092 
0093 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0094   // Tracker hit links collector
0095   app->Add(
0096       new JOmniFactoryGeneratorT<CollectionCollector_factory<edm4eic::MCRecoTrackerHitLink, true>>(
0097           "CentralTrackingRawHitLinks",
0098           {"SiBarrelRawHitLinks", "SiBarrelVertexRawHitLinks", "SiEndcapTrackerRawHitLinks",
0099            "TOFBarrelSharedRawHitLinks", "TOFEndcapSharedRawHitLinks", "MPGDBarrelRawHitLinks",
0100            "OuterMPGDBarrelRawHitLinks", "BackwardMPGDEndcapRawHitLinks",
0101            "ForwardMPGDEndcapRawHitLinks"},
0102           {"CentralTrackingRawHitLinks"}, // Output collection name
0103           app));
0104 #endif
0105 
0106   app->Add(new JOmniFactoryGeneratorT<TrackerMeasurementFromHits_factory>(
0107       "CentralWithoutTOFTrackerMeasurements", {"CentralTrackingRecHits"},
0108       {"CentralWithoutTOFTrackerMeasurements"}, app));
0109 
0110   // add trackers that generate Measurement2D directly
0111   app->Add(new JOmniFactoryGeneratorT<CollectionCollector_factory<edm4eic::Measurement2D, true>>(
0112       "CentralTrackerMeasurements",
0113       {"CentralWithoutTOFTrackerMeasurements", "TOFBarrelClusterHits", "TOFEndcapClusterHits"},
0114       {"CentralTrackerMeasurements"}, // Output collection name
0115       app));
0116 
0117   app->Add(new JOmniFactoryGeneratorT<CKFTracking_factory>(
0118       "CentralCKFTruthSeededTrajectories",
0119       {"CentralTrackerTruthSeeds", "CentralTrackerMeasurements"},
0120       {
0121           "CentralCKFTruthSeededActsTrackStatesUnfiltered",
0122           "CentralCKFTruthSeededActsTracksUnfiltered",
0123       },
0124       app));
0125 
0126   app->Add(new JOmniFactoryGeneratorT<ActsToTracks_factory>(
0127       "CentralCKFTruthSeededTracksUnfiltered",
0128       {
0129           "CentralTrackerMeasurements",
0130           "CentralTrackerTruthSeeds",
0131           "CentralCKFTruthSeededActsTrackStatesUnfiltered",
0132           "CentralCKFTruthSeededActsTracksUnfiltered",
0133           "CentralTrackingRawHitAssociations",
0134       },
0135       {
0136           "CentralCKFTruthSeededTrajectoriesUnfiltered",
0137           "CentralCKFTruthSeededTrackParametersUnfiltered",
0138           "CentralCKFTruthSeededTracksUnfiltered",
0139 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0140           "CentralCKFTruthSeededTrackUnfilteredLinks",
0141 #endif
0142           "CentralCKFTruthSeededTrackUnfilteredAssociations",
0143       },
0144       app));
0145 
0146   app->Add(new JOmniFactoryGeneratorT<AmbiguitySolver_factory>(
0147       "TruthSeededAmbiguityResolutionSolver",
0148       {"CentralCKFTruthSeededActsTrackStatesUnfiltered",
0149        "CentralCKFTruthSeededActsTracksUnfiltered"},
0150       {
0151           "CentralCKFTruthSeededActsTrackStates",
0152           "CentralCKFTruthSeededActsTracks",
0153       },
0154       app));
0155 
0156   app->Add(
0157       new JOmniFactoryGeneratorT<ActsToTracks_factory>("CentralCKFTruthSeededTracks",
0158                                                        {
0159                                                            "CentralTrackerMeasurements",
0160                                                            "CentralTrackerTruthSeeds",
0161                                                            "CentralCKFTruthSeededActsTrackStates",
0162                                                            "CentralCKFTruthSeededActsTracks",
0163                                                            "CentralTrackingRawHitAssociations",
0164                                                        },
0165                                                        {
0166                                                            "CentralCKFTruthSeededTrajectories",
0167                                                            "CentralCKFTruthSeededTrackParameters",
0168                                                            "CentralCKFTruthSeededTracks",
0169 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0170                                                            "CentralCKFTruthSeededTrackLinks",
0171 #endif
0172                                                            "CentralCKFTruthSeededTrackAssociations",
0173                                                        },
0174                                                        app));
0175 
0176   app->Add(new JOmniFactoryGeneratorT<TrackSeeding_factory>(
0177       "CentralTrackSeeds", {"CentralTrackingRecHits"},
0178       {"CentralTrackSeeds", "CentralTrackSeedParameters"}, {}, app));
0179 
0180   app->Add(new JOmniFactoryGeneratorT<CKFTracking_factory>(
0181       "CentralCKFTrajectories", {"CentralTrackSeeds", "CentralTrackerMeasurements"},
0182       {
0183           "CentralCKFActsTrackStatesUnfiltered",
0184           "CentralCKFActsTracksUnfiltered",
0185       },
0186       app));
0187 
0188   app->Add(
0189       new JOmniFactoryGeneratorT<ActsToTracks_factory>("CentralCKFTracksUnfiltered",
0190                                                        {
0191                                                            "CentralTrackerMeasurements",
0192                                                            "CentralTrackSeeds",
0193                                                            "CentralCKFActsTrackStatesUnfiltered",
0194                                                            "CentralCKFActsTracksUnfiltered",
0195                                                            "CentralTrackingRawHitAssociations",
0196                                                        },
0197                                                        {
0198                                                            "CentralCKFTrajectoriesUnfiltered",
0199                                                            "CentralCKFTrackParametersUnfiltered",
0200                                                            "CentralCKFTracksUnfiltered",
0201 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0202                                                            "CentralCKFTrackUnfilteredLinks",
0203 #endif
0204                                                            "CentralCKFTrackUnfilteredAssociations",
0205                                                        },
0206                                                        app));
0207 
0208   app->Add(new JOmniFactoryGeneratorT<AmbiguitySolver_factory>(
0209       "AmbiguityResolutionSolver",
0210       {"CentralCKFActsTrackStatesUnfiltered", "CentralCKFActsTracksUnfiltered"},
0211       {
0212           "CentralCKFActsTrackStates",
0213           "CentralCKFActsTracks",
0214       },
0215       app));
0216 
0217   app->Add(new JOmniFactoryGeneratorT<ActsToTracks_factory>("CentralCKFTracks",
0218                                                             {
0219                                                                 "CentralTrackerMeasurements",
0220                                                                 "CentralTrackSeeds",
0221                                                                 "CentralCKFActsTrackStates",
0222                                                                 "CentralCKFActsTracks",
0223                                                                 "CentralTrackingRawHitAssociations",
0224                                                             },
0225                                                             {
0226                                                                 "CentralCKFTrajectories",
0227                                                                 "CentralCKFTrackParameters",
0228                                                                 "CentralCKFTracks",
0229 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0230                                                                 "CentralCKFTrackLinks",
0231 #endif
0232                                                                 "CentralCKFTrackAssociations",
0233                                                             },
0234                                                             app));
0235 
0236   app->Add(new JOmniFactoryGeneratorT<TrackProjector_factory>("CentralTrackSegments",
0237                                                               {
0238                                                                   "CentralCKFActsTrackStates",
0239                                                                   "CentralCKFActsTracks",
0240                                                                   "CentralCKFTracks",
0241                                                               },
0242                                                               {
0243                                                                   "CentralTrackSegments",
0244                                                               },
0245                                                               app));
0246 
0247   app->Add(
0248       new JOmniFactoryGeneratorT<IterativeVertexFinder_factory>("CentralTrackVertices",
0249                                                                 {
0250                                                                     "CentralCKFActsTrackStates",
0251                                                                     "CentralCKFActsTracks",
0252                                                                     "ReconstructedChargedParticles",
0253                                                                 },
0254                                                                 {
0255                                                                     "CentralTrackVertices",
0256                                                                 },
0257                                                                 {}, app));
0258 
0259   app->Add(new JOmniFactoryGeneratorT<TrackPropagation_factory>(
0260       "CalorimeterTrackPropagator",
0261       {"CentralCKFTracks", "CentralCKFActsTrackStates", "CentralCKFActsTracks"},
0262       {"CalorimeterTrackProjections"},
0263       {.target_surfaces{
0264           // DIRC
0265           eicrecon::CylinderSurfaceConfig{.id   = "BarrelDIRC_ID",
0266                                           .rmin = "DIRC_rmin",
0267                                           .zmin = "DIRC_offset - DIRC_length / 2.0",
0268                                           .zmax = "DIRC_offset + DIRC_length / 2.0"},
0269           // Ecal
0270           eicrecon::DiscSurfaceConfig{.id   = "EcalEndcapN_ID",
0271                                       .zmin = "- EcalEndcapN_zmin",
0272                                       .rmin = 0.,
0273                                       .rmax = "1.1*EcalEndcapN_rmax"},
0274           eicrecon::DiscSurfaceConfig{.id   = "EcalEndcapN_ID",
0275                                       .zmin = "- EcalEndcapN_zmin - 50*mm",
0276                                       .rmin = 0.,
0277                                       .rmax = "1.1*EcalEndcapN_rmax"},
0278           eicrecon::CylinderSurfaceConfig{
0279               .id   = "EcalBarrel_ID",
0280               .rmin = "EcalBarrel_rmin",
0281               .zmin = "- 1.1*max(EcalBarrelBackward_zmax,EcalBarrelForward_zmax)",
0282               .zmax = "1.1*max(EcalBarrelBackward_zmax,EcalBarrelForward_zmax)"},
0283           eicrecon::CylinderSurfaceConfig{
0284               .id   = "EcalBarrel_ID",
0285               .rmin = "EcalBarrel_rmin + 50*mm",
0286               .zmin = "- 1.1*max(EcalBarrelBackward_zmax,EcalBarrelForward_zmax)",
0287               .zmax = "1.1*max(EcalBarrelBackward_zmax,EcalBarrelForward_zmax)"},
0288           eicrecon::DiscSurfaceConfig{.id   = "EcalEndcapP_ID",
0289                                       .zmin = "EcalEndcapP_zmin",
0290                                       .rmin = 0.,
0291                                       .rmax = "1.1*EcalEndcapP_rmax"},
0292           eicrecon::DiscSurfaceConfig{.id   = "EcalEndcapP_ID",
0293                                       .zmin = "EcalEndcapP_zmin + 50*mm",
0294                                       .rmin = 0.,
0295                                       .rmax = "1.1*EcalEndcapP_rmax"},
0296           // Hcal
0297           eicrecon::DiscSurfaceConfig{.id   = "HcalEndcapN_ID",
0298                                       .zmin = "- HcalEndcapN_zmin",
0299                                       .rmin = 0.,
0300                                       .rmax = "1.1*HcalEndcapN_rmax"},
0301           eicrecon::DiscSurfaceConfig{.id   = "HcalEndcapN_ID",
0302                                       .zmin = "- HcalEndcapN_zmin - 150*mm",
0303                                       .rmin = 0.,
0304                                       .rmax = "1.1*HcalEndcapN_rmax"},
0305           eicrecon::CylinderSurfaceConfig{
0306               .id   = "HcalBarrel_ID",
0307               .rmin = "HcalBarrel_rmin",
0308               .zmin = "- 1.1*max(HcalBarrelBackward_zmax,HcalBarrelForward_zmax)",
0309               .zmax = "1.1*max(HcalBarrelBackward_zmax,HcalBarrelForward_zmax)"},
0310           eicrecon::CylinderSurfaceConfig{
0311               .id   = "HcalBarrel_ID",
0312               .rmin = "HcalBarrel_rmin + 150*mm",
0313               .zmin = "- 1.1*max(HcalBarrelBackward_zmax,HcalBarrelForward_zmax)",
0314               .zmax = "1.1*max(HcalBarrelBackward_zmax,HcalBarrelForward_zmax)"},
0315           eicrecon::DiscSurfaceConfig{
0316               .id = "LFHCAL_ID", .zmin = "LFHCAL_zmin", .rmin = 0., .rmax = "1.1*LFHCAL_rmax"},
0317           eicrecon::DiscSurfaceConfig{.id   = "LFHCAL_ID",
0318                                       .zmin = "LFHCAL_zmin + 150*mm",
0319                                       .rmin = 0.,
0320                                       .rmax = "1.1*LFHCAL_rmax"},
0321       }},
0322       app));
0323 
0324   // B0 TRACKER
0325 
0326   app->Add(new JOmniFactoryGeneratorT<TrackerMeasurementFromHits_factory>(
0327       "B0TrackerMeasurements", {"B0TrackerRecHits"}, {"B0TrackerMeasurements"}, app));
0328 
0329   app->Add(new JOmniFactoryGeneratorT<CKFTracking_factory>(
0330       "B0TrackerCKFTruthSeededTrajectories", {"B0TrackerTruthSeeds", "B0TrackerMeasurements"},
0331       {
0332           "B0TrackerCKFTruthSeededActsTrackStatesUnfiltered",
0333           "B0TrackerCKFTruthSeededActsTracksUnfiltered",
0334       },
0335       {
0336           .numMeasurementsMin = 3,
0337       },
0338       app));
0339 
0340   app->Add(new JOmniFactoryGeneratorT<ActsToTracks_factory>(
0341       "B0TrackerCKFTruthSeededTracksUnfiltered",
0342       {
0343           "B0TrackerMeasurements",
0344           "B0TrackerTruthSeeds",
0345           "B0TrackerCKFTruthSeededActsTrackStatesUnfiltered",
0346           "B0TrackerCKFTruthSeededActsTracksUnfiltered",
0347           "B0TrackerRawHitAssociations",
0348       },
0349       {
0350           "B0TrackerCKFTruthSeededTrajectoriesUnfiltered",
0351           "B0TrackerCKFTruthSeededTrackParametersUnfiltered",
0352           "B0TrackerCKFTruthSeededTracksUnfiltered",
0353 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0354           "B0TrackerCKFTruthSeededTrackUnfilteredLinks",
0355 #endif
0356           "B0TrackerCKFTruthSeededTrackUnfilteredAssociations",
0357       },
0358       app));
0359 
0360   app->Add(new JOmniFactoryGeneratorT<AmbiguitySolver_factory>(
0361       "B0TrackerTruthSeededAmbiguityResolutionSolver",
0362       {"B0TrackerCKFTruthSeededActsTrackStatesUnfiltered",
0363        "B0TrackerCKFTruthSeededActsTracksUnfiltered"},
0364       {
0365           "B0TrackerCKFTruthSeededActsTrackStates",
0366           "B0TrackerCKFTruthSeededActsTracks",
0367       },
0368       {
0369           .n_measurements_min = 3,
0370       },
0371       app));
0372 
0373   app->Add(new JOmniFactoryGeneratorT<ActsToTracks_factory>(
0374       "B0TrackerCKFTruthSeededTracks",
0375       {
0376           "B0TrackerMeasurements",
0377           "B0TrackerTruthSeeds",
0378           "B0TrackerCKFTruthSeededActsTrackStates",
0379           "B0TrackerCKFTruthSeededActsTracks",
0380           "B0TrackerRawHitAssociations",
0381       },
0382       {
0383           "B0TrackerCKFTruthSeededTrajectories",
0384           "B0TrackerCKFTruthSeededTrackParameters",
0385           "B0TrackerCKFTruthSeededTracks",
0386 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0387           "B0TrackerCKFTruthSeededTrackLinks",
0388 #endif
0389           "B0TrackerCKFTruthSeededTrackAssociations",
0390       },
0391       app));
0392 
0393   app->Add(new JOmniFactoryGeneratorT<TrackSeeding_factory>(
0394       "B0TrackerSeeds", {"B0TrackerRecHits"}, {"B0TrackerSeeds", "B0TrackerSeedParameters"}, {},
0395       app));
0396 
0397   app->Add(new JOmniFactoryGeneratorT<CKFTracking_factory>(
0398       "B0TrackerCKFTrajectories", {"B0TrackerSeeds", "B0TrackerMeasurements"},
0399       {
0400           "B0TrackerCKFActsTrackStatesUnfiltered",
0401           "B0TrackerCKFActsTracksUnfiltered",
0402       },
0403       app));
0404 
0405   app->Add(new JOmniFactoryGeneratorT<ActsToTracks_factory>(
0406       "B0TrackerCKFTracksUnfiltered",
0407       {
0408           "B0TrackerMeasurements",
0409           "B0TrackerSeeds",
0410           "B0TrackerCKFActsTrackStatesUnfiltered",
0411           "B0TrackerCKFActsTracksUnfiltered",
0412           "B0TrackerRawHitAssociations",
0413       },
0414       {
0415           "B0TrackerCKFTrajectoriesUnfiltered",
0416           "B0TrackerCKFTrackParametersUnfiltered",
0417           "B0TrackerCKFTracksUnfiltered",
0418 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0419           "B0TrackerCKFTrackUnfilteredLinks",
0420 #endif
0421           "B0TrackerCKFTrackUnfilteredAssociations",
0422       },
0423       app));
0424 
0425   app->Add(new JOmniFactoryGeneratorT<AmbiguitySolver_factory>(
0426       "B0TrackerAmbiguityResolutionSolver",
0427       {"B0TrackerCKFActsTrackStatesUnfiltered", "B0TrackerCKFActsTracksUnfiltered"},
0428       {
0429           "B0TrackerCKFActsTrackStates",
0430           "B0TrackerCKFActsTracks",
0431       },
0432       app));
0433 
0434   app->Add(new JOmniFactoryGeneratorT<ActsToTracks_factory>("B0TrackerCKFTracks",
0435                                                             {
0436                                                                 "B0TrackerMeasurements",
0437                                                                 "B0TrackerSeeds",
0438                                                                 "B0TrackerCKFActsTrackStates",
0439                                                                 "B0TrackerCKFActsTracks",
0440                                                                 "B0TrackerRawHitAssociations",
0441                                                             },
0442                                                             {
0443                                                                 "B0TrackerCKFTrajectories",
0444                                                                 "B0TrackerCKFTrackParameters",
0445                                                                 "B0TrackerCKFTracks",
0446 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0447                                                                 "B0TrackerCKFTrackLinks",
0448 #endif
0449                                                                 "B0TrackerCKFTrackAssociations",
0450                                                             },
0451                                                             app));
0452 
0453   // COMBINED TRACKING
0454 
0455   // Use both central and B0 tracks for vertexing
0456   app->Add(new JOmniFactoryGeneratorT<ActsTrackMerger_factory>(
0457       "CentralAndB0TrackerCKFActsTracks",
0458       {
0459           "CentralCKFActsTrackStates",
0460           "CentralCKFActsTracks",
0461           "B0TrackerCKFActsTrackStates",
0462           "B0TrackerCKFActsTracks",
0463       },
0464       {
0465           "CentralAndB0TrackerCKFActsTrackStates",
0466           "CentralAndB0TrackerCKFActsTracks",
0467       },
0468       app));
0469 
0470   app->Add(new JOmniFactoryGeneratorT<IterativeVertexFinder_factory>(
0471       "CentralAndB0TrackVertices",
0472       {
0473           "CentralAndB0TrackerCKFActsTrackStates",
0474           "CentralAndB0TrackerCKFActsTracks",
0475           "ReconstructedChargedParticles",
0476       },
0477       {
0478           "CentralAndB0TrackVertices",
0479       },
0480       {}, app));
0481 
0482   // Add central and B0 tracks
0483   app->Add(new JOmniFactoryGeneratorT<CollectionCollector_factory<edm4eic::Track, true>>(
0484       "CombinedTracks", {"CentralCKFTracks", "B0TrackerCKFTracks"}, {"CombinedTracks"}, app));
0485 
0486   app->Add(new JOmniFactoryGeneratorT<SecondaryVertexFinder_factory>(
0487       "PrimaryVerticesAMVF",
0488       {"ReconstructedParticles", "CentralCKFActsTrackStates", "CentralCKFActsTracks"},
0489       {
0490           "PrimaryVerticesAMVF",
0491       },
0492       {
0493           .isPrimary = true,
0494       },
0495       app));
0496 
0497   app->Add(new JOmniFactoryGeneratorT<SecondaryVertexFinder_factory>(
0498       "SecondaryVerticesAMVF",
0499       {"ReconstructedParticles", "CentralCKFActsTrackStates", "CentralCKFActsTracks"},
0500       {
0501           "SecondaryVerticesAMVF",
0502       },
0503       {
0504           .isPrimary          = false,
0505           .maxIterations      = 1000,
0506           .tracksMaxZinterval = 10. * Acts::UnitConstants::mm,
0507           .useSeedConstraint  = true,
0508       },
0509       app));
0510 
0511   app->Add(new JOmniFactoryGeneratorT<
0512            CollectionCollector_factory<edm4eic::MCRecoTrackParticleAssociation, true>>(
0513       "CombinedTrackAssociations", {"CentralCKFTrackAssociations", "B0TrackerCKFTrackAssociations"},
0514       {"CombinedTrackAssociations"}, app));
0515 
0516   app->Add(new JOmniFactoryGeneratorT<CollectionCollector_factory<edm4eic::Track, true>>(
0517       "CombinedTruthSeededTracks", {"CentralCKFTruthSeededTracks", "B0TrackerCKFTruthSeededTracks"},
0518       {"CombinedTruthSeededTracks"}, app));
0519 
0520   app->Add(new JOmniFactoryGeneratorT<
0521            CollectionCollector_factory<edm4eic::MCRecoTrackParticleAssociation, true>>(
0522       "CombinedTruthSeededTrackAssociations",
0523       {"CentralCKFTruthSeededTrackAssociations", "B0TrackerCKFTruthSeededTrackAssociations"},
0524       {"CombinedTruthSeededTrackAssociations"}, app));
0525 
0526   app->Add(new JOmniFactoryGeneratorT<TracksToParticles_factory>(
0527       "ChargedTruthSeededParticlesWithAssociations",
0528       {
0529           "CombinedTruthSeededTracks",
0530           "CombinedTruthSeededTrackAssociations",
0531       },
0532       {"ReconstructedTruthSeededChargedWithoutPIDParticles",
0533 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0534        "ReconstructedTruthSeededChargedWithoutPIDParticleLinks",
0535 #endif
0536        "ReconstructedTruthSeededChargedWithoutPIDParticleAssociations"},
0537       {}, app));
0538 
0539   app->Add(new JOmniFactoryGeneratorT<TracksToParticles_factory>(
0540       "ChargedParticlesWithAssociations",
0541       {
0542           "CombinedTracks",
0543           "CombinedTrackAssociations",
0544       },
0545       {"ReconstructedChargedWithoutPIDParticles",
0546 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0547        "ReconstructedChargedWithoutPIDParticleLinks",
0548 #endif
0549        "ReconstructedChargedWithoutPIDParticleAssociations"},
0550       {}, app));
0551 }
0552 } // extern "C"