Pandora
Pandora source code navigator
Loading...
Searching...
No Matches
InputObjectManager.cc
Go to the documentation of this file.
1
10
11#include "Objects/CaloHit.h"
12#include "Objects/MCParticle.h"
13#include "Objects/Track.h"
14
16
17#include <algorithm>
18#include <unordered_set>
19
20namespace pandora
21{
22
23template<typename T>
25 Manager<T>(pPandora),
26 m_inputListName("Input")
27{
29
30//------------------------------------------------------------------------------------------------------------------------------------------
31
32template<typename T>
36
37//------------------------------------------------------------------------------------------------------------------------------------------
38
39template<typename T>
42 typename Manager<T>::NameToListMap::iterator existingListIter = Manager<T>::m_nameToListMap.find(m_inputListName);
43
44 if (Manager<T>::m_nameToListMap.end() == existingListIter)
45 return STATUS_CODE_FAILURE;
46
47 // ATTN Defined ordering of input objects. After this, algorithms must control object sorting.
48 existingListIter->second->sort(PointerLessThan<T>());
49
50 Manager<T>::m_currentListName = m_inputListName;
51 return STATUS_CODE_SUCCESS;
53
54//------------------------------------------------------------------------------------------------------------------------------------------
55
56template<typename T>
58 std::string &temporaryListName)
59{
60 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, Manager<T>::CreateTemporaryListAndSetCurrent(pAlgorithm, temporaryListName));
61 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, this->AddObjectsToList(temporaryListName, objectList));
62
63 return STATUS_CODE_SUCCESS;
64}
65
66//------------------------------------------------------------------------------------------------------------------------------------------
67
68template<typename T>
69StatusCode InputObjectManager<T>::SaveList(const std::string &listName, const ObjectList &objectList)
70{
72 return this->AddObjectsToList(listName, objectList);
73
74 ObjectList *const pObjectList(new ObjectList);
75
76 if (!Manager<T>::m_nameToListMap.insert(typename Manager<T>::NameToListMap::value_type(listName, pObjectList)).second)
77 {
78 delete pObjectList;
79 return STATUS_CODE_ALREADY_PRESENT;
80 }
81
82 *(Manager<T>::m_nameToListMap[listName]) = objectList;
83 Manager<T>::m_savedLists.insert(listName);
84
85 return STATUS_CODE_SUCCESS;
86}
87
88//------------------------------------------------------------------------------------------------------------------------------------------
89
90template<typename T>
91StatusCode InputObjectManager<T>::AddObjectsToList(const std::string &listName, const ObjectList &objectList)
92{
93 if (Manager<T>::m_nullListName == listName)
94 return STATUS_CODE_NOT_ALLOWED;
97
98 if (Manager<T>::m_nameToListMap.end() == listIter)
99 return STATUS_CODE_NOT_FOUND;
100
101 ObjectList *const pSavedList = listIter->second;
102
103 if (pSavedList == &objectList)
104 return STATUS_CODE_INVALID_PARAMETER;
105
106 // ATTN For look-up efficiency
107 std::unordered_set<const T*> savedSet(pSavedList->begin(), pSavedList->end());
108
109 for (const T *const pT : objectList)
110 {
111 if (savedSet.count(pT))
112 return STATUS_CODE_ALREADY_PRESENT;
113
114 pSavedList->push_back(pT);
115 (void) savedSet.insert(pT);
116 }
117
118 return STATUS_CODE_SUCCESS;
119}
120
121//------------------------------------------------------------------------------------------------------------------------------------------
122
123template<typename T>
124StatusCode InputObjectManager<T>::RemoveObjectsFromList(const std::string &listName, const ObjectList &objectList)
125{
126 typename Manager<T>::NameToListMap::iterator listIter = Manager<T>::m_nameToListMap.find(listName);
127
128 if (Manager<T>::m_nameToListMap.end() == listIter)
129 return STATUS_CODE_NOT_FOUND;
130
131 ObjectList *const pSavedList = listIter->second;
132
133 if (pSavedList == &objectList)
134 return STATUS_CODE_INVALID_PARAMETER;
135
136 for (const T *const pT : objectList)
137 {
138 typename ObjectList::iterator savedObjectIter = std::find(pSavedList->begin(), pSavedList->end(), pT);
139
140 if (pSavedList->end() != savedObjectIter)
141 savedObjectIter = pSavedList->erase(savedObjectIter);
142 }
143
144 return STATUS_CODE_SUCCESS;
145}
146
147//------------------------------------------------------------------------------------------------------------------------------------------
148
149template<typename T>
150StatusCode InputObjectManager<T>::RenameList(const std::string &oldListName, const std::string &newListName)
151{
152 if (oldListName == m_inputListName)
153 return STATUS_CODE_NOT_ALLOWED;
154
155 return Manager<T>::RenameList(oldListName, newListName);
156}
157
158//------------------------------------------------------------------------------------------------------------------------------------------
159
160template<typename T>
162{
163 typename Manager<T>::NameToListMap::const_iterator inputIter = Manager<T>::m_nameToListMap.find(m_inputListName);
164
165 if (Manager<T>::m_nameToListMap.end() == inputIter)
166 {
167 std::cout << "InputObjectManager::EraseAllContent cannot retrieve object list " << std::endl;
168 }
169 else
170 {
171 for (const T *const pT : *inputIter->second)
172 delete pT;
173 }
174
176}
177
178//------------------------------------------------------------------------------------------------------------------------------------------
179
180template<typename T>
182{
184 Manager<T>::m_nameToListMap[m_inputListName] = new ObjectList;
185 Manager<T>::m_savedLists.insert(m_inputListName);
186
187 return STATUS_CODE_SUCCESS;
188}
189
190//------------------------------------------------------------------------------------------------------------------------------------------
191//------------------------------------------------------------------------------------------------------------------------------------------
192
193template class InputObjectManager<CaloHit>;
194template class InputObjectManager<MCParticle>;
195template class InputObjectManager<Track>;
196
197} // namespace pandora
Header file for the calo hit class.
Header file for the input object manager class.
Header file for the mc particle class.
Header file defining relevant internal typedefs, sort and string conversion functions.
#define PANDORA_RETURN_RESULT_IF(StatusCode1, Operator, Command)
Definition StatusCodes.h:19
Header file for the track class.
Algorithm class. Algorithm addresses are held only by the algorithm manager. They have a fully define...
Definition Algorithm.h:21
InputObjectManager class.
Manager< T >::ObjectList ObjectList
virtual StatusCode CreateTemporaryListAndSetCurrent(const Algorithm *const pAlgorithm, const ObjectList &objectList, std::string &temporaryListName)
Change the current list to a specified temporary list.
InputObjectManager(const Pandora *const pPandora)
Constructor.
virtual StatusCode AddObjectsToList(const std::string &listName, const ObjectList &objectList)
Add objects to a saved list with a specified name.
virtual StatusCode RemoveObjectsFromList(const std::string &listName, const ObjectList &objectList)
Remove objects from a saved list.
virtual StatusCode CreateInitialLists()
Create initial lists.
virtual StatusCode RenameList(const std::string &oldListName, const std::string &newListName)
Rename a saved list, altering its saved name from a specified old list name to a specified new list n...
virtual StatusCode SaveList(const std::string &listName, const ObjectList &objectList)
Save a list of objects in a list with a specified name; create new list if required.
virtual StatusCode CreateInputList()
Create the input list (accessible to algorithms), using objects created by client application.
virtual StatusCode EraseAllContent()
Erase all manager content.
virtual ~InputObjectManager()
Destructor.
Manager class.
Definition Manager.h:27
virtual StatusCode RenameList(const std::string &oldListName, const std::string &newListName)
Rename a saved list, altering its saved name from a specified old list name to a specified new list n...
Definition Manager.cc:142
virtual StatusCode EraseAllContent()
Erase all manager content.
Definition Manager.cc:258
Pandora class.
Definition Pandora.h:40
Enable ordering of pointers based on properties of target objects.
StatusCode
The StatusCode enum.