gauge timestamp and use optional .tdx path in cython

This commit is contained in:
Mario Fink 2019-05-16 15:59:54 +02:00
parent 964cf461a7
commit 161541f4c6
6 changed files with 32 additions and 17 deletions

View File

@ -6,8 +6,9 @@ tdmpath = b"samples/SineData.tdm"
tdxpath = b"samples/SineData.tdx" tdxpath = b"samples/SineData.tdx"
# create instance of ripper class # create instance of ripper class
RP = tdm_ripper.pytdmripper(tdmpath) # RP = tdm_ripper.pytdmripper(tdmpath)
RP = tdm_ripper.pytdmripper(b"/Users/mariofink/git/Conti_HBS/data_science/python/features/tdm_tmp_slow/75_1/Messung.tdm") RP = tdm_ripper.pytdmripper(tdmpath,tdxpath)
# RP = tdm_ripper.pytdmripper(b"/Users/mariofink/git/Conti_HBS/data_science/python/features/tdm_tmp_slow/75_1/Messung.tdm")
# provide overview of available channels # provide overview of available channels
RP.show_channels() RP.show_channels()
@ -19,7 +20,7 @@ for i in range(0,RP.num_groups()):
print(str(i+1).rjust(10)+str(RP.no_channels(i)).rjust(10)) print(str(i+1).rjust(10)+str(RP.no_channels(i)).rjust(10))
# print particular channel to file # print particular channel to file
# RP.print_channel(1,b"SineData_extract.dat") RP.print_channel(1,b"SineData_extract.dat")
# extract channel and return it to numpy array # extract channel and return it to numpy array
# channels = RP.get_channel(1) # channels = RP.get_channel(1)

View File

@ -61,6 +61,10 @@ tdm_ripper::tdm_ripper(std::string tdmfile, std::string tdxfile, bool neglect_em
// open .tdx and stream all binary data into vector // open .tdx and stream all binary data into vector
std::ifstream fin(tdxfile_.c_str(),std::ifstream::binary); std::ifstream fin(tdxfile_.c_str(),std::ifstream::binary);
assert( fin.good() && "failed to open .tdx-file" );
if ( !fin.good() ) std::cout<<"failed to open .tdx-file\n\n";
// assert( errno == 0 );
// std::cout<<"error code "<<strerror(errno)<<"\n\n";
std::vector<unsigned char> tdxbuf((std::istreambuf_iterator<char>(fin)), std::vector<unsigned char> tdxbuf((std::istreambuf_iterator<char>(fin)),
(std::istreambuf_iterator<char>())); (std::istreambuf_iterator<char>()));
tdxbuf_ = tdxbuf; tdxbuf_ = tdxbuf;
@ -123,7 +127,8 @@ void tdm_ripper::parse_structure()
} }
else else
{ {
assert ( false && "unexpected attribute name" ); startstop.first = "";
startstop.second = "";
} }
} }
group_timestamp_.push_back(startstop); group_timestamp_.push_back(startstop);
@ -306,14 +311,17 @@ void tdm_ripper::list_channels(std::ostream& gout, int width, int maxshow)
void tdm_ripper::list_groups(std::ostream& gout, int width, int maxshow) void tdm_ripper::list_groups(std::ostream& gout, int width, int maxshow)
{ {
// if present, show timestamps
bool showts = ( group_timestamp_[0].first.compare("") != 0 );
gout<<std::setw(width)<<"group"; gout<<std::setw(width)<<"group";
gout<<std::setw(width)<<"group id"; gout<<std::setw(width)<<"group id";
gout<<std::setw(width)<<"group name"; gout<<std::setw(width)<<"group name";
gout<<std::setw(width)<<"num channels"; gout<<std::setw(width)<<"num channels";
gout<<std::setw(2*width)<<"start time"; if ( showts ) gout<<std::setw(2*width)<<"start time";
gout<<std::setw(2*width)<<"stop time"; if ( showts ) gout<<std::setw(2*width)<<"stop time";
gout<<"\n"; gout<<"\n";
gout<<std::setfill('-')<<std::setw(8*width+1)<<"\n"; gout<<std::setfill('-')<<(showts?std::setw(8*width+1):std::setw(4*width+1))<<"\n";
gout<<std::setfill(' '); gout<<std::setfill(' ');
for ( int i = 0; i < num_groups_ && i < maxshow; i++ ) for ( int i = 0; i < num_groups_ && i < maxshow; i++ )
@ -322,8 +330,8 @@ void tdm_ripper::list_groups(std::ostream& gout, int width, int maxshow)
gout<<std::setw(width)<<group_id_[i]; gout<<std::setw(width)<<group_id_[i];
gout<<std::setw(width)<<group_name_[i]; gout<<std::setw(width)<<group_name_[i];
gout<<std::setw(width)<<num_channels_group_[i]; gout<<std::setw(width)<<num_channels_group_[i];
gout<<std::setw(2*width)<<time_stamp(i,true); if ( showts ) gout<<std::setw(2*width)<<time_stamp(i,true);
gout<<std::setw(2*width)<<time_stamp(i,false); if ( showts ) gout<<std::setw(2*width)<<time_stamp(i,false);
gout<<"\n"; gout<<"\n";
} }
gout<<"\n\n"; gout<<"\n\n";
@ -336,8 +344,8 @@ void tdm_ripper::list_groups(std::ostream& gout, int width, int maxshow)
gout<<std::setw(width)<<group_id_[i]; gout<<std::setw(width)<<group_id_[i];
gout<<std::setw(width)<<group_name_[i]; gout<<std::setw(width)<<group_name_[i];
gout<<std::setw(width)<<num_channels_group_[i]; gout<<std::setw(width)<<num_channels_group_[i];
gout<<std::setw(2*width)<<time_stamp(i,true); if ( showts ) gout<<std::setw(2*width)<<time_stamp(i,true);
gout<<std::setw(2*width)<<time_stamp(i,false); if ( showts ) gout<<std::setw(2*width)<<time_stamp(i,false);
gout<<"\n"; gout<<"\n";
} }
gout<<"\n\n"; gout<<"\n\n";

