All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
lar_content::StreamingAlgorithm Class Reference

StreamingAlgorithm class. More...

#include <StreamingAlgorithm.h>

Inheritance diagram for lar_content::StreamingAlgorithm:

Public Member Functions

 StreamingAlgorithm ()
 Default constructor. More...
 
virtual ~StreamingAlgorithm ()
 

Private Types

typedef std::map< std::string,
pandora::StringVector > 
StreamAlgorithmMap
 

Private Member Functions

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

Private Attributes

std::string m_outputListName
 The name of the output list. More...
 
std::string m_listType
 The type of the input lists (currently only Cluster is supported) More...
 
pandora::StringVector m_inputListNames
 The names of the input lists. More...
 
pandora::StringVector m_outputListNames
 Names of the output lists if not combining into a single list at the end. More...
 
StreamAlgorithmMap m_streamAlgorithmMap
 A map from individual streams to the algorithms that stream should run. More...
 

Detailed Description

StreamingAlgorithm class.

Definition at line 19 of file StreamingAlgorithm.h.

Member Typedef Documentation

typedef std::map<std::string, pandora::StringVector> lar_content::StreamingAlgorithm::StreamAlgorithmMap
private

Definition at line 30 of file StreamingAlgorithm.h.

Constructor & Destructor Documentation

lar_content::StreamingAlgorithm::StreamingAlgorithm ( )

Default constructor.

Definition at line 26 of file StreamingAlgorithm.cc.

26  : m_listType{"cluster"}
27 {
28 }
std::string m_listType
The type of the input lists (currently only Cluster is supported)
lar_content::StreamingAlgorithm::~StreamingAlgorithm ( )
virtual

Definition at line 32 of file StreamingAlgorithm.cc.

33 {
34 }

Member Function Documentation

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

Definition at line 80 of file StreamingAlgorithm.cc.

81 {
82  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "ListType", m_listType));
83  std::transform(m_listType.begin(), m_listType.end(), m_listType.begin(), ::tolower);
84  if (m_listType != "cluster")
85  {
86  std::cout << "StreamingAlgorithm::ReadSettings - Error: Only Cluster list type is supported at this time" << std::endl;
87  return STATUS_CODE_INVALID_PARAMETER;
88  }
89 
90  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, XmlHelper::ReadVectorOfValues(xmlHandle, "InputListNames", m_inputListNames));
91  if (m_inputListNames.empty())
92  {
93  std::cout << "StreamingAlgorithm::ReadSettings - Error: No input lists found" << std::endl;
94  return STATUS_CODE_NOT_FOUND;
95  }
96 
97  PANDORA_RETURN_RESULT_IF_AND_IF(STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadValue(xmlHandle, "OutputListName", m_outputListName));
98  PANDORA_RETURN_RESULT_IF_AND_IF(
99  STATUS_CODE_SUCCESS, STATUS_CODE_NOT_FOUND, !=, XmlHelper::ReadVectorOfValues(xmlHandle, "OutputListNames", m_outputListNames));
100  if ((m_outputListName.empty() && m_outputListNames.empty()) || (!m_outputListName.empty() && !m_outputListNames.empty()))
101  {
102  std::cout << "StreamingAlgorithm::ReadSettings - Error: You must provide either a single output list name OR a list of output list names"
103  << std::endl;
104  return STATUS_CODE_NOT_FOUND;
105  }
106  if (!m_outputListNames.empty() && m_inputListNames.size() != m_outputListNames.size())
107  {
108  std::cout << "StreamingAlgorithm::ReadSettings - Error: When providing a list of output lists, there should be a one-to-one "
109  << "correspondence with the list of input lists" << std::endl;
110  return STATUS_CODE_INVALID_PARAMETER;
111  }
112 
113  for (std::string listName : m_inputListNames)
114  {
115  std::string algStreamName{"Algorithms" + listName};
116  if (m_streamAlgorithmMap.find(algStreamName) != m_streamAlgorithmMap.end())
117  {
118  std::cout << "StreamingAlgorithm::ReadSettings - Error: Duplicate stream name found" << std::endl;
119  return STATUS_CODE_INVALID_PARAMETER;
120  }
121  PANDORA_RETURN_RESULT_IF(
122  STATUS_CODE_SUCCESS, !=, XmlHelper::ProcessAlgorithmList(*this, xmlHandle, algStreamName, m_streamAlgorithmMap[algStreamName]));
123  if (m_streamAlgorithmMap.at(algStreamName).empty())
124  {
125  std::cout << "StreamingAlgorithm::ReadSettings - Error: Found no algorithms for \'" << algStreamName << "\'" << std::endl;
126  return STATUS_CODE_NOT_FOUND;
127  }
128  }
129 
130  return STATUS_CODE_SUCCESS;
131 }
pandora::StringVector m_inputListNames
The names of the input lists.
static constexpr Sample_t transform(Sample_t sample)
pandora::StringVector m_outputListNames
Names of the output lists if not combining into a single list at the end.
StreamAlgorithmMap m_streamAlgorithmMap
A map from individual streams to the algorithms that stream should run.
std::string m_listType
The type of the input lists (currently only Cluster is supported)
BEGIN_PROLOG could also be cout
std::string m_outputListName
The name of the output list.
StatusCode lar_content::StreamingAlgorithm::Run ( )
private

