9 #include "Pandora/AlgorithmHeaders.h"
26 void CheatingEventSlicingTool::RunSlicing(
const Algorithm *
const pAlgorithm,
const HitTypeToNameMap &caloHitListNames,
29 if (PandoraContentApi::GetSettings(*pAlgorithm)->ShouldDisplayAlgorithmInfo())
30 std::cout <<
"----> Running Algorithm Tool: " << this->GetInstanceName() <<
", " << this->GetType() << std::endl;
33 this->InitializeMCParticleToSliceMap(pAlgorithm, caloHitListNames, mcParticleToSliceMap);
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);
40 for (
const auto &mapEntry : mcParticleToSliceMap)
41 mcParticleVector.push_back(mapEntry.first);
42 std::sort(mcParticleVector.begin(), mcParticleVector.end(), LArMCParticleHelper::SortByMomentum);
44 for (
const MCParticle *
const pMCParticle : mcParticleVector)
46 const Slice &slice(mcParticleToSliceMap.at(pMCParticle));
48 if (!slice.m_caloHitListU.empty() || !slice.m_caloHitListV.empty() || !slice.m_caloHitListW.empty())
49 sliceList.push_back(slice);
55 void CheatingEventSlicingTool::InitializeMCParticleToSliceMap(
58 for (
const auto &mapEntry : caloHitListNames)
60 const CaloHitList *pCaloHitList(
nullptr);
61 PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::GetList(*pAlgorithm, mapEntry.second, pCaloHitList));
63 for (
const CaloHit *
const pCaloHit : *pCaloHitList)
66 for (
const auto &weightMapEntry : pCaloHit->GetMCParticleWeightMap())
67 mcParticleVector.push_back(weightMapEntry.first);
68 std::sort(mcParticleVector.begin(), mcParticleVector.end(), LArMCParticleHelper::SortByMomentum);
70 for (
const MCParticle *
const pMCParticle : mcParticleVector)
72 const MCParticle *
const pParentMCParticle(LArMCParticleHelper::GetParentMCParticle(pMCParticle));
74 if (mcParticleToSliceMap.count(pParentMCParticle))
77 if (!mcParticleToSliceMap.insert(MCParticleToSliceMap::value_type(pParentMCParticle,
Slice())).second)
78 throw StatusCodeException(STATUS_CODE_FAILURE);
86 void CheatingEventSlicingTool::FillSlices(
const Algorithm *
const pAlgorithm,
const HitType hitType,
89 if ((TPC_VIEW_U != hitType) && (TPC_VIEW_V != hitType) && (TPC_VIEW_W != hitType))
90 throw StatusCodeException(STATUS_CODE_INVALID_PARAMETER);
92 const CaloHitList *pCaloHitList(
nullptr);
93 PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::GetList(*pAlgorithm, caloHitListNames.at(hitType), pCaloHitList));
95 for (
const CaloHit *
const pCaloHit : *pCaloHitList)
99 const MCParticle *
const pMainMCParticle(MCParticleHelper::GetMainMCParticle(pCaloHit));
100 const MCParticle *
const pParentMCParticle(LArMCParticleHelper::GetParentMCParticle(pMainMCParticle));
102 MCParticleToSliceMap::iterator mapIter = mcParticleToSliceMap.find(pParentMCParticle);
104 if (mcParticleToSliceMap.end() == mapIter)
105 throw StatusCodeException(STATUS_CODE_FAILURE);
107 Slice &slice(mapIter->second);
109 caloHitList.push_back(pCaloHit);
111 catch (
const StatusCodeException &statusCodeException)
113 if (STATUS_CODE_FAILURE == statusCodeException.GetStatusCode())
114 throw statusCodeException;
121 StatusCode CheatingEventSlicingTool::ReadSettings(
const TiXmlHandle )
123 return STATUS_CODE_SUCCESS;
SlicingAlgorithm::Slice Slice
SlicingAlgorithm::SliceList SliceList
std::unordered_map< const pandora::MCParticle *, SlicingAlgorithm::Slice > MCParticleToSliceMap
Header file for the lar monte carlo particle helper helper class.
std::vector< art::Ptr< simb::MCParticle > > MCParticleVector
pandora::CaloHitList m_caloHitListU
The u calo hit list.
SlicingAlgorithm::HitTypeToNameMap HitTypeToNameMap
required by fuzzyCluster table::sbnd_g4_services gaushitTruthMatch pandora
pandora::CaloHitList m_caloHitListW
The w calo hit list.
std::vector< Slice > SliceList
std::map< pandora::HitType, std::string > HitTypeToNameMap
pandora::CaloHitList m_caloHitListV
The v calo hit list.
BEGIN_PROLOG could also be cout