Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-06 08:14:20

0001 #ifndef RANDOMCONES_RANDOMCONERECO_H
0002 #define RANDOMCONES_RANDOMCONERECO_H
0003 
0004 //===========================================================
0005 /// \file RandomConeReco.h
0006 /// \brief UE background rho calculator
0007 /// \author Tanner Mengel
0008 //===========================================================
0009 
0010 #include "RandomCone.h"
0011 #include "RandomConev1.h"
0012 
0013 // fun4all includes
0014 #include <fun4all/SubsysReco.h>
0015 
0016 // system includes
0017 #include <string>
0018 #include <vector>
0019 #include <ostream> 
0020 
0021 #include <jetbase/Jet.h>
0022 #include <jetbase/JetAlgo.h>
0023 #include <jetbase/JetInput.h>
0024 
0025 #include <fastjet/JetDefinition.hh>
0026 #include <fastjet/PseudoJet.hh>
0027 
0028 #include <TRandom3.h>
0029 
0030 
0031 // forward declarations
0032 class PHCompositeNode;
0033 
0034 
0035 /// \class RandomConeReco
0036 ///
0037 /// \brief lll
0038 ///
0039 /// 
0040 ///
0041 
0042 
0043 class RandomConeReco : public SubsysReco
0044 {
0045   public:
0046     
0047     RandomConeReco(const std::string &name = "RandomCone");
0048     ~RandomConeReco() override;
0049 
0050     // standard Fun4All methods
0051     int Init(PHCompositeNode *topNode) override;
0052     int process_event(PHCompositeNode *topNode) override;
0053 
0054     // print settings
0055     void print_settings(std::ostream& os = std::cout) const;
0056    
0057     //****************** Required variables **********************************
0058     /*
0059         Required variables:
0060 
0061             -> input for the random cone (required)
0062 
0063             -> cone radius (default = 0.4, i.e. R = 0.4)
0064 
0065             -> output node name (default = "RandomCone_<cone_type>_r<int(R*10):2>")
0066     
0067     */
0068 
0069     // add input for the random cone (required)
0070     void add_input(JetInput *input){ m_inputs.push_back(input); }
0071 
0072     // set cone radius (default = 0.4, i.e. R = 0.4)
0073     void set_cone_radius(const float R) { m_R = R; }
0074 
0075     // output node name (default = "RandomCone_<cone_type>_r<int(R*10):2>")
0076     void set_output_node_name(const std::string &name) { m_output_node_name = name; }
0077 
0078     // **************** Optional variables ***********************************
0079     /*
0080 
0081       Optional variables:
0082 
0083         -> set eta range input objects (default = 1.1)
0084 
0085         -> set eta range for cone acceptance (cone is contsrained to eta range min + R < |eta| < max - R)
0086 
0087         -> user-defined seed (default = 0, i.e. use time as seed)
0088 
0089         -> set min pT of input objects (default = 0.0)
0090                    
0091     */
0092 
0093     // set eta range input objects (default = 1.1)
0094     void set_input_max_abs_eta(const float max_abs_eta){ m_input_max_abs_eta = max_abs_eta; }
0095 
0096     // set eta range for cone acceptance (max_abs_eta - R) by default
0097     void set_cone_max_abs_eta(const float max_abs_eta){ m_cone_max_abs_eta = max_abs_eta; }
0098 
0099     // user-defined seed (default = 0, i.e. use time as seed)
0100     void set_seed(const unsigned int seed){  m_seed = seed; }
0101 
0102     // set min pT of input objects (default = 0.0)
0103     void set_input_min_pT(const float min_pT){ m_input_min_pT = min_pT; }
0104 
0105     // tower cut
0106     void do_tower_cut(bool b = true) { m_do_tower_cut = b; }
0107 
0108     // add threshold for input objects
0109     void set_tower_threshold(const float threshold)
0110     {
0111         m_tower_threshold = threshold; 
0112     }
0113 
0114     
0115     // **************** Random Cone reconstruction options **********************
0116     /*
0117     
0118         Random Cone reconstruction options:
0119 
0120             -> randomize eta, phi of the input objects (default = false)
0121             
0122             -> avoid leading jet (default = false)
0123                 - minimum dR between the leading jet and the random cone (default = 1.4)
0124                 - lead jet can be from jetmap, jet container or lead jet input
0125                     - (jetmap) add_lead_jet_map
0126                     - (jet container) add_lead_jet_container
0127                     - (lead jet input) add_lead_jet_input 
0128                 - if no additonal input method is set (jetmap, jet container or lead jet input), 
0129                     the leading jet is reconstructed from the inputs used to reconstruct the random cone
0130             
0131             -> basic random cone reconstruction (default = true)
0132         
0133         All can be true at the same time, but at least one must be true.
0134         
0135     */
0136 
0137     // randomize eta, phi of the input objects
0138     void do_randomize_etaphi(const bool b) { m_do_randomize_etaphi_of_inputs = b; }
0139         
0140     // **************** Avoid Leading Jet Options
0141 
0142     // avoid leading jet stuff (setters for leading jet options)
0143     void do_avoid_leading_jet(const bool b) 
0144     { 
0145         // avoid leading jet of user-defined node
0146         m_do_avoid_leading_jet = b; 
0147 
0148         // defaults to using inputs to reconstruct jet
0149         if(m_do_avoid_leading_jet)
0150         {
0151             m_leading_jet_from_inputs = true; // leading jet is reconstructed from inputs (default)
0152             m_leading_jet_from_jetmap = false;
0153             m_leading_jet_from_jetcont = false;
0154         }
0155     }
0156 
0157     // minimum dR between the leading jet and the random cone (default = 1.0 + R)
0158     void set_lead_jet_dR(const float dR) 
0159     { 
0160         //if not already set to avoid leading jet, set to true
0161         if(!m_do_avoid_leading_jet){ m_do_avoid_leading_jet = true; }
0162         m_lead_jet_dR = dR; 
0163     }
0164     
0165     // set jet pT threshold for leading jet
0166     void set_lead_jet_pT_threshold(const float pT) 
0167     { 
0168         //if not already set to avoid leading jet, set to true
0169         if(!m_do_avoid_leading_jet){ m_do_avoid_leading_jet = true; }
0170         m_lead_jet_pT_threshold = pT;
0171     }
0172 
0173     // add jet container for leading jet (if not set, the leading jet is reconstructed from the inputs used to reconstruct the random cone)
0174     void add_lead_jet_container(const std::string &name) 
0175     {  
0176         // avoid leading jet of user-defined node
0177         m_leading_jet_node_name = name; 
0178 
0179         // set true if not already set
0180         if(!m_do_avoid_leading_jet){ m_do_avoid_leading_jet = true; }
0181         
0182         // set type of leading jet
0183         m_leading_jet_from_inputs = false;
0184         m_leading_jet_from_jetmap = false;
0185         m_leading_jet_from_jetcont = true; // leading jet is from jet container
0186 
0187 
0188     }
0189     // add jetmap for leading jet (if not set, the leading jet is reconstructed from the inputs used to reconstruct the random cone)
0190     void add_lead_jet_map(const std::string &name) 
0191     {  
0192         
0193         // avoid leading jet of user-defined node (jetmap)
0194         m_leading_jet_node_name = name;
0195 
0196         // set true if not already set
0197         if(!m_do_avoid_leading_jet){ m_do_avoid_leading_jet = true; }
0198 
0199         // set type of leading jet
0200         m_leading_jet_from_inputs = false;
0201         m_leading_jet_from_jetmap = true; // leading jet is from jetmap
0202         m_leading_jet_from_jetcont = false;
0203 
0204     }
0205   
0206     // **************** Basic Random Cone Reconstruction
0207 
0208     // normal random cone reconstruction (default = true)
0209     void do_basic_reconstruction(const bool b) { m_do_basic_reconstruction = b; } // default is already true
0210 
0211 
0212 
0213 
0214 
0215   private:
0216 
0217     // ============================================================
0218     // required variables
0219     // ============================================================
0220 
0221     std::vector<JetInput *> m_inputs{}; // input for the random cone
0222 
0223     std::string m_output_node_name{"RandomCone"}; // output node name
0224 
0225     std::string m_output_basic_node{"_basic_"}; // output node name for basic random cone reconstruction
0226     std::string m_output_randomize_etaphi_node{"_randomize_etaphi_"}; // output node name for randomize eta, phi of the input objects
0227     std::string m_output_avoid_leading_jet_node{"_avoid_lead_jet_"}; // output node name for avoid leading jet
0228 
0229     float m_R{0.4}; // cone radius
0230 
0231     // ============================================================
0232     // optional variables
0233     // ============================================================
0234 
0235     float m_input_max_abs_eta{1.1}; // eta range input objects
0236     float m_cone_max_abs_eta{5.0}; // eta range for cone acceptance (5.0 is dummy value) default is max_abs_eta - R
0237 
0238     unsigned int m_seed{0}; // user-defined seed (default = 0, i.e. use time as seed)
0239 
0240     float m_input_min_pT{10.0}; // min pT of input objects (default = 0.0)
0241 
0242     // add threshold for input objects
0243     bool m_do_tower_cut{false}; // tower cut
0244     float m_tower_threshold{0.0}; // threshold for input objects
0245     // ============================================================
0246     // Random Cone reconstruction options
0247     // ============================================================
0248 
0249     bool m_do_basic_reconstruction{true}; // basic random cone reconstruction (default = true)
0250     
0251     bool m_do_randomize_etaphi_of_inputs{false}; // randomize eta, phi of the input objects
0252 
0253     // avoid leading jet stuff
0254     bool m_do_avoid_leading_jet{false}; // avoid leading jet
0255     float m_lead_jet_dR{5.0}; // minimum dR between the leading jet and the random cone (default = 1.0 + R)
0256     float m_lead_jet_pT_threshold{0.0}; // jet pT threshold for leading jet
0257 
0258     // leading jet options
0259     std::string m_leading_jet_node_name{""};
0260     bool m_leading_jet_from_inputs{true}; // leading jet is reconstructed from inputs (default)
0261     bool m_leading_jet_from_jetmap{false}; // leading jet is from jetmap
0262     bool m_leading_jet_from_jetcont{false}; // leading jet is from jet container
0263 
0264 
0265     
0266 
0267     // ============================================================
0268     // internal variables
0269     // ============================================================
0270 
0271     // random number generator
0272     TRandom3 *m_random{nullptr};
0273 
0274     // ============================================================
0275 
0276 
0277 
0278     // Nodes ==========================================
0279     int CreateNode(PHCompositeNode *topNode);
0280 
0281       // helper functions ==========================================
0282     Jet * GetLeadJet(PHCompositeNode *topNode); // get leading jet from user-defined method
0283 
0284     std::vector<fastjet::PseudoJet> JetsToPseudojets(const std::vector<Jet *> &particles, bool randomize_etaphi=false); // convert jet objects to pseudojets
0285 
0286     void GetConeAxis(PHCompositeNode *topNode, float &cone_eta, float &cone_phi, bool avoid_lead_jet=false); // get random cone axis
0287 };
0288 
0289 #endif // RHOBASE_DETERMINETOWERRHO_H