File indexing completed on 2025-04-19 09:09:55
0001 #ifndef ATOOLS_Phys_Fastjet_Helpers_H
0002 #define ATOOLS_Phys_Fastjet_Helpers_H
0003
0004 #include "ATOOLS/Org/CXXFLAGS_PACKAGES.H"
0005 #include "ATOOLS/Phys/fjcore.hh"
0006 #include "ATOOLS/Math/Vector.H"
0007 #include "ATOOLS/Phys/Flavour.H"
0008
0009 #include <vector>
0010 #include <limits>
0011
0012 namespace ATOOLS {
0013 struct Jet_Input;
0014 class Jet_Identification;
0015 typedef std::vector<Jet_Input> Jet_Inputs;
0016 typedef std::vector<Jet_Identification *> Jet_Identifications;
0017
0018 bool ToBeClustered(const ATOOLS::Flavour& flav, int bmode);
0019 bool ToBeClustered(const ATOOLS::Flavour& flav,
0020 const ATOOLS::Vec4D& mom,
0021 const ATOOLS::Jet_Inputs& jetinputs);
0022 fjcore::PseudoJet MakePseudoJet(const Flavour& flav, const Vec4D& mom);
0023
0024 bool BTag(const fjcore::PseudoJet& jet, int bmode);
0025 Flavour FlavourTag(const fjcore::PseudoJet& jet,
0026 const Jet_Identifications& jetids,
0027 const kf_code& notagkf);
0028
0029
0030 struct Jet_Input {
0031 public:
0032 ATOOLS::Flavour m_fl;
0033 double m_ptmin,m_etamax,m_ymax;
0034 Jet_Input(const ATOOLS::Flavour& fl=ATOOLS::Flavour(kf_none),
0035 const double& ptmin=0.,
0036 const double& etamax=std::numeric_limits<double>::max(),
0037 const double& ymax=std::numeric_limits<double>::max()) :
0038 m_fl(fl), m_ptmin(ptmin), m_etamax(etamax), m_ymax(ymax) {}
0039 };
0040
0041 std::ostream &operator<<(std::ostream &str,const Jet_Input &ji);
0042
0043 struct JetIdMode {
0044 enum code {
0045 unknown = 0,
0046 larger = 1,
0047 relative = 2
0048 };
0049 };
0050
0051 inline JetIdMode::code operator|(const JetIdMode::code idm1,
0052 const JetIdMode::code idm2)
0053 { return (JetIdMode::code)((int)idm1|(int)idm2); }
0054 inline const JetIdMode::code &operator|=(JetIdMode::code &idm1,
0055 const JetIdMode::code idm2)
0056 { return idm1=(JetIdMode::code)((int)idm1|(int)idm2); }
0057 inline JetIdMode::code operator&(const JetIdMode::code idm1,
0058 const JetIdMode::code idm2)
0059 { return (JetIdMode::code)((int)idm1&(int)idm2); }
0060 inline const JetIdMode::code &operator&=(JetIdMode::code &idm1,
0061 const JetIdMode::code idm2)
0062 { return idm1=(JetIdMode::code)((int)idm1&(int)idm2); }
0063
0064 std::ostream &operator<<(std::ostream &str,const JetIdMode::code &idm);
0065
0066
0067 class Jet_Identification {
0068 private:
0069 ATOOLS::Flavour m_flid;
0070 double m_ptmin, m_etmin, m_emin;
0071 JetIdMode::code m_jetidmode;
0072 public:
0073 Jet_Identification(const ATOOLS::Flavour& flid, const double& ptmin,
0074 const double& etmin, const double& emin,
0075 const JetIdMode::code& jetidmode);
0076 ~Jet_Identification() {}
0077
0078 inline const ATOOLS::Flavour& Flavour() const { return m_flid; }
0079 inline const double& PTMin() const { return m_ptmin; }
0080 inline const double& ETMin() const { return m_etmin; }
0081 inline const double& EMin() const { return m_emin; }
0082 inline const JetIdMode::code& JetIDMode() const { return m_jetidmode; }
0083 };
0084
0085 std::ostream &operator<<(std::ostream &str,const Jet_Identification &jid);
0086
0087 }
0088
0089 #endif