File indexing completed on 2026-06-06 07:54:18
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/Cluster.h>
0009 #include <edm4eic/EDM4eicVersion.h>
0010 #include <edm4eic/InclusiveKinematics.h>
0011 #include <edm4eic/MCRecoClusterParticleAssociation.h>
0012 #include <edm4eic/MCRecoParticleAssociation.h>
0013 #include <edm4eic/ReconstructedParticle.h>
0014 #include <edm4hep/MCParticle.h>
0015 #include <map>
0016 #include <memory>
0017 #include <string>
0018 #include <vector>
0019
0020 #include "algorithms/reco/HadronicFinalState.h"
0021 #include "algorithms/reco/InclusiveKinematicsDA.h"
0022 #include "algorithms/reco/InclusiveKinematicsESigma.h"
0023 #include "algorithms/reco/InclusiveKinematicsElectron.h"
0024 #include "algorithms/reco/InclusiveKinematicsJB.h"
0025 #include "algorithms/reco/InclusiveKinematicsSigma.h"
0026 #include "extensions/jana/JOmniFactoryGeneratorT.h"
0027 #include "factories/meta/CollectionCollector_factory.h"
0028 #include "factories/meta/FilterMatching_factory.h"
0029 #include "factories/reco/ChargedReconstructedParticleSelector_factory.h"
0030 #include "factories/reco/ClustersToParticles_factory.h"
0031 #include "factories/reco/LambdaReconstruction_factory.h"
0032 #include "factories/reco/FarForwardNeutralsReconstruction_factory.h"
0033 #include "factories/reco/HadronicFinalState_factory.h"
0034 #include "factories/reco/InclusiveKinematicsML_factory.h"
0035 #include "factories/reco/InclusiveKinematicsReconstructed_factory.h"
0036 #include "factories/reco/InclusiveKinematicsTruth_factory.h"
0037 #include "factories/reco/JetReconstruction_factory.h"
0038 #include "factories/reco/MC2ReconstructedParticle_factory.h"
0039 #include "factories/reco/MatchClusters_factory.h"
0040 #include "factories/reco/PrimaryVertices_factory.h"
0041 #include "factories/reco/ReconstructedElectrons_factory.h"
0042 #include "factories/reco/ScatteredElectronsEMinusPz_factory.h"
0043 #include "factories/reco/ScatteredElectronsTruth_factory.h"
0044 #include "factories/reco/SecondaryVerticesHelix_factory.h"
0045 #include "factories/reco/TrackClusterMatch_factory.h"
0046 #include "factories/reco/TransformBreitFrame_factory.h"
0047 #include "factories/reco/UndoAfterBurnerMCParticles_factory.h"
0048
0049 extern "C" {
0050 void InitPlugin(JApplication* app) {
0051 InitJANAPlugin(app);
0052
0053 using namespace eicrecon;
0054
0055
0056 app->Add(
0057 new JOmniFactoryGeneratorT<FilterMatching_factory<
0058 edm4eic::MCRecoParticleAssociation, [](auto* obj) { return obj->getSim().getObjectID(); },
0059 edm4hep::MCParticle, [](auto* obj) { return obj->getObjectID(); }>>(
0060 "MCScatteredElectronAssociations",
0061 {"ReconstructedChargedParticleAssociations", "MCScatteredElectrons"},
0062 {"MCScatteredElectronAssociations", "MCNonScatteredElectronAssociations"}, app));
0063
0064 app->Add(new JOmniFactoryGeneratorT<MC2ReconstructedParticle_factory>(
0065 "GeneratedParticles", {"MCParticles"}, {"GeneratedParticles"}, app));
0066
0067 app->Add(new JOmniFactoryGeneratorT<CollectionCollector_factory<edm4eic::Cluster, true>>(
0068 "EcalClusters", {"EcalEndcapNClusters", "EcalBarrelScFiClusters", "EcalEndcapPClusters"},
0069 {"EcalClusters"}, app));
0070
0071 app->Add(new JOmniFactoryGeneratorT<
0072 CollectionCollector_factory<edm4eic::MCRecoClusterParticleAssociation, true>>(
0073 "EcalClusterAssociations",
0074 {"EcalEndcapNClusterAssociations", "EcalBarrelScFiClusterAssociations",
0075 "EcalEndcapPClusterAssociations"},
0076 {"EcalClusterAssociations"}, app));
0077
0078 app->Add(new JOmniFactoryGeneratorT<MatchClusters_factory>(
0079 "ReconstructedParticlesWithAssoc",
0080 {
0081 "MCParticles",
0082 "ReconstructedChargedParticles",
0083 "ReconstructedChargedParticleAssociations",
0084 "EcalClusters",
0085 "EcalClusterAssociations",
0086 },
0087 {
0088 "ReconstructedParticles",
0089 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0090 "ReconstructedParticleLinks",
0091 #endif
0092 "ReconstructedParticleAssociations"
0093 },
0094 app));
0095
0096 app->Add(new JOmniFactoryGeneratorT<InclusiveKinematicsTruth_factory>(
0097 "InclusiveKinematicsTruth", {"MCParticles"}, {"InclusiveKinematicsTruth"}, app));
0098
0099 app->Add(new JOmniFactoryGeneratorT<
0100 InclusiveKinematicsReconstructed_factory<InclusiveKinematicsElectron>>(
0101 "InclusiveKinematicsElectron",
0102 {"MCBeamElectrons", "MCBeamProtons", "ScatteredElectronsTruth", "HadronicFinalState"},
0103 {"InclusiveKinematicsElectron"}, app));
0104
0105 app->Add(
0106 new JOmniFactoryGeneratorT<InclusiveKinematicsReconstructed_factory<InclusiveKinematicsJB>>(
0107 "InclusiveKinematicsJB",
0108 {"MCBeamElectrons", "MCBeamProtons", "ScatteredElectronsTruth", "HadronicFinalState"},
0109 {"InclusiveKinematicsJB"}, app));
0110
0111 app->Add(
0112 new JOmniFactoryGeneratorT<InclusiveKinematicsReconstructed_factory<InclusiveKinematicsDA>>(
0113 "InclusiveKinematicsDA",
0114 {"MCBeamElectrons", "MCBeamProtons", "ScatteredElectronsTruth", "HadronicFinalState"},
0115 {"InclusiveKinematicsDA"}, app));
0116
0117 app->Add(new JOmniFactoryGeneratorT<
0118 InclusiveKinematicsReconstructed_factory<InclusiveKinematicsESigma>>(
0119 "InclusiveKinematicsESigma",
0120 {"MCBeamElectrons", "MCBeamProtons", "ScatteredElectronsTruth", "HadronicFinalState"},
0121 {"InclusiveKinematicsESigma"}, app));
0122
0123
0124 app->Add(new JOmniFactoryGeneratorT<CollectionCollector_factory<edm4eic::InclusiveKinematics>>(
0125 "InclusiveKinematicseSigma_legacy", {"InclusiveKinematicsESigma"},
0126 {"InclusiveKinematicseSigma"}, app));
0127
0128 app->Add(new JOmniFactoryGeneratorT<
0129 InclusiveKinematicsReconstructed_factory<InclusiveKinematicsSigma>>(
0130 "InclusiveKinematicsSigma",
0131 {"MCBeamElectrons", "MCBeamProtons", "ScatteredElectronsTruth", "HadronicFinalState"},
0132 {"InclusiveKinematicsSigma"}, app));
0133
0134 app->Add(new JOmniFactoryGeneratorT<InclusiveKinematicsML_factory>(
0135 "InclusiveKinematicsML", {"InclusiveKinematicsElectron", "InclusiveKinematicsDA"},
0136 {"InclusiveKinematicsML"}, app));
0137
0138 app->Add(new JOmniFactoryGeneratorT<ReconstructedElectrons_factory>(
0139 "ReconstructedElectrons", {"ReconstructedParticles"}, {"ReconstructedElectrons"}, {}, app));
0140
0141 app->Add(new JOmniFactoryGeneratorT<ReconstructedElectrons_factory>(
0142 "ReconstructedElectronsForDIS", {"ReconstructedParticles"}, {"ReconstructedElectronsForDIS"},
0143 {
0144 .min_energy_over_momentum = 0.7,
0145 .max_energy_over_momentum = 1.3
0146 },
0147 app));
0148
0149 app->Add(new JOmniFactoryGeneratorT<JetReconstruction_factory<edm4eic::ReconstructedParticle>>(
0150 "GeneratedJets", {"EventHeader", "GeneratedParticles"}, {"GeneratedJets"}, {}, app));
0151
0152 app->Add(new JOmniFactoryGeneratorT<JetReconstruction_factory<edm4eic::ReconstructedParticle>>(
0153 "ReconstructedJets", {"EventHeader", "ReconstructedParticles"}, {"ReconstructedJets"}, {},
0154 app));
0155
0156 app->Add(new JOmniFactoryGeneratorT<ChargedReconstructedParticleSelector_factory>(
0157 "GeneratedChargedParticles", {"GeneratedParticles"}, {"GeneratedChargedParticles"}, app));
0158
0159 app->Add(new JOmniFactoryGeneratorT<ClustersToParticles_factory>(
0160 "ReconstructedNeutralParticles", {"EcalClusters", "EcalClusterAssociations"},
0161 {"ReconstructedNeutralParticles",
0162 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0163 "ReconstructedNeutralParticleLinks",
0164 #endif
0165 "ReconstructedNeutralParticleAssociations"},
0166 app));
0167
0168 app->Add(new JOmniFactoryGeneratorT<JetReconstruction_factory<edm4eic::ReconstructedParticle>>(
0169 "GeneratedChargedJets", {"EventHeader", "GeneratedChargedParticles"},
0170 {"GeneratedChargedJets"}, {}, app));
0171
0172 app->Add(new JOmniFactoryGeneratorT<JetReconstruction_factory<edm4eic::ReconstructedParticle>>(
0173 "ReconstructedChargedJets", {"EventHeader", "ReconstructedChargedParticles"},
0174 {"ReconstructedChargedJets"}, {}, app));
0175
0176 app->Add(new JOmniFactoryGeneratorT<JetReconstruction_factory<edm4eic::ReconstructedParticle>>(
0177 "ReconstructedNeutralJets", {"EventHeader", "ReconstructedNeutralParticles"},
0178 {"ReconstructedNeutralJets"}, {}, app));
0179
0180 app->Add(new JOmniFactoryGeneratorT<ScatteredElectronsTruth_factory>(
0181 "ScatteredElectronsTruth",
0182 {"MCParticles", "ReconstructedChargedParticles", "ReconstructedChargedParticleAssociations"},
0183 {"ScatteredElectronsTruth"}, app));
0184
0185 app->Add(new JOmniFactoryGeneratorT<ScatteredElectronsEMinusPz_factory>(
0186 "ScatteredElectronsEMinusPz",
0187 {"ReconstructedChargedParticles", "ReconstructedElectronsForDIS"},
0188 {"ScatteredElectronsEMinusPz"},
0189 {
0190 .minEMinusPz = 0,
0191 .maxEMinusPz = 10000000.0
0192 },
0193 app));
0194
0195
0196 app->Add(new JOmniFactoryGeneratorT<TrackClusterMatch_factory>(
0197 "EcalEndcapPTrackClusterMatches", {"CalorimeterTrackProjections", "EcalEndcapPClusters"},
0198 {"EcalEndcapPTrackClusterMatches"}, {.calo_id = "EcalEndcapP_ID"}, app));
0199
0200 app->Add(new JOmniFactoryGeneratorT<TrackClusterMatch_factory>(
0201 "LFHCALTrackClusterMatches", {"CalorimeterTrackProjections", "LFHCALClusters"},
0202 {"LFHCALTrackClusterMatches"}, {.calo_id = "LFHCAL_ID"}, app));
0203
0204 app->Add(new JOmniFactoryGeneratorT<TrackClusterMatch_factory>(
0205 "HcalEndcapPInsertClusterMatches",
0206 {"CalorimeterTrackProjections", "HcalEndcapPInsertClusters"},
0207 {"HcalEndcapPInsertTrackClusterMatches"}, {.calo_id = "HcalEndcapPInsert_ID"}, app));
0208
0209
0210 app->Add(new JOmniFactoryGeneratorT<TrackClusterMatch_factory>(
0211 "EcalBarrelTrackClusterMatches", {"CalorimeterTrackProjections", "EcalBarrelClusters"},
0212 {"EcalBarrelTrackClusterMatches"}, {.calo_id = "EcalBarrel_ID"}, app));
0213
0214 app->Add(new JOmniFactoryGeneratorT<TrackClusterMatch_factory>(
0215 "HcalBarrelTrackClusterMatches", {"CalorimeterTrackProjections", "HcalBarrelClusters"},
0216 {"HcalBarrelTrackClusterMatches"}, {.calo_id = "HcalBarrel_ID"}, app));
0217
0218
0219 app->Add(new JOmniFactoryGeneratorT<TrackClusterMatch_factory>(
0220 "EcalEndcapNTrackClusterMatches", {"CalorimeterTrackProjections", "EcalEndcapNClusters"},
0221 {"EcalEndcapNTrackClusterMatches"}, {.calo_id = "EcalEndcapN_ID"}, app));
0222
0223 app->Add(new JOmniFactoryGeneratorT<TrackClusterMatch_factory>(
0224 "HcalEndcapNTrackClusterMatches", {"CalorimeterTrackProjections", "HcalEndcapNClusters"},
0225 {"HcalEndcapNTrackClusterMatches"}, {.calo_id = "HcalEndcapN_ID"}, app));
0226
0227 app->Add(new JOmniFactoryGeneratorT<TransformBreitFrame_factory>(
0228 "ReconstructedBreitFrameParticles",
0229 {"MCParticles", "InclusiveKinematicsElectron", "ReconstructedParticles"},
0230 {"ReconstructedBreitFrameParticles"}, {}, app));
0231
0232 app->Add(new JOmniFactoryGeneratorT<FarForwardNeutralsReconstruction_factory>(
0233 "ReconstructedFarForwardNeutrals",
0234 {"HcalFarForwardZDCClusters", "B0ECalClusters", "EcalEndcapPClusters", "LFHCALClusters"},
0235 {"ReconstructedHcalFarForwardZDCNeutrals", "ReconstructedB0EcalNeutrals",
0236 "ReconstructedEcalEndcapPNeutrals", "ReconstructedLFHCALNeutrals"},
0237 {.offsetPositionName = "HcalFarForwardZDC_SiPMonTile_r_pos",
0238 .neutronScaleCorrCoeffHcalZDC = {2.4, 0.89},
0239 .gammaScaleCorrCoeffHcalZDC = {1.1, 0.98},
0240 .neutronScaleCorrCoeffLFHCAL = {2.55, 0.95},
0241 .gammaScaleCorrCoeffLFHCAL = {0., 0.},
0242 .neutronScaleCorrCoeffB0Ecal = {0., 0.},
0243 .gammaScaleCorrCoeffB0Ecal = {0.99, 1.14},
0244 .neutronScaleCorrCoeffEcalEndcapP = {0., 0.},
0245 .gammaScaleCorrCoeffEcalEndcapP = {1.05, 1.01},
0246 .clusterEminHcalZDC = 0.0,
0247 .clusterEminB0Ecal = 1.0,
0248 .clusterEminEcalEndcapP = 1.0,
0249 .clusterEminLFHCAL = 7.0,
0250 .globalToProtonRotation = -0.025,
0251 .gammaZMaxOffset = 400,
0252 .gammaMaxLength = 100,
0253 .gammaMaxWidth = 12},
0254 app));
0255
0256 app->Add(new JOmniFactoryGeneratorT<LambdaReconstruction_factory>(
0257 "ReconstructedLambdas",
0258 {"ReconstructedHcalFarForwardZDCNeutrals", "ReconstructedB0EcalNeutrals",
0259 "ReconstructedEcalEndcapPNeutrals", "ReconstructedLFHCALNeutrals"},
0260 {"ReconstructedLambdas", "ReconstructedLambdaDecayProductsCM"},
0261 {.offsetPositionName = "HcalFarForwardZDC_SiPMonTile_r_pos",
0262 .globalToProtonRotation = -0.025,
0263 .lambdaMassWindow = 0.1,
0264 .pi0Window = 0.1,
0265 .iterations = 10},
0266 app));
0267
0268 app->Add(new JOmniFactoryGeneratorT<HadronicFinalState_factory<HadronicFinalState>>(
0269 "HadronicFinalState",
0270 {"MCBeamElectrons", "MCBeamProtons", "MCParticles", "ReconstructedParticles",
0271 "ReconstructedParticleAssociations"},
0272 {"HadronicFinalState"}, app));
0273
0274 app->Add(new JOmniFactoryGeneratorT<TransformBreitFrame_factory>(
0275 "GeneratedBreitFrameParticles",
0276 {"MCParticles", "InclusiveKinematicsElectron", "GeneratedParticles"},
0277 {"GeneratedBreitFrameParticles"}, {}, app));
0278
0279 app->Add(new JOmniFactoryGeneratorT<JetReconstruction_factory<edm4eic::ReconstructedParticle>>(
0280 "GeneratedCentauroJets", {"EventHeader", "GeneratedBreitFrameParticles"},
0281 {"GeneratedCentauroJets"},
0282 {.rJet = 0.8, .jetAlgo = "plugin_algorithm", .jetContribAlgo = "Centauro"}, app));
0283
0284 app->Add(new JOmniFactoryGeneratorT<JetReconstruction_factory<edm4eic::ReconstructedParticle>>(
0285 "ReconstructedCentauroJets", {"EventHeader", "ReconstructedBreitFrameParticles"},
0286 {"ReconstructedCentauroJets"},
0287 {.rJet = 0.8, .jetAlgo = "plugin_algorithm", .jetContribAlgo = "Centauro"}, app));
0288
0289
0290 app->Add(new JOmniFactoryGeneratorT<UndoAfterBurnerMCParticles_factory>(
0291 "MCParticlesHeadOnFrameNoBeamFX", {"MCParticles"}, {"MCParticlesHeadOnFrameNoBeamFX"},
0292 {
0293 .m_pid_assume_pion_mass = false,
0294 .m_crossing_angle = -0.025 * dd4hep::rad,
0295 .m_pid_purity = 0.51,
0296 .m_correct_beam_FX = true,
0297 .m_pid_use_MC_truth = true,
0298 },
0299 app));
0300
0301 app->Add(new JOmniFactoryGeneratorT<PrimaryVertices_factory>(
0302 "PrimaryVertices", {"CentralTrackVertices"}, {"PrimaryVertices"}, {}, app));
0303
0304 app->Add(new JOmniFactoryGeneratorT<SecondaryVerticesHelix_factory>(
0305 "SecondaryVerticesHelix", {"PrimaryVertices", "ReconstructedParticles"},
0306 {"SecondaryVerticesHelix"}, {}, app));
0307 }
0308 }