Definition at line 38 of file StreamingAlgorithm.cc.

39 {
40  unsigned int i{0};
41  for (std::string listName : m_inputListNames)
42  {
43  std::string algStreamName{"Algorithms" + listName};
44  const ClusterList *pClusterList{nullptr};
45  // Set the input list as current
46  PandoraContentApi::ReplaceCurrentList<Cluster>(*this, listName);
47  StatusCode code{PandoraContentApi::GetCurrentList(*this, pClusterList)};
48  if (code == STATUS_CODE_SUCCESS)
49  {
50  for (const auto &alg : m_streamAlgorithmMap.at(algStreamName))
51  { // ATTN - The algorithms replace the current list as they go
52  PandoraContentApi::GetCurrentList(*this, pClusterList);
53  if (!pClusterList->empty())
54  {
55  PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::RunDaughterAlgorithm(*this, alg));
56  }
57  }
58  // Save the current list to the target output list
59  if (!m_outputListName.empty())
60  PandoraContentApi::SaveList<Cluster>(*this, m_outputListName);
61  else
62  PandoraContentApi::SaveList<Cluster>(*this, m_outputListNames.at(i));
63  }
64  else if (code != STATUS_CODE_NOT_INITIALIZED)
65  {
66  return code;
67  }
68  ++i;
69  }
70 
71  // If we have a single output list specified, set that list as the current list
72  if (!m_outputListName.empty())
73  PandoraContentApi::ReplaceCurrentList<Cluster>(*this, m_outputListName);
74 
75  return STATUS_CODE_SUCCESS;
76 }
pandora::StringVector m_inputListNames
The names of the input lists.
pandora::StringVector m_outputListNames
Names of the output lists if not combining into a single list at the end.
StreamAlgorithmMap m_streamAlgorithmMap
A map from individual streams to the algorithms that stream should run.
std::string m_outputListName
The name of the output list.

Member Data Documentation

pandora::StringVector lar_content::StreamingAlgorithm::m_inputListNames
private

The names of the input lists.

Definition at line 36 of file StreamingAlgorithm.h.

std::string lar_content::StreamingAlgorithm::m_listType
private

The type of the input lists (currently only Cluster is supported)

Definition at line 35 of file StreamingAlgorithm.h.

std::string lar_content::StreamingAlgorithm::m_outputListName
private

The name of the output list.

Definition at line 34 of file StreamingAlgorithm.h.

pandora::StringVector lar_content::StreamingAlgorithm::m_outputListNames
private

Names of the output lists if not combining into a single list at the end.

Definition at line 37 of file StreamingAlgorithm.h.

StreamAlgorithmMap lar_content::StreamingAlgorithm::m_streamAlgorithmMap
private

A map from individual streams to the algorithms that stream should run.

Definition at line 38 of file StreamingAlgorithm.h.


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