LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
SimpleNeutrinoIdTool.cc
Go to the documentation of this file.
1 
9 #include "Pandora/AlgorithmHeaders.h"
10 
12 
13 using namespace pandora;
14 
15 namespace lar_content
16 {
17 
18 SimpleNeutrinoIdTool::SimpleNeutrinoIdTool() :
19  m_selectAllNeutrinos(true),
20  m_selectOnlyFirstSliceNeutrinos(false)
21 {
22 }
23 
24 //------------------------------------------------------------------------------------------------------------------------------------------
25 
26 void SimpleNeutrinoIdTool::SelectOutputPfos(const Algorithm *const pAlgorithm, const SliceHypotheses &nuSliceHypotheses,
27  const SliceHypotheses &crSliceHypotheses, PfoList &selectedPfos)
28 {
29  if (nuSliceHypotheses.size() != crSliceHypotheses.size())
30  throw StatusCodeException(STATUS_CODE_INVALID_PARAMETER);
31 
32  for (unsigned int sliceIndex = 0, nSlices = nuSliceHypotheses.size(); sliceIndex < nSlices; ++sliceIndex)
33  {
34  const PfoList &sliceOutput((m_selectAllNeutrinos || (m_selectOnlyFirstSliceNeutrinos && (0 == sliceIndex)))
35  ? nuSliceHypotheses.at(sliceIndex)
36  : crSliceHypotheses.at(sliceIndex));
37 
38  const float score(m_selectAllNeutrinos || (m_selectOnlyFirstSliceNeutrinos && (0 == sliceIndex)) ? 1.f : -1.f);
39 
40  for (const ParticleFlowObject *const pPfo : crSliceHypotheses.at(sliceIndex))
41  {
42  object_creation::ParticleFlowObject::Metadata metadata;
43  metadata.m_propertiesToAdd["NuScore"] = score;
44  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::ParticleFlowObject::AlterMetadata(*pAlgorithm, pPfo, metadata));
45  }
46 
47  for (const ParticleFlowObject *const pPfo : nuSliceHypotheses.at(sliceIndex))
48  {
49  object_creation::ParticleFlowObject::Metadata metadata;
50  metadata.m_propertiesToAdd["NuScore"] = score;
51  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::ParticleFlowObject::AlterMetadata(*pAlgorithm, pPfo, metadata));
52  }
53 
54  selectedPfos.insert(selectedPfos.end(), sliceOutput.begin(), sliceOutput.end());
55  }
56 }
57 
58 //------------------------------------------------------------------------------------------------------------------------------------------
59 
60 StatusCode SimpleNeutrinoIdTool::ReadSettings(const TiXmlHandle xmlHandle)
61 {
62  PANDORA_RETURN_RESULT_IF_AND_IF(
63  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "SelectAllNeutrinos", m_selectAllNeutrinos));
64 
65  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
66  XmlHelper::ReadValue(xmlHandle, "SelectOnlyFirstSliceNeutrinos", m_selectOnlyFirstSliceNeutrinos));
67 
69  {
70  std::cout << "SimpleNeutrinoIdTool::ReadSettings - exactly one of SelectAllNeutrinos and SelectOnlyFirstSliceNeutrinos must be true"
71  << std::endl;
72  return STATUS_CODE_INVALID_PARAMETER;
73  }
74 
75  return STATUS_CODE_SUCCESS;
76 }
77 
78 } // namespace lar_content
std::vector< pandora::PfoList > SliceHypotheses
TFile f
Definition: plotHisto.C:6
bool m_selectOnlyFirstSliceNeutrinos
First approach: select first slice neutrinos, cosmics for all subsequent slices.
bool m_selectAllNeutrinos
First approach: select all neutrinos, as opposed to selecting all cosmics.
Header file for the neutrino id tool class.
void SelectOutputPfos(const pandora::Algorithm *const pAlgorithm, const SliceHypotheses &nuSliceHypotheses, const SliceHypotheses &crSliceHypotheses, pandora::PfoList &selectedPfos)
Select which reconstruction hypotheses to use; neutrino outcomes or cosmic-ray muon outcomes for each...
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)