2 #ifndef RIVET_SmearedJets_HH 3 #define RIVET_SmearedJets_HH 5 #include "Rivet/Jet.hh" 6 #include "Rivet/Particle.hh" 7 #include "Rivet/Projection.hh" 8 #include "Rivet/Projections/JetAlg.hh" 9 #include "Rivet/Tools/SmearingFunctions.hh" 58 const initializer_list<JetEffSmearFn>& effSmearFns={})
59 :
SmearedJets(ja, vector<JetEffSmearFn>{effSmearFns}, bTagEffFn, cTagEffFn)
68 const vector<JetEffSmearFn>& effSmearFns={})
69 :
SmearedJets(ja, effSmearFns, bTagEffFn, cTagEffFn)
77 const initializer_list<JetEffSmearFn>& effSmearFns,
87 const vector<JetEffSmearFn>& effSmearFns,
90 : _detFns(effSmearFns), _bTagEffFn(bTagEffFn), _cTagEffFn(cTagEffFn)
106 :
SmearedJets(ja, {jetEffFn,smearFn}, bTagEffFn, cTagEffFn)
124 const CmpState teq =
mkPCmp(p,
"TruthJets");
125 if (teq != CmpState::EQ)
return teq;
129 const CmpState nfeq =
cmp(_detFns.size(), other._detFns.
size());
130 if (nfeq != CmpState::EQ)
return nfeq;
131 for (
size_t i = 0; i < _detFns.size(); ++i) {
132 const CmpState feq = _detFns[i].cmp(other._detFns[i]);
133 if (feq != CmpState::EQ)
return feq;
144 const Jets& truthjets = apply<JetFinder>(e,
"TruthJets").
jetsByPt();
145 _recojets.clear(); _recojets.reserve(truthjets.size());
147 for (
const Jet& j : truthjets) {
150 MSG_DEBUG(
"Truth jet: " <<
"mom=" << jdet.
mom()/GeV <<
" GeV, pT=" << jdet.
pT()/GeV <<
", eta=" << jdet.
eta());
153 std::tie(jdet, jeff) = fn(jdet);
155 if (jdet.
particles().empty() && !j.particles().empty()) jdet.
particles() = j.particles();
156 if (jdet.
tags().empty() && !j.tags().empty()) jdet.
tags() = j.tags();
157 MSG_DEBUG(
" ->" <<
"mom=" << jdet.
mom()/GeV <<
" GeV, pT=" << jdet.
pT()/GeV <<
", eta=" << jdet.
eta());
163 if (jeff <= 0) { keep =
false;
break; }
164 if (jeff < 1 &&
rand01() > jeff) { keep =
false;
break; }
166 if (keep) _recojets.push_back(jdet);
169 for (
Jet& j : _recojets) {
171 const double beff = _bTagEffFn ? _bTagEffFn(j) : j.bTagged();
172 const bool btag = beff == 1 || (beff != 0 &&
rand01() < beff);
174 if (!btag && j.bTagged()) j.tags().erase(std::remove_if(j.tags().begin(), j.tags().end(),
hasBottom), j.tags().end());
175 if (btag && !j.bTagged()) j.tags().push_back(
Particle(PID::BQUARK, j.mom()));
177 const double ceff = _cTagEffFn ? _cTagEffFn(j) : j.cTagged();
178 const bool ctag = ceff == 1 || (ceff != 0 &&
rand01() < beff);
180 if (!ctag && j.cTagged()) j.tags().erase(std::remove_if(j.tags().begin(), j.tags().end(),
hasCharm), j.tags().end());
181 if (ctag && !j.cTagged()) j.tags().push_back(
Particle(PID::CQUARK, j.mom()));
187 Jets _jets()
const {
return _recojets; }
191 return getProjection<JetFinder>(
"TruthJets").
jetsByPt();
204 vector<JetEffSmearFn> _detFns;
void setName(const std::string &name)
Used by derived classes to set their name.
Definition: Projection.hh:142
Definition: MC_Cent_pPb.hh:10
void reset()
Reset the projection. Smearing functions will be unchanged.
Definition: SmearedJets.hh:195
function< double(const Jet &)> JetEffFn
Typedef for Jet efficiency functions/functors.
Definition: JetSmearingFunctions.hh:23
CmpState compare(const Projection &p) const
Compare to another SmearedJets.
Definition: SmearedJets.hh:122
Functor for simultaneous efficiency-filtering and smearing of Jets.
Definition: JetSmearingFunctions.hh:94
const FourMomentum & mom() const
Get equivalent single momentum four-vector (const) (alias).
Definition: ParticleBase.hh:39
Particles & particles()
Get the particles in this jet.
Definition: Jet.hh:47
#define MSG_DEBUG(x)
Debug messaging, not enabled by default, using MSG_LVL.
Definition: Logging.hh:195
double JET_BTAG_PERFECT(const Jet &j)
Return 1 if the given Jet contains a b, otherwise 0.
Definition: JetSmearingFunctions.hh:53
Particle representation, either from a HepMC::GenEvent or reconstructed.
Definition: Particle.hh:18
SmearedJets(const JetFinder &ja, const vector< JetEffSmearFn > &effSmearFns, const JetEffFn &bTagEffFn=JET_BTAG_PERFECT, const JetEffFn &cTagEffFn=JET_CTAG_PERFECT)
Constructor with an ordered vector of efficiency and smearing functions, plus optional tagging effici...
Definition: SmearedJets.hh:86
DEFAULT_RIVET_PROJ_CLONE(SmearedJets)
Clone on the heap.
size_t size() const
Count the jets.
Definition: JetFinder.hh:160
Representation of a HepMC event, and enabler of Projection caching.
Definition: Event.hh:22
Jets jetsByPt(const Cut &c=Cuts::open()) const
Definition: JetFinder.hh:125
Cmp< Projection > mkPCmp(const Projection &otherparent, const std::string &pname) const
void project(const Event &e)
Perform the jet finding & smearing calculation.
Definition: SmearedJets.hh:142
Abstract base class for projections which can return a set of Jets.
Definition: JetFinder.hh:15
bool hasBottom(int pid)
Does this particle contain a bottom quark?
Definition: ParticleIdUtils.hh:581
double JET_CTAG_PERFECT(const Jet &j)
Return 1 if the given Jet contains a c, otherwise 0.
Definition: JetSmearingFunctions.hh:57
bool hasCharm(int pid)
Does this particle contain a charm quark?
Definition: ParticleIdUtils.hh:579
SmearedJets(const JetFinder &ja, const JetSmearFn &smearFn, const JetEffFn &bTagEffFn, const JetEffFn &cTagEffFn, const JetEffFn &jetEffFn)
Constructor with trailing efficiency arg.
Definition: SmearedJets.hh:101
double pT() const
Get the directly (alias).
Definition: ParticleBase.hh:63
SmearedJets(const JetFinder &ja, const JetEffFn &bTagEffFn=JET_BTAG_PERFECT, const JetEffFn &cTagEffFn=JET_CTAG_PERFECT, const vector< JetEffSmearFn > &effSmearFns={})
Constructor with tagging efficiencies, plus an ordered vector of efficiency and smearing functions...
Definition: SmearedJets.hh:65
function< Jet(const Jet &)> JetSmearFn
Typedef for Jet smearing functions/functors.
Definition: JetSmearingFunctions.hh:20
const PROJ & declare(const PROJ &proj, const std::string &name)
Register a contained projection (user-facing version)
Definition: ProjectionApplier.hh:170
Particles & tags()
Particles which have been tag-matched to this jet.
Definition: Jet.hh:89
double eta() const
Get the directly (alias).
Definition: ParticleBase.hh:87
SmearedJets(const JetFinder &ja, const initializer_list< JetEffSmearFn > &effSmearFns, const JetEffFn &bTagEffFn=JET_BTAG_PERFECT, const JetEffFn &cTagEffFn=JET_CTAG_PERFECT)
Constructor with an ordered init-list of efficiency and smearing functions, plus optional tagging eff...
Definition: SmearedJets.hh:76
Representation of a clustered jet of particles.
Definition: Jet.hh:18
const Jets truthJets() const
Get the truth jets (sorted by pT)
Definition: SmearedJets.hh:190
Base class for all Rivet projections.
Definition: Projection.hh:29
SmearedJets(const JetFinder &ja, const JetSmearFn &smearFn, const JetEffFn &bTagEffFn=JET_BTAG_PERFECT, const JetEffFn &cTagEffFn=JET_CTAG_PERFECT)
Constructor with a reco efficiency and optional tagging efficiencies.
Definition: SmearedJets.hh:44
Wrapper projection for smearing Jets with detector resolutions and efficiencies.
Definition: SmearedJets.hh:35
double rand01()
Return a uniformly sampled random number between 0 and 1.
Cmp< T > cmp(const T &t1, const T &t2)
Global helper function for easy creation of Cmp objects.
Definition: Cmp.hh:255
SmearedJets(const JetFinder &ja, const JetEffFn &bTagEffFn=JET_BTAG_PERFECT, const JetEffFn &cTagEffFn=JET_CTAG_PERFECT, const initializer_list< JetEffSmearFn > &effSmearFns={})
Constructor with tagging efficiencies, plus an ordered init-list of efficiency and smearing functions...
Definition: SmearedJets.hh:55