File indexing completed on 2025-07-01 07:56:32
0001
0002
0003
0004 #include <Evaluator/DD4hepUnits.h>
0005 #include <JANA/JApplication.h>
0006 #include <JANA/JApplicationFwd.h>
0007 #include <edm4eic/Cluster.h>
0008 #include <edm4eic/EDM4eicVersion.h>
0009 #include <edm4eic/InclusiveKinematics.h>
0010 #include <edm4eic/MCRecoClusterParticleAssociation.h>
0011 #include <edm4eic/MCRecoParticleAssociation.h>
0012 #include <edm4eic/ReconstructedParticle.h>
0013 #include <edm4hep/MCParticle.h>
0014 #include <fmt/core.h>
0015 #include <map>
0016 #include <memory>
0017
0018 #include "algorithms/interfaces/WithPodConfig.h"
0019
0020 #if EDM4EIC_VERSION_MAJOR >= 6
0021 #include "algorithms/reco/HadronicFinalState.h"
0022 #include "algorithms/reco/InclusiveKinematicsDA.h"
0023 #include "algorithms/reco/InclusiveKinematicsESigma.h"
0024 #include "algorithms/reco/InclusiveKinematicsElectron.h"
0025 #include "algorithms/reco/InclusiveKinematicsJB.h"
0026 #include "algorithms/reco/InclusiveKinematicsSigma.h"
0027 #endif
0028 #include "extensions/jana/JOmniFactoryGeneratorT.h"
0029 #include "factories/meta/CollectionCollector_factory.h"
0030 #include "factories/meta/FilterMatching_factory.h"
0031 #include "factories/reco/FarForwardLambdaReconstruction_factory.h"
0032 #include "factories/reco/FarForwardNeutralsReconstruction_factory.h"
0033 #ifdef USE_ONNX
0034 #include "factories/reco/InclusiveKinematicsML_factory.h"
0035 #endif
0036 #if EDM4EIC_VERSION_MAJOR >= 6
0037 #include "factories/reco/InclusiveKinematicsReconstructed_factory.h"
0038 #endif
0039 #include "factories/reco/InclusiveKinematicsTruth_factory.h"
0040 #include "factories/reco/JetReconstruction_factory.h"
0041 #include "factories/reco/TransformBreitFrame_factory.h"
0042 #if EDM4EIC_VERSION_MAJOR >= 6
0043 #include "factories/reco/HadronicFinalState_factory.h"
0044 #endif
0045 #include "factories/reco/ChargedReconstructedParticleSelector_factory.h"
0046 #include "factories/reco/MC2SmearedParticle_factory.h"
0047 #include "factories/reco/MatchClusters_factory.h"
0048 #include "factories/reco/PrimaryVertices_factory.h"
0049 #include "factories/reco/ReconstructedElectrons_factory.h"
0050 #include "factories/reco/ScatteredElectronsEMinusPz_factory.h"
0051 #include "factories/reco/ScatteredElectronsTruth_factory.h"
0052 #include "factories/reco/UndoAfterBurnerMCParticles_factory.h"
0053
0054 #if EDM4EIC_VERSION_MAJOR >= 8
0055 #include "factories/reco/TrackClusterMatch_factory.h"
0056 #endif
0057
0058 extern "C" {
0059 void InitPlugin(JApplication* app) {
0060 InitJANAPlugin(app);
0061
0062 using namespace eicrecon;
0063
0064
0065 app->Add(
0066 new JOmniFactoryGeneratorT<FilterMatching_factory<
0067 edm4eic::MCRecoParticleAssociation, [](auto* obj) { return obj->getSim().getObjectID(); },
0068 edm4hep::MCParticle, [](auto* obj) { return obj->getObjectID(); }>>(
0069 "MCScatteredElectronAssociations",
0070 {"ReconstructedChargedParticleAssociations", "MCScatteredElectrons"},
0071 {"MCScatteredElectronAssociations", "MCNonScatteredElectronAssociations"}, app));
0072
0073 app->Add(new JOmniFactoryGeneratorT<MC2SmearedParticle_factory>(
0074 "GeneratedParticles", {"MCParticles"}, {"GeneratedParticles"}, app));
0075
0076 app->Add(new JOmniFactoryGeneratorT<CollectionCollector_factory<edm4eic::Cluster, true>>(
0077 "EcalClusters", {"EcalEndcapNClusters", "EcalBarrelScFiClusters", "EcalEndcapPClusters"},
0078 {"EcalClusters"}, app));
0079
0080 app->Add(new JOmniFactoryGeneratorT<
0081 CollectionCollector_factory<edm4eic::MCRecoClusterParticleAssociation, true>>(
0082 "EcalClusterAssociations",
0083 {"EcalEndcapNClusterAssociations", "EcalBarrelScFiClusterAssociations",
0084 "EcalEndcapPClusterAssociations"},
0085 {"EcalClusterAssociations"}, app));
0086
0087 app->Add(new JOmniFactoryGeneratorT<MatchClusters_factory>(
0088 "ReconstructedParticlesWithAssoc",
0089 {
0090 "MCParticles",
0091 "ReconstructedChargedParticles",
0092 "ReconstructedChargedParticleAssociations",
0093 "EcalClusters",
0094 "EcalClusterAssociations",
0095 },
0096 {
0097 "ReconstructedParticles",
0098 "ReconstructedParticleAssociations"
0099 },
0100 app));
0101
0102 app->Add(new JOmniFactoryGeneratorT<InclusiveKinematicsTruth_factory>(
0103 "InclusiveKinematicsTruth", {"MCParticles"}, {"InclusiveKinematicsTruth"}, app));
0104
0105 #if EDM4EIC_VERSION_MAJOR >= 6
0106 app->Add(new JOmniFactoryGeneratorT<
0107 InclusiveKinematicsReconstructed_factory<InclusiveKinematicsElectron>>(
0108 "InclusiveKinematicsElectron",
0109 {"MCParticles", "ScatteredElectronsTruth", "HadronicFinalState"},
0110 {"InclusiveKinematicsElectron"}, app));
0111
0112 app->Add(
0113 new JOmniFactoryGeneratorT<InclusiveKinematicsReconstructed_factory<InclusiveKinematicsJB>>(
0114 "InclusiveKinematicsJB", {"MCParticles", "ScatteredElectronsTruth", "HadronicFinalState"},
0115 {"InclusiveKinematicsJB"}, app));
0116
0117 app->Add(
0118 new JOmniFactoryGeneratorT<InclusiveKinematicsReconstructed_factory<InclusiveKinematicsDA>>(
0119 "InclusiveKinematicsDA", {"MCParticles", "ScatteredElectronsTruth", "HadronicFinalState"},
0120 {"InclusiveKinematicsDA"}, app));
0121
0122 app->Add(new JOmniFactoryGeneratorT<
0123 InclusiveKinematicsReconstructed_factory<InclusiveKinematicsESigma>>(
0124 "InclusiveKinematicsESigma", {"MCParticles", "ScatteredElectronsTruth", "HadronicFinalState"},
0125 {"InclusiveKinematicsESigma"}, app));
0126
0127
0128 app->Add(new JOmniFactoryGeneratorT<CollectionCollector_factory<edm4eic::InclusiveKinematics>>(
0129 "InclusiveKinematicseSigma_legacy", {"InclusiveKinematicsESigma"},
0130 {"InclusiveKinematicseSigma"}, app));
0131
0132 app->Add(new JOmniFactoryGeneratorT<
0133 InclusiveKinematicsReconstructed_factory<InclusiveKinematicsSigma>>(
0134 "InclusiveKinematicsSigma", {"MCParticles", "ScatteredElectronsTruth", "HadronicFinalState"},
0135 {"InclusiveKinematicsSigma"}, app));
0136
0137 #ifdef USE_ONNX
0138 app->Add(new JOmniFactoryGeneratorT<InclusiveKinematicsML_factory>(
0139 "InclusiveKinematicsML", {"InclusiveKinematicsElectron", "InclusiveKinematicsDA"},
0140 {"InclusiveKinematicsML"}, app));
0141 #endif
0142 #endif
0143
0144 app->Add(new JOmniFactoryGeneratorT<ReconstructedElectrons_factory>(
0145 "ReconstructedElectrons", {"ReconstructedParticles"}, {"ReconstructedElectrons"}, {}, app));
0146
0147 app->Add(new JOmniFactoryGeneratorT<ReconstructedElectrons_factory>(
0148 "ReconstructedElectronsForDIS", {"ReconstructedParticles"}, {"ReconstructedElectronsForDIS"},
0149 {
0150 .min_energy_over_momentum = 0.7,
0151 .max_energy_over_momentum = 1.3
0152 },
0153 app));
0154
0155 app->Add(new JOmniFactoryGeneratorT<JetReconstruction_factory<edm4eic::ReconstructedParticle>>(
0156 "GeneratedJets", {"GeneratedParticles"}, {"GeneratedJets"}, {}, app));
0157
0158 app->Add(new JOmniFactoryGeneratorT<JetReconstruction_factory<edm4eic::ReconstructedParticle>>(
0159 "ReconstructedJets", {"ReconstructedParticles"}, {"ReconstructedJets"}, {}, app));
0160
0161 app->Add(new JOmniFactoryGeneratorT<ChargedReconstructedParticleSelector_factory>(
0162 "GeneratedChargedParticles", {"GeneratedParticles"}, {"GeneratedChargedParticles"}, app));
0163
0164 app->Add(new JOmniFactoryGeneratorT<JetReconstruction_factory<edm4eic::ReconstructedParticle>>(
0165 "GeneratedChargedJets", {"GeneratedChargedParticles"}, {"GeneratedChargedJets"}, {}, app));
0166
0167 app->Add(new JOmniFactoryGeneratorT<JetReconstruction_factory<edm4eic::ReconstructedParticle>>(
0168 "ReconstructedChargedJets", {"ReconstructedChargedParticles"}, {"ReconstructedChargedJets"},
0169 {}, app));
0170
0171 app->Add(new JOmniFactoryGeneratorT<ScatteredElectronsTruth_factory>(
0172 "ScatteredElectronsTruth",
0173 {"MCParticles", "ReconstructedChargedParticles", "ReconstructedChargedParticleAssociations"},
0174 {"ScatteredElectronsTruth"}, app));
0175
0176 app->Add(new JOmniFactoryGeneratorT<ScatteredElectronsEMinusPz_factory>(
0177 "ScatteredElectronsEMinusPz",
0178 {"ReconstructedChargedParticles", "ReconstructedElectronsForDIS"},
0179 {"ScatteredElectronsEMinusPz"},
0180 {
0181 .minEMinusPz = 0,
0182 .maxEMinusPz = 10000000.0
0183 },
0184 app));
0185
0186 app->Add(new JOmniFactoryGeneratorT<CollectionCollector_factory<edm4eic::Cluster, true>>(
0187 "BarrelClusters",
0188 {
0189 "HcalBarrelClusters",
0190 "EcalBarrelClusters",
0191 },
0192 {"BarrelClusters"}, app));
0193
0194 #if EDM4EIC_VERSION_MAJOR >= 8
0195 app->Add(new JOmniFactoryGeneratorT<TrackClusterMatch_factory>(
0196 "TrackClusterMatcher", {"CalorimeterTrackProjections", "BarrelClusters"},
0197 {"TrackClusterMatches"}, {}, app));
0198 #endif
0199
0200 app->Add(new JOmniFactoryGeneratorT<TransformBreitFrame_factory>(
0201 "ReconstructedBreitFrameParticles",
0202 {"MCParticles", "InclusiveKinematicsElectron", "ReconstructedParticles"},
0203 {"ReconstructedBreitFrameParticles"}, {}, app));
0204
0205 app->Add(new JOmniFactoryGeneratorT<FarForwardNeutralsReconstruction_factory>(
0206 "ReconstructedFarForwardZDCNeutrons",
0207 {"HcalFarForwardZDCClusters"},
0208 {"ReconstructedFarForwardZDCNeutrals"},
0209 {.offsetPositionName = "HcalFarForwardZDC_SiPMonTile_r_pos",
0210 .neutronScaleCorrCoeffHcal = {-0.11, -1.5, 0},
0211 .gammaScaleCorrCoeffHcal = {0, -.13, 0},
0212 .globalToProtonRotation = -0.025,
0213 .gammaZMaxOffset = 300 * dd4hep::mm,
0214 .gammaMaxLength = 100 * dd4hep::mm,
0215 .gammaMaxWidth = 12 * dd4hep::mm},
0216 app
0217 ));
0218
0219 app->Add(new JOmniFactoryGeneratorT<FarForwardLambdaReconstruction_factory>(
0220 "ReconstructedFarForwardZDCLambdas",
0221 {"ReconstructedFarForwardZDCNeutrals"},
0222 {"ReconstructedFarForwardZDCLambdas", "ReconstructedFarForwardZDCLambdaDecayProductsC"
0223 "M"},
0224 {.offsetPositionName = "HcalFarForwardZDC_SiPMonTile_r_pos",
0225 .globalToProtonRotation = -0.025,
0226 .lambdaMaxMassDev = 0.030 * dd4hep::GeV,
0227 .iterations = 10},
0228 app
0229 ));
0230
0231 #if EDM4EIC_VERSION_MAJOR >= 6
0232 app->Add(new JOmniFactoryGeneratorT<HadronicFinalState_factory<HadronicFinalState>>(
0233 "HadronicFinalState",
0234 {"MCParticles", "ReconstructedParticles", "ReconstructedParticleAssociations"},
0235 {"HadronicFinalState"}, app));
0236 #endif
0237
0238 app->Add(new JOmniFactoryGeneratorT<TransformBreitFrame_factory>(
0239 "GeneratedBreitFrameParticles",
0240 {"MCParticles", "InclusiveKinematicsElectron", "GeneratedParticles"},
0241 {"GeneratedBreitFrameParticles"}, {}, app));
0242
0243 app->Add(new JOmniFactoryGeneratorT<JetReconstruction_factory<edm4eic::ReconstructedParticle>>(
0244 "GeneratedCentauroJets", {"GeneratedBreitFrameParticles"}, {"GeneratedCentauroJets"},
0245 {.rJet = 0.8, .jetAlgo = "plugin_algorithm", .jetContribAlgo = "Centauro"}, app));
0246
0247 app->Add(new JOmniFactoryGeneratorT<JetReconstruction_factory<edm4eic::ReconstructedParticle>>(
0248 "ReconstructedCentauroJets", {"ReconstructedBreitFrameParticles"},
0249 {"ReconstructedCentauroJets"},
0250 {.rJet = 0.8, .jetAlgo = "plugin_algorithm", .jetContribAlgo = "Centauro"}, app));
0251
0252
0253 app->Add(new JOmniFactoryGeneratorT<UndoAfterBurnerMCParticles_factory>(
0254 "MCParticlesHeadOnFrameNoBeamFX", {"MCParticles"}, {"MCParticlesHeadOnFrameNoBeamFX"},
0255 {
0256 .m_pid_assume_pion_mass = false,
0257 .m_crossing_angle = -0.025 * dd4hep::rad,
0258 .m_pid_purity = 0.51,
0259 .m_correct_beam_FX = true,
0260 .m_pid_use_MC_truth = true,
0261 },
0262 app));
0263
0264 app->Add(new JOmniFactoryGeneratorT<PrimaryVertices_factory>(
0265 "PrimaryVertices", {"CentralTrackVertices"}, {"PrimaryVertices"}, {}, app));
0266 }
0267 }