LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
lar_content::TrainedVertexSelectionAlgorithm Class Referenceabstract

TrainedVertexSelectionAlgorithm class. More...

#include "TrainedVertexSelectionAlgorithm.h"

Inheritance diagram for lar_content::TrainedVertexSelectionAlgorithm:
lar_content::VertexSelectionBaseAlgorithm lar_content::CheatingVertexSelectionAlgorithm lar_content::MvaVertexSelectionAlgorithm< T >

Classes

class  EventFeatureInfo
 Event feature info class. More...
 
class  VertexFeatureInfo
 Vertex feature info class. More...
 
class  VertexSharedFeatureInfo
 Shared vertex feature info class. More...
 

Public Types

typedef std::map< const pandora::Vertex *const, VertexFeatureInfoVertexFeatureInfoMap
 
typedef std::vector< VertexScoreVertexScoreList
 
typedef std::vector< SlidingFitDataSlidingFitDataList
 
typedef std::vector< ShowerClusterShowerClusterList
 
typedef std::map< pandora::HitType, const pandora::ClusterList & > ClusterListMap
 Map array of cluster lists for passing to tools. More...
 
typedef std::map< pandora::HitType, const SlidingFitDataListSlidingFitDataListMap
 Map of sliding fit data lists for passing to tools. More...
 
typedef std::map< pandora::HitType, const ShowerClusterListShowerClusterListMap
 Map of shower cluster lists for passing to tools. More...
 
typedef std::map< pandora::HitType, const std::reference_wrapper< HitKDTree2D > > KDTreeMap
 Map array of hit kd trees for passing to tools. More...
 
typedef MvaFeatureTool< const VertexSelectionBaseAlgorithm *const, const pandora::Vertex *const, const SlidingFitDataListMap &, const ClusterListMap &, const KDTreeMap &, const ShowerClusterListMap &, const float, float & > VertexFeatureTool
 The base type for the vertex feature tools. More...
 

Public Member Functions

 TrainedVertexSelectionAlgorithm ()
 Default constructor. More...
 

Protected Types

typedef std::pair< pandora::CartesianVector, pandora::CartesianVector > ClusterEndPoints
 
typedef std::map< const pandora::Cluster *const, ClusterEndPointsClusterEndPointsMap
 
typedef std::vector< LArMvaHelper::MvaFeatureVectorFeatureListVector
 
typedef std::vector< pandora::VertexVector > VectorOfVertexVectors
 
typedef KDTreeLinkerAlgo< const pandora::CaloHit *, 2 > HitKDTree2D
 
typedef KDTreeNodeInfoT< const pandora::CaloHit *, 2 > HitKDNode2D
 
typedef std::vector< HitKDNode2DHitKDNode2DList
 
typedef std::unordered_map< const pandora::CaloHit *, const pandora::Cluster * > HitToClusterMap
 

Protected Member Functions

virtual void GetVertexScoreList (const pandora::VertexVector &vertexVector, const BeamConstants &beamConstants, HitKDTree2D &kdTreeU, HitKDTree2D &kdTreeV, HitKDTree2D &kdTreeW, VertexScoreList &vertexScoreList) const =0
 Get the vertex score list. More...
 
void CalculateShowerClusterList (const pandora::ClusterList &inputClusterList, ShowerClusterList &showerClusterList) const
 Calculate the shower cluster map for a cluster list. More...
 
void GetShowerLikeClusterEndPoints (const pandora::ClusterList &clusterList, pandora::ClusterList &showerLikeClusters, ClusterEndPointsMap &clusterEndPointsMap) const
 Add the endpoints of any shower-like clusters to the map. More...
 
void PopulateKdTree (const pandora::ClusterList &clusterList, HitKDTree2D &kdTree, HitToClusterMap &hitToClusterMap) const
 Populate kd tree with information about hits in a provided list of clusters. More...
 
bool AddClusterToShower (const ClusterEndPointsMap &clusterEndPointsMap, pandora::ClusterList &availableShowerLikeClusters, const pandora::Cluster *const pCluster, pandora::ClusterList &showerCluster) const
 Try to add an available cluster to a given shower cluster, using shower clustering approximation. More...
 
bool AddClusterToShower (HitKDTree2D &kdTree, const HitToClusterMap &hitToClusterMap, pandora::ClusterList &availableShowerLikeClusters, const pandora::Cluster *const pCluster, pandora::ClusterList &showerCluster) const
 Try to add an available cluster to a given shower cluster, using cluster hit positions cached in kd tree. More...
 
EventFeatureInfo CalculateEventFeatures (const pandora::ClusterList &clusterListU, const pandora::ClusterList &clusterListV, const pandora::ClusterList &clusterListW, const pandora::VertexVector &vertexVector) const
 Calculate the event parameters. More...
 
void IncrementShoweryParameters (const pandora::ClusterList &clusterList, unsigned int &nShoweryHits, unsigned int &nHits, float &eventEnergy) const
 Increment the showery hit parameters for a cluster list. More...
 
bool IsClusterShowerLike (const pandora::Cluster *const pCluster) const
 Find whether a cluster is shower-like. More...
 
void GetLegacyEventShapeFeatures (const pandora::ClusterList &clusterList, float &eventVolume, float &longitudinality) const
 Get the event shape features. More...
 
void GetEventShapeFeatures (const ClusterListMap &clusterListMap, float &eventArea, float &longitudinality) const
 Get the event shape features. More...
 
void Get2DSpan (const pandora::ClusterList &clusterList, float &xSpan, float &zSpan) const
 Get the coordinate span in one view. More...
 
void UpdateSpanCoordinate (const float minPositionCoord, const float maxPositionCoord, pandora::InputFloat &minCoord, pandora::InputFloat &maxCoord) const
 Update the min/max coordinate spans. More...
 
float GetCoordinateSpan (const pandora::InputFloat &minCoord, const pandora::InputFloat &maxCoord) const
 Get the coordinate span. More...
 
void AddEventFeaturesToVector (const EventFeatureInfo &eventFeatureInfo, LArMvaHelper::MvaFeatureVector &featureVector) const
 Add the event features to a vector in the correct order. More...
 
void PopulateVertexFeatureInfoMap (const BeamConstants &beamConstants, const ClusterListMap &clusterListMap, const SlidingFitDataListMap &slidingFitDataListMap, const ShowerClusterListMap &showerClusterListMap, const KDTreeMap &kdTreeMap, const pandora::Vertex *const pVertex, VertexFeatureInfoMap &vertexFeatureInfoMap) const
 Populate the vertex feature info map for a given vertex. More...
 
void PopulateInitialScoreList (VertexFeatureInfoMap &vertexFeatureInfoMap, const pandora::Vertex *const pVertex, VertexScoreList &initialScoreList) const
 Populate the initial vertex score list for a given vertex. More...
 
void GetBestRegionVertices (VertexScoreList &initialScoreList, pandora::VertexVector &bestRegionVertices) const
 Get the list of top-N separated vertices. More...
 
void ProduceTrainingSets (const pandora::VertexVector &vertexVector, const pandora::VertexVector &bestRegionVertices, VertexFeatureInfoMap &vertexFeatureInfoMap, const LArMvaHelper::MvaFeatureVector &eventFeatureList, const KDTreeMap &kdTreeMap) const
 Produce the region and vertex training sets. More...
 
void CalculateRPhiScores (pandora::VertexVector &vertexVector, VertexFeatureInfoMap &vertexFeatureInfoMap, const KDTreeMap &kdTreeMap) const
 Calculate the r/phi scores for the vertices in a vector, possibly erasing those that fail the fast score test. More...
 
std::string GetInteractionType () const
 Get the interaction type string. More...
 
const pandora::Vertex * ProduceTrainingExamples (const pandora::VertexVector &vertexVector, const VertexFeatureInfoMap &vertexFeatureInfoMap, std::bernoulli_distribution &coinFlip, std::mt19937 &generator, const std::string &interactionType, const std::string &trainingOutputFile, const LArMvaHelper::MvaFeatureVector &eventFeatureList, const KDTreeMap &kdTreeMap, const float maxRadius, const bool useRPhi) const
 Produce a set of training examples for a binary classifier. More...
 
void GetBestVertex (const pandora::VertexVector &vertexVector, const pandora::Vertex *&pBestVertex, float &bestVertexDr) const
 Use the MC information to get the best vertex from a list. More...
 
void GetSharedFeatures (const pandora::Vertex *const pVertex1, const pandora::Vertex *const pVertex2, const KDTreeMap &kdTreeMap, float &separation, float &axisHits) const
 Calculates the shared features of a pair of vertex candidates. More...
 
void IncrementSharedAxisValues (const pandora::CartesianVector pos1, const pandora::CartesianVector pos2, HitKDTree2D &kdTree, float &axisHits) const
 Increments the axis hits information for one view. More...
 
bool IsHitInBox (const pandora::CartesianVector &hitPos, const pandora::CartesianVector &point1, const pandora::CartesianVector &point2, const pandora::CartesianVector &point3, const pandora::CartesianVector &point4) const
 Determines whether a hit lies within the box defined by four other positions. More...
 
void AddVertexFeaturesToVector (const VertexFeatureInfo &vertexFeatureInfo, LArMvaHelper::MvaFeatureVector &featureVector, const bool useRPhi) const
 Add the vertex features to a vector in the correct order. More...
 
void AddSharedFeaturesToVector (const VertexSharedFeatureInfo &vertexSharedFeatureInfo, LArMvaHelper::MvaFeatureVector &featureVector) const
 Add the shared features to a vector in the correct order. More...
 
void PopulateFinalVertexScoreList (const VertexFeatureInfoMap &vertexFeatureInfoMap, const pandora::Vertex *const pFavouriteVertex, const pandora::VertexVector &vertexVector, VertexScoreList &finalVertexScoreList) const
 Populate the final vertex score list using the r/phi score to find the best vertex in the vicinity. More...
 
pandora::StatusCode ReadSettings (const pandora::TiXmlHandle xmlHandle)
 
virtual void FilterVertexList (const pandora::VertexList *const pInputVertexList, HitKDTree2D &kdTreeU, HitKDTree2D &kdTreeV, HitKDTree2D &kdTreeW, pandora::VertexVector &filteredVertices) const
 Filter the input list of vertices to obtain a reduced number of vertex candidates. More...
 
virtual void GetBeamConstants (const pandora::VertexVector &vertexVector, BeamConstants &beamConstants) const
 Get the beam score constants for a provided list of candidate vertices. More...
 
void GetClusterLists (const pandora::StringVector &inputClusterListNames, pandora::ClusterList &clusterListU, pandora::ClusterList &clusterListV, pandora::ClusterList &clusterListW) const
 Get the cluster lists. More...
 
void CalculateClusterSlidingFits (const pandora::ClusterList &inputClusterList, const unsigned int minClusterCaloHits, const unsigned int slidingFitWindow, SlidingFitDataList &slidingFitDataList) const
 Calculate the cluster sliding fits. More...
 
float GetBeamDeweightingScore (const BeamConstants &beamConstants, const pandora::Vertex *const pVertex) const
 Get the beam deweighting score for a vertex. More...
 
bool IsBeamModeOn () const
 Whether algorithm is running in beam mode, assuming neutrinos travel in positive z-direction. More...
 
float GetVertexEnergy (const pandora::Vertex *const pVertex, const KDTreeMap &kdTreeMap) const
 Calculate the energy of a vertex candidate by summing values from all three planes. More...
 
float VertexHitEnergy (const pandora::Vertex *const pVertex, const pandora::HitType hitType, HitKDTree2D &kdTree) const
 Finds the energy of the nearest hit to the vertex candidate in this view. More...
 

Protected Attributes

VertexFeatureTool::FeatureToolVector m_featureToolVector
 The feature tool vector. More...
 
bool m_trainingSetMode
 Whether to train. More...
 
bool m_allowClassifyDuringTraining
 Whether classification is allowed during training. More...
 
float m_mcVertexXCorrection
 The correction to the x-coordinate of the MC vertex position. More...
 
std::string m_trainingOutputFileRegion
 The training output file for the region mva. More...
 
std::string m_trainingOutputFileVertex
 The training output file for the vertex mva. More...
 
std::string m_mcParticleListName
 The MC particle list for creating training examples. More...
 
std::string m_caloHitListName
 The 2D CaloHit list name. More...
 
pandora::StringVector m_inputClusterListNames
 The list of cluster list names. More...
 
unsigned int m_minClusterCaloHits
 The min number of hits parameter in the energy score. More...
 
unsigned int m_slidingFitWindow
 The layer window for the sliding linear fits. More...
 
float m_minShowerSpineLength
 The minimum length at which all are considered to be tracks. More...
 
float m_beamDeweightingConstant
 The beam deweighting constant for the initial region score list. More...
 
float m_localAsymmetryConstant
 The local asymmetry constant for the initial region score list. More...
 
float m_globalAsymmetryConstant
 The global asymmetry constant for the initial region score list. More...
 
float m_showerAsymmetryConstant
 The shower asymmetry constant for the initial region score list. More...
 
float m_energyKickConstant
 The energy kick constant for the initial region score list. More...
 
float m_showerClusteringDistance
 The shower clustering distance. More...
 
unsigned int m_minShowerClusterHits
 The minimum number of shower cluster hits. More...
 
bool m_useShowerClusteringApproximation
 Whether to use the shower clustering distance approximation. More...
 
float m_regionRadius
 The radius for a vertex region. More...
 
float m_rPhiFineTuningRadius
 The maximum distance the r/phi tune can move a vertex. More...
 
float m_maxTrueVertexRadius
 The maximum distance at which a vertex candidate can be considered the 'true' vertex. More...
 
bool m_useRPhiFeatureForRegion
 Whether to use the r/phi feature for the region vertex. More...
 
bool m_dropFailedRPhiFastScoreCandidates
 Whether to drop candidates that fail the r/phi fast score test. More...
 
bool m_testBeamMode
 Test beam mode. More...
 
bool m_legacyEventShapes
 Whether to use the old event shapes calculation. More...
 
bool m_legacyVariables
 Whether to only use the old variables. More...
 

Detailed Description

Member Typedef Documentation

typedef std::pair<pandora::CartesianVector, pandora::CartesianVector> lar_content::TrainedVertexSelectionAlgorithm::ClusterEndPoints
protected

Definition at line 131 of file TrainedVertexSelectionAlgorithm.h.

typedef std::map<const pandora::Cluster *const, ClusterEndPoints> lar_content::TrainedVertexSelectionAlgorithm::ClusterEndPointsMap
protected

