25 m_slidingFitWindow(5),
26 m_slidingShowerFitWindow(10),
28 m_maxShowerLengthCut(80.f),
29 m_pathLengthRatioCut(1.005f),
30 m_rTWidthRatioCut(0.05f),
31 m_vertexDistanceRatioCut(0.5f),
32 m_showerWidthRatioCut(0.35f)
43 if (!pVertexList || (pVertexList->size() != 1) || (
VERTEX_3D != pVertexList->front()->GetVertexType()))
46 const Vertex *
const pVertex(pVertexList->front());
64 if (!layerFitResultMapS.empty())
66 float showerFitWidth(0.f);
68 for (
const auto &mapEntryS : layerFitResultMapS)
70 LayerFitResultMap::const_iterator iterP = layerFitResultMapP.find(mapEntryS.first);
71 LayerFitResultMap::const_iterator iterN = layerFitResultMapN.find(mapEntryS.first);
73 if ((layerFitResultMapP.end() != iterP) && (layerFitResultMapN.end() != iterN))
74 showerFitWidth += std::fabs(iterP->second.GetFitT() - iterN->second.GetFitT());
77 return showerFitWidth;
94 float straightLineLength(-1.f), integratedPathLength(-1.f);
95 float rTMin(+std::numeric_limits<float>::max()), rTMax(-std::numeric_limits<float>::max());
103 integratedPathLength = 0.f;
108 rTMin = std::min(rTMin,
static_cast<float>(mapEntry.second.GetFitT()));
109 rTMax = std::max(rTMax,
static_cast<float>(mapEntry.second.GetFitT()));
112 slidingFitResult.
GetGlobalPosition(mapEntry.second.GetL(), mapEntry.second.GetFitT(), thisFitPosition);
113 integratedPathLength += (thisFitPosition - previousFitPosition).GetMagnitude();
114 previousFitPosition = thisFitPosition;
121 if (straightLineLength < std::numeric_limits<float>::epsilon())
127 if ((integratedPathLength < std::numeric_limits<float>::epsilon()) || (integratedPathLength / straightLineLength >
m_pathLengthRatioCut))
135 if ((vertexDistance > std::numeric_limits<float>::epsilon()) && ((vertexDistance / straightLineLength) >
m_vertexDistanceRatioCut))
140 if ((showerFitWidth < std::numeric_limits<float>::epsilon()) || ((showerFitWidth / straightLineLength) >
m_showerWidthRatioCut))
Header file for the cut based cluster characterisation algorithm class.
Header file for the cluster helper class.
Header file for the geometry helper class.
Header file for the lar two dimensional sliding fit result class.
Header file for the lar two dimensional sliding shower fit result class.
#define PANDORA_RETURN_RESULT_IF_AND_IF(StatusCode1, StatusCode2, Operator, Command)
static pandora::StatusCode GetCurrentList(const pandora::Algorithm &algorithm, const T *&pT)
Get the current list.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
Read the algorithm settings.
static float GetShowerFitWidth(const pandora::Algorithm *const pAlgorithm, const pandora::Cluster *const pCluster, const unsigned int showerFitWindow)
Get a measure of the width of a cluster, using a sliding shower fit result.
unsigned int m_slidingShowerFitWindow
The layer window for the sliding shower fits.
unsigned int m_slidingFitWindow
The layer window for the sliding linear fits.
float m_showerWidthRatioCut
The maximum ratio of shower fit width to straight line length to qualify as a track.
virtual bool IsClearTrack(const pandora::Cluster *const pCluster) const
Whether cluster is identified as a clear track.
float m_pathLengthRatioCut
The maximum ratio of path length to straight line length to qualify as a track.
CutClusterCharacterisationAlgorithm()
Default constructor.
float m_vertexDistanceRatioCut
The maximum ratio of vertex separation to straight line length to qualify as a track.
unsigned int m_minCaloHitsCut
The minimum number of calo hits to qualify as a track.
float m_rTWidthRatioCut
The maximum ratio of transverse fit position width to straight line length to qualify as a track.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
Read the algorithm settings.
float m_maxShowerLengthCut
The maximum cluster length to qualify as a shower.
static float GetVertexDistance(const pandora::Algorithm *const pAlgorithm, const pandora::Cluster *const pCluster)
Get the distance between the interaction vertex (if present in the current vertex list) and a provide...
static pandora::HitType GetClusterHitType(const pandora::Cluster *const pCluster)
Get the hit type associated with a two dimensional cluster.
static float GetClosestDistance(const pandora::ClusterList &clusterList1, const pandora::ClusterList &clusterList2)
Get closest distance between clusters in a pair of cluster lists.
static float GetWireZPitch(const pandora::Pandora &pandora, const float maxWirePitchDiscrepancy=0.01)
Return the wire pitch.
static pandora::CartesianVector ProjectPosition(const pandora::Pandora &pandora, const pandora::CartesianVector &position3D, const pandora::HitType view)
Project 3D position into a given 2D view.
TwoDSlidingFitResult class.
pandora::CartesianVector GetGlobalMinLayerPosition() const
Get global position corresponding to the fit result in minimum fit layer.
const LayerFitResultMap & GetLayerFitResultMap() const
Get the layer fit result map.
void GetGlobalPosition(const float rL, const float rT, pandora::CartesianVector &position) const
Get global coordinates for given sliding linear fit coordinates.
pandora::CartesianVector GetGlobalMaxLayerPosition() const
Get global position corresponding to the fit result in maximum fit layer.
TwoDSlidingShowerFitResult class.
const TwoDSlidingFitResult & GetNegativeEdgeFitResult() const
Get the sliding fit result for the negative shower edge.
const TwoDSlidingFitResult & GetShowerFitResult() const
Get the sliding fit result for the full shower cluster.
const TwoDSlidingFitResult & GetPositiveEdgeFitResult() const
Get the sliding fit result for the positive shower edge.
Algorithm class. Algorithm addresses are held only by the algorithm manager. They have a fully define...
unsigned int GetNCaloHits() const
Get the number of calo hits in the cluster.
const Pandora & GetPandora() const
Get the associated pandora instance.
StatusCodeException class.
const CartesianVector & GetPosition() const
Get the vertex position.
static StatusCode ReadValue(const TiXmlHandle &xmlHandle, const std::string &xmlElementName, T &t)
Read a value from an xml element.
std::map< int, LayerFitResult > LayerFitResultMap
HitType
Calorimeter hit type enum.
MANAGED_CONTAINER< const Vertex * > VertexList
StatusCode
The StatusCode enum.