Pandora
Pandora source code navigator
Loading...
Searching...
No Matches
MCParticle.cc
Go to the documentation of this file.
1
10
11#include <algorithm>
12
13namespace pandora
14{
15
17{
18 if (!m_pPfoTarget)
19 throw StatusCodeException(STATUS_CODE_NOT_INITIALIZED);
20
21 return m_pPfoTarget;
22}
23
24//------------------------------------------------------------------------------------------------------------------------------------------
25
26bool MCParticle::operator< (const MCParticle &rhs) const
27{
28 const CartesianVector deltaPosition(rhs.GetVertex() - this->GetVertex());
29
30 if (std::fabs(deltaPosition.GetZ()) > std::numeric_limits<float>::epsilon())
31 return (deltaPosition.GetZ() > std::numeric_limits<float>::epsilon());
32
33 if (std::fabs(deltaPosition.GetX()) > std::numeric_limits<float>::epsilon())
34 return (deltaPosition.GetX() > std::numeric_limits<float>::epsilon());
35
36 if (std::fabs(deltaPosition.GetY()) > std::numeric_limits<float>::epsilon())
37 return (deltaPosition.GetY() > std::numeric_limits<float>::epsilon());
38
39 return (this->GetEnergy() > rhs.GetEnergy());
40}
41
42//------------------------------------------------------------------------------------------------------------------------------------------
43
45 m_uid(parameters.m_pParentAddress.Get()),
46 m_energy(parameters.m_energy.Get()),
47 m_momentum(parameters.m_momentum.Get()),
48 m_vertex(parameters.m_vertex.Get()),
49 m_endpoint(parameters.m_endpoint.Get()),
50 m_innerRadius(parameters.m_vertex.Get().GetMagnitude()),
51 m_outerRadius(parameters.m_endpoint.Get().GetMagnitude()),
52 m_particleId(parameters.m_particleId.Get()),
53 m_mcParticleType(parameters.m_mcParticleType.Get()),
54 m_pPfoTarget(nullptr)
55{
56}
57
58//------------------------------------------------------------------------------------------------------------------------------------------
59
63
64//------------------------------------------------------------------------------------------------------------------------------------------
65
67{
68 if (m_daughterList.end() != std::find(m_daughterList.begin(), m_daughterList.end(), pMCParticle))
69 return STATUS_CODE_ALREADY_PRESENT;
70
71 m_daughterList.push_back(pMCParticle);
72 return STATUS_CODE_SUCCESS;
73}
74
75//------------------------------------------------------------------------------------------------------------------------------------------
76
78{
79 if (m_parentList.end() != std::find(m_parentList.begin(), m_parentList.end(), pMCParticle))
80 return STATUS_CODE_ALREADY_PRESENT;
81
82 m_parentList.push_back(pMCParticle);
83 return STATUS_CODE_SUCCESS;
84}
85
86//------------------------------------------------------------------------------------------------------------------------------------------
87
89{
90 MCParticleList::iterator iter = std::find(m_daughterList.begin(), m_daughterList.end(), pMCParticle);
91
92 if (m_daughterList.end() == iter)
93 return STATUS_CODE_NOT_FOUND;
94
95 m_daughterList.erase(iter);
96 return STATUS_CODE_SUCCESS;
97}
98
99//------------------------------------------------------------------------------------------------------------------------------------------
100
102{
103 MCParticleList::iterator iter = std::find(m_parentList.begin(), m_parentList.end(), pMCParticle);
104
105 if (m_parentList.end() == iter)
106 return STATUS_CODE_NOT_FOUND;
107
108 m_parentList.erase(iter);
109 return STATUS_CODE_SUCCESS;
110}
111
112//------------------------------------------------------------------------------------------------------------------------------------------
113
115{
116 if (!pMCParticle)
117 return STATUS_CODE_FAILURE;
118
119 m_pPfoTarget = pMCParticle;
120 return STATUS_CODE_SUCCESS;
121}
122
123//------------------------------------------------------------------------------------------------------------------------------------------
124
126{
127 m_pPfoTarget = nullptr;
128 return STATUS_CODE_SUCCESS;
129}
130
131} // namespace pandora
Header file for the mc particle class.
CartesianVector class.
float GetX() const
Get the cartesian x coordinate.
float GetZ() const
Get the cartesian z coordinate.
float GetY() const
Get the cartesian y coordinate.
MCParticle class.
Definition MCParticle.h:26
StatusCode AddDaughter(const MCParticle *const pMCParticle)
Add daughter particle.
Definition MCParticle.cc:66
MCParticle(const object_creation::MCParticle::Parameters &parameters)
Constructor.
Definition MCParticle.cc:44
StatusCode RemoveDaughter(const MCParticle *const pMCParticle)
Remove daughter particle.
Definition MCParticle.cc:88
float GetEnergy() const
Get energy of mc particle, units GeV.
Definition MCParticle.h:243
MCParticleList m_daughterList
The list of mc daughter particles.
Definition MCParticle.h:205
const MCParticle * GetPfoTarget() const
Get pfo target particle.
Definition MCParticle.cc:16
StatusCode AddParent(const MCParticle *const pMCParticle)
Add parent particle.
Definition MCParticle.cc:77
virtual ~MCParticle()
Destructor.
Definition MCParticle.cc:60
StatusCode SetPfoTarget(const MCParticle *const pMCParticle)
Set pfo target particle.
const MCParticle * m_pPfoTarget
The address of the pfo target.
Definition MCParticle.h:204
StatusCode RemoveParent(const MCParticle *const pMCParticle)
Remove parent particle.
bool operator<(const MCParticle &rhs) const
operator< sorting by vertex position, then energy
Definition MCParticle.cc:26
const CartesianVector & GetVertex() const
Get the production vertex of the mc particle, units mm.
Definition MCParticle.h:257
StatusCode RemovePfoTarget()
Remove pfo target particle.
MCParticleList m_parentList
The list of mc parent particles.
Definition MCParticle.h:206
StatusCodeException class.
StatusCode
The StatusCode enum.