9 #include "Pandora/AlgorithmHeaders.h" 26 void CheatingEventSlicingTool::RunSlicing(
const Algorithm *
const pAlgorithm,
const HitTypeToNameMap &caloHitListNames,
27 const HitTypeToNameMap &, SliceList &sliceList)
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) mcParticleVector.push_back(mapEntry.first);
41 std::sort(mcParticleVector.begin(), mcParticleVector.end(), LArMCParticleHelper::SortByMomentum);
43 for (
const MCParticle *
const pMCParticle : mcParticleVector)
45 const Slice &slice(mcParticleToSliceMap.at(pMCParticle));
47 if (!slice.m_caloHitListU.empty() || !slice.m_caloHitListV.empty() || !slice.m_caloHitListW.empty())
48 sliceList.push_back(slice);
54 void CheatingEventSlicingTool::InitializeMCParticleToSliceMap(
const Algorithm *
const pAlgorithm,
const HitTypeToNameMap &caloHitListNames,
57 for (
const auto &mapEntry : caloHitListNames)
59 const CaloHitList *pCaloHitList(
nullptr);
60 PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::GetList(*pAlgorithm, mapEntry.second, pCaloHitList));
62 for (
const CaloHit *
const pCaloHit : *pCaloHitList)
65 for (
const auto &weightMapEntry : pCaloHit->GetMCParticleWeightMap()) mcParticleVector.push_back(weightMapEntry.first);
66 std::sort(mcParticleVector.begin(), mcParticleVector.end(), LArMCParticleHelper::SortByMomentum);
68 for (
const MCParticle *
const pMCParticle : mcParticleVector)
70 const MCParticle *
const pParentMCParticle(LArMCParticleHelper::GetParentMCParticle(pMCParticle));
72 if (mcParticleToSliceMap.count(pParentMCParticle))
75 if (!mcParticleToSliceMap.insert(MCParticleToSliceMap::value_type(pParentMCParticle, Slice())).second)
76 throw StatusCodeException(STATUS_CODE_FAILURE);
84 void CheatingEventSlicingTool::FillSlices(
const Algorithm *
const pAlgorithm,
const HitType hitType,
const HitTypeToNameMap &caloHitListNames,
87 if ((TPC_VIEW_U != hitType) && (TPC_VIEW_V != hitType) && (TPC_VIEW_W != hitType))
88 throw StatusCodeException(STATUS_CODE_INVALID_PARAMETER);
90 const CaloHitList *pCaloHitList(
nullptr);
91 PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::GetList(*pAlgorithm, caloHitListNames.at(hitType), pCaloHitList));
93 for (
const CaloHit *
const pCaloHit : *pCaloHitList)
97 const MCParticle *
const pMainMCParticle(MCParticleHelper::GetMainMCParticle(pCaloHit));
98 const MCParticle *
const pParentMCParticle(LArMCParticleHelper::GetParentMCParticle(pMainMCParticle));
102 if (mcParticleToSliceMap.end() == mapIter)
103 throw StatusCodeException(STATUS_CODE_FAILURE);
105 Slice &slice(mapIter->second);
107 caloHitList.push_back(pCaloHit);
109 catch (
const StatusCodeException &statusCodeException)
111 if (STATUS_CODE_FAILURE == statusCodeException.GetStatusCode())
112 throw statusCodeException;
119 StatusCode CheatingEventSlicingTool::ReadSettings(
const TiXmlHandle )
121 return STATUS_CODE_SUCCESS;
SlicingAlgorithm::Slice Slice
SlicingAlgorithm::SliceList SliceList
std::vector< art::Ptr< simb::MCParticle > > MCParticleVector
Header file for the lar monte carlo particle helper helper class.
pandora::CaloHitList m_caloHitListU
The u calo hit list.
SlicingAlgorithm::HitTypeToNameMap HitTypeToNameMap
pandora::CaloHitList m_caloHitListW
The w calo hit list.
std::vector< Slice > SliceList
std::unordered_map< const pandora::MCParticle *, SlicingAlgorithm::Slice > MCParticleToSliceMap
std::map< pandora::HitType, std::string > HitTypeToNameMap
pandora::CaloHitList m_caloHitListV
The v calo hit list.