LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
lar_content::RemovalBaseTool Class Referenceabstract

RemovalBaseTool class. More...

#include "RemovalBaseTool.h"

Inheritance diagram for lar_content::RemovalBaseTool:
lar_content::DeltaRayTensorTool lar_content::CosmicRayRemovalTool lar_content::DeltaRayRemovalTool

Public Types

typedef std::vector< pandora::HitType > HitTypeVector
 
typedef ThreeViewDeltaRayMatchingAlgorithm::MatchingType::TensorType TensorType
 
typedef std::vector< TensorType::ElementList::const_iteratorIteratorList
 

Public Member Functions

 RemovalBaseTool ()
 Default constructor. More...
 

Public Attributes

ThreeViewDeltaRayMatchingAlgorithmm_pParentAlgorithm
 Address of the parent matching algorithm. More...
 

Protected Member Functions

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...
 

Protected Attributes

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...
 

Detailed Description

RemovalBaseTool class.

Definition at line 18 of file RemovalBaseTool.h.

Member Typedef Documentation

typedef std::vector<pandora::HitType> lar_content::RemovalBaseTool::HitTypeVector

Definition at line 21 of file RemovalBaseTool.h.

Constructor & Destructor Documentation

lar_content::RemovalBaseTool::RemovalBaseTool ( )

Default constructor.

Definition at line 20 of file RemovalBaseTool.cc.

20  :
21  m_minSeparation(1.f),
23 {
24 }
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...
TFile f
Definition: plotHisto.C:6

Member Function Documentation

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
pClusterthe address of the input cluster containing the hits to be investigated
lowerBoundarythe start position of the line
upperBoundarythe end position of the line
collectedHitsthe collected hits

Definition at line 152 of file RemovalBaseTool.cc.

References IsCloseToLine(), IsInLineSegment(), and m_distanceToLine.

Referenced by lar_content::DeltaRayRemovalTool::IsContaminated().

154 {
155  CaloHitList caloHitList;
156  pCluster->GetOrderedCaloHitList().FillCaloHitList(caloHitList);
157 
158  for (const CaloHit *const pCaloHit : caloHitList)
159  {
160  if (!this->IsInLineSegment(lowerBoundary, upperBoundary, pCaloHit->GetPositionVector()))
161  continue;
162 
163  if (!this->IsCloseToLine(pCaloHit->GetPositionVector(), lowerBoundary, upperBoundary, m_distanceToLine))
164  continue;
165 
166  collectedHits.push_back(pCaloHit);
167  }
168 }
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
elementthe tensor element
hitTypethe hit type of the cluster under investigation
elementListthe tensor element list
modifiedClustersthe set of modified clusters
Returns
whether the input element is the best element

Definition at line 78 of file RemovalBaseTool.cc.

References PassElementChecks().

Referenced by lar_content::CosmicRayRemovalTool::RemoveCosmicRayHits(), and lar_content::DeltaRayRemovalTool::RemoveDeltaRayHits().

80 {
81  const float chiSquared(element.GetOverlapResult().GetReducedChi2());
82  const unsigned int hitSum(element.GetClusterU()->GetNCaloHits() + element.GetClusterV()->GetNCaloHits() + element.GetClusterW()->GetNCaloHits());
83 
84  for (const TensorType::Element &testElement : elementList)
85  {
86  if (modifiedClusters.count(testElement.GetClusterU()) || modifiedClusters.count(testElement.GetClusterV()) ||
87  modifiedClusters.count(testElement.GetClusterW()))
88  continue;
89 
90  if (testElement.GetCluster(hitType) != element.GetCluster(hitType))
91  continue;
92 
93  if ((testElement.GetClusterU() == element.GetClusterU()) && (testElement.GetClusterV() == element.GetClusterV()) &&
94  (testElement.GetClusterW() == element.GetClusterW()))
95  continue;
96 
97  const unsigned int testHitSum(
98  testElement.GetClusterU()->GetNCaloHits() + testElement.GetClusterV()->GetNCaloHits() + testElement.GetClusterW()->GetNCaloHits());
99  const float testChiSquared(testElement.GetOverlapResult().GetReducedChi2());
100 
101  if ((testHitSum < hitSum) || ((testHitSum == hitSum) && (testChiSquared > chiSquared)))
102  continue;
103 
104  if (this->PassElementChecks(testElement, hitType))
105  return false;
106  }
107 
108  return true;
109 }
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
hitPositionthe input position
lineStartthe start position of the line
lineEndthe end position of the line
distanceToLinethe definition of close
Returns
whether the position is close to the definied line

