9 #include "Pandora/AlgorithmHeaders.h" 20 CheatingNeutrinoDaughterVerticesAlgorithm::CheatingNeutrinoDaughterVerticesAlgorithm() : m_collapseToPrimaryMCParticles(false)
28 const PfoList *pPfoList(
nullptr);
29 PANDORA_THROW_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_INITIALIZED, !=, PandoraContentApi::GetList(*
this,
m_neutrinoListName, pPfoList));
33 if (PandoraContentApi::GetSettings(*this)->ShouldDisplayAlgorithmInfo())
34 std::cout <<
"CheatingNeutrinoDaughterVerticesAlgorithm: pfo list unavailable." <<
std::endl;
36 return STATUS_CODE_SUCCESS;
47 return STATUS_CODE_SUCCESS;
56 const MCParticleList *pMCParticleList(
nullptr);
57 PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::GetList(*
this,
m_mcParticleListName, pMCParticleList));
67 for (
const ParticleFlowObject *
const pNeutrinoPfo : neutrinoPfos)
72 PfoList::iterator neutrinoIter(std::find(daughterPfos.begin(), daughterPfos.end(), pNeutrinoPfo));
74 if (daughterPfos.end() != neutrinoIter)
75 daughterPfos.erase(neutrinoIter);
77 for (
const ParticleFlowObject *
const pDaughterPfo : daughterPfos)
83 catch (
const StatusCodeException &)
101 if (mcPrimaryMap.end() == primaryIter)
102 throw StatusCodeException(STATUS_CODE_NOT_FOUND);
104 pMCParticle = primaryIter->second;
109 PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::CreateTemporaryListAndSetCurrent(*
this, pVertexList, vertexListName));
111 PandoraContentApi::Vertex::Parameters parameters;
112 parameters.m_position = pMCParticle->GetVertex();
113 parameters.m_vertexLabel = VERTEX_INTERACTION;
114 parameters.m_vertexType = VERTEX_3D;
116 const Vertex *pVertex(
nullptr);
117 PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::Vertex::Create(*
this, parameters, pVertex));
119 if (!pVertexList->empty())
121 PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::SaveList<Vertex>(*
this,
m_vertexListName));
122 PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::AddToPfo<Vertex>(*
this, pDaughterPfo, pVertex));
130 PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
135 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, XmlHelper::ReadValue(xmlHandle,
"MCParticleListName",
m_mcParticleListName));
138 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, XmlHelper::ReadValue(xmlHandle,
"NeutrinoPfoListName",
m_neutrinoListName));
140 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, XmlHelper::ReadValue(xmlHandle,
"OutputVertexListName",
m_vertexListName));
142 return STATUS_CODE_SUCCESS;
std::string m_mcParticleListName
The mc particle list name, required if want to collapse mc particle hierarchy.
Header file for the pfo helper class.
std::string m_vertexListName
The name of the output cosmic-ray vertex list.
static void GetRecoNeutrinos(const pandora::PfoList *const pPfoList, pandora::PfoList &recoNeutrinos)
Get neutrino pfos from an input pfo list.
pandora::StatusCode Run()
static void GetMCPrimaryMap(const pandora::MCParticleList *const pMCParticleList, MCRelationMap &mcPrimaryMap)
Get mapping from individual mc particles (in a provided list) and their primary parent mc particles...
static const pandora::MCParticle * GetMainMCParticle(const pandora::ParticleFlowObject *const pPfo)
Find the mc particle making the largest contribution to 2D clusters in a specified pfo...
void GetMCPrimaryMap(LArMCParticleHelper::MCRelationMap &mcPrimaryMap) const
Get the mapping from mc particle to primary, only required if collapsed mc particle hierarchy specifi...
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
Header file for the cheating neutrino daughter vertices algorithm class.
void ProcessRecoNeutrinos(const pandora::PfoList &neutrinoPfos, const LArMCParticleHelper::MCRelationMap &mcPrimaryMap) const
Process the list of reconstructed neutrinos.
void ProcessDaughterPfo(const pandora::ParticleFlowObject *const pDaughterPfo, const LArMCParticleHelper::MCRelationMap &mcPrimaryMap) const
Process a daughter pfo.
bool m_collapseToPrimaryMCParticles
Whether to collapse mc particle hierarchies to primary particles.
std::string m_neutrinoListName
The input list of pfo list names.
static void GetAllDownstreamPfos(const pandora::PfoList &inputPfoList, pandora::PfoList &outputPfoList)
Get a flat list of all pfos, recursively, of all daughters associated with those pfos in an input lis...
boost::graph_traits< ModuleGraph >::vertex_descriptor Vertex
std::unordered_map< const pandora::MCParticle *, const pandora::MCParticle * > MCRelationMap
std::list< Vertex > VertexList
QTextStream & endl(QTextStream &s)