Public Member Functions | Private Types | Private Member Functions | List of all members
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 SlicingAlgorithm::HitTypeToNameMap &caloHitListNames, const SlicingAlgorithm::HitTypeToNameMap &clusterListNames, SlicingAlgorithm::SliceList &sliceList)
 Run the slicing tool. More...
 

Private Types

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

Private Member Functions

pandora::StatusCode ReadSettings (const pandora::TiXmlHandle xmlHandle)
 
void InitializeMCParticleToSliceMap (const pandora::Algorithm *const pAlgorithm, const SlicingAlgorithm::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 SlicingAlgorithm::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 *, SlicingAlgorithm::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 SlicingAlgorithm::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 86 of file CheatingEventSlicingTool.cc.

88 {
89  if ((TPC_VIEW_U != hitType) && (TPC_VIEW_V != hitType) && (TPC_VIEW_W != hitType))
90  throw StatusCodeException(STATUS_CODE_INVALID_PARAMETER);
91 
92  const CaloHitList *pCaloHitList(nullptr);
93  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::GetList(*pAlgorithm, caloHitListNames.at(hitType), pCaloHitList));
94 
95  for (const CaloHit *const pCaloHit : *pCaloHitList)
96  {
97  try
98  {
99  const MCParticle *const pMainMCParticle(MCParticleHelper::GetMainMCParticle(pCaloHit));
100  const MCParticle *const pParentMCParticle(LArMCParticleHelper::GetParentMCParticle(pMainMCParticle));
101 
102  MCParticleToSliceMap::iterator mapIter = mcParticleToSliceMap.find(pParentMCParticle);
103 
104  if (mcParticleToSliceMap.end() == mapIter)
105  throw StatusCodeException(STATUS_CODE_FAILURE);
106 
107  Slice &slice(mapIter->second);
108  CaloHitList &caloHitList((TPC_VIEW_U == hitType) ? slice.m_caloHitListU : (TPC_VIEW_V == hitType) ? slice.m_caloHitListV : slice.m_caloHitListW);
109  caloHitList.push_back(pCaloHit);
110  }
111  catch (const StatusCodeException &statusCodeException)
112  {
113  if (STATUS_CODE_FAILURE == statusCodeException.GetStatusCode())
114  throw statusCodeException;
115  }
116  }
117 }
intermediate_table::iterator iterator
SlicingAlgorithm::Slice Slice
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 SlicingAlgorithm::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 55 of file CheatingEventSlicingTool.cc.

57 {
58  for (const auto &mapEntry : caloHitListNames)
59  {
60  const CaloHitList *pCaloHitList(nullptr);
61  PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::GetList(*pAlgorithm, mapEntry.second, pCaloHitList));
62 
63  for (const CaloHit *const pCaloHit : *pCaloHitList)
64  {
65  MCParticleVector mcParticleVector;
66  for (const auto &weightMapEntry : pCaloHit->GetMCParticleWeightMap())
67  mcParticleVector.push_back(weightMapEntry.first);
68  std::sort(mcParticleVector.begin(), mcParticleVector.end(), LArMCParticleHelper::SortByMomentum);
69 
70  for (const MCParticle *const pMCParticle : mcParticleVector)
71  {
72  const MCParticle *const pParentMCParticle(LArMCParticleHelper::GetParentMCParticle(pMCParticle));
73 
74  if (mcParticleToSliceMap.count(pParentMCParticle))
75  continue;
76 
77  if (!mcParticleToSliceMap.insert(MCParticleToSliceMap::value_type(pParentMCParticle, Slice())).second)
78  throw StatusCodeException(STATUS_CODE_FAILURE);
79  }
80  }
81  }
82 }
SlicingAlgorithm::Slice Slice
std::vector< art::Ptr< simb::MCParticle > > MCParticleVector
static bool SortByMomentum(const pandora::MCParticle *const pLhs, const pandora::MCParticle *const pRhs)
Sort mc particles by their momentum.
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 121 of file CheatingEventSlicingTool.cc.

122 {
123  return STATUS_CODE_SUCCESS;
124 }
void lar_content::CheatingEventSlicingTool::RunSlicing ( const pandora::Algorithm *const  pAlgorithm,
const SlicingAlgorithm::HitTypeToNameMap caloHitListNames,
const SlicingAlgorithm::HitTypeToNameMap clusterListNames,
SlicingAlgorithm::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 26 of file CheatingEventSlicingTool.cc.

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

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