CheatingVertexCreationAlgorithm.cc
Go to the documentation of this file.
1 /**
2  * @file larpandoracontent/LArCheating/CheatingVertexCreationAlgorithm.cc
3  *
4  * @brief Implementation of the cheating vertex creation algorithm class.
5  *
6  * $Log: $
7  */
8 
9 #include "Pandora/AlgorithmHeaders.h"
10 
13 
15 
16 using namespace pandora;
17 
18 namespace lar_content
19 {
20 
21 CheatingVertexCreationAlgorithm::CheatingVertexCreationAlgorithm() : m_replaceCurrentVertexList(true), m_vertexXCorrection(0.f)
22 {
23 }
24 
25 //------------------------------------------------------------------------------------------------------------------------------------------
26 
28 {
29  const MCParticleList *pMCParticleList(nullptr);
30  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::GetCurrentList(*this, pMCParticleList));
31 
32  const VertexList *pVertexList(nullptr);
33  std::string temporaryListName;
34  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::CreateTemporaryListAndSetCurrent(*this, pVertexList, temporaryListName));
35 
36  for (const MCParticle *const pMCParticle : *pMCParticleList)
37  {
38  if (!LArMCParticleHelper::IsNeutrino(pMCParticle))
39  continue;
40 
41  PandoraContentApi::Vertex::Parameters parameters;
42  parameters.m_position = CartesianVector(
43  pMCParticle->GetEndpoint().GetX() + m_vertexXCorrection, pMCParticle->GetEndpoint().GetY(), pMCParticle->GetEndpoint().GetZ());
44  parameters.m_vertexLabel = VERTEX_INTERACTION;
45  parameters.m_vertexType = VERTEX_3D;
46 
47  const Vertex *pVertex(nullptr);
48  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::Vertex::Create(*this, parameters, pVertex));
49  }
50 
51  if (!pVertexList->empty())
52  {
53  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::SaveList<Vertex>(*this, m_outputVertexListName));
54 
56  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::ReplaceCurrentList<Vertex>(*this, m_outputVertexListName));
57  }
58 
59  return STATUS_CODE_SUCCESS;
60 }
61 
62 //------------------------------------------------------------------------------------------------------------------------------------------
63 
64 StatusCode CheatingVertexCreationAlgorithm::ReadSettings(const TiXmlHandle xmlHandle)
65 {
66  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, XmlHelper::ReadValue(xmlHandle, "OutputVertexListName", m_outputVertexListName));
67 
68  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
69  XmlHelper::ReadValue(xmlHandle, "ReplaceCurrentVertexList", m_replaceCurrentVertexList));
70 
71  PANDORA_RETURN_RESULT_IF_AND_IF(
72  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "VertexXCorrection", m_vertexXCorrection));
73 
74  return STATUS_CODE_SUCCESS;
75 }
76 
77 } // namespace lar_content
std::string string
Definition: nybbler.cc:12
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
float m_vertexXCorrection
The vertex x correction, added to reported mc neutrino endpoint x value, in cm.
Header file for the geometry helper class.
Header file for the cheating vertex creation algorithm class.
Header file for the lar monte carlo particle helper helper class.
bool m_replaceCurrentVertexList
Whether to replace the current vertex list with the output list.
std::string m_outputVertexListName
The name under which to save the output vertex list.
boost::graph_traits< ModuleGraph >::vertex_descriptor Vertex
Definition: ModuleGraph.h:25
std::list< Vertex > VertexList
Definition: DCEL.h:182
static bool IsNeutrino(const pandora::MCParticle *const pMCParticle)
Whether a mc particle is a neutrino or antineutrino.