Definition at line 132 of file TrainedVertexSelectionAlgorithm.h.

typedef std::map<pandora::HitType, const pandora::ClusterList &> lar_content::VertexSelectionBaseAlgorithm::ClusterListMap
inherited

Map array of cluster lists for passing to tools.

Definition at line 227 of file VertexSelectionBaseAlgorithm.h.

typedef KDTreeNodeInfoT<const pandora::CaloHit *, 2> lar_content::TrainedVertexSelectionAlgorithm::HitKDNode2D
protected

Definition at line 168 of file TrainedVertexSelectionAlgorithm.h.

typedef KDTreeLinkerAlgo<const pandora::CaloHit *, 2> lar_content::TrainedVertexSelectionAlgorithm::HitKDTree2D
protected

Definition at line 167 of file TrainedVertexSelectionAlgorithm.h.

typedef std::unordered_map<const pandora::CaloHit *, const pandora::Cluster *> lar_content::TrainedVertexSelectionAlgorithm::HitToClusterMap
protected

Definition at line 171 of file TrainedVertexSelectionAlgorithm.h.

typedef std::map<pandora::HitType, const std::reference_wrapper<HitKDTree2D> > lar_content::VertexSelectionBaseAlgorithm::KDTreeMap
inherited

Map array of hit kd trees for passing to tools.

Definition at line 230 of file VertexSelectionBaseAlgorithm.h.

typedef std::map<pandora::HitType, const ShowerClusterList> lar_content::VertexSelectionBaseAlgorithm::ShowerClusterListMap
inherited

Map of shower cluster lists for passing to tools.

Definition at line 229 of file VertexSelectionBaseAlgorithm.h.

typedef std::map<pandora::HitType, const SlidingFitDataList> lar_content::VertexSelectionBaseAlgorithm::SlidingFitDataListMap
inherited

Map of sliding fit data lists for passing to tools.

Definition at line 228 of file VertexSelectionBaseAlgorithm.h.

typedef std::vector<pandora::VertexVector> lar_content::TrainedVertexSelectionAlgorithm::VectorOfVertexVectors
protected

Definition at line 134 of file TrainedVertexSelectionAlgorithm.h.

Definition at line 70 of file TrainedVertexSelectionAlgorithm.h.

typedef MvaFeatureTool<const VertexSelectionBaseAlgorithm *const, const pandora::Vertex *const, const SlidingFitDataListMap &, const ClusterListMap &, const KDTreeMap &, const ShowerClusterListMap &, const float, float &> lar_content::VertexSelectionBaseAlgorithm::VertexFeatureTool
inherited

The base type for the vertex feature tools.

Definition at line 234 of file VertexSelectionBaseAlgorithm.h.

Constructor & Destructor Documentation

lar_content::TrainedVertexSelectionAlgorithm::TrainedVertexSelectionAlgorithm ( )

Default constructor.

Definition at line 36 of file TrainedVertexSelectionAlgorithm.cc.

36  :
38  m_trainingSetMode(false),
42  m_slidingFitWindow(100),
52  m_regionRadius(10.f),
57  m_testBeamMode(false),
58  m_legacyEventShapes(true),
59  m_legacyVariables(true)
60 {
61 }
bool m_useShowerClusteringApproximation
Whether to use the shower clustering distance approximation.
bool m_useRPhiFeatureForRegion
Whether to use the r/phi feature for the region vertex.
unsigned int m_minClusterCaloHits
The min number of hits parameter in the energy score.
bool m_legacyEventShapes
Whether to use the old event shapes calculation.
float m_localAsymmetryConstant
The local asymmetry constant for the initial region score list.
unsigned int m_minShowerClusterHits
The minimum number of shower cluster hits.
TFile f
Definition: plotHisto.C:6
float m_globalAsymmetryConstant
The global asymmetry constant for the initial region score list.
float m_maxTrueVertexRadius
The maximum distance at which a vertex candidate can be considered the &#39;true&#39; vertex.
float m_showerAsymmetryConstant
The shower asymmetry constant for the initial region score list.
float m_beamDeweightingConstant
The beam deweighting constant for the initial region score list.
bool m_allowClassifyDuringTraining
Whether classification is allowed during training.
bool m_dropFailedRPhiFastScoreCandidates
Whether to drop candidates that fail the r/phi fast score test.
float m_energyKickConstant
The energy kick constant for the initial region score list.
float m_mcVertexXCorrection
The correction to the x-coordinate of the MC vertex position.
bool m_legacyVariables
Whether to only use the old variables.
unsigned int m_slidingFitWindow
The layer window for the sliding linear fits.
float m_minShowerSpineLength
The minimum length at which all are considered to be tracks.
float m_showerClusteringDistance
The shower clustering distance.
float m_rPhiFineTuningRadius
The maximum distance the r/phi tune can move a vertex.

Member Function Documentation

bool lar_content::TrainedVertexSelectionAlgorithm::AddClusterToShower ( const ClusterEndPointsMap clusterEndPointsMap,
pandora::ClusterList &  availableShowerLikeClusters,
const pandora::Cluster *const  pCluster,
pandora::ClusterList &  showerCluster 
) const
protected

Try to add an available cluster to a given shower cluster, using shower clustering approximation.

Parameters
clusterEndPointsMapthe map of shower-like cluster endpoints
availableShowerLikeClustersthe list of shower-like clusters still available
pClusterthe cluster in the shower cluster from which to consider distances
showerClusterthe shower cluster
Returns
boolean

Referenced by CalculateShowerClusterList(), and PopulateKdTree().

bool lar_content::TrainedVertexSelectionAlgorithm::AddClusterToShower ( HitKDTree2D kdTree,
const HitToClusterMap hitToClusterMap,
pandora::ClusterList &  availableShowerLikeClusters,
const pandora::Cluster *const  pCluster,
pandora::ClusterList &  showerCluster 
) const
protected

Try to add an available cluster to a given shower cluster, using cluster hit positions cached in kd tree.

Parameters
kdTreethe kd tree, used purely for efficiency in events with large hit multiplicity
hitToClusterMapthe hit to cluster map, used to interpret kd tree findings
availableShowerLikeClustersthe list of shower-like clusters still available
pClusterthe cluster in the shower cluster from which to consider distances
showerClusterthe shower cluster
Returns
boolean
void lar_content::TrainedVertexSelectionAlgorithm::AddEventFeaturesToVector ( const EventFeatureInfo eventFeatureInfo,
LArMvaHelper::MvaFeatureVector featureVector 
) const
protected

Add the event features to a vector in the correct order.

Parameters
eventFeatureInfothe event feature info
featureVectorthe vector of doubles to append

Definition at line 412 of file TrainedVertexSelectionAlgorithm.cc.

References lar_content::VertexSelectionBaseAlgorithm::IsBeamModeOn(), lar_content::TrainedVertexSelectionAlgorithm::EventFeatureInfo::m_eventArea, lar_content::TrainedVertexSelectionAlgorithm::EventFeatureInfo::m_eventEnergy, lar_content::TrainedVertexSelectionAlgorithm::EventFeatureInfo::m_eventShoweryness, lar_content::TrainedVertexSelectionAlgorithm::EventFeatureInfo::m_longitudinality, lar_content::TrainedVertexSelectionAlgorithm::EventFeatureInfo::m_nCandidates, lar_content::TrainedVertexSelectionAlgorithm::EventFeatureInfo::m_nClusters, and lar_content::TrainedVertexSelectionAlgorithm::EventFeatureInfo::m_nHits.

Referenced by lar_content::MvaVertexSelectionAlgorithm< T >::GetVertexScoreList().

413 {
414  featureVector.push_back(static_cast<double>(eventFeatureInfo.m_eventShoweryness));
415  featureVector.push_back(static_cast<double>(eventFeatureInfo.m_eventEnergy));
416  featureVector.push_back(static_cast<double>(eventFeatureInfo.m_eventArea));
417  featureVector.push_back(static_cast<double>(eventFeatureInfo.m_longitudinality));
418  if (this->IsBeamModeOn())
419  {
420  featureVector.push_back(static_cast<double>(eventFeatureInfo.m_nHits));
421  featureVector.push_back(static_cast<double>(eventFeatureInfo.m_nClusters));
422  featureVector.push_back(static_cast<double>(eventFeatureInfo.m_nCandidates));
423  }
424 }
bool IsBeamModeOn() const
Whether algorithm is running in beam mode, assuming neutrinos travel in positive z-direction.
void lar_content::TrainedVertexSelectionAlgorithm::AddSharedFeaturesToVector ( const VertexSharedFeatureInfo vertexSharedFeatureInfo,
LArMvaHelper::MvaFeatureVector featureVector 
) const
protected

Add the shared features to a vector in the correct order.

Parameters
vertexSharedFeatureInfothe shared vertex feature info
featureVectorthe vector of floats to append

Definition at line 829 of file TrainedVertexSelectionAlgorithm.cc.

References lar_content::TrainedVertexSelectionAlgorithm::VertexSharedFeatureInfo::m_axisHits, and lar_content::TrainedVertexSelectionAlgorithm::VertexSharedFeatureInfo::m_separation.

Referenced by lar_content::MvaVertexSelectionAlgorithm< T >::CompareVertices(), and ProduceTrainingExamples().

831 {
832  featureVector.push_back(static_cast<double>(vertexSharedFeatureInfo.m_separation));
833  featureVector.push_back(static_cast<double>(vertexSharedFeatureInfo.m_axisHits));
834 }
void lar_content::TrainedVertexSelectionAlgorithm::AddVertexFeaturesToVector ( const VertexFeatureInfo vertexFeatureInfo,
LArMvaHelper::MvaFeatureVector featureVector,
const bool  useRPhi 
) const
protected

Add the vertex features to a vector in the correct order.

Parameters
vertexFeatureInfothe vertex feature info
featureVectorthe vector of floats to append
useRPhiwhether to include the r/phi feature

Definition at line 807 of file TrainedVertexSelectionAlgorithm.cc.

References lar_content::VertexSelectionBaseAlgorithm::IsBeamModeOn(), lar_content::TrainedVertexSelectionAlgorithm::VertexFeatureInfo::m_beamDeweighting, lar_content::TrainedVertexSelectionAlgorithm::VertexFeatureInfo::m_dEdxAsymmetry, lar_content::TrainedVertexSelectionAlgorithm::VertexFeatureInfo::m_energyKick, lar_content::TrainedVertexSelectionAlgorithm::VertexFeatureInfo::m_globalAsymmetry, m_legacyVariables, lar_content::TrainedVertexSelectionAlgorithm::VertexFeatureInfo::m_localAsymmetry, lar_content::TrainedVertexSelectionAlgorithm::VertexFeatureInfo::m_rPhiFeature, lar_content::TrainedVertexSelectionAlgorithm::VertexFeatureInfo::m_showerAsymmetry, and lar_content::TrainedVertexSelectionAlgorithm::VertexFeatureInfo::m_vertexEnergy.

Referenced by lar_content::MvaVertexSelectionAlgorithm< T >::CompareVertices(), and ProduceTrainingExamples().

809 {
810  if (this->IsBeamModeOn())
811  featureVector.push_back(static_cast<double>(vertexFeatureInfo.m_beamDeweighting));
812  featureVector.push_back(static_cast<double>(vertexFeatureInfo.m_energyKick));
813  featureVector.push_back(static_cast<double>(vertexFeatureInfo.m_globalAsymmetry));
814  featureVector.push_back(static_cast<double>(vertexFeatureInfo.m_localAsymmetry));
815  featureVector.push_back(static_cast<double>(vertexFeatureInfo.m_showerAsymmetry));
816 
817  if (!m_legacyVariables)
818  {
819  featureVector.push_back(static_cast<double>(vertexFeatureInfo.m_dEdxAsymmetry));
820  featureVector.push_back(static_cast<double>(vertexFeatureInfo.m_vertexEnergy));
821  }
822 
823  if (useRPhi)
824  featureVector.push_back(static_cast<double>(vertexFeatureInfo.m_rPhiFeature));
825 }
bool IsBeamModeOn() const
Whether algorithm is running in beam mode, assuming neutrinos travel in positive z-direction.
bool m_legacyVariables
Whether to only use the old variables.
void lar_content::VertexSelectionBaseAlgorithm::CalculateClusterSlidingFits ( const pandora::ClusterList &  inputClusterList,
const unsigned int  minClusterCaloHits,
const unsigned int  slidingFitWindow,
SlidingFitDataList slidingFitDataList 
) const
protectedinherited

Calculate the cluster sliding fits.

Parameters
inputClusterListthe input cluster list
minClusterCaloHitsthe minimum number of cluster calo hits
slidingFitWindowthe sliding fit window
slidingFitDataListthe list of sliding fits to fill

Definition at line 120 of file VertexSelectionBaseAlgorithm.cc.

References lar_content::LArGeometryHelper::GetWireZPitch(), and lar_content::LArClusterHelper::SortByNHits().

Referenced by lar_content::EnergyKickVertexSelectionAlgorithm::GetVertexScoreList(), and lar_content::MvaVertexSelectionAlgorithm< T >::GetVertexScoreList().

122 {
123  const float slidingFitPitch(LArGeometryHelper::GetWireZPitch(this->GetPandora()));
124 
125  ClusterVector sortedClusters(inputClusterList.begin(), inputClusterList.end());
126  std::sort(sortedClusters.begin(), sortedClusters.end(), LArClusterHelper::SortByNHits);
127 
128  for (const Cluster *const pCluster : sortedClusters)
129  {
130  if (pCluster->GetNCaloHits() < minClusterCaloHits)
131  continue;
132 
133  // Make sure the window size is such that there are not more layers than hits (following TwoDSlidingLinearFit calculation).
134  const unsigned int newSlidingFitWindow(
135  std::min(static_cast<int>(pCluster->GetNCaloHits()), static_cast<int>(slidingFitPitch * slidingFitWindow)));
136  slidingFitDataList.emplace_back(pCluster, newSlidingFitWindow, slidingFitPitch);
137  }
138 }
static bool SortByNHits(const pandora::Cluster *const pLhs, const pandora::Cluster *const pRhs)
Sort clusters by number of hits, then layer span, then inner layer, then position, then pulse-height.
static float GetWireZPitch(const pandora::Pandora &pandora, const float maxWirePitchDiscrepancy=0.01)
Return the wire pitch.
std::vector< art::Ptr< recob::Cluster > > ClusterVector
TrainedVertexSelectionAlgorithm::EventFeatureInfo lar_content::TrainedVertexSelectionAlgorithm::CalculateEventFeatures ( const pandora::ClusterList &  clusterListU,
const pandora::ClusterList &  clusterListV,
const pandora::ClusterList &  clusterListW,
const pandora::VertexVector &  vertexVector 
) const
protected

