File indexing completed on 2024-09-27 07:03:06
0001
0002
0003
0004 #include <DD4hep/Detector.h>
0005 #include <JANA/JApplication.h>
0006 #include <edm4eic/MCRecoTrackerHitAssociationCollection.h>
0007 #include <edm4eic/TrackCollection.h>
0008 #include <edm4eic/TrackerHitCollection.h>
0009 #include <algorithm>
0010 #include <gsl/pointers>
0011 #include <map>
0012 #include <memory>
0013 #include <string>
0014 #include <tuple>
0015 #include <vector>
0016
0017 #include "ActsToTracks.h"
0018 #include "ActsToTracks_factory.h"
0019 #include "AmbiguitySolver_factory.h"
0020 #include "CKFTracking_factory.h"
0021 #include "IterativeVertexFinder_factory.h"
0022 #include "TrackParamTruthInit_factory.h"
0023 #include "TrackProjector_factory.h"
0024 #include "TrackPropagationConfig.h"
0025 #include "TrackPropagation_factory.h"
0026 #include "TrackSeeding_factory.h"
0027 #include "TrackerMeasurementFromHits_factory.h"
0028 #include "TracksToParticles_factory.h"
0029 #include "extensions/jana/JOmniFactoryGeneratorT.h"
0030 #include "factories/meta/CollectionCollector_factory.h"
0031 #include "services/geometry/dd4hep/DD4hep_service.h"
0032
0033
0034 extern "C" {
0035 void InitPlugin(JApplication *app) {
0036 InitJANAPlugin(app);
0037
0038 using namespace eicrecon;
0039
0040 app->Add(new JOmniFactoryGeneratorT<TrackParamTruthInit_factory>(
0041 "InitTrackParams",
0042 {"MCParticles"},
0043 {"InitTrackParams"},
0044 {},
0045 app
0046 ));
0047
0048
0049 std::vector<std::tuple<std::string, std::string, std::string, std::string>> possible_collections = {
0050 {"SiBarrelHits", "SiBarrelRawHits", "SiBarrelRawHitAssociations", "SiBarrelTrackerRecHits"},
0051 {"VertexBarrelHits", "SiBarrelVertexRawHits", "SiBarrelVertexRawHitAssociations", "SiBarrelVertexRecHits"},
0052 {"TrackerEndcapHits", "SiEndcapTrackerRawHits", "SiEndcapTrackerRawHitAssociations", "SiEndcapTrackerRecHits"},
0053 {"TOFBarrelHits", "TOFBarrelRawHits", "TOFBarrelRawHitAssociations", "TOFBarrelRecHit"},
0054 {"TOFEndcapHits", "TOFEndcapRawHits", "TOFEndcapRawHitAssociations", "TOFEndcapRecHits"},
0055 {"MPGDBarrelHits", "MPGDBarrelRawHits", "MPGDBarrelRawHitAssociations", "MPGDBarrelRecHits"},
0056 {"OuterMPGDBarrelHits", "OuterMPGDBarrelRawHits", "OuterMPGDBarrelRawHitAssociations", "OuterMPGDBarrelRecHits"},
0057 {"BackwardMPGDEndcapHits", "BackwardMPGDEndcapRawHits", "BackwardMPGDEndcapRawHitAssociations", "BackwardMPGDEndcapRecHits"},
0058 {"ForwardMPGDEndcapHits", "ForwardMPGDEndcapRawHits", "ForwardMPGDEndcapRawHitAssociations", "ForwardMPGDEndcapRecHits"},
0059 {"B0TrackerHits", "B0TrackerRawHits", "B0TrackerRawHitAssociations", "B0TrackerRecHits"}
0060 };
0061
0062
0063 std::vector<std::string> input_rec_collections;
0064 std::vector<std::string> input_raw_assoc_collections;
0065 auto readouts = app->GetService<DD4hep_service>()->detector()->readouts();
0066 for (const auto& [hit_collection, raw_collection, raw_assoc_collection, rec_collection] : possible_collections) {
0067 if (readouts.find(hit_collection) != readouts.end()) {
0068
0069 input_rec_collections.push_back(rec_collection);
0070 input_raw_assoc_collections.push_back(raw_assoc_collection);
0071 }
0072 }
0073
0074
0075 app->Add(new JOmniFactoryGeneratorT<CollectionCollector_factory<edm4eic::TrackerHit>>(
0076 "CentralTrackingRecHits",
0077 input_rec_collections,
0078 {"CentralTrackingRecHits"},
0079 app));
0080
0081
0082 app->Add(new JOmniFactoryGeneratorT<CollectionCollector_factory<edm4eic::MCRecoTrackerHitAssociation>>(
0083 "CentralTrackingRawHitAssociations",
0084 input_raw_assoc_collections,
0085 {"CentralTrackingRawHitAssociations"},
0086 app));
0087
0088 app->Add(new JOmniFactoryGeneratorT<TrackerMeasurementFromHits_factory>(
0089 "CentralTrackerMeasurements",
0090 {"CentralTrackingRecHits"},
0091 {"CentralTrackerMeasurements"},
0092 app
0093 ));
0094
0095 app->Add(new JOmniFactoryGeneratorT<CKFTracking_factory>(
0096 "CentralCKFTruthSeededTrajectories",
0097 {
0098 "InitTrackParams",
0099 "CentralTrackerMeasurements"
0100 },
0101 {
0102 "CentralCKFTruthSeededActsTrajectoriesUnfiltered",
0103 "CentralCKFTruthSeededActsTracksUnfiltered",
0104 },
0105 app
0106 ));
0107
0108 app->Add(new JOmniFactoryGeneratorT<ActsToTracks_factory>(
0109 "CentralCKFTruthSeededTracksUnfiltered",
0110 {
0111 "CentralTrackerMeasurements",
0112 "CentralCKFTruthSeededActsTrajectoriesUnfiltered",
0113 "CentralTrackingRawHitAssociations",
0114 },
0115 {
0116 "CentralCKFTruthSeededTrajectoriesUnfiltered",
0117 "CentralCKFTruthSeededTrackParametersUnfiltered",
0118 "CentralCKFTruthSeededTracksUnfiltered",
0119 "CentralCKFTruthSeededTrackUnfilteredAssociations",
0120 },
0121 app
0122 ));
0123
0124 app->Add(new JOmniFactoryGeneratorT<AmbiguitySolver_factory>(
0125 "TruthSeededAmbiguityResolutionSolver",
0126 {
0127 "CentralCKFTruthSeededActsTracksUnfiltered",
0128 "CentralTrackerMeasurements"
0129 },
0130 {
0131 "CentralCKFTruthSeededActsTracks",
0132 "CentralCKFTruthSeededActsTrajectories",
0133 },
0134 app
0135 ));
0136
0137 app->Add(new JOmniFactoryGeneratorT<ActsToTracks_factory>(
0138 "CentralCKFTruthSeededTracks",
0139 {
0140 "CentralTrackerMeasurements",
0141 "CentralCKFTruthSeededActsTrajectories",
0142 "CentralTrackingRawHitAssociations",
0143 },
0144 {
0145 "CentralCKFTruthSeededTrajectories",
0146 "CentralCKFTruthSeededTrackParameters",
0147 "CentralCKFTruthSeededTracks",
0148 "CentralCKFTruthSeededTrackAssociations",
0149 },
0150 app
0151 ));
0152
0153 app->Add(new JOmniFactoryGeneratorT<TrackSeeding_factory>(
0154 "CentralTrackSeedingResults",
0155 {"CentralTrackingRecHits"},
0156 {"CentralTrackSeedingResults"},
0157 {},
0158 app
0159 ));
0160
0161 app->Add(new JOmniFactoryGeneratorT<CKFTracking_factory>(
0162 "CentralCKFTrajectories",
0163 {
0164 "CentralTrackSeedingResults",
0165 "CentralTrackerMeasurements"
0166 },
0167 {
0168 "CentralCKFActsTrajectoriesUnfiltered",
0169 "CentralCKFActsTracksUnfiltered",
0170 },
0171 app
0172 ));
0173
0174 app->Add(new JOmniFactoryGeneratorT<ActsToTracks_factory>(
0175 "CentralCKFTracksUnfiltered",
0176 {
0177 "CentralTrackerMeasurements",
0178 "CentralCKFActsTrajectoriesUnfiltered",
0179 "CentralTrackingRawHitAssociations",
0180 },
0181 {
0182 "CentralCKFTrajectoriesUnfiltered",
0183 "CentralCKFTrackParametersUnfiltered",
0184 "CentralCKFTracksUnfiltered",
0185 "CentralCKFTrackUnfilteredAssociations",
0186 },
0187 app
0188 ));
0189
0190 app->Add(new JOmniFactoryGeneratorT<AmbiguitySolver_factory>(
0191 "AmbiguityResolutionSolver",
0192 {
0193 "CentralCKFActsTracksUnfiltered",
0194 "CentralTrackerMeasurements"
0195 },
0196 {
0197 "CentralCKFActsTracks",
0198 "CentralCKFActsTrajectories",
0199 },
0200 app
0201 ));
0202
0203 app->Add(new JOmniFactoryGeneratorT<ActsToTracks_factory>(
0204 "CentralCKFTracks",
0205 {
0206 "CentralTrackerMeasurements",
0207 "CentralCKFActsTrajectories",
0208 "CentralTrackingRawHitAssociations",
0209 },
0210 {
0211 "CentralCKFTrajectories",
0212 "CentralCKFTrackParameters",
0213 "CentralCKFTracks",
0214 "CentralCKFTrackAssociations",
0215 },
0216 app
0217 ));
0218
0219 app->Add(new JOmniFactoryGeneratorT<TrackProjector_factory>(
0220 "CentralTrackSegments",
0221 {"CentralCKFActsTrajectories"},
0222 {"CentralTrackSegments"},
0223 app
0224 ));
0225
0226 app->Add(new JOmniFactoryGeneratorT<IterativeVertexFinder_factory>(
0227 "CentralTrackVertices",
0228 {"CentralCKFActsTrajectories","ReconstructedChargedParticles"},
0229 {"CentralTrackVertices"},
0230 {},
0231 app
0232 ));
0233
0234 app->Add(new JOmniFactoryGeneratorT<TrackPropagation_factory>(
0235 "CalorimeterTrackPropagator",
0236 {"CentralCKFTracks", "CentralCKFActsTrajectories", "CentralCKFActsTracks"},
0237 {"CalorimeterTrackProjections"},
0238 {
0239 .target_surfaces{
0240
0241 eicrecon::DiscSurfaceConfig{"EcalEndcapN_ID", "- EcalEndcapN_zmin", 0., "1.1*EcalEndcapN_rmax"},
0242 eicrecon::DiscSurfaceConfig{"EcalEndcapN_ID", "- EcalEndcapN_zmin - 50*mm", 0., "1.1*EcalEndcapN_rmax"},
0243 eicrecon::CylinderSurfaceConfig{"EcalBarrel_ID", "EcalBarrel_rmin",
0244 "- 1.1*max(EcalBarrelBackward_zmax,EcalBarrelForward_zmax)",
0245 "1.1*max(EcalBarrelBackward_zmax,EcalBarrelForward_zmax)"
0246 },
0247 eicrecon::CylinderSurfaceConfig{"EcalBarrel_ID", "EcalBarrel_rmin + 50*mm",
0248 "- 1.1*max(EcalBarrelBackward_zmax,EcalBarrelForward_zmax)",
0249 "1.1*max(EcalBarrelBackward_zmax,EcalBarrelForward_zmax)"
0250 },
0251 eicrecon::DiscSurfaceConfig{"EcalEndcapP_ID", "EcalEndcapP_zmin", 0., "1.1*EcalEndcapP_rmax"},
0252 eicrecon::DiscSurfaceConfig{"EcalEndcapP_ID", "EcalEndcapP_zmin + 50*mm", 0., "1.1*EcalEndcapP_rmax"},
0253
0254 eicrecon::DiscSurfaceConfig{"HcalEndcapN_ID", "- HcalEndcapN_zmin", 0., "1.1*HcalEndcapN_rmax"},
0255 eicrecon::DiscSurfaceConfig{"HcalEndcapN_ID", "- HcalEndcapN_zmin - 150*mm", 0., "1.1*HcalEndcapN_rmax"},
0256 eicrecon::CylinderSurfaceConfig{"HcalBarrel_ID", "HcalBarrel_rmin",
0257 "- 1.1*max(HcalBarrelBackward_zmax,HcalBarrelForward_zmax)",
0258 "1.1*max(HcalBarrelBackward_zmax,HcalBarrelForward_zmax)"
0259 },
0260 eicrecon::CylinderSurfaceConfig{"HcalBarrel_ID", "HcalBarrel_rmin + 150*mm",
0261 "- 1.1*max(HcalBarrelBackward_zmax,HcalBarrelForward_zmax)",
0262 "1.1*max(HcalBarrelBackward_zmax,HcalBarrelForward_zmax)"
0263 },
0264 eicrecon::DiscSurfaceConfig{"LFHCAL_ID", "LFHCAL_zmin", 0., "1.1*LFHCAL_rmax"},
0265 eicrecon::DiscSurfaceConfig{"LFHCAL_ID", "LFHCAL_zmin + 150*mm", 0., "1.1*LFHCAL_rmax"},
0266 }
0267 },
0268 app
0269 ));
0270
0271
0272
0273 std::vector<std::string> input_track_collections;
0274
0275 if (input_rec_collections.size() > 0) {
0276 input_track_collections.push_back("CentralCKFTracks");
0277 }
0278
0279 if (readouts.find("TaggerTrackerHits") != readouts.end()) {
0280 input_track_collections.push_back("TaggerTrackerTracks");
0281 }
0282
0283
0284 app->Add(new JOmniFactoryGeneratorT<CollectionCollector_factory<edm4eic::Track>>(
0285 "CombinedTracks",
0286 input_track_collections,
0287 {"CombinedTracks"},
0288 app
0289 ));
0290
0291 app->Add(new JOmniFactoryGeneratorT<TracksToParticles_factory>(
0292 "ChargedTruthSeededParticlesWithAssociations",
0293 {
0294 "CentralCKFTruthSeededTracks",
0295 "CentralCKFTruthSeededTrackAssociations",
0296 },
0297 {"ReconstructedTruthSeededChargedWithoutPIDParticles",
0298 "ReconstructedTruthSeededChargedWithoutPIDParticleAssociations"
0299 },
0300 {},
0301 app
0302 ));
0303
0304 app->Add(new JOmniFactoryGeneratorT<TracksToParticles_factory>(
0305 "ChargedParticlesWithAssociations",
0306 {
0307 "CombinedTracks",
0308 "CentralCKFTrackAssociations",
0309 },
0310 {
0311 "ReconstructedChargedWithoutPIDParticles",
0312 "ReconstructedChargedWithoutPIDParticleAssociations"
0313 },
0314 {},
0315 app
0316 ));
0317 }
0318 }