Public Member Functions | Private Member Functions | Private Attributes | List of all members
lar_content::DeltaRayRemovalTool Class Reference

DeltaRayRemovalTool class. More...

#include <DeltaRayRemovalTool.h>

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

Public Member Functions

 DeltaRayRemovalTool ()
 Default constructor. More...
 
- Public Member Functions inherited from lar_content::RemovalBaseTool
 RemovalBaseTool ()
 Default constructor. More...
 

Private Member Functions

bool Run (ThreeViewDeltaRayMatchingAlgorithm *const pAlgorithm, TensorType &overlapTensor)
 Run the algorithm tool. More...
 
pandora::StatusCode ReadSettings (const pandora::TiXmlHandle xmlHandle)
 
bool RemoveDeltaRayHits (const TensorType::ElementList &elementList) const
 Remove hits from cosmic ray clusters that belong to a child delta ray. More...
 
virtual bool PassElementChecks (const TensorType::Element &element, const pandora::HitType hitType) const
 Determine whether element satifies simple checks. More...
 
bool IsContaminated (const TensorType::Element &element, const pandora::HitType hitType) const
 Determine whether the cosmic ray cluster under investigation has delta ray contamination. More...
 
void SplitMuonCluster (const TensorType::Element &element, const pandora::HitType hitType, const pandora::CaloHitList &deltaRayHits) const
 Remove collected delta ray hits from the cosmic ray pfo. More...
 

Private Attributes

unsigned int m_slidingFitWindow
 The sliding fit window used in cosmic ray parameterisations. More...
 
float m_minDeviationFromTransverse
 The minimum deviation from transverse required to avoid mistakes. More...
 
float m_contaminationWindow
 The distance in which to search for delta ray contamination in the cosmic ray track. More...
 
unsigned int m_significantHitThreshold
 The threshold number of hits which define significant contimination. More...
 
float m_minDistanceFromMuon
 The minimum distance of a hit from the cosmic ray track required for removal. More...
 
float m_maxDistanceToCollected
 The maximim distance of a hit from the projected delta ray hits required for removal. More...
 

Additional Inherited Members

- Public Types inherited from lar_content::RemovalBaseTool
typedef std::vector< pandora::HitType > HitTypeVector
 
- Public Types inherited from lar_content::DeltaRayTensorTool
typedef ThreeViewDeltaRayMatchingAlgorithm::MatchingType::TensorType TensorType
 
typedef std::vector< TensorType::ElementList::const_iteratorIteratorList
 
- Public Attributes inherited from lar_content::DeltaRayTensorTool
ThreeViewDeltaRayMatchingAlgorithmm_pParentAlgorithm
 Address of the parent matching algorithm. More...
 
- Protected Member Functions inherited from lar_content::RemovalBaseTool
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...
 
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 inherited from lar_content::RemovalBaseTool
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

DeltaRayRemovalTool class.

Definition at line 19 of file DeltaRayRemovalTool.h.

Constructor & Destructor Documentation

lar_content::DeltaRayRemovalTool::DeltaRayRemovalTool ( )

Default constructor.

Definition at line 23 of file DeltaRayRemovalTool.cc.

23  :
24  m_slidingFitWindow(10000),
30 {
31 }
unsigned int m_slidingFitWindow
The sliding fit window used in cosmic ray parameterisations.
float m_contaminationWindow
The distance in which to search for delta ray contamination in the cosmic ray track.
float m_minDistanceFromMuon
The minimum distance of a hit from the cosmic ray track required for removal.
float m_minDeviationFromTransverse
The minimum deviation from transverse required to avoid mistakes.
float m_maxDistanceToCollected
The maximim distance of a hit from the projected delta ray hits required for removal.
unsigned int m_significantHitThreshold
The threshold number of hits which define significant contimination.

Member Function Documentation

bool lar_content::DeltaRayRemovalTool::IsContaminated ( const TensorType::Element &  element,
const pandora::HitType  hitType 
) const
private

Determine whether the cosmic ray cluster under investigation has delta ray contamination.

