From 1ee05c03a2d8105a931027f540311ab64e2a1822 Mon Sep 17 00:00:00 2001 From: Mario Fink Date: Mon, 10 Aug 2020 17:29:49 +0200 Subject: [PATCH] rawmerge.hpp: start implementation of merge --- lib/raweat.hpp | 5 +-- lib/rawmerge.hpp | 100 +++++++++++++++++++++++++++++++++++++++++------ src/main.cpp | 4 +- 3 files changed, 94 insertions(+), 15 deletions(-) diff --git a/lib/raweat.hpp b/lib/raweat.hpp index bdf253a..5cfea1a 100644 --- a/lib/raweat.hpp +++ b/lib/raweat.hpp @@ -89,9 +89,8 @@ public: } // provide/set new raw file - void set_file(std::string rawfile) + void set_file(std::string rawfile, bool showlog = false) { - std::cout<<"raw_eater::set_file "<> channels_; std::vector timeseries_; + // timestep of original timeseries + double dt_; + // temporal unit and channel meta data std::string temp_unit_; std::vector channel_names_; @@ -49,31 +52,106 @@ public: } + // get list of channel names + std::vector get_channel_names() + { + return this->channel_names_; + } + + // get unified timeseries + std::vector get_time_series() + { + return this->timeseries_; + } + + // get array representation i-th channel + std::vector get_channel(long unsigned int chidx) + { + return chidx >= 0 && chidx < this->channels_.size() ? + this->channels_[chidx] : std::vector(); + } + // add a single channel and its associated time series - bool add_channel(std::string rawfile) + bool add_channel(std::string rawfile, bool log = false) { // set raw file and perform conversion - this->set_file(rawfile); + this->set_file(rawfile,false); + + // show channel name, unit, timestep, time unit, etc. + if ( log ) + { + std::cout<get_name()<<" ["<get_unit()<<"]"<<"\n"; + std::cout<<"Time ["<get_temp_unit()<<"]"<<"\n"; + for ( unsigned long int i = 0; i < 5; i++ ) std::cout<get_time()[i]<<"\n"; + for ( unsigned long int i = 0; i < 5; i++ ) std::cout<get_data()[i]<<"\n"; + std::cout<<"lenght of channel "<get_time().size()<<"\n"; + std::cout<<"\n"; + } // add first/initial time series (and channel data) - if ( timeseries_.size() == 0 && channels_.size() == 0 ) + if ( this->get_valid() && timeseries_.size() == 0 && channels_.size() == 0 ) { - std::cout<<"adding first channel\n"; + std::cout<<"adding initial channel "<get_time(); - temp_unit_ = this->get_temp_unit(); + this->timeseries_ = this->get_time(); + this->temp_unit_ = this->get_temp_unit(); + + // get timestep size + this->dt_ = this->get_dt(); // insert channel data and its meta data - channels_.push_back(this->get_data()); - channel_names_.push_back(this->get_name() + std::string(" [") - + this->get_unit() + std::string("]")); + this->channels_.push_back(this->get_data()); + this->channel_names_.push_back(this->get_name() + std::string(" [") + + this->get_unit() + std::string("]")); return true; } else { - // TODO check consistency of time series, time unit, channels.... - return false; + std::cout<<"adding next channel "<get_temp_unit() == this->temp_unit_ ) + { + // get time series + std::vector ts = this->get_time(); + + // compare start/end of timeseries (define tolerance) + double deltat = 10*this->dt_; + if ( ( this->timeseries_[0] - ts[0] < deltat ) + && ( this->timeseries_.back() - ts.back() < deltat ) ) + { + // submerge channels and their time series + // TODO + // this->merge_channels(this.timeseries_,this) + + // insert channel data and its meta data + this->channels_.push_back(this->get_data()); + this->channel_names_.push_back(this->get_name() + std::string(" [") + + this->get_unit() + std::string("]")); + + + return true; + } + else + { + // refuse to merge due to inconsistent start of timeseries + std::cerr<<"rawmerge: add_channel '"<