LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
lar_dl_content::DlPfoCharacterisationAlgorithm Class Reference

DlPfoCharacterisationAlgorithm class. More...

#include "DlPfoCharacterisationAlgorithm.h"

Inheritance diagram for lar_dl_content::DlPfoCharacterisationAlgorithm:
lar_content::PfoCharacterisationBaseAlgorithm

Public Member Functions

 DlPfoCharacterisationAlgorithm ()
 Default constructor. More...
 

Protected Member Functions

pandora::StatusCode Run ()
 
virtual bool IsClearTrack3x2D (const pandora::ParticleFlowObject *const pPfo) const
 Whether pfo is identified as a clear track using its three clusters. More...
 

Protected Attributes

std::string m_trackPfoListName
 The track pfo list name. More...
 
std::string m_showerPfoListName
 The shower pfo list name. More...
 
pandora::StringVector m_inputPfoListNames
 The names of the input pfo lists. More...
 
bool m_updateClusterIds
 Whether to update daughter cluster particle id labels to match pfo id. More...
 
bool m_postBranchAddition
 Whether to use configuration for shower clusters post branch addition. More...
 
bool m_useThreeDInformation
 Whether to use PFO and 3D information or clusters for characterisation. More...
 
unsigned int m_minTrackLikeViews
 The minimum number of track-like views to declare a pfo as track-like. More...
 

Private Member Functions

bool IsClearTrack (const pandora::Cluster *const pCluster) const
 Whether cluster is identified as a clear track. More...
 
bool IsClearTrack (const pandora::ParticleFlowObject *const pPfo) const
 Whether pfo is identified as a clear track. More...
 
pandora::StatusCode ReadSettings (const pandora::TiXmlHandle xmlHandle)
 

Detailed Description

Constructor & Destructor Documentation

lar_dl_content::DlPfoCharacterisationAlgorithm::DlPfoCharacterisationAlgorithm ( )

Default constructor.

Definition at line 24 of file DlPfoCharacterisationAlgorithm.cc.

References util::begin(), util::end(), f, lar_content::LArCaloHit::GetTrackProbability(), and pmtana::mean().

25 {
26 }

Member Function Documentation

bool lar_dl_content::DlPfoCharacterisationAlgorithm::IsClearTrack ( const pandora::Cluster *const  pCluster) const
privatevirtual

Whether cluster is identified as a clear track.

Parameters
pClusteraddress of the relevant cluster
Returns
boolean

Implements lar_content::PfoCharacterisationBaseAlgorithm.

bool lar_dl_content::DlPfoCharacterisationAlgorithm::IsClearTrack ( const pandora::ParticleFlowObject *const  pPfo) const
privatevirtual

Whether pfo is identified as a clear track.

Parameters
pPfoaddress of the relevant pfo
Returns
boolean

Implements lar_content::PfoCharacterisationBaseAlgorithm.

Definition at line 68 of file DlPfoCharacterisationAlgorithm.cc.

References util::begin(), util::end(), f, lar_content::LArCaloHit::GetTrackProbability(), and pmtana::mean().

69 {
70  ClusterList allClusters;
71  LArPfoHelper::GetTwoDClusterList(pPfo, allClusters);
72  FloatVector trackLikelihoods;
73  for (const Cluster *pCluster : allClusters)
74  {
75  const OrderedCaloHitList &orderedCaloHitList{pCluster->GetOrderedCaloHitList()};
76  CaloHitList caloHits;
77  orderedCaloHitList.FillCaloHitList(caloHits);
78  const CaloHitList &isolatedHits{pCluster->GetIsolatedCaloHitList()};
79  caloHits.insert(caloHits.end(), isolatedHits.begin(), isolatedHits.end());
80  try
81  {
82  for (const CaloHit *pCaloHit : caloHits)
83  {
84  const LArCaloHit *pLArCaloHit{dynamic_cast<const LArCaloHit *>(pCaloHit)};
85  const float pTrack{pLArCaloHit->GetTrackProbability()};
86  const float pShower{pLArCaloHit->GetShowerProbability()};
87  if ((pTrack + pShower) > std::numeric_limits<float>::epsilon())
88  trackLikelihoods.emplace_back(pTrack / (pTrack + pShower));
89  }
90  }
91  catch (const StatusCodeException &)
92  {
93  }
94  }
95 
96  const unsigned long N{trackLikelihoods.size()};
97  if (N > 0)
98  {
99  float mean{std::accumulate(std::begin(trackLikelihoods), std::end(trackLikelihoods), 0.f) / N};
100  if (mean >= 0.5f)
101  return true;
102  else
103  return false;
104  }
105 
106  return true;
107 }
LAr calo hit class.
Definition: LArCaloHit.h:39
TFile f
Definition: plotHisto.C:6
decltype(auto) constexpr end(T &&obj)
ADL-aware version of std::end.
Definition: StdUtils.h:77
double mean(const std::vector< short > &wf, size_t start, size_t nsample)
Definition: UtilFunc.cxx:13
decltype(auto) constexpr begin(T &&obj)
ADL-aware version of std::begin.
Definition: StdUtils.h:69
float GetTrackProbability() const
Get the probability that the hit is track-like.
Definition: LArCaloHit.h:210
bool lar_content::PfoCharacterisationBaseAlgorithm::IsClearTrack3x2D ( const pandora::ParticleFlowObject *const  pPfo) const
protectedvirtualinherited

