Structural Bioinformatics Library
Template C++ / Python API for developping structural bioinformatics applications.
Module_based_workflow Class Reference

Representaiont of the workflow of an application enriched with default options. More...

#include <Module_based_workflow.hpp>

Public Types

typedef Workflow_graph_traits::vertex_descriptor Vertex
 Representation of a verttex in the workflow that could be a module, or the Start or End vertices. More...
 
typedef Workflow_graph_traits::edge_descriptor Edge
 Representation of the flow of information in the workflow. More...
 

Public Member Functions

 Module_based_workflow (const std::string &application_name="no-application-name")
 Initialize this application with a name. More...
 
virtual boost::program_options::options_description add_options (void)
 Virtual method for adding options to the module. More...
 
virtual bool check_options (std::string &message) const
 Checks that the input options' values are coherent. More...
 

Static Public Member Functions

static boost::program_options::options_description *& get_options (void)
 Access to the options' description of the module. More...
 

Mandatory Requirements

std::string get_name (void) const override
 Returns the name of the package. More...
 
void run (unsigned verbose, std::ostream &out) override
 Runs the module following the input options. More...
 
bool is_runnable (void) const override
 Checks that all the input options were set. More...
 
void statistics (std::ostream &out) override
 Reports high-level statistics on the module. More...
 

Optional Requirements

void add_options_xrt (boost::program_options::options_description *options, bool pre_module)
 
std::string get_output_prefix (void) const override
 Returns a prefix that concatains the input line options used when running the module. More...
 
void report (const std::string &prefix) override
 Reports the output and statistics in output files. More...
 

Based Options

bool get_report_at_end (void) const
 
void add_helper (const std::string &helper)
 Set the helper of the application. More...
 
std::ostream & log (void)
 Stream for the standard output, that can be either the shell or a file. More...
 
unsigned verbose (void) const
 Return the verbosity level for the workflow : 0 (no output), 1 (output during the run), 2 (output during the statistics) or 3 (all output). More...
 

Modules

Vertex get_start_vertex (void) const
 
IO::Loader_baseget_loader (unsigned i)
 
const IO::Loader_baseget_loader (unsigned i) const
 
Module_baseget_module (Vertex u)
 
unsigned get_number_of_loaders (void) const
 
template<class Loader >
Loader * add_loader (const std::string &name="")
 Registers a loader into the automaton: note that loaders are executed before the modules. More...
 
template<class Loader >
Loader * add_loader (Loader &loader, const std::string &name="")
 Registers a loader into the automaton: note that loaders are executed before the modules. More...
 
template<class Module >
Vertex register_module (const std::string &name="")
 Registers a module with an input: note that modules are executed in a FIFO manner. More...
 
Vertex register_module (Module_base &module, const std::string &name="")
 Registers a module without any input: note that modules are executed in a FIFO manner. More...
 
void make_optional_module (Vertex u, const std::string &option_name, const std::string &option_helper)
 Registers a module with an input: note that modules are executed in a FIFO manner. More...
 
template<class Module1 , class Module2 >
Vertex make_conjunction (Vertex u, Vertex v)
 Make a module that is the conjunction of the two input modules. More...
 
template<class ModuleOut , class Predicate , class UpdateIfTrue >
void make_start_condition (const Predicate &P, Vertex v, const UpdateIfTrue &update_true, const std::string &predicate_name, const std::string &update_name="")
 Make a condition module with exactly one possible outflow, and a predicate for checking if it is followed. More...
 
template<class ModuleOutTrue , class ModuleOutFalse , class Predicate , class UpdateIfTrue , class UpdateIfFalse >
void make_start_condition (const Predicate &P, Vertex v, const UpdateIfTrue &update_true, Vertex w, const UpdateIfFalse &update_false, const std::string &predicate_name, const std::string &update_name="")
 Make a condition module with exactly two possible outflows, and a predicate for checking which one to follow.
More...
 
template<class ModuleIn , class ModuleOut , class Predicate , class UpdateIfTrue >
void make_condition (Vertex u, const Predicate &P, Vertex v, const UpdateIfTrue &update_true, const std::string &predicate_name, const std::string &update_name="")
 Make a condition module with exactly one possible outflow, and a predicate for checking if it is followed. More...
 
