/usr/include/Rivet/Projections/JetAlg.hh is in librivet-dev 1.8.3-1.1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 | // -*- C++ -*-
#ifndef RIVET_JetAlg_HH
#define RIVET_JetAlg_HH
#include "Rivet/Projection.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/VisibleFinalState.hh"
#include "Rivet/Particle.hh"
#include "Rivet/Jet.hh"
namespace Rivet {
inline bool cmpMomByPt(const FourMomentum& a, const FourMomentum& b) {
return a.pT() > b.pT();
}
inline bool cmpMomByAscPt(const FourMomentum& a, const FourMomentum& b) {
return a.pT() < b.pT();
}
inline bool cmpMomByP(const FourMomentum& a, const FourMomentum& b) {
return a.vector3().mod() > b.vector3().mod();
}
inline bool cmpMomByAscP(const FourMomentum& a, const FourMomentum& b) {
return a.vector3().mod() < b.vector3().mod();
}
inline bool cmpMomByEt(const FourMomentum& a, const FourMomentum& b) {
return a.Et() > b.Et();
}
inline bool cmpMomByAscEt(const FourMomentum& a, const FourMomentum& b) {
return a.Et() < b.Et();
}
inline bool cmpMomByE(const FourMomentum& a, const FourMomentum& b) {
return a.E() > b.E();
}
inline bool cmpMomByAscE(const FourMomentum& a, const FourMomentum& b) {
return a.E() < b.E();
}
inline bool cmpMomByDescPseudorapidity(const FourMomentum& a, const FourMomentum& b) {
return a.pseudorapidity() > b.pseudorapidity();
}
inline bool cmpMomByAscPseudorapidity(const FourMomentum& a, const FourMomentum& b) {
return a.pseudorapidity() < b.pseudorapidity();
}
inline bool cmpMomByDescAbsPseudorapidity(const FourMomentum& a, const FourMomentum& b) {
return fabs(a.pseudorapidity()) > fabs(b.pseudorapidity());
}
inline bool cmpMomByAscAbsPseudorapidity(const FourMomentum& a, const FourMomentum& b) {
return fabs(a.pseudorapidity()) < fabs(b.pseudorapidity());
}
inline bool cmpMomByDescRapidity(const FourMomentum& a, const FourMomentum& b) {
return a.rapidity() > b.rapidity();
}
inline bool cmpMomByAscRapidity(const FourMomentum& a, const FourMomentum& b) {
return a.rapidity() < b.rapidity();
}
inline bool cmpMomByDescAbsRapidity(const FourMomentum& a, const FourMomentum& b) {
return fabs(a.rapidity()) > fabs(b.rapidity());
}
inline bool cmpMomByAscAbsRapidity(const FourMomentum& a, const FourMomentum& b) {
return fabs(a.rapidity()) < fabs(b.rapidity());
}
/// Abstract base class for projections which can return a set of {@link Jet}s.
class JetAlg : public Projection {
public:
/// Constructor
JetAlg(const FinalState& fs);
JetAlg() {};
/// Clone on the heap.
virtual const Projection* clone() const = 0;
/// Destructor
virtual ~JetAlg() { }
/// @brief Include invisible particles in jet construction.
/// The default behaviour is that jets are only constructed from visible
/// (i.e. charged under an SM gauge group) particles. Some jet studies,
/// including those from ATLAS, use a definition in which neutrinos from hadron
/// decays are included (via MC correction) in the experimental jet definition.
/// Setting this flag to true avoids the automatic restriction to a VisibleFinalState.
void useInvisibles(bool useinvis=true) {
_useInvisibles = useinvis;
}
/// Get jets in no guaranteed order, with optional cuts on \f$ p_\perp \f$ and rapidity.
/// @todo Introduce MomentumFilter objects for pT, ET, eta, y, etc. filtering, to avoid double-arg ambiguities
virtual Jets jets(double ptmin=0.0, double ptmax=MAXDOUBLE,
double rapmin=-MAXDOUBLE, double rapmax=MAXDOUBLE,
RapScheme rapscheme=PSEUDORAPIDITY) const {
const Jets rawjets = _jets(ptmin);
Jets rtn;
MSG_DEBUG("Raw jet size (with pTmin cut = " << ptmin/GeV << "GeV) = " << rawjets.size());
foreach (const Jet& j, rawjets) {
const FourMomentum pj = j.momentum();
if (!inRange(pj.pT(), ptmin, ptmax)) continue;
if (rapscheme == PSEUDORAPIDITY && !inRange(pj.eta(), rapmin, rapmax)) continue;
if (rapscheme == RAPIDITY && !inRange(pj.rapidity(), rapmin, rapmax)) continue;
rtn += j;
}
return rtn;
}
/// Get the jets, ordered by supplied sorting function object, with optional cuts on \f$ p_\perp \f$ and rapidity.
/// @todo Introduce MomentumFilter objects for pT, ET, eta, y, etc. filtering, to avoid double-arg ambiguities
template <typename F>
Jets jets(F sorter, double ptmin, double ptmax,
double rapmin, double rapmax,
RapScheme rapscheme) const {
Jets js = jets(ptmin, ptmax, rapmin, rapmax, rapscheme);
if (sorter != 0) {
std::sort(js.begin(), js.end(), sorter);
}
return js;
}
/// Get the jets, ordered by \f$ p_T \f$, with optional cuts on \f$ p_\perp \f$ and rapidity.
/// @todo Introduce MomentumFilter objects for pT, ET, eta, y, etc. filtering, to avoid double-arg ambiguities
Jets jetsByPt(double ptmin=0.0, double ptmax=MAXDOUBLE,
double rapmin=-MAXDOUBLE, double rapmax=MAXDOUBLE,
RapScheme rapscheme=PSEUDORAPIDITY) const {
return jets(cmpJetsByPt, ptmin, ptmax, rapmin, rapmax, rapscheme);
}
/// Get the jets, ordered by \f$ |p| \f$, with optional cuts on \f$ p_\perp \f$ and rapidity.
/// @todo Introduce MomentumFilter objects for pT, ET, eta, y, etc. filtering, to avoid double-arg ambiguities
Jets jetsByP(double ptmin=0.0, double ptmax=MAXDOUBLE,
double rapmin=-MAXDOUBLE, double rapmax=MAXDOUBLE,
RapScheme rapscheme=PSEUDORAPIDITY) const {
return jets(cmpJetsByP, ptmin, ptmax, rapmin, rapmax, rapscheme);
}
/// Get the jets, ordered by \f$ E \f$, with optional cuts on \f$ p_\perp \f$ and rapidity.
/// @todo Introduce MomentumFilter objects for pT, ET, eta, y, etc. filtering, to avoid double-arg ambiguities
Jets jetsByE(double ptmin=0.0, double ptmax=MAXDOUBLE,
double rapmin=-MAXDOUBLE, double rapmax=MAXDOUBLE,
RapScheme rapscheme=PSEUDORAPIDITY) const {
return jets(cmpJetsByE, ptmin, ptmax, rapmin, rapmax, rapscheme);
}
/// Get the jets, ordered by \f$ E_T \f$, with optional cuts on \f$ p_\perp \f$ and rapidity.
/// @todo Introduce MomentumFilter objects for pT, ET, eta, y, etc. filtering, to avoid double-arg ambiguities
Jets jetsByEt(double ptmin=0.0, double ptmax=MAXDOUBLE,
double rapmin=-MAXDOUBLE, double rapmax=MAXDOUBLE,
RapScheme rapscheme=PSEUDORAPIDITY) const {
return jets(cmpJetsByEt, ptmin, ptmax, rapmin, rapmax, rapscheme);
}
protected:
/// @brief Internal pure virtual method for getting jets in no guaranteed order.
/// An optional cut on min \f$ p_\perp \f$ is applied in this function, since that is
/// directly supported by FastJet and it seems a shame to not make use of that. But
/// all other jet cuts are applied at the @c ::jets() function level.
virtual Jets _jets(double ptmin) const = 0;
public:
/// Number of jets.
virtual size_t size() const = 0;
/// Clear the projection
virtual void reset() = 0;
typedef Jet entity_type;
typedef Jets collection_type;
/// Template-usable interface common to FinalState.
collection_type entities() const { return jets(); }
/// Do the calculation locally (no caching).
virtual void calc(const ParticleVector& ps) = 0;
protected:
/// Perform the projection on the Event.
virtual void project(const Event& e) = 0;
/// Compare projections.
virtual int compare(const Projection& p) const = 0;
protected:
/// Flag to determine whether or not the VFS wrapper is to be used.
bool _useInvisibles;
};
}
#endif
|