Pandora
Pandora source code navigator
Loading...
Searching...
No Matches
CutPfoCharacterisationAlgorithm.cc
Go to the documentation of this file.
1
10
13
15
18
19using namespace pandora;
20
21namespace lar_content
22{
23
25 m_postBranchAddition(false),
26 m_slidingFitWindow(5),
27 m_slidingShowerFitWindow(10),
28 m_maxShowerLengthCut(80.f),
29 m_dTdLWidthRatioCut(0.045f),
30 m_vertexDistanceRatioCut(0.6f),
31 m_showerWidthRatioCut(0.2f)
32{
33}
34
35//------------------------------------------------------------------------------------------------------------------------------------------
36
38{
39 float straightLineLength(-1.f);
40 float dTdLMin(+std::numeric_limits<float>::max()), dTdLMax(-std::numeric_limits<float>::max());
41
42 try
43 {
45 straightLineLength = (slidingFitResult.GetGlobalMaxLayerPosition() - slidingFitResult.GetGlobalMinLayerPosition()).GetMagnitude();
46
47 for (const auto &mapEntry : slidingFitResult.GetLayerFitResultMap())
48 {
49 dTdLMin = std::min(dTdLMin, static_cast<float>(mapEntry.second.GetGradient()));
50 dTdLMax = std::max(dTdLMax, static_cast<float>(mapEntry.second.GetGradient()));
51 }
52 }
53 catch (const StatusCodeException &)
54 {
55 }
56
57 if (straightLineLength < std::numeric_limits<float>::epsilon())
58 return false;
59
60 if (straightLineLength > m_maxShowerLengthCut)
61 return true;
62
63 if ((dTdLMax - dTdLMin) / straightLineLength > m_dTdLWidthRatioCut)
64 return false;
65
66 const float vertexDistance(CutClusterCharacterisationAlgorithm::GetVertexDistance(this, pCluster));
67
68 if ((vertexDistance > std::numeric_limits<float>::epsilon()) && ((vertexDistance / straightLineLength) > m_vertexDistanceRatioCut))
69 return false;
70
72
73 if ((showerFitWidth < std::numeric_limits<float>::epsilon()) || ((showerFitWidth / straightLineLength) > m_showerWidthRatioCut))
74 return false;
75
76 return true;
77}
78
79//------------------------------------------------------------------------------------------------------------------------------------------
80
82{
83 throw StatusCodeException(STATUS_CODE_NOT_ALLOWED);
84}
85
86//------------------------------------------------------------------------------------------------------------------------------------------
87
89{
91 STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "PostBranchAddition", m_postBranchAddition));
92
93 // Allow change in default values via a single xml tag, can subsequently override all individual values below, if required
95 {
97 m_dTdLWidthRatioCut = 0.03f;
100 }
101
103 STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "SlidingFitWindow", m_slidingFitWindow));
104
106 STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "SlidingShowerFitWindow", m_slidingShowerFitWindow));
107
109 STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MaxShowerLengthCut", m_maxShowerLengthCut));
110
112 STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "DTDLWidthRatioCut", m_dTdLWidthRatioCut));
113
115 STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "VertexDistanceRatioCut", m_vertexDistanceRatioCut));
116
118 STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "ShowerWidthRatioCut", m_showerWidthRatioCut));
119
121}
122
123} // namespace lar_content
Grouping of header files for many classes of use in particle flow algorithms.
Header file for the cut based cluster characterisation algorithm class.
Header file for the cut based pfo characterisation algorithm class.
Header file for the geometry helper class.
Header file for the pfo helper class.
Header file for the lar two dimensional sliding fit result class.
#define PANDORA_RETURN_RESULT_IF_AND_IF(StatusCode1, StatusCode2, Operator, Command)
Definition StatusCodes.h:31
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.
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...
float m_showerWidthRatioCut
The maximum ratio of shower fit width to straight line length to qualify as a track.
float m_maxShowerLengthCut
The maximum cluster length to qualify as a shower.
unsigned int m_slidingFitWindow
The layer window for the sliding linear fits.
float m_dTdLWidthRatioCut
The maximum ratio of transverse fit gradient width to straight line length to qualify as a track.
bool m_postBranchAddition
Whether to use configuration for shower clusters post branch addition.
float m_vertexDistanceRatioCut
The maximum ratio of vertex separation to straight line length to qualify as a track.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
Read the algorithm settings.
unsigned int m_slidingShowerFitWindow
The layer window for the sliding shower fits.
bool IsClearTrack(const pandora::Cluster *const pCluster) const
Whether cluster is identified as a clear track.
static float GetWireZPitch(const pandora::Pandora &pandora, const float maxWirePitchDiscrepancy=0.01)
Return the wire pitch.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
Read the algorithm settings.
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.
pandora::CartesianVector GetGlobalMaxLayerPosition() const
Get global position corresponding to the fit result in maximum fit layer.
Cluster class.
Definition Cluster.h:31
ParticleFlowObject class.
const Pandora & GetPandora() const
Get the associated pandora instance.
Definition Process.h:116
StatusCodeException class.
static StatusCode ReadValue(const TiXmlHandle &xmlHandle, const std::string &xmlElementName, T &t)
Read a value from an xml element.
Definition XmlHelper.h:136
StatusCode
The StatusCode enum.