23typedef NeutrinoHierarchyAlgorithm::PfoInfo
PfoInfo;
27 m_minNeutrinoVertexDistance(5.f),
28 m_minVertexLongitudinalDistance(-2.5f),
29 m_maxVertexLongitudinalDistance(20.f),
30 m_maxVertexTransverseDistance(3.5f),
31 m_vertexAngularAllowance(3.f),
32 m_maxParentEndpointDistance(2.5f)
41 std::cout <<
"----> Running Algorithm Tool: " << this->
GetInstanceName() <<
", " << this->
GetType() << std::endl;
43 bool associationsMade(
true);
45 while (associationsMade)
47 associationsMade =
false;
49 pAlgorithm->
SeparatePfos(pfoInfoMap, assignedPfos, unassignedPfos);
51 if (unassignedPfos.empty())
59 PfoInfo *
const pParentPfoInfo(pfoInfoMap.at(pParentPfo));
64 const float neutrinoVertexDistance((parentEndpoint.GetPosition() - pNeutrinoVertex->
GetPosition()).GetMagnitude());
71 if (recentlyAssigned.count(pPfo))
74 PfoInfo *
const pPfoInfo(pfoInfoMap.at(pPfo));
77 const bool useInner((pointingCluster.
GetInnerVertex().
GetPosition() - parentEndpoint.GetPosition()).GetMagnitudeSquared() <
90 associationsMade =
true;
94 recentlyAssigned.insert(pPfoInfo->
GetThisPfo());
108 CartesianVector parentPosition3D(0.f, 0.f, 0.f), daughterPosition3D(0.f, 0.f, 0.f);
144 return STATUS_CODE_SUCCESS;
Header file for the lar pointing cluster class.
Header file for the lar three dimensional sliding fit result class.
#define PANDORA_RETURN_RESULT_IF_AND_IF(StatusCode1, StatusCode2, Operator, Command)
static const pandora::PandoraSettings * GetSettings(const pandora::Algorithm &algorithm)
Get the pandora settings instance.
bool IsCloseToParentEndpoint(const pandora::CartesianVector &parentEndpoint, const pandora::Cluster *const pParentCluster3D, const pandora::Cluster *const pDaughterCluster3D) const
Whether a daughter 3D cluster is in close proximity to the endpoint of a parent 3D cluster.
float m_maxVertexTransverseDistance
Vertex association check: max transverse distance cut.
float m_minVertexLongitudinalDistance
Vertex association check: min longitudinal distance cut.
float m_maxParentEndpointDistance
Max distance between candidate parent endpoint and candidate daughter.
float m_maxVertexLongitudinalDistance
Vertex association check: max longitudinal distance cut.
float m_minNeutrinoVertexDistance
Min distance between candidate parent endpoint and neutrino vertex.
float m_vertexAngularAllowance
Vertex association check: pointing angular allowance in degrees.
EndAssociatedPfosTool()
Default constructor.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
Read the algorithm settings.
void Run(const NeutrinoHierarchyAlgorithm *const pAlgorithm, const pandora::Vertex *const pNeutrinoVertex, NeutrinoHierarchyAlgorithm::PfoInfoMap &pfoInfoMap)
Run the algorithm tool.
static void GetClosestPositions(const pandora::Cluster *const pCluster1, const pandora::Cluster *const pCluster2, pandora::CartesianVector &position1, pandora::CartesianVector &position2)
Get pair of closest positions for a pair of clusters.
const pandora::CartesianVector & GetPosition() const
Get the vertex position.
static bool IsNode(const pandora::CartesianVector &parentVertex, const LArPointingCluster::Vertex &daughterVertex, const float minLongitudinalDistance, const float maxTransverseDistance)
Whether pointing vertex is adjacent to a given position.
static bool IsEmission(const pandora::CartesianVector &parentVertex, const LArPointingCluster::Vertex &daughterVertex, const float minLongitudinalDistance, const float maxLongitudinalDistance, const float maxTransverseDistance, const float angularAllowance)
Whether pointing vertex is emitted from a given position.
LArPointingCluster class.
const Vertex & GetInnerVertex() const
Get the inner vertex.
const Vertex & GetOuterVertex() const
Get the outer vertex.
const pandora::ParticleFlowObject * GetThisPfo() const
Get the address of the pfo.
bool IsInnerLayerAssociated() const
If associated, whether association to parent (vtx or pfo) is at sliding fit inner layer.
const pandora::Cluster * GetCluster3D() const
Get the address of the three dimensional cluster.
void AddDaughterPfo(const pandora::ParticleFlowObject *const pDaughterPfo)
Add a daughter pfo.
void SetParentPfo(const pandora::ParticleFlowObject *const pParentPfo)
Set the parent pfo.
void SetInnerLayerAssociation(const bool isInnerLayerAssociated)
Set the inner layer association flag.
const ThreeDSlidingFitResult * GetSlidingFitResult3D() const
Get the address of the three dimensional sliding fit result.
NeutrinoHierarchyAlgorithm class.
void SeparatePfos(const NeutrinoHierarchyAlgorithm::PfoInfoMap &pfoInfoMap, pandora::PfoVector &assignedPfos, pandora::PfoVector &unassignedPfos) const
Query the pfo info map and separate/extract pfos currently either acting as parents or associated wit...
std::unordered_map< const pandora::ParticleFlowObject *, PfoInfo * > PfoInfoMap
bool ShouldDisplayAlgorithmInfo() const
Whether to display algorithm information during processing.
ParticleFlowObject class.
const std::string & GetType() const
Get the type.
const std::string & GetInstanceName() const
Get the instance name.
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.
NeutrinoHierarchyAlgorithm::PfoInfo PfoInfo
NeutrinoHierarchyAlgorithm::PfoInfoMap PfoInfoMap
std::unordered_set< const ParticleFlowObject * > PfoSet
std::vector< const ParticleFlowObject * > PfoVector
StatusCode
The StatusCode enum.