File indexing completed on 2025-11-01 07:57:35
0001
0002
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
0061
0062
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"},
0069 app));
0070
0071
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"},
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
0211 eicrecon::DiscSurfaceConfig{.id = "EcalEndcapN_ID",
0212 .zmin = "- EcalEndcapN_zmin",
0213 .rmin = 0.,
0214 .rmax = "1.1*EcalEndcapN_rmax"},
0215 eicrecon::DiscSurfaceConfig{.id = "EcalEndcapN_ID",
0216 .zmin = "- EcalEndcapN_zmin - 50*mm",
0217 .rmin = 0.,
0218 .rmax = "1.1*EcalEndcapN_rmax"},
0219 eicrecon::CylinderSurfaceConfig{
0220 .id = "EcalBarrel_ID",
0221 .rmin = "EcalBarrel_rmin",
0222 .zmin = "- 1.1*max(EcalBarrelBackward_zmax,EcalBarrelForward_zmax)",
0223 .zmax = "1.1*max(EcalBarrelBackward_zmax,EcalBarrelForward_zmax)"},
0224 eicrecon::CylinderSurfaceConfig{
0225 .id = "EcalBarrel_ID",
0226 .rmin = "EcalBarrel_rmin + 50*mm",
0227 .zmin = "- 1.1*max(EcalBarrelBackward_zmax,EcalBarrelForward_zmax)",
0228 .zmax = "1.1*max(EcalBarrelBackward_zmax,EcalBarrelForward_zmax)"},
0229 eicrecon::DiscSurfaceConfig{.id = "EcalEndcapP_ID",
0230 .zmin = "EcalEndcapP_zmin",
0231 .rmin = 0.,
0232 .rmax = "1.1*EcalEndcapP_rmax"},
0233 eicrecon::DiscSurfaceConfig{.id = "EcalEndcapP_ID",
0234 .zmin = "EcalEndcapP_zmin + 50*mm",
0235 .rmin = 0.,
0236 .rmax = "1.1*EcalEndcapP_rmax"},
0237
0238 eicrecon::DiscSurfaceConfig{.id = "HcalEndcapN_ID",
0239 .zmin = "- HcalEndcapN_zmin",
0240 .rmin = 0.,
0241 .rmax = "1.1*HcalEndcapN_rmax"},
0242 eicrecon::DiscSurfaceConfig{.id = "HcalEndcapN_ID",
0243 .zmin = "- HcalEndcapN_zmin - 150*mm",
0244 .rmin = 0.,
0245 .rmax = "1.1*HcalEndcapN_rmax"},
0246 eicrecon::CylinderSurfaceConfig{
0247 .id = "HcalBarrel_ID",
0248 .rmin = "HcalBarrel_rmin",
0249 .zmin = "- 1.1*max(HcalBarrelBackward_zmax,HcalBarrelForward_zmax)",
0250 .zmax = "1.1*max(HcalBarrelBackward_zmax,HcalBarrelForward_zmax)"},
0251 eicrecon::CylinderSurfaceConfig{
0252 .id = "HcalBarrel_ID",
0253 .rmin = "HcalBarrel_rmin + 150*mm",
0254 .zmin = "- 1.1*max(HcalBarrelBackward_zmax,HcalBarrelForward_zmax)",
0255 .zmax = "1.1*max(HcalBarrelBackward_zmax,HcalBarrelForward_zmax)"},
0256 eicrecon::DiscSurfaceConfig{
0257 .id = "LFHCAL_ID", .zmin = "LFHCAL_zmin", .rmin = 0., .rmax = "1.1*LFHCAL_rmax"},
0258 eicrecon::DiscSurfaceConfig{.id = "LFHCAL_ID",
0259 .zmin = "LFHCAL_zmin + 150*mm",
0260 .rmin = 0.,
0261 .rmax = "1.1*LFHCAL_rmax"},
0262 }},
0263 app));
0264
0265
0266
0267 app->Add(new JOmniFactoryGeneratorT<TrackerMeasurementFromHits_factory>(
0268 "B0TrackerMeasurements", {"B0TrackerRecHits"}, {"B0TrackerMeasurements"}, app));
0269
0270 app->Add(new JOmniFactoryGeneratorT<CKFTracking_factory>(
0271 "B0TrackerCKFTruthSeededTrajectories", {"B0TrackerTruthSeeds", "B0TrackerMeasurements"},
0272 {
0273 "B0TrackerCKFTruthSeededActsTrajectoriesUnfiltered",
0274 "B0TrackerCKFTruthSeededActsTracksUnfiltered",
0275 },
0276 app));
0277
0278 app->Add(new JOmniFactoryGeneratorT<ActsToTracks_factory>(
0279 "B0TrackerCKFTruthSeededTracksUnfiltered",
0280 {
0281 "B0TrackerMeasurements",
0282 "B0TrackerCKFTruthSeededActsTrajectoriesUnfiltered",
0283 "B0TrackerRawHitAssociations",
0284 },
0285 {
0286 "B0TrackerCKFTruthSeededTrajectoriesUnfiltered",
0287 "B0TrackerCKFTruthSeededTrackParametersUnfiltered",
0288 "B0TrackerCKFTruthSeededTracksUnfiltered",
0289 "B0TrackerCKFTruthSeededTrackUnfilteredAssociations",
0290 },
0291 app));
0292
0293 app->Add(new JOmniFactoryGeneratorT<AmbiguitySolver_factory>(
0294 "B0TrackerTruthSeededAmbiguityResolutionSolver",
0295 {"B0TrackerCKFTruthSeededActsTracksUnfiltered", "B0TrackerMeasurements"},
0296 {
0297 "B0TrackerCKFTruthSeededActsTracks",
0298 "B0TrackerCKFTruthSeededActsTrajectories",
0299 },
0300 app));
0301
0302 app->Add(new JOmniFactoryGeneratorT<ActsToTracks_factory>(
0303 "B0TrackerCKFTruthSeededTracks",
0304 {
0305 "B0TrackerMeasurements",
0306 "B0TrackerCKFTruthSeededActsTrajectories",
0307 "B0TrackerRawHitAssociations",
0308 },
0309 {
0310 "B0TrackerCKFTruthSeededTrajectories",
0311 "B0TrackerCKFTruthSeededTrackParameters",
0312 "B0TrackerCKFTruthSeededTracks",
0313 "B0TrackerCKFTruthSeededTrackAssociations",
0314 },
0315 app));
0316
0317 app->Add(new JOmniFactoryGeneratorT<TrackSeeding_factory>(
0318 "B0TrackerTrackSeedingResults", {"B0TrackerRecHits"}, {"B0TrackerSeedingResults"}, {}, app));
0319
0320 app->Add(new JOmniFactoryGeneratorT<CKFTracking_factory>(
0321 "B0TrackerCKFTrajectories", {"B0TrackerSeedingResults", "B0TrackerMeasurements"},
0322 {
0323 "B0TrackerCKFActsTrajectoriesUnfiltered",
0324 "B0TrackerCKFActsTracksUnfiltered",
0325 },
0326 app));
0327
0328 app->Add(new JOmniFactoryGeneratorT<ActsToTracks_factory>(
0329 "B0TrackerCKFTracksUnfiltered",
0330 {
0331 "B0TrackerMeasurements",
0332 "B0TrackerCKFActsTrajectoriesUnfiltered",
0333 "B0TrackerRawHitAssociations",
0334 },
0335 {
0336 "B0TrackerCKFTrajectoriesUnfiltered",
0337 "B0TrackerCKFTrackParametersUnfiltered",
0338 "B0TrackerCKFTracksUnfiltered",
0339 "B0TrackerCKFTrackUnfilteredAssociations",
0340 },
0341 app));
0342
0343 app->Add(new JOmniFactoryGeneratorT<AmbiguitySolver_factory>(
0344 "B0TrackerAmbiguityResolutionSolver",
0345 {"B0TrackerCKFActsTracksUnfiltered", "B0TrackerMeasurements"},
0346 {
0347 "B0TrackerCKFActsTracks",
0348 "B0TrackerCKFActsTrajectories",
0349 },
0350 app));
0351
0352 app->Add(new JOmniFactoryGeneratorT<ActsToTracks_factory>("B0TrackerCKFTracks",
0353 {
0354 "B0TrackerMeasurements",
0355 "B0TrackerCKFActsTrajectories",
0356 "B0TrackerRawHitAssociations",
0357 },
0358 {
0359 "B0TrackerCKFTrajectories",
0360 "B0TrackerCKFTrackParameters",
0361 "B0TrackerCKFTracks",
0362 "B0TrackerCKFTrackAssociations",
0363 },
0364 app));
0365
0366
0367
0368
0369 app->Add(new JOmniFactoryGeneratorT<ActsTrajectoriesMerger_factory>(
0370 "CentralB0CKFActsTrajectories",
0371 {
0372 "CentralCKFActsTrajectories",
0373 "B0TrackerCKFActsTrajectories",
0374 },
0375 {
0376 "CentralAndB0TrackerCKFActsTrajectories",
0377 },
0378 app));
0379
0380 app->Add(new JOmniFactoryGeneratorT<IterativeVertexFinder_factory>(
0381 "CentralAndB0TrackVertices",
0382 {
0383 "CentralAndB0TrackerCKFActsTrajectories",
0384 "ReconstructedChargedParticles",
0385 },
0386 {
0387 "CentralAndB0TrackVertices",
0388 },
0389 {}, app));
0390
0391
0392 app->Add(new JOmniFactoryGeneratorT<CollectionCollector_factory<edm4eic::Track, true>>(
0393 "CombinedTracks", {"CentralCKFTracks", "B0TrackerCKFTracks"}, {"CombinedTracks"}, app));
0394
0395 app->Add(new JOmniFactoryGeneratorT<
0396 CollectionCollector_factory<edm4eic::MCRecoTrackParticleAssociation, true>>(
0397 "CombinedTrackAssociations", {"CentralCKFTrackAssociations", "B0TrackerCKFTrackAssociations"},
0398 {"CombinedTrackAssociations"}, app));
0399
0400 app->Add(new JOmniFactoryGeneratorT<CollectionCollector_factory<edm4eic::Track, true>>(
0401 "CombinedTruthSeededTracks", {"CentralCKFTruthSeededTracks", "B0TrackerCKFTruthSeededTracks"},
0402 {"CombinedTruthSeededTracks"}, app));
0403
0404 app->Add(new JOmniFactoryGeneratorT<
0405 CollectionCollector_factory<edm4eic::MCRecoTrackParticleAssociation, true>>(
0406 "CombinedTruthSeededTrackAssociations",
0407 {"CentralCKFTruthSeededTrackAssociations", "B0TrackerCKFTruthSeededTrackAssociations"},
0408 {"CombinedTruthSeededTrackAssociations"}, app));
0409
0410 app->Add(new JOmniFactoryGeneratorT<TracksToParticles_factory>(
0411 "ChargedTruthSeededParticlesWithAssociations",
0412 {
0413 "CombinedTruthSeededTracks",
0414 "CombinedTruthSeededTrackAssociations",
0415 },
0416 {"ReconstructedTruthSeededChargedWithoutPIDParticles",
0417 "ReconstructedTruthSeededChargedWithoutPIDParticleAssociations"},
0418 {}, app));
0419
0420 app->Add(new JOmniFactoryGeneratorT<TracksToParticles_factory>(
0421 "ChargedParticlesWithAssociations",
0422 {
0423 "CombinedTracks",
0424 "CombinedTrackAssociations",
0425 },
0426 {"ReconstructedChargedWithoutPIDParticles",
0427 "ReconstructedChargedWithoutPIDParticleAssociations"},
0428 {}, app));
0429 }
0430 }