8 #ifndef LAR_MASTER_ALGORITHM_H
9 #define LAR_MASTER_ALGORITHM_H 1
11 #include "Pandora/AlgorithmTool.h"
12 #include "Pandora/ExternallyConfiguredAlgorithm.h"
17 #include <unordered_map>
22 class StitchingBaseTool;
23 class CosmicRayTaggingBaseTool;
24 class SliceIdBaseTool;
25 class SliceSelectionBaseTool;
28 typedef std::vector<pandora::CaloHitList>
SliceVector;
30 typedef std::unordered_map<const pandora::ParticleFlowObject *, const pandora::LArTPC *>
PfoToLArTPCMap;
31 typedef std::unordered_map<const pandora::ParticleFlowObject *, float>
PfoToFloatMap;
62 typedef std::unordered_map<const pandora::ParticleFlowObject *, const pandora::LArTPC *>
PfoToLArTPCMap;
80 void StitchPfos(
const pandora::ParticleFlowObject *
const pPfoToEnlarge,
const pandora::ParticleFlowObject *
const pPfoToDelete,
96 pandora::StatusCode
Run();
145 const PfoToFloatMap &stitchedPfosToX0Map, pandora::PfoList &clearCosmicRayPfos, pandora::PfoList &ambiguousPfos)
const;
182 pandora::StatusCode
Reset();
190 pandora::StatusCode
Copy(
const pandora::Pandora *
const pPandora,
const pandora::CaloHit *
const pCaloHit)
const;
199 pandora::StatusCode
Copy(
const pandora::Pandora *
const pPandora,
const pandora::MCParticle *
const pMCParticle,
208 pandora::StatusCode
Recreate(
const pandora::PfoList &inputPfoList, pandora::PfoList &newPfoList)
const;
217 pandora::StatusCode
Recreate(
const pandora::ParticleFlowObject *
const pInputPfo,
const pandora::ParticleFlowObject *
const pNewParentPfo,
218 pandora::PfoList &newPfoList)
const;
228 const pandora::CaloHit *
CreateCaloHit(
const pandora::CaloHit *
const pInputCaloHit,
const pandora::CaloHit *
const pParentCaloHit)
const;
239 const pandora::Cluster *
CreateCluster(
const pandora::Cluster *
const pInputCluster,
const pandora::CaloHitList &newCaloHitList,
240 const pandora::CaloHitList &newIsolatedCaloHitList)
const;
249 const pandora::Vertex *
CreateVertex(
const pandora::Vertex *
const pInputVertex)
const;
260 const pandora::ParticleFlowObject *
CreatePfo(
const pandora::ParticleFlowObject *
const pInputPfo,
261 const pandora::ClusterList &newClusterList,
const pandora::VertexList &newVertexList)
const;
273 const pandora::Pandora *
CreateWorkerInstance(
const pandora::LArTPC &larTPC,
const pandora::DetectorGapList &gapList,
274 const std::string &settingsFile,
const std::string &
name)
const;
286 const pandora::Pandora *
CreateWorkerInstance(
const pandora::LArTPCMap &larTPCMap,
const pandora::DetectorGapList &gapList,
287 const std::string &settingsFile,
const std::string &
name)
const;
296 pandora::StatusCode
ReadSettings(
const pandora::TiXmlHandle xmlHandle);
308 const pandora::InputBool inputBool,
const pandora::TiXmlHandle xmlHandle,
const std::string &xmlTag,
bool &outputBool);
396 const pandora::PfoList &parentCosmicRayPfos, pandora::PfoList &ambiguousPfos,
const MasterAlgorithm *
const pAlgorithm) = 0;
417 const SliceHypotheses &crSliceHypotheses, pandora::PfoList &selectedPfos) = 0;
441 #endif // #ifndef LAR_MASTER_ALGORITHM_H
std::unordered_map< const pandora::ParticleFlowObject *, float > PfoToFloatMap
std::string m_inputMCParticleListName
The input mc particle list name.
pandora::InputBool m_shouldRunCosmicHitRemoval
Whether to remove hits from tagged cosmic-rays.
const pandora::ParticleFlowObject * CreatePfo(const pandora::ParticleFlowObject *const pInputPfo, const pandora::ClusterList &newClusterList, const pandora::VertexList &newVertexList) const
Create a new pfo in the current pandora instance, based upon the provided input pfo.
std::vector< pandora::CaloHitList > SliceVector
LArCaloHitFactory m_larCaloHitFactory
Factory for creating LArCaloHits during hit copying.
CosmicRayTaggingToolVector m_cosmicRayTaggingToolVector
The cosmic-ray tagging tool vector.
pandora::StatusCode Copy(const pandora::Pandora *const pPandora, const pandora::CaloHit *const pCaloHit) const
Copy a specified calo hit to the provided pandora instance.
std::vector< SliceSelectionBaseTool * > SliceSelectionToolVector
pandora::InputBool m_shouldRunStitching
Whether to stitch cosmic-ray muons crossing between volumes.
CosmicRayTaggingBaseTool class.
pandora::StatusCode Recreate(const pandora::PfoList &inputPfoList, pandora::PfoList &newPfoList) const
Recreate a specified list of pfos in the current pandora instance.
pandora::StatusCode ReadExternalSettings(const ExternalSteeringParameters *const pExternalParameters, const pandora::InputBool inputBool, const pandora::TiXmlHandle xmlHandle, const std::string &xmlTag, bool &outputBool)
Read settings from external steering parameters block, if present, otherwise from xml as standard...
const pandora::Pandora * m_pSlicingWorkerInstance
The slicing worker instance.
Header file for the lar calo hit class.
pandora::StatusCode CopyMCParticles() const
Copy mc particles in the named input list to all pandora worker instances.
const pandora::CaloHit * CreateCaloHit(const pandora::CaloHit *const pInputCaloHit, const pandora::CaloHit *const pParentCaloHit) const
Create a new calo hit in the current pandora instance, based upon the provided input calo hit...
bool m_shouldRunNeutrinoRecoOption
Whether to run neutrino reconstruction for each slice.
bool m_shouldRunAllHitsCosmicReco
Whether to run all hits cosmic-ray reconstruction.
bool m_shouldRemoveOutOfTimeHits
Whether to remove out of time hits.
pandora::InputBool m_shouldRunSlicing
Whether to slice events into separate regions for processing.
bool m_shouldPerformSliceId
Whether to identify slices and select most appropriate pfos.
std::string m_slicingSettingsFile
The slicing settings file.
pandora::StatusCode RunCosmicRayHitRemoval(const pandora::PfoList &ambiguousPfos) const
Run cosmic-ray hit removal, freeing hits in ambiguous pfos for further processing.
virtual void SelectOutputPfos(const pandora::Algorithm *const pAlgorithm, const SliceHypotheses &nuSliceHypotheses, const SliceHypotheses &crSliceHypotheses, pandora::PfoList &selectedPfos)=0
Select which reconstruction hypotheses to use; neutrino outcomes or cosmic-ray muon outcomes for each...
std::string m_recreatedVertexListName
The output recreated vertex list name.
std::vector< const pandora::Pandora * > PandoraInstanceList
const pandora::Vertex * CreateVertex(const pandora::Vertex *const pInputVertex) const
Create a new vertex in the current pandora instance, based upon the provided input vertex...
const pandora::Pandora * m_pSliceCRWorkerInstance
The per-slice cosmic-ray reconstruction worker instance.
virtual void FindAmbiguousPfos(const pandora::PfoList &parentCosmicRayPfos, pandora::PfoList &ambiguousPfos, const MasterAlgorithm *const pAlgorithm)=0
Find the list of ambiguous pfos (could represent cosmic-ray muons or neutrinos)
SliceSelectionToolVector m_sliceSelectionToolVector
The slice selection tool vector.
virtual void SelectSlices(const pandora::Algorithm *const pAlgorithm, const SliceVector &inputSliceVector, SliceVector &outputSliceVector)=0
Select which slice(s) to use; neutrino or beam slices.
pandora::InputBool m_shouldRunAllHitsCosmicReco
Whether to run all hits cosmic-ray reconstruction.
const pandora::Cluster * CreateCluster(const pandora::Cluster *const pInputCluster, const pandora::CaloHitList &newCaloHitList, const pandora::CaloHitList &newIsolatedCaloHitList) const
Create a new cluster in the current pandora instance, based upon the provided input cluster...
bool m_printOverallRecoStatus
Whether to print current operation status messages.
const pandora::Pandora * CreateWorkerInstance(const pandora::LArTPC &larTPC, const pandora::DetectorGapList &gapList, const std::string &settingsFile, const std::string &name) const
Create a pandora worker instance to handle a single LArTPC.
pandora::StatusCode RunSliceReconstruction(SliceVector &sliceVector, SliceHypotheses &nuSliceHypotheses, SliceHypotheses &crSliceHypotheses) const
Process each slice under different reconstruction hypotheses.
std::map< unsigned int, LArTPCHitList > VolumeIdToHitListMap
MasterAlgorithm()
Default constructor.
const pandora::Pandora * m_pSliceNuWorkerInstance
The per-slice neutrino reconstruction worker instance.
std::vector< pandora::PfoList > SliceHypotheses
std::string m_nuSettingsFile
The neutrino reconstruction settings file.
pandora::InputBool m_shouldRunNeutrinoRecoOption
Whether to run neutrino reconstruction for each slice.
pandora::StatusCode InitializeWorkerInstances()
Initialize pandora worker instances.
bool m_workerInstancesInitialized
Whether all worker instances have been initialized.
void ShiftPfoHierarchy(const pandora::ParticleFlowObject *const pParentPfo, const PfoToLArTPCMap &pfoToLArTPCMap, const float x0) const
Shift a Pfo hierarchy by a specified x0 value.
StitchingToolVector m_stitchingToolVector
The stitching tool vector.
pandora::StatusCode Reset()
Reset all worker instances.
unsigned int m_larCaloHitVersion
The LArCaloHit version for LArCaloHitFactory.
Header file for the MultiPandoraApi class.
pandora::InputBool m_printOverallRecoStatus
Whether to print current operation status messages.
std::string m_recreatedClusterListName
The output recreated cluster list name.
bool m_visualizeOverallRecoStatus
Whether to display results of current operations.
pandora::StatusCode TagCosmicRayPfos(const PfoToFloatMap &stitchedPfosToX0Map, pandora::PfoList &clearCosmicRayPfos, pandora::PfoList &ambiguousPfos) const
Tag clear, unambiguous cosmic-ray pfos.
std::string m_crSettingsFile
The cosmic-ray reconstruction settings file.
void StitchPfos(const pandora::ParticleFlowObject *const pPfoToEnlarge, const pandora::ParticleFlowObject *const pPfoToDelete, PfoToLArTPCMap &pfoToLArTPCMap) const
Stitch together a pair of pfos.
std::vector< StitchingBaseTool * > StitchingToolVector
External steering parameters class.
std::string m_recreatedPfoListName
The output recreated pfo list name.
bool m_fullWidthCRWorkerWireGaps
Whether wire-type line gaps in cosmic-ray worker instances should cover all drift time...
std::vector< CosmicRayTaggingBaseTool * > CosmicRayTaggingToolVector
LArMCParticleFactory responsible for object creation.
pandora::StatusCode StitchCosmicRayPfos(PfoToLArTPCMap &pfoToLArTPCMap, PfoToFloatMap &stitchedPfosToX0Map) const
Stitch together cosmic-ray pfos crossing between adjacent lar tpcs.
std::unordered_map< const pandora::ParticleFlowObject *, const pandora::LArTPC * > PfoToLArTPCMap
std::string m_filePathEnvironmentVariable
The environment variable providing a list of paths to xml files.
SliceSelectionBaseTool class.
std::unordered_map< const pandora::ParticleFlowObject *, const pandora::LArTPC * > PfoToLArTPCMap
pandora::StatusCode GetVolumeIdToHitListMap(VolumeIdToHitListMap &volumeIdToHitListMap) const
Get the mapping from lar tpc volume id to lists of all hits, and truncated hits.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
pandora::StatusCode RecreateCosmicRayPfos(PfoToLArTPCMap &pfoToLArTPCMap) const
Recreate cosmic-ray pfos (created by worker instances) in the master instance.
bool m_shouldRunSlicing
Whether to slice events into separate regions for processing.
bool m_shouldRunCosmicRecoOption
Whether to run cosmic-ray reconstruction for each slice.
pandora::InputBool m_shouldPerformSliceId
Whether to identify slices and select most appropriate pfos.
virtual pandora::StatusCode RegisterCustomContent(const pandora::Pandora *const pPandora) const
Register custom content, such as algorithms or algorithm tools, with a specified pandora instance...
pandora::StatusCode Run()
pandora::InputBool m_shouldRunCosmicRecoOption
Whether to run cosmic-ray reconstruction for each slice.
pandora::CaloHitList m_allHitList
The list of all hits originating from a given LArTPC.
std::vector< SliceIdBaseTool * > SliceIdToolVector
pandora::StatusCode SelectBestSliceHypotheses(const SliceHypotheses &nuSliceHypotheses, const SliceHypotheses &crSliceHypotheses) const
Examine slice hypotheses to identify the most appropriate to provide in final event output...
LArCaloHitFactory responsible for object creation.
pandora::CaloHitList m_truncatedHitList
The list of hits confined within LArTPC boundaries for given beam t0 value.
PandoraInstanceList m_crWorkerInstances
The list of cosmic-ray reconstruction worker instances.
virtual void Run(const MasterAlgorithm *const pAlgorithm, const pandora::PfoList *const pMultiPfoList, PfoToLArTPCMap &pfoToLArTPCMap, PfoToFloatMap &stitchedPfosToX0Map)=0
Run the algorithm tool.
SliceIdToolVector m_sliceIdToolVector
The slice id tool vector.
bool m_shouldRunCosmicHitRemoval
Whether to remove hits from tagged cosmic-rays.
pandora::StatusCode RunSlicing(const VolumeIdToHitListMap &volumeIdToHitListMap, SliceVector &sliceVector) const
Run the event slicing procedures, dividing available hits up into distinct 3D regions.
bool m_shouldRunStitching
Whether to stitch cosmic-ray muons crossing between volumes.
std::list< Vertex > VertexList
float m_inTimeMaxX0
Cut on X0 to determine whether particle is clear cosmic ray.
std::string m_inputHitListName
The input hit list name.
bool m_passMCParticlesToWorkerInstances
Whether to pass mc particle details (and links to calo hits) to worker instances. ...
pandora::StatusCode RunCosmicRayReconstruction(const VolumeIdToHitListMap &volumeIdToHitListMap) const
Run the cosmic-ray reconstruction worker instances.