Definition at line 113 of file RemovalBaseTool.cc.

Referenced by FindExtrapolatedHits(), and lar_content::CosmicRayRemovalTool::IsContaminated().

115 {
116  CartesianVector lineDirection(lineStart - lineEnd);
117  lineDirection = lineDirection.GetUnitVector();
118 
119  const float transverseDistanceFromLine(lineDirection.GetCrossProduct(hitPosition - lineStart).GetMagnitude());
120 
121  if (transverseDistanceFromLine > distanceToLine)
122  return false;
123 
124  return true;
125 }
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
lowerBoundarythe start position of the line
upperBoundarythe end position of the line
pointthe input position
Returns
whether the position lies between the two points

Definition at line 129 of file RemovalBaseTool.cc.

Referenced by FindExtrapolatedHits(), and lar_content::CosmicRayRemovalTool::IsContaminated().

130 {
131  const float segmentBoundaryGradient = (-1.f) * (upperBoundary.GetX() - lowerBoundary.GetX()) / (upperBoundary.GetZ() - lowerBoundary.GetZ());
132  const float xPointOnUpperLine((point.GetZ() - upperBoundary.GetZ()) / segmentBoundaryGradient + upperBoundary.GetX());
133  const float xPointOnLowerLine((point.GetZ() - lowerBoundary.GetZ()) / segmentBoundaryGradient + lowerBoundary.GetX());
134 
135  if (std::fabs(xPointOnUpperLine - point.GetX()) < std::numeric_limits<float>::epsilon())
136  return true;
137 
138  if (std::fabs(xPointOnLowerLine - point.GetX()) < std::numeric_limits<float>::epsilon())
139  return true;
140 
141  if ((point.GetX() > xPointOnUpperLine) && (point.GetX() > xPointOnLowerLine))
142  return false;
143 
144  if ((point.GetX() < xPointOnUpperLine) && (point.GetX() < xPointOnLowerLine))
145  return false;
146 
147  return true;
148 }
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
elementthe tensor element
ignoreHitTypewhether to ignore the cluster under investigation
hitTypeToIgnorethe hit type to ignore
Returns
whether the delta ray is at the endpoint of the cosmic ray

Definition at line 42 of file RemovalBaseTool.cc.

References lar_content::NViewDeltaRayMatchingAlgorithm< T >::GetMuonCluster(), and lar_content::DeltaRayTensorTool::m_pParentAlgorithm.

Referenced by lar_content::DeltaRayRemovalTool::PassElementChecks(), and lar_content::CosmicRayRemovalTool::PassElementChecks().

43 {
44  for (const HitType hitType : {TPC_VIEW_U, TPC_VIEW_V, TPC_VIEW_W})
45  {
46  if (ignoreHitType && (hitType == hitTypeToIgnore))
47  continue;
48 
49  const Cluster *pMuonCluster(nullptr), *const pDeltaRayCluster(element.GetCluster(hitType));
50 
51  if (m_pParentAlgorithm->GetMuonCluster(element.GetOverlapResult().GetCommonMuonPfoList(), hitType, pMuonCluster) != STATUS_CODE_SUCCESS)
52  return true;
53 
54  float xMinDR(-std::numeric_limits<float>::max()), xMaxDR(+std::numeric_limits<float>::max());
55  pDeltaRayCluster->GetClusterSpanX(xMinDR, xMaxDR);
56 
57  float xMinCR(-std::numeric_limits<float>::max()), xMaxCR(+std::numeric_limits<float>::max());
58  pMuonCluster->GetClusterSpanX(xMinCR, xMaxCR);
59 
60  if ((xMinDR < xMinCR) || (xMaxDR > xMaxCR))
61  return true;
62 
63  float zMinDR(-std::numeric_limits<float>::max()), zMaxDR(+std::numeric_limits<float>::max());
64  pDeltaRayCluster->GetClusterSpanZ(xMinDR, xMaxDR, zMinDR, zMaxDR);
65 
66  float zMinCR(-std::numeric_limits<float>::max()), zMaxCR(+std::numeric_limits<float>::max());
67  pMuonCluster->GetClusterSpanZ(xMinCR, xMaxCR, zMinCR, zMaxCR);
68 
69  if ((zMinDR < zMinCR) || (zMaxDR > zMaxCR))
70  return true;
71  }
72 
73  return false;
74 }
ThreeViewDeltaRayMatchingAlgorithm * m_pParentAlgorithm
Address of the parent matching algorithm.
HitType
Definition: HitType.h:12
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
elementthe tensor element
hitTypethe hit type of the cluster under investigation
Returns
whether the checks pass

