File indexing completed on 2025-09-18 08:17:56
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{"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
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
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
0352
0353
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
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 }