Create specialised Pfo from an generic input Pfo.
58 LArShowerPfoFactory pfoFactory;
59 LArShowerPfoParameters pfoParameters;
61 pfoParameters.m_charge = PdgTable::GetParticleCharge(pfoParameters.m_particleId.Get());
62 pfoParameters.m_mass = PdgTable::GetParticleMass(pfoParameters.m_particleId.Get());
63 pfoParameters.m_energy = 0.f;
64 pfoParameters.m_momentum = pInputPfo->GetMomentum();
65 pfoParameters.m_propertiesToAdd = pInputPfo->GetPropertiesMap();
66 pfoParameters.m_showerVertex = pInputVertex->GetPosition();
67 pfoParameters.m_showerCentroid = showerPCA.GetCentroid();
68 pfoParameters.m_showerDirection = showerPCA.GetPrimaryAxis();
69 pfoParameters.m_showerSecondaryVector = showerPCA.GetSecondaryAxis();
70 pfoParameters.m_showerTertiaryVector = showerPCA.GetTertiaryAxis();
71 pfoParameters.m_showerEigenValues = showerPCA.GetEigenValues();
72 pfoParameters.m_showerLength = showerPCA.GetAxisLengths();
73 pfoParameters.m_showerOpeningAngle =
74 (showerPCA.GetPrimaryLength() > 0.f ? std::atan(showerPCA.GetSecondaryLength() / showerPCA.GetPrimaryLength()) : 0.f);
76 PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::ParticleFlowObject::Create(*
this, pfoParameters, pOutputPfo, pfoFactory));
78 const LArShowerPfo *
const pLArPfo =
dynamic_cast<const LArShowerPfo *
>(pOutputPfo);
81 throw StatusCodeException(STATUS_CODE_FAILURE);
84 const Vertex *pOutputVertex =
nullptr;
87 vtxParameters.m_position = pInputVertex->GetPosition();
88 vtxParameters.m_vertexLabel = pInputVertex->GetVertexLabel();
89 vtxParameters.m_vertexType = pInputVertex->GetVertexType();
91 PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::Vertex::Create(*
this, vtxParameters, pOutputVertex));
92 PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::AddToPfo<Vertex>(*
this, pOutputPfo, pOutputVertex));
94 catch (StatusCodeException &statusCodeException)
96 if (STATUS_CODE_FAILURE == statusCodeException.GetStatusCode())
97 throw statusCodeException;
static LArShowerPCA GetPrincipalComponents(const pandora::CartesianPointVector &pointVector, const pandora::CartesianVector &vertexPosition)
Perform PCA analysis on a set of 3D points and return results.
static const pandora::Vertex * GetVertex(const pandora::ParticleFlowObject *const pPfo)
Get the pfo vertex.
static bool IsShower(const pandora::ParticleFlowObject *const pPfo)
Return shower flag based on Pfo Particle ID.
static bool IsNeutrino(const pandora::ParticleFlowObject *const pPfo)
Whether a pfo is a neutrino or (antineutrino)
fhicl::Table< sbnd::crt::CRTDetSimParams > Parameters
static bool IsFinalState(const pandora::ParticleFlowObject *const pPfo)
Whether a pfo is a primary parent particle.
static bool IsNeutrinoFinalState(const pandora::ParticleFlowObject *const pPfo)
Whether a pfo is a final-state particle from a neutrino (or antineutrino) interaction.