LArSoft  v06_85_00
Liquid Argon Software toolkit - http://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, const SliceHypotheses &crSliceHypotheses, PfoList &selectedPfos)
27 {
28  if (nuSliceHypotheses.size() != crSliceHypotheses.size())
29  throw StatusCodeException(STATUS_CODE_INVALID_PARAMETER);
30 
31  for (unsigned int sliceIndex = 0, nSlices = nuSliceHypotheses.size(); sliceIndex < nSlices; ++sliceIndex)
32  {
33  const PfoList &sliceOutput((m_selectAllNeutrinos || (m_selectOnlyFirstSliceNeutrinos && (0 == sliceIndex))) ?
34  nuSliceHypotheses.at(sliceIndex) : crSliceHypotheses.at(sliceIndex));
35 
36  const float score(m_selectAllNeutrinos || (m_selectOnlyFirstSliceNeutrinos && (0 == sliceIndex)) ? 1.f : -1.f);
37 
38  for (const ParticleFlowObject *const pPfo : crSliceHypotheses.at(sliceIndex))
39  {
40  object_creation::ParticleFlowObject::Metadata metadata;
41  metadata.m_propertiesToAdd["NuScore"] = score;
42  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::ParticleFlowObject::AlterMetadata(*pAlgorithm, pPfo, metadata));
43  }
44 
45  for (const ParticleFlowObject *const pPfo : nuSliceHypotheses.at(sliceIndex))
46  {
47  object_creation::ParticleFlowObject::Metadata metadata;
48  metadata.m_propertiesToAdd["NuScore"] = score;
49  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::ParticleFlowObject::AlterMetadata(*pAlgorithm, pPfo, metadata));
50  }
51 
52  selectedPfos.insert(selectedPfos.end(), sliceOutput.begin(), sliceOutput.end());
53  }
54 }
55 
56 //------------------------------------------------------------------------------------------------------------------------------------------
57 
58 StatusCode SimpleNeutrinoIdTool::ReadSettings(const TiXmlHandle xmlHandle)
59 {
60  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
61  "SelectAllNeutrinos", m_selectAllNeutrinos));
62 
63  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
64  "SelectOnlyFirstSliceNeutrinos", m_selectOnlyFirstSliceNeutrinos));
65 
67  {
68  std::cout << "SimpleNeutrinoIdTool::ReadSettings - exactly one of SelectAllNeutrinos and SelectOnlyFirstSliceNeutrinos must be true" << std::endl;
69  return STATUS_CODE_INVALID_PARAMETER;
70  }
71 
72  return STATUS_CODE_SUCCESS;
73 }
74 
75 } // namespace lar_content
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.
std::vector< pandora::PfoList > SliceHypotheses
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)