9 #include "Pandora/AlgorithmHeaders.h"    20 StatusCode TestBeamParticleCreationAlgorithm::Run()
    22     const PfoList *pParentNuPfoList(
nullptr);
    24     if (STATUS_CODE_SUCCESS != PandoraContentApi::GetList(*
this, m_parentPfoListName, pParentNuPfoList))
    26         if (PandoraContentApi::GetSettings(*this)->ShouldDisplayAlgorithmInfo())
    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);
    43         PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, this->SetupTestBeamPfo(pNuPfo, pTestBeamPfo, testBeamStartVertex));
    44         PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, this->SetupTestBeamVertex(pNuPfo, pTestBeamPfo, testBeamStartVertex));
    47     for (
const Pfo *
const pNuPfo : neutrinoPfos)
    48         PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::Delete<Pfo>(*
this, pNuPfo, m_parentPfoListName));
    50     return STATUS_CODE_SUCCESS;
    55 StatusCode TestBeamParticleCreationAlgorithm::SetupTestBeamPfo(
const Pfo *
const pNuPfo, 
const Pfo *&pTestBeamPfo, CartesianVector &testBeamStartVertex)
 const    57     pTestBeamPfo = 
nullptr;
    60     for (
const Pfo *
const pNuDaughterPfo : pNuPfo->GetDaughterPfoList())
    62         CaloHitList collectedHits;
    63         LArPfoHelper::GetCaloHits(pNuDaughterPfo, TPC_3D, collectedHits);
    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;
    78     for (
const Pfo *
const pNuDaughterPfo : pNuPfo->GetDaughterPfoList())
    80         if (pNuDaughterPfo != pTestBeamPfo)
    81             PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::SetPfoParentDaughterRelationship(*
this, pTestBeamPfo, pNuDaughterPfo));
    85     const std::string &originalListName(LArPfoHelper::IsTrack(pTestBeamPfo) ? m_trackPfoListName : m_showerPfoListName);
    86     PANDORA_RETURN_RESULT_IF(
    87         STATUS_CODE_SUCCESS, !=, PandoraContentApi::SaveList(*
this, originalListName, m_parentPfoListName, PfoList(1, pTestBeamPfo)));
    90     PandoraContentApi::ParticleFlowObject::Metadata pfoMetadata;
    91     pfoMetadata.m_propertiesToAdd[
"IsTestBeam"] = 1.f;
    92     pfoMetadata.m_propertiesToAdd[
"TestBeamScore"] =
    93         (pNuPfo->GetPropertiesMap().count(
"TestBeamScore")) ? pNuPfo->GetPropertiesMap().at(
"TestBeamScore") : 1.f;
    94     pfoMetadata.m_particleId = (std::fabs(pTestBeamPfo->GetParticleId()) == E_MINUS) ? E_MINUS : PI_PLUS;
    95     PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::ParticleFlowObject::AlterMetadata(*
this, pTestBeamPfo, pfoMetadata));
    97     return STATUS_CODE_SUCCESS;
   102 StatusCode TestBeamParticleCreationAlgorithm::SetupTestBeamVertex(
   103     const Pfo *
const pNuPfo, 
const Pfo *
const pTestBeamPfo, 
const CartesianVector &testBeamStartVertex)
 const   107         const Vertex *
const pInitialVertex(LArPfoHelper::GetVertex(pTestBeamPfo));
   108         PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::RemoveFromPfo(*
this, pTestBeamPfo, pInitialVertex));
   109         PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::Delete<Vertex>(*
this, pInitialVertex, m_daughterVertexListName));
   111     catch (
const StatusCodeException &)
   113         std::cout << 
"TestBeamParticleCreationAlgorithm::SetupTestBeamVertex - Test beam particle has no initial vertex" << 
std::endl;
   119     PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::CreateTemporaryListAndSetCurrent(*
this, pVertexList, vertexListName));
   121     PandoraContentApi::Vertex::Parameters parameters;
   122     parameters.m_position = testBeamStartVertex;
   123     parameters.m_vertexLabel = VERTEX_START;
   124     parameters.m_vertexType = VERTEX_3D;
   125     const Vertex *pTestBeamStartVertex(
nullptr);
   126     PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::Vertex::Create(*
this, parameters, pTestBeamStartVertex));
   127     PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::SaveList<Vertex>(*
this, m_parentVertexListName));
   128     PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::AddToPfo(*
this, pTestBeamPfo, pTestBeamStartVertex));
   133         const Vertex *
const pNuVertex(LArPfoHelper::GetVertex(pNuPfo));
   134         PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::RemoveFromPfo(*
this, pNuPfo, pNuVertex));
   135         PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::AddToPfo(*
this, pTestBeamPfo, pNuVertex));
   138     catch (
const StatusCodeException &)
   140         std::cout << 
"TestBeamParticleCreationAlgorithm::SetupTestBeamVertex - Cannot transfer interaction vertex to test beam particle" << 
std::endl;
   143     PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::ReplaceCurrentList<Vertex>(*
this, m_parentVertexListName));
   144     return STATUS_CODE_SUCCESS;
   149 StatusCode TestBeamParticleCreationAlgorithm::ReadSettings(
const TiXmlHandle xmlHandle)
   151     PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, XmlHelper::ReadValue(xmlHandle, 
"ParentPfoListName", m_parentPfoListName));
   153     PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, XmlHelper::ReadValue(xmlHandle, 
"TrackPfoListName", m_trackPfoListName));
   155     PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, XmlHelper::ReadValue(xmlHandle, 
"ShowerPfoListName", m_showerPfoListName));
   157     PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, XmlHelper::ReadValue(xmlHandle, 
"ParentVertexListName", m_parentVertexListName));
   159     PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, XmlHelper::ReadValue(xmlHandle, 
"DaughterVertexListName", m_daughterVertexListName));
   161     return STATUS_CODE_SUCCESS;
 
Header file for the pfo helper class. 
 
bool IsNeutrino(int pdgc)
 
static int max(int a, int b)
 
boost::graph_traits< ModuleGraph >::vertex_descriptor Vertex
 
Header file for the test beam particle creation algorithm class. 
 
std::list< Vertex > VertexList
 
QTextStream & endl(QTextStream &s)