Back to home page

sPhenix code displayed by LXR

 
 

    


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 }  // namespace fastjet
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   //  Legacy code interface. It is better to use FastJetOptions, but
0038   //  there is no harm is using these, as well.
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   //--end-legacy-code-interface-------------------------------------------
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   // for convenience save indices of the zg, Rg, mu, and area for jets in the JetContainer
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   // Internal processes
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   // private members
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