9 #include "Pandora/AlgorithmHeaders.h" 24 CutPfoCharacterisationAlgorithm::CutPfoCharacterisationAlgorithm() :
25 m_postBranchAddition(false),
26 m_slidingFitWindow(5),
27 m_slidingShowerFitWindow(10),
28 m_maxShowerLengthCut(80.
f),
29 m_dTdLWidthRatioCut(0.045
f),
30 m_vertexDistanceRatioCut(0.6
f),
31 m_showerWidthRatioCut(0.2
f)
39 float straightLineLength(-1.
f);
49 dTdLMin =
std::min(dTdLMin, static_cast<float>(mapEntry.second.GetGradient()));
50 dTdLMax =
std::max(dTdLMax, static_cast<float>(mapEntry.second.GetGradient()));
53 catch (
const StatusCodeException &)
57 if (straightLineLength < std::numeric_limits<float>::epsilon())
68 if ((vertexDistance > std::numeric_limits<float>::epsilon()) && ((vertexDistance / straightLineLength) >
m_vertexDistanceRatioCut))
73 if ((showerFitWidth < std::numeric_limits<float>::epsilon()) || ((showerFitWidth / straightLineLength) >
m_showerWidthRatioCut))
83 throw StatusCodeException(STATUS_CODE_NOT_ALLOWED);
90 PANDORA_RETURN_RESULT_IF_AND_IF(
91 STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
"PostBranchAddition",
m_postBranchAddition));
102 PANDORA_RETURN_RESULT_IF_AND_IF(
103 STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
"SlidingFitWindow",
m_slidingFitWindow));
105 PANDORA_RETURN_RESULT_IF_AND_IF(
106 STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
"SlidingShowerFitWindow",
m_slidingShowerFitWindow));
108 PANDORA_RETURN_RESULT_IF_AND_IF(
109 STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
"MaxShowerLengthCut",
m_maxShowerLengthCut));
111 PANDORA_RETURN_RESULT_IF_AND_IF(
112 STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
"DTDLWidthRatioCut",
m_dTdLWidthRatioCut));
114 PANDORA_RETURN_RESULT_IF_AND_IF(
115 STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
"VertexDistanceRatioCut",
m_vertexDistanceRatioCut));
117 PANDORA_RETURN_RESULT_IF_AND_IF(
118 STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
"ShowerWidthRatioCut",
m_showerWidthRatioCut));
Header file for the pfo helper class.
Header file for the cut based pfo characterisation algorithm class.
Header file for the cut based cluster characterisation algorithm class.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
float m_dTdLWidthRatioCut
The maximum ratio of transverse fit gradient width to straight line length to qualify as a track...
unsigned int m_slidingShowerFitWindow
The layer window for the sliding shower fits.
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 float GetWireZPitch(const pandora::Pandora &pandora, const float maxWirePitchDiscrepancy=0.01)
Return the wire pitch.
Header file for the geometry helper class.
float m_showerWidthRatioCut
The maximum ratio of shower fit width to straight line length to qualify as a track.
float m_vertexDistanceRatioCut
The maximum ratio of vertex separation to straight line length to qualify as a track.
float m_maxShowerLengthCut
The maximum cluster length to qualify as a shower.
Header file for the lar two dimensional sliding fit result class.
pandora::CartesianVector GetGlobalMinLayerPosition() const
Get global position corresponding to the fit result in minimum fit layer.
static int max(int a, int b)
bool IsClearTrack(const pandora::Cluster *const pCluster) const
Whether cluster is identified as a clear track.
const LayerFitResultMap & GetLayerFitResultMap() const
Get the layer fit result map.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
T min(sqlite3 *const db, std::string const &table_name, std::string const &column_name)
unsigned int m_slidingFitWindow
The layer window for the sliding linear fits.
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.
bool m_postBranchAddition
Whether to use configuration for shower clusters post branch addition.
pandora::CartesianVector GetGlobalMaxLayerPosition() const
Get global position corresponding to the fit result in maximum fit layer.
TwoDSlidingFitResult class.