File indexing completed on 2026-09-27 09:15:18
0001
0002
0003
0004
0005
0006
0007
0008 #ifndef PANDORA_MC_MANAGER_H
0009 #define PANDORA_MC_MANAGER_H 1
0010
0011 #include "Managers/InputObjectManager.h"
0012
0013 #include "Pandora/ObjectCreation.h"
0014 #include "Pandora/PandoraInternal.h"
0015
0016 namespace pandora
0017 {
0018
0019
0020
0021
0022 class MCManager : public InputObjectManager<MCParticle>
0023 {
0024 public:
0025
0026
0027
0028
0029
0030 MCManager(const Pandora *const pPandora);
0031
0032
0033
0034
0035 ~MCManager();
0036
0037 private:
0038
0039
0040
0041
0042
0043
0044
0045 StatusCode Create(const object_creation::MCParticle::Parameters ¶meters, const MCParticle *&pMCParticle,
0046 const ObjectFactory<object_creation::MCParticle::Parameters, object_creation::MCParticle::Object> &factory);
0047
0048
0049
0050
0051 StatusCode EraseAllContent();
0052
0053
0054
0055
0056
0057
0058
0059 StatusCode SetMCParentDaughterRelationship(const Uid parentUid, const Uid daughterUid);
0060
0061
0062
0063
0064
0065
0066
0067
0068 StatusCode SetCaloHitToMCParticleRelationship(const Uid caloHitUid, const Uid mcParticleUid, const float mcParticleWeight);
0069
0070
0071
0072
0073
0074
0075
0076
0077 StatusCode SetTrackToMCParticleRelationship(const Uid trackUid, const Uid mcParticleUid, const float mcParticleWeight);
0078
0079
0080
0081
0082 StatusCode IdentifyPfoTargets();
0083
0084
0085
0086
0087 StatusCode SelectPfoTargets();
0088
0089
0090
0091
0092
0093
0094
0095 StatusCode ApplyPfoSelectionRules(const MCParticle *const mcRootParticle, MCParticleSet &mcPfoSet) const;
0096
0097
0098
0099
0100
0101
0102
0103
0104 StatusCode SetPfoTargetInTree(const MCParticle *const pMCParticle, const MCParticle *const pPfoTarget, bool onlyDaughters = false) const;
0105
0106
0107
0108
0109
0110
0111 StatusCode CreateCaloHitToPfoTargetsMap(UidToMCParticleWeightMap &caloHitToPfoTargetsMap) const;
0112
0113
0114
0115
0116
0117
0118 StatusCode CreateTrackToPfoTargetsMap(UidToMCParticleWeightMap &trackToPfoTargetsMap) const;
0119
0120
0121
0122
0123 StatusCode AddMCParticleRelationships() const;
0124
0125
0126
0127
0128 StatusCode RemoveAllMCParticleRelationships();
0129
0130
0131
0132
0133
0134
0135 StatusCode RemoveMCParticleRelationships(const MCParticle *const pMCParticle) const;
0136
0137 typedef std::unordered_map<Uid, float> UidToWeightMap;
0138 typedef std::unordered_map<Uid, UidToWeightMap> ObjectRelationMap;
0139 typedef std::unordered_multimap<Uid, Uid> MCParticleRelationMap;
0140
0141
0142
0143
0144
0145
0146
0147
0148
0149 StatusCode SetUidToMCParticleRelationship(const Uid objectUid, const Uid mcParticleUid, const float mcParticleWeight,
0150 ObjectRelationMap &objectRelationMap) const;
0151
0152
0153
0154
0155
0156
0157
0158 StatusCode CreateUidToPfoTargetsMap(UidToMCParticleWeightMap &uidToMCParticleWeightMap, const ObjectRelationMap &objectRelationMap) const;
0159
0160 const std::string m_selectedListName;
0161
0162 UidToMCParticleMap m_uidToMCParticleMap;
0163 MCParticleRelationMap m_parentDaughterRelationMap;
0164 ObjectRelationMap m_caloHitToMCParticleMap;
0165 ObjectRelationMap m_trackToMCParticleMap;
0166
0167 friend class PandoraApiImpl;
0168 friend class PandoraContentApiImpl;
0169 friend class PandoraImpl;
0170 };
0171
0172
0173
0174 inline StatusCode MCManager::SetCaloHitToMCParticleRelationship(const Uid caloHitUid, const Uid mcParticleUid, const float mcParticleWeight)
0175 {
0176 return this->SetUidToMCParticleRelationship(caloHitUid, mcParticleUid, mcParticleWeight, m_caloHitToMCParticleMap);
0177 }
0178
0179
0180
0181 inline StatusCode MCManager::SetTrackToMCParticleRelationship(const Uid trackUid, const Uid mcParticleUid, const float mcParticleWeight)
0182 {
0183 return this->SetUidToMCParticleRelationship(trackUid, mcParticleUid, mcParticleWeight, m_trackToMCParticleMap);
0184 }
0185
0186
0187
0188 inline StatusCode MCManager::CreateCaloHitToPfoTargetsMap(UidToMCParticleWeightMap &caloHitToPfoTargetsMap) const
0189 {
0190 return this->CreateUidToPfoTargetsMap(caloHitToPfoTargetsMap, m_caloHitToMCParticleMap);
0191 }
0192
0193
0194
0195 inline StatusCode MCManager::CreateTrackToPfoTargetsMap(UidToMCParticleWeightMap &trackToPfoTargetsMap) const
0196 {
0197 return this->CreateUidToPfoTargetsMap(trackToPfoTargetsMap, m_trackToMCParticleMap);
0198 }
0199
0200 }
0201
0202 #endif