template<class ModuleIn , class ModuleOutTrue , class ModuleOutFalse , class Predicate , class UpdateIfTrue , class UpdateIfFalse >
void make_condition (Vertex u, const Predicate &P, Vertex v, const UpdateIfTrue &update_true, Vertex w, const UpdateIfFalse &update_false, const std::string &predicate_name, const std::string &update_name="")
 Make a condition module with exactly two possible outflows, and a predicate for checking which one to follow.
More...
 

Flows

void set_start_module (Vertex u)
 Modules connected to the start vertex will be first executed; in case of multiple vertices, the modules are executed in an arbitrary order. More...
 
void set_end_module (Vertex u)
 The results of all modules connected to the end vertex are reported. More...
 
template<class Transformer >
void make_module_flow (Vertex u, Vertex v, const Transformer &join, const std::string &name="")
 Connect the modules represented by the vertices u (source output) and v (target input); if any output data from u should be passed to the input data of v, it is done through the join functor; the optional name is displayed over the edge of the graph when printing the workflow. More...
 

Running the workflow

bool is_valid_workflow (unsigned verbose, std::ostream &out) const
 
void parse_command_line (int argc, char *argv[])
 Parses the command line options and store the values of the options: the check_options method is called for all loaders and all modules. More...
 
void load (std::size_t i)
 Load the data using the loaders. More...
 
void load (void)
 Load the data using the loaders. More...
 
void start (void)
 Runs the application by pushing into the stack the Start vertex. More...
 

Modules Management

void set_module_instance_name (const std::string &module_instance_name)
 Sets a name for this instance of this module. In particular, it will be used in the prefix of output files generated by a collection of modules. More...
 
const std::string & get_module_instance_name (void) const
 Get the name of this instance of this module. More...
 
void set_report_mode (std::ios_base::openmode report_mode)
 Set a report mode, that is open or append modes. More...
 
void set_report_mode (std::ios_base::openmode &report_mode)
 Set a report mode, that is open or append modes. More...
 
const std::ios_base::openmode get_report_mode (void) const
 Get the report mode to be used when reporting. More...
 

Optional Requirements

void check_filesystem_directory_exists (const std::string &output_prefix)
 To avoid later crash: check filesystem / existence of directory / directory exists. More...
 

Others

template<class Self_ >
Self_ * clone (const Self_ *s) const
 Clones the object using the copy constructor. More...
 
virtual bool is_logical_module (void) const
 Checks that this module defines a logical operator. More...
 
virtual bool is_condition_module (void) const
 Checks that this module defines a condition operator. More...
 
virtual bool operator() (void)
 Only for condition modules, for returning the predicate value. More...
 
virtual bool is_modules_collection (void) const
 Checks that this module defines a collection of modules. More...
 

Detailed Description

Representaiont of the workflow of an application enriched with default options.

It provides the following functionnality:

  • a prefix for the output files (that can be imposed or deduced automatically from the options),
  • a directory where to create the output files,
  • a log system allowing to put the log on the standard output or in a log file,
  • a help system allowing to interrupt the application by providing the list of options,
  • a verbose system allowing to switch between two modes of verbosity levels,
  • a timer system allowing to compute the time spent in a routine and to deduce the total spent time.

Member Typedef Documentation

◆ Edge

typedef Workflow_graph_traits::edge_descriptor Edge
inherited

Representation of the flow of information in the workflow.

◆ Vertex

typedef Workflow_graph_traits::vertex_descriptor Vertex
inherited

Representation of a verttex in the workflow that could be a module, or the Start or End vertices.

Constructor & Destructor Documentation

◆ Module_based_workflow()

Module_based_workflow ( const std::string &  application_name = "no-application-name")
inline

Initialize this application with a name.

Member Function Documentation

◆ add_helper()

void add_helper ( const std::string &  helper)
inlineinherited

Set the helper of the application.

◆ add_loader() [1/2]

Loader * add_loader ( const std::string &  name = "")
inlineinherited

Registers a loader into the automaton: note that loaders are executed before the modules.

◆ add_loader() [2/2]

Loader * add_loader ( Loader &  loader,
const std::string &  name = "" 
)
inlineinherited

