Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-27 09:14:59

0001 /**
0002  *  @file   LCContent/include/LCPfoConstruction/PfoCreationAlgorithm.h
0003  *
0004  *  @brief  Header file for the pfo creation algorithm class.
0005  *
0006  *  $Log: $
0007  */
0008 #ifndef LC_PFO_CREATION_ALGORITHM_H
0009 #define LC_PFO_CREATION_ALGORITHM_H 1
0010 
0011 #include "Pandora/Algorithm.h"
0012 
0013 #include "Api/PandoraContentApi.h"
0014 
0015 namespace lc_content {
0016 
0017 /**
0018  *  @brief  PfoCreationAlgorithm class
0019  */
0020 class PfoCreationAlgorithm : public pandora::Algorithm {
0021 public:
0022   /**
0023    *  @brief Default constructor
0024    */
0025   PfoCreationAlgorithm();
0026 
0027 private:
0028   typedef PandoraContentApi::ParticleFlowObject::Parameters PfoParameters;
0029 
0030   pandora::StatusCode Run();
0031   pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle);
0032 
0033   /**
0034    *  @brief  Create particle flow objects starting from tracks in the main tracker. The pfos will account for
0035    * associated daughter/sibling tracks and associated calorimeter clusters.
0036    */
0037   pandora::StatusCode CreateTrackBasedPfos() const;
0038 
0039   /**
0040    *  @brief  Add relevant tracks and clusters to a track-based pfo
0041    *
0042    *  @param  pTrack address of the track to consider
0043    *  @param  pfoParameters the pfo parameters to populate
0044    *  @param  readSiblingInfo whether to read sibling track information (set to false to avoid multiple counting)
0045    */
0046   pandora::StatusCode PopulateTrackBasedPfo(const pandora::Track* const pTrack, PfoParameters& pfoParameters,
0047                                             const bool readSiblingInfo = true) const;
0048 
0049   /**
0050    *  @brief  Set the basic parameters for a track-based pfo
0051    *
0052    *  @param  pTrack address of the track to consider
0053    *  @param  pfoParameters the pfo parameters to populate
0054    */
0055   pandora::StatusCode SetTrackBasedPfoParameters(const pandora::Track* const pTrack,
0056                                                  PfoParameters& pfoParameters) const;
0057 
0058   /**
0059    *  @brief  Set the parameters for a track-based pfo, where pfo target consists of two or more sibling tracks
0060    *
0061    *  @param  pTrack address of the track to consider
0062    *  @param  pfoParameters the pfo parameters to populate
0063    */
0064   pandora::StatusCode SetSiblingTrackBasedPfoParameters(const pandora::Track* const pTrack,
0065                                                         PfoParameters& pfoParameters) const;
0066 
0067   /**
0068    *  @brief  Set the parameters for a track-based pfo, where the pfo target has one or more daughter tracks
0069    *
0070    *  @param  pTrack address of the track to consider
0071    *  @param  pfoParameters the pfo parameters to populate
0072    */
0073   pandora::StatusCode SetDaughterTrackBasedPfoParameters(const pandora::Track* const pTrack,
0074                                                          PfoParameters& pfoParameters) const;
0075 
0076   /**
0077    *  @brief  Set the parameters for a simple track-based pfo, where the track has no associations with other tracks
0078    *
0079    *  @param  pTrack address of the track to consider
0080    *  @param  pfoParameters the pfo parameters to populate
0081    */
0082   pandora::StatusCode SetSimpleTrackBasedPfoParameters(const pandora::Track* const pTrack,
0083                                                        PfoParameters& pfoParameters) const;
0084 
0085   /**
0086    *  @brief  Create particle flow objects corresponding to neutral particles, These pfos consist only of clusters that
0087    * have no associated tracks.
0088    */
0089   pandora::StatusCode CreateNeutralPfos() const;
0090 
0091   /**
0092    *  @brief  Get the energy-weighted centroid for a specified cluster, calculated over a particular pseudo layer range
0093    *
0094    *  @param  pCluster address of the cluster to consider
0095    *  @param  pseudoLayer the inner pseudo layer of interest
0096    *  @param  pseudoLayer the outer pseudo layer of interest
0097    *
0098    *  @return The energy-weighted centroid, returned by value
0099    */
0100   const pandora::CartesianVector GetEnergyWeightedCentroid(const pandora::Cluster* const pCluster,
0101                                                            const unsigned int innerPseudoLayer,
0102                                                            const unsigned int outerPseudoLayer) const;
0103 
0104   std::string m_outputPfoListName;   ///< The output pfo list name
0105   bool m_shouldCreateTrackBasedPfos; ///< Whether to create track-based (charged) pfos
0106   bool m_shouldCreateNeutralPfos;    ///< Whether to create neutral pfos
0107   float m_minClusterHadronicEnergy;  ///< Min hadronic energy for neutral (non-photon) clusters to be added to pfos
0108   float m_minClusterElectromagneticEnergy; ///< Min electromagnetic energy for neutral (photon) clusters to be added to
0109                                            ///< pfos
0110   unsigned int m_minHitsInCluster;         ///< Min number of calo hits for neutral cluster to be added to pfos
0111   bool m_allowSingleLayerClusters;         ///< Whether to allow neutral clusters spanning only a single pseudolayer
0112   unsigned int m_photonPositionAlgorithm;  ///< Identifies the algorithm used to calculate photon pfo position vectors
0113 };
0114 
0115 } // namespace lc_content
0116 
0117 #endif // #ifndef LC_PFO_CREATION_ALGORITHM_H