LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
lar_content::ShowerTensorVisualizationTool Class Reference

ShowerTensorVisualizationTool class. More...

#include "ShowerTensorVisualizationTool.h"

Inheritance diagram for lar_content::ShowerTensorVisualizationTool:
lar_content::ShowerTensorTool

Public Types

typedef ThreeViewShowersAlgorithm::MatchingType::TensorType TensorType
 
typedef std::vector< TensorType::ElementList::const_iteratorIteratorList
 

Public Member Functions

 ShowerTensorVisualizationTool ()
 Default constructor. More...
 
bool Run (ThreeViewShowersAlgorithm *const pAlgorithm, TensorType &overlapTensor)
 Run the algorithm tool. More...
 

Private Member Functions

pandora::StatusCode ReadSettings (const pandora::TiXmlHandle xmlHandle)
 

Private Attributes

unsigned int m_minClusterConnections
 The minimum number of cluster connections for display. More...
 
bool m_ignoreUnavailableClusters
 Whether to ignore (skip-over) unavailable clusters in the tensor. More...
 
bool m_showEachIndividualElement
 Whether to draw each individual tensor element. More...
 
bool m_showContext
 Whether to show input cluster lists to add context to tensor elements. More...
 

Detailed Description

Member Typedef Documentation

Constructor & Destructor Documentation

lar_content::ShowerTensorVisualizationTool::ShowerTensorVisualizationTool ( )

Default constructor.

Definition at line 18 of file ShowerTensorVisualizationTool.cc.

18  :
22  m_showContext(false)
23 {
24 }
unsigned int m_minClusterConnections
The minimum number of cluster connections for display.
bool m_ignoreUnavailableClusters
Whether to ignore (skip-over) unavailable clusters in the tensor.
bool m_showEachIndividualElement
Whether to draw each individual tensor element.
bool m_showContext
Whether to show input cluster lists to add context to tensor elements.

Member Function Documentation

StatusCode lar_content::ShowerTensorVisualizationTool::ReadSettings ( const pandora::TiXmlHandle  xmlHandle)
private

Definition at line 112 of file ShowerTensorVisualizationTool.cc.

References m_ignoreUnavailableClusters, m_minClusterConnections, m_showContext, and m_showEachIndividualElement.

113 {
114  PANDORA_RETURN_RESULT_IF_AND_IF(
115  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "MinClusterConnections", m_minClusterConnections));
116 
117  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
118  XmlHelper::ReadValue(xmlHandle, "IgnoreUnavailableClusters", m_ignoreUnavailableClusters));
119 
120  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=,
121  XmlHelper::ReadValue(xmlHandle, "ShowEachIndividualElement", m_showEachIndividualElement));
122 
123  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "ShowContext", m_showContext));
124 
125  return STATUS_CODE_SUCCESS;
126 }
unsigned int m_minClusterConnections
The minimum number of cluster connections for display.
bool m_ignoreUnavailableClusters
Whether to ignore (skip-over) unavailable clusters in the tensor.
bool m_showEachIndividualElement
Whether to draw each individual tensor element.
bool m_showContext
Whether to show input cluster lists to add context to tensor elements.
bool lar_content::ShowerTensorVisualizationTool::Run ( ThreeViewShowersAlgorithm *const  pAlgorithm,
TensorType overlapTensor 
)
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::ShowerTensorTool.

Definition at line 28 of file ShowerTensorVisualizationTool.cc.

References util::abs(), util::counter(), f, lar_content::OverlapTensor< T >::GetConnectedElements(), lar_content::NViewMatchingAlgorithm< T >::GetInputClusterList(), lar_content::OverlapTensor< T >::GetSortedKeyClusters(), m_ignoreUnavailableClusters, m_minClusterConnections, m_showContext, and m_showEachIndividualElement.

