File indexing completed on 2025-04-19 09:09:42
0001 #ifndef Analysis_Triggers_Calorimeter_Cone_H
0002 #define Analysis_Triggers_Calorimeter_Cone_H
0003
0004 #include "AddOns/Analysis/Triggers/Primitive_Calorimeter.H"
0005 #include "AddOns/Analysis/Triggers/Kt_Algorithm.H"
0006 #include "ATOOLS/Phys/Particle_List.H"
0007 #include "ATOOLS/Math/Vector.H"
0008 #include "ATOOLS/Math/Histogram.H"
0009
0010 namespace ANALYSIS {
0011 class Primitive_Analysis;
0012
0013 struct Jet_Data {
0014 int i,j,orig;
0015 ATOOLS::Vec4D mom;
0016 double et;
0017 Jet_Data(int _i, int _j, int _orig,const ATOOLS::Vec4D & _mom, double _et) :
0018 i(_i),j(_j),orig(_orig),mom(_mom),et(_et) {}
0019 };
0020
0021 class Order_PT_JData {
0022 public:
0023 int operator()(const Jet_Data & a, const Jet_Data & b) {
0024 if (a.mom.PPerp2() > b.mom.PPerp2()) return 1;
0025 return 0;
0026 }
0027 };
0028
0029 class Calorimeter_Cone : public Jet_Algorithm_Base {
0030 double m_dR, m_dR2, m_Etcut, m_Etstop, m_maxetajet, m_minetajet;
0031 int m_neta, m_nphi, m_dneta, m_dnphi;
0032 double m_mineta, m_maxeta, m_delta_eta, m_delta_phi;
0033 int m_etamode;
0034
0035 int ** p_jetno;
0036
0037 Primitive_Calorimeter * p_calorimeter;
0038
0039 std::vector<Jet_Data> m_jets;
0040
0041 void CalcJets();
0042 void SortPT();
0043 void Test();
0044 public:
0045 Calorimeter_Cone(const double Etcut,const double etamin,
0046 const double etamax,double sep=1.);
0047 ~Calorimeter_Cone();
0048
0049 bool ConstructJets(const ATOOLS::Particle_List * pl = 0,ATOOLS::Particle_List * jets = 0,
0050 std::vector<double> * kt2 = 0,double rmin=-1.);
0051 void SetEtaRangeForJets(const double mineta,const double maxeta,const int mode);
0052 void FillShape(int jetno,ATOOLS::Histogram * histo,double weight=1.,double ncount=1);
0053
0054 int NumberOfJets();
0055 double Radius();
0056 double Et_cut();
0057 void SetAnalysis(Primitive_Analysis * ana);
0058 };
0059
0060
0061 inline void Calorimeter_Cone::SetEtaRangeForJets(const double mineta,
0062 const double maxeta,const int mode)
0063 {
0064 if (mineta<maxeta) { m_minetajet = mineta; m_maxetajet = maxeta; }
0065 else { m_minetajet = maxeta; m_maxetajet = mineta; }
0066 m_etamode = mode;
0067 }
0068
0069 inline int Calorimeter_Cone::NumberOfJets() { return m_jets.size(); }
0070 inline double Calorimeter_Cone::Radius() { return m_dR; }
0071 inline double Calorimeter_Cone::Et_cut() { return m_Etcut; }
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082 }
0083
0084 #endif