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::StringVectorStreamAlgorithmMap
 

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

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.
std::string string
Definition: nybbler.cc:12
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)
QTextStream & endl(QTextStream &s)
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.
std::string string
Definition: nybbler.cc:12
pandora::StringVector m_outputListNames
Names of the output lists if not combining into a single list at the end.
CodeOutputInterface * code
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: