Public Member Functions | Private Member Functions | Private Attributes | List of all members
lar_content::LocalAsymmetryFeatureTool Class Reference

LocalAsymmetryFeatureTool class. More...

#include <LocalAsymmetryFeatureTool.h>

Inheritance diagram for lar_content::LocalAsymmetryFeatureTool:
lar_content::AsymmetryFeatureBaseTool lar_content::MvaFeatureTool< Ts >

Public Member Functions

 LocalAsymmetryFeatureTool ()
 Default constructor. More...
 
- Public Member Functions inherited from lar_content::AsymmetryFeatureBaseTool
 AsymmetryFeatureBaseTool ()
 Default constructor. More...
 
void Run (LArMvaHelper::MvaFeatureVector &featureVector, const VertexSelectionBaseAlgorithm *const pAlgorithm, const pandora::Vertex *const pVertex, const VertexSelectionBaseAlgorithm::SlidingFitDataListMap &slidingFitDataListMap, const VertexSelectionBaseAlgorithm::ClusterListMap &, const VertexSelectionBaseAlgorithm::KDTreeMap &, const VertexSelectionBaseAlgorithm::ShowerClusterListMap &showerClusterListMap, const float, float &)
 Run the tool. More...
 
- Public Member Functions inherited from lar_content::MvaFeatureTool< Ts >
 MvaFeatureTool ()=default
 Default constructor. More...
 
virtual void Run (MvaTypes::MvaFeatureVector &featureVector, Ts...args)=0
 Run the algorithm tool. More...
 

Private Member Functions

pandora::StatusCode ReadSettings (const pandora::TiXmlHandle xmlHandle) override
 
float GetAsymmetryForView (const pandora::CartesianVector &vertexPosition2D, const VertexSelectionBaseAlgorithm::SlidingFitDataList &slidingFitDataList, const VertexSelectionBaseAlgorithm::ShowerClusterList &) const override
 Get the local asymmetry feature in a given view. More...
 
bool CheckAngle (const pandora::CartesianVector &weightedDirectionSum, const pandora::CartesianVector &clusterDirection) const
 Check whether a cluster's direction agrees with the current weighted direction. More...
 

Private Attributes

float m_minAsymmetryCosAngle
 The min opening angle cosine used to determine viability of asymmetry score. More...
 
unsigned int m_maxAsymmetryNClusters
 The max number of associated clusters to calculate the asymmetry. More...
 

Additional Inherited Members

- Public Types inherited from lar_content::MvaFeatureTool< Ts >
typedef std::vector< MvaFeatureTool< Ts... > * > FeatureToolVector
 
- Protected Member Functions inherited from lar_content::AsymmetryFeatureBaseTool
pandora::StatusCode ReadSettings (const pandora::TiXmlHandle xmlHandle)
 
void IncrementAsymmetryParameters (const float weight, const pandora::CartesianVector &clusterDirection, pandora::CartesianVector &localWeightedDirectionSum) const
 Increment the asymmetry parameters. More...
 
virtual float CalculateAsymmetry (const bool useEnergyMetrics, const pandora::CartesianVector &vertexPosition2D, const pandora::ClusterVector &asymmetryClusters, const pandora::CartesianVector &localWeightedDirectionSum) const
 Calculate the asymmetry feature. More...
 
- Protected Attributes inherited from lar_content::AsymmetryFeatureBaseTool
float m_maxAsymmetryDistance
 The max distance between cluster (any hit) and vertex to calculate asymmetry score. More...
 

Detailed Description

LocalAsymmetryFeatureTool class.

Definition at line 19 of file LocalAsymmetryFeatureTool.h.

Constructor & Destructor Documentation

lar_content::LocalAsymmetryFeatureTool::LocalAsymmetryFeatureTool ( )

Default constructor.

Definition at line 20 of file LocalAsymmetryFeatureTool.cc.

20  :
22  m_minAsymmetryCosAngle(0.9962),
24 {
25 }
float m_minAsymmetryCosAngle
The min opening angle cosine used to determine viability of asymmetry score.
unsigned int m_maxAsymmetryNClusters
The max number of associated clusters to calculate the asymmetry.

Member Function Documentation

bool lar_content::LocalAsymmetryFeatureTool::CheckAngle ( const pandora::CartesianVector &  weightedDirectionSum,
const pandora::CartesianVector &  clusterDirection 
) const
private

Check whether a cluster's direction agrees with the current weighted direction.

Parameters
weightedDirectionSumthe current weighted direction
clusterDirectionthe cluster's direction
Returns
boolean

Definition at line 78 of file LocalAsymmetryFeatureTool.cc.

79 {
80  if (!(weightedDirectionSum.GetMagnitudeSquared() > std::numeric_limits<float>::epsilon()))
81  return true;
82 
83  const float cosOpeningAngle(weightedDirectionSum.GetCosOpeningAngle(clusterDirection));
84  return std::fabs(cosOpeningAngle) > m_minAsymmetryCosAngle;
85 }
float m_minAsymmetryCosAngle
The min opening angle cosine used to determine viability of asymmetry score.
float lar_content::LocalAsymmetryFeatureTool::GetAsymmetryForView ( const pandora::CartesianVector &  vertexPosition2D,
const VertexSelectionBaseAlgorithm::SlidingFitDataList slidingFitDataList,
const VertexSelectionBaseAlgorithm::ShowerClusterList  
) const
overrideprivatevirtual

Get the local asymmetry feature in a given view.

