LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
lar_content::CheatingEventSlicingTool Class Reference

CheatingEventSlicingTool class. More...

#include "CheatingEventSlicingTool.h"

Inheritance diagram for lar_content::CheatingEventSlicingTool:
lar_content::EventSlicingBaseTool

Public Member Functions

void RunSlicing (const pandora::Algorithm *const pAlgorithm, const HitTypeToNameMap &caloHitListNames, const HitTypeToNameMap &clusterListNames, SliceList &sliceList)
 Run the slicing tool. More...
 

Private Types

typedef std::unordered_map< const pandora::MCParticle *, SliceMCParticleToSliceMap
 

Private Member Functions

pandora::StatusCode ReadSettings (const pandora::TiXmlHandle xmlHandle)
 
void InitializeMCParticleToSliceMap (const pandora::Algorithm *const pAlgorithm, const HitTypeToNameMap &caloHitListNames, MCParticleToSliceMap &mcParticleToSliceMap) const
 Initialize the map from parent mc particles to slice objects. More...
 
void FillSlices (const pandora::Algorithm *const pAlgorithm, const pandora::HitType hitType, const HitTypeToNameMap &caloHitListNames, MCParticleToSliceMap &mcParticleToSliceMap) const
 Fill slices using hits from a specified view. More...
 

Detailed Description

CheatingEventSlicingTool class.

Definition at line 21 of file CheatingEventSlicingTool.h.

Member Typedef Documentation

typedef std::unordered_map<const pandora::MCParticle *, Slice> lar_content::CheatingEventSlicingTool::MCParticleToSliceMap
private

Definition at line 30 of file CheatingEventSlicingTool.h.

Member Function Documentation

void lar_content::CheatingEventSlicingTool::FillSlices ( const pandora::Algorithm *const  pAlgorithm,
const pandora::HitType  hitType,
const HitTypeToNameMap caloHitListNames,
MCParticleToSliceMap mcParticleToSliceMap 
) const
private

Fill slices using hits from a specified view.

Parameters
pAlgorithmaddress of the calling algorithm
hitTypethe hit type (i.e. view)
caloHitListNamesthe hit type to calo hit list name map
mcParticleToSliceMapto receive the parent mc particle to slice map

Definition at line 82 of file CheatingEventSlicingTool.cc.

References lar_content::Slice::m_caloHitListU, lar_content::Slice::m_caloHitListV, and lar_content::Slice::m_caloHitListW.

84 {
85  if ((TPC_VIEW_U != hitType) && (TPC_VIEW_V != hitType) && (TPC_VIEW_W != hitType))
86  throw StatusCodeException(STATUS_CODE_INVALID_PARAMETER);
87 
88  const CaloHitList *pCaloHitList(nullptr);
89  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::GetList(*pAlgorithm, caloHitListNames.at(hitType), pCaloHitList));
90 
91  for (const CaloHit *const pCaloHit : *pCaloHitList)
92  {
93  try
94  {
95  const MCParticle *const pMainMCParticle(MCParticleHelper::GetMainMCParticle(pCaloHit));
96  const MCParticle *const pParentMCParticle(LArMCParticleHelper::GetParentMCParticle(pMainMCParticle));
97 
98  MCParticleToSliceMap::iterator mapIter = mcParticleToSliceMap.find(pParentMCParticle);
99 
100  if (mcParticleToSliceMap.end() == mapIter)
101  throw StatusCodeException(STATUS_CODE_FAILURE);
102 
103  Slice &slice(mapIter->second);
104  CaloHitList &caloHitList((TPC_VIEW_U == hitType) ? slice.m_caloHitListU
105  : (TPC_VIEW_V == hitType) ? slice.m_caloHitListV
106  : slice.m_caloHitListW);
107  caloHitList.push_back(pCaloHit);
108  }
109  catch (const StatusCodeException &statusCodeException)
110  {
111  if (STATUS_CODE_FAILURE == statusCodeException.GetStatusCode())
112  throw statusCodeException;
113  }
114  }
115 }
intermediate_table::iterator iterator
static const pandora::MCParticle * GetParentMCParticle(const pandora::MCParticle *const pMCParticle)
Get the parent mc particle.
void lar_content::CheatingEventSlicingTool::InitializeMCParticleToSliceMap ( const pandora::Algorithm *const  pAlgorithm,
const HitTypeToNameMap caloHitListNames,
MCParticleToSliceMap mcParticleToSliceMap 
) const
private

Initialize the map from parent mc particles to slice objects.

Parameters
pAlgorithmaddress of the calling algorithm
caloHitListNamesthe hit type to calo hit list name map
mcParticleToSliceMapto receive the parent mc particle to slice map

Definition at line 51 of file CheatingEventSlicingTool.cc.

