From a44461cba6ad7735acce438e6fbf16144db64d7b Mon Sep 17 00:00:00 2001 From: jgoedeke Date: Thu, 23 Jan 2025 14:15:52 +0000 Subject: [PATCH 1/3] Fix wrong keys in runtime errors --- lib/imc_object.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/imc_object.hpp b/lib/imc_object.hpp index 0429d31..1fc1a44 100644 --- a/lib/imc_object.hpp +++ b/lib/imc_object.hpp @@ -482,7 +482,7 @@ namespace imc // construct members by parsing particular parameters from buffer void parse(const std::vector* buffer, const std::vector& parameters) { - if ( parameters.size() < 7 ) throw std::runtime_error("invalid number of parameters in CD2"); + if ( parameters.size() < 7 ) throw std::runtime_error("invalid number of parameters in NO"); origin_ = ( get_parameter(buffer,¶meters[2]) == std::string("1") ); generator_ = get_parameter(buffer,¶meters[4]); comment_ = get_parameter(buffer,¶meters[6]); @@ -508,7 +508,7 @@ namespace imc // construct members by parsing particular parameters from buffer void parse(const std::vector* buffer, const std::vector& parameters) { - if ( parameters.size() < 8 ) throw std::runtime_error("invalid number of parameters in CD2"); + if ( parameters.size() < 8 ) throw std::runtime_error("invalid number of parameters in NT1"); tms_ = std::tm(); tms_.tm_mday = std::stoi( get_parameter(buffer,¶meters[2]) ); tms_.tm_mon = std::stoi( get_parameter(buffer,¶meters[3]) ) - 1; From 59de48424e7b2674d5f702802412abf43d47c7d4 Mon Sep 17 00:00:00 2001 From: jgoedeke Date: Thu, 23 Jan 2025 14:18:08 +0000 Subject: [PATCH 2/3] Fix `absolute_trigger_time` for XY datasets and remove `addtime` from output Add-time is already implicitly provided by the difference between `trigger-time-nt` and `trigger-time` for normal datasets. For XY datasets the `addtime` parameter is not applicable. --- lib/imc_channel.hpp | 12 +++++------- python/VERSION | 2 +- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/lib/imc_channel.hpp b/lib/imc_channel.hpp index 47873a7..9219a0b 100644 --- a/lib/imc_channel.hpp +++ b/lib/imc_channel.hpp @@ -393,7 +393,6 @@ namespace imc ybuffer_offset_ = comp_group1.Cb_.offset_buffer_; ybuffer_size_ = comp_group1.Cb_.number_bytes_; xstart_ = comp_group1.Cb_.x0_; - addtime_ = static_cast(comp_group1.Cb_.add_time_); yfactor_ = comp_group1.CR_.factor_; yoffset_ = comp_group1.CR_.offset_; yunit_ = comp_group1.CR_.unit_; @@ -407,6 +406,10 @@ namespace imc std::time_t ts = timegm(&comp_group1.NT_.tms_); // std::mktime(&tms); trigger_time_ = std::chrono::system_clock::from_time_t(ts); trigger_time_frac_secs_ = comp_group1.NT_.trigger_time_frac_secs_; + // calculate absolute trigger-time + addtime_ = static_cast(comp_group1.Cb_.add_time_); + absolute_trigger_time_ = trigger_time_ + std::chrono::seconds(addtime_); + // + std::chrono::nanoseconds((long int)(trigger_time_frac_secs_*1.e9)); } else if ( !chnenv_.compenv1_.uuid_.empty() && !chnenv_.compenv2_.uuid_.empty() ) { @@ -438,6 +441,7 @@ namespace imc std::time_t ts = timegm(&comp_group2.NT_.tms_); // std::mktime(&tms); trigger_time_ = std::chrono::system_clock::from_time_t(ts); trigger_time_frac_secs_ = comp_group2.NT_.trigger_time_frac_secs_; + absolute_trigger_time_ = trigger_time_; } else { @@ -447,10 +451,6 @@ namespace imc // start converting binary buffer to imc::datatype if ( !chnenv_.CSuuid_.empty() ) convert_buffer(); - // calculate absolute trigger-time - absolute_trigger_time_ = trigger_time_ + std::chrono::seconds(addtime_); - // + std::chrono::nanoseconds((long int)(trigger_time_frac_secs_*1.e9)); - // convert any non-UTF-8 codepage to UTF-8 convert_encoding(); } @@ -624,7 +624,6 @@ namespace imc < Date: Thu, 23 Jan 2025 15:07:12 +0000 Subject: [PATCH 3/3] bugfix: set `xprec` to 9 for XY datasets --- lib/imc_channel.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/imc_channel.hpp b/lib/imc_channel.hpp index 9219a0b..452284b 100644 --- a/lib/imc_channel.hpp +++ b/lib/imc_channel.hpp @@ -508,6 +508,8 @@ namespace imc throw std::runtime_error("x and y data have different number of values"); } + xprec_ = 9; + process_data(xdata_, xnum_values, xdatatp_, xCSbuffer); process_data(ydata_, ynum_values, ydatatp_, yCSbuffer); }