Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-18 08:17:56

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 <Evaluator/DD4hepUnits.h>
0005 #include <JANA/JApplication.h>
0006 #include <JANA/JApplicationFwd.h>
0007 #include <JANA/Utils/JTypeInfo.h>
0008 #include <edm4eic/MCRecoTrackParticleAssociationCollection.h>
0009 #include <edm4eic/MCRecoTrackerHitAssociationCollection.h>
0010 #include <edm4eic/TrackCollection.h>
0011 #include <edm4eic/TrackParameters.h>
0012 #include <edm4eic/TrackerHitCollection.h>
0013 #include <fmt/core.h>
0014 #include <cmath>
0015 #include <functional>
0016 #include <map>
0017 #include <memory>
0018 #include <string>
0019 #include <utility>
0020 #include <variant>
0021 #include <vector>
0022 
0023 #include "algorithms/meta/SubDivideFunctors.h"
0024 #include "algorithms/tracking/TrackPropagationConfig.h"
0025 #include "extensions/jana/JOmniFactoryGeneratorT.h"
0026 #include "factories/meta/CollectionCollector_factory.h"
0027 #include "factories/meta/SubDivideCollection_factory.h"
0028 #include "factories/tracking/ActsToTracks_factory.h"
0029 #include "factories/tracking/ActsTrajectoriesMerger_factory.h"
0030 #include "factories/tracking/AmbiguitySolver_factory.h"
0031 #include "factories/tracking/CKFTracking_factory.h"
0032 #include "factories/tracking/IterativeVertexFinder_factory.h"
0033 #include "factories/tracking/TrackParamTruthInit_factory.h"
0034 #include "factories/tracking/TrackProjector_factory.h"
0035 #include "factories/tracking/TrackPropagation_factory.h"
0036 #include "factories/tracking/TrackSeeding_factory.h"
0037 #include "factories/tracking/TrackerMeasurementFromHits_factory.h"
0038 #include "factories/tracking/TracksToParticles_factory.h"
0039 
0040 //
0041 extern "C" {
0042 void InitPlugin(JApplication* app) {
0043   InitJANAPlugin(app);
0044 
0045   using namespace eicrecon;
0046 
0047   app->Add(new JOmniFactoryGeneratorT<TrackParamTruthInit_factory>(
0048       "TrackTruthSeeds", {"EventHeader", "MCParticles"}, {"TrackTruthSeeds"}, {}, app));
0049 
0050   std::vector<std::pair<double, double>> thetaRanges{{0, 50 * dd4hep::mrad},
0051                                                      {50 * dd4hep::mrad, 180 * dd4hep::deg}};
0052   app->Add(new JOmniFactoryGeneratorT<SubDivideCollection_factory<edm4eic::TrackParameters>>(
0053       "CentralB0TrackTruthSeeds", {"TrackTruthSeeds"},
0054       {"B0TrackerTruthSeeds", "CentralTrackerTruthSeeds"},
0055       {
0056           .function = RangeSplit<&edm4eic::TrackParameters::getTheta>(thetaRanges),
0057       },
0058       app));
0059 
0060   // CENTRAL TRACKER
0061 
0062   // Tracker hits collector
0063   app->Add(new JOmniFactoryGeneratorT<CollectionCollector_factory<edm4eic::TrackerHit, true>>(
0064       "CentralTrackingRecHits",
0065       {"SiBarrelTrackerRecHits", "SiBarrelVertexRecHits", "SiEndcapTrackerRecHits",
0066        "TOFBarrelRecHits", "TOFEndcapRecHits", "MPGDBarrelRecHits", "OuterMPGDBarrelRecHits",
0067        "BackwardMPGDEndcapRecHits", "ForwardMPGDEndcapRecHits"},
0068       {"CentralTrackingRecHits"}, // Output collection name
0069       app));
0070 
0071   // Tracker hit associations collector
0072   app->Add(new JOmniFactoryGeneratorT<
0073            CollectionCollector_factory<edm4eic::MCRecoTrackerHitAssociation, true>>(
0074       "CentralTrackingRawHitAssociations",
0075       {"SiBarrelRawHitAssociations", "SiBarrelVertexRawHitAssociations",
0076        "SiEndcapTrackerRawHitAssociations", "TOFBarrelRawHitAssociations",
0077        "TOFEndcapRawHitAssociations", "MPGDBarrelRawHitAssociations",
0078        "OuterMPGDBarrelRawHitAssociations", "BackwardMPGDEndcapRawHitAssociations",
0079        "ForwardMPGDEndcapRawHitAssociations"},
0080       {"CentralTrackingRawHitAssociations"}, // Output collection name
0081       app));
0082 
0083   app->Add(new JOmniFactoryGeneratorT<TrackerMeasurementFromHits_factory>(
0084       "CentralTrackerMeasurements", {"CentralTrackingRecHits"}, {"CentralTrackerMeasurements"},
0085       app));
0086 
0087   app->Add(new JOmniFactoryGeneratorT<CKFTracking_factory>(
0088       "CentralCKFTruthSeededTrajectories",
0089       {"CentralTrackerTruthSeeds", "CentralTrackerMeasurements"},
0090       {
0091           "CentralCKFTruthSeededActsTrajectoriesUnfiltered",
0092           "CentralCKFTruthSeededActsTracksUnfiltered",
0093       },
0094       app));
0095 
0096   app->Add(new JOmniFactoryGeneratorT<ActsToTracks_factory>(
0097       "CentralCKFTruthSeededTracksUnfiltered",
0098       {
0099           "CentralTrackerMeasurements",
0100           "CentralCKFTruthSeededActsTrajectoriesUnfiltered",
0101           "CentralTrackingRawHitAssociations",
0102       },
0103       {
0104           "CentralCKFTruthSeededTrajectoriesUnfiltered",
0105           "CentralCKFTruthSeededTrackParametersUnfiltered",
0106           "CentralCKFTruthSeededTracksUnfiltered",
0107           "CentralCKFTruthSeededTrackUnfilteredAssociations",
0108       },
0109       app));
0110 
0111   app->Add(new JOmniFactoryGeneratorT<AmbiguitySolver_factory>(
0112       "TruthSeededAmbiguityResolutionSolver",
0113       {"CentralCKFTruthSeededActsTracksUnfiltered", "CentralTrackerMeasurements"},
0114       {
0115           "CentralCKFTruthSeededActsTracks",
0116           "CentralCKFTruthSeededActsTrajectories",
0117       },
0118       app));
0119 
0120   app->Add(
0121       new JOmniFactoryGeneratorT<ActsToTracks_factory>("CentralCKFTruthSeededTracks",
0122                                                        {
0123                                                            "CentralTrackerMeasurements",
0124                                                            "CentralCKFTruthSeededActsTrajectories",
0125                                                            "CentralTrackingRawHitAssociations",
0126                                                        },
0127                                                        {
0128                                                            "CentralCKFTruthSeededTrajectories",
0129                                                            "CentralCKFTruthSeededTrackParameters",
0130                                                            "CentralCKFTruthSeededTracks",
0131                                                            "CentralCKFTruthSeededTrackAssociations",
0132                                                        },
0133                                                        app));
0134 
0135   app->Add(new JOmniFactoryGeneratorT<TrackSeeding_factory>(
0136       "CentralTrackSeedingResults", {"CentralTrackingRecHits"}, {"CentralTrackSeedingResults"}, {},
0137       app));
0138 
0139   app->Add(new JOmniFactoryGeneratorT<CKFTracking_factory>(
0140       "CentralCKFTrajectories", {"CentralTrackSeedingResults", "CentralTrackerMeasurements"},
0141       {
0142           "CentralCKFActsTrajectoriesUnfiltered",
0143           "CentralCKFActsTracksUnfiltered",
0144       },
0145       app));
0146 
0147   app->Add(
0148       new JOmniFactoryGeneratorT<ActsToTracks_factory>("CentralCKFTracksUnfiltered",
0149                                                        {
0150                                                            "CentralTrackerMeasurements",
0151                                                            "CentralCKFActsTrajectoriesUnfiltered",
0152                                                            "CentralTrackingRawHitAssociations",
0153                                                        },
0154                                                        {
0155                                                            "CentralCKFTrajectoriesUnfiltered",
0156                                                            "CentralCKFTrackParametersUnfiltered",
0157                                                            "CentralCKFTracksUnfiltered",
0158                                                            "CentralCKFTrackUnfilteredAssociations",
0159                                                        },
0160                                                        app));
0161 
0162   app->Add(new JOmniFactoryGeneratorT<AmbiguitySolver_factory>(
0163       "AmbiguityResolutionSolver", {"CentralCKFActsTracksUnfiltered", "CentralTrackerMeasurements"},
0164       {
0165           "CentralCKFActsTracks",
0166           "CentralCKFActsTrajectories",
0167       },
0168       app));
0169 
0170   app->Add(new JOmniFactoryGeneratorT<ActsToTracks_factory>("CentralCKFTracks",
0171                                                             {
0172                                                                 "CentralTrackerMeasurements",
0173                                                                 "CentralCKFActsTrajectories",
0174                                                                 "CentralTrackingRawHitAssociations",
0175                                                             },
0176                                                             {
0177                                                                 "CentralCKFTrajectories",
0178                                                                 "CentralCKFTrackParameters",
0179                                                                 "CentralCKFTracks",
0180                                                                 "CentralCKFTrackAssociations",
0181                                                             },
0182                                                             app));
0183 
0184   app->Add(new JOmniFactoryGeneratorT<TrackProjector_factory>("CentralTrackSegments",
0185                                                               {
0186                                                                   "CentralCKFActsTrajectories",
0187                                                                   "CentralCKFTracks",
0188                                                               },
0189                                                               {
0190                                                                   "CentralTrackSegments",
0191                                                               },
0192                                                               app));
0193 
0194   app->Add(
0195       new JOmniFactoryGeneratorT<IterativeVertexFinder_factory>("CentralTrackVertices",
0196                                                                 {
0197                                                                     "CentralCKFActsTrajectories",
0198                                                                     "ReconstructedChargedParticles",
0199                                                                 },
0200                                                                 {
0201                                                                     "CentralTrackVertices",
0202                                                                 },
0203                                                                 {}, app));
0204 
0205   app->Add(new JOmniFactoryGeneratorT<TrackPropagation_factory>(
0206       "CalorimeterTrackPropagator",
0207       {"CentralCKFTracks", "CentralCKFActsTrajectories", "CentralCKFActsTracks"},
0208       {"CalorimeterTrackProjections"},
0209       {.target_surfaces{
0210           // Ecal
0211           eicrecon::DiscSurfaceConfig{"EcalEndcapN_ID", "- EcalEndcapN_zmin", 0.,
0212                                       "1.1*EcalEndcapN_rmax"},
0213           eicrecon::DiscSurfaceConfig{"EcalEndcapN_ID", "- EcalEndcapN_zmin - 50*mm", 0.,
0214                                       "1.1*EcalEndcapN_rmax"},
0215           eicrecon::CylinderSurfaceConfig{
0216               "EcalBarrel_ID", "EcalBarrel_rmin",
0217               "- 1.1*max(EcalBarrelBackward_zmax,EcalBarrelForward_zmax)",
0218               "1.1*max(EcalBarrelBackward_zmax,EcalBarrelForward_zmax)"},
0219           eicrecon::CylinderSurfaceConfig{
0220               "EcalBarrel_ID", "EcalBarrel_rmin + 50*mm",
0221               "- 1.1*max(EcalBarrelBackward_zmax,EcalBarrelForward_zmax)",
0222               "1.1*max(EcalBarrelBackward_zmax,EcalBarrelForward_zmax)"},
0223           eicrecon::DiscSurfaceConfig{"EcalEndcapP_ID", "EcalEndcapP_zmin", 0.,
0224                                       "1.1*EcalEndcapP_rmax"},
0225           eicrecon::DiscSurfaceConfig{"EcalEndcapP_ID", "EcalEndcapP_zmin + 50*mm", 0.,
0226                                       "1.1*EcalEndcapP_rmax"},
0227           // Hcal
0228           eicrecon::DiscSurfaceConfig{"HcalEndcapN_ID", "- HcalEndcapN_zmin", 0.,
0229                                       "1.1*HcalEndcapN_rmax"},
0230           eicrecon::DiscSurfaceConfig{"HcalEndcapN_ID", "- HcalEndcapN_zmin - 150*mm", 0.,
0231                                       "1.1*HcalEndcapN_rmax"},
0232           eicrecon::CylinderSurfaceConfig{
0233               "HcalBarrel_ID", "HcalBarrel_rmin",
0234               "- 1.1*max(HcalBarrelBackward_zmax,HcalBarrelForward_zmax)",
0235               "1.1*max(HcalBarrelBackward_zmax,HcalBarrelForward_zmax)"},
0236           eicrecon::CylinderSurfaceConfig{
0237               .id   = "HcalBarrel_ID",
0238               .rmin = "HcalBarrel_rmin + 150*mm",
0239               .zmin = "- 1.1*max(HcalBarrelBackward_zmax,HcalBarrelForward_zmax)",
0240               .zmax = "1.1*max(HcalBarrelBackward_zmax,HcalBarrelForward_zmax)"},
0241           eicrecon::DiscSurfaceConfig{
0242               .id = "LFHCAL_ID", .zmin = "LFHCAL_zmin", .rmin = 0., .rmax = "1.1*LFHCAL_rmax"},
0243           eicrecon::DiscSurfaceConfig{.id   = "LFHCAL_ID",
0244                                       .zmin = "LFHCAL_zmin + 150*mm",
0245                                       .rmin = 0.,
0246                                       .rmax = "1.1*LFHCAL_rmax"},
0247       }},
0248       app));
0249 
0250   // B0 TRACKER
0251 
0252   app->Add(new JOmniFactoryGeneratorT<TrackerMeasurementFromHits_factory>(
0253       "B0TrackerMeasurements", {"B0TrackerRecHits"}, {"B0TrackerMeasurements"}, app));
0254 
0255   app->Add(new JOmniFactoryGeneratorT<CKFTracking_factory>(
0256       "B0TrackerCKFTruthSeededTrajectories", {"B0TrackerTruthSeeds", "B0TrackerMeasurements"},
0257       {
0258           "B0TrackerCKFTruthSeededActsTrajectoriesUnfiltered",
0259           "B0TrackerCKFTruthSeededActsTracksUnfiltered",
0260       },
0261       app));
0262 
0263   app->Add(new JOmniFactoryGeneratorT<ActsToTracks_factory>(
0264       "B0TrackerCKFTruthSeededTracksUnfiltered",
0265       {
0266           "B0TrackerMeasurements",
0267           "B0TrackerCKFTruthSeededActsTrajectoriesUnfiltered",
0268           "B0TrackerRawHitAssociations",
0269       },
0270       {
0271           "B0TrackerCKFTruthSeededTrajectoriesUnfiltered",
0272           "B0TrackerCKFTruthSeededTrackParametersUnfiltered",
0273           "B0TrackerCKFTruthSeededTracksUnfiltered",
0274           "B0TrackerCKFTruthSeededTrackUnfilteredAssociations",
0275       },
0276       app));
0277 
0278   app->Add(new JOmniFactoryGeneratorT<AmbiguitySolver_factory>(
0279       "B0TrackerTruthSeededAmbiguityResolutionSolver",
0280       {"B0TrackerCKFTruthSeededActsTracksUnfiltered", "B0TrackerMeasurements"},
0281       {
0282           "B0TrackerCKFTruthSeededActsTracks",
0283           "B0TrackerCKFTruthSeededActsTrajectories",
0284       },
0285       app));
0286 
0287   app->Add(new JOmniFactoryGeneratorT<ActsToTracks_factory>(
0288       "B0TrackerCKFTruthSeededTracks",
0289       {
0290           "B0TrackerMeasurements",
0291           "B0TrackerCKFTruthSeededActsTrajectories",
0292           "B0TrackerRawHitAssociations",
0293       },
0294       {
0295           "B0TrackerCKFTruthSeededTrajectories",
0296           "B0TrackerCKFTruthSeededTrackParameters",
0297           "B0TrackerCKFTruthSeededTracks",
0298           "B0TrackerCKFTruthSeededTrackAssociations",
0299       },
0300       app));
0301 
0302   app->Add(new JOmniFactoryGeneratorT<TrackSeeding_factory>(
0303       "B0TrackerTrackSeedingResults", {"B0TrackerRecHits"}, {"B0TrackerSeedingResults"}, {}, app));
0304 
0305   app->Add(new JOmniFactoryGeneratorT<CKFTracking_factory>(
0306       "B0TrackerCKFTrajectories", {"B0TrackerSeedingResults", "B0TrackerMeasurements"},
0307       {
0308           "B0TrackerCKFActsTrajectoriesUnfiltered",
0309           "B0TrackerCKFActsTracksUnfiltered",
0310       },
0311       app));
0312 
0313   app->Add(new JOmniFactoryGeneratorT<ActsToTracks_factory>(
0314       "B0TrackerCKFTracksUnfiltered",
0315       {
0316           "B0TrackerMeasurements",
0317           "B0TrackerCKFActsTrajectoriesUnfiltered",
0318           "B0TrackerRawHitAssociations",
0319       },
0320       {
0321           "B0TrackerCKFTrajectoriesUnfiltered",
0322           "B0TrackerCKFTrackParametersUnfiltered",
0323           "B0TrackerCKFTracksUnfiltered",
0324           "B0TrackerCKFTrackUnfilteredAssociations",
0325       },
0326       app));
0327 
0328   app->Add(new JOmniFactoryGeneratorT<AmbiguitySolver_factory>(
0329       "B0TrackerAmbiguityResolutionSolver",
0330       {"B0TrackerCKFActsTracksUnfiltered", "B0TrackerMeasurements"},
0331       {
0332           "B0TrackerCKFActsTracks",
0333           "B0TrackerCKFActsTrajectories",
0334       },
0335       app));
0336 
0337   app->Add(new JOmniFactoryGeneratorT<ActsToTracks_factory>("B0TrackerCKFTracks",
0338                                                             {
0339                                                                 "B0TrackerMeasurements",
0340                                                                 "B0TrackerCKFActsTrajectories",
0341                                                                 "B0TrackerRawHitAssociations",
0342                                                             },
0343                                                             {
0344                                                                 "B0TrackerCKFTrajectories",
0345                                                                 "B0TrackerCKFTrackParameters",
0346                                                                 "B0TrackerCKFTracks",
0347                                                                 "B0TrackerCKFTrackAssociations",
0348                                                             },
0349                                                             app));
0350 
0351   // COMBINED TRACKING
0352 
0353   // Use both central and B0 tracks for vertexing
0354   app->Add(new JOmniFactoryGeneratorT<ActsTrajectoriesMerger_factory>(
0355       "CentralB0CKFActsTrajectories",
0356       {
0357           "CentralCKFActsTrajectories",
0358           "B0TrackerCKFActsTrajectories",
0359       },
0360       {
0361           "CentralAndB0TrackerCKFActsTrajectories",
0362       },
0363       app));
0364 
0365   app->Add(new JOmniFactoryGeneratorT<IterativeVertexFinder_factory>(
0366       "CentralAndB0TrackVertices",
0367       {
0368           "CentralAndB0TrackerCKFActsTrajectories",
0369           "ReconstructedChargedParticles",
0370       },
0371       {
0372           "CentralAndB0TrackVertices",
0373       },
0374       {}, app));
0375 
0376   // Add Low-Q2, central and B0 tracks
0377   app->Add(new JOmniFactoryGeneratorT<CollectionCollector_factory<edm4eic::Track, true>>(
0378       "CombinedTracks", {"CentralCKFTracks", "B0TrackerCKFTracks", "TaggerTrackerTracks"},
0379       {"CombinedTracks"}, app));
0380 
0381   app->Add(new JOmniFactoryGeneratorT<
0382            CollectionCollector_factory<edm4eic::MCRecoTrackParticleAssociation, true>>(
0383       "CombinedTrackAssociations",
0384       {"CentralCKFTrackAssociations", "B0TrackerCKFTrackAssociations",
0385        "TaggerTrackerTrackAssociations"},
0386       {"CombinedTrackAssociations"}, app));
0387 
0388   app->Add(new JOmniFactoryGeneratorT<CollectionCollector_factory<edm4eic::Track, true>>(
0389       "CombinedTruthSeededTracks",
0390       {"CentralCKFTruthSeededTracks", "B0TrackerCKFTruthSeededTracks", "TaggerTrackerTracks"},
0391       {"CombinedTruthSeededTracks"}, app));
0392 
0393   app->Add(new JOmniFactoryGeneratorT<
0394            CollectionCollector_factory<edm4eic::MCRecoTrackParticleAssociation, true>>(
0395       "CombinedTruthSeededTrackAssociations",
0396       {"CentralCKFTruthSeededTrackAssociations", "B0TrackerCKFTruthSeededTrackAssociations",
0397        "TaggerTrackerTrackAssociations"},
0398       {"CombinedTruthSeededTrackAssociations"}, app));
0399 
0400   app->Add(new JOmniFactoryGeneratorT<TracksToParticles_factory>(
0401       "ChargedTruthSeededParticlesWithAssociations",
0402       {
0403           "CombinedTruthSeededTracks",
0404           "CombinedTruthSeededTrackAssociations",
0405       },
0406       {"ReconstructedTruthSeededChargedWithoutPIDParticles",
0407        "ReconstructedTruthSeededChargedWithoutPIDParticleAssociations"},
0408       {}, app));
0409 
0410   app->Add(new JOmniFactoryGeneratorT<TracksToParticles_factory>(
0411       "ChargedParticlesWithAssociations",
0412       {
0413           "CombinedTracks",
0414           "CombinedTrackAssociations",
0415       },
0416       {"ReconstructedChargedWithoutPIDParticles",
0417        "ReconstructedChargedWithoutPIDParticleAssociations"},
0418       {}, app));
0419 }
0420 } // extern "C"