Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-27 09:15:19

0001 /**
0002  *  @file   PandoraSDK/include/Managers/ParticleFlowObjectManager.h
0003  * 
0004  *  @brief  Header file for the particle flow object manager class.
0005  * 
0006  *  $Log: $
0007  */
0008 #ifndef PANDORA_PARTICLE_FLOW_OBJECT_MANAGER_H
0009 #define PANDORA_PARTICLE_FLOW_OBJECT_MANAGER_H 1
0010 
0011 #include "Managers/AlgorithmObjectManager.h"
0012 
0013 #include "Pandora/ObjectCreation.h"
0014 #include "Pandora/PandoraInternal.h"
0015 
0016 namespace pandora
0017 {
0018 
0019 /**
0020  *  @brief  ParticleFlowObjectManager class
0021  */
0022 class ParticleFlowObjectManager : public AlgorithmObjectManager<ParticleFlowObject>
0023 {
0024 public:
0025     /**
0026      *  @brief  Constructor
0027      * 
0028      *  @param  pPandora address of the associated pandora object
0029      */
0030      ParticleFlowObjectManager(const Pandora *const pPandora);
0031 
0032     /**
0033      *  @brief  Destructor
0034      */
0035      ~ParticleFlowObjectManager();
0036 
0037 private:
0038     /**
0039      *  @brief  Create a particle flow object
0040      * 
0041      *  @param  parameters the particle flow object parameters
0042      *  @param  pPfo to receive the address of the particle flow object created
0043      *  @param  factory the factory that performs the object allocation
0044      */
0045     StatusCode Create(const object_creation::ParticleFlowObject::Parameters &parameters, const ParticleFlowObject *&pPfo,
0046         const ObjectFactory<object_creation::ParticleFlowObject::Parameters, object_creation::ParticleFlowObject::Object> &factory);
0047 
0048     /**
0049      *  @brief  Alter the metadata information stored in a particle flow object
0050      * 
0051      *  @param  pPfo address of the particle flow object to modify
0052      *  @param  metaData the metadata (only populated metadata fields will be propagated to the object)
0053      */
0054     StatusCode AlterMetadata(const ParticleFlowObject *const pPfo, const object_creation::ParticleFlowObject::Metadata &metadata) const;
0055 
0056     /**
0057      *  @brief  Add an object to a particle flow object
0058      *
0059      *  @param  pPfo address of the particle flow object to modify
0060      *  @param  pT address of the object to add
0061      */
0062     template <typename T>
0063     StatusCode AddToPfo(const ParticleFlowObject *const pPfo, const T *const pT) const;
0064 
0065     /**
0066      *  @brief  Remove an object from a particle flow object
0067      *
0068      *  @param  pPfo address of the particle flow object to modify
0069      *  @param  pT address of the object to remove
0070      */
0071     template <typename T>
0072     StatusCode RemoveFromPfo(const ParticleFlowObject *const pPfo, const T *const pT) const;
0073 
0074     /**
0075      *  @brief  Add a parent-daughter particle flow object relationship
0076      *
0077      *  @param  pParentPfo address of parent particle flow object
0078      *  @param  pDaughterPfo address of daughter particle flow object
0079      */
0080     StatusCode SetParentDaughterAssociation(const ParticleFlowObject *const pParentPfo, const ParticleFlowObject *const pDaughterPfo) const;
0081 
0082     /**
0083      *  @brief  Remove a parent-daughter particle flow object relationship
0084      *
0085      *  @param  pParentPfo address of parent particle flow object
0086      *  @param  pDaughterPfo address of daughter particle flow object
0087      */
0088     StatusCode RemoveParentDaughterAssociation(const ParticleFlowObject *const pParentPfo, const ParticleFlowObject *const pDaughterPfo) const;
0089 
0090     friend class PandoraApiImpl;
0091     friend class PandoraContentApiImpl;
0092     friend class PandoraImpl;
0093 };
0094 
0095 } // namespace pandora
0096 
0097 #endif // #ifndef PANDORA_PARTICLE_FLOW_OBJECT_MANAGER_H