HackAnalysis  2
Particle.h
1 // -*- C++ -*-
2 //
3 // This file is part of HEPUtils -- https://bitbucket.org/andybuckley/heputils
4 // Copyright (C) 2013-2018 Andy Buckley <andy.buckley@cern.ch>
5 //
6 // Embedding of HEPUtils code in other projects is permitted provided this
7 // notice is retained and the HEPUtils namespace and include path are changed.
8 //
9 
10 // Duly: HEPUtils namespace changed to HEP
11 // Some additional code by Mark Goodsell: added 3*charge property, production and decay vertices
12 
13 #pragma once
14 
15 #include "MathUtils.h"
16 #include "Vectors.h"
17 
18 namespace HEP {
19 
20 
24  class Particle {
25  private:
26 
28 
29  P4 _p4;
32  int _pdgId;
34  bool _prompt;
35  bool _decays;
36  // Production vertex
37  P4 _prod_vertex;
38  // Decay vertex
39  P4 _decay_vertex;
40  // /// Isolation value
41  // double _isol4;
43  int _3Q; // 3*charge ...
44 
45 
46 
47  public:
48 
50 
51 
54  : _pdgId(0), _3Q(0), _prompt(false), _decays(false), _prod_vertex(), _decay_vertex() { } //, _isol4(0.0) { }
55 
57  Particle(double px, double py, double pz, double E, int pdgid)
58  : _p4(px, py, pz, E), _pdgId(pdgid), _3Q(0), _prompt(false), _decays(false), _prod_vertex(), _decay_vertex() { } //, _isol4(0.0) { }
59 
62  // Particle(double px, double py, double pz, int pdgid)
63  // : _p4(px, py, pz), _pdgId(pdgid), _prompt(false), _isol4(0.0) { }
64 
66  Particle(const P4& mom, int pdgid)
67  : _p4(mom), _pdgId(pdgid),_3Q(0), _prompt(false), _decays(false), _prod_vertex(), _decay_vertex() { } //, _isol4(0.0) { }
68 
70  Particle(const Particle& p)
71  : _p4(p.mom()), _pdgId(p.pid()), _3Q(p.get_3Q()), _prompt(p.is_prompt()), _decays(p.does_decay()), _prod_vertex(p.prod_vertex()), _decay_vertex(p.decay_vertex()) { } //, _isol4(p.isol()) { }
72 
74  Particle(const Particle* p)
75  : _p4(p->mom()), _pdgId(p->pid()), _3Q(p->get_3Q()), _prompt(p->is_prompt()), _decays(p->does_decay()), _prod_vertex(p->prod_vertex()), _decay_vertex(p->decay_vertex()) { } //, _isol4(p->isol()) { }
76 
79  _p4 = p.mom();
80  _pdgId = p.pid();
81  _3Q = p.get_3Q();
82  _prompt = p.is_prompt();
83  _decays= p.does_decay();
84  _prod_vertex = p.prod_vertex();
85  _decay_vertex = p.decay_vertex();
86  //_isol4 = p.isol();
87  return *this;
88  }
89 
91 
92 
94 
95 
96  operator const P4& () const { return mom(); }
97 
98  operator const P4* () const { return &mom(); }
99 
101 
102 
106 
107 
109  const P4& mom() const { return _p4; }
110 
111 
113  void set_mom(const P4& p4) { _p4 = p4; }
114 
115  // method to translate the vectors, useful for pileup
116  void translate_zt(double dz, double dt)
117  {
118  _prod_vertex.translate_zt(dz,dt);
119  if(_decays)
120  {
121  _decay_vertex.translate_zt(dz,dt);
122  }
123 
124  }
125  // production and decay vertices
126  const P4& prod_vertex() const { return _prod_vertex; }
127  const P4& decay_vertex() const { return _decay_vertex; }
128 
129  void set_prod(const P4& p4) { _prod_vertex = p4; }
130  void set_decay(const P4& p4) { _decay_vertex = p4; _decays=true;}
131  //void does_decay(bool doesit) { _decays = doesit; }
132  bool does_decay() const { return _decays; }
133 
134  void set_3Q(int qqq) {_3Q = qqq;}
135  int get_3Q() const { return _3Q;}
136 
138  double mass() { return _p4.m(); }
140  void set_mass(double mass) { _p4.setM(mass); }
141 
142 
144  double eta() const { return mom().eta(); }
145 
147  double abseta() const { return mom().abseta(); }
148 
150  double rap() const { return mom().rap(); }
151 
153  double absrap() const { return mom().absrap(); }
154 
156  double phi() const { return mom().phi(); }
157 
159  double E() const { return mom().E(); }
160 
162  double pT2() const { return mom().pT2(); }
163 
165  double pT() const { return mom().pT(); }
166 
167  double p() const { return mom().p();}
168 
170 
171 
173 
174 
176  bool is_prompt() const { return _prompt; }
178  void set_prompt(bool isprompt=true) { _prompt = isprompt; }
179 
181 
182 
184 
185 
187  int pid() const { return _pdgId; }
189  int abspid() const { return abs(_pdgId); }
191  void set_pid(int pid) { _pdgId = pid; }
192 
194 
195 
196  // /// @name Isolation of particle
197  // //@{
198 
199  // /// Get isolation
200  // double isol() const { return _isol4;}
201  // void set_isol(double isol) { _isol4 = isol;}
202 
203  // //@}
204 
205 
206  };
207 
208 
209 }
A 4-momentum class for vectors.
Definition: Vectors.h:45
double eta() const
Get the spatial vector pseudorapidity.
Definition: Vectors.h:465
double absrap() const
Get the 4-momentum absolute rapidity.
Definition: Vectors.h:471
double pT() const
Get the transverse momentum (same as rho)
Definition: Vectors.h:453
double phi() const
Get the spatial phi.
Definition: Vectors.h:461
double m() const
Get m.
Definition: Vectors.h:414
double pT2() const
Get the transverse momentum squared (same as rho2)
Definition: Vectors.h:451
double abseta() const
Get the spatial vector absolute pseudorapidity.
Definition: Vectors.h:467
P4 & setM(double mass)
Set the mass // Mark: preserve momentum, update energy.
Definition: Vectors.h:174
double rap() const
Get the 4-momentum rapidity.
Definition: Vectors.h:469
double p() const
Get the spatial 3-vector |p|.
Definition: Vectors.h:443
Definition: Particle.h:24
int pid() const
Get PDG ID code.
Definition: Particle.h:187
void set_mom(const P4 &p4)
Set the 4 vector.
Definition: Particle.h:113
Particle & operator=(const Particle &p)
Copy assignment operator.
Definition: Particle.h:78
double rap() const
Get the rapidity.
Definition: Particle.h:150
double abseta() const
Get the abs pseudorapidity.
Definition: Particle.h:147
Particle()
Default constructor.
Definition: Particle.h:53
void set_pid(int pid)
Set PDG ID code.
Definition: Particle.h:191
const P4 & mom() const
Get the 4 vector.
Definition: Particle.h:109
void set_mass(double mass)
Set the mass (of the 4 vector)
Definition: Particle.h:140
Particle(const Particle &p)
Copy constructor.
Definition: Particle.h:70
double pT2() const
Get the squared transverse momentum.
Definition: Particle.h:162
void set_prompt(bool isprompt=true)
Set promptness.
Definition: Particle.h:178
double absrap() const
Get the abs rapidity.
Definition: Particle.h:153
double eta() const
Get the pseudorapidity.
Definition: Particle.h:144
Particle(const Particle *p)
Copy constructor from a pointer.
Definition: Particle.h:74
double E() const
Get the energy.
Definition: Particle.h:159
int abspid() const
Get abs PDG ID code.
Definition: Particle.h:189
double pT() const
Get the squared transverse momentum.
Definition: Particle.h:165
double mass()
Get the mass (of the 4 vector)
Definition: Particle.h:138
double phi() const
Get the azimuthal angle.
Definition: Particle.h:156
bool is_prompt() const
Is this particle connected to the hard process or from a hadron/tau decay?
Definition: Particle.h:176
Particle(double px, double py, double pz, double E, int pdgid)
"Cartesian" constructor
Definition: Particle.h:57
Particle(const P4 &mom, int pdgid)
4-mom + PDG ID constructor
Definition: Particle.h:66
Modified by Mark Goodsell goodsell@lpthe.jussieu.fr
Definition: ATLAS_SUSY_2018_16.cc:27