Registers a loader into the automaton: note that loaders are executed before the modules.

◆ add_options()

virtual boost::program_options::options_description add_options ( void  )
inlinevirtualinherited

Virtual method for adding options to the module.

Reimplemented in T_Union_of_balls_surface_volume_3_module< ModuleTraits, OutputArchive >, T_Union_of_balls_mesh_3_module< ModuleTraits >, T_Union_of_balls_boundary_patch_shelling_3_module< ModuleTraits, OutputArchive >, T_Union_of_balls_boundary_3_module< ModuleTraits, ExactNT >, T_Tertiary_quaternary_structure_annotator_module< ModuleTraits >, T_Spatial_search_module< ModuleTraits, ApproximatedSpatialSearchEngine >, T_Nearest_neighbors_graph_builder_module< ModuleTraits >, T_Morse_theory_based_analyzer_module< ModuleTraits, MorseSmaleWittenChainComplex >, T_Morse_theory_based_analyzer_module< ModuleTraits, SBL::GT::T_Morse_Smale_Witten_chain_complex_from_vertex_weighted_graph_builder< typename ModuleTraits::Graph, typename ModuleTraits::Get_weight >::Morse_Smale_Witten_chain_complex >, T_Morse_theory_based_analyzer_module< ModuleTraits, SBL::GT::T_Morse_Smale_Witten_chain_complex_from_weighted_graph_builder< typename ModuleTraits::Graph, typename ModuleTraits::Get_weight >::Morse_Smale_Witten_chain_complex >, T_Morse_theory_based_analyzer_module< ModuleTraits, SBL::GT::T_Morse_Smale_Witten_chain_complex_from_NNG_builder< ModuleTraits::Nearest_neighbors_graph, ModuleTraits::Morse_function, ModuleTraits::Distance_graph_function >::Morse_Smale_Witten_chain_complex >, T_Molecular_interfaces_module< ModuleTraits >, T_Earth_mover_distance_module< ModuleTraits >, T_Buried_surface_area_without_label_module< ModuleTraits >, T_Buried_surface_area_with_labels_module< ModuleTraits >, T_Alpha_complex_of_molecular_model_module< ModuleTraits >, T_XTC_file_loader< ConformationType, ConformationBuilder, ESBTLMolecularSystem, PDBLineFormat >, T_Spheres_3_file_loader< Sphere3, Point3 >, T_Radius_annotator_for_particles_with_annotated_name< NT, SetRadius >, T_Points_d_file_loader< PointD >, T_Particle_annotator_collector< ParticleAnnotator1, ParticleAnnotator2 >, T_Name_annotator_for_atoms< SetAnnotatedName >, T_Dynamic_annotator_for_residues< SetDynamicAnnotation >, T_Dynamic_annotator_for_atoms< SetDynamicAnnotation >, T_Transition_graph_loader< InputArchive, TransitionGraphTraits >, T_Protein_representation_loader< Protein_representation_ >, T_Primitive_labels_loader< PartnerLabelsTraits, MediatorLabelsTraits, ExtraLabelsTraits >, T_Numbers_file_loader< FT, Tag >, T_Molecular_system_loader< Molecular_system_ >, T_Molecular_system_loader< Molecular_system >, T_Molecular_system_loader< Molecular_covalent_structure_builder_::Molecular_covalent_structure::Particle_info::Particle_traits::Molecular_system >, T_Molecular_covalent_structure_loader_from_MOL< MolecularCovalentStructure >, T_Molecular_covalent_structure_loader< Molecular_covalent_structure_builder_ >, T_Molecular_covalent_structure_loader< SBL::CSB::T_Molecular_covalent_structure_builder_for_proteins< typename Protein_representation_::Polypeptide_chain::Molecular_covalent_structure > >, T_Conformation_loader< Conformation_builder_ >, T_Archive_file_loader< InputArchive, SerializedData >, T_Name_annotator_for_pseudo_atoms< SetAnnotatedName >, T_Generic_annotator_without_file< AnnotationType, SetAnnotation, GetInstanceName >, T_Generic_annotator< KeyType, AnnotationType, MakeKey, SetAnnotation, GetOptionName, GetOptionHelp, GetOptionDisplayName >, T_Domain_annotator_for_particles< Annotations >, T_RMSD_comb_edge_weighted_module< ModuleTraits >, T_Morse_theory_based_analyzer_for_NNG_module< ModuleTraits >, T_Cluster_engine_module< ModuleTraits >, T_Alignment_structures_module< ModuleTraits, AlignmentEngineStructures >, and T_Alignment_sequences_module< ModuleTraits, AlignmentEngineSequences >.

