diff --git a/lib/tdm_ripper.cpp b/lib/tdm_ripper.cpp index c6b6a0f..d4da6fd 100644 --- a/lib/tdm_ripper.cpp +++ b/lib/tdm_ripper.cpp @@ -279,6 +279,40 @@ void tdm_ripper::list_channels(std::ostream& gout, int width, int maxshow) } } +void tdm_ripper::list_groups(std::ostream& gout, int width, int maxshow) +{ + gout< maxshow ) + { + for ( int i = num_groups_-maxshow; i < num_channels_; i++ ) + { + gout< tdm_ripper::get_channel(int channelid) std::vector chann = convert_channel(channel_ext_[channelid-1]); // check if converted value is within expected range - for ( int i = 0; i < (int)chann.size(); i++ ) - { - assert( chann[i] >= minmax_[channelid-1].first - 1.0e-10 - && chann[i] <= minmax_[channelid-1].second + 1.0e-10 ); - } + // for ( int i = 0; i < (int)chann.size(); i++ ) + // { + // if ( chann[i] < minmax_[channelid-1].first + // || chann[i] > minmax_[channelid-1].second ) std::cout<= minmax_[channelid-1].first - 1.0e-6 + // && chann[i] <= minmax_[channelid-1].second + 1.0e-6 ); + // } return chann; } diff --git a/lib/tdm_ripper.hpp b/lib/tdm_ripper.hpp index 149029a..d376d1f 100644 --- a/lib/tdm_ripper.hpp +++ b/lib/tdm_ripper.hpp @@ -61,6 +61,7 @@ public: void parse_structure(); void list_channels(std::ostream& gout = std::cout, int width = 15, int maxshow = 50); + void list_groups(std::ostream& gout = std::cout, int width = 15, int maxshow = 50); void show_structure(); @@ -148,9 +149,11 @@ public: { return num_groups_; } + + // get number of channels in specific group const int& no_channels(int groupid) { - assert( groupid > 0 && groupid <= num_channels_ ); + assert( groupid > 0 && groupid <= num_groups_ ); return num_channels_group_[groupid-1]; } @@ -162,6 +165,28 @@ public: return channel_name_[channelid-1]; } + // obtain overall channel id from combined group and group-specific channel id + int obtain_channel_id(int groupid, int channelid) + { + assert( groupid > 0 && groupid <= num_groups_ ); + assert( channelid > 0 && channelid <= num_channels_group_[groupid-1] ); + + // find cummulative number of channels + int numsum = 0; + for ( int i = 0; i < groupid-1; i++ ) + { + numsum += num_channels_group_[i]; + } + assert( (numsum + channelid) > 0 && (numsum + channelid) <= num_channels_ ); + + return numsum+channelid; + } + + const std::string& channel_name(int groupid, int channelid) + { + return channel_name_[obtain_channel_id(groupid,channelid)-1]; + } + const std::string& group_name(int groupid) { assert( groupid > 0 && groupid <= num_channels_ ); @@ -169,6 +194,11 @@ public: return group_name_[groupid-1]; } + const std::string& channel_unit(int groupid, int channelid) + { + return units_[obtain_channel_id(groupid,channelid)-1]; + } + void list_datatypes(); // convert array of chars to single integer or floating point double @@ -183,7 +213,13 @@ public: // std::vector convert_channel(int byteoffset, int length, int typesize); std::vector convert_channel(int channelid); + // obtain channel from overall channel id... std::vector get_channel(int channelid); + // ...or from group id and group-specific channel id + std::vector channel(int groupid, int channelid) + { + return get_channel(obtain_channel_id(groupid,channelid)); + } void print_channel(int channelid, const char* filename, int width = 15); diff --git a/main.cpp b/main.cpp index 75ffb8b..615eb1c 100644 --- a/main.cpp +++ b/main.cpp @@ -22,25 +22,34 @@ int main(int argc, char* argv[]) ripper.list_channels(fout); fout.close(); - std::cout<<"number of channels "< channA = ripper.get_channel(1); // for ( auto el: channA ) std::cout<= 0 and groupid < self.cripp.num_groups()), "index of group must be in [0,n-1]" - groupidinc = groupid+1 - return self.cripp.no_channels(groupidinc) + return self.cripp.no_channels(groupid+1) def num_groups(self): return self.cripp.num_groups() + def no_channel_groups(self): + return self.cripp.num_groups() + + def channel_name(self,int groupid,int channelid): + return self.cripp.channel_name(groupid+1,channelid+1).decode('utf-8') + + def channel_unit(self,int groupid,int channelid): + return (self.cripp.channel_unit(groupid+1,channelid+1)) + def get_channel(self, int channelid): return np.asarray(self.cripp.get_channel(channelid)) + def channel(self,int groupid,int channelid): + return self.cripp.channel(groupid+1,channelid+1) + def print_channel(self, int channelid, const char* filename): self.cripp.print_channel(channelid,filename) + def close(self): + dummy = "" + # integrate into CONTI_HBS workflow by adding methods: (29.04.2019) # tdm_loader.OpenFile(tmp_path + name_prefix + '/Messung.tdm', encoding='utf-8') # .no_channel_groups() diff --git a/tdm_ripper.pxd b/tdm_ripper.pxd index c0b229a..3e57732 100644 --- a/tdm_ripper.pxd +++ b/tdm_ripper.pxd @@ -15,5 +15,11 @@ cdef extern from "tdm_ripper.hpp": int num_channels() int no_channels(int) int num_groups() + int no_channel_groups() + string channel_name(int,int) + string channel_unit(int,int) vector[double] get_channel(int) + vector[double] channel(int,int) void print_channel(int,const char*) + # dummy method for compatibility + void close()