Parameters
elementthe tensor element
hitTypethe hit type of the view under investigation
Returns
whether the cosmic ray cluster is likely to contain delta ray hits that can be removed

Definition at line 126 of file DeltaRayRemovalTool.cc.

127 {
128  const Cluster *pMuonCluster(nullptr), *const pDeltaRayCluster(element.GetCluster(hitType));
129 
130  if (m_pParentAlgorithm->GetMuonCluster(element.GetOverlapResult().GetCommonMuonPfoList(), hitType, pMuonCluster) != STATUS_CODE_SUCCESS)
131  return false;
132 
133  const float slidingFitPitch(LArGeometryHelper::GetWireZPitch(this->GetPandora()));
134  const TwoDSlidingFitResult slidingFitResult(pMuonCluster, m_slidingFitWindow, slidingFitPitch);
135 
136  CartesianVector muonDirection(0.f, 0.f, 0.f);
137  slidingFitResult.GetGlobalDirection(slidingFitResult.GetLayerFitResultMap().begin()->second.GetGradient(), muonDirection);
138 
139  const CartesianVector xAxis(1.f, 0.f, 0.f);
140  const bool isTransverse((muonDirection.GetOpeningAngle(xAxis) < m_minDeviationFromTransverse) ||
141  ((M_PI - muonDirection.GetOpeningAngle(xAxis)) < m_minDeviationFromTransverse));
142 
143  if (isTransverse)
144  return false;
145 
146  CartesianVector deltaRayVertex(0.f, 0.f, 0.f), muonVertex(0.f, 0.f, 0.f);
147  LArClusterHelper::GetClosestPositions(pDeltaRayCluster, pMuonCluster, deltaRayVertex, muonVertex);
148 
149  CaloHitList minusMuonHits, minusDeltaRayHits, plusMuonHits, plusDeltaRayHits;
150  const CartesianVector minusPosition(muonVertex - (muonDirection * m_contaminationWindow));
151  const CartesianVector plusPosition(muonVertex + (muonDirection * m_contaminationWindow));
152 
153  this->FindExtrapolatedHits(pMuonCluster, muonVertex, minusPosition, minusMuonHits);
154  this->FindExtrapolatedHits(pMuonCluster, muonVertex, plusPosition, plusMuonHits);
155  this->FindExtrapolatedHits(pDeltaRayCluster, muonVertex, minusPosition, minusDeltaRayHits);
156  this->FindExtrapolatedHits(pDeltaRayCluster, muonVertex, plusPosition, plusDeltaRayHits);
157 
158  if ((minusMuonHits.size() < m_significantHitThreshold) && (plusMuonHits.size() < m_significantHitThreshold))
159  return true;
160 
161  if ((minusMuonHits.size() < m_significantHitThreshold) && (minusDeltaRayHits.size() >= m_significantHitThreshold) &&
162  (plusDeltaRayHits.size() < m_significantHitThreshold) && (plusMuonHits.size() >= m_significantHitThreshold))
163  {
164  return true;
165  }
166 
167  if ((plusMuonHits.size() < m_significantHitThreshold) && (plusDeltaRayHits.size() >= m_significantHitThreshold) &&
168  (minusDeltaRayHits.size() < m_significantHitThreshold) && (minusMuonHits.size() >= m_significantHitThreshold))
169  {
170  return true;
171  }
172 
173  return false;
174 }
unsigned int m_slidingFitWindow
The sliding fit window used in cosmic ray parameterisations.
float m_contaminationWindow
The distance in which to search for delta ray contamination in the cosmic ray track.
ThreeViewDeltaRayMatchingAlgorithm * m_pParentAlgorithm
Address of the parent matching algorithm.
static void GetClosestPositions(const pandora::Cluster *const pCluster1, const pandora::Cluster *const pCluster2, pandora::CartesianVector &position1, pandora::CartesianVector &position2)
Get pair of closest positions for a pair of clusters.
static float GetWireZPitch(const pandora::Pandora &pandora, const float maxWirePitchDiscrepancy=0.01)
Return the wire pitch.
float m_minDeviationFromTransverse
The minimum deviation from transverse required to avoid mistakes.
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.
#define M_PI
Definition: includeROOT.h:54
unsigned int m_significantHitThreshold
The threshold number of hits which define significant contimination.
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::DeltaRayRemovalTool::PassElementChecks ( const TensorType::Element &  element,
const pandora::HitType  hitType 
) const
privatevirtual