◆ check_filesystem_directory_exists()

void check_filesystem_directory_exists ( const std::string &  output_prefix)
inlineinherited

To avoid later crash: check filesystem / existence of directory / directory exists.

◆ check_options()

virtual bool check_options ( std::string &  message) const
inlinevirtualinherited

Checks that the input options' values are coherent.

Reimplemented in T_Union_of_balls_surface_volume_3_module< ModuleTraits, OutputArchive >, T_Union_of_balls_mesh_3_module< ModuleTraits >, T_Union_of_balls_boundary_patch_shelling_3_module< ModuleTraits, OutputArchive >, T_Union_of_balls_boundary_3_module< ModuleTraits, ExactNT >, T_Tertiary_quaternary_structure_annotator_module< ModuleTraits >, T_Spatial_search_module< ModuleTraits, ApproximatedSpatialSearchEngine >, T_Nearest_neighbors_graph_builder_module< ModuleTraits >, T_Morse_theory_based_analyzer_module< ModuleTraits, MorseSmaleWittenChainComplex >, T_Morse_theory_based_analyzer_module< ModuleTraits, SBL::GT::T_Morse_Smale_Witten_chain_complex_from_vertex_weighted_graph_builder< typename ModuleTraits::Graph, typename ModuleTraits::Get_weight >::Morse_Smale_Witten_chain_complex >, T_Morse_theory_based_analyzer_module< ModuleTraits, SBL::GT::T_Morse_Smale_Witten_chain_complex_from_weighted_graph_builder< typename ModuleTraits::Graph, typename ModuleTraits::Get_weight >::Morse_Smale_Witten_chain_complex >, T_Morse_theory_based_analyzer_module< ModuleTraits, SBL::GT::T_Morse_Smale_Witten_chain_complex_from_NNG_builder< ModuleTraits::Nearest_neighbors_graph, ModuleTraits::Morse_function, ModuleTraits::Distance_graph_function >::Morse_Smale_Witten_chain_complex >, T_Molecular_structure_classifier_module< ModuleTraits >, T_Molecular_interfaces_module< ModuleTraits >, T_Module_conjunction< ModuleOrLoader1, ModuleOrLoader2 >, T_Module_condition< Module, Predicate >, T_Cluster_engine_module< ModuleTraits >, T_Buried_surface_area_without_label_module< ModuleTraits >, T_Buried_surface_area_with_labels_module< ModuleTraits >, T_Alpha_complex_of_molecular_model_module< ModuleTraits >, T_Alignment_structures_module< ModuleTraits, AlignmentEngineStructures >, T_Alignment_sequences_module< ModuleTraits, AlignmentEngineSequences >, T_XTC_file_loader< ConformationType, ConformationBuilder, ESBTLMolecularSystem, PDBLineFormat >, T_Spheres_3_file_loader< Sphere3, Point3 >, T_Radius_annotator_for_particles_with_annotated_name< NT, SetRadius >, T_Points_d_file_loader< PointD >, T_Particle_annotator_collector< ParticleAnnotator1, ParticleAnnotator2 >, T_Name_annotator_for_atoms< SetAnnotatedName >, T_Dynamic_annotator_for_residues< SetDynamicAnnotation >, T_Dynamic_annotator_for_atoms< SetDynamicAnnotation >, T_Transition_graph_loader< InputArchive, TransitionGraphTraits >, T_Protein_representation_loader< Protein_representation_ >, T_Primitive_labels_loader< PartnerLabelsTraits, MediatorLabelsTraits, ExtraLabelsTraits >, T_Numbers_file_loader< FT, Tag >, T_Multiple_archives_xml_archive_file_loader< SecondaryArchive, SecondaryData, SerializedData >, T_Molecular_system_loader< Molecular_system_ >, T_Molecular_system_loader< Molecular_system >, T_Molecular_system_loader< Molecular_covalent_structure_builder_::Molecular_covalent_structure::Particle_info::Particle_traits::Molecular_system >, T_Molecular_covalent_structure_loader_from_MOL< MolecularCovalentStructure >, T_Molecular_covalent_structure_loader< Molecular_covalent_structure_builder_ >, T_Molecular_covalent_structure_loader< SBL::CSB::T_Molecular_covalent_structure_builder_for_proteins< typename Protein_representation_::Polypeptide_chain::Molecular_covalent_structure > >, T_Conformation_loader< Conformation_builder_ >, T_Archive_file_loader< InputArchive, SerializedData >, T_PDB_file_loader< ESBTLMolecularSystem, PDBLineFormat >, No_particle_annotator, T_Name_annotator_for_pseudo_atoms< SetAnnotatedName >, T_Generic_annotator_without_file< AnnotationType, SetAnnotation, GetInstanceName >, T_Generic_annotator< KeyType, AnnotationType, MakeKey, SetAnnotation, GetOptionName, GetOptionHelp, GetOptionDisplayName >, T_Domain_annotator_for_particles< Annotations >, T_Conformations_file_loader< ConformationType, ConformationBuilder, ESBTLMolecularSystem, PDBLineFormat >, and T_Molecular_covalent_structure_loader_from_PDB< ParticleTraits, MolecularCovalentStructure, MolecularCovalentStructureBuilder, PDBLineFormat >.

