// ------------------------------------------------------------------------- // /* for reference of the tdm data model, see https://zone.ni.com/reference/de-XX/help/370858P-0113/tdmdatamodel/tdmdatamodel/tdm_headerfile/ https://zone.ni.com/reference/de-XX/help/370858P-0113/tdmdatamodel/tdmdatamodel/tdm_datamodel/ */ #ifndef TDM_DATAMODEL #define TDM_DATAMODEL #include #include #include #include #include #include "tdm_format.hpp" // -------------------------------------------------------------------------- // // tdm meta data struct tdm_meta { // usi:documentation std::string docu_expo_, docu_expover_; // usi:model std::string model_name_, model_version_; std::string model_include_uri_; // usi:include std::string byte_order_; // little versus big endian std::string file_url_; // path/URL of corresponding .tdx file const std::string get_info() { return get_info(defformat); } const std::string get_info(format& formatter) { formatter.set_columns({ std::make_pair("exporter",docu_expo_), std::make_pair("exporterVersion",docu_expover_), std::make_pair("modelName",model_name_), std::make_pair("modelVersion",model_version_), std::make_pair("modelnsURI",model_include_uri_), std::make_pair("byteOrder",byte_order_), std::make_pair("fileURL",file_url_) } ); return formatter.get_info(); } }; // -------------------------------------------------------------------------- // // block of data struct block { std::string id_; unsigned long int byte_offset_; unsigned long int length_; unsigned long int block_offset_, block_size_; std::string value_type_; block () { id_ = std::string(""); byte_offset_ = 0; length_ = 0; block_offset_ = 0; block_size_ = 0; value_type_ = std::string(""); } const std::string get_info() { return get_info(defformat); } const std::string get_info(format& formatter) { formatter.set_columns({ std::make_pair("block-id",id_), std::make_pair("byteOffset",std::to_string(byte_offset_)), std::make_pair("length",std::to_string(length_)), std::make_pair("blockOffset",std::to_string(block_offset_)), std::make_pair("blockSize",std::to_string(block_size_)), std::make_pair("valueType",value_type_) }); return formatter.get_info(); } }; // -------------------------------------------------------------------------- // // tdm_root struct tdm_root { std::string id_; std::string name_; std::string description_; std::string title_; std::string author_; std::string timestamp_; // std::chrono::time_point timepoint_; // from string 2008-05-06T17:20:12.65074539184570313 // std::stringstream ss; // ss<<"2008-05-06T17:20:12.65074539184570313"; // std::cout< channelgroups_; const std::string get_info() { return get_info(defformat); } const std::string get_info(format& formatter) { formatter.set_columns({ std::make_pair("root-id",id_), std::make_pair("name",name_), std::make_pair("description",description_), std::make_pair("title",title_), std::make_pair("author",author_), std::make_pair("timestamp",timestamp_), std::make_pair("channelgroups",join_strings(channelgroups_)) }); return formatter.get_info(); } }; // -------------------------------------------------------------------------- // // tdm_channelgroup // https://zone.ni.com/reference/de-XX/help/370858P-0113/tdmdatamodel/tdmdatamodel/tdm_metadata_chngroup/ struct tdm_channelgroup { std::string id_; std::string name_; std::string description_; std::string root_; std::vector channels_; // referenced by id std::vector submatrices_; const std::string get_info() { return get_info(defformat); } const std::string get_info(format& formatter) { formatter.set_columns({ std::make_pair("group-id",id_), std::make_pair("name",name_), std::make_pair("description",description_), std::make_pair("root",root_), std::make_pair("channels",join_strings(channels_)), std::make_pair("submatrices",join_strings(submatrices_)) }); return formatter.get_info(); } const std::string get_json() { std::stringstream ss; ss<<"{"<<"\"group-id\":\""< of ) // https://zone.ni.com/reference/de-XX/help/370858P-0113/tdmdatamodel/tdmdatamodel/tdm_tdxdata_waveform/ struct waveform_channel { std::string wf_xname_; std::string wf_xunit_string_; std::string wf_start_time_; double wf_start_offset_; double wf_increment_; unsigned long wf_samples_; wf_time_pref_type wf_time_pref; }; struct tdm_channel { std::string id_; std::string name_; std::string description_; std::string unit_string_; std::string datatype_; double minimum_, maximum_; std::string group_; std::vector local_columns_; // TODO waveform_channel wf_channel_; const std::string get_info() { return get_info(defformat); } const std::string get_info(format& formatter) { formatter.set_columns({ std::make_pair("channel-id",id_), std::make_pair("name",name_), std::make_pair("description",description_), std::make_pair("unit_string",unit_string_), std::make_pair("datatype",datatype_), std::make_pair("minimum",std::to_string(minimum_)), std::make_pair("maximum",std::to_string(maximum_)), std::make_pair("group",group_), std::make_pair("local_columns",join_strings(local_columns_)) }); return formatter.get_info(); } const std::string get_json() { std::stringstream ss; ss<<"{"<<"\"channel-id\":\""< tdm_channelgroup id std::vector local_columns_; // -> list of type "localcolumn" unsigned long int number_of_rows_; // -> number of values in channels const std::string get_info() { return get_info(defformat); } const std::string get_info(format& formatter) { formatter.set_columns({ std::make_pair("submatrix-id",id_), std::make_pair("name",name_), std::make_pair("description",description_), std::make_pair("measurement",measurement_), std::make_pair("local_columns",join_strings(local_columns_)), std::make_pair("number_of_rows",std::to_string(number_of_rows_)) }); return formatter.get_info(); } }; // -------------------------------------------------------------------------- // // localcolumn enum class representation { explicit_, // !! explicit is C++ keyword!! implicit_linear_, // datatype is always DT_DOUBLE, no for implicit_linear_!! raw_linear_ // datatype is always DT_DOUBLE }; // https://zone.ni.com/reference/de-XX/help/370858P-0113/tdmdatamodel/tdmdatamodel/tdm_tdxdata_localcolumn/ struct localcolumn { std::string id_; std::string name_; std::string description_; std::string measurement_quantity_; // -> tdm_channel std::string submatrix_; unsigned long int global_flag_; unsigned long int independent_; double minimum_, maximum_; // representation sequence_representation_; std::string sequence_representation_; std::vector generation_parameters_; // { offset, factor } std::string values_; // -> refers to usi:data -> _sequence std::string external_id_; const std::string get_info() { return get_info(defformat); } const std::string get_info(format& formatter) { formatter.set_columns({ std::make_pair("localcolumn-id",id_), std::make_pair("name",name_), std::make_pair("description",description_), std::make_pair("measurement_quantity",measurement_quantity_), std::make_pair("submatrix_",submatrix_), std::make_pair("minimum",std::to_string(minimum_)), std::make_pair("maximum",std::to_string(maximum_)), std::make_pair("sequence_representation",sequence_representation_), std::make_pair("values",values_), std::make_pair("external",external_id_) }); return formatter.get_info(); } }; #endif // -------------------------------------------------------------------------- //