Pandora
Pandora source code navigator
Loading...
Searching...
No Matches
CheatingBeamParticleIdTool.cc
Go to the documentation of this file.
1
10
12
15
16using namespace pandora;
17
18namespace lar_content
19{
20
22{
23}
24
25//------------------------------------------------------------------------------------------------------------------------------------------
26
28 const SliceHypotheses &testBeamSliceHypotheses, const SliceHypotheses &crSliceHypotheses, PfoList &selectedPfos)
29{
30 if (testBeamSliceHypotheses.size() != crSliceHypotheses.size())
31 throw StatusCodeException(STATUS_CODE_INVALID_PARAMETER);
32
33 for (unsigned int sliceIndex = 0, nSlices = testBeamSliceHypotheses.size(); sliceIndex < nSlices; ++sliceIndex)
34 {
35 float beamParticleWeight(0.f), totalWeight(0.f);
36 const PfoList &testBeamPfoList(testBeamSliceHypotheses.at(sliceIndex));
37
38 for (const Pfo *const pTestBeamPfo : testBeamPfoList)
39 {
40 if (!LArPfoHelper::IsTestBeam(pTestBeamPfo))
41 throw StatusCodeException(STATUS_CODE_INVALID_PARAMETER);
42
43 PfoList downstreamPfos;
44 LArPfoHelper::GetAllDownstreamPfos(pTestBeamPfo, downstreamPfos);
45
46 float thisBeamParticleWeight(0.f), thisTotalWeight(0.f);
47 CheatingSliceIdBaseTool::GetTargetParticleWeight(&downstreamPfos, thisBeamParticleWeight, thisTotalWeight, LArMCParticleHelper::IsBeamParticle);
48
49 beamParticleWeight += thisBeamParticleWeight;
50 totalWeight += thisTotalWeight;
51 }
52
53 const float beamWeightFraction(totalWeight < std::numeric_limits<float>::epsilon() ? 0.f : beamParticleWeight / totalWeight);
54
55 if (beamWeightFraction > m_minWeightFraction)
56 {
57 const PfoList &sliceOutput(testBeamSliceHypotheses.at(sliceIndex));
58 selectedPfos.insert(selectedPfos.end(), sliceOutput.begin(), sliceOutput.end());
59 }
60 else
61 {
62 const PfoList &sliceOutput(crSliceHypotheses.at(sliceIndex));
63 selectedPfos.insert(selectedPfos.end(), sliceOutput.begin(), sliceOutput.end());
64 }
65 }
66}
67
68//------------------------------------------------------------------------------------------------------------------------------------------
69
71{
72 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, XmlHelper::ReadValue(xmlHandle, "MinimumWeightFraction", m_minWeightFraction));
73
74 return STATUS_CODE_SUCCESS;
75}
76
77} // namespace lar_content
Grouping of header files for many classes of use in particle flow algorithms.
Header file for the cheating beam particle id tool class.
Header file for the lar monte carlo particle helper helper class.
Header file for the pfo helper class.
#define PANDORA_RETURN_RESULT_IF(StatusCode1, Operator, Command)
Definition StatusCodes.h:19
float m_minWeightFraction
The minimum weight fraction for identifying a slice as a beam particle.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
Read the algorithm settings.
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...
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 bool IsBeamParticle(const pandora::MCParticle *const pMCParticle)
Returns true if passed a primary beam MCParticle.
static bool IsTestBeam(const pandora::ParticleFlowObject *const pPfo)
Whether a pfo is a test beam particle.
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...
Algorithm class. Algorithm addresses are held only by the algorithm manager. They have a fully define...
Definition Algorithm.h:21
ParticleFlowObject class.
StatusCodeException class.
static StatusCode ReadValue(const TiXmlHandle &xmlHandle, const std::string &xmlElementName, T &t)
Read a value from an xml element.
Definition XmlHelper.h:136
std::vector< pandora::PfoList > SliceHypotheses
StatusCode
The StatusCode enum.
MANAGED_CONTAINER< const ParticleFlowObject * > PfoList