Pandora
Pandora source code navigator
Loading...
Searching...
No Matches
CaloHitManager.cc
Go to the documentation of this file.
1
11
12#include "Objects/Cluster.h"
13#include "Objects/CaloHit.h"
14
16#include "Pandora/Pandora.h"
18
20
21#include <algorithm>
22#include <cmath>
23
24namespace pandora
25{
26
28 InputObjectManager<CaloHit>(pPandora),
29 m_nReclusteringProcesses(0),
30 m_pCurrentReclusterMetadata(nullptr)
31{
32 PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, this->CreateInitialLists());
33}
34
35//------------------------------------------------------------------------------------------------------------------------------------------
36
41
42//------------------------------------------------------------------------------------------------------------------------------------------
43
46{
47 pCaloHit = nullptr;
48
49 try
50 {
51 PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, factory.Create(parameters, pCaloHit));
52
53 NameToListMap::iterator inputIter = m_nameToListMap.find(m_inputListName);
54
55 if (!pCaloHit || (m_nameToListMap.end() == inputIter))
56 throw StatusCodeException(STATUS_CODE_FAILURE);
57
58 // ATTN No longer require presence of pseudo layer plugin, accepting use of a single dummy value for all hits
59 const unsigned int pseudoLayer(m_pPandora->GetPlugins()->HasPseudoLayerPlugin() ?
61
62 PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, this->Modifiable(pCaloHit)->SetPseudoLayer(pseudoLayer));
63
64 inputIter->second->push_back(pCaloHit);
65 return STATUS_CODE_SUCCESS;
66 }
67 catch (StatusCodeException &statusCodeException)
68 {
69 std::cout << "Failed to create calo hit: " << statusCodeException.ToString() << std::endl;
70 delete pCaloHit;
71 pCaloHit = nullptr;
72 return statusCodeException.GetStatusCode();
73 }
74}
75
76//------------------------------------------------------------------------------------------------------------------------------------------
77
79{
80 return this->Modifiable(pCaloHit)->AlterMetadata(metadata);
81}
82
83//------------------------------------------------------------------------------------------------------------------------------------------
84
85template <>
86bool CaloHitManager::IsAvailable(const CaloHit *const pCaloHit) const
87{
89 return pCaloHit->IsAvailable();
90
92}
93
94template <>
95bool CaloHitManager::IsAvailable(const CaloHitList *const pCaloHitList) const
96{
98 {
99 bool isAvailable(true);
100
101 for (const CaloHit *const pCaloHit : *pCaloHitList)
102 isAvailable &= this->IsAvailable(pCaloHit);
103
104 return isAvailable;
105 }
106
108}
109
110//------------------------------------------------------------------------------------------------------------------------------------------
111
112template <>
113StatusCode CaloHitManager::SetAvailability(const CaloHit *const pCaloHit, bool isAvailable)
114{
116 {
117 this->Modifiable(pCaloHit)->SetAvailability(isAvailable);
118 return STATUS_CODE_SUCCESS;
119 }
120
122}
123
124template <>
125StatusCode CaloHitManager::SetAvailability(const CaloHitList *const pCaloHitList, bool isAvailable)
126{
128 {
129 for (const CaloHit *const pCaloHit : *pCaloHitList)
130 this->Modifiable(pCaloHit)->SetAvailability(isAvailable);
131
132 return STATUS_CODE_SUCCESS;
133 }
134
135 return m_pCurrentReclusterMetadata->GetCurrentCaloHitMetadata()->SetAvailability(pCaloHitList, isAvailable);
136}
137
138//------------------------------------------------------------------------------------------------------------------------------------------
139
141 std::string &temporaryListName)
142{
143 if (clusterList.empty())
144 return STATUS_CODE_NOT_INITIALIZED;
145
146 CaloHitList caloHitList;
147
148 for (const Cluster *const pCluster : clusterList)
149 {
150 pCluster->GetOrderedCaloHitList().FillCaloHitList(caloHitList);
151 caloHitList.insert(caloHitList.end(), pCluster->GetIsolatedCaloHitList().begin(), pCluster->GetIsolatedCaloHitList().end());
152 }
153
154 return InputObjectManager<CaloHit>::CreateTemporaryListAndSetCurrent(pAlgorithm, caloHitList, temporaryListName);
155}
156
157//------------------------------------------------------------------------------------------------------------------------------------------
158
160{
161 for (const ReclusterMetadata *const pMetaData : m_reclusterMetadataList)
162 delete pMetaData;
163
167
169}
170
171//------------------------------------------------------------------------------------------------------------------------------------------
172
174{
175 if (caloHitToPfoTargetsMap.empty())
176 return STATUS_CODE_SUCCESS;
177
178 NameToListMap::const_iterator inputIter = m_nameToListMap.find(m_inputListName);
179
180 if (m_nameToListMap.end() == inputIter)
181 return STATUS_CODE_FAILURE;
182
183 for (const CaloHit *const pCaloHit : *inputIter->second)
184 {
185 UidToMCParticleWeightMap::const_iterator pfoTargetIter = caloHitToPfoTargetsMap.find(pCaloHit->GetParentAddress());
186
187 if (caloHitToPfoTargetsMap.end() == pfoTargetIter)
188 continue;
189
190 this->Modifiable(pCaloHit)->SetMCParticleWeightMap(pfoTargetIter->second);
191 }
192
193 return STATUS_CODE_SUCCESS;
194}
195
196//------------------------------------------------------------------------------------------------------------------------------------------
197
199{
200 NameToListMap::const_iterator inputIter = m_nameToListMap.find(m_inputListName);
201
202 if (m_nameToListMap.end() == inputIter)
203 return STATUS_CODE_FAILURE;
204
205 for (const CaloHit *const pCaloHit : *inputIter->second)
206 this->Modifiable(pCaloHit)->RemoveMCParticles();
207
208 return STATUS_CODE_SUCCESS;
209}
210
211//------------------------------------------------------------------------------------------------------------------------------------------
212
213StatusCode CaloHitManager::FragmentCaloHit(const CaloHit *const pOriginalCaloHit, const float fraction1, const CaloHit *&pDaughterCaloHit1,
215{
216 pDaughterCaloHit1 = nullptr; pDaughterCaloHit2 = nullptr;
217
218 if (!this->CanFragmentCaloHit(pOriginalCaloHit, fraction1))
219 return STATUS_CODE_NOT_ALLOWED;
220
222 parameters1.m_pOriginalCaloHit = pOriginalCaloHit;
223 parameters1.m_weight = fraction1;
224 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, factory.Create(parameters1, pDaughterCaloHit1));
225
227 parameters2.m_pOriginalCaloHit = pOriginalCaloHit;
228 parameters2.m_weight = 1.f - fraction1;
229 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, factory.Create(parameters2, pDaughterCaloHit2));
230
231 if (!pDaughterCaloHit1 || !pDaughterCaloHit2)
232 return STATUS_CODE_FAILURE;
233
234 CaloHitReplacement caloHitReplacement;
235 caloHitReplacement.m_oldCaloHits.push_back(pOriginalCaloHit);
236 caloHitReplacement.m_newCaloHits.push_back(pDaughterCaloHit1); caloHitReplacement.m_newCaloHits.push_back(pDaughterCaloHit2);
237
239 {
240 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, m_pCurrentReclusterMetadata->GetCurrentCaloHitMetadata()->Update(caloHitReplacement));
241 }
242 else
243 {
244 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, this->Update(caloHitReplacement));
245 }
246
247 return STATUS_CODE_SUCCESS;
248}
249
250//------------------------------------------------------------------------------------------------------------------------------------------
251
252StatusCode CaloHitManager::MergeCaloHitFragments(const CaloHit *const pFragmentCaloHit1, const CaloHit *const pFragmentCaloHit2,
254{
255 pMergedCaloHit = nullptr;
256
257 if (!this->CanMergeCaloHitFragments(pFragmentCaloHit1, pFragmentCaloHit2) || (pFragmentCaloHit1->GetCellGeometry() != pFragmentCaloHit2->GetCellGeometry()))
258 return STATUS_CODE_NOT_ALLOWED;
259
260 const float newWeight((pFragmentCaloHit1->GetWeight() + pFragmentCaloHit2->GetWeight()) / pFragmentCaloHit1->GetWeight());
261
263 parameters.m_pOriginalCaloHit = pFragmentCaloHit1;
264 parameters.m_weight = newWeight;
265 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, factory.Create(parameters, pMergedCaloHit));
266
267 if (!pMergedCaloHit)
268 return STATUS_CODE_FAILURE;
269
270 CaloHitReplacement caloHitReplacement;
271 caloHitReplacement.m_newCaloHits.push_back(pMergedCaloHit);
272 caloHitReplacement.m_oldCaloHits.push_back(pFragmentCaloHit1); caloHitReplacement.m_oldCaloHits.push_back(pFragmentCaloHit2);
273
275 {
276 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, m_pCurrentReclusterMetadata->GetCurrentCaloHitMetadata()->Update(caloHitReplacement));
277 }
278 else
279 {
280 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, this->Update(caloHitReplacement));
281 }
282
283 return STATUS_CODE_SUCCESS;
284}
285
286//------------------------------------------------------------------------------------------------------------------------------------------
287
288bool CaloHitManager::CanFragmentCaloHit(const CaloHit *const pOriginalCaloHit, const float fraction1) const
289{
290 if ((fraction1 < std::numeric_limits<float>::epsilon()) || (fraction1 > 1.f))
291 return false;
292
293 if (!this->IsAvailable(pOriginalCaloHit))
294 return false;
295
296 NameToListMap::const_iterator iter = m_nameToListMap.find(m_currentListName);
297
298 if (m_nameToListMap.end() == iter)
299 throw StatusCodeException(STATUS_CODE_FAILURE);
300
301 if (iter->second->end() == std::find(iter->second->begin(), iter->second->end(), pOriginalCaloHit))
302 return false;
303
304 return true;
305}
306
307//------------------------------------------------------------------------------------------------------------------------------------------
308
309bool CaloHitManager::CanMergeCaloHitFragments(const CaloHit *const pFragmentCaloHit1, const CaloHit *const pFragmentCaloHit2) const
310{
311 if (pFragmentCaloHit1->GetWeight() < std::numeric_limits<float>::epsilon())
312 return false;
313
314 if (pFragmentCaloHit1->GetParentAddress() != pFragmentCaloHit2->GetParentAddress())
315 return false;
316
317 if (!this->IsAvailable(pFragmentCaloHit1) || !this->IsAvailable(pFragmentCaloHit2))
318 return false;
319
320 NameToListMap::const_iterator iter = m_nameToListMap.find(m_currentListName);
321
322 if (m_nameToListMap.end() == iter)
323 throw StatusCodeException(STATUS_CODE_FAILURE);
324
325 if ((iter->second->end() == std::find(iter->second->begin(), iter->second->end(), pFragmentCaloHit1)) ||
326 (iter->second->end() == std::find(iter->second->begin(), iter->second->end(), pFragmentCaloHit2)))
327 {
328 return false;
329 }
330
331 return true;
332}
333
334//------------------------------------------------------------------------------------------------------------------------------------------
335
336StatusCode CaloHitManager::InitializeReclustering(const Algorithm *const pAlgorithm, const ClusterList &clusterList,
337 const std::string &originalReclusterListName)
338{
339 std::string caloHitListName;
340 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, this->CreateTemporaryListAndSetCurrent(pAlgorithm, clusterList, caloHitListName));
341 CaloHitList *const pCaloHitList = m_nameToListMap[caloHitListName];
342
345
346 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, m_pCurrentReclusterMetadata->CreateCaloHitMetadata(pCaloHitList, caloHitListName,
347 originalReclusterListName, false));
348
350
351 return STATUS_CODE_SUCCESS;
352}
353
354//------------------------------------------------------------------------------------------------------------------------------------------
355
356StatusCode CaloHitManager::PrepareForClustering(const Algorithm *const pAlgorithm, const std::string &newReclusterListName)
357{
359 return STATUS_CODE_SUCCESS;
360
362
363 std::string caloHitListName;
365 caloHitListName));
366 CaloHitList *const pCaloHitList = m_nameToListMap[caloHitListName];
367
368 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, m_pCurrentReclusterMetadata->CreateCaloHitMetadata(pCaloHitList, caloHitListName,
369 newReclusterListName, true));
370
371 return STATUS_CODE_SUCCESS;
372}
373
374//------------------------------------------------------------------------------------------------------------------------------------------
375
376StatusCode CaloHitManager::EndReclustering(const Algorithm *const /*const pAlgorithm*/, const std::string &selectedReclusterListName)
377{
379 return STATUS_CODE_SUCCESS;
380
381 CaloHitMetadata *pSelectedCaloHitMetaData(nullptr);
382 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, m_pCurrentReclusterMetadata->ExtractCaloHitMetadata(selectedReclusterListName,
383 pSelectedCaloHitMetaData));
384
385 m_reclusterMetadataList.pop_back();
387
388 if (--m_nReclusteringProcesses > 0)
389 {
392 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, pCurrentCaloHitMetaData->Update(*pSelectedCaloHitMetaData));
393 }
394 else
395 {
397 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, this->Update(*pSelectedCaloHitMetaData));
398 }
399
400 pSelectedCaloHitMetaData->Clear();
401 delete pSelectedCaloHitMetaData;
402
403 return STATUS_CODE_SUCCESS;
404}
405
406//------------------------------------------------------------------------------------------------------------------------------------------
407
409{
410 const CaloHitReplacementList &caloHitReplacementList(caloHitMetadata.GetCaloHitReplacementList());
411
412 for (const CaloHitReplacement *const pCaloHitReplacement : caloHitReplacementList)
413 {
414 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, this->Update(*pCaloHitReplacement));
415 }
416
417 const CaloHitUsageMap &caloHitUsageMap(caloHitMetadata.GetCaloHitUsageMap());
418
419 CaloHitVector caloHitVector;
420 for (const CaloHitUsageMap::value_type &mapEntry : caloHitUsageMap) caloHitVector.push_back(mapEntry.first);
421 std::sort(caloHitVector.begin(), caloHitVector.end(), PointerLessThan<CaloHit>());
422
423 for (const CaloHit *const pCaloHit : caloHitVector)
424 {
425 this->Modifiable(pCaloHit)->SetAvailability(caloHitUsageMap.at(pCaloHit));
426 }
427
428 return STATUS_CODE_SUCCESS;
429}
430
431//------------------------------------------------------------------------------------------------------------------------------------------
432
434{
435 for (const NameToListMap::value_type &mapEntry : m_nameToListMap)
436 {
437 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, this->Update(mapEntry.second, caloHitReplacement));
438 }
439
440 for (const CaloHit *const pCaloHit : caloHitReplacement.m_oldCaloHits)
441 delete pCaloHit;
442
443 return STATUS_CODE_SUCCESS;
444}
445
446//------------------------------------------------------------------------------------------------------------------------------------------
447
448StatusCode CaloHitManager::Update(CaloHitList *const pCaloHitList, const CaloHitReplacement &caloHitReplacement)
449{
450 if (caloHitReplacement.m_newCaloHits.empty() || caloHitReplacement.m_oldCaloHits.empty())
451 return STATUS_CODE_NOT_INITIALIZED;
452
453 if (pCaloHitList == &caloHitReplacement.m_oldCaloHits)
454 return STATUS_CODE_FAILURE;
455
456 bool replacementFound(false), allReplacementsFound(true);
457
458 for (const CaloHit *const pCaloHit : caloHitReplacement.m_oldCaloHits)
459 {
460 CaloHitList::iterator listIter = std::find(pCaloHitList->begin(), pCaloHitList->end(), pCaloHit);
461
462 if (pCaloHitList->end() != listIter)
463 {
464 listIter = pCaloHitList->erase(listIter);
465 replacementFound = true;
466 continue;
467 }
468
469 allReplacementsFound = false;
470 }
471
472 if (!replacementFound)
473 return STATUS_CODE_SUCCESS;
474
475 if (!allReplacementsFound)
476 std::cout << "CaloHitManager::Update - imperfect calo hit replacements made to list " << std::endl;
477
478 for (const CaloHit *const pCaloHit : caloHitReplacement.m_newCaloHits)
479 {
480 if (pCaloHitList->end() != std::find(pCaloHitList->begin(), pCaloHitList->end(), pCaloHit))
481 return STATUS_CODE_ALREADY_PRESENT;
482
483 pCaloHitList->push_back(pCaloHit);
484 }
485
486 return STATUS_CODE_SUCCESS;
487}
488
489} // namespace pandora
Header file for the calo hit class.
Header file for the calo hit manager class.
Header file for the cluster class.
Header file for the object factory class.
Header file for the pandora class.
Header file defining relevant internal typedefs, sort and string conversion functions.
Header file for the pandora plugin 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
Algorithm class. Algorithm addresses are held only by the algorithm manager. They have a fully define...
Definition Algorithm.h:21
CaloHit class.
Definition CaloHit.h:26
CellGeometry GetCellGeometry() const
Get the cell geometry.
Definition CaloHit.h:378
const CartesianVector & GetPositionVector() const
Get the position vector of center of calorimeter cell, units mm.
Definition CaloHit.h:350
float GetWeight() const
Get the calo hit weight, which may not be unity if the hit has been fragmented.
Definition CaloHit.h:511
float m_weight
The calo hit weight, which may not be unity if the hit has been fragmented.
Definition CaloHit.h:337
bool IsAvailable() const
Whether the calo hit is available to be added to a cluster (access this function via PandoraContentAP...
Definition CaloHit.h:539
const void * GetParentAddress() const
Get the address of the parent calo hit in the user framework.
Definition CaloHit.h:532
StatusCode PrepareForClustering(const Algorithm *const pAlgorithm, const std::string &newReclusterListName)
Prepare metadata to allow for construction of new recluster candidates.
StatusCode SetAvailability(const T *const pT, bool isAvailable)
Set availability of a calo hit, or a list of calo hits, to be added to a cluster.
StatusCode MatchCaloHitsToMCPfoTargets(const UidToMCParticleWeightMap &caloHitToPfoTargetsMap)
Match calo hits to their correct mc particles for particle flow.
ReclusterMetadata * m_pCurrentReclusterMetadata
Address of the current recluster metadata.
CaloHitManager(const Pandora *const pPandora)
Constructor.
bool CanFragmentCaloHit(const CaloHit *const pOriginalCaloHit, const float fraction1) const
Whether a calo hit can be fragmented into two daughter calo hits with the specified energy division.
StatusCode RemoveAllMCParticleRelationships()
Remove all mc particle associations that have been registered with calo hits.
StatusCode CreateTemporaryListAndSetCurrent(const Algorithm *const pAlgorithm, const ClusterList &clusterList, std::string &temporaryListName)
Change the current calo hit list to the constituent hits of a cluster list.
bool CanMergeCaloHitFragments(const CaloHit *const pFragmentCaloHit1, const CaloHit *const pFragmentCaloHit2) const
Whether two candidate calo hit fragments can be merged.
StatusCode FragmentCaloHit(const CaloHit *const pOriginalCaloHit, const float fraction1, const CaloHit *&pDaughterCaloHit1, const CaloHit *&pDaughterCaloHit2, const ObjectFactory< object_creation::CaloHitFragment::Parameters, object_creation::CaloHitFragment::Object > &factory)
Fragment a calo hit into two daughter calo hits, with a specified energy division.
unsigned int m_nReclusteringProcesses
The number of reclustering algorithms currently in operation.
bool IsAvailable(const T *const pT) const
Is a calo hit, or a list of calo hits, available to add to a cluster.
StatusCode EndReclustering(const Algorithm *const pAlgorithm, const std::string &selectedReclusterListName)
End reclustering operations and update calo hit lists accordingly.
StatusCode AlterMetadata(const CaloHit *const pCaloHit, const object_creation::CaloHit::Metadata &metadata) const
Alter the metadata information stored in a calo hit.
StatusCode Create(const object_creation::CaloHit::Parameters &parameters, const CaloHit *&pCaloHit, const ObjectFactory< object_creation::CaloHit::Parameters, object_creation::CaloHit::Object > &factory)
Create calo hit.
ReclusterMetadataList m_reclusterMetadataList
The recluster metadata list.
StatusCode Update(const CaloHitMetadata &caloHitMetadata)
Update all calo hit lists to account for changes by daughter recluster processes.
StatusCode InitializeReclustering(const Algorithm *const pAlgorithm, const ClusterList &clusterList, const std::string &originalReclusterListName)
Initialize reclustering operations, preparing lists and metadata accordingly.
StatusCode MergeCaloHitFragments(const CaloHit *const pFragmentCaloHit1, const CaloHit *const pFragmentCaloHit2, const CaloHit *&pMergedCaloHit, const ObjectFactory< object_creation::CaloHitFragment::Parameters, object_creation::CaloHitFragment::Object > &factory)
Merge two calo hit fragments, originally from the same parent hit, to form a new calo hit.
StatusCode EraseAllContent()
Erase all calo hit manager content.
CaloHitMetadata class.
Definition Metadata.h:39
bool IsAvailable(const T *const pT) const
Is a calo hit, or a list of calo hits, available to add to a cluster.
const CaloHitUsageMap & GetCaloHitUsageMap() const
Get the calo hit usage map.
Definition Metadata.h:181
StatusCode Update(const CaloHitMetadata &caloHitMetadata)
Update metadata to account for changes by daughter recluster processes.
Definition Metadata.cc:102
void Clear()
Clear all metadata content.
Definition Metadata.cc:172
const CaloHitReplacementList & GetCaloHitReplacementList() const
Get the calo hit replacement list.
Definition Metadata.h:188
StatusCode SetAvailability(const T *const pT, bool isAvailable)
Set availability of a calo hit, or a list of calo hits, to be added to a cluster.
Cluster class.
Definition Cluster.h:31
InputObjectManager class.
virtual StatusCode CreateTemporaryListAndSetCurrent(const Algorithm *const pAlgorithm, const ObjectList &objectList, std::string &temporaryListName)
Change the current list to a specified temporary list.
virtual StatusCode CreateInitialLists()
Create initial lists.
virtual StatusCode EraseAllContent()
Erase all manager content.
const std::string m_inputListName
The name of the input list.
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
const Pandora *const m_pPandora
The associated pandora object.
Definition Manager.h:173
NameToListMap m_nameToListMap
The name to list map.
Definition Manager.h:178
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
const PluginManager * GetPlugins() const
Get the pandora plugin instance, providing access to user registered functions and calculators.
Definition Pandora.cc:196
const PseudoLayerPlugin * GetPseudoLayerPlugin() const
Get the address of the pseudo layer plugin.
bool HasPseudoLayerPlugin() const
Whether the pseudo layer plugin is available.
Enable ordering of pointers based on properties of target objects.
virtual unsigned int GetPseudoLayer(const CartesianVector &positionVector) const =0
Get the appropriate pseudolayer for a specified position vector.
ReclusterMetadata class.
Definition Metadata.h:121
StatusCode CreateCaloHitMetadata(CaloHitList *const pCaloHitList, const std::string &caloHitListName, const std::string &reclusterListName, const bool initialHitAvailability)
Create new calo hit metadata, associated with a new reclustering option for the calo hits.
Definition Metadata.cc:204
const CaloHitList & GetCaloHitList() const
Get the initial calo hit list.
Definition Metadata.h:196
CaloHitMetadata * GetCurrentCaloHitMetadata()
Get the current calo hit metadata.
Definition Metadata.h:203
StatusCode ExtractCaloHitMetadata(const std::string &reclusterListName, CaloHitMetadata *&pCaloHitMetaData)
Extract specific calo hit metadata, removing entry from map and receiving a pointer to the metadata.
Definition Metadata.cc:220
StatusCodeException class.
std::string ToString() const
Get status code as a string.
StatusCode GetStatusCode() const
Get status code.
std::vector< const CaloHit * > CaloHitVector
std::unordered_map< const CaloHit *, bool > CaloHitUsageMap
Definition Metadata.h:30
MANAGED_CONTAINER< const Cluster * > ClusterList
std::vector< CaloHitReplacement * > CaloHitReplacementList
Definition Metadata.h:29
CaloHitList m_oldCaloHits
The list of old calo hits, to be replaced.
Definition Metadata.h:25
CaloHitList m_newCaloHits
The list new calo hits, to act as replacements.
Definition Metadata.h:26
MANAGED_CONTAINER< const CaloHit * > CaloHitList
StatusCode
The StatusCode enum.
std::unordered_map< Uid, MCParticleWeightMap > UidToMCParticleWeightMap
CaloHitReplacement class.
Definition Metadata.h:23