Back to home page

EIC code displayed by LXR

 
 

    


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   // a simplied version of the UA1  jet algorithm with jetradius and 
0073   //   minimum scalar transverse energy
0074   //        (RJET=1., EJCUT=5. FOR UA1)
0075   //  getjet.f obtained from MLM Feb 2004
0076   //    "Calorimeter simulation obtained from Frank Paige 23 March 1988"
0077   //    (RESEM=.15, RESHAD=.35 FOR URANIUM CALORIMETER)
0078   //    (RESEM=.15, RESHAD=.70 FOR IRON CALORIMETER)
0079   //    (RESEM=.11, RESHAD=.70 FOR CDF)
0080 
0081   //
0082 }
0083 
0084 #endif