Determine whether element satifies simple checks.

Parameters
elementthe tensor element
hitTypethe hit type of the cluster under investigation
Returns
whether the checks pass

Implements lar_content::RemovalBaseTool.

Definition at line 115 of file DeltaRayRemovalTool.cc.

116 {
117  // ATTN: Avoid endpoints, topological michel reconstruction is very ambiguous
118  if (this->IsMuonEndpoint(element, false))
119  return false;
120 
121  return RemovalBaseTool::PassElementChecks(element, hitType);
122 }
virtual bool PassElementChecks(const TensorType::Element &element, const pandora::HitType hitType) const =0
Determine whether element satifies simple checks.
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 ra...
StatusCode lar_content::DeltaRayRemovalTool::ReadSettings ( const pandora::TiXmlHandle  xmlHandle)
privatevirtual

Implements lar_content::RemovalBaseTool.

Definition at line 201 of file DeltaRayRemovalTool.cc.

202 {
203  PANDORA_RETURN_RESULT_IF_AND_IF(
204  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "SlidingFitWindow", m_slidingFitWindow));
205 
206  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
207  XmlHelper::ReadValue(xmlHandle, "MinDeviationFromTransverse", m_minDeviationFromTransverse));
208 
209  PANDORA_RETURN_RESULT_IF_AND_IF(
210  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "ContaminationWindow", m_contaminationWindow));
211 
212  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
213  XmlHelper::ReadValue(xmlHandle, "SignificantHitThreshold", m_significantHitThreshold));
214 
215  PANDORA_RETURN_RESULT_IF_AND_IF(
216  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MinDistanceFromMuon", m_minDistanceFromMuon));
217 
218  PANDORA_RETURN_RESULT_IF_AND_IF(
219  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MaxDistanceToCollected", m_maxDistanceToCollected));
220 
221  return STATUS_CODE_SUCCESS;
222 }
unsigned int m_slidingFitWindow
The sliding fit window used in cosmic ray parameterisations.
float m_contaminationWindow
The distance in which to search for delta ray contamination in the cosmic ray track.
float m_minDistanceFromMuon
The minimum distance of a hit from the cosmic ray track required for removal.
float m_minDeviationFromTransverse
The minimum deviation from transverse required to avoid mistakes.
float m_maxDistanceToCollected
The maximim distance of a hit from the projected delta ray hits required for removal.
unsigned int m_significantHitThreshold
The threshold number of hits which define significant contimination.
bool lar_content::DeltaRayRemovalTool::RemoveDeltaRayHits ( const TensorType::ElementList elementList) const
private

Remove hits from cosmic ray clusters that belong to a child delta ray.

Parameters
elementListthe tensor element list
Returns
changesMade whether clusters in element have been modified

Definition at line 69 of file DeltaRayRemovalTool.cc.

70 {
71  ClusterSet modifiedClusters, checkedClusters;
72 
73  for (const TensorType::Element &element : elementList)
74  {
75  for (const HitType hitType : {TPC_VIEW_U, TPC_VIEW_V, TPC_VIEW_W})
76  {
77  const Cluster *pDeltaRayCluster(element.GetCluster(hitType));
78  const ParticleFlowObject *const pMuonPfo(element.GetOverlapResult().GetCommonMuonPfoList().front());
79 
80  if (checkedClusters.count(pDeltaRayCluster))
81  continue;
82 
83  // ATTN: The underlying tensor will update during this loop, do not proceed if element has been modified
84  if ((modifiedClusters.count(element.GetClusterU())) || (modifiedClusters.count(element.GetClusterV())) ||
85  (modifiedClusters.count(element.GetClusterW())))
86  continue;
87 
88  if (!this->PassElementChecks(element, hitType))
89  continue;
90 
91  if (!this->IsContaminated(element, hitType))
92  continue;
93 
94  if (!this->IsBestElement(element, hitType, elementList, modifiedClusters))
95  continue;
96 
97  checkedClusters.insert(pDeltaRayCluster);
98 
99  CaloHitList deltaRayHits;
100  if (m_pParentAlgorithm->CollectHitsFromMuon(nullptr, nullptr, pDeltaRayCluster, pMuonPfo, m_minDistanceFromMuon,
101  m_maxDistanceToCollected, deltaRayHits) != STATUS_CODE_SUCCESS)
102  continue;
103 
104  modifiedClusters.insert(pDeltaRayCluster);
105 
106  this->SplitMuonCluster(element, hitType, deltaRayHits);
107  }
108  }
109 
110  return !modifiedClusters.empty();
111 }
pandora::StatusCode CollectHitsFromMuon(const pandora::Cluster *const pCluster1, const pandora::Cluster *const pCluster2, const pandora::Cluster *const pThirdViewCluster, const pandora::ParticleFlowObject *const pParentMuon, const float minDistanceFromMuon, const float maxDistanceToCollected, pandora::CaloHitList &collectedHits) const
In one view, pull out any hits from a cosmic ray cluster that belong to the child delta ray cluster...
enum cvn::HType HitType
bool IsContaminated(const TensorType::Element &element, const pandora::HitType hitType) const
Determine whether the cosmic ray cluster under investigation has delta ray contamination.
ThreeViewDeltaRayMatchingAlgorithm * m_pParentAlgorithm
Address of the parent matching algorithm.
float m_minDistanceFromMuon
The minimum distance of a hit from the cosmic ray track required for removal.
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 de...
float m_maxDistanceToCollected
The maximim distance of a hit from the projected delta ray hits required for removal.
void SplitMuonCluster(const TensorType::Element &element, const pandora::HitType hitType, const pandora::CaloHitList &deltaRayHits) const
Remove collected delta ray hits from the cosmic ray pfo.
virtual bool PassElementChecks(const TensorType::Element &element, const pandora::HitType hitType) const
Determine whether element satifies simple checks.
bool lar_content::DeltaRayRemovalTool::Run ( ThreeViewDeltaRayMatchingAlgorithm *const  pAlgorithm,
TensorType overlapTensor 
)
privatevirtual

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

Definition at line 35 of file DeltaRayRemovalTool.cc.

36 {
37  m_pParentAlgorithm = pAlgorithm;
38 
39  if (PandoraContentApi::GetSettings(*m_pParentAlgorithm)->ShouldDisplayAlgorithmInfo())
40  std::cout << "----> Running Algorithm Tool: " << this->GetInstanceName() << ", " << this->GetType() << std::endl;
41 
42  bool changesMade(false);
43 
44  ClusterVector sortedKeyClusters;
45  overlapTensor.GetSortedKeyClusters(sortedKeyClusters);
46 
47  ClusterSet usedKeyClusters;
48  for (const Cluster *const pKeyCluster : sortedKeyClusters)
49  {
50  if (usedKeyClusters.count(pKeyCluster))
51  continue;
52 
53  TensorType::ElementList elementList;
54  overlapTensor.GetConnectedElements(pKeyCluster, true, elementList);
55 
56  for (const TensorType::Element &element : elementList)
57  usedKeyClusters.insert(element.GetClusterU());
58 
59  const bool changesMadeInIteration = this->RemoveDeltaRayHits(elementList);
60 
61  changesMade = (changesMade ? changesMade : changesMadeInIteration);
62  }
63 
64  return changesMade;
65 }
ThreeViewDeltaRayMatchingAlgorithm * m_pParentAlgorithm
Address of the parent matching algorithm.
std::vector< art::Ptr< recob::Cluster > > ClusterVector
QTextStream & endl(QTextStream &s)
bool RemoveDeltaRayHits(const TensorType::ElementList &elementList) const
Remove hits from cosmic ray clusters that belong to a child delta ray.
void lar_content::DeltaRayRemovalTool::SplitMuonCluster ( const TensorType::Element &  element,
const pandora::HitType  hitType,
const pandora::CaloHitList &  deltaRayHits 
) const
private

Remove collected delta ray hits from the cosmic ray pfo.

Parameters
elementthe tensor element
hitTypethe hit type of the cluster under investigation
deltaRayHitsthe list of delta ray hits to remove

Definition at line 178 of file DeltaRayRemovalTool.cc.

179 {
180  const Cluster *pDeltaRayCluster(element.GetCluster(hitType)), *pMuonCluster(nullptr);
181 
182  if (m_pParentAlgorithm->GetMuonCluster(element.GetOverlapResult().GetCommonMuonPfoList(), hitType, pMuonCluster) != STATUS_CODE_SUCCESS)
183  throw StatusCodeException(STATUS_CODE_FAILURE);
184 
185  m_pParentAlgorithm->UpdateUponDeletion(pMuonCluster);
186  m_pParentAlgorithm->UpdateUponDeletion(pDeltaRayCluster);
187 
188  m_pParentAlgorithm->SplitMuonCluster(m_pParentAlgorithm->GetClusterListName(hitType), pMuonCluster, deltaRayHits, pDeltaRayCluster);
189 
190  ClusterVector clusterVector;
191  PfoVector pfoVector;
192  clusterVector.push_back(pMuonCluster);
193  pfoVector.push_back(element.GetOverlapResult().GetCommonMuonPfoList().front());
194  clusterVector.push_back(pDeltaRayCluster);
195  pfoVector.push_back(nullptr);
196  m_pParentAlgorithm->UpdateForNewClusters(clusterVector, pfoVector);
197 }
void UpdateForNewClusters(const pandora::ClusterVector &newClusterVector, const pandora::PfoVector &pfoVector)
Add a new cluster to algorithm ownership maps and, if it a delta ray cluster, to the underlying match...
ThreeViewDeltaRayMatchingAlgorithm * m_pParentAlgorithm
Address of the parent matching algorithm.
void UpdateUponDeletion(const pandora::Cluster *const pDeletedCluster)
Update to reflect cluster deletion.
void SplitMuonCluster(const std::string &clusterListName, const pandora::Cluster *const pMuonCluster, const pandora::CaloHitList &collectedHits, const pandora::Cluster *&pDeltaRayCluster) const
Move a list of hits from a cosmic ray cluster into the given child delta ray cluster.
const std::string & GetClusterListName(const pandora::HitType hitType) const
Get the cluster list name corresponding to a specified hit type.
std::vector< art::Ptr< recob::Cluster > > ClusterVector
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...

Member Data Documentation

float lar_content::DeltaRayRemovalTool::m_contaminationWindow
private

The distance in which to search for delta ray contamination in the cosmic ray track.

Definition at line 71 of file DeltaRayRemovalTool.h.

float lar_content::DeltaRayRemovalTool::m_maxDistanceToCollected
private

The maximim distance of a hit from the projected delta ray hits required for removal.

Definition at line 74 of file DeltaRayRemovalTool.h.

float lar_content::DeltaRayRemovalTool::m_minDeviationFromTransverse
private

The minimum deviation from transverse required to avoid mistakes.

Definition at line 70 of file DeltaRayRemovalTool.h.

float lar_content::DeltaRayRemovalTool::m_minDistanceFromMuon
private

The minimum distance of a hit from the cosmic ray track required for removal.

Definition at line 73 of file DeltaRayRemovalTool.h.

unsigned int lar_content::DeltaRayRemovalTool::m_significantHitThreshold
private

The threshold number of hits which define significant contimination.

Definition at line 72 of file DeltaRayRemovalTool.h.

unsigned int lar_content::DeltaRayRemovalTool::m_slidingFitWindow
private

The sliding fit window used in cosmic ray parameterisations.

Definition at line 69 of file DeltaRayRemovalTool.h.


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