Calculate the event parameters.

Parameters
clusterListUthe U-view cluster list
clusterListVthe V-view cluster list
clusterListWthe W-view cluster list
vertexVectorthe vector of vertex candidates
Returns
the EventFeatureInfo object

Definition at line 240 of file TrainedVertexSelectionAlgorithm.cc.

References f, GetEventShapeFeatures(), GetLegacyEventShapeFeatures(), IncrementShoweryParameters(), and m_legacyEventShapes.

Referenced by lar_content::MvaVertexSelectionAlgorithm< T >::GetVertexScoreList().

242 {
243  float eventEnergy(0.f);
244  unsigned int nShoweryHits(0), nHits(0);
245 
246  this->IncrementShoweryParameters(clusterListU, nShoweryHits, nHits, eventEnergy);
247  this->IncrementShoweryParameters(clusterListV, nShoweryHits, nHits, eventEnergy);
248  this->IncrementShoweryParameters(clusterListW, nShoweryHits, nHits, eventEnergy);
249 
250  const unsigned int nClusters(clusterListU.size() + clusterListV.size() + clusterListW.size());
251  const float eventShoweryness((nHits > 0) ? static_cast<float>(nShoweryHits) / static_cast<float>(nHits) : 0.f);
252 
253  ClusterList allClusters(clusterListU);
254  allClusters.insert(allClusters.end(), clusterListV.begin(), clusterListV.end());
255  allClusters.insert(allClusters.end(), clusterListW.begin(), clusterListW.end());
256 
257  const ClusterListMap clusterListMap{{TPC_VIEW_U, clusterListU}, {TPC_VIEW_V, clusterListV}, {TPC_VIEW_W, clusterListW}};
258 
259  float eventArea(0.f), longitudinality(0.f);
261  this->GetLegacyEventShapeFeatures(allClusters, eventArea, longitudinality);
262  else
263  this->GetEventShapeFeatures(clusterListMap, eventArea, longitudinality);
264 
265  return EventFeatureInfo(eventShoweryness, eventEnergy, eventArea, longitudinality, nHits, nClusters, vertexVector.size());
266 }
void GetLegacyEventShapeFeatures(const pandora::ClusterList &clusterList, float &eventVolume, float &longitudinality) const
Get the event shape features.
bool m_legacyEventShapes
Whether to use the old event shapes calculation.
TFile f
Definition: plotHisto.C:6
std::map< pandora::HitType, const pandora::ClusterList & > ClusterListMap
Map array of cluster lists for passing to tools.
void IncrementShoweryParameters(const pandora::ClusterList &clusterList, unsigned int &nShoweryHits, unsigned int &nHits, float &eventEnergy) const
Increment the showery hit parameters for a cluster list.
void GetEventShapeFeatures(const ClusterListMap &clusterListMap, float &eventArea, float &longitudinality) const
Get the event shape features.
void lar_content::TrainedVertexSelectionAlgorithm::CalculateRPhiScores ( pandora::VertexVector &  vertexVector,
VertexFeatureInfoMap vertexFeatureInfoMap,
const KDTreeMap kdTreeMap 
) const
protected

Calculate the r/phi scores for the vertices in a vector, possibly erasing those that fail the fast score test.

Parameters
vertexVectorthe vector of vertices
vertexFeatureInfoMapthe vertex feature info map
kdTreeMapthe kd tree map

Definition at line 571 of file TrainedVertexSelectionAlgorithm.cc.

References lar_content::TrainedVertexSelectionAlgorithm::VertexFeatureInfo::m_beamDeweighting, m_dropFailedRPhiFastScoreCandidates, m_featureToolVector, and lar_content::TrainedVertexSelectionAlgorithm::VertexFeatureInfo::m_rPhiFeature.

Referenced by lar_content::MvaVertexSelectionAlgorithm< T >::GetVertexScoreList(), and ProduceTrainingSets().

573 {
574  float bestFastScore(-std::numeric_limits<float>::max());
575 
576  for (auto iter = vertexVector.begin(); iter != vertexVector.end(); /* no increment */)
577  {
578  VertexFeatureInfo &vertexFeatureInfo = vertexFeatureInfoMap.at(*iter);
579  vertexFeatureInfo.m_rPhiFeature = static_cast<float>(LArMvaHelper::CalculateFeaturesOfType<RPhiFeatureTool>(m_featureToolVector, this,
580  *iter, SlidingFitDataListMap(), ClusterListMap(), kdTreeMap, ShowerClusterListMap(), vertexFeatureInfo.m_beamDeweighting, bestFastScore)
581  .at(0)
582  .Get());
583 
584  if (m_dropFailedRPhiFastScoreCandidates && (vertexFeatureInfo.m_rPhiFeature <= std::numeric_limits<float>::epsilon()))
585  iter = vertexVector.erase(iter);
586 
587  else
588  ++iter;
589  }
590 }
VertexFeatureTool::FeatureToolVector m_featureToolVector
The feature tool vector.
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.
bool m_dropFailedRPhiFastScoreCandidates
Whether to drop candidates that fail the r/phi fast score test.
std::map< pandora::HitType, const SlidingFitDataList > SlidingFitDataListMap
Map of sliding fit data lists for passing to tools.
void lar_content::TrainedVertexSelectionAlgorithm::CalculateShowerClusterList ( const pandora::ClusterList &  inputClusterList,
ShowerClusterList showerClusterList 
) const
protected

Calculate the shower cluster map for a cluster list.

Parameters
inputClusterListthe input cluster list
showerClusterListthe shower cluster list to populate

Definition at line 65 of file TrainedVertexSelectionAlgorithm.cc.

References AddClusterToShower(), GetShowerLikeClusterEndPoints(), lar_content::LArGeometryHelper::GetWireZPitch(), m_minClusterCaloHits, m_slidingFitWindow, m_useShowerClusteringApproximation, and PopulateKdTree().

Referenced by lar_content::MvaVertexSelectionAlgorithm< T >::GetVertexScoreList().

66 {
67  ClusterEndPointsMap clusterEndPointsMap;
68  ClusterList showerLikeClusters;
69  this->GetShowerLikeClusterEndPoints(inputClusterList, showerLikeClusters, clusterEndPointsMap);
70 
71  const float slidingFitPitch(LArGeometryHelper::GetWireZPitch(this->GetPandora()));
72  ClusterList availableShowerLikeClusters(showerLikeClusters.begin(), showerLikeClusters.end());
73 
74  HitKDTree2D kdTree;
75  HitToClusterMap hitToClusterMap;
76 
78  this->PopulateKdTree(availableShowerLikeClusters, kdTree, hitToClusterMap);
79 
80  while (!availableShowerLikeClusters.empty())
81  {
82  ClusterList showerCluster;
83  showerCluster.push_back(availableShowerLikeClusters.back());
84  availableShowerLikeClusters.pop_back();
85 
86  bool addedCluster(true);
87  while (addedCluster && !availableShowerLikeClusters.empty())
88  {
89  addedCluster = false;
90  for (const Cluster *const pCluster : showerCluster)
91  {
93  {
94  addedCluster = this->AddClusterToShower(kdTree, hitToClusterMap, availableShowerLikeClusters, pCluster, showerCluster);
95  }
96  else
97  {
98  addedCluster = this->AddClusterToShower(clusterEndPointsMap, availableShowerLikeClusters, pCluster, showerCluster);
99  }
100 
101  if (addedCluster)
102  break;
103  }
104  }
105 
106  unsigned int totHits(0);
107  for (const Cluster *const pCluster : showerCluster)
108  totHits += pCluster->GetNCaloHits();
109 
110  if (totHits < m_minClusterCaloHits)
111  continue;
112 
113  showerClusterList.emplace_back(showerCluster, slidingFitPitch, m_slidingFitWindow);
114  }
115 }
bool m_useShowerClusteringApproximation
Whether to use the shower clustering distance approximation.
std::unordered_map< const pandora::CaloHit *, const pandora::Cluster * > HitToClusterMap
unsigned int m_minClusterCaloHits
The min number of hits parameter in the energy score.
KDTreeLinkerAlgo< const pandora::CaloHit *, 2 > HitKDTree2D
static float GetWireZPitch(const pandora::Pandora &pandora, const float maxWirePitchDiscrepancy=0.01)
Return the wire pitch.
void PopulateKdTree(const pandora::ClusterList &clusterList, HitKDTree2D &kdTree, HitToClusterMap &hitToClusterMap) const
Populate kd tree with information about hits in a provided list of clusters.
unsigned int m_slidingFitWindow
The layer window for the sliding linear fits.
std::map< const pandora::Cluster *const, ClusterEndPoints > ClusterEndPointsMap
bool AddClusterToShower(const ClusterEndPointsMap &clusterEndPointsMap, pandora::ClusterList &availableShowerLikeClusters, const pandora::Cluster *const pCluster, pandora::ClusterList &showerCluster) const
Try to add an available cluster to a given shower cluster, using shower clustering approximation...
void GetShowerLikeClusterEndPoints(const pandora::ClusterList &clusterList, pandora::ClusterList &showerLikeClusters, ClusterEndPointsMap &clusterEndPointsMap) const
Add the endpoints of any shower-like clusters to the map.
void lar_content::VertexSelectionBaseAlgorithm::FilterVertexList ( const pandora::VertexList *const  pInputVertexList,
HitKDTree2D kdTreeU,
HitKDTree2D kdTreeV,
HitKDTree2D kdTreeW,
pandora::VertexVector &  filteredVertices 
) const
protectedvirtualinherited

Filter the input list of vertices to obtain a reduced number of vertex candidates.

Parameters
pInputVertexListthe address of the input vertex list
kdTreeUthe kd tree for u hits
kdTreeVthe kd tree for v hits
kdTreeWthe kd tree for w hits
filteredVerticesto receive the filtered vertex list

Definition at line 40 of file VertexSelectionBaseAlgorithm.cc.

References lar_content::KDTreeLinkerAlgo< DATA, DIM >::empty(), lar_content::VertexSelectionBaseAlgorithm::IsVertexInGap(), lar_content::VertexSelectionBaseAlgorithm::IsVertexOnHit(), lar_content::VertexSelectionBaseAlgorithm::m_isEmptyViewAcceptable, lar_content::VertexSelectionBaseAlgorithm::m_minVertexAcceptableViews, and lar_content::VertexSelectionBaseAlgorithm::SortByVertexZPosition().

Referenced by lar_content::VertexSelectionBaseAlgorithm::Run().

