Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-28 08:28:21

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