* rawmerge.hpp: generalize/fix condition for consistent timeseries
* introduce propagation of C++ exceptions to Cython/Python * convert all cout/cerr output to exceptions * Cython: introduce separate 'do_conversion' => avoid constructor to trigger conversion
This commit is contained in:
parent
3611e43276
commit
043784d278
9
.gitignore
vendored
9
.gitignore
vendored
@ -1,6 +1,4 @@
|
||||
|
||||
/build
|
||||
|
||||
eatraw
|
||||
eatdev
|
||||
|
||||
@ -8,11 +6,14 @@ nohup.out
|
||||
|
||||
.DS_Store
|
||||
|
||||
*.so
|
||||
|
||||
raw_eater.cpp
|
||||
raw_meat.cpp
|
||||
|
||||
cyt/*.cpp
|
||||
/build
|
||||
|
||||
*.log
|
||||
*.so
|
||||
*.o
|
||||
*.csv
|
||||
*.parquet
|
||||
|
@ -14,6 +14,8 @@ from libcpp cimport bool
|
||||
#
|
||||
# for how to overload the constructor see
|
||||
# https://cython.readthedocs.io/en/latest/src/userguide/wrapping_CPlusPlus.html
|
||||
# and propagating exceptions from C++ to Python
|
||||
# http://docs.cython.org/en/latest/src/userguide/wrapping_CPlusPlus.html#exceptions
|
||||
|
||||
cdef extern from "../lib/raweat.hpp":
|
||||
cdef cppclass raw_eater:
|
||||
@ -22,6 +24,8 @@ cdef extern from "../lib/raweat.hpp":
|
||||
raw_eater(string) except +
|
||||
# set new file for decoding
|
||||
void set_file(string)
|
||||
# perform conversion (pass any C++ exceptions to Python)
|
||||
void setup_and_conversion() except +
|
||||
# get validity of data format
|
||||
bool get_valid()
|
||||
# get channel name and unit
|
||||
|
@ -30,6 +30,9 @@ cdef class raweater:
|
||||
raise ValueError("'" + str(rawfile) + "' does not exist")
|
||||
self.rawit.set_file(rawfile)
|
||||
|
||||
def do_conversion(self):
|
||||
self.rawit.setup_and_conversion()
|
||||
|
||||
def validity(self):
|
||||
return self.rawit.get_valid()
|
||||
|
||||
|
@ -23,8 +23,8 @@ cdef extern from "../lib/rawmerge.hpp":
|
||||
vector[double] get_data()
|
||||
# dump all data to .csv
|
||||
void write_table(const char*,char)
|
||||
# add channel and try to merge it
|
||||
bool add_channel(string)
|
||||
# add channel and try to merge it (pass C++ exceptions to Python)
|
||||
bool add_channel(string) except +
|
||||
# get total number of (added) channels
|
||||
int get_num_channels()
|
||||
# get list of channel names
|
||||
|
@ -80,7 +80,7 @@ public:
|
||||
raw_eater(std::string rawfile, bool showlog = false) : rawfile_(rawfile)
|
||||
{
|
||||
// trigger setup and conversion
|
||||
if ( ! rawfile.empty() ) this->setup_and_conversion(showlog);
|
||||
//if ( ! rawfile.empty() ) this->setup_and_conversion(showlog);
|
||||
}
|
||||
|
||||
raw_eater()
|
||||
@ -88,6 +88,12 @@ public:
|
||||
|
||||
}
|
||||
|
||||
// destructor
|
||||
~raw_eater()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// provide/set new raw file
|
||||
void set_file(std::string rawfile, bool showlog = false)
|
||||
{
|
||||
@ -100,11 +106,11 @@ public:
|
||||
datmes_.clear();
|
||||
|
||||
// do setup and conversion
|
||||
setup_and_conversion(showlog);
|
||||
//setup_and_conversion(showlog);
|
||||
}
|
||||
|
||||
// set up and conversion
|
||||
void setup_and_conversion(bool showlog)
|
||||
void setup_and_conversion(bool showlog = false)
|
||||
{
|
||||
// make sure 'raw_file' is already set
|
||||
assert ( !rawfile_.empty() );
|
||||
@ -123,10 +129,8 @@ public:
|
||||
|
||||
if ( showlog )
|
||||
{
|
||||
// show raw data
|
||||
// show raw data and display predefined markers
|
||||
this->show_buffer();
|
||||
|
||||
// display predefined markers
|
||||
this->show_markers();
|
||||
}
|
||||
|
||||
@ -150,12 +154,6 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
// destructor
|
||||
~raw_eater()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// display buffer/data properties
|
||||
void show_buffer(int numel = 32)
|
||||
{
|
||||
@ -239,10 +237,16 @@ public:
|
||||
unsigned long int totalmarksize = 0;
|
||||
for (std::pair<std::string,std::vector<unsigned char>> mrk : markers_ )
|
||||
{
|
||||
//assert ( datasec_[mrk.first].size() > 0 && "marker segment of length zero" );
|
||||
if ( datasec_[mrk.first].size() == 0 )
|
||||
{
|
||||
std::cout<<"warning: "<<mrk.first<<" not found in buffer\n";
|
||||
std::string errmess = mrk.first + std::string(" not found in buffer");
|
||||
// std::cerr<<errmess;
|
||||
try {
|
||||
throw std::runtime_error(errmess);
|
||||
} catch( const std::exception& e ) {
|
||||
throw;
|
||||
//std::cout<<e.what()<<"\n";
|
||||
}
|
||||
}
|
||||
totalmarksize += datasec_[mrk.first].size();
|
||||
}
|
||||
@ -250,7 +254,6 @@ public:
|
||||
// std::cout<<"\n";
|
||||
|
||||
// check validity of format
|
||||
// assert ( totalmarksize > 0 && "didn't find any predefined marker => probably not a valid .raw-file" );
|
||||
valid_ = ( totalmarksize < 100 ) ? false : true;
|
||||
}
|
||||
|
||||
@ -389,7 +392,6 @@ public:
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
// switch for datatypes
|
||||
switch ( dattype )
|
||||
{
|
||||
@ -414,9 +416,9 @@ public:
|
||||
convert_data_as_type<unsigned long int>(datbuf,factor,offset);
|
||||
break;
|
||||
case 6 :
|
||||
std::cout<<"warning: 'signed long int' datatype with experimental support\n";
|
||||
// assert ( sizeof(signed long int)*8 == typesize );
|
||||
// convert_data_as_type<signed long int>(datbuf,factor,offset);
|
||||
// throw std::runtime_error("warning: 'signed long int' datatype with experimental support");
|
||||
assert ( sizeof(int)*8 == typesize );
|
||||
convert_data_as_type<int>(datbuf,factor,offset);
|
||||
break;
|
||||
@ -429,13 +431,13 @@ public:
|
||||
convert_data_as_type<double>(datbuf,factor,offset);
|
||||
break;
|
||||
case 9 :
|
||||
std::cerr<<"'imc Devices Transitional Recording' datatype not supported\n";
|
||||
throw std::runtime_error("'imc Devices Transitional Recording' datatype not supported");
|
||||
break;
|
||||
case 10 :
|
||||
std::cerr<<"'Timestamp Ascii' datatype not supported\n";
|
||||
throw std::runtime_error("'Timestamp Ascii' datatype not supported");
|
||||
break;
|
||||
case 11 :
|
||||
std::cout<<"warning: '2-Byte-Word digital' datatype with experimental support\n";
|
||||
// throw std::runtime_error("warning: '2-Byte-Word digital' datatype with experimental support");
|
||||
assert ( sizeof(short int)*8 == typesize );
|
||||
convert_data_as_type<short int>(datbuf,factor,offset);
|
||||
break;
|
||||
|
@ -83,13 +83,19 @@ public:
|
||||
{
|
||||
// set raw file and perform conversion
|
||||
this->set_file(rawfile,showlog);
|
||||
// try {
|
||||
this->setup_and_conversion();
|
||||
// } catch (const std::exception& e) {
|
||||
// // throw;
|
||||
// std::cout<<e.what();
|
||||
// }
|
||||
|
||||
// show channel name, unit, timestep, time unit, etc.
|
||||
if ( showlog && this->get_valid() )
|
||||
{
|
||||
std::cout<<this->get_name()<<" ["<<this->get_unit()<<"]"<<"\n";
|
||||
std::cout<<"Time ["<<this->get_temp_unit()<<"]"<<"\n";
|
||||
for ( unsigned long int i = 0; i < 5; i++ ) std::cout<<this->get_time()[i]<<"\n";
|
||||
std::cout<<this->get_name()<<" ["<<this->get_unit()<<"]"<<"\n";
|
||||
for ( unsigned long int i = 0; i < 5; i++ ) std::cout<<this->get_data()[i]<<"\n";
|
||||
std::cout<<"lenght of channel "<<this->get_time().size()<<"\n";
|
||||
std::cout<<"\n";
|
||||
@ -126,12 +132,9 @@ public:
|
||||
std::vector<double> td = this->get_data();
|
||||
|
||||
// compare start/end of timeseries (define tolerance)
|
||||
double deltat = 7*fmax(this->get_dt(),this->dt_);
|
||||
if ( ( this->timeseries_[0] - ts[0] < deltat )
|
||||
&& ( this->timeseries_.back() - ts.back() < deltat ) )
|
||||
// double tol = 0.001;
|
||||
// if ( ( (this->timeseries_[0]-ts[0])/ts[0] < tol )
|
||||
// && ( (this->timeseries_.back()-ts.back())/ts.back() < tol ) )
|
||||
double deltat = 9*fmax(this->get_dt(),this->dt_);
|
||||
if ( ( fabs( this->timeseries_[0] - ts[0] ) < deltat )
|
||||
&& ( fabs( this->timeseries_.back() - ts.back() ) < deltat ) )
|
||||
{
|
||||
// resulting new time series
|
||||
std::vector<double> newts;
|
||||
@ -155,9 +158,14 @@ public:
|
||||
else
|
||||
{
|
||||
// refuse to merge due to inconsistent start of timeseries
|
||||
std::cerr<<"rawmerge: add_channel '"<<rawfile
|
||||
<<"' : inconsistent start of time series, i.e. "
|
||||
<<timeseries_[0]<<" vs. "<<ts[0]<<"\n";
|
||||
std::string errmess = std::string("rawmerge: add_channel '") + rawfile
|
||||
+ std::string("' : inconsistent start of time series, i.e. ")
|
||||
+ std::to_string(timeseries_[0]) + std::string(" vs. ")
|
||||
+ std::to_string(ts[0])
|
||||
+ std::string("( timesteps: ") + std::to_string(this->get_dt())
|
||||
+ std::string(" and ") + std::to_string(this->dt_) + std::string(")");
|
||||
// std::cerr<<errmess<<"\n";
|
||||
throw std::runtime_error(errmess);
|
||||
|
||||
return false;
|
||||
}
|
||||
@ -165,9 +173,12 @@ public:
|
||||
else
|
||||
{
|
||||
// refuse to merge due to different temporal units
|
||||
std::cerr<<"rawmerge: add_channel '"<<rawfile
|
||||
<<"' : inconsistent time units: '"
|
||||
<<this->get_temp_unit()<<"' versus '"<<this->temp_unit_<<"'\n";
|
||||
std::string errmess = std::string("rawmerge: add_channel '") + rawfile
|
||||
+ std::string("' : inconsistent time units: ', i.e. '")
|
||||
+ this->get_temp_unit() + std::string("' vs. '")
|
||||
+ this->temp_unit_ + std::string("'");
|
||||
// std::cerr<<errmess<<"\n";
|
||||
throw std::runtime_error(errmess);
|
||||
|
||||
return false;
|
||||
}
|
||||
@ -175,7 +186,10 @@ public:
|
||||
else
|
||||
{
|
||||
// provided file does not feature a valid .raw format
|
||||
std::cerr<<"rawmerge: add_channel '"<<rawfile<<"' : invalid .raw file\n";
|
||||
std::string errmess = std::string("rawmerge: add_channel '") + rawfile
|
||||
+ std::string("' : invalid .raw file");
|
||||
// std::cerr<<errmess<<"\n";
|
||||
throw std::runtime_error(errmess);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
14
makefile
14
makefile
@ -15,13 +15,14 @@ EXE = eatraw
|
||||
|
||||
# compiler and its options
|
||||
CCC = g++ -std=c++11
|
||||
OPT = -O3 -Wall -mavx -mno-tbm -mf16c -mno-f16c
|
||||
#OPT = -O3 -Wall -mavx -mno-tbm -mf16c -mno-f16c
|
||||
OPT = -O3 -Wall -Werror
|
||||
|
||||
#-----------------------------------------------------------------------------#
|
||||
# C++
|
||||
|
||||
# build executable
|
||||
$(EXE) : $(SRC)main.cpp $(LIB)raweat.hpp $(LIB)hexshow.hpp $(LIB)rawmerge.hpp
|
||||
$(EXE) : $(SRC)main.cpp $(LIB)raweat.hpp $(LIB)hexshow.hpp $(LIB)rawmerge.hpp output
|
||||
$(CCC) $(OPT) $< -o $@
|
||||
|
||||
# development version
|
||||
@ -37,6 +38,7 @@ clean :
|
||||
rm -f $(EXE)
|
||||
rm -f eatall
|
||||
rm -f eatdev
|
||||
rm -rf output/
|
||||
|
||||
# check existence of name of executable globally
|
||||
chexe:=$(shell command -v $(EXE))
|
||||
@ -59,7 +61,8 @@ uninstall :
|
||||
|
||||
# build python module
|
||||
py : $(CYT)setup_raw_eater.py $(CYT)raw_eater.pyx $(CYT)raw_eater.pxd $(LIB)raweat.hpp \
|
||||
$(CYT)setup_raw_meat.py $(CYT)raw_meat.pyx $(CYT)raw_meat.pxd $(LIB)rawmerge.hpp
|
||||
$(CYT)setup_raw_meat.py $(CYT)raw_meat.pyx $(CYT)raw_meat.pxd $(LIB)rawmerge.hpp \
|
||||
output
|
||||
python3 $(CYT)setup_raw_eater.py build_ext --inplace
|
||||
python3 $(CYT)setup_raw_meat.py build_ext --inplace
|
||||
cp raw_eater.cpython-*.so pyt/
|
||||
@ -80,5 +83,10 @@ py-clean :
|
||||
rm -f $(CYT)raw_meat.cpp
|
||||
rm -rf build/
|
||||
rm -f *.txt
|
||||
rm -rf output/
|
||||
|
||||
# prepare directory for test output
|
||||
output :
|
||||
mkdir -pv output/
|
||||
|
||||
#-----------------------------------------------------------------------------#
|
||||
|
@ -5,65 +5,23 @@ import raw_eater
|
||||
import raw_meat
|
||||
import pyarrow as pa
|
||||
import pyarrow.parquet as pq
|
||||
import glob
|
||||
from pathlib import Path
|
||||
|
||||
rawlist1 = [
|
||||
"smp/Rangerover_Evoque_F-RR534_2019-05-07/BrakePedalActiveQF_HS.raw",
|
||||
"smp/Rangerover_Evoque_F-RR534_2019-05-07/BrakePressure_HS.raw",
|
||||
"smp/Rangerover_Evoque_F-RR534_2019-05-07/EngineSpeed_HS.raw",
|
||||
"smp/Rangerover_Evoque_F-RR534_2019-05-07/pressure_FL.raw",
|
||||
"smp/Rangerover_Evoque_F-RR534_2019-05-07/pressure_RL.raw",
|
||||
"smp/Rangerover_Evoque_F-RR534_2019-05-07/pressure_Vacuum.raw",
|
||||
"smp/VehicleSpeed_HS.raw",
|
||||
"smp/Rangerover_Evoque_F-RR534_2019-05-07/ABS_A_Port1.raw",
|
||||
"./pyt/example.py",
|
||||
"smp/Rangerover_Evoque_F-RR534_2019-05-07/LateralAcceleration_HS.raw",
|
||||
"smp/Rangerover_Evoque_F-RR534_2019-05-07/Temp_Disc_FR.raw"
|
||||
]
|
||||
fileobj1 = Path("smp/Rangerover_Evoque_F-RR534_2019-05-07/").rglob("*.raw")
|
||||
rawlist1 = [str(fl) for fl in fileobj1]
|
||||
|
||||
rawlist2 = [
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/ACC_lat.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/ACC_long.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Flex_AccelPdlPosn.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Flex_AirTemp_Outsd_IC.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Flex_AirTemp_Outsd.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Flex_BrkPdl_Stat.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Flex_BrkTrq_D_V2.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Flex_BrkTrq_R.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Flex_BrkTrq_V2.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Flex_EngLoad_OBD.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Flex_EngRPM.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Flex_Odo.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Flex_PkBrk_Stat.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Flex_StWhl_Angl.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Flex_StWhl_AnglSpd.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Flex_TC_liquidFuelCons1.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Flex_VehSpd_Disp.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Flex_WhlRPM_FL.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Flex_WhlRPM_FR.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Flex_WhlRPM_RL.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Flex_WhlRPM_RR.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/GPS.height.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/GPS.speed.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/GPS.time.sec.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Pressure_FL.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Pressure_PC.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Pressure_RR.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Pressure_SC.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/setup_id.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Temp_Disc_FL.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Temp_Disc_FR.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Temp_Disc_RL.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Temp_Disc_RR.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Temp_Fluid_FL.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Temp_Fluid_RL.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Travel_Piston.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/Vacuum_Booster.raw",
|
||||
"smp/Mercedes_E-Klasse-2019-08-08/vehicle_id.raw"
|
||||
]
|
||||
fileobj2 = Path("smp/Mercedes_E-Klasse-2019-08-08/").rglob("*.raw")
|
||||
rawlist2 = [str(fl) for fl in fileobj2]
|
||||
|
||||
rawlist = rawlist2
|
||||
rawlist = rawlist1 #[rawlist1[0],rawlist1[4],rawlist2[0],rawlist2[6]]
|
||||
for fil in rawlist2 :
|
||||
rawlist.append(fil)
|
||||
rawlist.append("smp/pressure_Vacuum.asc")
|
||||
|
||||
print("")
|
||||
print(rawlist)
|
||||
print()
|
||||
|
||||
#-----------------------------------------------------------------------------#
|
||||
|
||||
@ -80,8 +38,12 @@ for rf in rawlist :
|
||||
# eatraw = raw_eater.raweater(rf.encode())
|
||||
# eatraw = raw_meat.rawmerger(rf.encode())
|
||||
|
||||
# use global instance of "raw_eater"
|
||||
# use global instance of "raw_eater" to set file and perform decoding
|
||||
eatraw.set_file(rf.encode())
|
||||
try :
|
||||
eatraw.do_conversion()
|
||||
except RuntimeError as e :
|
||||
print("conversion failed: " + str(e))
|
||||
|
||||
# check validity of file format
|
||||
if eatraw.validity() :
|
||||
@ -106,7 +68,7 @@ for rf in rawlist :
|
||||
outname = rf.split('/')[-1].replace('raw','csv')
|
||||
|
||||
print("write output to : " + outname)
|
||||
eatraw.write_table((outname).encode(),ord(' '))
|
||||
eatraw.write_table(("output/"+outname).encode(),ord(' '))
|
||||
|
||||
else :
|
||||
|
||||
@ -124,17 +86,17 @@ eatmea = raw_meat.rawmerger(''.encode()) #rawlist[0].encode())
|
||||
# add every single channel/file in list
|
||||
for rf in rawlist :
|
||||
print("\nadding channel " + str(rf))
|
||||
try :
|
||||
succ = eatmea.add_channel(rf.encode())
|
||||
if succ :
|
||||
print("\nrecent time series: length: " + str(len(eatmea.get_time_series())) + "\n")
|
||||
else :
|
||||
print("\nfailed to add channel\n")
|
||||
except RuntimeError as e :
|
||||
print("failed to add channel: " + str(e))
|
||||
|
||||
# show summary of successfully merged channels
|
||||
print("\nmerged channels:\n")
|
||||
|
||||
# write merged table to .csv output
|
||||
eatmea.write_table_all('allchannels.csv'.encode(),ord(','))
|
||||
eatmea.write_table_all('output/allchannels.csv'.encode(),ord(','))
|
||||
|
||||
# get number of successfully merged channels and their names (+units)
|
||||
numch = eatmea.get_num_channels()
|
||||
@ -166,10 +128,10 @@ pyarwtab = pa.Table.from_arrays(pyarrs,chnames)
|
||||
print("\n" + 60*"-" + "\n" + str(pyarwtab) + "\n")
|
||||
|
||||
# write pyarrow table to .parquet file with compression
|
||||
pq.write_table(pyarwtab,'allchannels.parquet',compression='BROTLI') # compression='BROTLI', 'SNAPPY')
|
||||
pq.write_table(pyarwtab,'output/allchannels.parquet',compression='BROTLI') # compression='BROTLI', 'SNAPPY')
|
||||
|
||||
# try to read and decode the .parquet file
|
||||
df = pq.read_table('allchannels.parquet')
|
||||
df = pq.read_table('output/allchannels.parquet')
|
||||
print(df.to_pandas())
|
||||
# df.to_pandas().to_csv('allchannels.csv',index=False,encoding='utf-8',sep=",")
|
||||
|
||||
|
51
src/main.cpp
51
src/main.cpp
@ -9,14 +9,6 @@
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
// std::cout<<"number of CLI-arguments: "<<argc<<"\n";
|
||||
// for ( int i = 0; i < argc; i++ ) std::cout<<std::setw(5)<<i<<": "<<argv[i]<<"\n";
|
||||
|
||||
// path of filename provided ?
|
||||
// assert( argc > 2 && "please provide a filename and path for input and output" );
|
||||
|
||||
// check number of CLI arguments
|
||||
// assert( argc == 3 );
|
||||
|
||||
if ( argc != 3 ) //or ( argc == 1 && std::string(argv[1]) == str::string("--help") )
|
||||
{
|
||||
@ -29,15 +21,14 @@ int main(int argc, char* argv[])
|
||||
// get name/path of file from CLI argument
|
||||
std::string rawfile(argv[1]);
|
||||
|
||||
// declare instance of "raw_eater"
|
||||
raw_eater eatraw(rawfile,true);
|
||||
// declare instance of 'raw_eater' (and decode data)
|
||||
raw_eater eatraw; //rawfile,false);
|
||||
|
||||
// declare instance of "raw_merger"
|
||||
// raw_merger eatmea;
|
||||
// eatmea.add_channel(rawfile,true);
|
||||
// eatmea.add_channel("smp/VehicleSpeed_HS.raw",true);
|
||||
// eatmea.add_channel("smp/VehicleSpeed_HS.raw",true);
|
||||
// eatmea.add_channel("smp/Rangerover_Evoque_F-RR534_2019-05-07/Temp_Disc_FR.raw",true);
|
||||
// set file to be decoded
|
||||
eatraw.set_file(rawfile,true);
|
||||
|
||||
// do conversion
|
||||
eatraw.setup_and_conversion(false);
|
||||
|
||||
// eatraw.show_markers();
|
||||
|
||||
@ -67,10 +58,32 @@ int main(int argc, char* argv[])
|
||||
// write data in csv-file
|
||||
if ( eatraw.get_valid() )
|
||||
{
|
||||
// eatraw.write_table(std::string(argv[2]));
|
||||
eatraw.write_table(std::string(argv[2]),' ');
|
||||
// eatmea.write_table(std::string(argv[2]));
|
||||
// eatmea.write_table(std::string(argv[2]),' ');
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cout<<"=> invalid/corrupt .raw file\n";
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------//
|
||||
|
||||
// declare instance of 'raw_merger'
|
||||
raw_merger eatmea;
|
||||
|
||||
// add channels
|
||||
eatmea.add_channel(rawfile,false);
|
||||
// eatmea.add_channel("smp/VehicleSpeed_HS.raw",true);
|
||||
// eatmea.add_channel("smp/Mercedes_E-Klasse-2019-08-08/Flex_StWhl_AnglSpd.raw",false);
|
||||
// eatmea.add_channel("smp/Rangerover_Evoque_F-RR534_2019-05-07/Temp_Disc_FR.raw",false);
|
||||
|
||||
// write merged table
|
||||
if ( eatmea.get_num_channels() > 0 )
|
||||
{
|
||||
eatmea.write_table_all("output/allchannels.csv",' ');
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cout<<"no valid channel added\n";
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user