Pandora
Pandora source code navigator
Loading...
Searching...
No Matches
ParticleFlowObjectManager.cc
Go to the documentation of this file.
1
10
12
14
15#include <algorithm>
16
17namespace pandora
18{
19
25
26//------------------------------------------------------------------------------------------------------------------------------------------
27
32
33//------------------------------------------------------------------------------------------------------------------------------------------
34
37{
38 pPfo = nullptr;
39
40 try
41 {
43 throw StatusCodeException(STATUS_CODE_NOT_ALLOWED);
44
45 NameToListMap::iterator iter = m_nameToListMap.find(m_currentListName);
46
47 if (m_nameToListMap.end() == iter)
48 throw StatusCodeException(STATUS_CODE_NOT_INITIALIZED);
49
50 PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, factory.Create(parameters, pPfo));
51
52 if (!pPfo)
53 throw StatusCodeException(STATUS_CODE_FAILURE);
54
55 iter->second->push_back(pPfo);
56 return STATUS_CODE_SUCCESS;
57 }
58 catch (StatusCodeException &statusCodeException)
59 {
60 std::cout << "Failed to create particle flow object: " << statusCodeException.ToString() << std::endl;
61 delete pPfo;
62 pPfo = nullptr;
63 return statusCodeException.GetStatusCode();
64 }
65}
66
67//------------------------------------------------------------------------------------------------------------------------------------------
68
70{
71 return this->Modifiable(pPfo)->AlterMetadata(metadata);
72}
73
74//------------------------------------------------------------------------------------------------------------------------------------------
75
76template <typename T>
77StatusCode ParticleFlowObjectManager::AddToPfo(const ParticleFlowObject *const pPfo, const T *const pT) const
78{
79 return this->Modifiable(pPfo)->AddToPfo(pT);
80}
81
82//------------------------------------------------------------------------------------------------------------------------------------------
83
84template <typename T>
86{
87 return this->Modifiable(pPfo)->RemoveFromPfo(pT);
88}
89
90//------------------------------------------------------------------------------------------------------------------------------------------
91
93{
94 if (pParentPfo == pDaughterPfo)
95 return STATUS_CODE_INVALID_PARAMETER;
96
97 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, this->Modifiable(pParentPfo)->AddDaughter(pDaughterPfo));
98 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, this->Modifiable(pDaughterPfo)->AddParent(pParentPfo));
99
100 return STATUS_CODE_SUCCESS;
101}
102
103//------------------------------------------------------------------------------------------------------------------------------------------
104
106{
107 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, this->Modifiable(pParentPfo)->RemoveDaughter(pDaughterPfo));
108 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, this->Modifiable(pDaughterPfo)->RemoveParent(pParentPfo));
109
110 return STATUS_CODE_SUCCESS;
111}
112
113//------------------------------------------------------------------------------------------------------------------------------------------
114//------------------------------------------------------------------------------------------------------------------------------------------
115
116template StatusCode ParticleFlowObjectManager::AddToPfo<Cluster>(const ParticleFlowObject *, const Cluster *) const;
117template StatusCode ParticleFlowObjectManager::AddToPfo<Track>(const ParticleFlowObject *, const Track *) const;
118template StatusCode ParticleFlowObjectManager::AddToPfo<Vertex>(const ParticleFlowObject *, const Vertex *) const;
119
120template StatusCode ParticleFlowObjectManager::RemoveFromPfo<Cluster>(const ParticleFlowObject *, const Cluster *) const;
121template StatusCode ParticleFlowObjectManager::RemoveFromPfo<Track>(const ParticleFlowObject *, const Track *) const;
122template StatusCode ParticleFlowObjectManager::RemoveFromPfo<Vertex>(const ParticleFlowObject *, const Vertex *) const;
123
124} // namespace pandora
Header file for the object factory class.
Header file for the particle flow object class.
Header file for the particle flow object manager class.
#define PANDORA_THROW_RESULT_IF(StatusCode1, Operator, Command)
Definition StatusCodes.h:43
#define PANDORA_RETURN_RESULT_IF(StatusCode1, Operator, Command)
Definition StatusCodes.h:19
AlgorithmObjectManager class.
bool m_canMakeNewObjects
Whether the manager is allowed to make new objects when requested by algorithms.
virtual StatusCode EraseAllContent()
Erase all manager content.
Cluster class.
Definition Cluster.h:31
std::string m_currentListName
The name of the current list.
Definition Manager.h:181
virtual T * Modifiable(const T *const pT) const
Access a modifiable object, when provided with address to const object.
Definition Manager.cc:288
NameToListMap m_nameToListMap
The name to list map.
Definition Manager.h:178
virtual StatusCode CreateInitialLists()
Create initial lists.
Definition Manager.cc:274
ObjectFactory class responsible for extended pandora object creation.
virtual StatusCode Create(const Parameters &parameters, const Object *&pObject) const =0
Create an object with the given parameters.
Pandora class.
Definition Pandora.h:40
ParticleFlowObject class.
StatusCode RemoveFromPfo(const ParticleFlowObject *const pPfo, const T *const pT) const
Remove an object from a particle flow object.
StatusCode Create(const object_creation::ParticleFlowObject::Parameters &parameters, const ParticleFlowObject *&pPfo, const ObjectFactory< object_creation::ParticleFlowObject::Parameters, object_creation::ParticleFlowObject::Object > &factory)
Create a particle flow object.
StatusCode RemoveParentDaughterAssociation(const ParticleFlowObject *const pParentPfo, const ParticleFlowObject *const pDaughterPfo) const
Remove a parent-daughter particle flow object relationship.
StatusCode SetParentDaughterAssociation(const ParticleFlowObject *const pParentPfo, const ParticleFlowObject *const pDaughterPfo) const
Add a parent-daughter particle flow object relationship.
StatusCode AlterMetadata(const ParticleFlowObject *const pPfo, const object_creation::ParticleFlowObject::Metadata &metadata) const
Alter the metadata information stored in a particle flow object.
ParticleFlowObjectManager(const Pandora *const pPandora)
Constructor.
StatusCode AddToPfo(const ParticleFlowObject *const pPfo, const T *const pT) const
Add an object to a particle flow object.
StatusCodeException class.
std::string ToString() const
Get status code as a string.
StatusCode GetStatusCode() const
Get status code.
Track class.
Definition Track.h:26
Vertex class.
Definition Vertex.h:26
StatusCode
The StatusCode enum.