LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
NeutrinoCreationAlgorithm.cc
Go to the documentation of this file.
1 
9 #include "Pandora/AlgorithmHeaders.h"
10 
12 
14 
15 using namespace pandora;
16 
17 namespace lar_content
18 {
19 
20 //------------------------------------------------------------------------------------------------------------------------------------------
21 
22 NeutrinoCreationAlgorithm::NeutrinoCreationAlgorithm() :
23  m_forceSingleEmptyNeutrino(false)
24 {
25 }
26 
27 //------------------------------------------------------------------------------------------------------------------------------------------
28 
30 {
32  return this->ForceSingleEmptyNeutrino();
33 
34  const VertexList *pVertexList(nullptr);
35  PANDORA_RETURN_RESULT_IF_AND_IF(
36  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_INITIALIZED, !=, PandoraContentApi::GetList(*this, m_vertexListName, pVertexList));
37 
38  if (!pVertexList || pVertexList->empty())
39  {
40  if (PandoraContentApi::GetSettings(*this)->ShouldDisplayAlgorithmInfo())
41  std::cout << "NeutrinoCreationAlgorithm: unable to find vertex list " << m_vertexListName << std::endl;
42 
43  return STATUS_CODE_SUCCESS;
44  }
45 
46  std::string neutrinoPfoListName;
47  const PfoList *pNeutrinoPfoList(nullptr);
48  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::CreateTemporaryListAndSetCurrent(*this, pNeutrinoPfoList, neutrinoPfoListName));
49 
50  for (VertexList::const_iterator vIter = pVertexList->begin(), vIterEnd = pVertexList->end(); vIter != vIterEnd; ++vIter)
51  {
52  const Vertex *const pVertex = *vIter;
53 
54  if (VERTEX_3D != pVertex->GetVertexType())
55  throw StatusCodeException(STATUS_CODE_FAILURE);
56 
57  // ATTN Placeholder properties to be set by a later neutrino properties algorithm
58  PandoraContentApi::ParticleFlowObject::Parameters pfoParameters;
59  this->FillDefaultNeutrinoParameters(pfoParameters);
60  pfoParameters.m_vertexList.push_back(pVertex);
61 
62  const ParticleFlowObject *pNeutrinoPfo(nullptr);
63  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::ParticleFlowObject::Create(*this, pfoParameters, pNeutrinoPfo));
64  }
65 
66  if ((!pNeutrinoPfoList) || pNeutrinoPfoList->empty())
67  throw StatusCodeException(STATUS_CODE_FAILURE);
68 
69  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::SaveList<Pfo>(*this, m_neutrinoPfoListName));
70  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::ReplaceCurrentList<Pfo>(*this, m_neutrinoPfoListName));
71 
72  return STATUS_CODE_SUCCESS;
73 }
74 
75 //------------------------------------------------------------------------------------------------------------------------------------------
76 
78 {
79  std::string neutrinoPfoListName;
80  const PfoList *pNeutrinoPfoList(nullptr);
81  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::CreateTemporaryListAndSetCurrent(*this, pNeutrinoPfoList, neutrinoPfoListName));
82 
83  PandoraContentApi::ParticleFlowObject::Parameters pfoParameters;
84  this->FillDefaultNeutrinoParameters(pfoParameters);
85 
86  const ParticleFlowObject *pNeutrinoPfo(nullptr);
87  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::ParticleFlowObject::Create(*this, pfoParameters, pNeutrinoPfo));
88 
89  if ((!pNeutrinoPfoList) || pNeutrinoPfoList->empty())
90  throw StatusCodeException(STATUS_CODE_FAILURE);
91 
92  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::SaveList<Pfo>(*this, m_neutrinoPfoListName));
93  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::ReplaceCurrentList<Pfo>(*this, m_neutrinoPfoListName));
94 
95  return STATUS_CODE_SUCCESS;
96 }
97 
98 //------------------------------------------------------------------------------------------------------------------------------------------
99 
100 void NeutrinoCreationAlgorithm::FillDefaultNeutrinoParameters(PandoraContentApi::ParticleFlowObject::Parameters &pfoParameters) const
101 {
102  pfoParameters.m_particleId = NU_MU;
103  pfoParameters.m_charge = PdgTable::GetParticleCharge(pfoParameters.m_particleId.Get());
104  pfoParameters.m_mass = PdgTable::GetParticleMass(pfoParameters.m_particleId.Get());
105  pfoParameters.m_energy = 0.f;
106  pfoParameters.m_momentum = CartesianVector(0.f, 0.f, 0.f);
107  pfoParameters.m_propertiesToAdd["IsNeutrino"] = 1.f;
108 }
109 
110 //------------------------------------------------------------------------------------------------------------------------------------------
111 
112 StatusCode NeutrinoCreationAlgorithm::ReadSettings(const TiXmlHandle xmlHandle)
113 {
114  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, XmlHelper::ReadValue(xmlHandle, "InputVertexListName", m_vertexListName));
115 
116  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, XmlHelper::ReadValue(xmlHandle, "NeutrinoPfoListName", m_neutrinoPfoListName));
117 
118  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
119  XmlHelper::ReadValue(xmlHandle, "ForceSingleEmptyNeutrino", m_forceSingleEmptyNeutrino));
120 
121  return STATUS_CODE_SUCCESS;
122 }
123 
124 } // namespace lar_content
std::string m_vertexListName
The name of the neutrino vertex list.
bool m_forceSingleEmptyNeutrino
Whether to force creation of a single neutrino, with no vertex, regardless of number of input vertice...
intermediate_table::const_iterator const_iterator
TFile f
Definition: plotHisto.C:6
Header file for the neutrino creation algorithm class.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
Header file for the cluster helper class.
void FillDefaultNeutrinoParameters(PandoraContentApi::ParticleFlowObject::Parameters &pfoParameters) const
Fill provided pfo parameters with default/dummy values for later refinement.
std::string m_neutrinoPfoListName
The name of the neutrino pfo list.
boost::graph_traits< ModuleGraph >::vertex_descriptor Vertex
Definition: ModuleGraph.h:25
std::list< Vertex > VertexList
Definition: DCEL.h:169
pandora::StatusCode ForceSingleEmptyNeutrino() const
Force creation of a single neutrino, with no vertex, regardless of number of input vertices...