◆ clone()

Self_* clone ( const Self_ *  s) const
inlineinherited

Clones the object using the copy constructor.

◆ get_module_instance_name()

const std::string& get_module_instance_name ( void  ) const
inlineinherited

Get the name of this instance of this module.

◆ get_name()

std::string get_name ( void  ) const
inlineoverridevirtualinherited

Returns the name of the package.

Reimplemented from Module_base.

◆ get_options()

static boost::program_options::options_description*& get_options ( void  )
inlinestaticinherited

Access to the options' description of the module.

◆ get_output_prefix()

std::string get_output_prefix ( void  ) const
inlineoverridevirtualinherited

Returns a prefix that concatains the input line options used when running the module.

Reimplemented from T_Module_option_description< Dummy >.

◆ get_report_mode()

const std::ios_base::openmode get_report_mode ( void  ) const
inlineinherited

Get the report mode to be used when reporting.

◆ is_condition_module()

virtual bool is_condition_module ( void  ) const
inlineprotectedvirtualinherited

Checks that this module defines a condition operator.

◆ is_logical_module()

virtual bool is_logical_module ( void  ) const
inlineprotectedvirtualinherited

Checks that this module defines a logical operator.

◆ is_modules_collection()

virtual bool is_modules_collection ( void  ) const
inlineprotectedvirtualinherited

Checks that this module defines a collection of modules.

◆ is_runnable()

bool is_runnable ( void  ) const
inlineoverridevirtualinherited

Checks that all the input options were set.

Reimplemented from Module_base.

◆ is_valid_workflow()

bool is_valid_workflow ( unsigned  verbose,
std::ostream &  out 
) const
inlineinherited

Check the following properties : – the workflow is connected – each module that is not logical or condition has exactly one input – each logical operator has exactly two input – each condition operator has exactly one input and one to two output

◆ load() [1/2]

void load ( std::size_t  i)
inlineinherited

Load the data using the loaders.

◆ load() [2/2]

void load ( void  )
inlineinherited

Load the data using the loaders.

◆ log()

std::ostream & log ( void  )
inlineinherited

Stream for the standard output, that can be either the shell or a file.

◆ make_condition() [1/2]

void make_condition ( Vertex  u,
const Predicate &  P,
Vertex  v,
const UpdateIfTrue &  update_true,
const std::string &  predicate_name,
const std::string &  update_name = "" 
)
inlineinherited

Make a condition module with exactly one possible outflow, and a predicate for checking if it is followed.

◆ make_condition() [2/2]

