9 #include "Pandora/AlgorithmHeaders.h" 11 #include "Managers/GeometryManager.h" 25 TrackParticleBuildingAlgorithm::TrackParticleBuildingAlgorithm() :
26 m_slidingFitHalfWindow(20)
56 const LArTPC *
const pFirstLArTPC(this->GetPandora().GetGeometry()->GetLArTPCMap().
begin()->second);
57 const float layerPitch(pFirstLArTPC->GetWirePitchW());
63 if (trackStateVector.empty())
69 pfoParameters.m_particleId = (
LArPfoHelper::IsTrack(pInputPfo) ? pInputPfo->GetParticleId() : MU_MINUS);
70 pfoParameters.m_charge = PdgTable::GetParticleCharge(pfoParameters.m_particleId.Get());
71 pfoParameters.m_mass = PdgTable::GetParticleMass(pfoParameters.m_particleId.Get());
72 pfoParameters.m_energy = 0.f;
73 pfoParameters.m_momentum = pInputPfo->GetMomentum();
74 pfoParameters.m_propertiesToAdd = pInputPfo->GetPropertiesMap();
77 PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::ParticleFlowObject::Create(*
this, pfoParameters, pOutputPfo,
82 throw StatusCodeException(STATUS_CODE_FAILURE);
85 PandoraContentApi::ParticleFlowObject::Metadata pfodata;
87 PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::ParticleFlowObject::AlterMetadata(*
this, pOutputPfo, pfodata));
89 const Vertex *pOutputVertex(NULL);
91 PandoraContentApi::Vertex::Parameters vtxParameters;
93 vtxParameters.m_vertexLabel = pInputVertex->GetVertexLabel();
94 vtxParameters.m_vertexType = pInputVertex->GetVertexType();
96 PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::Vertex::Create(*
this, vtxParameters, pOutputVertex));
97 PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::AddToPfo(*
this, pOutputPfo, pOutputVertex));
99 catch (StatusCodeException &statusCodeException)
101 if (STATUS_CODE_FAILURE == statusCodeException.GetStatusCode())
102 throw statusCodeException;
110 PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
virtual pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
Header file for the pfo helper class.
unsigned int m_slidingFitHalfWindow
Header file for the lar pfo class.
static const pandora::Vertex * GetVertex(const pandora::ParticleFlowObject *const pPfo)
Get the pfo vertex.
static void GetSlidingFitTrajectory(const pandora::CartesianPointVector &pointVector, const pandora::CartesianVector &vertexPosition, const unsigned int layerWindow, const float layerPitch, LArTrackStateVector &trackStateVector, pandora::IntVector *const pIndexVector=nullptr)
Apply 3D sliding fit to a set of 3D points and return track trajectory.
const pandora::CartesianVector & GetVertexDirection() const
Get vertex direction.
static bool IsTrack(const pandora::ParticleFlowObject *const pPfo)
Return track flag based on Pfo Particle ID.
Header file for the 3D track building algorithm class.
LArTrackStateVector m_trackStateVector
Header file for the cluster helper class.
std::vector< evd::details::RawDigitInfo_t >::const_iterator begin(RawDigitCacheDataClass const &cache)
static bool IsNeutrino(const pandora::ParticleFlowObject *const pPfo)
Whether a pfo is a neutrino or (antineutrino)
void CreatePfo(const pandora::ParticleFlowObject *const pInputPfo, const pandora::ParticleFlowObject *&pOutputPfo) const
Create specialised Pfo from an generic input Pfo.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
static bool IsFinalState(const pandora::ParticleFlowObject *const pPfo)
Whether a pfo is a primary parent particle.
lar pfo object factory responsible for pfo creation
static bool IsNeutrinoFinalState(const pandora::ParticleFlowObject *const pPfo)
Whether a pfo is a final-state particle from a neutrino (or antineutrino) interaction.
std::vector< LArTrackState > LArTrackStateVector
const pandora::CartesianVector & GetVertexPosition() const
Get vertex position.