Whether pfo is identified as a clear track using its three clusters.

Parameters
pPfoaddress of the relevant pfo
Returns
boolean

Definition at line 108 of file PfoCharacterisationBaseAlgorithm.cc.

References lar_content::LArClusterHelper::GetClusterHitType(), lar_content::LArPfoHelper::GetTwoDClusterList(), lar_content::PfoCharacterisationBaseAlgorithm::IsClearTrack(), and lar_content::PfoCharacterisationBaseAlgorithm::m_minTrackLikeViews.

Referenced by lar_content::PfoCharacterisationBaseAlgorithm::Run().

109 {
110  ClusterList twoDClusterList;
111  LArPfoHelper::GetTwoDClusterList(pPfo, twoDClusterList);
112 
113  typedef std::set<pandora::HitType> HitTypeSet;
114  HitTypeSet hitTypeSet;
115 
116  unsigned int nTrackLikeViews(0);
117  for (const Cluster *const pCluster : twoDClusterList)
118  {
119  const HitType hitType(LArClusterHelper::GetClusterHitType(pCluster));
120  if (!hitTypeSet.insert(hitType).second)
121  continue;
122 
123  if (this->IsClearTrack(pCluster))
124  ++nTrackLikeViews;
125 
126  if (nTrackLikeViews >= m_minTrackLikeViews)
127  return true;
128  }
129 
130  return false;
131 }
static void GetTwoDClusterList(const pandora::ParticleFlowObject *const pPfo, pandora::ClusterList &clusterList)
Get the list of 2D clusters from an input pfo.
static pandora::HitType GetClusterHitType(const pandora::Cluster *const pCluster)
Get the hit type associated with a two dimensional cluster.
virtual bool IsClearTrack(const pandora::ParticleFlowObject *const pPfo) const =0
Whether pfo is identified as a clear track.
unsigned int m_minTrackLikeViews
The minimum number of track-like views to declare a pfo as track-like.
HitType
Definition: HitType.h:12
StatusCode lar_dl_content::DlPfoCharacterisationAlgorithm::ReadSettings ( const pandora::TiXmlHandle  xmlHandle)
private

Definition at line 111 of file DlPfoCharacterisationAlgorithm.cc.

112 {
113  return PfoCharacterisationBaseAlgorithm::ReadSettings(xmlHandle);
114 }
StatusCode lar_content::PfoCharacterisationBaseAlgorithm::Run ( )
protectedinherited

Definition at line 39 of file PfoCharacterisationBaseAlgorithm.cc.

References lar_content::LArPfoHelper::GetTwoDClusterList(), lar_content::PfoCharacterisationBaseAlgorithm::IsClearTrack(), lar_content::PfoCharacterisationBaseAlgorithm::IsClearTrack3x2D(), lar_content::PfoCharacterisationBaseAlgorithm::m_inputPfoListNames, lar_content::PfoCharacterisationBaseAlgorithm::m_showerPfoListName, lar_content::PfoCharacterisationBaseAlgorithm::m_trackPfoListName, lar_content::PfoCharacterisationBaseAlgorithm::m_updateClusterIds, and lar_content::PfoCharacterisationBaseAlgorithm::m_useThreeDInformation.

