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

ShowerTensorVisualizationTool class. More...

#include <ShowerTensorVisualizationTool.h>

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

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

Additional Inherited Members

- Public Types inherited from lar_content::ShowerTensorTool
typedef ThreeViewShowersAlgorithm::MatchingType::TensorType TensorType
 
typedef std::vector< TensorType::ElementList::const_iteratorIteratorList
 

Detailed Description

ShowerTensorVisualizationTool class.

Definition at line 19 of file ShowerTensorVisualizationTool.h.

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.

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.

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.
intermediate_table::const_iterator const_iterator
T abs(T value)
bool m_ignoreUnavailableClusters
Whether to ignore (skip-over) unavailable clusters in the tensor.
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.
QTextStream & endl(QTextStream &s)

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.

unsigned int lar_content::ShowerTensorVisualizationTool::m_minClusterConnections
private

The minimum number of cluster connections for display.

Definition at line 32 of file ShowerTensorVisualizationTool.h.

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.

bool lar_content::ShowerTensorVisualizationTool::m_showEachIndividualElement
private

Whether to draw each individual tensor element.

Definition at line 34 of file ShowerTensorVisualizationTool.h.


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