2#ifndef RIVET_Hemispheres_HH
3#define RIVET_Hemispheres_HH
5#include "Rivet/Projections/FinalState.hh"
6#include "Rivet/Projections/AxesDefinition.hh"
70 using Projection::operator =;
80 _highMassEqMaxBroad =
true;
84 void calc(
const Vector3& n,
const std::vector<FourMomentum>& p4s);
107 double E2vis()
const {
return _E2vis; }
108 double Evis()
const {
return sqrt(_E2vis); }
110 double M2high()
const {
return _M2high; }
111 double Mhigh()
const {
return sqrt(M2high()); }
113 double M2low()
const {
return _M2low; }
114 double Mlow()
const {
return sqrt(M2low()); }
116 double M2diff()
const {
return _M2high -_M2low; }
117 double Mdiff()
const {
return sqrt(M2diff()); }
119 double M2sum()
const {
return _M2high +_M2low; }
120 double Msum()
const {
return sqrt(M2sum()); }
122 double scaledM2high()
const {
123 if (
isZero(_M2high))
return 0.0;
124 if (!
isZero(_E2vis))
return _M2high/_E2vis;
125 else return std::numeric_limits<double>::max();
127 double scaledMhigh()
const {
return sqrt(scaledM2high()); }
129 double scaledM2low()
const {
130 if (
isZero(_M2low))
return 0.0;
131 if (!
isZero(_E2vis))
return _M2low/_E2vis;
132 else return std::numeric_limits<double>::max();
134 double scaledMlow()
const {
return sqrt(scaledM2low()); }
136 double scaledM2diff()
const {
137 if (M2diff() == 0.0)
return 0.0;
138 if (_E2vis != 0.0)
return M2diff()/_E2vis;
139 else return std::numeric_limits<double>::max();
141 double scaledMdiff()
const {
return sqrt(scaledM2diff()); }
147 double Bmax()
const {
return _Bmax; }
148 double Bmin()
const {
return _Bmin; }
149 double Bsum()
const {
return _Bmax + _Bmin; }
150 double Bdiff()
const {
return fabs(_Bmax - _Bmin); }
156 return _highMassEqMaxBroad;
161 return _highMassDirection;
171 double _M2high, _M2low;
177 bool _highMassEqMaxBroad;
180 bool _highMassDirection;
Base class for projections which define a spatial basis.
Definition AxesDefinition.hh:19
Representation of a HepMC event, and enabler of Projection caching.
Definition Event.hh:22
Calculate the hemisphere masses and broadenings.
Definition Hemispheres.hh:56
RIVET_DEFAULT_PROJ_CLONE(Hemispheres)
Clone on the heap.
void project(const Event &e)
Perform the projection on the Event.
void calc(const Vector3 &n, const Jets &jets)
Use the projection manually (i.e. outside the projection mechanism) with jet inputs.
void calc(const Vector3 &n, const std::vector< FourMomentum > &p4s)
Use the projection manually (i.e. outside the projection mechanism) with raw 4-momentum inputs.
Hemispheres(const AxesDefinition &ax)
Constructor.
Definition Hemispheres.hh:60
void clear()
Reset the projection.
Definition Hemispheres.hh:74
bool massMatchesBroadening() const
Is the hemisphere with the max mass the same as the one with the max broadening?
Definition Hemispheres.hh:155
CmpState compare(const Projection &p) const
Compare with other projections.
Definition Hemispheres.hh:97
void calc(const Vector3 &n, const Particles &particles)
Use the projection manually (i.e. outside the projection mechanism) with particle inputs.
bool highMassDirection() const
Is the hemisphere with the max mass the one in the direction of the axis.
Definition Hemispheres.hh:160
Specialised vector of Jet objects.
Definition Jet.hh:21
Specialised vector of Particle objects.
Definition Particle.hh:21
const PROJ & declare(const PROJ &proj, const std::string &name) const
Register a contained projection (user-facing version)
Definition ProjectionApplier.hh:175
Base class for all Rivet projections.
Definition Projection.hh:29
void setName(const std::string &name)
Used by derived classes to set their name.
Definition Projection.hh:148
Cmp< Projection > mkNamedPCmp(const Projection &otherparent, const std::string &pname) const
Three-dimensional specialisation of Vector.
Definition Vector3.hh:40
Definition MC_CENT_PPB_Projections.hh:10
std::enable_if_t< std::is_floating_point_v< NUM >, bool > isZero(NUM val, double tolerance=1e-8)
Compare a number to zero.
Definition MathUtils.hh:24