Parameters
vertexPosition2Dthe vertex position projected into this view
slidingFitDataListthe list of sliding fit data objects in this view
Returns
the local asymmetry feature

Implements lar_content::AsymmetryFeatureBaseTool.

Definition at line 29 of file LocalAsymmetryFeatureTool.cc.

31 {
32  bool useEnergy(true), useAsymmetry(true);
33  CartesianVector energyWeightedDirectionSum(0.f, 0.f, 0.f), hitWeightedDirectionSum(0.f, 0.f, 0.f);
34  ClusterVector asymmetryClusters;
35 
36  for (const VertexSelectionBaseAlgorithm::SlidingFitData &slidingFitData : slidingFitDataList)
37  {
38  const Cluster *const pCluster(slidingFitData.GetCluster());
39 
40  if (pCluster->GetElectromagneticEnergy() < std::numeric_limits<float>::epsilon())
41  useEnergy = false;
42 
43  const CartesianVector vertexToMinLayer(slidingFitData.GetMinLayerPosition() - vertexPosition2D);
44  const CartesianVector vertexToMaxLayer(slidingFitData.GetMaxLayerPosition() - vertexPosition2D);
45 
46  const bool minLayerClosest(vertexToMinLayer.GetMagnitudeSquared() < vertexToMaxLayer.GetMagnitudeSquared());
47  const CartesianVector &clusterDirection((minLayerClosest) ? slidingFitData.GetMinLayerDirection() : slidingFitData.GetMaxLayerDirection());
48 
49  if (useAsymmetry && (LArClusterHelper::GetClosestDistance(vertexPosition2D, pCluster) < m_maxAsymmetryDistance))
50  {
51  useAsymmetry &= this->CheckAngle(energyWeightedDirectionSum, clusterDirection);
52  this->IncrementAsymmetryParameters(pCluster->GetElectromagneticEnergy(), clusterDirection, energyWeightedDirectionSum);
53 
54  useAsymmetry &= this->CheckAngle(hitWeightedDirectionSum, clusterDirection);
55  this->IncrementAsymmetryParameters(static_cast<float>(pCluster->GetNCaloHits()), clusterDirection, hitWeightedDirectionSum);
56 
57  asymmetryClusters.push_back(pCluster);
58  }
59 
60  if (!useAsymmetry)
61  return 1.f;
62  }
63 
64  // Default: maximum asymmetry (i.e. not suppressed), zero for energy kick (i.e. not suppressed)
65  if ((useEnergy && energyWeightedDirectionSum == CartesianVector(0.f, 0.f, 0.f)) ||
66  (!useEnergy && hitWeightedDirectionSum == CartesianVector(0.f, 0.f, 0.f)))
67  return 1.f;
68 
69  if (asymmetryClusters.empty() || (asymmetryClusters.size() > m_maxAsymmetryNClusters))
70  return 1.f;
71 
72  const CartesianVector &localWeightedDirectionSum(useEnergy ? energyWeightedDirectionSum : hitWeightedDirectionSum);
73  return this->CalculateAsymmetry(useEnergy, vertexPosition2D, asymmetryClusters, localWeightedDirectionSum);
74 }
virtual float CalculateAsymmetry(const bool useEnergyMetrics, const pandora::CartesianVector &vertexPosition2D, const pandora::ClusterVector &asymmetryClusters, const pandora::CartesianVector &localWeightedDirectionSum) const
Calculate the asymmetry feature.
bool CheckAngle(const pandora::CartesianVector &weightedDirectionSum, const pandora::CartesianVector &clusterDirection) const
Check whether a cluster&#39;s direction agrees with the current weighted direction.
float m_maxAsymmetryDistance
The max distance between cluster (any hit) and vertex to calculate asymmetry score.
void IncrementAsymmetryParameters(const float weight, const pandora::CartesianVector &clusterDirection, pandora::CartesianVector &localWeightedDirectionSum) const
Increment the asymmetry parameters.
std::vector< art::Ptr< recob::Cluster > > ClusterVector
unsigned int m_maxAsymmetryNClusters
The max number of associated clusters to calculate the asymmetry.
static float GetClosestDistance(const pandora::ClusterList &clusterList1, const pandora::ClusterList &clusterList2)
Get closest distance between clusters in a pair of cluster lists.
StatusCode lar_content::LocalAsymmetryFeatureTool::ReadSettings ( const pandora::TiXmlHandle  xmlHandle)
overrideprivate

Definition at line 89 of file LocalAsymmetryFeatureTool.cc.

90 {
91  PANDORA_RETURN_RESULT_IF_AND_IF(
92  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MinAsymmetryCosAngle", m_minAsymmetryCosAngle));
93 
94  PANDORA_RETURN_RESULT_IF_AND_IF(
95  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MaxAsymmetryNClusters", m_maxAsymmetryNClusters));
96 
98 }
float m_minAsymmetryCosAngle
The min opening angle cosine used to determine viability of asymmetry score.
unsigned int m_maxAsymmetryNClusters
The max number of associated clusters to calculate the asymmetry.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)

Member Data Documentation

unsigned int lar_content::LocalAsymmetryFeatureTool::m_maxAsymmetryNClusters
private

The max number of associated clusters to calculate the asymmetry.

Definition at line 52 of file LocalAsymmetryFeatureTool.h.

float lar_content::LocalAsymmetryFeatureTool::m_minAsymmetryCosAngle
private

The min opening angle cosine used to determine viability of asymmetry score.

Definition at line 51 of file LocalAsymmetryFeatureTool.h.


The documentation for this class was generated from the following files: