9 #include "Pandora/AlgorithmHeaders.h" 18 TwoViewLongTracksTool::TwoViewLongTracksTool() :
19 m_minMatchedFraction(0.3
f),
20 m_minMatchingScore(0.95
f),
21 m_minMatchedSamplingPoints(15),
22 m_minXOverlapFraction(0.9
f),
23 m_minMatchedSamplingPointRatio(2)
36 if (((*iIter)->GetCluster1() == (*iIter2)->GetCluster1()) || ((*iIter)->GetCluster2() == (*iIter2)->GetCluster2()))
46 const unsigned int minMatchedSamplingPointRatio,
const pandora::ClusterSet &usedClusters)
48 const unsigned int nMatchedReUpsampledSamplingPoints((*iIter)->GetOverlapResult().GetNMatchedReUpsampledSamplingPoints());
52 if ((*iIter) == eIter)
55 if (usedClusters.count(eIter->GetCluster1()) || usedClusters.count(eIter->GetCluster2()))
58 if (((*iIter)->GetCluster1() != eIter->GetCluster1()) && ((*iIter)->GetCluster2() != eIter->GetCluster2()))
61 if (nMatchedReUpsampledSamplingPoints < minMatchedSamplingPointRatio * eIter->GetOverlapResult().GetNMatchedReUpsampledSamplingPoints())
72 if (PandoraContentApi::GetSettings(*pAlgorithm)->ShouldDisplayAlgorithmInfo())
73 std::cout <<
"----> Running Algorithm Tool: " << this->GetInstanceName() <<
", " << this->GetType() <<
std::endl;
86 ClusterSet usedClusters;
90 for (
const Cluster *
const pKeyCluster : sortedKeyClusters)
92 if (!pKeyCluster->IsAvailable())
95 unsigned int n0(0), n1(0);
112 protoParticle.
m_clusterList.push_back((*iIter)->GetCluster1());
113 protoParticle.
m_clusterList.push_back((*iIter)->GetCluster2());
114 protoParticleVector.push_back(protoParticle);
116 usedClusters.insert((*iIter)->GetCluster1());
117 usedClusters.insert((*iIter)->GetCluster2());
129 if (usedClusters.count(eIter->GetCluster1()) || usedClusters.count(eIter->GetCluster2()))
141 const TwoViewXOverlap &xOverlap(eIter->GetOverlapResult().GetTwoViewXOverlap());
145 iteratorList.push_back(eIter);
154 PANDORA_RETURN_RESULT_IF_AND_IF(
155 STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
"MinMatchedFraction",
m_minMatchedFraction));
157 PANDORA_RETURN_RESULT_IF_AND_IF(
158 STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
"MinMatchingScore",
m_minMatchingScore));
160 PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
163 PANDORA_RETURN_RESULT_IF_AND_IF(
164 STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
"MinXOverlapFraction",
m_minXOverlapFraction));
166 PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
169 return STATUS_CODE_SUCCESS;
std::vector< ProtoParticle > ProtoParticleVector
float m_minMatchedFraction
The min matched sampling point fraction for particle creation.
float m_minMatchingScore
The min global matching score for particle creation.
TwoViewTransverseTracksAlgorithm class.
static bool HasLongDirectConnections(IteratorList::const_iterator iIter, const IteratorList &iteratorList)
Whether a long element shares clusters with any other long elements.
static bool IsLongerThanDirectConnections(IteratorList::const_iterator iIter, const MatrixType::ElementList &elementList, const unsigned int minMatchedSamplingPointRatio, const pandora::ClusterSet &usedClusters)
Whether a long element is significantly longer that other elements with which it shares a cluster...
std::vector< Element > ElementList
void GetSortedKeyClusters(pandora::ClusterVector &sortedKeyClusters) const
Get a sorted vector of key clusters (view 1 clusters with current implementation) ...
bool Run(TwoViewTransverseTracksAlgorithm *const pAlgorithm, MatrixType &overlapMatrix)
Run the algorithm tool.
float m_minXOverlapFraction
The min x overlap fraction (in each view) for particle creation.
unsigned int m_minMatchedSamplingPoints
The min number of matched sampling points for particle creation.
pandora::ClusterList m_clusterList
List of 2D clusters in a 3D proto particle.
TheMatrix::const_iterator const_iterator
unsigned int m_minMatchedSamplingPointRatio
The min ratio between 1st and 2nd highest msps for simple ambiguity resolution.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
void GetConnectedElements(const pandora::Cluster *const pCluster, const bool ignoreUnavailable, ElementList &elementList) const
Get a list of elements connected to a specified cluster.
void SelectLongElements(const MatrixType::ElementList &elementList, const pandora::ClusterSet &usedClusters, IteratorList &iteratorList) const
Select a list of long track-like elements from a set of connected matrix elements.
virtual bool CreateThreeDParticles(const ProtoParticleVector &protoParticleVector)
Create particles using findings from recent algorithm processing.
void FindLongTracks(const MatrixType &overlapMatrix, ProtoParticleVector &protoParticleVector) const
Find long tracks, hidden by simple ambiguities in the matrix.
std::vector< art::Ptr< recob::Cluster > > ClusterVector
std::vector< MatrixType::ElementList::const_iterator > IteratorList
QTextStream & endl(QTextStream &s)