File indexing completed on 2025-08-05 08:16:37
0001 #ifndef JETBASE_FASTJETALGO_H
0002 #define JETBASE_FASTJETALGO_H
0003
0004 #include "FastJetOptions.h"
0005 #include "Jet.h"
0006 #include "JetAlgo.h"
0007
0008 #include <fastjet/JetDefinition.hh>
0009 #include <fastjet/PseudoJet.hh>
0010
0011 #include <iostream> // for cout, ostream
0012 #include <vector> // for vector
0013
0014 namespace fastjet
0015 {
0016 class PseudoJet;
0017 class GridMedianBackgroundEstimator;
0018 class SelectorPtMax;
0019 namespace contrib
0020 {
0021 class ConstituentSubtractor;
0022 }
0023 }
0024
0025 class JetContainer;
0026
0027 class FastJetAlgo : public JetAlgo
0028 {
0029 public:
0030 FastJetAlgo(const FastJetOptions& options);
0031 ~FastJetAlgo() override = default;
0032
0033 void identify(std::ostream& os = std::cout) override;
0034 Jet::ALGO get_algo() override { return m_opt.algo; }
0035
0036
0037
0038
0039
0040 FastJetAlgo(Jet::ALGO algo, float par, int verbosity = 0)
0041 : FastJetAlgo({{algo, JET_R, par, VERBOSITY, static_cast<float>(verbosity)}})
0042 {
0043 }
0044 void set_do_SoftDrop(bool do_SD) { m_opt.doSoftDrop = do_SD; }
0045 void set_SoftDrop_beta(float beta) { m_opt.SD_beta = beta; }
0046 void set_SoftDrop_zcut(float zcut) { m_opt.SD_zcut = zcut; }
0047
0048
0049 std::vector<Jet*> get_jets(std::vector<Jet*> particles) override;
0050 void cluster_and_fill(std::vector<Jet*>& particles, JetContainer* jetcont) override;
0051
0052 private:
0053 FastJetOptions m_opt{};
0054 bool m_first_cluster_call{true};
0055
0056
0057 Jet::PROPERTY m_zg_index{Jet::PROPERTY::no_property};
0058 Jet::PROPERTY m_Rg_index{Jet::PROPERTY::no_property};
0059 Jet::PROPERTY m_mu_index{Jet::PROPERTY::no_property};
0060 Jet::PROPERTY m_area_index{Jet::PROPERTY::no_property};
0061
0062
0063 std::vector<fastjet::PseudoJet> jets_to_pseudojets(std::vector<Jet*>& particles) const;
0064 std::vector<fastjet::PseudoJet> cluster_jets(std::vector<fastjet::PseudoJet>& pseudojets);
0065 std::vector<fastjet::PseudoJet> cluster_area_jets(std::vector<fastjet::PseudoJet>& pseudojets);
0066 float calc_rhomeddens(std::vector<fastjet::PseudoJet>& constituents) const;
0067 fastjet::JetDefinition get_fastjet_definition() const;
0068 fastjet::Selector get_selector() const;
0069 void first_call_init(JetContainer* jetcont = nullptr);
0070
0071
0072 fastjet::contrib::ConstituentSubtractor* cs_subtractor{nullptr};
0073 fastjet::GridMedianBackgroundEstimator* cs_bge_rho{nullptr};
0074 fastjet::Selector* cs_sel_max_pt{nullptr};
0075
0076 fastjet::ClusterSequence* m_cluseq{nullptr};
0077 fastjet::ClusterSequence* m_cluseqarea{nullptr};
0078 };
0079
0080 #endif