LArSoft  v07_13_02
Liquid Argon Software toolkit - http://larsoft.org/
VertexAssociatedPfosTool.cc
Go to the documentation of this file.
1 
9 #include "Pandora/AlgorithmHeaders.h"
10 
13 
16 
18 
19 using namespace pandora;
20 
21 namespace lar_content
22 {
23 
26 
27 VertexAssociatedPfosTool::VertexAssociatedPfosTool() :
28  m_minVertexLongitudinalDistance(-2.5f),
29  m_maxVertexLongitudinalDistance(20.f),
30  m_maxVertexTransverseDistance(3.5f),
31  m_vertexAngularAllowance(3.f)
32 {
33 }
34 
35 //------------------------------------------------------------------------------------------------------------------------------------------
36 
37 void VertexAssociatedPfosTool::Run(NeutrinoHierarchyAlgorithm *const pAlgorithm, const Vertex *const pNeutrinoVertex, PfoInfoMap &pfoInfoMap)
38 {
39  if (PandoraContentApi::GetSettings(*pAlgorithm)->ShouldDisplayAlgorithmInfo())
40  std::cout << "----> Running Algorithm Tool: " << this->GetInstanceName() << ", " << this->GetType() << std::endl;
41 
42  const CartesianVector &neutrinoVertex(pNeutrinoVertex->GetPosition());
43 
44  PfoVector sortedPfos;
45  for (const auto &mapEntry : pfoInfoMap) sortedPfos.push_back(mapEntry.first);
46  std::sort(sortedPfos.begin(), sortedPfos.end(), LArPfoHelper::SortByNHits);
47 
48  for (const Pfo *const pPfo : sortedPfos)
49  {
50  PfoInfo *const pPfoInfo(pfoInfoMap.at(pPfo));
51 
52  if (pPfoInfo->IsNeutrinoVertexAssociated() || pPfoInfo->GetParentPfo())
53  continue;
54 
55  const LArPointingCluster pointingCluster(*(pPfoInfo->GetSlidingFitResult3D()));
56  const bool useInner((pointingCluster.GetInnerVertex().GetPosition() - neutrinoVertex).GetMagnitudeSquared() <
57  (pointingCluster.GetOuterVertex().GetPosition() - neutrinoVertex).GetMagnitudeSquared());
58 
59  const LArPointingCluster::Vertex &daughterVertex(useInner ? pointingCluster.GetInnerVertex() : pointingCluster.GetOuterVertex());
60 
63  {
64  pPfoInfo->SetNeutrinoVertexAssociation(true);
65  pPfoInfo->SetInnerLayerAssociation(useInner);
66  }
67  }
68 }
69 
70 //------------------------------------------------------------------------------------------------------------------------------------------
71 
72 StatusCode VertexAssociatedPfosTool::ReadSettings(const TiXmlHandle xmlHandle)
73 {
74  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
75  "MinVertexLongitudinalDistance", m_minVertexLongitudinalDistance));
76 
77  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
78  "MaxVertexLongitudinalDistance", m_maxVertexLongitudinalDistance));
79 
80  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
81  "MaxVertexTransverseDistance", m_maxVertexTransverseDistance));
82 
83  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
84  "VertexAngularAllowance", m_vertexAngularAllowance));
85 
86  return STATUS_CODE_SUCCESS;
87 }
88 
89 } // namespace lar_content
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
void Run(NeutrinoHierarchyAlgorithm *const pAlgorithm, const pandora::Vertex *const pNeutrinoVertex, NeutrinoHierarchyAlgorithm::PfoInfoMap &pfoInfoMap)
Run the algorithm tool.
static bool SortByNHits(const pandora::ParticleFlowObject *const pLhs, const pandora::ParticleFlowObject *const pRhs)
Sort pfos by number of constituent hits.
Header file for the pfo helper class.
Header file for the lar pointing cluster class.
NeutrinoHierarchyAlgorithm::PfoInfoMap PfoInfoMap
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.
float m_vertexAngularAllowance
Vertex association check: pointing angular allowance in degrees.
float m_maxVertexTransverseDistance
Vertex association check: max transverse distance cut.
LArPointingCluster class.
float m_minVertexLongitudinalDistance
Vertex association check: min longitudinal distance cut.
TFile f
Definition: plotHisto.C:6
float m_maxVertexLongitudinalDistance
Vertex association check: max longitudinal distance cut.
const Vertex & GetOuterVertex() const
Get the outer vertex.
const Vertex & GetInnerVertex() const
Get the inner vertex.
Header file for the vertex associated pfos tool class.
Header file for the lar three dimensional sliding fit result class.
NeutrinoHierarchyAlgorithm::PfoInfo PfoInfo
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.