Rivet  3.1.3
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 
8 namespace 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; }
27  inline double P4_FN0(const FourMomentum& ) { return 0; }
28 
30  inline double P4_EFF_ONE(const FourMomentum& ) { return 1; }
32  inline double P4_FN1(const FourMomentum& ) { return 1; }
33 
35  struct P4_EFF_CONST {
36  P4_EFF_CONST(double x) : _x(x) {}
37  double operator () (const FourMomentum& ) const { return _x; }
38  double _x;
39  };
40 
41 
43  inline FourMomentum P4_SMEAR_IDENTITY(const FourMomentum& p) { return p; }
45  inline FourMomentum P4_SMEAR_PERFECT(const FourMomentum& p) { return p; }
46 
49  inline FourMomentum P4_SMEAR_E_GAUSS(const FourMomentum& p, double resolution) {
50  const double mass = p.mass2() > 0 ? p.mass() : 0; //< numerical carefulness...
51  const double smeared_E = max(randnorm(p.E(), resolution), mass); //< can't let the energy go below the mass!
52  return FourMomentum::mkEtaPhiME(p.eta(), p.phi(), mass, smeared_E);
53  }
54 
56  inline FourMomentum P4_SMEAR_PT_GAUSS(const FourMomentum& p, double resolution) {
57  const double smeared_pt = max(randnorm(p.pT(), resolution), 0.);
58  const double mass = p.mass2() > 0 ? p.mass() : 0; //< numerical carefulness...
59  return FourMomentum::mkEtaPhiMPt(p.eta(), p.phi(), mass, smeared_pt);
60  }
61 
63  inline FourMomentum P4_SMEAR_MASS_GAUSS(const FourMomentum& p, double resolution) {
64  const double smeared_mass = max(randnorm(p.mass(), resolution), 0.);
65  return FourMomentum::mkEtaPhiMPt(p.eta(), p.phi(), smeared_mass, p.pT());
66  }
67 
69 
70 
71 
74 
76  inline double P3_EFF_ZERO(const Vector3& p) { return 0; }
78  inline double P3_FN0(const Vector3& p) { return 0; }
79 
81  inline double P3_EFF_ONE(const Vector3& p) { return 1; }
83  inline double P3_FN1(const Vector3& p) { return 1; }
84 
86  struct P3_EFF_CONST {
87  P3_EFF_CONST(double x) : _x(x) {}
88  double operator () (const Vector3& ) const { return _x; }
89  double _x;
90  };
91 
92 
94  inline Vector3 P3_SMEAR_IDENTITY(const Vector3& p) { return p; }
96  inline Vector3 P3_SMEAR_PERFECT(const Vector3& p) { return p; }
97 
99  inline Vector3 P3_SMEAR_LEN_GAUSS(const Vector3& p, double resolution) {
100  const double smeared_mod = max(randnorm(p.mod(), resolution), 0.); //< can't let the energy go below the mass!
101  return smeared_mod * p.unit();
102  }
103 
105 
107 
108 }
109 
110 #endif
Definition: MC_Cent_pPb.hh:10
double pT() const
Calculate the transverse momentum .
Definition: Vector4.hh:628
Take a Vector3 and return a constant number.
Definition: MomentumSmearingFunctions.hh:86
double eta() const
Synonym for pseudorapidity.
Definition: Vector4.hh:152
double P3_EFF_ONE(const Vector3 &p)
Take a Vector3 and return 1.
Definition: MomentumSmearingFunctions.hh:81
FourMomentum P4_SMEAR_PERFECT(const FourMomentum &p)
Alias for P4_SMEAR_IDENTITY.
Definition: MomentumSmearingFunctions.hh:45
double P4_FN1(const FourMomentum &)
Definition: MomentumSmearingFunctions.hh:32
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:783
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:778
double mass2() const
Get the squared mass (the Lorentz self-invariant).
Definition: Vector4.hh:572
Take a FourMomentum and return a constant number.
Definition: MomentumSmearingFunctions.hh:35
double P4_EFF_ZERO(const FourMomentum &)
Take a FourMomentum and return 0.
Definition: MomentumSmearingFunctions.hh:25
FourMomentum P4_SMEAR_MASS_GAUSS(const FourMomentum &p, double resolution)
Smear a FourMomentum&#39;s mass using a Gaussian of absolute width resolution.
Definition: MomentumSmearingFunctions.hh:63
Vector3 P3_SMEAR_IDENTITY(const Vector3 &p)
Take a Vector3 and return it unmodified.
Definition: MomentumSmearingFunctions.hh:94
double P3_EFF_ZERO(const Vector3 &p)
Take a Vector3 and return 0.
Definition: MomentumSmearingFunctions.hh:76
std::enable_if< std::is_arithmetic< N1 >::value &&std::is_arithmetic< N2 >::value, typename std::common_type< N1, N2 >::type >::type max(N1 a, N2 b)
Get the maximum of two numbers.
Definition: MathUtils.hh:111
double P4_FN0(const FourMomentum &)
Definition: MomentumSmearingFunctions.hh:27
FourMomentum P4_SMEAR_E_GAUSS(const FourMomentum &p, double resolution)
Definition: MomentumSmearingFunctions.hh:49
double mass() const
Get the mass (the Lorentz self-invariant).
Definition: Vector4.hh:561
FourMomentum P4_SMEAR_PT_GAUSS(const FourMomentum &p, double resolution)
Smear a FourMomentum&#39;s transverse momentum using a Gaussian of absolute width resolution.
Definition: MomentumSmearingFunctions.hh:56
std::function< double(const FourMomentum &)> P4EffFn
Typedef for FourMomentum efficiency functions/functors.
Definition: MomentumSmearingFunctions.hh:21
double E() const
Get energy (time component of momentum).
Definition: Vector4.hh:538
double P3_FN0(const Vector3 &p)
Definition: MomentumSmearingFunctions.hh:78
Vector3 unit() const
Synonym for unitVec.
Definition: Vector3.hh:105
double P4_EFF_ONE(const FourMomentum &)
Take a FourMomentum and return 1.
Definition: MomentumSmearingFunctions.hh:30
FourMomentum P4_SMEAR_IDENTITY(const FourMomentum &p)
Take a FourMomentum and return it unmodified.
Definition: MomentumSmearingFunctions.hh:43
Vector3 P3_SMEAR_LEN_GAUSS(const Vector3 &p, double resolution)
Smear a Vector3&#39;s length using a Gaussian of absolute width resolution.
Definition: MomentumSmearingFunctions.hh:99
double phi(const PhiMapping mapping=ZERO_2PI) const
Synonym for azimuthalAngle.
Definition: Vector4.hh:134
Three-dimensional specialisation of Vector.
Definition: Vector3.hh:26
Vector3 P3_SMEAR_PERFECT(const Vector3 &p)
Alias for P3_SMEAR_IDENTITY.
Definition: MomentumSmearingFunctions.hh:96
double P3_FN1(const Vector3 &p)
Definition: MomentumSmearingFunctions.hh:83
Specialized version of the FourVector with momentum/energy functionality.
Definition: Vector4.hh:301
double mod() const
Calculate the modulus of a vector. .
Definition: VectorN.hh:95
std::function< FourMomentum(const FourMomentum &)> P4SmearFn
Typedef for FourMomentum smearing functions/functors.
Definition: MomentumSmearingFunctions.hh:18
double randnorm(double loc, double scale)
Return a random number sampled from a Gaussian/normal distribution.