Pandora
Pandora source code navigator
Loading...
Searching...
No Matches
MCParticleHelper.cc
Go to the documentation of this file.
1
10
11#include "Objects/CaloHit.h"
12#include "Objects/Cluster.h"
13#include "Objects/MCParticle.h"
14#include "Objects/Track.h"
15
17
18#include <algorithm>
19
20namespace pandora
21{
22
23template <typename T>
25{
26 float bestWeight(0.f);
27 const MCParticle *pBestMCParticle(nullptr);
28 const MCParticleWeightMap &hitMCParticleWeightMap(pT->GetMCParticleWeightMap());
29
30 MCParticleVector mcParticleVector;
31 for (const MCParticleWeightMap::value_type &mapEntry : hitMCParticleWeightMap) mcParticleVector.push_back(mapEntry.first);
32 std::sort(mcParticleVector.begin(), mcParticleVector.end(), PointerLessThan<MCParticle>());
33
34 for (const MCParticle *const pMCParticle : mcParticleVector)
35 {
36 const float weight(hitMCParticleWeightMap.at(pMCParticle));
37
38 if (weight > bestWeight)
39 {
40 bestWeight = weight;
41 pBestMCParticle = pMCParticle;
42 }
43 }
44
45 if (!pBestMCParticle)
46 throw StatusCodeException(STATUS_CODE_NOT_INITIALIZED);
47
48 return pBestMCParticle;
49}
50
51template <>
53{
54 MCParticleWeightMap mcParticleWeightMap;
55
56 for (const CaloHit *const pCaloHit : *pCaloHitList)
57 {
58 const MCParticleWeightMap &hitMCParticleWeightMap(pCaloHit->GetMCParticleWeightMap());
59
60 MCParticleVector mcParticleVector;
61 for (const MCParticleWeightMap::value_type &mapEntry : hitMCParticleWeightMap) mcParticleVector.push_back(mapEntry.first);
62 std::sort(mcParticleVector.begin(), mcParticleVector.end(), PointerLessThan<MCParticle>());
63
64 for (const MCParticle *const pMCParticle : mcParticleVector)
65 {
66 const float weight(hitMCParticleWeightMap.at(pMCParticle));
67 mcParticleWeightMap[pMCParticle] += weight;
68 }
69 }
70
71 float bestWeight(0.f);
72 const MCParticle *pBestMCParticle(nullptr);
73
74 MCParticleVector mcParticleVector;
75 for (const MCParticleWeightMap::value_type &mapEntry : mcParticleWeightMap) mcParticleVector.push_back(mapEntry.first);
76 std::sort(mcParticleVector.begin(), mcParticleVector.end(), PointerLessThan<MCParticle>());
77
78 for (const MCParticle *const pCurrentMCParticle : mcParticleVector)
79 {
80 const float currentWeight(mcParticleWeightMap.at(pCurrentMCParticle));
81
82 if (currentWeight > bestWeight)
83 {
84 pBestMCParticle = pCurrentMCParticle;
85 bestWeight = currentWeight;
86 }
87 }
88
89 if (!pBestMCParticle)
90 throw StatusCodeException(STATUS_CODE_NOT_FOUND);
91
92 return pBestMCParticle;
93}
94
95template <>
97{
98 CaloHitList caloHitList;
99 pCluster->GetOrderedCaloHitList().FillCaloHitList(caloHitList);
100
101 return MCParticleHelper::GetMainMCParticle(&caloHitList);
102}
103
104template <>
106{
107 CaloHitList caloHitList;
108
109 for (const Cluster *const pCluster : *pClusterList)
110 pCluster->GetOrderedCaloHitList().FillCaloHitList(caloHitList);
111
112 return MCParticleHelper::GetMainMCParticle(&caloHitList);
113}
114
115//------------------------------------------------------------------------------------------------------------------------------------------
116//------------------------------------------------------------------------------------------------------------------------------------------
117
118template const MCParticle *MCParticleHelper::GetMainMCParticle(const CaloHit *const);
119template const MCParticle *MCParticleHelper::GetMainMCParticle(const Track *const);
120
121} // namespace pandora
Header file for the calo hit class.
Header file for the cluster class.
Header file for the mc particle class.
Header file for the mc particle helper class.
Header file defining relevant internal typedefs, sort and string conversion functions.
Header file for the track class.
CaloHit class.
Definition CaloHit.h:26
Cluster class.
Definition Cluster.h:31
const OrderedCaloHitList & GetOrderedCaloHitList() const
Get the ordered calo hit list.
Definition Cluster.h:470
static const MCParticle * GetMainMCParticle(const T *const pT)
Find the mc particle making the largest contribution to a specified calo hit, track or cluster.
MCParticle class.
Definition MCParticle.h:26
void FillCaloHitList(CaloHitList &caloHitList) const
Fill a provided calo hit list with all the calo hits in the ordered calo hit list.
Enable ordering of pointers based on properties of target objects.
StatusCodeException class.
Track class.
Definition Track.h:26
std::unordered_map< const MCParticle *, float > MCParticleWeightMap
MANAGED_CONTAINER< const Cluster * > ClusterList
MANAGED_CONTAINER< const CaloHit * > CaloHitList
std::vector< const MCParticle * > MCParticleVector