File indexing completed on 2025-07-02 07:54:38
0001
0002
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
0056
0057
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"},
0064 app));
0065
0066
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"},
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
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
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
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
0342
0343
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
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 }