LArSoft  v07_13_02
Liquid Argon Software toolkit - http://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(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_INITIALIZED, !=, PandoraContentApi::GetList(*this, m_inputPfoListName, pPfoList));
33 
34  if (!pPfoList)
35  {
36  if (PandoraContentApi::GetSettings(*this)->ShouldDisplayAlgorithmInfo())
37  std::cout << "CheatingCosmicRayIdentificationAlg: pfo list " << m_inputPfoListName << " unavailable." << std::endl;
38 
39  return STATUS_CODE_SUCCESS;
40  }
41 
42  PfoList outputPfoList, outputDaughterPfoList;
43 
44  for (const ParticleFlowObject *const pPfo : *pPfoList)
45  {
46  if (!pPfo->GetParentPfoList().empty())
47  continue;
48 
49  PfoList downstreamPfos;
50  LArPfoHelper::GetAllDownstreamPfos(pPfo, downstreamPfos);
51 
52  float thisNeutrinoWeight(0.f), thisTotalWeight(0.f);
53  CheatingSliceIdBaseTool::GetTargetParticleWeight(&downstreamPfos, thisNeutrinoWeight, thisTotalWeight, LArMCParticleHelper::IsNeutrino);
54 
55  if ((thisTotalWeight < std::numeric_limits<float>::epsilon()) || ((thisNeutrinoWeight / thisTotalWeight) < m_maxNeutrinoFraction))
56  outputPfoList.push_back(pPfo);
57  }
58 
59  if (!outputPfoList.empty())
60  {
61  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::SaveList(*this, m_inputPfoListName, m_outputPfoListName, outputPfoList));
62 
63  if (!outputDaughterPfoList.empty())
64  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::SaveList(*this, m_inputDaughterPfoListName, m_outputDaughterPfoListName, outputDaughterPfoList));
65  }
66 
67  return STATUS_CODE_SUCCESS;
68 }
69 
70 //------------------------------------------------------------------------------------------------------------------------------------------
71 
72 StatusCode CheatingCosmicRayIdentificationAlg::ReadSettings(const TiXmlHandle xmlHandle)
73 {
74  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, XmlHelper::ReadValue(xmlHandle,
75  "InputPfoListName", m_inputPfoListName));
76 
77  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, XmlHelper::ReadValue(xmlHandle,
78  "OutputPfoListName", m_outputPfoListName));
79 
81  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
82  "InputDaughterPfoListName", m_inputDaughterPfoListName));
83 
85  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
86  "OutputDaughterPfoListName", m_outputDaughterPfoListName));
87 
88  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
89  "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.