From 89b7f045a4ac304cedf39a72a86cc913df11515b Mon Sep 17 00:00:00 2001 From: Mario Fink Date: Fri, 17 Feb 2023 11:13:45 +0100 Subject: [PATCH] * fix channel dependent buffer offset, issue #15 * add python example multichannel.py --- lib/imc_channel.hpp | 8 ++++---- python/examples/multichannel.py | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 python/examples/multichannel.py diff --git a/lib/imc_channel.hpp b/lib/imc_channel.hpp index 4cae368..49123f8 100644 --- a/lib/imc_channel.hpp +++ b/lib/imc_channel.hpp @@ -318,16 +318,16 @@ namespace imc // convert buffer to actual datatype void convert_buffer() { - // TODO no clue how/if/when to handle buffer offset/mask/subsequent_bytes - // etc. and whatever that shit is! std::vector prms = blocks_->at(chnenv_.CSuuid_).get_parameters(); if ( prms.size() < 4) { throw std::runtime_error("CS block is invalid and features to few parameters"); } + + // extract (channel dependent) part of buffer unsigned long int buffstrt = prms[3].begin(); - std::vector CSbuffer( buffer_->begin()+buffstrt+1, - buffer_->begin()+buffstrt+buffer_size_+1 ); + std::vector CSbuffer( buffer_->begin()+buffstrt+buffer_offset_+1, + buffer_->begin()+buffstrt+buffer_offset_+buffer_size_+1 ); // determine number of values in buffer unsigned long int num_values = (unsigned long int)(CSbuffer.size()/(signbits_/8)); diff --git a/python/examples/multichannel.py b/python/examples/multichannel.py new file mode 100644 index 0000000..8d0d7d2 --- /dev/null +++ b/python/examples/multichannel.py @@ -0,0 +1,24 @@ + +import IMCtermite +import pandas + +if __name__ == "__main__" : + + imctm = IMCtermite.imctermite(b"Measurement.raw") + + chns = imctm.get_channels(True) + + df = pandas.DataFrame() + + xcol = "time ["+chns[0]['xunit']+"]" + df[xcol] = pandas.Series(chns[0]['xdata']) + + for idx,chn in enumerate(chns) : + #xcol = (chn['xname'] if chn['xname'] != '' else "x_"+str(idx))+" ["+chn['xunit']+"]" + #df[xcol] = pandas.Series(chn['xdata']) + ycol = chn['yname']+" ["+chn['yunit']+"]" + df[ycol] = pandas.Series(chn['ydata']) + + print(df) + df.to_csv("Measurement.csv",header=True,sep='\t',index=False) +