Implemented in lar_content::CosmicRayRemovalTool, and lar_content::DeltaRayRemovalTool.

Definition at line 28 of file RemovalBaseTool.cc.

References lar_content::LArClusterHelper::GetClosestDistance(), lar_content::NViewDeltaRayMatchingAlgorithm< T >::GetMuonCluster(), m_minSeparation, and lar_content::DeltaRayTensorTool::m_pParentAlgorithm.

Referenced by IsBestElement(), lar_content::DeltaRayRemovalTool::PassElementChecks(), and lar_content::CosmicRayRemovalTool::PassElementChecks().

29 {
30  const Cluster *pMuonCluster(nullptr), *const pDeltaRayCluster(element.GetCluster(hitType));
31 
32  if (m_pParentAlgorithm->GetMuonCluster(element.GetOverlapResult().GetCommonMuonPfoList(), hitType, pMuonCluster) != STATUS_CODE_SUCCESS)
33  return false;
34 
35  const float separation(LArClusterHelper::GetClosestDistance(pDeltaRayCluster, pMuonCluster));
36 
37  return separation <= m_minSeparation;
38 }
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
elementthe tensor element
hitTypethe view to be projected into
projectedPositionsthe output list of projected positions
Returns
a status code reflecting whether the procedure ran smoothly and if the outcome is good

Definition at line 172 of file RemovalBaseTool.cc.

References lar_content::NViewDeltaRayMatchingAlgorithm< T >::GetProjectedPositions(), and lar_content::DeltaRayTensorTool::m_pParentAlgorithm.

Referenced by lar_content::CosmicRayRemovalTool::CreateSeed().

173 {
174  HitTypeVector hitTypes({TPC_VIEW_U, TPC_VIEW_V, TPC_VIEW_W});
175 
176  hitTypes.erase(std::find(hitTypes.begin(), hitTypes.end(), hitType));
177 
178  const Cluster *const pCluster1(element.GetCluster(hitTypes[0]));
179  const Cluster *const pCluster2(element.GetCluster(hitTypes[1]));
180 
181  return m_pParentAlgorithm->GetProjectedPositions(pCluster1, pCluster2, projectedPositions);
182 }
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 186 of file RemovalBaseTool.cc.

References m_distanceToLine, and m_minSeparation.

Referenced by lar_content::CosmicRayRemovalTool::ReadSettings().

187 {
188  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MinSeparation", m_minSeparation));
189 
190  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "DistanceToLine", m_distanceToLine));
191 
192  return STATUS_CODE_SUCCESS;
193 }
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...
virtual bool lar_content::RemovalBaseTool::Run ( ThreeViewDeltaRayMatchingAlgorithm *const  pAlgorithm,
TensorType overlapTensor 
)
protectedpure virtual

Run the algorithm tool.

Parameters
pAlgorithmaddress of the calling algorithm
overlapTensorthe overlap tensor
Returns
whether changes have been made by the tool

Implements lar_content::DeltaRayTensorTool.

Implemented in lar_content::CosmicRayRemovalTool, and lar_content::DeltaRayRemovalTool.

Member Data Documentation

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.

Referenced by FindExtrapolatedHits(), lar_content::CosmicRayRemovalTool::IsContaminated(), and ReadSettings().

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.

Referenced by PassElementChecks(), and ReadSettings().


The documentation for this class was generated from the following files: