Particle.cc
Go to the documentation of this file.
1 
10 #include <cmath>
11 
12 #include <boost/tuple/tuple_io.hpp>
13 
14 #include <utl/Particle.h>
15 #include <utl/ParticlePropertiesFactory.h>
16 #include <utl/NucleusProperties.h>
17 
18 #include <utl/CoordinateSystem.h>
19 #include <utl/ErrorLogger.h>
20 #include <utl/Math.h>
21 
22 using namespace utl;
23 
24 
25 Particle::Particle(const int type, const Source& source,
26  const Point& position, const Vector& direction,
27  const TimeInterval& time,
28  const double weight, const double kineticEnergy) :
29  fProperties(ParticlePropertiesFactory::Create(type)),
30  fSource(source),
31  fPosition(position),
32  fDirection(direction),
33  fTime(time),
34  fWeight(weight),
35  fKineticEnergy(kineticEnergy)
36 { }
37 
38 
39 Particle::Particle(const int type, const Source& source,
40  const Point& position, const Vector& momentum,
41  const TimeInterval& time,
42  const double weight) :
43  fProperties(ParticlePropertiesFactory::Create(type)),
44  fSource(source),
45  fPosition(position),
46  //fDirection
47  fTime(time),
48  fWeight(weight)
49 {
50  SetMomentum(momentum);
51 }
52 
53 
56  const
57 {
58  const double m = GetMass();
59  const double p = std::sqrt(Sqr(fKineticEnergy + m) - Sqr(m));
60  return p * fDirection;
61 }
62 
63 
64 void
66 {
67  fDirection = Normalized(momentum);
68  const double m = GetMass();
69  fKineticEnergy = std::sqrt(momentum.GetMag2() + Sqr(m)) - m;
70 }
71 
72 
73 int
74 Particle::NucleusCode(const int charge, const int atomicNumber)
75 {
76  return NucleusProperties::TypeCode(charge, atomicNumber);
77 }
constexpr T Sqr(const T &x)
Point object.
Definition: Point.h:32
double fKineticEnergy
Definition: Particle.h:170
static int NucleusCode(const int charge, const int atomicNumber)
Calculate particle type code for a given (A, Z)
Definition: Particle.cc:74
void SetMomentum(const utl::Vector &momentum)
Definition: Particle.cc:65
Particle(const int type, const Source &source, const Point &position, const Vector &direction, const TimeInterval &time, const double weight, const double kineticEnergy)
Constructor using kinetic energy.
Definition: Particle.cc:25
utl::Vector fDirection
Definition: Particle.h:166
AxialVector Normalized(const AxialVector &v)
Definition: AxialVector.h:81
Template for object factory.
Definition: ObjectFactory.h:71
static int TypeCode(const unsigned int charge, const unsigned int atomicNumber)
Calculate the particle type code from Z and A.
A TimeInterval is used to represent time elapsed between two events.
Definition: TimeInterval.h:43
double GetMass() const
Mass of the particle.
Definition: Particle.h:142
Vector object.
Definition: Vector.h:30
constexpr double m
Definition: AugerUnits.h:121
Vector GetMomentum() const
Vector giving particle momentum.
Definition: Particle.cc:55
double GetMag2() const
Definition: Vector.h:61

, generated on Tue Sep 26 2023.