22 const PfoList *pParentNuPfoList(
nullptr);
27 std::cout <<
"TestBeamParticleCreationAlgorithm: pfo list " <<
m_parentPfoListName <<
" unavailable." << std::endl;
29 return STATUS_CODE_SUCCESS;
34 for (
const Pfo *
const pNuPfo : *pParentNuPfoList)
39 neutrinoPfos.push_back(pNuPfo);
41 const Pfo *pTestBeamPfo(
nullptr);
42 CartesianVector testBeamStartVertex(std::numeric_limits<float>::max(), std::numeric_limits<float>::max(), std::numeric_limits<float>::max());
47 for (
const Pfo *
const pNuPfo : neutrinoPfos)
50 return STATUS_CODE_SUCCESS;
57 pTestBeamPfo =
nullptr;
58 testBeamStartVertex =
CartesianVector(std::numeric_limits<float>::max(), std::numeric_limits<float>::max(), std::numeric_limits<float>::max());
65 for (
const CaloHit *
const pCaloHit : collectedHits)
67 if (pCaloHit->GetPositionVector().GetZ() < testBeamStartVertex.
GetZ())
69 testBeamStartVertex = pCaloHit->GetPositionVector();
70 pTestBeamPfo = pNuDaughterPfo;
76 return STATUS_CODE_NOT_FOUND;
80 if (pNuDaughterPfo != pTestBeamPfo)
90 PandoraContentApi::ParticleFlowObject::Metadata pfoMetadata;
91 pfoMetadata.m_propertiesToAdd[
"IsTestBeam"] = 1.f;
92 pfoMetadata.m_propertiesToAdd[
"TestBeamScore"] =
94 pfoMetadata.m_particleId = (std::fabs(pTestBeamPfo->
GetParticleId()) == E_MINUS) ? E_MINUS : PI_PLUS;
97 return STATUS_CODE_SUCCESS;
103 const Pfo *
const pNuPfo,
const Pfo *
const pTestBeamPfo,
const CartesianVector &testBeamStartVertex)
const
113 std::cout <<
"TestBeamParticleCreationAlgorithm::SetupTestBeamVertex - Test beam particle has no initial vertex" << std::endl;
117 std::string vertexListName;
121 PandoraContentApi::Vertex::Parameters parameters;
122 parameters.m_position = testBeamStartVertex;
125 const Vertex *pTestBeamStartVertex(
nullptr);
126 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::Vertex::Create(*
this, parameters, pTestBeamStartVertex));
140 std::cout <<
"TestBeamParticleCreationAlgorithm::SetupTestBeamVertex - Cannot transfer interaction vertex to test beam particle" << std::endl;
144 return STATUS_CODE_SUCCESS;
161 return STATUS_CODE_SUCCESS;
Header file for the pfo helper class.
#define PANDORA_THROW_RESULT_IF(StatusCode1, Operator, Command)
#define PANDORA_RETURN_RESULT_IF(StatusCode1, Operator, Command)
Header file for the test beam particle creation algorithm class.
static pandora::StatusCode SaveList(const pandora::Algorithm &algorithm, const T &t, const std::string &newListName)
Save a provided input object list under a new name.
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 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 RemoveFromPfo(const pandora::Algorithm &algorithm, const pandora::ParticleFlowObject *const pPfo, const T *const pT)
Remove a cluster from a particle flow object. Note this function will not remove the final object (tr...
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.
static bool IsTrack(const pandora::ParticleFlowObject *const pPfo)
Return track flag based on Pfo Particle ID.
static bool IsNeutrino(const pandora::ParticleFlowObject *const pPfo)
Whether a pfo is a neutrino or (antineutrino)
static void GetCaloHits(const pandora::PfoList &pfoList, const pandora::HitType &hitType, pandora::CaloHitList &caloHitList)
Get a list of calo hits of a particular hit type from a list of pfos.
static const pandora::Vertex * GetVertex(const pandora::ParticleFlowObject *const pPfo)
Get the pfo vertex.
std::string m_parentVertexListName
The parent vertex list name.
std::string m_daughterVertexListName
The daughter vertex list name.
std::string m_showerPfoListName
The shower pfo list name.
std::string m_trackPfoListName
The track pfo list name.
pandora::StatusCode Run()
Run the algorithm.
pandora::StatusCode SetupTestBeamPfo(const pandora::Pfo *const pNuPfo, const pandora::Pfo *&pTestBeamPfo, pandora::CartesianVector &testBeamStartVertex) const
Set up the test beam pfo.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
Read the algorithm settings.
pandora::StatusCode SetupTestBeamVertex(const pandora::Pfo *const pNuPfo, const pandora::Pfo *const pTestBeamPfo, const pandora::CartesianVector &testBeamStartVertex) const
Set up the test beam vertex.
std::string m_parentPfoListName
The parent pfo list name.
float GetZ() const
Get the cartesian z coordinate.
bool ShouldDisplayAlgorithmInfo() const
Whether to display algorithm information during processing.
ParticleFlowObject class.
const PropertiesMap & GetPropertiesMap() const
Get the map from registered property name to floating point property value.
const PfoList & GetDaughterPfoList() const
Get the daughter pfo list.
StatusCode AlterMetadata(const object_creation::ParticleFlowObject::Metadata &metadata)
Alter particle flow object metadata parameters.
int GetParticleId() const
Get the particle flow object id (PDG code)
StatusCodeException class.
static StatusCode ReadValue(const TiXmlHandle &xmlHandle, const std::string &xmlElementName, T &t)
Read a value from an xml element.
MANAGED_CONTAINER< const CaloHit * > CaloHitList
MANAGED_CONTAINER< const Vertex * > VertexList
StatusCode
The StatusCode enum.
MANAGED_CONTAINER< const ParticleFlowObject * > PfoList