Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-15 08:17:45

0001 // SPDX-License-Identifier: LGPL-3.0-or-later
0002 // Copyright (C) 2024 Derek Anderson, Zhongling Ji, Dmitry Kalinkin, John Lajoie
0003 
0004 #pragma once
0005 
0006 #include <algorithms/algorithm.h>
0007 #include <edm4eic/ReconstructedParticleCollection.h>
0008 #include <fastjet/AreaDefinition.hh>
0009 #include <fastjet/JetDefinition.hh>
0010 #include <map>
0011 #include <memory>
0012 #include <string>
0013 #include <string_view>
0014 #include <utility>
0015 
0016 #include "JetReconstructionConfig.h"
0017 // for algorithm configuration
0018 #include "algorithms/interfaces/WithPodConfig.h"
0019 
0020 namespace eicrecon {
0021 
0022 template <typename InputT>
0023 using JetReconstructionAlgorithm =
0024     algorithms::Algorithm<algorithms::Input<typename InputT::collection_type>,
0025                           algorithms::Output<edm4eic::ReconstructedParticleCollection>>;
0026 
0027 template <typename InputT>
0028 class JetReconstruction : public JetReconstructionAlgorithm<InputT>,
0029                           public WithPodConfig<JetReconstructionConfig> {
0030 
0031 public:
0032   JetReconstruction(std::string_view name)
0033       : JetReconstructionAlgorithm<InputT>{
0034             name,
0035             {"inputReconstructedParticles"},
0036             {"outputReconstructedParticles"},
0037             "Performs jet reconstruction using a FastJet algorithm."} {}
0038 
0039 public:
0040   // algorithm initialization
0041   void init() final;
0042 
0043   // run algorithm
0044   void process(const typename eicrecon::JetReconstructionAlgorithm<InputT>::Input&,
0045                const typename eicrecon::JetReconstructionAlgorithm<InputT>::Output&) const final;
0046 
0047 private:
0048   // fastjet components
0049   std::unique_ptr<fastjet::JetDefinition> m_jet_def;
0050   std::unique_ptr<fastjet::AreaDefinition> m_area_def;
0051   std::unique_ptr<fastjet::JetDefinition::Plugin> m_jet_plugin;
0052 
0053   // maps of user input onto fastjet options
0054   std::map<std::string, fastjet::JetAlgorithm> m_mapJetAlgo = {
0055       {"kt_algorithm", fastjet::JetAlgorithm::kt_algorithm},
0056       {"cambridge_algorithm", fastjet::JetAlgorithm::cambridge_algorithm},
0057       {"antikt_algorithm", fastjet::JetAlgorithm::antikt_algorithm},
0058       {"genkt_algorithm", fastjet::JetAlgorithm::genkt_algorithm},
0059       {"cambridge_for_passive_algorithm", fastjet::JetAlgorithm::cambridge_for_passive_algorithm},
0060       {"genkt_for_passive_algorithm", fastjet::JetAlgorithm::genkt_for_passive_algorithm},
0061       {"ee_kt_algorithm", fastjet::JetAlgorithm::ee_kt_algorithm},
0062       {"ee_genkt_algorithm", fastjet::JetAlgorithm::ee_genkt_algorithm},
0063       {"plugin_algorithm", fastjet::JetAlgorithm::plugin_algorithm}};
0064   std::map<std::string, fastjet::RecombinationScheme> m_mapRecombScheme = {
0065       {"E_scheme", fastjet::RecombinationScheme::E_scheme},
0066       {"pt_scheme", fastjet::RecombinationScheme::pt_scheme},
0067       {"pt2_scheme", fastjet::RecombinationScheme::pt2_scheme},
0068       {"Et_scheme", fastjet::RecombinationScheme::Et_scheme},
0069       {"Et2_scheme", fastjet::RecombinationScheme::Et2_scheme},
0070       {"BIpt_scheme", fastjet::RecombinationScheme::BIpt_scheme},
0071       {"BIpt2_scheme", fastjet::RecombinationScheme::BIpt2_scheme},
0072       {"WTA_pt_scheme", fastjet::RecombinationScheme::WTA_pt_scheme},
0073       {"WTA_modp_scheme", fastjet::RecombinationScheme::WTA_modp_scheme},
0074       {"external_scheme", fastjet::RecombinationScheme::external_scheme}};
0075   std::map<std::string, fastjet::AreaType> m_mapAreaType = {
0076       {"active_area", fastjet::AreaType::active_area},
0077       {"active_area_explicit_ghosts", fastjet::AreaType::active_area_explicit_ghosts},
0078       {"one_ghost_passive_area", fastjet::AreaType::one_ghost_passive_area},
0079       {"passive_area", fastjet::AreaType::passive_area},
0080       {"voronoi_area", fastjet::AreaType::voronoi_area}};
0081 
0082   // default fastjet options
0083   const struct defaults {
0084     std::string jetAlgo;
0085     std::string recombScheme;
0086     std::string areaType;
0087   } m_defaultFastjetOpts = {"antikt_algorithm", "E_scheme", "active_area"};
0088 
0089 }; // end JetReconstruction definition
0090 
0091 } // namespace eicrecon