Rivet
1.8.0
|
00001 // -*- C++ -*- 00002 #ifndef RIVET_JetAlg_HH 00003 #define RIVET_JetAlg_HH 00004 00005 #include "Rivet/Projection.hh" 00006 #include "Rivet/Projections/FinalState.hh" 00007 #include "Rivet/Projections/VisibleFinalState.hh" 00008 #include "Rivet/Particle.hh" 00009 #include "Rivet/Jet.hh" 00010 00011 namespace Rivet { 00012 00013 00014 inline bool cmpMomByPt(const FourMomentum& a, const FourMomentum& b) { 00015 return a.pT() > b.pT(); 00016 } 00017 inline bool cmpMomByAscPt(const FourMomentum& a, const FourMomentum& b) { 00018 return a.pT() < b.pT(); 00019 } 00020 inline bool cmpMomByP(const FourMomentum& a, const FourMomentum& b) { 00021 return a.vector3().mod() > b.vector3().mod(); 00022 } 00023 inline bool cmpMomByAscP(const FourMomentum& a, const FourMomentum& b) { 00024 return a.vector3().mod() < b.vector3().mod(); 00025 } 00026 inline bool cmpMomByEt(const FourMomentum& a, const FourMomentum& b) { 00027 return a.Et() > b.Et(); 00028 } 00029 inline bool cmpMomByAscEt(const FourMomentum& a, const FourMomentum& b) { 00030 return a.Et() < b.Et(); 00031 } 00032 inline bool cmpMomByE(const FourMomentum& a, const FourMomentum& b) { 00033 return a.E() > b.E(); 00034 } 00035 inline bool cmpMomByAscE(const FourMomentum& a, const FourMomentum& b) { 00036 return a.E() < b.E(); 00037 } 00038 inline bool cmpMomByDescPseudorapidity(const FourMomentum& a, const FourMomentum& b) { 00039 return a.pseudorapidity() > b.pseudorapidity(); 00040 } 00041 inline bool cmpMomByAscPseudorapidity(const FourMomentum& a, const FourMomentum& b) { 00042 return a.pseudorapidity() < b.pseudorapidity(); 00043 } 00044 inline bool cmpMomByDescAbsPseudorapidity(const FourMomentum& a, const FourMomentum& b) { 00045 return fabs(a.pseudorapidity()) > fabs(b.pseudorapidity()); 00046 } 00047 inline bool cmpMomByAscAbsPseudorapidity(const FourMomentum& a, const FourMomentum& b) { 00048 return fabs(a.pseudorapidity()) < fabs(b.pseudorapidity()); 00049 } 00050 inline bool cmpMomByDescRapidity(const FourMomentum& a, const FourMomentum& b) { 00051 return a.rapidity() > b.rapidity(); 00052 } 00053 inline bool cmpMomByAscRapidity(const FourMomentum& a, const FourMomentum& b) { 00054 return a.rapidity() < b.rapidity(); 00055 } 00056 inline bool cmpMomByDescAbsRapidity(const FourMomentum& a, const FourMomentum& b) { 00057 return fabs(a.rapidity()) > fabs(b.rapidity()); 00058 } 00059 inline bool cmpMomByAscAbsRapidity(const FourMomentum& a, const FourMomentum& b) { 00060 return fabs(a.rapidity()) < fabs(b.rapidity()); 00061 } 00062 00063 00065 class JetAlg : public Projection { 00066 public: 00067 00069 JetAlg(const FinalState& fs); 00070 00071 JetAlg() {}; 00072 00074 virtual const Projection* clone() const = 0; 00075 00077 virtual ~JetAlg() { } 00078 00085 void useInvisibles(bool useinvis=true) { 00086 _useInvisibles = useinvis; 00087 } 00088 00091 virtual Jets jets(double ptmin=0.0, double ptmax=MAXDOUBLE, 00092 double rapmin=-MAXDOUBLE, double rapmax=MAXDOUBLE, 00093 RapScheme rapscheme=PSEUDORAPIDITY) const { 00094 const Jets rawjets = _jets(ptmin); 00095 Jets rtn; 00096 MSG_DEBUG("Raw jet size (with pTmin cut = " << ptmin/GeV << "GeV) = " << rawjets.size()); 00097 foreach (const Jet& j, rawjets) { 00098 const FourMomentum pj = j.momentum(); 00099 if (!inRange(pj.pT(), ptmin, ptmax)) continue; 00100 if (rapscheme == PSEUDORAPIDITY && !inRange(pj.eta(), rapmin, rapmax)) continue; 00101 if (rapscheme == RAPIDITY && !inRange(pj.rapidity(), rapmin, rapmax)) continue; 00102 rtn += j; 00103 } 00104 return rtn; 00105 } 00106 00109 template <typename F> 00110 Jets jets(F sorter, double ptmin, double ptmax, 00111 double rapmin, double rapmax, 00112 RapScheme rapscheme) const { 00113 Jets js = jets(ptmin, ptmax, rapmin, rapmax, rapscheme); 00114 if (sorter != 0) { 00115 std::sort(js.begin(), js.end(), sorter); 00116 } 00117 return js; 00118 } 00119 00122 Jets jetsByPt(double ptmin=0.0, double ptmax=MAXDOUBLE, 00123 double rapmin=-MAXDOUBLE, double rapmax=MAXDOUBLE, 00124 RapScheme rapscheme=PSEUDORAPIDITY) const { 00125 return jets(cmpJetsByPt, ptmin, ptmax, rapmin, rapmax, rapscheme); 00126 } 00127 00130 Jets jetsByP(double ptmin=0.0, double ptmax=MAXDOUBLE, 00131 double rapmin=-MAXDOUBLE, double rapmax=MAXDOUBLE, 00132 RapScheme rapscheme=PSEUDORAPIDITY) const { 00133 return jets(cmpJetsByP, ptmin, ptmax, rapmin, rapmax, rapscheme); 00134 } 00135 00138 Jets jetsByE(double ptmin=0.0, double ptmax=MAXDOUBLE, 00139 double rapmin=-MAXDOUBLE, double rapmax=MAXDOUBLE, 00140 RapScheme rapscheme=PSEUDORAPIDITY) const { 00141 return jets(cmpJetsByE, ptmin, ptmax, rapmin, rapmax, rapscheme); 00142 } 00143 00146 Jets jetsByEt(double ptmin=0.0, double ptmax=MAXDOUBLE, 00147 double rapmin=-MAXDOUBLE, double rapmax=MAXDOUBLE, 00148 RapScheme rapscheme=PSEUDORAPIDITY) const { 00149 return jets(cmpJetsByEt, ptmin, ptmax, rapmin, rapmax, rapscheme); 00150 } 00151 00152 00153 protected: 00154 00159 virtual Jets _jets(double ptmin) const = 0; 00160 00161 00162 public: 00163 00165 virtual size_t size() const = 0; 00166 00168 virtual void reset() = 0; 00169 00170 typedef Jet entity_type; 00171 typedef Jets collection_type; 00172 00174 collection_type entities() const { return jets(); } 00175 00177 virtual void calc(const ParticleVector& ps) = 0; 00178 00179 00180 protected: 00181 00183 virtual void project(const Event& e) = 0; 00184 00186 virtual int compare(const Projection& p) const = 0; 00187 00188 00189 protected: 00190 00192 bool _useInvisibles; 00193 00194 }; 00195 00196 00197 } 00198 00199 #endif