Algorithm: An algorithm that can run a sequence of algorithms 
- Input and Output Banks:
- See Run function(s) for the banks  that are processed by this algorithm.
This algorithm requires the use of hipo::banklist; there are neither Run functions which take individual hipo::bank parameters nor action functions. If you do not use hipo::banklist, you should use individual algorithms instead of this sequencing algorithm.
Use the Add function to add algorithms to the sequence; the order is important, since the Start, Run, and Stop methods will sequentially call the corresponding algorithms' methods, in the same order that the algorithms were added to the sequence by Add.
If an algorithm's Run function returns false, i.e., its "event-level" filter returns false, then AlgorithmSequence's Run function will stop immediately and return false.
- Custom Event Filters
- If an algorithm's event-level filter is not adequate for your needs, and you want to tighten or override an algorithm's event-level filter, i.e., you want more control over how that algorithm's Run function return value is used, we recommond defining two AlgorithmSequence instances. For example, suppose you want a tighter event-level filter from or after algo2 in the sequence algo1, algo2, algo3, algo4; you may implement this by using two sequences, where the first ends at algo2: 
seq1.Add("algo2"); seq2.Add("algo4"); seq1.Start(banks); seq2.Start(banks); Algorithm: An algorithm that can run a sequence of algorithms 
void Add(std::string const &algo_class_name, std::string const &algo_instance_name="") 
 Then, in your event loop, call your tighter filter between the sequences' Run calls:if(!seq1.Run(banks)) continue; if( ) continue; if(!seq2.Run(banks)) continue; 
Definition at line 45 of file AlgorithmSequence.h.
|  | 
| void | Add (algo_t &&algo) | 
| void | Add (std::string const &algo_class_name, std::string const &algo_instance_name="") | 
| template<class ALGORITHM> | 
| void | Add (std::string_view algo_instance_name="") | 
| void | ForEachAlgorithm (std::function< void(algo_t &)> func) | 
|  | Call a function for each algorithm in the sequence. 
 | 
| template<class ALGORITHM> | 
| ALGORITHM * | Get (std::string const &algo_instance_name) | 
| std::string | GetCreatedBankName (std::string const &algo_instance_name) const noexcept(false) | 
| std::vector< std::string > | GetCreatedBankNames (std::string const &algo_instance_name) const noexcept(false) | 
| void | PrintSequence (Logger::Level level=Logger::info) const | 
| bool | Run (hipo::banklist &banks) const override | 
|  | Run Function: Process an event's hipo::banklist 
 | 
| void | SetConfigDirectoryForEachAlgorithm (std::string const &name) | 
|  | Set a custom configuration file directory for each algorithm in the sequence. 
 | 
| void | SetConfigFileForEachAlgorithm (std::string const &name) | 
|  | Set a custom configuration file for each algorithm in the sequence. 
 | 
| void | SetName (std::string_view name) | 
| template<typename OPTION_TYPE> | 
| void | SetOption (std::string const &algo_instance_name, std::string const &key, const OPTION_TYPE val) | 
| void | Start (hipo::banklist &banks) override | 
|  | Initialize this algorithm before any events are processed, with the intent to process banks. 
 | 
| void | Stop () override | 
|  | Finalize this algorithm after all events are processed. 
 | 
|  | Algorithm (std::string_view name) | 
| std::unique_ptr< YAMLReader > const & | GetConfig () const | 
| hipo::bank | GetCreatedBank (std::string const &bank_name="") const noexcept(false) | 
| std::string | GetCreatedBankName () const noexcept(false) | 
| std::vector< std::string > | GetCreatedBankNames () const noexcept(false) | 
| hipo::schema | GetCreatedBankSchema (std::string const &bank_name="") const noexcept(false) | 
| template<typename OPTION_TYPE> | 
| OPTION_TYPE | GetOptionScalar (std::string const &key, YAMLReader::node_path_t node_path={}) const | 
| template<typename OPTION_TYPE> | 
| std::set< OPTION_TYPE > | GetOptionSet (std::string const &key, YAMLReader::node_path_t node_path={}) const | 
| template<typename OPTION_TYPE> | 
| std::vector< OPTION_TYPE > | GetOptionVector (std::string const &key, YAMLReader::node_path_t node_path={}) const | 
| void | SetConfig (std::unique_ptr< YAMLReader > &&yaml_config) | 
| void | SetConfigDirectory (std::string const &name) | 
| void | SetConfigFile (std::string const &name) | 
| void | SetName (std::string_view name) | 
| template<typename OPTION_TYPE> | 
| OPTION_TYPE | SetOption (std::string const &key, const OPTION_TYPE val) | 
| void | Start () | 
|  | Initialize this algorithm before any events are processed, with the intent to process bank rows rather than full banks;. 
 | 
| std::unique_ptr< Logger > & | GetLog () | 
| std::string | GetName () const | 
| std::unique_ptr< Logger > & | Log () | 
|  | Object (std::string_view name="", Logger::Level lev=Logger::DEFAULT_LEVEL) | 
| void | SetLogLevel (Logger::Level const lev) | 
| void | SetLogLevel (std::string_view lev) | 
| void | SetName (std::string_view name) | 
|  | 
| hipo::schema | CreateBank (hipo::banklist &banks, hipo::banklist::size_type &bank_idx, std::string const &bank_name) const noexcept(false) | 
| hipo::bank & | GetBank (hipo::banklist &banks, hipo::banklist::size_type const idx, std::string const &expected_bank_name="") const noexcept(false) | 
| hipo::banklist::size_type | GetBankIndex (hipo::banklist &banks, std::string const &bank_name) const noexcept(false) | 
| template<typename OPTION_TYPE> | 
| std::optional< OPTION_TYPE > | GetCachedOption (std::string const &key) const | 
| void | ParseYAMLConfig () | 
|  | Parse YAML configuration files. Sets m_yaml_config. 
 | 
| void | ShowBank (hipo::bank const &bank, std::string_view message="", Logger::Level const level=Logger::trace) const | 
| void | ShowBanks (hipo::banklist const &banks, std::string_view message="", Logger::Level const level=Logger::trace) const | 
| void | ThrowSinceRenamed (std::string const &new_name, std::string const &version) const noexcept(false) | 
| std::string | m_class_name | 
|  | Class name of this algorithm. 
 | 
| std::string | m_default_config_file | 
|  | Default configuration file name. 
 | 
| std::mutex | m_mutex | 
|  | A mutex for this algorithm. 
 | 
| bool | m_rows_only | 
|  | If true, algorithm can only operate on bank rows; Algorithm::GetBank, and therefore Algorithm::Run, cannot be called. 
 | 
| std::string | o_user_config_dir | 
| std::string | o_user_config_file | 
| std::unique_ptr< Logger > | m_log | 
|  | Logger instance for this object 
 | 
| std::string | m_name | 
|  | The name of this object. 
 |