Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-07-02 07:54:38

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