8 #ifndef LAR_STITCHING_COSMIC_RAY_MERGING_TOOL_H 
    9 #define LAR_STITCHING_COSMIC_RAY_MERGING_TOOL_H 1 
   15 #include <unordered_map> 
   87     pandora::StatusCode 
ReadSettings(
const pandora::TiXmlHandle xmlHandle);
 
  110     typedef std::unordered_map<const pandora::LArTPC *, pandora::PfoList> 
LArTPCToPfoMap;
 
  121     typedef std::unordered_map<const pandora::ParticleFlowObject *, PfoAssociation> 
PfoAssociationMap;
 
  144     void CreatePfoMatches(
const pandora::LArTPC &larTPC1, 
const pandora::LArTPC &larTPC2, 
const pandora::ParticleFlowObject *
const pPfo1,
 
  148     typedef std::unordered_map<const pandora::ParticleFlowObject *, pandora::PfoList> 
PfoMergeMap;
 
  175     void CollectAssociatedPfos(
const pandora::ParticleFlowObject *
const pSeedPfo, 
const pandora::ParticleFlowObject *
const pCurrentPfo,
 
  176         const PfoMergeMap &pfoMerges, 
const pandora::PfoSet &vetoSet, pandora::PfoList &associatedList) 
const;
 
  214         const pandora::ParticleFlowObject *
const pMatchedPfo, 
const float x0, 
const PfoToLArTPCMap &pfoToLArTPCMap,
 
  248 #endif // #ifndef LAR_STITCHING_COSMIC_RAY_MERGING_TOOL_H 
std::unordered_map< const pandora::ParticleFlowObject *, float > PfoToFloatMap
void SelectPrimaryPfos(const pandora::PfoList *pInputPfoList, const PfoToLArTPCMap &pfoToLArTPCMap, pandora::PfoList &outputPfoList) const 
Select primary Pfos from the input list of Pfos. 
std::unordered_map< const pandora::ParticleFlowObject *, PfoToPointingVertexMap > PfoToPointingVertexMatrix
Header file for the lar pointing cluster class. 
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
PfoAssociation(const VertexType parent, const VertexType daughter, const float fom)
Constructor. 
void CollectAssociatedPfos(const pandora::ParticleFlowObject *const pSeedPfo, const pandora::ParticleFlowObject *const pCurrentPfo, const PfoMergeMap &pfoMerges, const pandora::PfoSet &vetoSet, pandora::PfoList &associatedList) const 
Collect up associations between Pfos. 
unsigned int m_minNCaloHits3D
bool CalculateX0(const PfoToLArTPCMap &pfoToLArTPCMap, const ThreeDPointingClusterMap &pointingClusterMap, const pandora::PfoVector &pfoVector, float &x0, PfoToPointingVertexMatrix &pfoToPointingVertexMatrix) const 
Calculate x0 shift for a group of associated Pfos. 
float m_relaxCosRelativeAngle
void CreatePfoMatches(const LArTPCToPfoMap &larTPCToPfoMap, const ThreeDPointingClusterMap &pointingClusterMap, PfoAssociationMatrix &pfoAssociationMatrix) const 
Create associations between Pfos using 3D pointing clusters. 
std::unordered_map< const pandora::ParticleFlowObject *, pandora::PfoList > PfoMergeMap
std::unordered_map< const pandora::ParticleFlowObject *, PfoAssociationMap > PfoAssociationMatrix
void BuildTPCMaps(const pandora::PfoList &inputPfoList, const PfoToLArTPCMap &pfoToLArTPCMap, LArTPCToPfoMap &larTPCToPfoMap) const 
Build a list of Pfos for each tpc. 
StitchingCosmicRayMergingTool()
Default constructor. 
StitchingCosmicRayMergingTool class. 
float m_boundaryToleranceWidth
The distance from the APA/CPA boundary inside which the deviation consideration is ignored...
VertexType
Vertex enumeration. 
VertexType GetDaughter() const 
Get daughter. 
float m_relaxTransverseDisplacement
void OrderPfoMerges(const PfoToLArTPCMap &pfoToLArTPCMap, const ThreeDPointingClusterMap &pointingClusterMap, const PfoMergeMap &inputPfoMerges, PfoMergeMap &outputPfoMerges) const 
Identify the vertex Pfo and then re-order the map of merges so that the vertex Pfo will be enlarged...
float m_maxX0FractionalDeviation
The maximum allowed fractional difference of an X0 contribution for matches to be stitched...
bool m_alwaysApplyT0Calculation
void ShiftPfo(const MasterAlgorithm *const pAlgorithm, const pandora::ParticleFlowObject *const pPfoToShift, const pandora::ParticleFlowObject *const pMatchedPfo, const float x0, const PfoToLArTPCMap &pfoToLArTPCMap, const PfoToPointingVertexMatrix &pfoToPointingVertexMatrix) const 
Shift a pfo given its pfo stitching pair. 
VertexType m_daughter
The daughter vertex type. 
float m_minCosRelativeAngle
Header file for the master algorithm class. 
float m_maxTransverseDisplacement
VertexType m_parent
The parent vertex type. 
float m_fom
The figure of merit. 
void StitchPfos(const MasterAlgorithm *const pAlgorithm, const ThreeDPointingClusterMap &pointingClusterMap, const PfoMergeMap &pfoMerges, PfoToLArTPCMap &pfoToLArTPCMap, PfoToFloatMap &stitchedPfosToX0Map) const 
Apply X0 corrections, and then stitch together Pfos. 
void BuildPointingClusterMaps(const pandora::PfoList &inputPfoList, const PfoToLArTPCMap &pfoToLArTPCMap, ThreeDPointingClusterMap &pointingClusterMap) const 
Build a 3D pointing cluster for each Pfo. 
std::unordered_map< const pandora::ParticleFlowObject *, const pandora::LArTPC * > PfoToLArTPCMap
float m_maxLongitudinalDisplacementX
void SelectPfoMatches(const PfoAssociationMatrix &pfoAssociationMatrix, PfoMergeMap &pfoSelectedMatches) const 
Select the best associations between Pfos; create a mapping between associated Pfos, handling any ambiguities. 
std::unordered_map< const pandora::ParticleFlowObject *, LArPointingCluster::Vertex > PfoToPointingVertexMap
std::unordered_map< const pandora::ParticleFlowObject *, PfoAssociation > PfoAssociationMap
float m_relaxMinLongitudinalDisplacement
The minimum value of the longitudinal impact parameter for association if both verticies fall in the ...
VertexType GetParent() const 
Get parent. 
void Run(const MasterAlgorithm *const pAlgorithm, const pandora::PfoList *const pMultiPfoList, PfoToLArTPCMap &pfoToLArTPCMap, PfoToFloatMap &stitchedPfosToX0Map)
Run the algorithm tool. 
std::unordered_map< const pandora::LArTPC *, pandora::PfoList > LArTPCToPfoMap
float GetFigureOfMerit() const 
Get figure of merit. 
void SelectPfoMerges(const PfoMergeMap &pfoMatches, PfoMergeMap &pfoMerges) const 
Create an initial map of Pfo merges to be made. 
std::unordered_map< const pandora::ParticleFlowObject *, LArPointingCluster > ThreeDPointingClusterMap