Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-07-01 07:56:32

0001 // SPDX-License-Identifier: LGPL-3.0-or-later
0002 // Copyright (C) 2022 - 2025, Dmitry Romanov, Nathan Brei, Tooba Ali, Wouter Deconinck, Dmitry Kalinkin, John Lajoie, Simon Gardner, Tristan Protzman, Daniel Brandenburg, Derek M Anderson, Sebouh Paul, Tyler Kutz, Alex Jentsch, Jihee Kim, Brian Page
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   // Finds associations matched to initial scattered electrons
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",           // edm4eic::ReconstructedParticle
0098           "ReconstructedParticleAssociations" // edm4eic::MCRecoParticleAssociation
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   // InclusiveKinematicseSigma is deprecated and will be removed, use InclusiveKinematicsESigma instead
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, // GeV
0151           .max_energy_over_momentum = 1.3  // GeV
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,         // GeV
0182           .maxEMinusPz = 10000000.0 // GeV
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 // EDM4EIC_VERSION_MAJOR >= 8
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"},          // edm4eic::ClusterCollection
0208       {"ReconstructedFarForwardZDCNeutrals"}, // edm4eic::ReconstrutedParticleCollection,
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 // TODO: Remove me once fixed
0217       ));
0218 
0219   app->Add(new JOmniFactoryGeneratorT<FarForwardLambdaReconstruction_factory>(
0220       "ReconstructedFarForwardZDCLambdas",
0221       {"ReconstructedFarForwardZDCNeutrals"}, // edm4eic::ReconstrutedParticleCollection,
0222       {"ReconstructedFarForwardZDCLambdas", "ReconstructedFarForwardZDCLambdaDecayProductsC"
0223                                             "M"}, // edm4eic::ReconstrutedParticleCollection,
0224       {.offsetPositionName     = "HcalFarForwardZDC_SiPMonTile_r_pos",
0225        .globalToProtonRotation = -0.025,
0226        .lambdaMaxMassDev       = 0.030 * dd4hep::GeV,
0227        .iterations             = 10},
0228       app // TODO: Remove me once fixed
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   //Full correction for MCParticles --> MCParticlesHeadOnFrame
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, //dummy value for MC truth information
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 } // extern "C"