42 {
43  for (const Vertex *const pVertex : *pInputVertexList)
44  {
45  unsigned int nAcceptableViews(0);
46 
47  if ((m_isEmptyViewAcceptable && kdTreeU.empty()) || this->IsVertexOnHit(pVertex, TPC_VIEW_U, kdTreeU) || this->IsVertexInGap(pVertex, TPC_VIEW_U))
48  ++nAcceptableViews;
49 
50  if ((m_isEmptyViewAcceptable && kdTreeV.empty()) || this->IsVertexOnHit(pVertex, TPC_VIEW_V, kdTreeV) || this->IsVertexInGap(pVertex, TPC_VIEW_V))
51  ++nAcceptableViews;
52 
53  if ((m_isEmptyViewAcceptable && kdTreeW.empty()) || this->IsVertexOnHit(pVertex, TPC_VIEW_W, kdTreeW) || this->IsVertexInGap(pVertex, TPC_VIEW_W))
54  ++nAcceptableViews;
55 
56  if (nAcceptableViews >= m_minVertexAcceptableViews)
57  filteredVertices.push_back(pVertex);
58  }
59 
60  std::sort(filteredVertices.begin(), filteredVertices.end(), SortByVertexZPosition);
61 }
bool IsVertexOnHit(const pandora::Vertex *const pVertex, const pandora::HitType hitType, HitKDTree2D &kdTree) const
Whether the vertex lies on a hit in the specified view.
bool IsVertexInGap(const pandora::Vertex *const pVertex, const pandora::HitType hitType) const
Whether the vertex lies in a registered gap.
static bool SortByVertexZPosition(const pandora::Vertex *const pLhs, const pandora::Vertex *const pRhs)
Sort vertices by increasing z position.
bool m_isEmptyViewAcceptable
Whether views entirely empty of hits are classed as &#39;acceptable&#39; for candidate filtration.
unsigned int m_minVertexAcceptableViews
The minimum number of views in which a candidate must sit on/near a hit or in a gap (or view can be e...
boost::graph_traits< ModuleGraph >::vertex_descriptor Vertex
Definition: ModuleGraph.h:25
void lar_content::TrainedVertexSelectionAlgorithm::Get2DSpan ( const pandora::ClusterList &  clusterList,
float &  xSpan,
float &  zSpan 
) const
protected

Get the coordinate span in one view.

Parameters
clusterListthe cluster list in one view
xSpanthe coordinate span in the drift direction
zSpanthe coordinate span in the wire direction

Definition at line 352 of file TrainedVertexSelectionAlgorithm.cc.

Referenced by GetEventShapeFeatures().

353 {
354  FloatVector xPositions, zPositions;
355 
356  for (const Cluster *const pCluster : clusterList)
357  {
358  const OrderedCaloHitList &orderedCaloHitList(pCluster->GetOrderedCaloHitList());
359 
360  for (OrderedCaloHitList::const_iterator iter = orderedCaloHitList.begin(), iterEnd = orderedCaloHitList.end(); iter != iterEnd; ++iter)
361  {
362  for (CaloHitList::const_iterator hitIter = iter->second->begin(), hitIterEnd = iter->second->end(); hitIter != hitIterEnd; ++hitIter)
363  {
364  xPositions.push_back((*hitIter)->GetPositionVector().GetX());
365  zPositions.push_back((*hitIter)->GetPositionVector().GetZ());
366  }
367  }
368  }
369 
370  std::sort(xPositions.begin(), xPositions.end());
371  std::sort(zPositions.begin(), zPositions.end());
372 
373  if (xPositions.empty())
374  {
375  xSpan = 0;
376  zSpan = 0;
377  }
378  else
379  {
380  const int low = std::round(0.05 * xPositions.size());
381  const int high = std::round(0.95 * xPositions.size()) - 1;
382 
383  xSpan = xPositions[high] - xPositions[low];
384  zSpan = zPositions[high] - zPositions[low];
385  }
386 }
intermediate_table::const_iterator const_iterator
void lar_content::VertexSelectionBaseAlgorithm::GetBeamConstants ( const pandora::VertexVector &  vertexVector,
BeamConstants beamConstants 
) const
protectedvirtualinherited

Get the beam score constants for a provided list of candidate vertices.

Parameters
vertexVectorthe vertex vector
beamConstantsto receive the beam constants

Definition at line 65 of file VertexSelectionBaseAlgorithm.cc.

References f, lar_content::VertexSelectionBaseAlgorithm::m_beamMode, lar_content::VertexSelectionBaseAlgorithm::m_nDecayLengthsInZSpan, and lar_content::VertexSelectionBaseAlgorithm::BeamConstants::SetConstants().

Referenced by lar_content::VertexSelectionBaseAlgorithm::Run().

66 {
67  if (!m_beamMode)
68  return;
69 
70  if (vertexVector.empty())
71  throw StatusCodeException(STATUS_CODE_NOT_INITIALIZED);
72 
73  float minZCoordinate(std::numeric_limits<float>::max()), maxZCoordinate(-std::numeric_limits<float>::max());
74 
75  for (const Vertex *const pVertex : vertexVector)
76  {
77  if (pVertex->GetPosition().GetZ() < minZCoordinate)
78  minZCoordinate = pVertex->GetPosition().GetZ();
79 
80  if (pVertex->GetPosition().GetZ() > maxZCoordinate)
81  maxZCoordinate = pVertex->GetPosition().GetZ();
82  }
83 
84  const float zSpan(maxZCoordinate - minZCoordinate);
85  const float decayConstant((zSpan < std::numeric_limits<float>::epsilon()) ? 0.f : (m_nDecayLengthsInZSpan / zSpan));
86  beamConstants.SetConstants(minZCoordinate, decayConstant);
87 }
TFile f
Definition: plotHisto.C:6
bool m_beamMode
Whether to run in beam mode, assuming neutrinos travel in positive z-direction.
boost::graph_traits< ModuleGraph >::vertex_descriptor Vertex
Definition: ModuleGraph.h:25
float m_nDecayLengthsInZSpan
The number of score decay lengths to use over the course of the vertex z-span.
float lar_content::VertexSelectionBaseAlgorithm::GetBeamDeweightingScore ( const BeamConstants beamConstants,
const pandora::Vertex *const  pVertex 
) const
inlineprotectedinherited

Get the beam deweighting score for a vertex.

Parameters
beamConstantsthe beam constants
pVertexaddress of the vertex
Returns
the score

Definition at line 419 of file VertexSelectionBaseAlgorithm.h.

References lar_content::VertexSelectionBaseAlgorithm::BeamConstants::GetDecayConstant(), and lar_content::VertexSelectionBaseAlgorithm::BeamConstants::GetMinZCoordinate().

Referenced by lar_content::EnergyKickVertexSelectionAlgorithm::GetVertexScoreList(), and PopulateVertexFeatureInfoMap().

420 {
421  const float vertexMinZ(std::max(pVertex->GetPosition().GetZ(), beamConstants.GetMinZCoordinate()));
422  return (beamConstants.GetMinZCoordinate() - vertexMinZ) * beamConstants.GetDecayConstant();
423 }
void lar_content::TrainedVertexSelectionAlgorithm::GetBestRegionVertices ( VertexScoreList initialScoreList,
pandora::VertexVector &  bestRegionVertices 
) const
protected

Get the list of top-N separated vertices.

Parameters
initialScoreListthe initial score list
bestRegionVerticesthe list of best region vertices populate

Definition at line 498 of file TrainedVertexSelectionAlgorithm.cc.

References m_regionRadius.

Referenced by lar_content::MvaVertexSelectionAlgorithm< T >::GetVertexScoreList().

499 {
500  std::sort(initialScoreList.begin(), initialScoreList.end());
501 
502  for (const VertexScore &vertexScore : initialScoreList)
503  {
504  const Vertex *const pVertex(vertexScore.GetVertex());
505  bool farEnoughAway(true);
506 
507  for (const Vertex *const pRegionVertex : bestRegionVertices)
508  {
509  if (pRegionVertex == pVertex)
510  {
511  farEnoughAway = false;
512  break;
513  }
514 
515  const float distance = (pRegionVertex->GetPosition() - pVertex->GetPosition()).GetMagnitude();
516 
517  if (distance <= m_regionRadius)
518  {
519  farEnoughAway = false;
520  break;
521  }
522  }
523 
524  if (farEnoughAway)
525  bestRegionVertices.push_back(pVertex);
526  }
527 }
boost::graph_traits< ModuleGraph >::vertex_descriptor Vertex
Definition: ModuleGraph.h:25
void lar_content::TrainedVertexSelectionAlgorithm::GetBestVertex ( const pandora::VertexVector &  vertexVector,
const pandora::Vertex *&  pBestVertex,
float &  bestVertexDr 
) const
protected

Use the MC information to get the best vertex from a list.

Parameters
vertexVectorthe vector of vertices
pBestVertexaddress of the best vertex
bestVertexDrdR of the best vertex

Definition at line 764 of file TrainedVertexSelectionAlgorithm.cc.

References lar_content::LArMCParticleHelper::GetTrueNeutrinos(), lar_content::LArMCParticleHelper::GetTrueTestBeamParticles(), m_mcParticleListName, m_mcVertexXCorrection, and m_testBeamMode.

Referenced by ProduceTrainingExamples().

765 {
766  // Extract input collections
767  const MCParticleList *pMCParticleList(nullptr);
768  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::GetList(*this, m_mcParticleListName, pMCParticleList));
769 
770  // Obtain vector: true targets
771  MCParticleVector mcTargetVector;
772 
773  if (m_testBeamMode)
774  {
775  LArMCParticleHelper::GetTrueTestBeamParticles(pMCParticleList, mcTargetVector);
776  }
777  else
778  {
779  LArMCParticleHelper::GetTrueNeutrinos(pMCParticleList, mcTargetVector);
780  }
781 
782  for (const Vertex *const pVertex : vertexVector)
783  {
784  float mcVertexDr(std::numeric_limits<float>::max());
785  for (const MCParticle *const pMCTarget : mcTargetVector)
786  {
787  const CartesianVector &mcTargetPosition(
788  (m_testBeamMode && std::fabs(pMCTarget->GetParticleId()) == 11) ? pMCTarget->GetVertex() : pMCTarget->GetEndpoint());
789  const CartesianVector mcTargetCorrectedPosition(
790  mcTargetPosition.GetX() + m_mcVertexXCorrection, mcTargetPosition.GetY(), mcTargetPosition.GetZ());
791  const float dr = (mcTargetCorrectedPosition - pVertex->GetPosition()).GetMagnitude();
792 
793  if (dr < mcVertexDr)
794  mcVertexDr = dr;
795  }
796 
797  if (mcVertexDr < bestVertexDr)
798  {
799  bestVertexDr = mcVertexDr;
800  pBestVertex = pVertex;
801  }
802  }
803 }
std::string m_mcParticleListName
The MC particle list for creating training examples.
std::vector< art::Ptr< simb::MCParticle > > MCParticleVector
static void GetTrueNeutrinos(const pandora::MCParticleList *const pMCParticleList, pandora::MCParticleVector &trueNeutrinos)
Get neutrino MC particles from an input MC particle list.
float m_mcVertexXCorrection
The correction to the x-coordinate of the MC vertex position.
boost::graph_traits< ModuleGraph >::vertex_descriptor Vertex
Definition: ModuleGraph.h:25
static void GetTrueTestBeamParticles(const pandora::MCParticleList *const pMCParticleList, pandora::MCParticleVector &trueTestBeamParticles)
Get triggered test beam MC particles from an input MC particle list.
void lar_content::VertexSelectionBaseAlgorithm::GetClusterLists ( const pandora::StringVector &  inputClusterListNames,
pandora::ClusterList &  clusterListU,
pandora::ClusterList &  clusterListV,
pandora::ClusterList &  clusterListW 
) const
protectedinherited

Get the cluster lists.

Parameters
inputClusterListNamesthe input cluster list names
clusterListUthe U-view cluster list to populate
clusterListVthe V-view cluster list to populate
clusterListWthe W-view cluster list to populate

Definition at line 91 of file VertexSelectionBaseAlgorithm.cc.

References lar_content::LArClusterHelper::GetClusterHitType().

Referenced by lar_content::EnergyKickVertexSelectionAlgorithm::GetVertexScoreList(), and lar_content::MvaVertexSelectionAlgorithm< T >::GetVertexScoreList().

93 {
94  for (const std::string &clusterListName : inputClusterListNames)
95  {
96  const ClusterList *pClusterList(NULL);
97  PANDORA_THROW_RESULT_IF_AND_IF(
98  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_INITIALIZED, !=, PandoraContentApi::GetList(*this, clusterListName, pClusterList));
99 
100  if (!pClusterList || pClusterList->empty())
101  {
102  if (PandoraContentApi::GetSettings(*this)->ShouldDisplayAlgorithmInfo())
103  std::cout << "EnergyKickVertexSelectionAlgorithm: unable to find cluster list " << clusterListName << std::endl;
104 
105  continue;
106  }
107 
108  const HitType hitType(LArClusterHelper::GetClusterHitType(*(pClusterList->begin())));
109 
110  if ((TPC_VIEW_U != hitType) && (TPC_VIEW_V != hitType) && (TPC_VIEW_W != hitType))
111  throw StatusCodeException(STATUS_CODE_INVALID_PARAMETER);
112 
113  ClusterList &clusterList((TPC_VIEW_U == hitType) ? clusterListU : (TPC_VIEW_V == hitType) ? clusterListV : clusterListW);
114  clusterList.insert(clusterList.end(), pClusterList->begin(), pClusterList->end());
115  }
116 }
static pandora::HitType GetClusterHitType(const pandora::Cluster *const pCluster)
Get the hit type associated with a two dimensional cluster.
HitType
Definition: HitType.h:12
float lar_content::TrainedVertexSelectionAlgorithm::GetCoordinateSpan ( const pandora::InputFloat &  minCoord,
const pandora::InputFloat &  maxCoord 
) const
inlineprotected

Get the coordinate span.

Parameters
minCoordthe min coordinate
maxCoordthe max coordinate
Returns
the coordinate span

Definition at line 402 of file TrainedVertexSelectionAlgorithm.cc.

Referenced by GetLegacyEventShapeFeatures().

403 {
404  if (minCoord.IsInitialized() && maxCoord.IsInitialized())
405  return std::fabs(maxCoord.Get() - minCoord.Get());
406 
407  return 0.f;
408 }
void lar_content::TrainedVertexSelectionAlgorithm::GetEventShapeFeatures ( const ClusterListMap clusterListMap,
float &  eventArea,
float &  longitudinality 
) const
protected

Get the event shape features.

Parameters
clusterListthe map of cluster lists for each view
eventAreathe event area
longitudinalitythe event longitudinality

Definition at line 332 of file TrainedVertexSelectionAlgorithm.cc.

References f, and Get2DSpan().

Referenced by CalculateEventFeatures().

333 {
334  float xSpanU(0.f), zSpanU(0.f), xSpanV(0.f), zSpanV(0.f), xSpanW(0.f), zSpanW(0.f);
335 
336  this->Get2DSpan(clusterListMap.at(TPC_VIEW_U), xSpanU, zSpanU);
337  this->Get2DSpan(clusterListMap.at(TPC_VIEW_V), xSpanV, zSpanV);
338  this->Get2DSpan(clusterListMap.at(TPC_VIEW_W), xSpanW, zSpanW);
339 
340  const float xSpan = (xSpanU + xSpanV + xSpanW) / 3.f;
341  const float zSpan = (zSpanU + zSpanV + zSpanW) / 3.f;
342 
343  if ((xSpan > std::numeric_limits<float>::epsilon()) && (zSpan > std::numeric_limits<float>::epsilon()))
344  {
345  eventArea = xSpan * zSpan;
346  longitudinality = zSpan / (xSpan + zSpan);
347  }
348 }
void Get2DSpan(const pandora::ClusterList &clusterList, float &xSpan, float &zSpan) const
Get the coordinate span in one view.
TFile f
Definition: plotHisto.C:6
std::string lar_content::TrainedVertexSelectionAlgorithm::GetInteractionType ( ) const
protected

Get the interaction type string.

Returns
the interaction type string

Definition at line 594 of file TrainedVertexSelectionAlgorithm.cc.

References lar_content::LArInteractionTypeHelper::GetInteractionType(), lar_content::LArMCParticleHelper::IsBeamNeutrinoFinalState(), lar_content::LArMCParticleHelper::IsTriggeredBeamParticle(), m_caloHitListName, m_mcParticleListName, m_testBeamMode, lar_content::LArMCParticleHelper::SelectReconstructableMCParticles(), lar_content::LArMCParticleHelper::SortByMomentum(), and lar_content::LArInteractionTypeHelper::ToString().

Referenced by ProduceTrainingSets().

595 {
596  // Extract input collections
597  const MCParticleList *pMCParticleList(nullptr);
598  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::GetList(*this, m_mcParticleListName, pMCParticleList));
599 
600  const CaloHitList *pCaloHitList(nullptr);
601  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::GetList(*this, m_caloHitListName, pCaloHitList));
602 
603  LArMCParticleHelper::MCContributionMap targetMCParticlesToGoodHitsMap;
604 
605  if (m_testBeamMode)
606  {
607  LArMCParticleHelper::SelectReconstructableMCParticles(pMCParticleList, pCaloHitList, LArMCParticleHelper::PrimaryParameters(),
608  LArMCParticleHelper::IsTriggeredBeamParticle, targetMCParticlesToGoodHitsMap);
609  }
610  else
611  {
612  // ATTN Assumes single neutrino is parent of all neutrino-induced mc particles
613  LArMCParticleHelper::SelectReconstructableMCParticles(pMCParticleList, pCaloHitList, LArMCParticleHelper::PrimaryParameters(),
614  LArMCParticleHelper::IsBeamNeutrinoFinalState, targetMCParticlesToGoodHitsMap);
615  }
616 
617  MCParticleList mcPrimaryList;
618  for (const auto &mapEntry : targetMCParticlesToGoodHitsMap)
619  mcPrimaryList.push_back(mapEntry.first);
620  mcPrimaryList.sort(LArMCParticleHelper::SortByMomentum);
621 
623  return LArInteractionTypeHelper::ToString(interactionType);
624 }
std::unordered_map< const pandora::MCParticle *, pandora::CaloHitList > MCContributionMap
static InteractionType GetInteractionType(const pandora::MCParticleList &mcPrimaryList)
Get the interaction type of an event.
static bool SortByMomentum(const pandora::MCParticle *const pLhs, const pandora::MCParticle *const pRhs)
Sort mc particles by their momentum.
static void SelectReconstructableMCParticles(const pandora::MCParticleList *pMCParticleList, const pandora::CaloHitList *pCaloHitList, const PrimaryParameters &parameters, std::function< bool(const pandora::MCParticle *const)> fCriteria, MCContributionMap &selectedMCParticlesToHitsMap)
Select target, reconstructable mc particles that match given criteria.
std::string m_mcParticleListName
The MC particle list for creating training examples.
static std::string ToString(const InteractionType interactionType)
Get a string representation of an interaction type.
static bool IsTriggeredBeamParticle(const pandora::MCParticle *const pMCParticle)
Returns true if passed a primary triggered beam MCParticle.
std::string m_caloHitListName
The 2D CaloHit list name.
static bool IsBeamNeutrinoFinalState(const pandora::MCParticle *const pMCParticle)
Returns true if passed a primary neutrino final state MCParticle.
void lar_content::TrainedVertexSelectionAlgorithm::GetLegacyEventShapeFeatures ( const pandora::ClusterList &  clusterList,
float &  eventVolume,
float &  longitudinality 
) const
protected

