LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
CosmicRayBaseMatchingAlgorithm.h
Go to the documentation of this file.
1 
8 #ifndef LAR_COSMIC_RAY_BASE_MATCHING_ALGORITHM_H
9 #define LAR_COSMIC_RAY_BASE_MATCHING_ALGORITHM_H 1
10 
11 #include "Pandora/Algorithm.h"
12 #include "Pandora/AlgorithmHeaders.h"
13 
14 #include <unordered_map>
15 
16 namespace lar_content
17 {
18 
22 class CosmicRayBaseMatchingAlgorithm : public pandora::Algorithm
23 {
24 protected:
25  pandora::StatusCode Run();
26  pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle);
27 
31  class Particle
32  {
33  public:
41  Particle(const pandora::Cluster *const pClusterU, const pandora::Cluster *const pClusterV, const pandora::Cluster *const pClusterW);
42 
43  const pandora::Cluster *m_pClusterU;
44  const pandora::Cluster *m_pClusterV;
45  const pandora::Cluster *m_pClusterW;
46  };
47 
48  typedef std::vector<Particle> ParticleList;
49  typedef std::unordered_map<const pandora::Cluster *, pandora::ClusterList> ClusterAssociationMap;
50  typedef std::set<unsigned int> UIntSet;
51 
58  virtual void SelectCleanClusters(const pandora::ClusterVector &inputVector, pandora::ClusterVector &outputVector) const = 0;
59 
68  virtual bool MatchClusters(const pandora::Cluster *const pCluster1, const pandora::Cluster *const pCluster2) const = 0;
69 
79  virtual bool CheckMatchedClusters3D(
80  const pandora::Cluster *const pCluster1, const pandora::Cluster *const pCluster2, const pandora::Cluster *const pCluster3) const = 0;
81 
88  virtual void SetPfoParameters(const CosmicRayBaseMatchingAlgorithm::Particle &protoParticle,
89  PandoraContentApi::ParticleFlowObject::Parameters &pfoParameters) const = 0;
90 
91 private:
98  pandora::StatusCode GetAvailableClusters(const std::string inputClusterListName, pandora::ClusterVector &clusterVector) const;
106  void MatchClusters(const pandora::ClusterVector &clusterVector1, const pandora::ClusterVector &clusterVector2,
108 
119  const CosmicRayBaseMatchingAlgorithm::ClusterAssociationMap &matchedClusters31, ParticleList &particleList) const;
120 
131  const CosmicRayBaseMatchingAlgorithm::ClusterAssociationMap &matchedClusters31, ParticleList &particleList) const;
132 
139  void MatchTwoViews(const CosmicRayBaseMatchingAlgorithm::ClusterAssociationMap &matchedClusters12, ParticleList &particleList) const;
140 
147  void ResolveAmbiguities(const ParticleList &inputList, ParticleList &outputList) const;
148 
154  void BuildParticles(const ParticleList &particleList);
155 
159  std::string m_outputPfoListName;
160 };
161 
162 } // namespace lar_content
163 
164 #endif // #ifndef LAR_COSMIC_RAY_BASE_MATCHING_ALGORITHM_H
std::string m_inputClusterListNameV
The name of the view V cluster list.
void BuildParticles(const ParticleList &particleList)
Build PFO objects from candidate particles.
void MatchThreeViews(const CosmicRayBaseMatchingAlgorithm::ClusterAssociationMap &matchedClusters12, const CosmicRayBaseMatchingAlgorithm::ClusterAssociationMap &matchedClusters23, const CosmicRayBaseMatchingAlgorithm::ClusterAssociationMap &matchedClusters31, ParticleList &particleList) const
Match clusters from three views and form into particles.
virtual void SetPfoParameters(const CosmicRayBaseMatchingAlgorithm::Particle &protoParticle, PandoraContentApi::ParticleFlowObject::Parameters &pfoParameters) const =0
Calculate Pfo properties from proto particle.
const pandora::Cluster * m_pClusterV
Address of cluster in V view.
virtual bool MatchClusters(const pandora::Cluster *const pCluster1, const pandora::Cluster *const pCluster2) const =0
Match a pair of clusters from two views.
const pandora::Cluster * m_pClusterW
Address of cluster in W view.
std::string m_outputPfoListName
The name of the output PFO list.
const pandora::Cluster * m_pClusterU
Address of cluster in U view.
void MatchTwoViews(const CosmicRayBaseMatchingAlgorithm::ClusterAssociationMap &matchedClusters12, const CosmicRayBaseMatchingAlgorithm::ClusterAssociationMap &matchedClusters23, const CosmicRayBaseMatchingAlgorithm::ClusterAssociationMap &matchedClusters31, ParticleList &particleList) const
Match clusters from two views and form into particles.
virtual bool CheckMatchedClusters3D(const pandora::Cluster *const pCluster1, const pandora::Cluster *const pCluster2, const pandora::Cluster *const pCluster3) const =0
Check that three clusters have a consistent 3D position.
pandora::StatusCode GetAvailableClusters(const std::string inputClusterListName, pandora::ClusterVector &clusterVector) const
Get a vector of available clusters.
Particle(const pandora::Cluster *const pClusterU, const pandora::Cluster *const pClusterV, const pandora::Cluster *const pClusterW)
Constructor.
std::string m_inputClusterListNameU
The name of the view U cluster list.
std::string m_inputClusterListNameW
The name of the view W cluster list.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
std::vector< art::Ptr< recob::Cluster > > ClusterVector
void ResolveAmbiguities(const ParticleList &inputList, ParticleList &outputList) const
Remove ambiguities between candidate particles.
std::unordered_map< const pandora::Cluster *, pandora::ClusterList > ClusterAssociationMap
virtual void SelectCleanClusters(const pandora::ClusterVector &inputVector, pandora::ClusterVector &outputVector) const =0
Select a set of clusters judged to be clean.