View File

@ -249,14 +249,15 @@ public:
} }
// evtl. get group time_stamp of .tdm file given in unix format // evtl. get group time_stamp of .tdm file given in unix format
std::string unix_timestamp(std::string unixts) static std::string unix_timestamp(std::string unixts)
{ {
// average year of Gregorian calender // average year of Gregorian calender
const double avgdaysofyear = 365 + 1./4 - 1./100 + 1./400; const double avgdaysofyear = 365.0 + 1./4 - 1./100 + 1./400
- 8./24561; // gauge timestamp according to DIADEM result
// convert string to long int = number of second since 0000/01/01 00:00 // convert string to long int = number of second since 0000/01/01 00:00
long int ts = atol(unixts.c_str()); long int ts = atol(unixts.c_str());
assert( ts > 0 ); assert( ts >= 0 );
// use STL to convert timestamp (epoch usually starts from 01.01.1970) // use STL to convert timestamp (epoch usually starts from 01.01.1970)
std::time_t tstime = ts - 1970*avgdaysofyear*86400; std::time_t tstime = ts - 1970*avgdaysofyear*86400;

View File

@ -28,6 +28,11 @@ int main(int argc, char* argv[])
ripper.list_channels(fout); ripper.list_channels(fout);
fout.close(); fout.close();
// long int nsa = 6.3636349745e10; // expected result: 22.07.2016, 19:49:05
// long int nsb = 6.3636350456e10;
// std::string ts = std::to_string(nsa);
// std::cout<<ripper.unix_timestamp(ts)<<"\n";
std::cout<<"number of channels "<<ripper.num_channels()<<"\n"; std::cout<<"number of channels "<<ripper.num_channels()<<"\n";
std::cout<<"number of groups "<<ripper.num_groups()<<"\n\n"; std::cout<<"number of groups "<<ripper.num_groups()<<"\n\n";

View File

@ -7,8 +7,8 @@ cdef class pytdmripper:
# pointer to C++ instance (since there's no nullary constructor) # pointer to C++ instance (since there's no nullary constructor)
cdef tdm_ripper *cripp cdef tdm_ripper *cripp
def __cinit__(self, string tdmfile): def __cinit__(self, string tdmfile, string tdxfile = b""):
self.cripp = new tdm_ripper(tdmfile) self.cripp = new tdm_ripper(tdmfile,tdxfile)
def __dealloc__(self): def __dealloc__(self):
del self.cripp del self.cripp

View File

@ -11,7 +11,7 @@ cdef extern from "tdm_ripper.cpp":
cdef extern from "tdm_ripper.hpp": cdef extern from "tdm_ripper.hpp":
cdef cppclass tdm_ripper: cdef cppclass tdm_ripper:
tdm_ripper(string) except + tdm_ripper(string,string) except +
void list_channels() void list_channels()
void list_groups() void list_groups()
int num_channels() int num_channels()