Get the event shape features.

Parameters
clusterListthe cluster list
eventVolumethe event volume
longitudinalitythe event longitudinality

Definition at line 292 of file TrainedVertexSelectionAlgorithm.cc.

References f, lar_content::LArClusterHelper::GetClusterBoundingBox(), GetCoordinateSpan(), and UpdateSpanCoordinate().

Referenced by CalculateEventFeatures().

293 {
294  InputFloat xMin, yMin, zMin, xMax, yMax, zMax;
295 
296  for (const Cluster *const pCluster : clusterList)
297  {
298  CartesianVector minPosition(0.f, 0.f, 0.f), maxPosition(0.f, 0.f, 0.f);
299  LArClusterHelper::GetClusterBoundingBox(pCluster, minPosition, maxPosition);
300 
301  this->UpdateSpanCoordinate(minPosition.GetX(), maxPosition.GetX(), xMin, xMax);
302  this->UpdateSpanCoordinate(minPosition.GetY(), maxPosition.GetY(), yMin, yMax);
303  this->UpdateSpanCoordinate(minPosition.GetZ(), maxPosition.GetZ(), zMin, zMax);
304  }
305 
306  const float xSpan(this->GetCoordinateSpan(xMax, xMin));
307  const float ySpan(this->GetCoordinateSpan(yMax, zMin));
308  const float zSpan(this->GetCoordinateSpan(yMax, zMin));
309 
310  // Calculate the volume and longitudinality of the event (ySpan often 0 - to be investigated).
311  if ((xSpan > std::numeric_limits<float>::epsilon()) && (ySpan > std::numeric_limits<float>::epsilon()))
312  {
313  eventVolume = xSpan * ySpan * zSpan;
314  longitudinality = zSpan / (xSpan + ySpan);
315  }
316 
317  else if (ySpan > std::numeric_limits<float>::epsilon())
318  {
319  eventVolume = ySpan * ySpan * zSpan;
320  longitudinality = zSpan / (ySpan + ySpan);
321  }
322 
323  else if (xSpan > std::numeric_limits<float>::epsilon())
324  {
325  eventVolume = xSpan * xSpan * zSpan;
326  longitudinality = zSpan / (xSpan + xSpan);
327  }
328 }
TFile f
Definition: plotHisto.C:6
static void GetClusterBoundingBox(const pandora::Cluster *const pCluster, pandora::CartesianVector &minimumCoordinate, pandora::CartesianVector &maximumCoordinate)
Get minimum and maximum X, Y and Z positions of the calo hits in a cluster.
void UpdateSpanCoordinate(const float minPositionCoord, const float maxPositionCoord, pandora::InputFloat &minCoord, pandora::InputFloat &maxCoord) const
Update the min/max coordinate spans.
float GetCoordinateSpan(const pandora::InputFloat &minCoord, const pandora::InputFloat &maxCoord) const
Get the coordinate span.
void lar_content::TrainedVertexSelectionAlgorithm::GetSharedFeatures ( const pandora::Vertex *const  pVertex1,
const pandora::Vertex *const  pVertex2,
const KDTreeMap kdTreeMap,
float &  separation,
float &  axisHits 
) const
protected

Calculates the shared features of a pair of vertex candidates.

Parameters
pVertex1the address of the first vertex
pVertex2the address of the second vertex
kdTreeMapthe map of 2D hit kd trees
separationthe 3D distance between the two vertex candidates
axisHitsthe number of hits between the two candidates normalised to the distance between them

Definition at line 688 of file TrainedVertexSelectionAlgorithm.cc.

References IncrementSharedAxisValues(), and lar_content::LArGeometryHelper::ProjectPosition().

Referenced by lar_content::MvaVertexSelectionAlgorithm< T >::CompareVertices(), and ProduceTrainingExamples().

690 {
691  separation = (pVertex1->GetPosition() - pVertex2->GetPosition()).GetMagnitude();
692 
693  this->IncrementSharedAxisValues(LArGeometryHelper::ProjectPosition(this->GetPandora(), pVertex1->GetPosition(), TPC_VIEW_U),
694  LArGeometryHelper::ProjectPosition(this->GetPandora(), pVertex2->GetPosition(), TPC_VIEW_U), kdTreeMap.at(TPC_VIEW_U), axisHits);
695 
696  this->IncrementSharedAxisValues(LArGeometryHelper::ProjectPosition(this->GetPandora(), pVertex1->GetPosition(), TPC_VIEW_V),
697  LArGeometryHelper::ProjectPosition(this->GetPandora(), pVertex2->GetPosition(), TPC_VIEW_V), kdTreeMap.at(TPC_VIEW_V), axisHits);
698 
699  this->IncrementSharedAxisValues(LArGeometryHelper::ProjectPosition(this->GetPandora(), pVertex1->GetPosition(), TPC_VIEW_W),
700  LArGeometryHelper::ProjectPosition(this->GetPandora(), pVertex2->GetPosition(), TPC_VIEW_W), kdTreeMap.at(TPC_VIEW_W), axisHits);
701 
702  axisHits = separation > std::numeric_limits<float>::epsilon() ? axisHits / separation : 0.f;
703 }
static pandora::CartesianVector ProjectPosition(const pandora::Pandora &pandora, const pandora::CartesianVector &position3D, const pandora::HitType view)
Project 3D position into a given 2D view.
void IncrementSharedAxisValues(const pandora::CartesianVector pos1, const pandora::CartesianVector pos2, HitKDTree2D &kdTree, float &axisHits) const
Increments the axis hits information for one view.
void lar_content::TrainedVertexSelectionAlgorithm::GetShowerLikeClusterEndPoints ( const pandora::ClusterList &  clusterList,
pandora::ClusterList &  showerLikeClusters,
ClusterEndPointsMap clusterEndPointsMap 
) const
protected

Add the endpoints of any shower-like clusters to the map.

Parameters
clusterListthe list of clusters
showerLikeClustersthe list of shower-like clusters to populate
clusterEndPointsMapthe map of shower-like cluster endpoints to populate

Definition at line 119 of file TrainedVertexSelectionAlgorithm.cc.

References IsClusterShowerLike(), m_minShowerClusterHits, and lar_content::LArClusterHelper::SortHitsByPosition().

Referenced by CalculateShowerClusterList().

121 {
122  for (const Cluster *const pCluster : clusterList)
123  {
124  if (pCluster->GetNCaloHits() < m_minShowerClusterHits)
125  continue;
126 
127  if (this->IsClusterShowerLike(pCluster))
128  showerLikeClusters.push_back(pCluster);
129 
130  CaloHitList clusterCaloHitList;
131  pCluster->GetOrderedCaloHitList().FillCaloHitList(clusterCaloHitList);
132 
133  CaloHitVector clusterCaloHitVector(clusterCaloHitList.begin(), clusterCaloHitList.end());
134  std::sort(clusterCaloHitVector.begin(), clusterCaloHitVector.end(), LArClusterHelper::SortHitsByPosition);
135 
136  if (clusterCaloHitVector.empty())
137  continue;
138 
139  ClusterEndPoints clusterEndPoints(clusterCaloHitVector.front()->GetPositionVector(), clusterCaloHitVector.back()->GetPositionVector());
140  clusterEndPointsMap.emplace(pCluster, clusterEndPoints);
141  }
142 }
bool IsClusterShowerLike(const pandora::Cluster *const pCluster) const
Find whether a cluster is shower-like.
unsigned int m_minShowerClusterHits
The minimum number of shower cluster hits.
std::pair< pandora::CartesianVector, pandora::CartesianVector > ClusterEndPoints
static bool SortHitsByPosition(const pandora::CaloHit *const pLhs, const pandora::CaloHit *const pRhs)
Sort calo hits by their position (use Z, followed by X, followed by Y)
float lar_content::VertexSelectionBaseAlgorithm::GetVertexEnergy ( const pandora::Vertex *const  pVertex,
const KDTreeMap kdTreeMap 
) const
protectedinherited

Calculate the energy of a vertex candidate by summing values from all three planes.

Parameters
pVertexthe address of the vertex
kdTreeMapthe map of 2D hit kd trees
Returns
the summed vertex energy

Definition at line 243 of file VertexSelectionBaseAlgorithm.cc.

References f, lar_content::VertexSelectionBaseAlgorithm::IsVertexInGap(), and lar_content::VertexSelectionBaseAlgorithm::VertexHitEnergy().

Referenced by PopulateVertexFeatureInfoMap().

244 {
245  float totalEnergy(0.f);
246 
247  if (!this->IsVertexInGap(pVertex, TPC_VIEW_U))
248  totalEnergy += this->VertexHitEnergy(pVertex, TPC_VIEW_U, kdTreeMap.at(TPC_VIEW_U));
249 
250  if (!this->IsVertexInGap(pVertex, TPC_VIEW_V))
251  totalEnergy += this->VertexHitEnergy(pVertex, TPC_VIEW_V, kdTreeMap.at(TPC_VIEW_V));
252 
253  if (!this->IsVertexInGap(pVertex, TPC_VIEW_W))
254  totalEnergy += this->VertexHitEnergy(pVertex, TPC_VIEW_W, kdTreeMap.at(TPC_VIEW_W));
255 
256  return totalEnergy;
257 }
TFile f
Definition: plotHisto.C:6
float VertexHitEnergy(const pandora::Vertex *const pVertex, const pandora::HitType hitType, HitKDTree2D &kdTree) const
Finds the energy of the nearest hit to the vertex candidate in this view.
bool IsVertexInGap(const pandora::Vertex *const pVertex, const pandora::HitType hitType) const
Whether the vertex lies in a registered gap.
virtual void lar_content::TrainedVertexSelectionAlgorithm::GetVertexScoreList ( const pandora::VertexVector &  vertexVector,
const BeamConstants beamConstants,
HitKDTree2D kdTreeU,
HitKDTree2D kdTreeV,
HitKDTree2D kdTreeW,
VertexScoreList vertexScoreList 
) const
protectedpure virtual

Get the vertex score list.

Parameters
vertexVectorthe vector of vertices
beamConstantsthe beam constants
kdTreeUthe hit kd tree for the U view
kdTreeVthe hit kd tree for the V view
kdTreeWthe hit kd tree for the W view
vertexScoreListthe vertex score list to fill

Implements lar_content::VertexSelectionBaseAlgorithm.

Implemented in lar_content::MvaVertexSelectionAlgorithm< T >, and lar_content::CheatingVertexSelectionAlgorithm.

void lar_content::TrainedVertexSelectionAlgorithm::IncrementSharedAxisValues ( const pandora::CartesianVector  pos1,
const pandora::CartesianVector  pos2,
HitKDTree2D kdTree,
float &  axisHits 
) const
protected

Increments the axis hits information for one view.

Parameters
pos12D projected position of the first vertex
pos22D projected position of the second vertex
kdTreethe kd tree of 2D hits
axisHitsthe number of hits between the two candidates

Definition at line 707 of file TrainedVertexSelectionAlgorithm.cc.

References f, IsHitInBox(), and lar_content::KDTreeLinkerAlgo< DATA, DIM >::search().

Referenced by GetSharedFeatures().

709 {
710  if (pos1 == pos2)
711  return;
712 
713  // Define the axis and perpendicular directions
714  const CartesianVector unitAxis = (pos1 - pos2).GetUnitVector();
715  const CartesianVector unitPerp(unitAxis.GetZ(), 0, -unitAxis.GetX());
716 
717  // Define the corners of the search box
718  const CartesianVector point1 = pos1 + unitPerp;
719  const CartesianVector point2 = pos1 - unitPerp;
720  const CartesianVector point3 = pos2 + unitPerp;
721  const CartesianVector point4 = pos2 - unitPerp;
722 
723  // Find the total coordinate span these points cover
724  const float xMin{std::min({point1.GetX(), point2.GetX(), point3.GetX(), point4.GetX()})};
725  const float xMax{std::max({point1.GetX(), point2.GetX(), point3.GetX(), point4.GetX()})};
726  const float zMin{std::min({point1.GetZ(), point2.GetZ(), point3.GetZ(), point4.GetZ()})};
727  const float zMax{std::max({point1.GetZ(), point2.GetZ(), point3.GetZ(), point4.GetZ()})};
728 
729  // Use a kd search to find the hits in the 'wide' area
730  KDTreeBox searchBox(xMin, zMin, xMax, zMax);
731  HitKDNode2DList found;
732  kdTree.search(searchBox, found);
733 
734  // Use IsHitInBox method to check the 'wide' area hits for those in the search box
735  for (auto f : found)
736  {
737  const CartesianVector &hitPos = f.data->GetPositionVector();
738  bool inBox = this->IsHitInBox(hitPos, point1, point2, point3, point4);
739 
740  if (inBox)
741  ++axisHits;
742  }
743 }
bool IsHitInBox(const pandora::CartesianVector &hitPos, const pandora::CartesianVector &point1, const pandora::CartesianVector &point2, const pandora::CartesianVector &point3, const pandora::CartesianVector &point4) const
Determines whether a hit lies within the box defined by four other positions.
TFile f
Definition: plotHisto.C:6
KDTreeBoxT< 2 > KDTreeBox
void lar_content::TrainedVertexSelectionAlgorithm::IncrementShoweryParameters ( const pandora::ClusterList &  clusterList,
unsigned int &  nShoweryHits,
unsigned int &  nHits,
float &  eventEnergy 
) const
protected

