rivet is hosted by Hepforge, IPPP Durham
Rivet 4.0.0
MomentumSmearingFunctions.hh
1// -*- C++ -*-
2#ifndef RIVET_MomentumSmearingFunctions_HH
3#define RIVET_MomentumSmearingFunctions_HH
4
5#include "Rivet/Math/Vector4.hh"
6#include "Rivet/Tools/Random.hh"
7
8namespace Rivet {
9
10
13
16
18 typedef std::function<FourMomentum(const FourMomentum&)> P4SmearFn;
19
21 typedef std::function<double(const FourMomentum&)> P4EffFn;
22
23
25 inline double P4_EFF_ZERO(const FourMomentum& ) { return 0; }
26
28 inline double P4_EFF_ONE(const FourMomentum& ) { return 1; }
29
31 struct P4_EFF_CONST {
32 P4_EFF_CONST(double x) : _x(x) {}
33 double operator () (const FourMomentum& ) const { return _x; }
34 double _x;
35 };
36
37
39 inline FourMomentum P4_SMEAR_IDENTITY(const FourMomentum& p) { return p; }
41 inline FourMomentum P4_SMEAR_PERFECT(const FourMomentum& p) { return p; }
42
45 inline FourMomentum P4_SMEAR_E_GAUSS(const FourMomentum& p, double resolution) {
46 const double mass = p.mass2() > 0 ? p.mass() : 0; //< numerical carefulness...
47 const double smeared_E = max(randnorm(p.E(), resolution), mass); //< can't let the energy go below the mass!
48 return FourMomentum::mkEtaPhiME(p.eta(), p.phi(), mass, smeared_E);
49 }
50
52 inline FourMomentum P4_SMEAR_PT_GAUSS(const FourMomentum& p, double resolution) {
53 const double smeared_pt = max(randnorm(p.pT(), resolution), 0.);
54 const double mass = p.mass2() > 0 ? p.mass() : 0; //< numerical carefulness...
55 return FourMomentum::mkEtaPhiMPt(p.eta(), p.phi(), mass, smeared_pt);
56 }
57
59 inline FourMomentum P4_SMEAR_MASS_GAUSS(const FourMomentum& p, double resolution) {
60 const double smeared_mass = max(randnorm(p.mass(), resolution), 0.);
61 return FourMomentum::mkEtaPhiMPt(p.eta(), p.phi(), smeared_mass, p.pT());
62 }
63
65
66
67
70
72 inline double P3_EFF_ZERO(const Vector3&) { return 0; }
73
75 inline double P3_EFF_ONE(const Vector3&) { return 1; }
76
78 struct P3_EFF_CONST {
79 P3_EFF_CONST(double x) : _x(x) {}
80 double operator () (const Vector3& ) const { return _x; }
81 double _x;
82 };
83
84
86 inline Vector3 P3_SMEAR_IDENTITY(const Vector3& p) { return p; }
88 inline Vector3 P3_SMEAR_PERFECT(const Vector3& p) { return p; }
89
91 inline Vector3 P3_SMEAR_LEN_GAUSS(const Vector3& p, double resolution) {
92 const double smeared_mod = max(randnorm(p.mod(), resolution), 0.); //< can't let the energy go below the mass!
93 return smeared_mod * p.unit();
94 }
95
97
99
100}
101
102#endif
Specialized version of the FourVector with momentum/energy functionality.
Definition Vector4.hh:316
static FourMomentum mkEtaPhiME(double eta, double phi, double mass, double E)
Make a vector from (eta,phi,energy) coordinates and the mass.
Definition Vector4.hh:757
static FourMomentum mkEtaPhiMPt(double eta, double phi, double mass, double pt)
Make a vector from (eta,phi,pT) coordinates and the mass.
Definition Vector4.hh:762
Three-dimensional specialisation of Vector.
Definition Vector3.hh:40
double mass(const FourMomentum &a, const FourMomentum &b)
Calculate mass of two 4-vectors.
Definition Vector4.hh:1461
std::function< double(const FourMomentum &)> P4EffFn
Typedef for FourMomentum efficiency functions/functors.
Definition MomentumSmearingFunctions.hh:21
double P4_EFF_ONE(const FourMomentum &)
Take a FourMomentum and return 1.
Definition MomentumSmearingFunctions.hh:28
FourMomentum P4_SMEAR_IDENTITY(const FourMomentum &p)
Take a FourMomentum and return it unmodified.
Definition MomentumSmearingFunctions.hh:39
FourMomentum P4_SMEAR_E_GAUSS(const FourMomentum &p, double resolution)
Definition MomentumSmearingFunctions.hh:45
Vector3 P3_SMEAR_PERFECT(const Vector3 &p)
Alias for P3_SMEAR_IDENTITY.
Definition MomentumSmearingFunctions.hh:88
FourMomentum P4_SMEAR_PERFECT(const FourMomentum &p)
Alias for P4_SMEAR_IDENTITY.
Definition MomentumSmearingFunctions.hh:41
Vector3 P3_SMEAR_IDENTITY(const Vector3 &p)
Take a Vector3 and return it unmodified.
Definition MomentumSmearingFunctions.hh:86
double P3_EFF_ZERO(const Vector3 &)
Take a Vector3 and return 0.
Definition MomentumSmearingFunctions.hh:72
FourMomentum P4_SMEAR_MASS_GAUSS(const FourMomentum &p, double resolution)
Smear a FourMomentum's mass using a Gaussian of absolute width resolution.
Definition MomentumSmearingFunctions.hh:59
std::function< FourMomentum(const FourMomentum &)> P4SmearFn
Typedef for FourMomentum smearing functions/functors.
Definition MomentumSmearingFunctions.hh:18
double P4_EFF_ZERO(const FourMomentum &)
Take a FourMomentum and return 0.
Definition MomentumSmearingFunctions.hh:25
Vector3 P3_SMEAR_LEN_GAUSS(const Vector3 &p, double resolution)
Smear a Vector3's length using a Gaussian of absolute width resolution.
Definition MomentumSmearingFunctions.hh:91
double P3_EFF_ONE(const Vector3 &)
Take a Vector3 and return 1.
Definition MomentumSmearingFunctions.hh:75
FourMomentum P4_SMEAR_PT_GAUSS(const FourMomentum &p, double resolution)
Smear a FourMomentum's transverse momentum using a Gaussian of absolute width resolution.
Definition MomentumSmearingFunctions.hh:52
Definition MC_CENT_PPB_Projections.hh:10
std::enable_if< std::is_arithmetic< N1 >::value &&std::is_arithmetic< N2 >::value, typenamestd::common_type< N1, N2 >::type >::type max(N1 a, N2 b)
Get the maximum of two numbers.
Definition MathUtils.hh:111
double randnorm(double loc, double scale)
Return a random number sampled from a Gaussian/normal distribution.
Take a Vector3 and return a constant number.
Definition MomentumSmearingFunctions.hh:78
Take a FourMomentum and return a constant number.
Definition MomentumSmearingFunctions.hh:31