9 #include "Pandora/AlgorithmHeaders.h"
20 EnergyKickFeatureTool::EnergyKickFeatureTool() : m_rOffset(10.f), m_xOffset(0.06f)
31 if (PandoraContentApi::GetSettings(*pAlgorithm)->ShouldDisplayAlgorithmInfo())
32 std::cout <<
"----> Running Algorithm Tool: " << this->GetInstanceName() <<
", " << this->GetType() << std::endl;
34 float energyKick(0.f);
45 featureVector.push_back(energyKick);
53 unsigned int totHits(0);
55 float totEnergy(0.f), totEnergyKick(0.f), totHitKick(0.f);
59 const Cluster *
const pCluster(slidingFitData.GetCluster());
61 if (pCluster->GetElectromagneticEnergy() < std::numeric_limits<float>::epsilon())
64 const CartesianVector vertexToMinLayer(slidingFitData.GetMinLayerPosition() - vertexPosition2D);
65 const CartesianVector vertexToMaxLayer(slidingFitData.GetMaxLayerPosition() - vertexPosition2D);
67 const bool minLayerClosest(vertexToMinLayer.GetMagnitudeSquared() < vertexToMaxLayer.GetMagnitudeSquared());
68 const CartesianVector &clusterDisplacement((minLayerClosest) ? vertexToMinLayer : vertexToMaxLayer);
69 const CartesianVector &clusterDirection((minLayerClosest) ? slidingFitData.GetMinLayerDirection() : slidingFitData.GetMaxLayerDirection());
74 float energyKick(0.f);
75 if (useEnergy && totEnergy > std::numeric_limits<float>::epsilon())
76 energyKick = totEnergyKick / totEnergy;
78 else if (!useEnergy && totHits > 0)
79 energyKick = totHitKick /
static_cast<float>(totHits);
87 const CartesianVector &clusterDirection,
float &totEnergyKick,
float &totEnergy,
float &totHitKick,
unsigned int &totHits)
const
89 const float impactParameter(clusterDisplacement.GetCrossProduct(clusterDirection).GetMagnitude());
90 const float displacement(clusterDisplacement.GetMagnitude());
92 totEnergyKick += pCluster->GetElectromagneticEnergy() * (impactParameter +
m_xOffset) / (displacement +
m_rOffset);
93 totEnergy += pCluster->GetElectromagneticEnergy();
95 totHitKick +=
static_cast<float>(pCluster->GetNCaloHits()) * (impactParameter +
m_xOffset) / (displacement +
m_rOffset);
96 totHits += pCluster->GetNCaloHits();
103 PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
"ROffset",
m_rOffset));
105 PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
"XOffset",
m_xOffset));
107 return STATUS_CODE_SUCCESS;
MvaTypes::MvaFeatureVector MvaFeatureVector
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 &, const float, float &)
Run the tool.
void IncrementEnergyKickParameters(const pandora::Cluster *const pCluster, const pandora::CartesianVector &clusterDisplacement, const pandora::CartesianVector &clusterDirection, float &totEnergyKick, float &totEnergy, float &totHitKick, unsigned int &totHits) const
Increment the energy kick parameters for a given cluster.
static pandora::CartesianVector ProjectPosition(const pandora::Pandora &pandora, const pandora::CartesianVector &position3D, const pandora::HitType view)
Project 3D position into a given 2D view.
float m_xOffset
The x offset parameter in the energy score.
float m_rOffset
The r offset parameter in the energy score.
std::vector< SlidingFitData > SlidingFitDataList
Header file for the geometry helper class.
std::map< pandora::HitType, const ShowerClusterList > ShowerClusterListMap
Map of shower cluster lists for passing to tools.
std::map< pandora::HitType, const pandora::ClusterList & > ClusterListMap
Map array of cluster lists for passing to tools.
VertexSelectionBaseAlgorithm class.
required by fuzzyCluster table::sbnd_g4_services gaushitTruthMatch pandora
std::map< pandora::HitType, const SlidingFitDataList > SlidingFitDataListMap
Map of sliding fit data lists for passing to tools.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
float GetEnergyKickForView(const pandora::CartesianVector &vertexPosition2D, const VertexSelectionBaseAlgorithm::SlidingFitDataList &slidingFitDataList) const
Get the energy kick feature for a given view.
std::map< pandora::HitType, const std::reference_wrapper< HitKDTree2D > > KDTreeMap
Map array of hit kd trees for passing to tools.
BEGIN_PROLOG could also be cout