29 {
30  if (PandoraContentApi::GetSettings(*pAlgorithm)->ShouldDisplayAlgorithmInfo())
31  std::cout << "----> Running Algorithm Tool: " << this->GetInstanceName() << ", " << this->GetType() << std::endl;
32 
33  ClusterSet usedKeyClusters;
34  ClusterVector sortedKeyClusters;
35  overlapTensor.GetSortedKeyClusters(sortedKeyClusters);
36 
37  for (const Cluster *const pKeyCluster : sortedKeyClusters)
38  {
39  if (m_ignoreUnavailableClusters && !pKeyCluster->IsAvailable())
40  continue;
41 
42  if (usedKeyClusters.count(pKeyCluster))
43  continue;
44 
45  unsigned int nU(0), nV(0), nW(0);
46  TensorType::ElementList elementList;
47  overlapTensor.GetConnectedElements(pKeyCluster, m_ignoreUnavailableClusters, elementList, nU, nV, nW);
48 
50  continue;
51 
52  if (nU * nV * nW == 0)
53  continue;
54 
55  int counter(0);
56  ClusterList allClusterListU, allClusterListV, allClusterListW;
57  std::cout << " Connections: nU " << nU << ", nV " << nV << ", nW " << nW << ", nElements " << elementList.size() << std::endl;
58 
59  for (TensorType::ElementList::const_iterator eIter = elementList.begin(); eIter != elementList.end(); ++eIter)
60  {
61  if (allClusterListU.end() == std::find(allClusterListU.begin(), allClusterListU.end(), eIter->GetClusterU()))
62  allClusterListU.push_back(eIter->GetClusterU());
63  if (allClusterListV.end() == std::find(allClusterListV.begin(), allClusterListV.end(), eIter->GetClusterV()))
64  allClusterListV.push_back(eIter->GetClusterV());
65  if (allClusterListW.end() == std::find(allClusterListW.begin(), allClusterListW.end(), eIter->GetClusterW()))
66  allClusterListW.push_back(eIter->GetClusterW());
67  usedKeyClusters.insert(eIter->GetClusterU());
68 
69  std::cout << " Element " << counter++ << ": MatchedFraction " << eIter->GetOverlapResult().GetMatchedFraction()
70  << ", MatchedSamplingPoints " << eIter->GetOverlapResult().GetNMatchedSamplingPoints() << ", xSpanU "
71  << eIter->GetOverlapResult().GetXOverlap().GetXSpanU() << ", xSpanV " << eIter->GetOverlapResult().GetXOverlap().GetXSpanV()
72  << ", xSpanW " << eIter->GetOverlapResult().GetXOverlap().GetXSpanW() << ", xOverlapSpan "
73  << eIter->GetOverlapResult().GetXOverlap().GetXOverlapSpan() << ", Availability (" << eIter->GetClusterU()->IsAvailable()
74  << eIter->GetClusterV()->IsAvailable() << eIter->GetClusterW()->IsAvailable() << ") "
75  << ", TrackFlags (" << (MU_MINUS == std::abs(eIter->GetClusterU()->GetParticleId()))
76  << (MU_MINUS == std::abs(eIter->GetClusterV()->GetParticleId()))
77  << (MU_MINUS == std::abs(eIter->GetClusterW()->GetParticleId())) << ") " << std::endl;
78 
80  {
81  const ClusterList clusterListU(1, eIter->GetClusterU()), clusterListV(1, eIter->GetClusterV()),
82  clusterListW(1, eIter->GetClusterW());
83  PANDORA_MONITORING_API(SetEveDisplayParameters(this->GetPandora(), false, DETECTOR_VIEW_XZ, -1.f, -1.f, 1.f));
84  PANDORA_MONITORING_API(VisualizeClusters(this->GetPandora(), &clusterListU, "UCluster", RED));
85  PANDORA_MONITORING_API(VisualizeClusters(this->GetPandora(), &clusterListV, "VCluster", GREEN));
86  PANDORA_MONITORING_API(VisualizeClusters(this->GetPandora(), &clusterListW, "WCluster", BLUE));
87  PANDORA_MONITORING_API(ViewEvent(this->GetPandora()));
88  }
89  }
90 
91  std::cout << " All Connected Clusters " << std::endl;
92  PANDORA_MONITORING_API(SetEveDisplayParameters(this->GetPandora(), false, DETECTOR_VIEW_XZ, -1.f, -1.f, 1.f));
93  PANDORA_MONITORING_API(VisualizeClusters(this->GetPandora(), &allClusterListU, "AllUClusters", RED));
94  PANDORA_MONITORING_API(VisualizeClusters(this->GetPandora(), &allClusterListV, "AllVClusters", GREEN));
95  PANDORA_MONITORING_API(VisualizeClusters(this->GetPandora(), &allClusterListW, "AllWClusters", BLUE));
96 
97  if (m_showContext)
98  {
99  PANDORA_MONITORING_API(VisualizeClusters(this->GetPandora(), &(pAlgorithm->GetInputClusterList(TPC_VIEW_U)), "InputClusterListU", GRAY));
100  PANDORA_MONITORING_API(VisualizeClusters(this->GetPandora(), &(pAlgorithm->GetInputClusterList(TPC_VIEW_V)), "InputClusterListV", GRAY));
101  PANDORA_MONITORING_API(VisualizeClusters(this->GetPandora(), &(pAlgorithm->GetInputClusterList(TPC_VIEW_W)), "InputClusterListW", GRAY));
102  }
103 
104  PANDORA_MONITORING_API(ViewEvent(this->GetPandora()));
105  }
106 
107  return false;
108 }
unsigned int m_minClusterConnections
The minimum number of cluster connections for display.
constexpr auto abs(T v)
Returns the absolute value of the argument.
intermediate_table::const_iterator const_iterator
TFile f
Definition: plotHisto.C:6
bool m_ignoreUnavailableClusters
Whether to ignore (skip-over) unavailable clusters in the tensor.
auto counter(T begin, T end)
Returns an object to iterate values from begin to end in a range-for loop.
Definition: counter.h:295
bool m_showEachIndividualElement
Whether to draw each individual tensor element.
std::vector< art::Ptr< recob::Cluster > > ClusterVector
bool m_showContext
Whether to show input cluster lists to add context to tensor elements.

Member Data Documentation

bool lar_content::ShowerTensorVisualizationTool::m_ignoreUnavailableClusters
private

Whether to ignore (skip-over) unavailable clusters in the tensor.

Definition at line 33 of file ShowerTensorVisualizationTool.h.

Referenced by ReadSettings(), and Run().

unsigned int lar_content::ShowerTensorVisualizationTool::m_minClusterConnections
private

The minimum number of cluster connections for display.

Definition at line 32 of file ShowerTensorVisualizationTool.h.

Referenced by ReadSettings(), and Run().

bool lar_content::ShowerTensorVisualizationTool::m_showContext
private

Whether to show input cluster lists to add context to tensor elements.

Definition at line 35 of file ShowerTensorVisualizationTool.h.

Referenced by ReadSettings(), and Run().

bool lar_content::ShowerTensorVisualizationTool::m_showEachIndividualElement
private

Whether to draw each individual tensor element.

Definition at line 34 of file ShowerTensorVisualizationTool.h.

Referenced by ReadSettings(), and Run().


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