32 for (
const MCParticle *
const pMCNeutrino : mcNeutrinoVector)
38 return STATUS_CODE_FAILURE;
47 return STATUS_CODE_SUCCESS;
60 for (
const MCParticle *
const pMCNeutrino : allMCNeutrinoVector)
63 mcNeutrinoVector.push_back(pMCNeutrino);
71 pNeutrinoPfo =
nullptr;
73 PandoraContentApi::ParticleFlowObject::Parameters pfoParameters;
77 pfoParameters.m_energy = pMCNeutrino->
GetEnergy();
78 pfoParameters.m_momentum = pMCNeutrino->
GetMomentum();
80 std::string neutrinoPfoListName;
81 const PfoList *pNeutrinoPfoList(
nullptr);
83 PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::ParticleFlowObject::Create(*
this, pfoParameters, pNeutrinoPfo));
85 if (!pNeutrinoPfoList || pNeutrinoPfoList->empty())
99 const Vertex *pNeutrinoVertex(
nullptr);
100 float closestVertexDistance(std::numeric_limits<float>::max());
102 for (
const Vertex *
const pVertex : *pVertexList)
104 const float distance((pVertex->GetPosition() - pMCNeutrino->
GetEndpoint()).GetMagnitude());
106 if (distance < closestVertexDistance)
108 pNeutrinoVertex = pVertex;
109 closestVertexDistance = distance;
136 const PfoList *pDaughterPfoList(
nullptr);
141 std::cout <<
"CheatingNeutrinoCreationAlgorithm: pfo list " << daughterPfoListName <<
" unavailable." << std::endl;
152 LArMCParticleHelper::MCRelationMap::const_iterator primaryIter = mcPrimaryMap.find(pMCParticle);
154 if (mcPrimaryMap.end() == primaryIter)
157 pMCParticle = primaryIter->second;
160 if (!mcParticleToPfoMap.insert(MCParticleToPfoMap::value_type(pMCParticle, pDaughterPfo)).second)
173 MCParticleToPfoMap::const_iterator mapIter = mcParticleToPfoMap.find(pDaughterMCParticle);
175 if (mcParticleToPfoMap.end() == mapIter)
204 return STATUS_CODE_SUCCESS;
Header file for the cheating neutrino creation algorithm class.
Header file for the lar monte carlo particle helper helper class.
Header file for the pfo helper class.
#define PANDORA_THROW_RESULT_IF(StatusCode1, Operator, Command)
#define PANDORA_RETURN_RESULT_IF_AND_IF(StatusCode1, StatusCode2, Operator, Command)
#define PANDORA_RETURN_RESULT_IF(StatusCode1, Operator, Command)
static pandora::StatusCode ReplaceCurrentList(const pandora::Algorithm &algorithm, const std::string &newListName)
Replace the current list with a pre-saved list; use this new list as a permanent replacement for the ...
static pandora::StatusCode AddToPfo(const pandora::Algorithm &algorithm, const pandora::ParticleFlowObject *const pPfo, const T *const pT)
Add a cluster to a particle flow object.
static pandora::StatusCode CreateTemporaryListAndSetCurrent(const pandora::Algorithm &algorithm, const T *&pT, std::string &temporaryListName)
Create a temporary list and set it to be the current list, enabling object creation.
static pandora::StatusCode GetCurrentList(const pandora::Algorithm &algorithm, const T *&pT)
Get the current list.
static pandora::StatusCode SetPfoParentDaughterRelationship(const pandora::Algorithm &algorithm, const pandora::ParticleFlowObject *const pParentPfo, const pandora::ParticleFlowObject *const pDaughterPfo)
Set parent-daughter particle flow object relationship.
static pandora::StatusCode GetList(const pandora::Algorithm &algorithm, const std::string &listName, const T *&pT)
Get a named list.
static const pandora::PandoraSettings * GetSettings(const pandora::Algorithm &algorithm)
Get the pandora settings instance.
pandora::StringVector m_daughterPfoListNames
The list of daughter pfo list names.
std::string m_mcParticleListName
The name of the three d mc particle list name.
void GetMCParticleToDaughterPfoMap(MCParticleToPfoMap &mcParticleToPfoMap) const
Extract candidate daughter pfos from external lists and populate a map from main mc particle (or prim...
void CreatePfoHierarchy(const pandora::MCParticle *const pParentMCParticle, const pandora::ParticleFlowObject *const pParentPfo, const MCParticleToPfoMap &mcParticleToPfoMap) const
Use information from mc particles and the mc particle to pfo map to fully-reconstruct the daughter pf...
void AddNeutrinoVertex(const pandora::MCParticle *const pMCNeutrino, const pandora::ParticleFlowObject *const pNeutrinoPfo) const
Extract reconstructed vertex from external list, check its position agrees with mc neutrino,...
void GetMCNeutrinoVector(pandora::MCParticleVector &mcNeutrinoVector) const
Get the mc neutrino vector.
std::string m_vertexListName
The name of the neutrino vertex list.
pandora::StatusCode Run()
Run the algorithm.
std::string m_neutrinoPfoListName
The name of the neutrino pfo list.
bool m_collapseToPrimaryMCParticles
Whether to collapse mc particle hierarchies to primary particles.
CheatingNeutrinoCreationAlgorithm()
Default constructor.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
Read the algorithm settings.
void CreateAndSaveNeutrinoPfo(const pandora::MCParticle *const pMCNeutrino, const pandora::ParticleFlowObject *&pNeutrinoPfo) const
Create and save a neutrino pfo with properties dictated by the mc neutrino.
float m_vertexTolerance
Tolerance, 3d displacement, allowed between reco neutrino vertex and mc neutrino endpoint.
std::unordered_map< const pandora::MCParticle *, const pandora::ParticleFlowObject * > MCParticleToPfoMap
static bool IsNeutrino(const pandora::MCParticle *const pMCParticle)
Whether a mc particle is a neutrino or antineutrino.
std::unordered_map< const pandora::MCParticle *, const pandora::MCParticle * > MCRelationMap
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.
static void GetTrueNeutrinos(const pandora::MCParticleList *const pMCParticleList, pandora::MCParticleVector &trueNeutrinos)
Get neutrino MC particles from an input MC particle list.
float GetEnergy() const
Get energy of mc particle, units GeV.
const MCParticleList & GetDaughterList() const
Get list of daughters of mc particle.
const CartesianVector & GetMomentum() const
Get momentum of mc particle, units GeV.
const CartesianVector & GetEndpoint() const
Get the endpoint of the mc particle, units mm.
int GetParticleId() const
Get the PDG code of the mc particle.
bool ShouldDisplayAlgorithmInfo() const
Whether to display algorithm information during processing.
ParticleFlowObject class.
int m_particleId
The particle flow object id (PDG code)
static float GetParticleMass(const int pdgCode)
Get the mass of a particle type.
static int GetParticleCharge(const int pdgCode)
Get the charge of a particle type.
StatusCodeException class.
VertexType GetVertexType() const
Get the vertex type.
const CartesianVector & GetPosition() const
Get the vertex position.
static StatusCode ReadVectorOfValues(const TiXmlHandle &xmlHandle, const std::string &xmlElementName, std::vector< T > &vector)
Read a vector of values from a (space separated) list in an xml element.
static StatusCode ReadValue(const TiXmlHandle &xmlHandle, const std::string &xmlElementName, T &t)
Read a value from an xml element.
MANAGED_CONTAINER< const MCParticle * > MCParticleList
std::vector< const MCParticle * > MCParticleVector
MANAGED_CONTAINER< const Vertex * > VertexList
StatusCode
The StatusCode enum.
MANAGED_CONTAINER< const ParticleFlowObject * > PfoList