5#include "Rivet/Config/RivetCommon.hh"
6#include "Rivet/Particle.hh"
7#include "Rivet/Projection.hh"
29 Event(
const GenEvent* ge,
const vector<size_t>& indices = {},
bool strip =
false)
30 : _weightIndices(indices), _genevent_original(ge) {
33 if ( strip ) _strip(_genevent);
39 Event(
const GenEvent& ge,
const vector<size_t>& indices = {},
bool strip =
false)
40 : _weightIndices(indices), _genevent_original(&ge), _genevent(ge) {
41 if ( strip ) _strip(_genevent);
47 : _weightIndices(e._weightIndices),
48 _genevent_original(e._genevent_original),
49 _genevent(e._genevent) { }
58 const GenEvent*
genEvent()
const {
return &_genevent; }
91 template <
typename FN>
103 DEPRECATED(
"Event weight does not need to be included anymore. For compatibility, it's always == 1 now.")
123 template <
typename PROJ>
125 static bool docaching =
getEnvParam(
"RIVET_CACHE_PROJECTIONS",
true);
127 MSG_TRACE(
"Applying projection " << &
p <<
" (" <<
p.name() <<
") -> comparing to projections " << _projections);
132 std::set<const Projection*>::const_iterator old = std::begin(_projections);
133 std::uintptr_t recpp =
reinterpret_cast<std::uintptr_t
>(cpp);
134 for (; old != _projections.end(); ++old)
135 if (
reinterpret_cast<std::uintptr_t
>(*old) == recpp)
break;
136 if (old != _projections.end()) {
137 MSG_TRACE(
"Equivalent projection found -> returning already-run projection " << *old);
139 return pcast<PROJ>(pRef);
141 MSG_TRACE(
"No equivalent projection in the already-run list -> projecting now");
143 MSG_TRACE(
"Applying projection " << &
p <<
" (" <<
p.name() <<
") WITHOUT projection caching & comparison");
149 if (docaching) _projections.insert(pp);
155 template <
typename PROJ>
157 if (!pp)
throw Error(
"Event::applyProjection(PROJ*): Projection pointer is null.");
170 void _init(
const GenEvent& ge);
174 void _strip(GenEvent & ge);
187 const std::vector<size_t> _weightIndices;
195 const GenEvent* _genevent_original;
206 mutable GenEvent _genevent;
213 mutable std::set<ConstProjectionPtr> _projections;
216 mutable std::valarray<double> _weights;
219 mutable std::vector<std::pair<double,double>> _xsecs;
Representation of a HepMC event, and enabler of Projection caching.
Definition Event.hh:22
const PROJ & applyProjection(PROJ &p) const
Add a projection p to this Event.
Definition Event.hh:124
const PROJ & applyProjection(PROJ *pp) const
Add a projection p to this Event by pointer.
Definition Event.hh:156
double weight() const
Obsolete weight method. Always returns 1 now.
Definition Event.hh:104
double asqrtS() const
Get the beam centre-of-mass energy per nucleon.
Event(const GenEvent &ge, const vector< size_t > &indices={}, bool strip=false)
Definition Event.hh:39
double sqrtS() const
Get the beam centre-of-mass energy.
Particles allParticles(const Cut &c) const
All the raw GenEvent particles, wrapped in Rivet::Particle objects, but with a Cut applied.
Definition Event.hh:84
Event(const Event &e)
Copy constructor.
Definition Event.hh:46
Particles allParticles(const FN &f) const
All the raw GenEvent particles, wrapped in Rivet::Particle objects, but with a selection function app...
Definition Event.hh:92
const Particles & allParticles() const
All the raw GenEvent particles, wrapped in Rivet::Particle objects.
Event(const GenEvent *ge, const vector< size_t > &indices={}, bool strip=false)
Constructor from a HepMC GenEvent pointer.
Definition Event.hh:29
const GenEvent * originalGenEvent() const
The generated event obtained from an external event generator.
Definition Event.hh:61
const GenEvent * genEvent() const
The generated event obtained from an external event generator.
Definition Event.hh:58
std::valarray< double > weights() const
The generation weights associated with the event.
std::vector< std::pair< double, double > > crossSections() const
The generation cross-sections associated with the event.
ParticlePair beams() const
Get the beam particles.
Logging system for controlled & formatted writing to stdout.
Definition Logging.hh:10
Specialised vector of Particle objects.
Definition Particle.hh:25
Base class for all Rivet projections.
Definition Projection.hh:29
virtual void project(const Event &e)=0
Jets filter_select(const Jets &jets, const Cut &c)
Filter a jet collection in-place to the subset that passes the supplied Cut.
Definition JetUtils.hh:157
#define MSG_TRACE(x)
Lowest-level, most verbose messaging, using MSG_LVL.
Definition Logging.hh:193
double p(const ParticleBase &p)
Unbound function access to p.
Definition ParticleBaseUtils.hh:684
T getEnvParam(const std::string name, const T &fallback)
Get a parameter from a named environment variable, with automatic type conversion.
Definition Utils.hh:815
Definition MC_Cent_pPb.hh:10
std::pair< Particle, Particle > ParticlePair
Typedef for a pair of Particle objects.
Definition Particle.hh:42
Generic runtime Rivet error.
Definition Exceptions.hh:12