Increment the showery hit parameters for a cluster list.

Parameters
clusterListthe cluster list
nShoweryHitsthe number of showery hits
nHitsthe number of hits
eventEnergythe event energy

Definition at line 270 of file TrainedVertexSelectionAlgorithm.cc.

References IsClusterShowerLike().

Referenced by CalculateEventFeatures().

272 {
273  for (const Cluster *const pCluster : clusterList)
274  {
275  if (this->IsClusterShowerLike(pCluster))
276  nShoweryHits += pCluster->GetNCaloHits();
277 
278  eventEnergy += pCluster->GetElectromagneticEnergy();
279  nHits += pCluster->GetNCaloHits();
280  }
281 }
bool IsClusterShowerLike(const pandora::Cluster *const pCluster) const
Find whether a cluster is shower-like.
bool lar_content::VertexSelectionBaseAlgorithm::IsBeamModeOn ( ) const
inlineprotectedinherited

Whether algorithm is running in beam mode, assuming neutrinos travel in positive z-direction.

Returns
boolean

Definition at line 427 of file VertexSelectionBaseAlgorithm.h.

References lar_content::VertexSelectionBaseAlgorithm::m_beamMode.

Referenced by AddEventFeaturesToVector(), AddVertexFeaturesToVector(), lar_content::EnergyKickVertexSelectionAlgorithm::GetVertexScoreList(), and PopulateVertexFeatureInfoMap().

428 {
429  return m_beamMode;
430 }
bool m_beamMode
Whether to run in beam mode, assuming neutrinos travel in positive z-direction.
bool lar_content::TrainedVertexSelectionAlgorithm::IsClusterShowerLike ( const pandora::Cluster *const  pCluster) const
inlineprotected

Find whether a cluster is shower-like.

Parameters
pClusterthe cluster
Returns
boolean

Definition at line 285 of file TrainedVertexSelectionAlgorithm.cc.

References lar_content::LArClusterHelper::GetLength(), and m_minShowerSpineLength.

Referenced by GetShowerLikeClusterEndPoints(), and IncrementShoweryParameters().

286 {
287  return (pCluster->GetParticleId() == E_MINUS && LArClusterHelper::GetLength(pCluster) < m_minShowerSpineLength);
288 }
static float GetLength(const pandora::Cluster *const pCluster)
Get length of cluster.
float m_minShowerSpineLength
The minimum length at which all are considered to be tracks.
bool lar_content::TrainedVertexSelectionAlgorithm::IsHitInBox ( const pandora::CartesianVector &  hitPos,
const pandora::CartesianVector &  point1,
const pandora::CartesianVector &  point2,
const pandora::CartesianVector &  point3,
const pandora::CartesianVector &  point4 
) const
protected

Determines whether a hit lies within the box defined by four other positions.

Parameters
hitPosthe hit position
point1the first corner of the box
point2the second corner of the box
point3the third corner of the box
point4the fourth corner of the box
Returns
boolean

Definition at line 747 of file TrainedVertexSelectionAlgorithm.cc.

Referenced by IncrementSharedAxisValues().

749 {
750  bool b1 = std::signbit(((point2 - point1).GetCrossProduct(point2 - hitPos)).GetY());
751  bool b2 = std::signbit(((point4 - point3).GetCrossProduct(point4 - hitPos)).GetY());
752 
753  if (!(b1 xor b2))
754  return false;
755 
756  bool b3 = std::signbit(((point3 - point1).GetCrossProduct(point3 - hitPos)).GetY());
757  bool b4 = std::signbit(((point4 - point2).GetCrossProduct(point4 - hitPos)).GetY());
758 
759  return (b3 xor b4);
760 }
void lar_content::TrainedVertexSelectionAlgorithm::PopulateFinalVertexScoreList ( const VertexFeatureInfoMap vertexFeatureInfoMap,
const pandora::Vertex *const  pFavouriteVertex,
const pandora::VertexVector &  vertexVector,
VertexScoreList finalVertexScoreList 
) const
protected

Populate the final vertex score list using the r/phi score to find the best vertex in the vicinity.

Parameters
vertexFeatureInfoMapthe vertex feature info map
pFavouriteVertexaddress of the favourite vertex
vertexVectorthe vector of all vertex candidates
finalVertexScoreListthe final vertex score list to populate

Definition at line 838 of file TrainedVertexSelectionAlgorithm.cc.

References m_rPhiFineTuningRadius.

Referenced by lar_content::MvaVertexSelectionAlgorithm< T >::GetVertexScoreList().

840 {
841  if (pFavouriteVertex)
842  {
843  const CartesianVector vertexPosition(pFavouriteVertex->GetPosition());
844 
845  for (const Vertex *const pVertex : vertexVector)
846  {
847  if ((pVertex->GetPosition() - vertexPosition).GetMagnitude() < m_rPhiFineTuningRadius)
848  {
849  const float rPhiScore(vertexFeatureInfoMap.at(pVertex).m_rPhiFeature);
850  finalVertexScoreList.emplace_back(pVertex, rPhiScore);
851  }
852  }
853  }
854 }
boost::graph_traits< ModuleGraph >::vertex_descriptor Vertex
Definition: ModuleGraph.h:25
float m_rPhiFineTuningRadius
The maximum distance the r/phi tune can move a vertex.
void lar_content::TrainedVertexSelectionAlgorithm::PopulateInitialScoreList ( VertexFeatureInfoMap vertexFeatureInfoMap,
const pandora::Vertex *const  pVertex,
VertexScoreList initialScoreList 
) const
protected

Populate the initial vertex score list for a given vertex.

Parameters
vertexFeatureInfoMapthe vertex feature info map
pVertexthe vertex
initialScoreListthe score list to populate

Definition at line 482 of file TrainedVertexSelectionAlgorithm.cc.

References lar_content::TrainedVertexSelectionAlgorithm::VertexFeatureInfo::m_beamDeweighting, m_beamDeweightingConstant, lar_content::TrainedVertexSelectionAlgorithm::VertexFeatureInfo::m_energyKick, m_energyKickConstant, lar_content::TrainedVertexSelectionAlgorithm::VertexFeatureInfo::m_globalAsymmetry, m_globalAsymmetryConstant, lar_content::TrainedVertexSelectionAlgorithm::VertexFeatureInfo::m_localAsymmetry, m_localAsymmetryConstant, lar_content::TrainedVertexSelectionAlgorithm::VertexFeatureInfo::m_showerAsymmetry, and m_showerAsymmetryConstant.

Referenced by lar_content::MvaVertexSelectionAlgorithm< T >::GetVertexScoreList().

484 {
485  VertexFeatureInfo vertexFeatureInfo = vertexFeatureInfoMap.at(pVertex);
486 
487  const float beamDeweightingScore(vertexFeatureInfo.m_beamDeweighting / m_beamDeweightingConstant);
488  const float energyKickScore(-vertexFeatureInfo.m_energyKick / m_energyKickConstant);
489  const float localAsymmetryScore(vertexFeatureInfo.m_localAsymmetry / m_localAsymmetryConstant);
490  const float globalAsymmetryScore(vertexFeatureInfo.m_globalAsymmetry / m_globalAsymmetryConstant);
491  const float showerAsymmetryScore(vertexFeatureInfo.m_showerAsymmetry / m_showerAsymmetryConstant);
492 
493  initialScoreList.emplace_back(pVertex, beamDeweightingScore + energyKickScore + localAsymmetryScore + globalAsymmetryScore + showerAsymmetryScore);
494 }
float m_localAsymmetryConstant
The local asymmetry constant for the initial region score list.
float m_globalAsymmetryConstant
The global asymmetry constant for the initial region score list.
float m_showerAsymmetryConstant
The shower asymmetry constant for the initial region score list.
float m_beamDeweightingConstant
The beam deweighting constant for the initial region score list.
float m_energyKickConstant
The energy kick constant for the initial region score list.
void lar_content::TrainedVertexSelectionAlgorithm::PopulateKdTree ( const pandora::ClusterList &  clusterList,
HitKDTree2D kdTree,
HitToClusterMap hitToClusterMap 
) const
protected

Populate kd tree with information about hits in a provided list of clusters.

Parameters
clusterListthe list of clusters
kdTreeto receive the populated kd tree
hitToClusterMapto receive the populated hit to cluster map

Definition at line 146 of file TrainedVertexSelectionAlgorithm.cc.

References AddClusterToShower(), lar_content::KDTreeLinkerAlgo< DATA, DIM >::build(), lar_content::build_2d_kd_search_region(), lar_content::fill_and_bound_2d_kd_tree(), m_showerClusteringDistance, and lar_content::KDTreeLinkerAlgo< DATA, DIM >::search().

Referenced by CalculateShowerClusterList().

147 {
148  CaloHitList allCaloHits;
149 
150  for (const Cluster *const pCluster : clusterList)
151  {
152  CaloHitList daughterHits;
153  pCluster->GetOrderedCaloHitList().FillCaloHitList(daughterHits);
154  allCaloHits.insert(allCaloHits.end(), daughterHits.begin(), daughterHits.end());
155 
156  for (const CaloHit *const pCaloHit : daughterHits)
157  (void)hitToClusterMap.insert(HitToClusterMap::value_type(pCaloHit, pCluster));
158  }
159 
160  HitKDNode2DList hitKDNode2DList;
161  KDTreeBox hitsBoundingRegion2D(fill_and_bound_2d_kd_tree(allCaloHits, hitKDNode2DList));
162  kdTree.build(hitKDNode2DList, hitsBoundingRegion2D);
163 }
KDTreeBox fill_and_bound_2d_kd_tree(const MANAGED_CONTAINER< const T * > &points, std::vector< KDTreeNodeInfoT< const T *, 2 >> &nodes)
fill_and_bound_2d_kd_tree
KDTreeBoxT< 2 > KDTreeBox
void lar_content::TrainedVertexSelectionAlgorithm::PopulateVertexFeatureInfoMap ( const BeamConstants beamConstants,
const ClusterListMap clusterListMap,
const SlidingFitDataListMap slidingFitDataListMap,
const ShowerClusterListMap showerClusterListMap,
const KDTreeMap kdTreeMap,
const pandora::Vertex *const  pVertex,
VertexFeatureInfoMap vertexFeatureInfoMap 
) const
protected

Populate the vertex feature info map for a given vertex.

Parameters
beamConstantsthe beam constants
clusterListMapthe cluster list map
slidingFitDataListMapthe sliding fit data list map
showerClusterListMapthe shower cluster list map
kdTreeMapthe kd tree map
pVertexthe vertex
vertexFeatureInfoMapthe map to populate

Definition at line 428 of file TrainedVertexSelectionAlgorithm.cc.

References f, Get, lar_content::VertexSelectionBaseAlgorithm::GetBeamDeweightingScore(), lar_content::VertexSelectionBaseAlgorithm::GetVertexEnergy(), lar_content::VertexSelectionBaseAlgorithm::IsBeamModeOn(), m_featureToolVector, and m_legacyVariables.

Referenced by lar_content::MvaVertexSelectionAlgorithm< T >::GetVertexScoreList().

431 {
432  float bestFastScore(-std::numeric_limits<float>::max()); // not actually used - artefact of toolizing RPhi score and still using performance trick
433 
434  // ATTN - If beam mode is false GetBeamDeweightingScore will fail, so have a default value that we'll ignore when poplating the feature vector
435  double tempBeamDeweight{0.f};
436  if (this->IsBeamModeOn())
437  tempBeamDeweight = this->GetBeamDeweightingScore(beamConstants, pVertex);
438 
439  const double beamDeweighting(tempBeamDeweight);
440 
441  const double energyKick(LArMvaHelper::CalculateFeaturesOfType<EnergyKickFeatureTool>(m_featureToolVector, this, pVertex,
442  slidingFitDataListMap, clusterListMap, kdTreeMap, showerClusterListMap, beamDeweighting, bestFastScore)
443  .at(0)
444  .Get());
445 
446  const double localAsymmetry(LArMvaHelper::CalculateFeaturesOfType<LocalAsymmetryFeatureTool>(m_featureToolVector, this, pVertex,
447  slidingFitDataListMap, clusterListMap, kdTreeMap, showerClusterListMap, beamDeweighting, bestFastScore)
448  .at(0)
449  .Get());
450 
451  const double globalAsymmetry(LArMvaHelper::CalculateFeaturesOfType<GlobalAsymmetryFeatureTool>(m_featureToolVector, this, pVertex,
452  slidingFitDataListMap, clusterListMap, kdTreeMap, showerClusterListMap, beamDeweighting, bestFastScore)
453  .at(0)
454  .Get());
455 
456  const double showerAsymmetry(LArMvaHelper::CalculateFeaturesOfType<ShowerAsymmetryFeatureTool>(m_featureToolVector, this, pVertex,
457  slidingFitDataListMap, clusterListMap, kdTreeMap, showerClusterListMap, beamDeweighting, bestFastScore)
458  .at(0)
459  .Get());
460 
461  //const double rPhiFeature(LArMvaHelper::CalculateFeaturesOfType<RPhiFeatureTool>(m_featureToolVector, this, pVertex,
462  // slidingFitDataListMap, clusterListMap, kdTreeMap, showerClusterListMap, beamDeweighting, bestFastScore).at(0).Get());
463 
464  double dEdxAsymmetry(0.f), vertexEnergy(0.f);
465 
466  if (!m_legacyVariables)
467  {
468  dEdxAsymmetry = LArMvaHelper::CalculateFeaturesOfType<EnergyDepositionAsymmetryFeatureTool>(m_featureToolVector, this, pVertex,
469  slidingFitDataListMap, clusterListMap, kdTreeMap, showerClusterListMap, beamDeweighting, bestFastScore)
470  .at(0)
471  .Get();
472 
473  vertexEnergy = this->GetVertexEnergy(pVertex, kdTreeMap);
474  }
475 
476  VertexFeatureInfo vertexFeatureInfo(beamDeweighting, 0.f, energyKick, localAsymmetry, globalAsymmetry, showerAsymmetry, dEdxAsymmetry, vertexEnergy);
477  vertexFeatureInfoMap.emplace(pVertex, vertexFeatureInfo);
478 }
VertexFeatureTool::FeatureToolVector m_featureToolVector
The feature tool vector.
bool IsBeamModeOn() const
Whether algorithm is running in beam mode, assuming neutrinos travel in positive z-direction.
cout<< "Opened file "<< fin<< " ixs= "<< ixs<< endl;if(ixs==0) hhh=(TH1F *) fff-> Get("h1")
Definition: AddMC.C:8
TFile f
Definition: plotHisto.C:6
float GetVertexEnergy(const pandora::Vertex *const pVertex, const KDTreeMap &kdTreeMap) const
Calculate the energy of a vertex candidate by summing values from all three planes.
bool m_legacyVariables
Whether to only use the old variables.
float GetBeamDeweightingScore(const BeamConstants &beamConstants, const pandora::Vertex *const pVertex) const
Get the beam deweighting score for a vertex.
const pandora::Vertex * lar_content::TrainedVertexSelectionAlgorithm::ProduceTrainingExamples ( const pandora::VertexVector &  vertexVector,
const VertexFeatureInfoMap vertexFeatureInfoMap,
std::bernoulli_distribution &  coinFlip,
std::mt19937 &  generator,
const std::string &  interactionType,
const std::string &  trainingOutputFile,
const LArMvaHelper::MvaFeatureVector eventFeatureList,
const KDTreeMap kdTreeMap,
const float  maxRadius,
const bool  useRPhi 
) const
protected