void make_condition ( Vertex  u,
const Predicate &  P,
Vertex  v,
const UpdateIfTrue &  update_true,
Vertex  w,
const UpdateIfFalse &  update_false,
const std::string &  predicate_name,
const std::string &  update_name = "" 
)
inlineinherited

Make a condition module with exactly two possible outflows, and a predicate for checking which one to follow.

◆ make_conjunction()

T_Module_based_workflow< Dummy >::Vertex make_conjunction ( Vertex  u,
Vertex  v 
)
inlineinherited

Make a module that is the conjunction of the two input modules.

◆ make_module_flow()

void make_module_flow ( Vertex  u,
Vertex  v,
const Transformer &  join,
const std::string &  name = "" 
)
inlineinherited

Connect the modules represented by the vertices u (source output) and v (target input); if any output data from u should be passed to the input data of v, it is done through the join functor; the optional name is displayed over the edge of the graph when printing the workflow.

◆ make_optional_module()

void make_optional_module ( Vertex  u,
const std::string &  option_name,
const std::string &  option_helper 
)
inlineinherited

Registers a module with an input: note that modules are executed in a FIFO manner.

◆ make_start_condition() [1/2]

void make_start_condition ( const Predicate &  P,
Vertex  v,
const UpdateIfTrue &  update_true,
const std::string &  predicate_name,
const std::string &  update_name = "" 
)
inlineinherited

Make a condition module with exactly one possible outflow, and a predicate for checking if it is followed.

◆ make_start_condition() [2/2]

void make_start_condition ( const Predicate &  P,
Vertex  v,
const UpdateIfTrue &  update_true,
Vertex  w,
const UpdateIfFalse &  update_false,
const std::string &  predicate_name,
const std::string &  update_name = "" 
)
inlineinherited

Make a condition module with exactly two possible outflows, and a predicate for checking which one to follow.

◆ operator()()

virtual bool operator() ( void  )
inlineprotectedvirtualinherited

Only for condition modules, for returning the predicate value.

◆ parse_command_line()

void parse_command_line ( int  argc,
char *  argv[] 
)
inlineinherited

Parses the command line options and store the values of the options: the check_options method is called for all loaders and all modules.

◆ register_module() [1/2]

T_Module_based_workflow< Dummy >::Vertex register_module ( const std::string &  name = "")
inlineinherited

Registers a module with an input: note that modules are executed in a FIFO manner.

◆ register_module() [2/2]

T_Module_based_workflow< Dummy >::Vertex register_module ( Module_base module,
const std::string &  name = "" 
)
inlineinherited

Registers a module without any input: note that modules are executed in a FIFO manner.

◆ report()

void report ( const std::string &  output_prefix)
inlineoverridevirtualinherited

Reports the output and statistics in output files.

Reimplemented from Module_base.

◆ run()

void run ( unsigned  verbose,
std::ostream &  out 
)
inlineoverridevirtualinherited

Runs the module following the input options.

Implements Module_base.

◆ set_end_module()

void set_end_module ( Vertex  u)
inlineinherited

The results of all modules connected to the end vertex are reported.

◆ set_module_instance_name()

void set_module_instance_name ( const std::string &  module_instance_name)
inlineinherited

Sets a name for this instance of this module. In particular, it will be used in the prefix of output files generated by a collection of modules.

◆ set_report_mode() [1/2]

void set_report_mode ( std::ios_base::openmode &  report_mode)
inlineinherited

Set a report mode, that is open or append modes.

◆ set_report_mode() [2/2]

void set_report_mode ( std::ios_base::openmode  report_mode)
inlineinherited

Set a report mode, that is open or append modes.

◆ set_start_module()

void set_start_module ( Vertex  u)
inlineinherited

Modules connected to the start vertex will be first executed; in case of multiple vertices, the modules are executed in an arbitrary order.

◆ start()

void start ( void  )
inlineinherited

Runs the application by pushing into the stack the Start vertex.

◆ statistics()

void statistics ( std::ostream &  out)
inlineoverridevirtualinherited

Reports high-level statistics on the module.

Reimplemented from Module_base.

◆ verbose()

unsigned verbose ( void  ) const
inlineinherited

Return the verbosity level for the workflow : 0 (no output), 1 (output during the run), 2 (output during the statistics) or 3 (all output).