LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
CheatingCosmicRayIdentificationAlg.cc
Go to the documentation of this file.
1 
9 #include "Pandora/AlgorithmHeaders.h"
10 
13 
16 
17 using namespace pandora;
18 
19 namespace lar_content
20 {
21 
22 CheatingCosmicRayIdentificationAlg::CheatingCosmicRayIdentificationAlg() :
23  m_maxNeutrinoFraction(0.5f)
24 {
25 }
26 
27 //------------------------------------------------------------------------------------------------------------------------------------------
28 
30 {
31  const PfoList *pPfoList(nullptr);
32  PANDORA_RETURN_RESULT_IF_AND_IF(
33  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_INITIALIZED, !=, PandoraContentApi::GetList(*this, m_inputPfoListName, pPfoList));
34 
35  if (!pPfoList)
36  {
37  if (PandoraContentApi::GetSettings(*this)->ShouldDisplayAlgorithmInfo())
38  std::cout << "CheatingCosmicRayIdentificationAlg: pfo list " << m_inputPfoListName << " unavailable." << std::endl;
39 
40  return STATUS_CODE_SUCCESS;
41  }
42 
43  PfoList outputPfoList, outputDaughterPfoList;
44 
45  for (const ParticleFlowObject *const pPfo : *pPfoList)
46  {
47  if (!pPfo->GetParentPfoList().empty())
48  continue;
49 
50  PfoList downstreamPfos;
51  LArPfoHelper::GetAllDownstreamPfos(pPfo, downstreamPfos);
52 
53  float thisNeutrinoWeight(0.f), thisTotalWeight(0.f);
54  CheatingSliceIdBaseTool::GetTargetParticleWeight(&downstreamPfos, thisNeutrinoWeight, thisTotalWeight, LArMCParticleHelper::IsNeutrino);
55 
56  if ((thisTotalWeight < std::numeric_limits<float>::epsilon()) || ((thisNeutrinoWeight / thisTotalWeight) < m_maxNeutrinoFraction))
57  outputPfoList.push_back(pPfo);
58  }
59 
60  if (!outputPfoList.empty())
61  {
62  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::SaveList(*this, m_inputPfoListName, m_outputPfoListName, outputPfoList));
63 
64  if (!outputDaughterPfoList.empty())
65  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=,
66  PandoraContentApi::SaveList(*this, m_inputDaughterPfoListName, m_outputDaughterPfoListName, outputDaughterPfoList));
67  }
68 
69  return STATUS_CODE_SUCCESS;
70 }
71 
72 //------------------------------------------------------------------------------------------------------------------------------------------
73 
74 StatusCode CheatingCosmicRayIdentificationAlg::ReadSettings(const TiXmlHandle xmlHandle)
75 {
76  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, XmlHelper::ReadValue(xmlHandle, "InputPfoListName", m_inputPfoListName));
77 
78  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, XmlHelper::ReadValue(xmlHandle, "OutputPfoListName", m_outputPfoListName));
79 
81  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
82  XmlHelper::ReadValue(xmlHandle, "InputDaughterPfoListName", m_inputDaughterPfoListName));
83 
85  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
86  XmlHelper::ReadValue(xmlHandle, "OutputDaughterPfoListName", m_outputDaughterPfoListName));
87 
88  PANDORA_RETURN_RESULT_IF_AND_IF(
89  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MaxNeutrinoFraction", m_maxNeutrinoFraction));
90 
91  return STATUS_CODE_SUCCESS;
92 }
93 
94 } // namespace lar_content
Header file for the pfo helper class.
Header file for the cosmic ray identification cheater class.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
Header file for the cheating slice id base tool class.
std::string m_inputDaughterPfoListName
The input daughter pfo list name (if not specified, will assume same as main input list) ...
TFile f
Definition: plotHisto.C:6
std::string m_outputDaughterPfoListName
The output daughter pfo list name (if not specified, will assume same as main output list) ...
float m_maxNeutrinoFraction
The maximum true neutrino fraction in a particle to be labelled as a cosmic ray.
Header file for the lar monte carlo particle helper helper class.
static void GetTargetParticleWeight(const pandora::PfoList *const pPfoList, float &targetParticleWeight, float &totalWeight, std::function< bool(const pandora::MCParticle *const)> fCriteria)
Get the target particle weight in a list of pfos.
static void GetAllDownstreamPfos(const pandora::PfoList &inputPfoList, pandora::PfoList &outputPfoList)
Get a flat list of all pfos, recursively, of all daughters associated with those pfos in an input lis...
static bool IsNeutrino(const pandora::MCParticle *const pMCParticle)
Whether a mc particle is a neutrino or antineutrino.