![]() |
ModelSpace
|
Class for logging to CSV. More...
#include <CsvLogger.h>
Public Member Functions | |
CsvLogger (clockwerk::Executive &exec, const std::string &filename="output.csv", unsigned int buffer_size=1) | |
Constructor for CSV logger – wraps around logger constructor. | |
int | delimeter (const std::string &delim) |
Function to set the delimeter. | |
int | filename (std::string name) |
Function to set CSV logger filename. | |
int | close () |
Function to close down the file – logs remaining buffered data and closes. | |
int | setPrecision (int precision) |
Function to set the precision of CSV logging. | |
unsigned int | bufferSize () |
Functions to get and set buffer size. | |
int | bufferSize (unsigned int buffer_size) |
std::string | filename () |
Functions to get and set filename. | |
int | filename (const std::string &name) |
std::string | outDir () |
Functions to get and set output directory. | |
int | outDir (const std::string &directory) |
virtual int | setup (const std::string &file_name) |
Function to set up the SimLogger. | |
int | addParameter (GraphTreeObject ¶meter, const std::string ¶m_name, bool recursive=false) |
Function to add a logging parameter to the SimLogger. Overloaded to add graph node by string or by object. | |
int | addParameter (const std::string ¶meter, const std::string ¶m_name, bool recursive=false) |
Function to add a logging parameter to the SimLogger. Overloaded to add graph node by string or by object. | |
virtual int | lockForLogging () |
Function to lock the file for logging once all parameters have been defined. Generates headers and creates buffers for logging based on parameters that have already been added above. | |
virtual int | log () |
Function to log data to buffer. Flushes buffer to file when full. | |
virtual int | log (void *logger) |
Function to log data to a logger. | |
int | writeHeaders (const int &val) |
int | writeHeaders (const unsigned int &val) |
int | writeHeaders (const double &val) |
int | writeHeaders (const GraphTreeObject &val) |
int | writeHeaders (void *val) |
int | writeHeaders (const std::string &val) |
template<typename T > | |
int | writeHeaders (const std::vector< T > &val) |
template<typename T , long unsigned int N> | |
int | writeHeaders (const std::array< T, N > &val) |
template<typename T , unsigned int R, unsigned int C> | |
int | writeHeaders (const Matrix< T, R, C > &val) |
int | writeToBuffer (const bool &val) |
Overloaded function to write data to the buffer. Should not be called directly by the user – is reserved for call within graph object providing the logging. | |
int | writeToBuffer (const int &val) |
int | writeToBuffer (const long unsigned int &val) |
int | writeToBuffer (const float &val) |
int | writeToBuffer (const double &val) |
int | writeToBuffer (const std::string &val) |
int | writeToBuffer (void *val) |
int | writeToBuffer (GraphTreeObject &val) |
template<typename T > | |
int | writeToBuffer (const std::vector< T > &val) |
Function to handle iteratable values – note here that we only need to define one templated instance because this function will be fully templated out to all DataIO objects that are instantiated, and calls the above ^ under the hood. | |
template<typename T , long unsigned int N> | |
int | writeToBuffer (const std::array< T, N > &val) |
template<typename T , unsigned int R, unsigned int C> | |
int | writeToBuffer (const Matrix< T, R, C > &val) |
void | logLevel (log_level_e new_level) |
Function to set the local model log level. | |
GraphTreeObject * | parent () |
Functions to get object's parent/children. | |
int | parent (GraphTreeObject *new_parent) |
Function to assign the node's parent via pointer. | |
int | parent (GraphTreeObject &new_parent) |
Function to assign the node's parent via reference. | |
std::vector< GraphTreeObject * > & | children () |
unsigned int | nChildren () |
Getters for number of children and descendants. | |
unsigned int | nDescendants () |
std::string | name () const |
Getter and setter for object name. | |
int | name (const std::string &new_name) |
int | rank () |
Getter for the object rank. | |
virtual int | type () |
Function to indicate type – -1 by default unless implemented downstream. | |
bool | loggable () |
Getter for object logability flag – note no setter because should only be set by this or a derived class in its definition. | |
std::string | address () |
Getter for object's string address. | |
std::vector< std::string > | search (const std::string &address) |
Function to search through the graph tree by string address. | |
GraphTreeObject * | getByAddress (const std::string &address) |
Function to get an object from the graph tree by string address. | |
void | dump (bool recursive=false) |
Function to dump the graph node, optionally including descendents. | |
void | graphNodeInfo () |
Function to return all info associated with a given graph node. | |
void | recurseGraphNodeInfo (unsigned int counter) |
Function to recurse through graph tree and print all node info. | |
virtual int | header (void *logger) |
Function to pass headers for this object to the logger. | |
virtual std::vector< std::string > | header_info () const |
void | findLoggable (std::vector< GraphTreeObject * > &matches) |
Function to find all loggable parameters in this node and its children. | |
void | lock (bool recursive=true) |
Function to lock the graph tree object and its children to changes. | |
void | unlock (bool recursive=true) |
Function to unlock the graph tree and its children for changes. | |
bool | locked () |
Function to return whether graph tree object is locked. | |
Public Attributes | |
Executive * | exc |
Handle to the executive object – used for event logging, etc. | |
Protected Member Functions | |
int | _createSetupFile () |
Function to create a CSV file for logging. | |
int | _writeToFile () |
Function to write buffered data to CSV file. | |
void | _fillBuffers () |
Function to set all buffers to full size. | |
void | recalculateDescendants () |
Function to recursively re-calculate the number of descendants of a given node on the tree. | |
void | recalculateRank () |
Function to recursively re-calculate the rank of a given node on the tree. | |
std::vector< std::string > | decomposeAddress (std::string address) |
Function to decompose a string into a series of substrings via indexing. | |
void | findMatches (const std::vector< std::string > &subaddresses, const unsigned int &num_subaddresses, unsigned int index, bool match_found, std::vector< GraphTreeObject * > &matches) |
Function to find all addresses mathcing the set of substrings @parem subaddresses A vector of subaddresses to match. | |
std::vector< GraphTreeObject * > | searchNodes (const std::string &address) |
Function to search through the graph tree by string address. | |
int | addChild (GraphTreeObject *child) |
Function to add a child to the graph tree object. | |
int | removeChild (GraphTreeObject *child) |
Function to remove a child from the graph node's children. | |
Protected Attributes | |
std::ofstream | _fout |
Stream variable to write file to. | |
std::string | _delimeter |
String to indicate delimeter – set to comma by default. | |
int | _precision = 20 |
The precision of logging. Default is 20 places. | |
std::vector< GraphTreeObject * > | _logged_nodes |
A vector to hold all graph tree object pointers. | |
std::vector< std::string > | _log_names |
std::string | _current_name |
std::string | _filename |
String for the filename. | |
std::string | _output_directory |
unsigned int | _buffer_size = 10 |
Ok, so this is important. At the end of the day, every variable resolves somehow into a basic type, because it is mandated in our logging system. The catch is that we need to resolve variables into headers and then data streams, which can be difficult because C++ is a strongly typed language and we're not really detecting our type until runtime. The solution here is a little messy, but we're basically going to create a bunch of different vectors to hold our different variables, then tie each element to its vector via indices. Got it? God knows I sure don't. Here we go... Vectors to hold defined/accepted data types and read/write indices. | |
unsigned int | _buffer_write_idx = 0 |
unsigned int | _buffer_read_idx = 0 |
std::vector< std::vector< bool > > | _bool_vector |
std::vector< std::vector< int > > | _int_vector |
0 | |
std::vector< std::vector< long unsigned int > > | _uint_vector |
1 | |
std::vector< std::vector< float > > | _float_vector |
2 | |
std::vector< std::vector< double > > | _double_vector |
3 | |
std::vector< std::vector< std::string > > | _string_vector |
4 | |
bool | _locked |
5 | |
unsigned int | _seq_idx = 0 |
std::vector< std::string > | _headers |
std::vector< unsigned int > | _sequence |
std::vector< vector_select_e > | _type |
std::vector< int > | _group_idx |
std::vector< Group > | _groups |
Set to -1 if variable is not part of group. | |
log_level_e | _local_log_level = NONE |
Our local log level – allows a higher log level locally than the overall system. | |
GraphTreeObject * | _parent = nullptr |
Pointer to the object's parent – should be null if the object is the root. Is set to null by default. | |
std::vector< GraphTreeObject * > | _children |
Pointers to the object's children – automatically set to an empty vector, and can be increased to any size. | |
std::string | _name = DEFAULT_NAME |
String name for object. | |
uint16_t | _num_descendants = 0 |
Total number of descendants (includes children of children) of the tree, again not including the tree itself. | |
uint8_t | _num_children = 0 |
Number of direct children of the tree (not including the tree itself) | |
uint8_t | _rank = 0 |
Rank for how far down on the graph tree the object is – starts at zero and maxes out at 256 via variable size. | |
uint8_t | _graph_tree_type = BASE_GRAPH_TREE |
Variable to store graph tree object type. | |
bool | _loggable = false |
Variable to indicate whether the selected object is loggable. Set to false by default. | |
Class for logging to CSV.
The CSV logger is a class that inherits from the base logger class and manually configures it to write to CSV.
|
protectedvirtual |
Function to create a CSV file for logging.
Reimplemented from clockwerk::SimLogger.
|
protectedvirtual |
Function to write buffered data to CSV file.
Reimplemented from clockwerk::SimLogger.
|
protectedinherited |
Function to add a child to the graph tree object.
child | A pointer to the graph tree object to add to the tree |
|
inherited |
Function to add a logging parameter to the SimLogger. Overloaded to add graph node by string or by object.
parameter | Graph tree node passed as address string |
param_name | The name to which the parameter will be logged |
recursive | Flag indicating whether parameter should be added recursively (include all lower items on its tree) or not (the default) |
|
inherited |
Function to add a logging parameter to the SimLogger. Overloaded to add graph node by string or by object.
parameter | Graph tree node passed as object |
param_name | The name to which the parameter will be logged |
recursive | Flag indicating whether parameter should be added recursively (include all lower items on its tree) or not (the default) |
|
inherited |
Getter for object's string address.
|
virtual |
Function to close down the file – logs remaining buffered data and closes.
Reimplemented from clockwerk::SimLogger.
|
protectedinherited |
Function to decompose a string into a series of substrings via indexing.
address | The address to be decomposed |
Function to set the delimeter.
delim | The delimeter to separate file values |
Function to dump the graph node, optionally including descendents.
recursive | Parameter indicating whether to dump only one node (default/false) or the entire tree (true) |
int modelspace::CsvLogger::filename | ( | std::string | name | ) |
Function to set CSV logger filename.
The | filename to set. If no extension applies, auto-set to .csv |
|
inherited |
Function to find all loggable parameters in this node and its children.
matches | Expandable vector to hold all matches in the tree |
|
protectedinherited |
Function to find all addresses mathcing the set of substrings @parem subaddresses A vector of subaddresses to match.
num_subaddresses | The number of subaddresses to match |
index | The index of subaddresses to search in |
match_found | Variable indicating whether a match was found higher in the tree |
matches | Implicit return of all matches to the specified address |
|
inherited |
Function to get an object from the graph tree by string address.
address | The exact string address to access the variable with |
|
inlinevirtualinherited |
Function to pass headers for this object to the logger.
logger | Pointer to logger |
Reimplemented in clockwerk::DataIO< T >, clockwerk::DataIO< bool >, clockwerk::DataIO< clockwerk::Body< double > * >, clockwerk::DataIO< clockwerk::Body< T > * >, clockwerk::DataIO< clockwerk::CartesianVector< double, 2 > >, clockwerk::DataIO< clockwerk::CartesianVector< double, 3 > >, clockwerk::DataIO< clockwerk::CartesianVector< T, 3 > >, clockwerk::DataIO< clockwerk::Euler321< double > >, clockwerk::DataIO< clockwerk::Frame< double > * >, clockwerk::DataIO< clockwerk::Frame< T > * >, clockwerk::DataIO< clockwerk::Matrix< double, 2, 2 > >, clockwerk::DataIO< clockwerk::Matrix< double, 3, 3 > >, clockwerk::DataIO< clockwerk::Matrix< double, 6, 3 > >, clockwerk::DataIO< clockwerk::Matrix< double, 6, 6 > >, clockwerk::DataIO< clockwerk::Matrix< T, 3, 3 > >, clockwerk::DataIO< clockwerk::Node< double > * >, clockwerk::DataIO< clockwerk::Quaternion< double > >, clockwerk::DataIO< clockwerk::Quaternion< T > >, clockwerk::DataIO< clockwerk::Time >, clockwerk::DataIO< double >, clockwerk::DataIO< int >, clockwerk::DataIO< modelspace::integrator_type_e >, clockwerk::DataIO< std::string >, and clockwerk::DataIO< void * >.
|
inlinevirtualinherited |
Reimplemented in clockwerk::Time.
Function to lock the graph tree object and its children to changes.
recursive | Flag to indicate whether lock should be recursive |
|
virtualinherited |
Function to lock the file for logging once all parameters have been defined. Generates headers and creates buffers for logging based on parameters that have already been added above.
|
virtualinherited |
Function to log data to buffer. Flushes buffer to file when full.
|
inlinevirtualinherited |
Function to log data to a logger.
logger | Pointer to logger |
Reimplemented in clockwerk::Time, clockwerk::DataIO< T >, clockwerk::DataIO< bool >, clockwerk::DataIO< clockwerk::Body< double > * >, clockwerk::DataIO< clockwerk::Body< T > * >, clockwerk::DataIO< clockwerk::CartesianVector< double, 2 > >, clockwerk::DataIO< clockwerk::CartesianVector< double, 3 > >, clockwerk::DataIO< clockwerk::CartesianVector< T, 3 > >, clockwerk::DataIO< clockwerk::Euler321< double > >, clockwerk::DataIO< clockwerk::Frame< double > * >, clockwerk::DataIO< clockwerk::Frame< T > * >, clockwerk::DataIO< clockwerk::Matrix< double, 2, 2 > >, clockwerk::DataIO< clockwerk::Matrix< double, 3, 3 > >, clockwerk::DataIO< clockwerk::Matrix< double, 6, 3 > >, clockwerk::DataIO< clockwerk::Matrix< double, 6, 6 > >, clockwerk::DataIO< clockwerk::Matrix< T, 3, 3 > >, clockwerk::DataIO< clockwerk::Node< double > * >, clockwerk::DataIO< clockwerk::Quaternion< double > >, clockwerk::DataIO< clockwerk::Quaternion< T > >, clockwerk::DataIO< clockwerk::Time >, clockwerk::DataIO< double >, clockwerk::DataIO< int >, clockwerk::DataIO< modelspace::integrator_type_e >, clockwerk::DataIO< std::string >, and clockwerk::DataIO< void * >.
|
inlineinherited |
Function to set the local model log level.
new_level | The new level to set logging to |
|
inherited |
Function to assign the node's parent via reference.
new_parent | The new parent to assign the node to |
|
inherited |
Function to assign the node's parent via pointer.
new_parent | The new parent to assign the node to |
Function to recurse through graph tree and print all node info.
|
protectedinherited |
Function to remove a child from the graph node's children.
child | The child to remove |
|
inherited |
Function to search through the graph tree by string address.
address | `The address or address chunk to search for |
|
protectedinherited |
Function to search through the graph tree by string address.
address | `The address or address chunk to search for |
Function to set the precision of CSV logging.
precision | The precision to set logging to as # of decimal places |
|
inlinevirtualinherited |
Function to set up the SimLogger.
file_name | Name of the file to log to |
|
inlinevirtualinherited |
Function to indicate type – -1 by default unless implemented downstream.
Function to unlock the graph tree and its children for changes.
recursive | Flag to indicate whether unlock should be recursive |
Overloaded function to write data to the buffer. Should not be called directly by the user – is reserved for call within graph object providing the logging.
|
protectedinherited |
5
Header and indexing variables