LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
StreamSelectionAlgorithm.cc
Go to the documentation of this file.
1 
9 #include "Pandora/AlgorithmHeaders.h"
10 
12 
15 
17 
18 #include <numeric>
19 
20 using namespace pandora;
21 
22 namespace lar_content
23 {
24 
25 StreamSelectionAlgorithm::StreamSelectionAlgorithm() :
26  m_inputListName{""},
27  m_listType{"cluster"}
28 {
29 }
30 
31 //------------------------------------------------------------------------------------------------------------------------------------------
32 
34 {
35  if (m_listNames.empty())
36  {
37  std::cout << "StreamSelectionAlgorithm::Run - Error: No output lists found" << std::endl;
38  return STATUS_CODE_NOT_FOUND;
39  }
40 
41  const ClusterList *pClusterList{nullptr};
42  std::string originalClusterListName;
43  if (m_inputListName.empty())
44  {
45  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::GetCurrentList(*this, pClusterList));
46  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::GetCurrentListName<Cluster>(*this, originalClusterListName));
47  }
48  else
49  {
50  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::GetList(*this, m_inputListName, pClusterList));
51  originalClusterListName = m_inputListName;
52  }
53 
54  for (std::string listName : m_listNames)
55  m_clusterListMap[listName] = ClusterList();
56 
57  for (const Cluster *pCluster : *pClusterList)
58  {
59  StatusCode status{this->AllocateToStreams(pCluster)};
60  if (status != STATUS_CODE_SUCCESS)
61  return status;
62  }
63 
64  // ATTN - We're ok with saving empty lists here and allowing future algorithms to simply do nothing if there are no clusters
65  // Moves the subset of clusters in the cluster list from the old list to the new list
66  for (std::string listName : m_listNames)
67  PandoraContentApi::SaveList<ClusterList>(*this, originalClusterListName, listName, m_clusterListMap.at(listName));
68 
69  return STATUS_CODE_SUCCESS;
70 }
71 
72 //------------------------------------------------------------------------------------------------------------------------------------------
73 
74 StatusCode StreamSelectionAlgorithm::ReadSettings(const TiXmlHandle xmlHandle)
75 {
76  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "InputListName", m_inputListName));
77  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "ListType", m_listType));
78  std::transform(m_listType.begin(), m_listType.end(), m_listType.begin(), ::tolower);
79  if (m_listType != "cluster")
80  {
81  std::cout << "StreamingAlgorithm::ReadSettings - Error: Only Cluster list type is supported at this time" << std::endl;
82  return STATUS_CODE_INVALID_PARAMETER;
83  }
84 
85  // ATTN - Classes implementing this interface should ensure that m_listNames gets populated from the list names provided to the
86  // implementing class
87  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadVectorOfValues(xmlHandle, "ListNames", m_listNames));
88 
89  return STATUS_CODE_SUCCESS;
90 }
91 
92 } // namespace lar_content
std::string m_listType
The type of the input lists (currently only Cluster is supported)
Header file for the lar calo hit class.
Header file for the lar monitoring helper helper class.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
Header file for the lar monte carlo particle helper helper class.
std::string m_inputListName
The input list name if not using the current list.
pandora::StringVector m_listNames
The name of the output lists.
ClusterListMap m_clusterListMap
The map from cluster list names to cluster lists.
Header file for the deep learning track shower cluster streaming algorithm.
virtual pandora::StatusCode AllocateToStreams(const pandora::Cluster *const pCluster)=0
Allocate a cluster to the appropriate streams.