Back to home page

EIC code displayed by LXR

 
 

    


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