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