File indexing completed on 2025-04-19 09:09:43
0001 #ifndef ATOOLS_Phys_Kt_Algorithm_H
0002 #define ATOOLS_Phys_Kt_Algorithm_H
0003
0004 #include "ATOOLS/Math/Vector.H"
0005 #include "ATOOLS/Phys/Particle_List.H"
0006 #include "ATOOLS/Phys/Blob_List.H"
0007 #include "AddOns/Analysis/Tools/Particle_Qualifier.H"
0008 #include <vector>
0009
0010 using namespace ATOOLS;
0011
0012 namespace ANALYSIS {
0013 class Order_PT {
0014 public:
0015 int operator()(ATOOLS::Particle * a, ATOOLS::Particle * b) {
0016 if (a->Momentum().PPerp2() > b->Momentum().PPerp2()) return 1;
0017 return 0;
0018 }
0019 int operator()(ATOOLS::Vec4D & a, ATOOLS::Vec4D & b) {
0020 if (a.PPerp2() > b.PPerp2()) return 1;
0021 return 0;
0022 }
0023 };
0024
0025 class Order_ET {
0026 public:
0027 int operator()(ATOOLS::Particle * a, ATOOLS::Particle * b) {
0028 if (a->Momentum().EPerp() > b->Momentum().EPerp()) return 1;
0029 return 0;
0030 }
0031 int operator()(ATOOLS::Vec4D & a, ATOOLS::Vec4D & b) {
0032 if (a.EPerp() > b.EPerp()) return 1;
0033 return 0;
0034 }
0035 };
0036
0037 class Order_E {
0038 public:
0039 int operator()(ATOOLS::Particle * a, ATOOLS::Particle * b) {
0040 if (a->Momentum()[0] > b->Momentum()[0]) return 1;
0041 return 0;
0042 }
0043 };
0044
0045 class Jet_Algorithm_Base {
0046 protected:
0047 ATOOLS::Particle_Qualifier_Base * p_qualifier;
0048 std::vector<double> m_jetnumbers;
0049 int m_bflag;
0050 const ATOOLS::Blob_List *p_bl;
0051 public:
0052 Jet_Algorithm_Base(ATOOLS::Particle_Qualifier_Base * const qualifier) :
0053 p_qualifier(qualifier), m_bflag(true) {}
0054
0055 virtual bool ConstructJets(const Particle_List * ,Particle_List * ,std::vector<double> * ,double)=0;
0056
0057 void Setbflag(int bf) { m_bflag=bf; }
0058 void SetBlobList(const ATOOLS::Blob_List *bl) { p_bl=bl; }
0059 void SortE(Particle_List *);
0060 void SortPT(Particle_List *);
0061
0062 virtual ~Jet_Algorithm_Base();
0063 std::vector<double> & JetNumbers() { return m_jetnumbers; }
0064 };
0065
0066 class Kt_Algorithm : public Jet_Algorithm_Base {
0067 int m_mode;
0068 double m_ymin, m_r2min;
0069
0070 int m_matrixsize;
0071 double ** p_ktij;
0072 int * p_imap;
0073 double * p_kis;
0074
0075 Particle_List * p_jets;
0076 std::vector<double> * p_kts;
0077
0078 double DRap12(const Vec4D &,const Vec4D &) const;
0079 double DEta12(const Vec4D &,const Vec4D &) const;
0080 double DPhi12(const Vec4D &,const Vec4D &) const;
0081 double CosDPhi12(const Vec4D &,const Vec4D &) const;
0082 double DCos12(const Vec4D &,const Vec4D &) const;
0083
0084 double R2(const Vec4D &p1, const Vec4D &p2) const;
0085
0086 void AddToKtlist(double );
0087 void AddToJetlist(const Vec4D &, int);
0088 public:
0089 static double Kt2(const Vec4D & p);
0090
0091 Kt_Algorithm(ATOOLS::Particle_Qualifier_Base * const qualifier);
0092 ~Kt_Algorithm();
0093
0094 void Init(int);
0095 bool ConstructJets(const Particle_List *,Particle_List * ,std::vector<double> * ,double);
0096
0097 double Ktmin(Vec4D *,int *,int);
0098 };
0099
0100
0101 inline double Kt_Algorithm::Kt2(const Vec4D & p)
0102 {
0103 return sqr(p[1])+sqr(p[2]);
0104 }
0105
0106 inline double Kt_Algorithm::R2(const Vec4D &p1, const Vec4D &p2) const
0107 {
0108 return (sqr(DEta12(p1,p2)) + sqr(DPhi12(p1,p2)));
0109 }
0110
0111
0112 }
0113
0114 #endif
0115
0116
0117
0118
0119
0120
0121
0122