Produce a set of training examples for a binary classifier.

Parameters
vertexVectorthe vector of vertices to use
vertexFeatureInfoMapthe vertex feature info map
coinFlipa distribution for producing coin flips
generatorthe random number generator
interactionTypethe interaction type string
trainingOutputFilethe training set output file
eventFeatureListthe event feature list
kdTreeMapthe map of 2D hit kd trees
maxRadiusthe maximum allowed radius for the 'best' vertex
useRPhiwhether to include the r/phi feature
Returns
address of the vertex used as the 'best' vertex in the classifier

Definition at line 628 of file TrainedVertexSelectionAlgorithm.cc.

References AddSharedFeaturesToVector(), AddVertexFeaturesToVector(), lar_content::LArMvaHelper::ConcatenateFeatureLists(), f, GetBestVertex(), GetSharedFeatures(), m_legacyVariables, and lar_content::LArMvaHelper::ProduceTrainingExample().

Referenced by ProduceTrainingSets().

632 {
633  const Vertex *pBestVertex(nullptr);
634  float bestVertexDr(std::numeric_limits<float>::max());
635 
636  LArMvaHelper::MvaFeatureVector bestVertexFeatureList;
637  this->GetBestVertex(vertexVector, pBestVertex, bestVertexDr);
638 
639  VertexFeatureInfo bestVertexFeatureInfo(vertexFeatureInfoMap.at(pBestVertex));
640  this->AddVertexFeaturesToVector(bestVertexFeatureInfo, bestVertexFeatureList, useRPhi);
641 
642  for (const Vertex *const pVertex : vertexVector)
643  {
644  if (pVertex == pBestVertex)
645  continue;
646 
647  LArMvaHelper::MvaFeatureVector featureList;
648  VertexFeatureInfo vertexFeatureInfo(vertexFeatureInfoMap.at(pVertex));
649  this->AddVertexFeaturesToVector(vertexFeatureInfo, featureList, useRPhi);
650 
651  if (!m_legacyVariables)
652  {
653  LArMvaHelper::MvaFeatureVector sharedFeatureList;
654  float separation(0.f), axisHits(0.f);
655  this->GetSharedFeatures(pVertex, pBestVertex, kdTreeMap, separation, axisHits);
656  VertexSharedFeatureInfo sharedFeatureInfo(separation, axisHits);
657  this->AddSharedFeaturesToVector(sharedFeatureInfo, sharedFeatureList);
658 
659  if (pBestVertex && (bestVertexDr < maxRadius))
660  {
661  if (coinFlip(generator))
662  LArMvaHelper::ProduceTrainingExample(trainingOutputFile + "_" + interactionType + ".txt", true,
663  LArMvaHelper::ConcatenateFeatureLists(eventFeatureList, bestVertexFeatureList, featureList, sharedFeatureList));
664  else
665  LArMvaHelper::ProduceTrainingExample(trainingOutputFile + "_" + interactionType + ".txt", false,
666  LArMvaHelper::ConcatenateFeatureLists(eventFeatureList, featureList, bestVertexFeatureList, sharedFeatureList));
667  }
668  }
669  else
670  {
671  if (pBestVertex && (bestVertexDr < maxRadius))
672  {
673  if (coinFlip(generator))
674  LArMvaHelper::ProduceTrainingExample(trainingOutputFile + "_" + interactionType + ".txt", true,
675  LArMvaHelper::ConcatenateFeatureLists(eventFeatureList, bestVertexFeatureList, featureList));
676  else
677  LArMvaHelper::ProduceTrainingExample(trainingOutputFile + "_" + interactionType + ".txt", false,
678  LArMvaHelper::ConcatenateFeatureLists(eventFeatureList, featureList, bestVertexFeatureList));
679  }
680  }
681  }
682 
683  return pBestVertex;
684 }
MvaTypes::MvaFeatureVector MvaFeatureVector
Definition: LArMvaHelper.h:75
static pandora::StatusCode ProduceTrainingExample(const std::string &trainingOutputFile, const bool result, TCONTAINER &&featureContainer)
Produce a training example with the given features and result.
Definition: LArMvaHelper.h:285
void AddVertexFeaturesToVector(const VertexFeatureInfo &vertexFeatureInfo, LArMvaHelper::MvaFeatureVector &featureVector, const bool useRPhi) const
Add the vertex features to a vector in the correct order.
TFile f
Definition: plotHisto.C:6
void AddSharedFeaturesToVector(const VertexSharedFeatureInfo &vertexSharedFeatureInfo, LArMvaHelper::MvaFeatureVector &featureVector) const
Add the shared features to a vector in the correct order.
void GetSharedFeatures(const pandora::Vertex *const pVertex1, const pandora::Vertex *const pVertex2, const KDTreeMap &kdTreeMap, float &separation, float &axisHits) const
Calculates the shared features of a pair of vertex candidates.
bool m_legacyVariables
Whether to only use the old variables.
static MvaFeatureVector ConcatenateFeatureLists()
Recursively concatenate vectors of features (terminating method)
Definition: LArMvaHelper.h:541
boost::graph_traits< ModuleGraph >::vertex_descriptor Vertex
Definition: ModuleGraph.h:25
void GetBestVertex(const pandora::VertexVector &vertexVector, const pandora::Vertex *&pBestVertex, float &bestVertexDr) const
Use the MC information to get the best vertex from a list.
void lar_content::TrainedVertexSelectionAlgorithm::ProduceTrainingSets ( const pandora::VertexVector &  vertexVector,
const pandora::VertexVector &  bestRegionVertices,
VertexFeatureInfoMap vertexFeatureInfoMap,
const LArMvaHelper::MvaFeatureVector eventFeatureList,
const KDTreeMap kdTreeMap 
) const
protected

Produce the region and vertex training sets.

Parameters
vertexVectorthe vector of all vertices
bestRegionVerticesthe best region vertices
vertexFeatureInfoMapthe vertex feature info map
eventFeatureListthe list of event features
kdTreeMap

Definition at line 531 of file TrainedVertexSelectionAlgorithm.cc.

References CalculateRPhiScores(), GetInteractionType(), m_maxTrueVertexRadius, m_regionRadius, m_trainingOutputFileRegion, m_trainingOutputFileVertex, m_useRPhiFeatureForRegion, and ProduceTrainingExamples().

Referenced by lar_content::MvaVertexSelectionAlgorithm< T >::GetVertexScoreList().

533 {
534  if (vertexVector.empty())
535  return;
536 
537  // Create a distribution for random coin flips.
538  std::random_device device;
539  std::mt19937 generator(device());
540  std::bernoulli_distribution coinFlip(0.5);
541 
542  const std::string interactionType(this->GetInteractionType());
543 
544  // Produce training examples for the vertices representing regions.
545  const Vertex *const pBestRegionVertex(this->ProduceTrainingExamples(bestRegionVertices, vertexFeatureInfoMap, coinFlip, generator,
546  interactionType, m_trainingOutputFileRegion, eventFeatureList, kdTreeMap, m_regionRadius, m_useRPhiFeatureForRegion));
547 
548  // Get all the vertices in the best region.
549  VertexVector regionalVertices{pBestRegionVertex};
550  for (const Vertex *const pVertex : vertexVector)
551  {
552  if (pVertex == pBestRegionVertex)
553  continue;
554 
555  if ((pBestRegionVertex->GetPosition() - pVertex->GetPosition()).GetMagnitude() < m_regionRadius)
556  regionalVertices.push_back(pVertex);
557  }
558 
559  this->CalculateRPhiScores(regionalVertices, vertexFeatureInfoMap, kdTreeMap);
560 
561  // Produce training examples for the final vertices within the best region.
562  if (!regionalVertices.empty())
563  {
564  this->ProduceTrainingExamples(regionalVertices, vertexFeatureInfoMap, coinFlip, generator, interactionType,
565  m_trainingOutputFileVertex, eventFeatureList, kdTreeMap, m_maxTrueVertexRadius, true);
566  }
567 }
std::string m_trainingOutputFileVertex
The training output file for the vertex mva.
bool m_useRPhiFeatureForRegion
Whether to use the r/phi feature for the region vertex.
const pandora::Vertex * ProduceTrainingExamples(const pandora::VertexVector &vertexVector, const VertexFeatureInfoMap &vertexFeatureInfoMap, std::bernoulli_distribution &coinFlip, std::mt19937 &generator, const std::string &interactionType, const std::string &trainingOutputFile, const LArMvaHelper::MvaFeatureVector &eventFeatureList, const KDTreeMap &kdTreeMap, const float maxRadius, const bool useRPhi) const
Produce a set of training examples for a binary classifier.
void CalculateRPhiScores(pandora::VertexVector &vertexVector, VertexFeatureInfoMap &vertexFeatureInfoMap, const KDTreeMap &kdTreeMap) const
Calculate the r/phi scores for the vertices in a vector, possibly erasing those that fail the fast sc...
float m_maxTrueVertexRadius
The maximum distance at which a vertex candidate can be considered the &#39;true&#39; vertex.
std::string m_trainingOutputFileRegion
The training output file for the region mva.
std::vector< art::Ptr< recob::Vertex > > VertexVector
boost::graph_traits< ModuleGraph >::vertex_descriptor Vertex
Definition: ModuleGraph.h:25
std::string GetInteractionType() const
Get the interaction type string.
StatusCode lar_content::TrainedVertexSelectionAlgorithm::ReadSettings ( const pandora::TiXmlHandle  xmlHandle)
protected

Definition at line 859 of file TrainedVertexSelectionAlgorithm.cc.

References lar_content::LArMvaHelper::AddFeatureToolToVector(), m_allowClassifyDuringTraining, m_beamDeweightingConstant, m_caloHitListName, m_dropFailedRPhiFastScoreCandidates, m_energyKickConstant, m_featureToolVector, m_globalAsymmetryConstant, m_inputClusterListNames, m_legacyEventShapes, m_legacyVariables, m_localAsymmetryConstant, m_maxTrueVertexRadius, m_mcParticleListName, m_mcVertexXCorrection, m_minClusterCaloHits, m_minShowerClusterHits, m_minShowerSpineLength, m_regionRadius, m_rPhiFineTuningRadius, m_showerAsymmetryConstant, m_showerClusteringDistance, m_slidingFitWindow, m_testBeamMode, m_trainingOutputFileRegion, m_trainingOutputFileVertex, m_trainingSetMode, m_useRPhiFeatureForRegion, m_useShowerClusteringApproximation, and lar_content::VertexSelectionBaseAlgorithm::ReadSettings().

Referenced by lar_content::MvaVertexSelectionAlgorithm< T >::ReadSettings().