53 {
54  for (const auto &mapEntry : caloHitListNames)
55  {
56  const CaloHitList *pCaloHitList(nullptr);
57  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::GetList(*pAlgorithm, mapEntry.second, pCaloHitList));
58 
59  for (const CaloHit *const pCaloHit : *pCaloHitList)
60  {
61  MCParticleVector mcParticleVector;
62  for (const auto &weightMapEntry : pCaloHit->GetMCParticleWeightMap())
63  mcParticleVector.push_back(weightMapEntry.first);
64  std::sort(mcParticleVector.begin(), mcParticleVector.end(), LArMCParticleHelper::SortByMomentum);
65 
66  for (const MCParticle *const pMCParticle : mcParticleVector)
67  {
68  const MCParticle *const pParentMCParticle(LArMCParticleHelper::GetParentMCParticle(pMCParticle));
69 
70  if (mcParticleToSliceMap.count(pParentMCParticle))
71  continue;
72 
73  if (!mcParticleToSliceMap.insert(MCParticleToSliceMap::value_type(pParentMCParticle, Slice())).second)
74  throw StatusCodeException(STATUS_CODE_FAILURE);
75  }
76  }
77  }
78 }
static bool SortByMomentum(const pandora::MCParticle *const pLhs, const pandora::MCParticle *const pRhs)
Sort mc particles by their momentum.
std::vector< art::Ptr< simb::MCParticle > > MCParticleVector
static const pandora::MCParticle * GetParentMCParticle(const pandora::MCParticle *const pMCParticle)
Get the parent mc particle.
StatusCode lar_content::CheatingEventSlicingTool::ReadSettings ( const pandora::TiXmlHandle  xmlHandle)
private

Definition at line 119 of file CheatingEventSlicingTool.cc.

120 {
121  return STATUS_CODE_SUCCESS;
122 }
void lar_content::CheatingEventSlicingTool::RunSlicing ( const pandora::Algorithm *const  pAlgorithm,
const HitTypeToNameMap caloHitListNames,
const HitTypeToNameMap clusterListNames,
SliceList sliceList 
)
virtual

Run the slicing tool.

Parameters
pAlgorithmaddress of the calling algorithm
caloHitListNamesthe hit type to calo hit list name map
clusterListNamesthe hit type to cluster list name map
sliceListto receive the populated slice list

Implements lar_content::EventSlicingBaseTool.

Definition at line 22 of file CheatingEventSlicingTool.cc.

24 {
25  if (PandoraContentApi::GetSettings(*pAlgorithm)->ShouldDisplayAlgorithmInfo())
26  std::cout << "----> Running Algorithm Tool: " << this->GetInstanceName() << ", " << this->GetType() << std::endl;
27 
28  MCParticleToSliceMap mcParticleToSliceMap;
29  this->InitializeMCParticleToSliceMap(pAlgorithm, caloHitListNames, mcParticleToSliceMap);
30 
31  this->FillSlices(pAlgorithm, TPC_VIEW_U, caloHitListNames, mcParticleToSliceMap);
32  this->FillSlices(pAlgorithm, TPC_VIEW_V, caloHitListNames, mcParticleToSliceMap);
33  this->FillSlices(pAlgorithm, TPC_VIEW_W, caloHitListNames, mcParticleToSliceMap);
34 
35  MCParticleVector mcParticleVector;
36  for (const auto &mapEntry : mcParticleToSliceMap)
37  mcParticleVector.push_back(mapEntry.first);
38  std::sort(mcParticleVector.begin(), mcParticleVector.end(), LArMCParticleHelper::SortByMomentum);
39 
40  for (const MCParticle *const pMCParticle : mcParticleVector)
41  {
42  const Slice &slice(mcParticleToSliceMap.at(pMCParticle));
43 
44  if (!slice.m_caloHitListU.empty() || !slice.m_caloHitListV.empty() || !slice.m_caloHitListW.empty())
45  sliceList.push_back(slice);
46  }
47 }
std::unordered_map< const pandora::MCParticle *, Slice > MCParticleToSliceMap
void InitializeMCParticleToSliceMap(const pandora::Algorithm *const pAlgorithm, const HitTypeToNameMap &caloHitListNames, MCParticleToSliceMap &mcParticleToSliceMap) const
Initialize the map from parent mc particles to slice objects.
static bool SortByMomentum(const pandora::MCParticle *const pLhs, const pandora::MCParticle *const pRhs)
Sort mc particles by their momentum.
std::vector< art::Ptr< simb::MCParticle > > MCParticleVector
void FillSlices(const pandora::Algorithm *const pAlgorithm, const pandora::HitType hitType, const HitTypeToNameMap &caloHitListNames, MCParticleToSliceMap &mcParticleToSliceMap) const
Fill slices using hits from a specified view.

The documentation for this class was generated from the following files: