RemovalBaseTool class.
More...
#include <RemovalBaseTool.h>
|
virtual bool | Run (ThreeViewDeltaRayMatchingAlgorithm *const pAlgorithm, TensorType &overlapTensor)=0 |
| Run the algorithm tool. More...
|
|
virtual pandora::StatusCode | ReadSettings (const pandora::TiXmlHandle xmlHandle)=0 |
|
bool | IsMuonEndpoint (const TensorType::Element &element, const bool ignoreHitType, const pandora::HitType hitTypeToIgnore=pandora::TPC_VIEW_U) const |
| Determine whether the matched clusters suggest that the delta ray is at the endpoint of the cosmic ray (and is likely to be a michel) More...
|
|
bool | IsBestElement (const TensorType::Element &element, const pandora::HitType hitType, const TensorType::ElementList &elementList, const pandora::ClusterSet &modifiedClusters) const |
| Determine whether the input element is the best to use to modify the contaminated cluster (best is defined by the total hit count) More...
|
|
virtual bool | PassElementChecks (const TensorType::Element &element, const pandora::HitType hitType) const =0 |
| Determine whether element satifies simple checks. More...
|
|
bool | IsCloseToLine (const pandora::CartesianVector &hitPosition, const pandora::CartesianVector &lineStart, const pandora::CartesianVector &lineEnd, const float distanceToLine) const |
| Whether a given position is close to a defined line. More...
|
|
bool | IsInLineSegment (const pandora::CartesianVector &lowerBoundary, const pandora::CartesianVector &upperBoundary, const pandora::CartesianVector &point) const |
| Whether the projection of a given position lies on a defined line. More...
|
|
void | FindExtrapolatedHits (const pandora::Cluster *const pCluster, const pandora::CartesianVector &lowerBoundary, const pandora::CartesianVector &upperBoundary, pandora::CaloHitList &collectedHits) const |
| Collect the hits that are closest to and can be projected onto a defined line. More...
|
|
pandora::StatusCode | ProjectDeltaRayPositions (const TensorType::Element &element, const pandora::HitType hitType, pandora::CartesianPointVector &projectedPositions) const |
| Use two views of a delta ray pfo to calculate projected positions in a given third view. More...
|
|
|
float | m_minSeparation |
| The minimum delta ray - parent muon cluster separation required to investigate a delta/cosmic ray cluster. More...
|
|
float | m_distanceToLine |
| The maximum perpendicular distance of a position to a line for it to be considered close. More...
|
|
RemovalBaseTool class.
Definition at line 18 of file RemovalBaseTool.h.
lar_content::RemovalBaseTool::RemovalBaseTool |
( |
| ) |
|
Default constructor.
Definition at line 20 of file RemovalBaseTool.cc.
float m_minSeparation
The minimum delta ray - parent muon cluster separation required to investigate a delta/cosmic ray clu...
float m_distanceToLine
The maximum perpendicular distance of a position to a line for it to be considered close...
void lar_content::RemovalBaseTool::FindExtrapolatedHits |
( |
const pandora::Cluster *const |
pCluster, |
|
|
const pandora::CartesianVector & |
lowerBoundary, |
|
|
const pandora::CartesianVector & |
upperBoundary, |
|
|
pandora::CaloHitList & |
collectedHits |
|
) |
| const |
|
protected |
Collect the hits that are closest to and can be projected onto a defined line.
- Parameters
-
pCluster | the address of the input cluster containing the hits to be investigated |
lowerBoundary | the start position of the line |
upperBoundary | the end position of the line |
collectedHits | the collected hits |
Definition at line 150 of file RemovalBaseTool.cc.
153 CaloHitList caloHitList;
154 pCluster->GetOrderedCaloHitList().FillCaloHitList(caloHitList);
156 for (
const CaloHit *
const pCaloHit : caloHitList)
158 if (!this->
IsInLineSegment(lowerBoundary, upperBoundary, pCaloHit->GetPositionVector()))
164 collectedHits.push_back(pCaloHit);
float m_distanceToLine
The maximum perpendicular distance of a position to a line for it to be considered close...
bool IsInLineSegment(const pandora::CartesianVector &lowerBoundary, const pandora::CartesianVector &upperBoundary, const pandora::CartesianVector &point) const
Whether the projection of a given position lies on a defined line.
bool IsCloseToLine(const pandora::CartesianVector &hitPosition, const pandora::CartesianVector &lineStart, const pandora::CartesianVector &lineEnd, const float distanceToLine) const
Whether a given position is close to a defined line.
bool lar_content::RemovalBaseTool::IsBestElement |
( |
const TensorType::Element & |
element, |
|
|
const pandora::HitType |
hitType, |
|
|
const TensorType::ElementList & |
elementList, |
|
|
const pandora::ClusterSet & |
modifiedClusters |
|
) |
| const |
|
protected |
Determine whether the input element is the best to use to modify the contaminated cluster (best is defined by the total hit count)
- Parameters
-
element | the tensor element |
hitType | the hit type of the cluster under investigation |
elementList | the tensor element list |
modifiedClusters | the set of modified clusters |
- Returns
- whether the input element is the best element
Definition at line 76 of file RemovalBaseTool.cc.
79 const float chiSquared(
element.GetOverlapResult().GetReducedChi2());
80 const unsigned int hitSum(
element.GetClusterU()->GetNCaloHits() +
element.GetClusterV()->GetNCaloHits() +
element.GetClusterW()->GetNCaloHits());
82 for (
const TensorType::Element &testElement : elementList)
84 if (modifiedClusters.count(testElement.GetClusterU()) || modifiedClusters.count(testElement.GetClusterV()) ||
85 modifiedClusters.count(testElement.GetClusterW()))
88 if (testElement.GetCluster(hitType) !=
element.GetCluster(hitType))
91 if ((testElement.GetClusterU() ==
element.GetClusterU()) && (testElement.GetClusterV() ==
element.GetClusterV()) &&
92 (testElement.GetClusterW() ==
element.GetClusterW()))
95 const unsigned int testHitSum(
96 testElement.GetClusterU()->GetNCaloHits() + testElement.GetClusterV()->GetNCaloHits() + testElement.GetClusterW()->GetNCaloHits());
97 const float testChiSquared(testElement.GetOverlapResult().GetReducedChi2());
99 if ((testHitSum < hitSum) || ((testHitSum == hitSum) && (testChiSquared > chiSquared)))
virtual bool PassElementChecks(const TensorType::Element &element, const pandora::HitType hitType) const =0
Determine whether element satifies simple checks.
bool lar_content::RemovalBaseTool::IsCloseToLine |
( |
const pandora::CartesianVector & |
hitPosition, |
|
|
const pandora::CartesianVector & |
lineStart, |
|
|
const pandora::CartesianVector & |
lineEnd, |
|
|
const float |
distanceToLine |
|
) |
| const |
|
protected |
Whether a given position is close to a defined line.
- Parameters
-
hitPosition | the input position |
lineStart | the start position of the line |
lineEnd | the end position of the line |
distanceToLine | the definition of close |
- Returns
- whether the position is close to the definied line
Definition at line 111 of file RemovalBaseTool.cc.
114 CartesianVector lineDirection(lineStart - lineEnd);
115 lineDirection = lineDirection.GetUnitVector();
117 const float transverseDistanceFromLine(lineDirection.GetCrossProduct(hitPosition - lineStart).GetMagnitude());
119 if (transverseDistanceFromLine > distanceToLine)
bool lar_content::RemovalBaseTool::IsInLineSegment |
( |
const pandora::CartesianVector & |
lowerBoundary, |
|
|
const pandora::CartesianVector & |
upperBoundary, |
|
|
const pandora::CartesianVector & |
point |
|
) |
| const |
|
protected |
Whether the projection of a given position lies on a defined line.
- Parameters
-
lowerBoundary | the start position of the line |
upperBoundary | the end position of the line |
point | the input position |
- Returns
- whether the position lies between the two points
Definition at line 127 of file RemovalBaseTool.cc.
129 const float segmentBoundaryGradient = (-1.f) * (upperBoundary.GetX() - lowerBoundary.GetX()) / (upperBoundary.GetZ() - lowerBoundary.GetZ());
130 const float xPointOnUpperLine((point.GetZ() - upperBoundary.GetZ()) / segmentBoundaryGradient + upperBoundary.GetX());
131 const float xPointOnLowerLine((point.GetZ() - lowerBoundary.GetZ()) / segmentBoundaryGradient + lowerBoundary.GetX());
133 if (std::fabs(xPointOnUpperLine - point.GetX()) < std::numeric_limits<float>::epsilon())
136 if (std::fabs(xPointOnLowerLine - point.GetX()) < std::numeric_limits<float>::epsilon())
139 if ((point.GetX() > xPointOnUpperLine) && (point.GetX() > xPointOnLowerLine))
142 if ((point.GetX() < xPointOnUpperLine) && (point.GetX() < xPointOnLowerLine))
bool lar_content::RemovalBaseTool::IsMuonEndpoint |
( |
const TensorType::Element & |
element, |
|
|
const bool |
ignoreHitType, |
|
|
const pandora::HitType |
hitTypeToIgnore = pandora::TPC_VIEW_U |
|
) |
| const |
|
protected |
Determine whether the matched clusters suggest that the delta ray is at the endpoint of the cosmic ray (and is likely to be a michel)
- Parameters
-
element | the tensor element |
ignoreHitType | whether to ignore the cluster under investigation |
hitTypeToIgnore | the hit type to ignore |
- Returns
- whether the delta ray is at the endpoint of the cosmic ray
Definition at line 40 of file RemovalBaseTool.cc.
42 for (
const HitType hitType : {TPC_VIEW_U, TPC_VIEW_V, TPC_VIEW_W})
44 if (ignoreHitType && (hitType == hitTypeToIgnore))
47 const Cluster *pMuonCluster(
nullptr), *
const pDeltaRayCluster(
element.GetCluster(hitType));
52 float xMinDR(-std::numeric_limits<float>::max()), xMaxDR(+std::numeric_limits<float>::max());
53 pDeltaRayCluster->GetClusterSpanX(xMinDR, xMaxDR);
55 float xMinCR(-std::numeric_limits<float>::max()), xMaxCR(+std::numeric_limits<float>::max());
56 pMuonCluster->GetClusterSpanX(xMinCR, xMaxCR);
58 if ((xMinDR < xMinCR) || (xMaxDR > xMaxCR))
61 float zMinDR(-std::numeric_limits<float>::max()), zMaxDR(+std::numeric_limits<float>::max());
62 pDeltaRayCluster->GetClusterSpanZ(xMinDR, xMaxDR, zMinDR, zMaxDR);
64 float zMinCR(-std::numeric_limits<float>::max()), zMaxCR(+std::numeric_limits<float>::max());
65 pMuonCluster->GetClusterSpanZ(xMinCR, xMaxCR, zMinCR, zMaxCR);
67 if ((zMinDR < zMinCR) || (zMaxDR > zMaxCR))
ThreeViewDeltaRayMatchingAlgorithm * m_pParentAlgorithm
Address of the parent matching algorithm.
pandora::StatusCode GetMuonCluster(const pandora::PfoList &commonMuonPfoList, const pandora::HitType hitType, const pandora::Cluster *&pMuonCluster) const
Return the cluster of the common cosmic ray pfo in a given view (function demands there to be only on...
bool lar_content::RemovalBaseTool::PassElementChecks |
( |
const TensorType::Element & |
element, |
|
|
const pandora::HitType |
hitType |
|
) |
| const |
|
protectedpure virtual |
Determine whether element satifies simple checks.
- Parameters
-
element | the tensor element |
hitType | the hit type of the cluster under investigation |
- Returns
- whether the checks pass
Implemented in lar_content::CosmicRayRemovalTool, and lar_content::DeltaRayRemovalTool.
Definition at line 26 of file RemovalBaseTool.cc.
28 const Cluster *pMuonCluster(
nullptr), *
const pDeltaRayCluster(
element.GetCluster(hitType));
float m_minSeparation
The minimum delta ray - parent muon cluster separation required to investigate a delta/cosmic ray clu...
ThreeViewDeltaRayMatchingAlgorithm * m_pParentAlgorithm
Address of the parent matching algorithm.
pandora::StatusCode GetMuonCluster(const pandora::PfoList &commonMuonPfoList, const pandora::HitType hitType, const pandora::Cluster *&pMuonCluster) const
Return the cluster of the common cosmic ray pfo in a given view (function demands there to be only on...
static float GetClosestDistance(const pandora::ClusterList &clusterList1, const pandora::ClusterList &clusterList2)
Get closest distance between clusters in a pair of cluster lists.
StatusCode lar_content::RemovalBaseTool::ProjectDeltaRayPositions |
( |
const TensorType::Element & |
element, |
|
|
const pandora::HitType |
hitType, |
|
|
pandora::CartesianPointVector & |
projectedPositions |
|
) |
| const |
|
protected |
Use two views of a delta ray pfo to calculate projected positions in a given third view.
- Parameters
-
element | the tensor element |
hitType | the view to be projected into |
projectedPositions | the output list of projected positions |
- Returns
- a status code reflecting whether the procedure ran smoothly and if the outcome is good
Definition at line 170 of file RemovalBaseTool.cc.
172 HitTypeVector hitTypes({TPC_VIEW_U, TPC_VIEW_V, TPC_VIEW_W});
174 hitTypes.erase(std::find(hitTypes.begin(), hitTypes.end(), hitType));
176 const Cluster *
const pCluster1(
element.GetCluster(hitTypes[0]));
177 const Cluster *
const pCluster2(
element.GetCluster(hitTypes[1]));
pandora::StatusCode GetProjectedPositions(const pandora::Cluster *const pCluster1, const pandora::Cluster *const pCluster2, pandora::CartesianPointVector &projectedPositions) const
Use two clusters from different views to calculate projected positions in the remaining third view...
ThreeViewDeltaRayMatchingAlgorithm * m_pParentAlgorithm
Address of the parent matching algorithm.
std::vector< pandora::HitType > HitTypeVector
StatusCode lar_content::RemovalBaseTool::ReadSettings |
( |
const pandora::TiXmlHandle |
xmlHandle | ) |
|
|
protectedpure virtual |
Implemented in lar_content::CosmicRayRemovalTool, and lar_content::DeltaRayRemovalTool.
Definition at line 184 of file RemovalBaseTool.cc.
186 PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
"MinSeparation",
m_minSeparation));
188 PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle,
"DistanceToLine",
m_distanceToLine));
190 return STATUS_CODE_SUCCESS;
float m_minSeparation
The minimum delta ray - parent muon cluster separation required to investigate a delta/cosmic ray clu...
float m_distanceToLine
The maximum perpendicular distance of a position to a line for it to be considered close...
float lar_content::RemovalBaseTool::m_distanceToLine |
|
protected |
The maximum perpendicular distance of a position to a line for it to be considered close.
Definition at line 115 of file RemovalBaseTool.h.
float lar_content::RemovalBaseTool::m_minSeparation |
|
protected |
The minimum delta ray - parent muon cluster separation required to investigate a delta/cosmic ray cluster.
Definition at line 114 of file RemovalBaseTool.h.
The documentation for this class was generated from the following files: