9 #include "Pandora/AlgorithmHeaders.h" 20 void PfoMopUpBaseAlgorithm::MergeAndDeletePfos(
const ParticleFlowObject *
const pPfoToEnlarge,
const ParticleFlowObject *
const pPfoToDelete)
const 22 if (pPfoToEnlarge == pPfoToDelete)
23 throw StatusCodeException(STATUS_CODE_NOT_ALLOWED);
25 const PfoList daughterPfos(pPfoToDelete->GetDaughterPfoList());
26 const ClusterVector daughterClusters(pPfoToDelete->GetClusterList().begin(), pPfoToDelete->GetClusterList().end());
27 const VertexVector daughterVertices(pPfoToDelete->GetVertexList().begin(), pPfoToDelete->GetVertexList().end());
29 PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::Delete(*
this, pPfoToDelete, this->GetListName(pPfoToDelete)));
31 for (
const ParticleFlowObject *
const pDaughterPfo : daughterPfos)
33 PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::SetPfoParentDaughterRelationship(*
this, pPfoToEnlarge, pDaughterPfo));
36 for (
const Vertex *
const pDaughterVertex : daughterVertices)
38 PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::Delete(*
this, pDaughterVertex, this->GetListName(pDaughterVertex)));
41 for (
const Cluster *
const pDaughterCluster : daughterClusters)
43 const HitType daughterHitType(LArClusterHelper::GetClusterHitType(pDaughterCluster));
44 const Cluster *pParentCluster(PfoMopUpBaseAlgorithm::GetParentCluster(pPfoToEnlarge->GetClusterList(), daughterHitType));
48 PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::MergeAndDeleteClusters(*
this, pParentCluster, pDaughterCluster,
49 this->GetListName(pParentCluster), this->GetListName(pDaughterCluster)));
53 PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::AddToPfo(*
this, pPfoToEnlarge, pDaughterCluster));
60 const Cluster *PfoMopUpBaseAlgorithm::GetParentCluster(
const ClusterList &clusterList,
const HitType hitType)
62 unsigned int mostHits(0);
63 const Cluster *pBestParentCluster(
nullptr);
65 for (
const Cluster *
const pParentCluster : clusterList)
67 if (hitType != LArClusterHelper::GetClusterHitType(pParentCluster))
70 const unsigned int nParentHits(pParentCluster->GetNCaloHits());
72 if (nParentHits > mostHits)
74 mostHits = nParentHits;
75 pBestParentCluster = pParentCluster;
79 return pBestParentCluster;
84 StatusCode PfoMopUpBaseAlgorithm::ReadSettings(
const TiXmlHandle xmlHandle)
86 return MopUpBaseAlgorithm::ReadSettings(xmlHandle);
Header file for the cluster helper class.
std::vector< art::Ptr< recob::Cluster > > ClusterVector
Header file for the pfo mop up algorithm base class.
std::vector< art::Ptr< recob::Vertex > > VertexVector