860 {
861  AlgorithmToolVector algorithmToolVector;
862  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, XmlHelper::ProcessAlgorithmToolList(*this, xmlHandle, "FeatureTools", algorithmToolVector));
863 
864  for (AlgorithmTool *const pAlgorithmTool : algorithmToolVector)
865  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, LArMvaHelper::AddFeatureToolToVector(pAlgorithmTool, m_featureToolVector));
866 
867  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "TrainingSetMode", m_trainingSetMode));
868 
869  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
870  XmlHelper::ReadValue(xmlHandle, "AllowClassifyDuringTraining", m_allowClassifyDuringTraining));
871 
872  PANDORA_RETURN_RESULT_IF_AND_IF(
873  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MCVertexXCorrection", m_mcVertexXCorrection));
874 
875  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
876  XmlHelper::ReadValue(xmlHandle, "TrainingOutputFileRegion", m_trainingOutputFileRegion));
877 
878  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
879  XmlHelper::ReadValue(xmlHandle, "TrainingOutputFileVertex", m_trainingOutputFileVertex));
880 
882  {
883  std::cout << "TrainedVertexSelectionAlgorithm: TrainingOutputFileRegion and TrainingOutputFileVertex are required for training set "
884  << "mode" << std::endl;
885  return STATUS_CODE_INVALID_PARAMETER;
886  }
887 
888  PANDORA_RETURN_RESULT_IF_AND_IF(
889  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MCParticleListName", m_mcParticleListName));
890 
891  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "CaloHitListName", m_caloHitListName));
892 
893  if (m_trainingSetMode && (m_mcParticleListName.empty() || m_caloHitListName.empty()))
894  {
895  std::cout << "TrainedVertexSelectionAlgorithm: MCParticleListName and CaloHitListName are required for training set mode" << std::endl;
896  return STATUS_CODE_INVALID_PARAMETER;
897  }
898 
899  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, XmlHelper::ReadVectorOfValues(xmlHandle, "InputClusterListNames", m_inputClusterListNames));
900 
901  PANDORA_RETURN_RESULT_IF_AND_IF(
902  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MinClusterCaloHits", m_minClusterCaloHits));
903 
904  PANDORA_RETURN_RESULT_IF_AND_IF(
905  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "SlidingFitWindow", m_slidingFitWindow));
906 
907  PANDORA_RETURN_RESULT_IF_AND_IF(
908  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MinShowerSpineLength", m_minShowerSpineLength));
909 
910  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
911  XmlHelper::ReadValue(xmlHandle, "BeamDeweightingConstant", m_beamDeweightingConstant));
912 
913  PANDORA_RETURN_RESULT_IF_AND_IF(
914  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "LocalAsymmetryConstant", m_localAsymmetryConstant));
915 
916  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
917  XmlHelper::ReadValue(xmlHandle, "GlobalAsymmetryConstant", m_globalAsymmetryConstant));
918 
919  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
920  XmlHelper::ReadValue(xmlHandle, "ShowerAsymmetryConstant", m_showerAsymmetryConstant));
921 
922  PANDORA_RETURN_RESULT_IF_AND_IF(
923  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "EnergyKickConstant", m_energyKickConstant));
924 
925  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
926  XmlHelper::ReadValue(xmlHandle, "ShowerClusteringDistance", m_showerClusteringDistance));
927 
928  PANDORA_RETURN_RESULT_IF_AND_IF(
929  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MinShowerClusterHits", m_minShowerClusterHits));
930 
931  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
932  XmlHelper::ReadValue(xmlHandle, "UseShowerClusteringApproximation", m_useShowerClusteringApproximation));
933 
934  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "RegionRadius", m_regionRadius));
935 
936  PANDORA_RETURN_RESULT_IF_AND_IF(
937  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "RPhiFineTuningRadius", m_rPhiFineTuningRadius));
938 
939  PANDORA_RETURN_RESULT_IF_AND_IF(
940  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MaxTrueVertexRadius", m_maxTrueVertexRadius));
941 
942  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
943  XmlHelper::ReadValue(xmlHandle, "UseRPhiFeatureForRegion", m_useRPhiFeatureForRegion));
944 
945  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
946  XmlHelper::ReadValue(xmlHandle, "DropFailedRPhiFastScoreCandidates", m_dropFailedRPhiFastScoreCandidates));
947 
948  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "TestBeamMode", m_testBeamMode));
949 
950  PANDORA_RETURN_RESULT_IF_AND_IF(
951  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "LegacyEventShapes", m_legacyEventShapes));
952 
953  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "LegacyVariables", m_legacyVariables));
954 
956  std::cout << "TrainedVertexSelectionAlgorithm: WARNING -- Producing training sample using incorrect legacy event shapes, consider turning LegacyEventShapes off"
957  << std::endl;
958 
960 }
std::string m_trainingOutputFileVertex
The training output file for the vertex mva.
bool m_useShowerClusteringApproximation
Whether to use the shower clustering distance approximation.
bool m_useRPhiFeatureForRegion
Whether to use the r/phi feature for the region vertex.
unsigned int m_minClusterCaloHits
The min number of hits parameter in the energy score.
VertexFeatureTool::FeatureToolVector m_featureToolVector
The feature tool vector.
bool m_legacyEventShapes
Whether to use the old event shapes calculation.
float m_localAsymmetryConstant
The local asymmetry constant for the initial region score list.
unsigned int m_minShowerClusterHits
The minimum number of shower cluster hits.
std::string m_mcParticleListName
The MC particle list for creating training examples.
float m_globalAsymmetryConstant
The global asymmetry constant for the initial region score list.
float m_maxTrueVertexRadius
The maximum distance at which a vertex candidate can be considered the &#39;true&#39; vertex.
static pandora::StatusCode AddFeatureToolToVector(pandora::AlgorithmTool *const pFeatureTool, MvaFeatureToolVector< Ts... > &featureToolVector)
Add a feature tool to a vector of feature tools.
Definition: LArMvaHelper.h:451
float m_showerAsymmetryConstant
The shower asymmetry constant for the initial region score list.
float m_beamDeweightingConstant
The beam deweighting constant for the initial region score list.
bool m_allowClassifyDuringTraining
Whether classification is allowed during training.
std::string m_trainingOutputFileRegion
The training output file for the region mva.
bool m_dropFailedRPhiFastScoreCandidates
Whether to drop candidates that fail the r/phi fast score test.
float m_energyKickConstant
The energy kick constant for the initial region score list.
float m_mcVertexXCorrection
The correction to the x-coordinate of the MC vertex position.
bool m_legacyVariables
Whether to only use the old variables.
unsigned int m_slidingFitWindow
The layer window for the sliding linear fits.
std::string m_caloHitListName
The 2D CaloHit list name.
float m_minShowerSpineLength
The minimum length at which all are considered to be tracks.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
float m_showerClusteringDistance
The shower clustering distance.
pandora::StringVector m_inputClusterListNames
The list of cluster list names.
float m_rPhiFineTuningRadius
The maximum distance the r/phi tune can move a vertex.
void lar_content::TrainedVertexSelectionAlgorithm::UpdateSpanCoordinate ( const float  minPositionCoord,
const float  maxPositionCoord,
pandora::InputFloat &  minCoord,
pandora::InputFloat &  maxCoord 
) const
inlineprotected

Update the min/max coordinate spans.

Parameters
minPositionCoordthe min position coordinate
maxPositionCoordthe max position coordinate
minCoordthe current min coordinate
maxCoordthe current max coordinate

Definition at line 390 of file TrainedVertexSelectionAlgorithm.cc.

Referenced by GetLegacyEventShapeFeatures().

392 {
393  if (!minCoord.IsInitialized() || minPositionCoord < minCoord.Get())
394  minCoord = minPositionCoord;
395 
396  if (!maxCoord.IsInitialized() || maxPositionCoord > maxCoord.Get())
397  maxCoord = maxPositionCoord;
398 }
float lar_content::VertexSelectionBaseAlgorithm::VertexHitEnergy ( const pandora::Vertex *const  pVertex,
const pandora::HitType  hitType,
HitKDTree2D kdTree 
) const
protectedinherited

Finds the energy of the nearest hit to the vertex candidate in this view.

Parameters
pVertexthe address of the vertex
hitTypethe relevant hit type
kdTreethe kd tree of 2D hits
Returns
the energy of the nearest hit

Definition at line 261 of file VertexSelectionBaseAlgorithm.cc.

References lar_content::build_2d_kd_search_region(), energy, lar_content::VertexSelectionBaseAlgorithm::m_maxOnHitDisplacement, lar_content::LArGeometryHelper::ProjectPosition(), and lar_content::KDTreeLinkerAlgo< DATA, DIM >::search().

Referenced by lar_content::VertexSelectionBaseAlgorithm::GetVertexEnergy().

262 {
263  const CartesianVector vertexPosition2D(LArGeometryHelper::ProjectPosition(this->GetPandora(), pVertex->GetPosition(), hitType));
265 
266  HitKDNode2DList foundHits;
267  kdTree.search(searchRegionHits, foundHits);
268 
269  float dr(std::numeric_limits<float>::max());
270  float energy(0);
271 
272  for (auto hit : foundHits)
273  {
274  const float diff = (vertexPosition2D - hit.data->GetPositionVector()).GetMagnitude();
275  if (diff < dr)
276  {
277  dr = diff;
278  energy = hit.data->GetElectromagneticEnergy();
279  }
280  }
281  return energy;
282 }
static pandora::CartesianVector ProjectPosition(const pandora::Pandora &pandora, const pandora::CartesianVector &position3D, const pandora::HitType view)
Project 3D position into a given 2D view.
double energy
Definition: plottest35.C:25
Detector simulation of raw signals on wires.
KDTreeBox build_2d_kd_search_region(const pandora::CaloHit *const point, const float x_span, const float z_span)
build_2d_kd_search_region
KDTreeBoxT< 2 > KDTreeBox
float m_maxOnHitDisplacement
Max hit-vertex displacement for declaring vertex to lie on a hit in each view.

Member Data Documentation

bool lar_content::TrainedVertexSelectionAlgorithm::m_allowClassifyDuringTraining
protected
float lar_content::TrainedVertexSelectionAlgorithm::m_beamDeweightingConstant
protected

The beam deweighting constant for the initial region score list.

Definition at line 466 of file TrainedVertexSelectionAlgorithm.h.

Referenced by PopulateInitialScoreList(), and ReadSettings().

std::string lar_content::TrainedVertexSelectionAlgorithm::m_caloHitListName
protected

The 2D CaloHit list name.

Definition at line 459 of file TrainedVertexSelectionAlgorithm.h.

Referenced by GetInteractionType(), and ReadSettings().

bool lar_content::TrainedVertexSelectionAlgorithm::m_dropFailedRPhiFastScoreCandidates
protected

Whether to drop candidates that fail the r/phi fast score test.

Definition at line 479 of file TrainedVertexSelectionAlgorithm.h.

Referenced by CalculateRPhiScores(), and ReadSettings().

float lar_content::TrainedVertexSelectionAlgorithm::m_energyKickConstant
protected

The energy kick constant for the initial region score list.

Definition at line 470 of file TrainedVertexSelectionAlgorithm.h.

Referenced by PopulateInitialScoreList(), and ReadSettings().

VertexFeatureTool::FeatureToolVector lar_content::TrainedVertexSelectionAlgorithm::m_featureToolVector
protected

The feature tool vector.

Definition at line 452 of file TrainedVertexSelectionAlgorithm.h.

Referenced by CalculateRPhiScores(), PopulateVertexFeatureInfoMap(), and ReadSettings().

float lar_content::TrainedVertexSelectionAlgorithm::m_globalAsymmetryConstant
protected

The global asymmetry constant for the initial region score list.

Definition at line 468 of file TrainedVertexSelectionAlgorithm.h.

Referenced by PopulateInitialScoreList(), and ReadSettings().

pandora::StringVector lar_content::TrainedVertexSelectionAlgorithm::m_inputClusterListNames
protected

The list of cluster list names.

Definition at line 461 of file TrainedVertexSelectionAlgorithm.h.

Referenced by lar_content::MvaVertexSelectionAlgorithm< T >::GetVertexScoreList(), and ReadSettings().

bool lar_content::TrainedVertexSelectionAlgorithm::m_legacyEventShapes
protected

Whether to use the old event shapes calculation.

Definition at line 481 of file TrainedVertexSelectionAlgorithm.h.

Referenced by CalculateEventFeatures(), and ReadSettings().

bool lar_content::TrainedVertexSelectionAlgorithm::m_legacyVariables
protected
float lar_content::TrainedVertexSelectionAlgorithm::m_localAsymmetryConstant
protected

The local asymmetry constant for the initial region score list.

Definition at line 467 of file TrainedVertexSelectionAlgorithm.h.

Referenced by PopulateInitialScoreList(), and ReadSettings().

float lar_content::TrainedVertexSelectionAlgorithm::m_maxTrueVertexRadius
protected

The maximum distance at which a vertex candidate can be considered the 'true' vertex.

Definition at line 477 of file TrainedVertexSelectionAlgorithm.h.

Referenced by ProduceTrainingSets(), and ReadSettings().

std::string lar_content::TrainedVertexSelectionAlgorithm::m_mcParticleListName
protected

The MC particle list for creating training examples.

Definition at line 458 of file TrainedVertexSelectionAlgorithm.h.

Referenced by GetBestVertex(), GetInteractionType(), and ReadSettings().

float lar_content::TrainedVertexSelectionAlgorithm::m_mcVertexXCorrection
protected

The correction to the x-coordinate of the MC vertex position.

Definition at line 455 of file TrainedVertexSelectionAlgorithm.h.

Referenced by GetBestVertex(), and ReadSettings().

unsigned int lar_content::TrainedVertexSelectionAlgorithm::m_minClusterCaloHits
protected

The min number of hits parameter in the energy score.

Definition at line 462 of file TrainedVertexSelectionAlgorithm.h.

Referenced by CalculateShowerClusterList(), lar_content::MvaVertexSelectionAlgorithm< T >::GetVertexScoreList(), and ReadSettings().

unsigned int lar_content::TrainedVertexSelectionAlgorithm::m_minShowerClusterHits
protected

The minimum number of shower cluster hits.

Definition at line 473 of file TrainedVertexSelectionAlgorithm.h.

Referenced by GetShowerLikeClusterEndPoints(), and ReadSettings().

float lar_content::TrainedVertexSelectionAlgorithm::m_minShowerSpineLength
protected

The minimum length at which all are considered to be tracks.

Definition at line 464 of file TrainedVertexSelectionAlgorithm.h.

Referenced by IsClusterShowerLike(), and ReadSettings().

float lar_content::TrainedVertexSelectionAlgorithm::m_regionRadius
protected
float lar_content::TrainedVertexSelectionAlgorithm::m_rPhiFineTuningRadius
protected

The maximum distance the r/phi tune can move a vertex.

Definition at line 476 of file TrainedVertexSelectionAlgorithm.h.

Referenced by PopulateFinalVertexScoreList(), and ReadSettings().

float lar_content::TrainedVertexSelectionAlgorithm::m_showerAsymmetryConstant
protected

The shower asymmetry constant for the initial region score list.

Definition at line 469 of file TrainedVertexSelectionAlgorithm.h.

Referenced by PopulateInitialScoreList(), and ReadSettings().

float lar_content::TrainedVertexSelectionAlgorithm::m_showerClusteringDistance
protected

The shower clustering distance.

Definition at line 472 of file TrainedVertexSelectionAlgorithm.h.

Referenced by PopulateKdTree(), and ReadSettings().

unsigned int lar_content::TrainedVertexSelectionAlgorithm::m_slidingFitWindow
protected

The layer window for the sliding linear fits.

Definition at line 463 of file TrainedVertexSelectionAlgorithm.h.

Referenced by CalculateShowerClusterList(), lar_content::MvaVertexSelectionAlgorithm< T >::GetVertexScoreList(), and ReadSettings().

bool lar_content::TrainedVertexSelectionAlgorithm::m_testBeamMode
protected

Test beam mode.

Definition at line 480 of file TrainedVertexSelectionAlgorithm.h.

Referenced by GetBestVertex(), GetInteractionType(), and ReadSettings().

std::string lar_content::TrainedVertexSelectionAlgorithm::m_trainingOutputFileRegion
protected

The training output file for the region mva.

Definition at line 456 of file TrainedVertexSelectionAlgorithm.h.

Referenced by ProduceTrainingSets(), and ReadSettings().

std::string lar_content::TrainedVertexSelectionAlgorithm::m_trainingOutputFileVertex
protected

The training output file for the vertex mva.

Definition at line 457 of file TrainedVertexSelectionAlgorithm.h.

Referenced by ProduceTrainingSets(), and ReadSettings().

bool lar_content::TrainedVertexSelectionAlgorithm::m_trainingSetMode
protected
bool lar_content::TrainedVertexSelectionAlgorithm::m_useRPhiFeatureForRegion
protected

Whether to use the r/phi feature for the region vertex.

Definition at line 478 of file TrainedVertexSelectionAlgorithm.h.

Referenced by lar_content::MvaVertexSelectionAlgorithm< T >::GetVertexScoreList(), ProduceTrainingSets(), and ReadSettings().

bool lar_content::TrainedVertexSelectionAlgorithm::m_useShowerClusteringApproximation
protected

Whether to use the shower clustering distance approximation.

Definition at line 474 of file TrainedVertexSelectionAlgorithm.h.

Referenced by CalculateShowerClusterList(), and ReadSettings().


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