Back to home page

EIC code displayed by LXR

 
 

    


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

0001 /**
0002  *  @file   LCContent/include/LCTrackClusterAssociation/TrackRecoveryHelixAlgorithm.h
0003  *
0004  *  @brief  Header file for the track recovery helix algorithm class.
0005  *
0006  *  $Log: $
0007  */
0008 #ifndef LC_TRACK_RECOVERY_HELIX_ALGORITHM_H
0009 #define LC_TRACK_RECOVERY_HELIX_ALGORITHM_H 1
0010 
0011 #include "Pandora/Algorithm.h"
0012 
0013 namespace lc_content {
0014 
0015 /**
0016  *  @brief  TrackRecoveryHelixAlgorithm class
0017  */
0018 class TrackRecoveryHelixAlgorithm : public pandora::Algorithm {
0019 public:
0020   /**
0021    *  @brief Default constructor
0022    */
0023   TrackRecoveryHelixAlgorithm();
0024 
0025 private:
0026   /**
0027    *  @brief  AssociationInfo class
0028    */
0029   class AssociationInfo {
0030   public:
0031     /**
0032      *  @brief  Constructor
0033      *
0034      *  @param  pCluster address of cluster to which association could be made
0035      *  @param  closestApproach distance of closest approach between the cluster and the track under consideration
0036      */
0037     AssociationInfo(const pandora::Cluster* const pCluster, const float closestApproach);
0038 
0039     /**
0040      *  @brief  Get the address of the cluster to which association could be made
0041      *
0042      *  @return The address of the cluster
0043      */
0044     const pandora::Cluster* GetCluster() const;
0045 
0046     /**
0047      *  @brief  Get the distance of closest approach between the cluster and the track under consideration
0048      *
0049      *  @return The distance of closest approach
0050      */
0051     float GetClosestApproach() const;
0052 
0053     /**
0054      *  @brief  Operator< to order by address of associated cluster
0055      *
0056      *  @param  rhs association info to compare with
0057      */
0058     bool operator<(const AssociationInfo& rhs) const;
0059 
0060   private:
0061     const pandora::Cluster* m_pCluster; ///< The cluster to which an association would be made
0062     float m_closestApproach;            ///< The distance of closest approach
0063   };
0064 
0065   typedef std::set<AssociationInfo> AssociationInfoSet;
0066   typedef std::map<const pandora::Track*, AssociationInfoSet> TrackAssociationInfoMap;
0067 
0068   pandora::StatusCode Run();
0069   pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle);
0070 
0071   /**
0072    *  @brief  Get a map specifying cluster association information for every possible matching cluster
0073    *
0074    *  @param  trackAssociationInfoMap the track association info map
0075    */
0076   pandora::StatusCode GetTrackAssociationInfoMap(TrackAssociationInfoMap& trackAssociationInfoMap) const;
0077 
0078   /**
0079    *  @brief  Use information in the track association info map to create track to cluster associations
0080    *
0081    *  @param  trackAssociationInfoMap the track association info map
0082    */
0083   pandora::StatusCode MakeTrackClusterAssociations(TrackAssociationInfoMap& trackAssociationInfoMap) const;
0084 
0085   float m_maxTrackClusterDeltaZ;      ///< Max z separation between track calorimeter projection and cluster to allow
0086                                       ///< association
0087   float m_maxAbsoluteTrackClusterChi; ///< Max absolute track-cluster consistency chi value to allow association
0088   unsigned int
0089       m_maxLayersCrossed; ///< Max number of layers crossed by track helix between calorimeter projection and cluster
0090 
0091   unsigned int m_maxSearchLayer;   ///< Max pseudo layer to examine when calculating track-cluster distance
0092   float m_parallelDistanceCut;     ///< Max allowed projection of track-hit separation along track direction
0093   float m_minTrackClusterCosAngle; ///< Min cos(angle) between track and cluster initial direction
0094 
0095   unsigned int m_helixComparisonNLayers; ///< Number of cluster layers used in cluster-helix comparison
0096   unsigned int
0097       m_helixComparisonMaxOccupiedLayers; ///< Max number of occupied cluster layers used in cluster-helix comparison
0098 
0099   float m_maxTrackClusterDistance;        ///< Max track-cluster separation to allow association
0100   float m_maxClosestHelixClusterDistance; ///< Max helix-cluster closest approach to allow association
0101   float m_maxMeanHelixClusterDistance;    ///< Max helix-cluster mean approach to allow association
0102 };
0103 
0104 //------------------------------------------------------------------------------------------------------------------------------------------
0105 
0106 inline TrackRecoveryHelixAlgorithm::AssociationInfo::AssociationInfo(const pandora::Cluster* const pCluster,
0107                                                                      const float closestApproach)
0108     : m_pCluster(pCluster), m_closestApproach(closestApproach) {}
0109 
0110 //------------------------------------------------------------------------------------------------------------------------------------------
0111 
0112 inline const pandora::Cluster* TrackRecoveryHelixAlgorithm::AssociationInfo::GetCluster() const { return m_pCluster; }
0113 
0114 //------------------------------------------------------------------------------------------------------------------------------------------
0115 
0116 inline float TrackRecoveryHelixAlgorithm::AssociationInfo::GetClosestApproach() const { return m_closestApproach; }
0117 
0118 } // namespace lc_content
0119 
0120 #endif // #ifndef LC_TRACK_RECOVERY_HELIX_ALGORITHM_H