22 m_minAsymmetryCosAngle(0.9962),
23 m_maxAsymmetryNClusters(2)
32 bool useEnergy(
true), useAsymmetry(
true);
33 CartesianVector energyWeightedDirectionSum(0.f, 0.f, 0.f), hitWeightedDirectionSum(0.f, 0.f, 0.f);
38 const Cluster *
const pCluster(slidingFitData.GetCluster());
43 const CartesianVector vertexToMinLayer(slidingFitData.GetMinLayerPosition() - vertexPosition2D);
44 const CartesianVector vertexToMaxLayer(slidingFitData.GetMaxLayerPosition() - vertexPosition2D);
47 const CartesianVector &clusterDirection((minLayerClosest) ? slidingFitData.GetMinLayerDirection() : slidingFitData.GetMaxLayerDirection());
51 useAsymmetry &= this->
CheckAngle(energyWeightedDirectionSum, clusterDirection);
54 useAsymmetry &= this->
CheckAngle(hitWeightedDirectionSum, clusterDirection);
57 asymmetryClusters.push_back(pCluster);
65 if ((useEnergy && energyWeightedDirectionSum ==
CartesianVector(0.f, 0.f, 0.f)) ||
66 (!useEnergy && hitWeightedDirectionSum ==
CartesianVector(0.f, 0.f, 0.f)))
72 const CartesianVector &localWeightedDirectionSum(useEnergy ? energyWeightedDirectionSum : hitWeightedDirectionSum);
73 return this->
CalculateAsymmetry(useEnergy, vertexPosition2D, asymmetryClusters, localWeightedDirectionSum);
83 const float cosOpeningAngle(weightedDirectionSum.
GetCosOpeningAngle(clusterDirection));
Header file for the cluster helper class.
#define PANDORA_RETURN_RESULT_IF_AND_IF(StatusCode1, StatusCode2, Operator, Command)
AsymmetryFeatureBaseTool class.
void IncrementAsymmetryParameters(const float weight, const pandora::CartesianVector &clusterDirection, pandora::CartesianVector &localWeightedDirectionSum) const
Increment the asymmetry parameters.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
Read the algorithm settings.
float m_maxAsymmetryDistance
The max distance between cluster (any hit) and vertex to calculate asymmetry score.
virtual float CalculateAsymmetry(const bool useEnergyMetrics, const pandora::CartesianVector &vertexPosition2D, const pandora::ClusterVector &asymmetryClusters, const pandora::CartesianVector &localWeightedDirectionSum) const
Calculate the asymmetry feature.
static float GetClosestDistance(const pandora::ClusterList &clusterList1, const pandora::ClusterList &clusterList2)
Get closest distance between clusters in a pair of cluster lists.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle) override
Read the algorithm settings.
LocalAsymmetryFeatureTool()
Default constructor.
float GetAsymmetryForView(const pandora::CartesianVector &vertexPosition2D, const VertexSelectionBaseAlgorithm::SlidingFitDataList &slidingFitDataList, const VertexSelectionBaseAlgorithm::ShowerClusterList &) const override
Get the local asymmetry feature in a given view.
bool CheckAngle(const pandora::CartesianVector &weightedDirectionSum, const pandora::CartesianVector &clusterDirection) const
Check whether a cluster's direction agrees with the current weighted direction.
unsigned int m_maxAsymmetryNClusters
The max number of associated clusters to calculate the asymmetry.
float m_minAsymmetryCosAngle
The min opening angle cosine used to determine viability of asymmetry score.
std::vector< ShowerCluster > ShowerClusterList
std::vector< SlidingFitData > SlidingFitDataList
float GetCosOpeningAngle(const CartesianVector &rhs) const
Get the cosine of the opening angle of the cartesian vector with respect to a second cartesian vector...
float GetMagnitudeSquared() const
Get the magnitude squared.
unsigned int GetNCaloHits() const
Get the number of calo hits in the cluster.
float GetElectromagneticEnergy() const
Get the sum of electromagnetic energy measures of all constituent calo hits, units GeV.
static StatusCode ReadValue(const TiXmlHandle &xmlHandle, const std::string &xmlElementName, T &t)
Read a value from an xml element.
std::vector< const Cluster * > ClusterVector
StatusCode
The StatusCode enum.