40 {
41  PfoList tracksToShowers, showersToTracks;
42 
43  for (const std::string &pfoListName : m_inputPfoListNames)
44  {
45  const PfoList *pPfoList(nullptr);
46  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_INITIALIZED, !=, PandoraContentApi::GetList(*this, pfoListName, pPfoList));
47 
48  if (!pPfoList || pPfoList->empty())
49  {
50  if (PandoraContentApi::GetSettings(*this)->ShouldDisplayAlgorithmInfo())
51  std::cout << "PfoCharacterisationBaseAlgorithm: unable to find pfo list " << pfoListName << std::endl;
52 
53  continue;
54  }
55 
56  for (const ParticleFlowObject *const pPfo : *pPfoList)
57  {
58  PandoraContentApi::ParticleFlowObject::Metadata pfoMetadata;
59  const bool isTrackLike(m_useThreeDInformation ? this->IsClearTrack(pPfo) : this->IsClearTrack3x2D(pPfo));
60 
61  if (isTrackLike)
62  {
63  pfoMetadata.m_particleId = MU_MINUS;
64 
65  if (m_showerPfoListName == pfoListName)
66  showersToTracks.push_back(pPfo);
67  }
68  else
69  {
70  pfoMetadata.m_particleId = E_MINUS;
71 
72  if (m_trackPfoListName == pfoListName)
73  tracksToShowers.push_back(pPfo);
74  }
75 
76  if (pPfo->GetParticleId() != pfoMetadata.m_particleId.Get())
77  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::ParticleFlowObject::AlterMetadata(*this, pPfo, pfoMetadata));
78 
79  if (!m_updateClusterIds)
80  continue;
81 
82  ClusterList twoDClusterList;
83  LArPfoHelper::GetTwoDClusterList(pPfo, twoDClusterList);
84 
85  for (const Cluster *const pCluster : twoDClusterList)
86  {
87  if (pCluster->GetParticleId() == pfoMetadata.m_particleId.Get())
88  continue;
89 
90  PandoraContentApi::Cluster::Metadata clusterMetadata;
91  clusterMetadata.m_particleId = pfoMetadata.m_particleId.Get();
92  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::Cluster::AlterMetadata(*this, pCluster, clusterMetadata));
93  }
94  }
95  }
96 
97  if (!tracksToShowers.empty())
98  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::SaveList(*this, m_trackPfoListName, m_showerPfoListName, tracksToShowers));
99 
100  if (!showersToTracks.empty())
101  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::SaveList(*this, m_showerPfoListName, m_trackPfoListName, showersToTracks));
102 
103  return STATUS_CODE_SUCCESS;
104 }
virtual bool IsClearTrack3x2D(const pandora::ParticleFlowObject *const pPfo) const
Whether pfo is identified as a clear track using its three clusters.
pandora::StringVector m_inputPfoListNames
The names of the input pfo lists.
static void GetTwoDClusterList(const pandora::ParticleFlowObject *const pPfo, pandora::ClusterList &clusterList)
Get the list of 2D clusters from an input pfo.
virtual bool IsClearTrack(const pandora::ParticleFlowObject *const pPfo) const =0
Whether pfo is identified as a clear track.
bool m_updateClusterIds
Whether to update daughter cluster particle id labels to match pfo id.
bool m_useThreeDInformation
Whether to use PFO and 3D information or clusters for characterisation.
std::string m_showerPfoListName
The shower pfo list name.

Member Data Documentation

pandora::StringVector lar_content::PfoCharacterisationBaseAlgorithm::m_inputPfoListNames
protectedinherited
unsigned int lar_content::PfoCharacterisationBaseAlgorithm::m_minTrackLikeViews
protectedinherited

The minimum number of track-like views to declare a pfo as track-like.

Definition at line 71 of file PfoCharacterisationBaseAlgorithm.h.

Referenced by lar_content::PfoCharacterisationBaseAlgorithm::IsClearTrack3x2D(), and lar_content::PfoCharacterisationBaseAlgorithm::ReadSettings().

bool lar_content::PfoCharacterisationBaseAlgorithm::m_postBranchAddition
protectedinherited

Whether to use configuration for shower clusters post branch addition.

Definition at line 69 of file PfoCharacterisationBaseAlgorithm.h.

std::string lar_content::PfoCharacterisationBaseAlgorithm::m_showerPfoListName
protectedinherited
std::string lar_content::PfoCharacterisationBaseAlgorithm::m_trackPfoListName
protectedinherited
bool lar_content::PfoCharacterisationBaseAlgorithm::m_updateClusterIds
protectedinherited

Whether to update daughter cluster particle id labels to match pfo id.

Definition at line 68 of file PfoCharacterisationBaseAlgorithm.h.

Referenced by lar_content::PfoCharacterisationBaseAlgorithm::ReadSettings(), and lar_content::PfoCharacterisationBaseAlgorithm::Run().

bool lar_content::PfoCharacterisationBaseAlgorithm::m_useThreeDInformation
protectedinherited

Whether to use PFO and 3D information or clusters for characterisation.

Definition at line 70 of file PfoCharacterisationBaseAlgorithm.h.

Referenced by lar_content::PfoCharacterisationBaseAlgorithm::ReadSettings(), and lar_content::PfoCharacterisationBaseAlgorithm::Run().


The documentation for this class was generated from the following files: