change repository/library/tool name
This commit is contained in:
parent
7284314fcb
commit
3e4ee699ad
1
.gitignore
vendored
1
.gitignore
vendored
@ -11,3 +11,4 @@ tdmripper
|
|||||||
*.log
|
*.log
|
||||||
tdmreaper
|
tdmreaper
|
||||||
cython/*.cpp
|
cython/*.cpp
|
||||||
|
tdmtermite
|
||||||
|
44
README.md
44
README.md
@ -2,14 +2,14 @@
|
|||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://github.com/RecordEvolution/tdm_ripper.git">
|
<a href="https://github.com/RecordEvolution/tdm_ripper.git">
|
||||||
<img
|
<img
|
||||||
alt="tdmreaper.svg"
|
alt="tdmtermite.svg"
|
||||||
src="assets/tdmreaper.svg"
|
src="assets/tdmtermite.svg"
|
||||||
width="400"
|
width="400"
|
||||||
/>
|
/>
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
The _tdm_reaper_ is a C++ based library that decodes (encodes) the proprietary
|
_TDMtermite_ is a C++ based library that decodes (encodes) the proprietary
|
||||||
file format _TDM/TDX_ for measurement data, which relies upon the
|
file format _TDM/TDX_ for measurement data, which relies upon the
|
||||||
_technical data management_ data model. The TDM format was introduced by
|
_technical data management_ data model. The TDM format was introduced by
|
||||||
[National Instruments](https://www.ni.com) and is employed by
|
[National Instruments](https://www.ni.com) and is employed by
|
||||||
@ -134,7 +134,7 @@ The library can be used both as a _CLI_ based tool and as a _Python_ module.
|
|||||||
|
|
||||||
### CLI tool
|
### CLI tool
|
||||||
|
|
||||||
To install the CLI tool _tdmreaper_ do
|
To install the CLI tool _tdmtermite_ do
|
||||||
|
|
||||||
```Shell
|
```Shell
|
||||||
make install
|
make install
|
||||||
@ -151,7 +151,7 @@ available, which may be installed via `python3 -m pip install cython` .
|
|||||||
Furthermore, the [Numpy](https://numpy.org) package is recommended to be able
|
Furthermore, the [Numpy](https://numpy.org) package is recommended to be able
|
||||||
to pass arrays of data from the C++ kernel to Python. The _makefile_ provides
|
to pass arrays of data from the C++ kernel to Python. The _makefile_ provides
|
||||||
the target `make cython-requirements` to install all required Python modules.
|
the target `make cython-requirements` to install all required Python modules.
|
||||||
Finally, to build the Python extension _tdm_reaper_ either locally or install
|
Finally, to build the Python extension _tdm_termite_ either locally or install
|
||||||
it the targets `make cython-build` and `make cython-install` are provided.
|
it the targets `make cython-build` and `make cython-install` are provided.
|
||||||
Hence, to install the Python module on the system simply do
|
Hence, to install the Python module on the system simply do
|
||||||
|
|
||||||
@ -160,19 +160,19 @@ make cython-requirements
|
|||||||
make cython-install
|
make cython-install
|
||||||
```
|
```
|
||||||
|
|
||||||
that makes the module available to be imported as `import tdm_reaper` .
|
that makes the module available to be imported as `import tdm_termite` .
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
### CLI tool
|
### CLI tool
|
||||||
|
|
||||||
The usage of the CLI tool is sufficiently clarified by its help message displayed
|
The usage of the CLI tool is sufficiently clarified by its help message displayed
|
||||||
by `tdmreaper --help`. For instance, to extract the data decoded in the pair of
|
by `tdmtermite --help`. For instance, to extract the data decoded in the pair of
|
||||||
files `samples/SineData.tdm` and `samples/SineData.tdx` into the directory
|
files `samples/SineData.tdm` and `samples/SineData.tdx` into the directory
|
||||||
`/home/jack/data/`:
|
`/home/jack/data/`:
|
||||||
|
|
||||||
```Shell
|
```Shell
|
||||||
tdmreaper samples/SineData.tdm samples/SineData.tdx --output /home/jack/data
|
tdmtermite samples/SineData.tdm samples/SineData.tdx --output /home/jack/data
|
||||||
```
|
```
|
||||||
|
|
||||||
The tool can also be used to list the available objects in the TDM dataset, which
|
The tool can also be used to list the available objects in the TDM dataset, which
|
||||||
@ -180,7 +180,7 @@ are i.a. _channels_, _channelgroups_ and TDX _blocks_. For instance, to list
|
|||||||
all channels and channelgroups (without writing any file output):
|
all channels and channelgroups (without writing any file output):
|
||||||
|
|
||||||
```Shell
|
```Shell
|
||||||
tdmreaper samples/SineData.tdm samples/SineData.tdx --listgroups --listchannels
|
tdmtermite samples/SineData.tdm samples/SineData.tdx --listgroups --listchannels
|
||||||
```
|
```
|
||||||
|
|
||||||
The user may also submit a _filenaming rule_ to control the names of the files the
|
The user may also submit a _filenaming rule_ to control the names of the files the
|
||||||
@ -189,7 +189,7 @@ and `%c` representing the group id, group name, channel index and channel name
|
|||||||
are defined. The default filenaming option is
|
are defined. The default filenaming option is
|
||||||
|
|
||||||
```Shell
|
```Shell
|
||||||
tdmreaper samples/SineData.tdm samples/SineData.tdx --output /home/jack/data --filenames channelgroup_%G.csv
|
tdmtermite samples/SineData.tdm samples/SineData.tdx --output /home/jack/data --filenames channelgroup_%G.csv
|
||||||
```
|
```
|
||||||
|
|
||||||
which makes the tool write _all channels_ grouped into files according to their
|
which makes the tool write _all channels_ grouped into files according to their
|
||||||
@ -199,7 +199,7 @@ to extract only a single channel(group) by providing a particular channel(-group
|
|||||||
id in the filenaming flag. For example,
|
id in the filenaming flag. For example,
|
||||||
|
|
||||||
```Shell
|
```Shell
|
||||||
tdmreaper samples/SineData.tdm samples/SineData.tdx --output /home/jack/data -f channel_usi16_%c.csv --includemeta
|
tdmtermite samples/SineData.tdm samples/SineData.tdx --output /home/jack/data -f channel_usi16_%c.csv --includemeta
|
||||||
```
|
```
|
||||||
|
|
||||||
will write the single channel with id `usi16` to the file
|
will write the single channel with id `usi16` to the file
|
||||||
@ -207,25 +207,25 @@ will write the single channel with id `usi16` to the file
|
|||||||
|
|
||||||
### Python
|
### Python
|
||||||
|
|
||||||
To be able to use the Python module _tdm_reaper_ it first has to be build locally
|
To be able to use the Python module _tdm_termite_ it first has to be build locally
|
||||||
or installed on the system. In the Python interpreter simply do:
|
or installed on the system. In the Python interpreter simply do:
|
||||||
|
|
||||||
```Python
|
```Python
|
||||||
import tdm_reaper
|
import tdm_termite
|
||||||
```
|
```
|
||||||
|
|
||||||
to import the module. The TDM files are provided by creating an instance of
|
to import the module. The TDM files are provided by creating an instance of
|
||||||
the _tdm_reaper_ class:
|
the _tdm_termite_ class:
|
||||||
|
|
||||||
```Python
|
```Python
|
||||||
# create 'tdm_reaper' instance object
|
# create 'tdm_termite' instance object
|
||||||
try :
|
try :
|
||||||
jack = tdm_reaper.tdmreaper(b'samples/SineData.tdm',b'samples/SineData.tdx')
|
jack = tdm_termite.tdmtermite(b'samples/SineData.tdm',b'samples/SineData.tdx')
|
||||||
except RuntimeError as e:
|
except RuntimeError as e:
|
||||||
print("failed to load/decode TDM files: " + str(e))
|
print("failed to load/decode TDM files: " + str(e))
|
||||||
```
|
```
|
||||||
|
|
||||||
After initializing the _tdm_reaper_ object it can be used to extract any of the
|
After initializing the _tdm_termite_ object it can be used to extract any of the
|
||||||
available data. For instance, to list the included channelgroups and channels:
|
available data. For instance, to list the included channelgroups and channels:
|
||||||
|
|
||||||
```Python
|
```Python
|
||||||
@ -241,12 +241,12 @@ As a use case, we have look at listing the ids of all channelgroups and printing
|
|||||||
their data to separate files:
|
their data to separate files:
|
||||||
|
|
||||||
```Python
|
```Python
|
||||||
import tdm_reaper
|
import tdm_termite
|
||||||
import re
|
import re
|
||||||
|
|
||||||
# create 'tdm_reaper' instance object
|
# create 'tdm_termite' instance object
|
||||||
try :
|
try :
|
||||||
jack = tdm_reaper.tdmreaper(b'samples/SineData.tdm',b'samples/SineData.tdx')
|
jack = tdm_termite.tdmtermite(b'samples/SineData.tdm',b'samples/SineData.tdx')
|
||||||
except RuntimeError as e :
|
except RuntimeError as e :
|
||||||
print("failed to load/decode TDM files: " + str(e))
|
print("failed to load/decode TDM files: " + str(e))
|
||||||
|
|
||||||
@ -280,8 +280,8 @@ to simply extract all data of the TDM datatset and dump it to files in a given
|
|||||||
(existing!) directory, do
|
(existing!) directory, do
|
||||||
|
|
||||||
```Python
|
```Python
|
||||||
import tdm_reaper
|
import tdm_termite
|
||||||
jack = tdm_reaper.tdmreaper(b'samples/SineData.tdm',b'samples/SineData.tdx')
|
jack = tdm_termite.tdmtermite(b'samples/SineData.tdm',b'samples/SineData.tdx')
|
||||||
jack.write_all(b"./my_tdm_data_directory/")
|
jack.write_all(b"./my_tdm_data_directory/")
|
||||||
```
|
```
|
||||||
|
|
||||||
|
100
assets/tdmtermite.svg
Normal file
100
assets/tdmtermite.svg
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
viewBox="0 0 366.72 77.08"
|
||||||
|
version="1.1"
|
||||||
|
id="svg3945"
|
||||||
|
width="366.72"
|
||||||
|
height="77.080002"
|
||||||
|
sodipodi:docname="tdmtermite.svg"
|
||||||
|
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1168"
|
||||||
|
id="namedview19"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="3.8766824"
|
||||||
|
inkscape:cx="199.46638"
|
||||||
|
inkscape:cy="38.540001"
|
||||||
|
inkscape:window-x="2048"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg3945" />
|
||||||
|
<metadata
|
||||||
|
id="metadata3951">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title>flasher</dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs3949" />
|
||||||
|
<title
|
||||||
|
id="title3916">flasher</title>
|
||||||
|
<g
|
||||||
|
id="logog">
|
||||||
|
<path
|
||||||
|
id="path138"
|
||||||
|
d="m 32.86,2 -13,7.5 v 0 h -0.05 v 0 l -0.48,0.28 c -4.27,2.46 -5.68,11.38 -6.06,14.75 L 36.2,11.33 c 0.39,-0.19 7.6,-3.69 13.57,-3.69 h 0.14 L 40.13,2 a 8.15,8.15 0 0 0 -7.27,0"
|
||||||
|
transform="translate(-2.04,-1.15)"
|
||||||
|
style="fill:#364d5c" />
|
||||||
|
<path
|
||||||
|
id="path142"
|
||||||
|
d="M 5.68,17.69 A 8.2,8.2 0 0 0 2,24 v 15.78 c 0,4.9 7,10.48 9.75,12.46 V 25.77 c 0,-0.44 0.6,-8.55 3.65,-13.72 z"
|
||||||
|
transform="translate(-2.04,-1.15)"
|
||||||
|
style="fill:#364d5c" />
|
||||||
|
<path
|
||||||
|
id="path146"
|
||||||
|
d="m 12.1,54.12 v 0 C 11.74,53.88 5,49.41 2,44.24 v 11.14 a 8.2,8.2 0 0 0 3.64,6.3 l 13.5,7.79 c 4.28,2.46 12.7,-0.77 15.81,-2.12 z"
|
||||||
|
transform="translate(-2.04,-1.15)"
|
||||||
|
style="fill:#364d5c" />
|
||||||
|
<path
|
||||||
|
id="path150"
|
||||||
|
d="m 36.79,68 c -0.4,0.19 -7.71,3.75 -13.71,3.69 l 9.78,5.64 a 8.15,8.15 0 0 0 7.27,0 l 13.51,-7.8 c 4.27,-2.46 5.68,-11.39 6.06,-14.75 z"
|
||||||
|
transform="translate(-2.04,-1.15)"
|
||||||
|
style="fill:#364d5c" />
|
||||||
|
<path
|
||||||
|
id="path154"
|
||||||
|
d="M 61.2,27.13 V 53.6 c 0,0.44 -0.6,8.55 -3.65,13.72 l 9.77,-5.64 A 8.2,8.2 0 0 0 71,55.38 V 39.59 c 0,-4.94 -7,-10.5 -9.75,-12.46"
|
||||||
|
transform="translate(-2.04,-1.15)"
|
||||||
|
style="fill:#364d5c" />
|
||||||
|
<path
|
||||||
|
id="path158"
|
||||||
|
d="M 67.31,17.69 53.81,9.9 C 49.53,7.44 41.11,10.67 38,12 l 22.85,13.23 v 0 a 43.43,43.43 0 0 1 5.7,4.51 24,24 0 0 1 4.45,5.35 V 24 a 8.2,8.2 0 0 0 -3.64,-6.3"
|
||||||
|
transform="translate(-2.04,-1.15)"
|
||||||
|
style="fill:#364d5c" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="re" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#364d5c;fill-opacity:1;stroke:none"
|
||||||
|
x="74.101189"
|
||||||
|
y="54.47554"
|
||||||
|
id="text3955"><tspan
|
||||||
|
id="tspan3953"
|
||||||
|
x="74.101189"
|
||||||
|
y="54.47554"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:44px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#364d5c;fill-opacity:1"><tspan
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
|
||||||
|
id="tspan86">TDMtermite</tspan> </tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.0 KiB |
@ -1,17 +1,17 @@
|
|||||||
# distutils: language = c++
|
# distutils: language = c++
|
||||||
|
|
||||||
from tdm_reaper cimport tdm_reaper
|
from tdm_termite cimport tdm_termite
|
||||||
import json as jn
|
import json as jn
|
||||||
# import numpy as np
|
# import numpy as np
|
||||||
|
|
||||||
cdef class tdmreaper:
|
cdef class tdmtermite:
|
||||||
|
|
||||||
# C++ instance of class => stack allocated (requires nullary constructor!)
|
# C++ instance of class => stack allocated (requires nullary constructor!)
|
||||||
cdef tdm_reaper cpp_tdm
|
cdef tdm_termite cpp_tdm
|
||||||
|
|
||||||
# constructor
|
# constructor
|
||||||
def __cinit__(self, string tdmfile, string tdxfile):
|
def __cinit__(self, string tdmfile, string tdxfile):
|
||||||
self.cpp_tdm = tdm_reaper(tdmfile,tdxfile)
|
self.cpp_tdm = tdm_termite(tdmfile,tdxfile)
|
||||||
|
|
||||||
# provide TDM files
|
# provide TDM files
|
||||||
def submit_files(self,string tdmfile, string tdxfile):
|
def submit_files(self,string tdmfile, string tdxfile):
|
@ -3,8 +3,8 @@ from distutils.extension import Extension
|
|||||||
from Cython.Build import cythonize
|
from Cython.Build import cythonize
|
||||||
|
|
||||||
extensions = Extension(
|
extensions = Extension(
|
||||||
name="tdm_reaper",
|
name="tdm_termite",
|
||||||
sources=["cython/py_tdm_reaper.pyx"],
|
sources=["cython/py_tdm_termite.pyx"],
|
||||||
# libraries=[""],
|
# libraries=[""],
|
||||||
# library_dirs=["lib"],
|
# library_dirs=["lib"],
|
||||||
include_dirs=["lib","pugixml"],
|
include_dirs=["lib","pugixml"],
|
||||||
@ -15,10 +15,10 @@ extensions = Extension(
|
|||||||
|
|
||||||
setup(
|
setup(
|
||||||
version='0.1',
|
version='0.1',
|
||||||
description='TDMReaper cython extension',
|
description='TDMtermite cython extension',
|
||||||
author='Record Evolution GmbH',
|
author='Record Evolution GmbH',
|
||||||
author_email='mario.fink@record-evolution.de',
|
author_email='mario.fink@record-evolution.de',
|
||||||
url='https://github.com/RecordEvolution/tdm_ripper.git',
|
url='https://github.com/RecordEvolution/tdm_ripper.git',
|
||||||
name="tdm_reaper",
|
name="tdm_termite",
|
||||||
ext_modules=cythonize(extensions)
|
ext_modules=cythonize(extensions)
|
||||||
)
|
)
|
||||||
|
@ -5,14 +5,14 @@ from libcpp.string cimport string
|
|||||||
from libcpp.vector cimport vector
|
from libcpp.vector cimport vector
|
||||||
from libcpp cimport bool
|
from libcpp cimport bool
|
||||||
|
|
||||||
cdef extern from "tdm_reaper.cpp":
|
cdef extern from "tdm_termite.cpp":
|
||||||
pass
|
pass
|
||||||
|
|
||||||
cdef extern from "tdm_reaper.hpp":
|
cdef extern from "tdm_termite.hpp":
|
||||||
cdef cppclass tdm_reaper:
|
cdef cppclass tdm_termite:
|
||||||
# constructor(s)
|
# constructor(s)
|
||||||
tdm_reaper() except +
|
tdm_termite() except +
|
||||||
tdm_reaper(string tdmfile, string tdxfile) except +
|
tdm_termite(string tdmfile, string tdxfile) except +
|
||||||
# provide TDM files
|
# provide TDM files
|
||||||
void submit_files(string tdmfile, string tdxfile) except+
|
void submit_files(string tdmfile, string tdxfile) except+
|
||||||
# get list of channel(-group) ids
|
# get list of channel(-group) ids
|
@ -1,22 +1,22 @@
|
|||||||
// -------------------------------------------------------------------------- //
|
// -------------------------------------------------------------------------- //
|
||||||
|
|
||||||
#include "tdm_reaper.hpp"
|
#include "tdm_termite.hpp"
|
||||||
|
|
||||||
// -------------------------------------------------------------------------- //
|
// -------------------------------------------------------------------------- //
|
||||||
|
|
||||||
tdm_reaper::tdm_reaper()
|
tdm_termite::tdm_termite()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tdm_reaper::tdm_reaper(std::string tdmfile, std::string tdxfile, bool showlog):
|
tdm_termite::tdm_termite(std::string tdmfile, std::string tdxfile, bool showlog):
|
||||||
tdmfile_(tdmfile), tdxfile_(tdxfile)
|
tdmfile_(tdmfile), tdxfile_(tdxfile)
|
||||||
{
|
{
|
||||||
// start processing tdm data model
|
// start processing tdm data model
|
||||||
this->process_tdm(showlog);
|
this->process_tdm(showlog);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tdm_reaper::submit_files(std::string tdmfile, std::string tdxfile, bool showlog)
|
void tdm_termite::submit_files(std::string tdmfile, std::string tdxfile, bool showlog)
|
||||||
{
|
{
|
||||||
// save files
|
// save files
|
||||||
tdmfile_ = tdmfile;
|
tdmfile_ = tdmfile;
|
||||||
@ -34,7 +34,7 @@ void tdm_reaper::submit_files(std::string tdmfile, std::string tdxfile, bool sho
|
|||||||
this->process_tdm(showlog);
|
this->process_tdm(showlog);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tdm_reaper::process_tdm(bool showlog)
|
void tdm_termite::process_tdm(bool showlog)
|
||||||
{
|
{
|
||||||
// check both tdm, tdx files
|
// check both tdm, tdx files
|
||||||
std::filesystem::path ptdm(tdmfile_), ptdx(tdxfile_);
|
std::filesystem::path ptdm(tdmfile_), ptdx(tdxfile_);
|
||||||
@ -124,7 +124,7 @@ void tdm_reaper::process_tdm(bool showlog)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void tdm_reaper::process_include(bool showlog, pugi::xml_document& xml_doc)
|
void tdm_termite::process_include(bool showlog, pugi::xml_document& xml_doc)
|
||||||
{
|
{
|
||||||
// get XML node
|
// get XML node
|
||||||
pugi::xml_node tdmincl = xml_doc.child("usi:tdm").child("usi:include");
|
pugi::xml_node tdmincl = xml_doc.child("usi:tdm").child("usi:include");
|
||||||
@ -178,7 +178,7 @@ void tdm_reaper::process_include(bool showlog, pugi::xml_document& xml_doc)
|
|||||||
if ( showlog ) std::cout<<"number of blocks: "<<tdx_blocks_.size()<<"\n\n";
|
if ( showlog ) std::cout<<"number of blocks: "<<tdx_blocks_.size()<<"\n\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
void tdm_reaper::process_root(bool showlog, pugi::xml_document& xml_doc)
|
void tdm_termite::process_root(bool showlog, pugi::xml_document& xml_doc)
|
||||||
{
|
{
|
||||||
// get XML node
|
// get XML node
|
||||||
pugi::xml_node tdmdataroot = xml_doc.child("usi:tdm").child("usi:data")
|
pugi::xml_node tdmdataroot = xml_doc.child("usi:tdm").child("usi:data")
|
||||||
@ -198,7 +198,7 @@ void tdm_reaper::process_root(bool showlog, pugi::xml_document& xml_doc)
|
|||||||
if ( showlog ) std::cout<<tdmroot_.get_info()<<"\n";
|
if ( showlog ) std::cout<<tdmroot_.get_info()<<"\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
void tdm_reaper::process_channelgroups(bool showlog, pugi::xml_document& xml_doc)
|
void tdm_termite::process_channelgroups(bool showlog, pugi::xml_document& xml_doc)
|
||||||
{
|
{
|
||||||
// get XML node <usi:data>
|
// get XML node <usi:data>
|
||||||
pugi::xml_node tdmdata = xml_doc.child("usi:tdm").child("usi:data");
|
pugi::xml_node tdmdata = xml_doc.child("usi:tdm").child("usi:data");
|
||||||
@ -236,7 +236,7 @@ void tdm_reaper::process_channelgroups(bool showlog, pugi::xml_document& xml_doc
|
|||||||
if ( showlog ) std::cout<<"number of channelgroups: "<<tdmchannelgroups_.size()<<"\n\n";
|
if ( showlog ) std::cout<<"number of channelgroups: "<<tdmchannelgroups_.size()<<"\n\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
void tdm_reaper::process_channels(bool showlog, pugi::xml_document& xml_doc)
|
void tdm_termite::process_channels(bool showlog, pugi::xml_document& xml_doc)
|
||||||
{
|
{
|
||||||
// get XML node <usi:data>
|
// get XML node <usi:data>
|
||||||
pugi::xml_node tdmdata = xml_doc.child("usi:tdm").child("usi:data");
|
pugi::xml_node tdmdata = xml_doc.child("usi:tdm").child("usi:data");
|
||||||
@ -280,7 +280,7 @@ void tdm_reaper::process_channels(bool showlog, pugi::xml_document& xml_doc)
|
|||||||
if ( showlog ) std::cout<<"number of channels: "<<tdmchannels_.size()<<"\n\n";
|
if ( showlog ) std::cout<<"number of channels: "<<tdmchannels_.size()<<"\n\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
void tdm_reaper::process_submatrices(bool showlog, pugi::xml_document& xml_doc)
|
void tdm_termite::process_submatrices(bool showlog, pugi::xml_document& xml_doc)
|
||||||
{
|
{
|
||||||
// get XML node <usi:data>
|
// get XML node <usi:data>
|
||||||
pugi::xml_node tdmdata = xml_doc.child("usi:tdm").child("usi:data");
|
pugi::xml_node tdmdata = xml_doc.child("usi:tdm").child("usi:data");
|
||||||
@ -319,7 +319,7 @@ void tdm_reaper::process_submatrices(bool showlog, pugi::xml_document& xml_doc)
|
|||||||
if ( showlog ) std::cout<<"number of submatrices: "<<submatrices_.size()<<"\n\n";
|
if ( showlog ) std::cout<<"number of submatrices: "<<submatrices_.size()<<"\n\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
void tdm_reaper::process_localcolumns(bool showlog, pugi::xml_document& xml_doc)
|
void tdm_termite::process_localcolumns(bool showlog, pugi::xml_document& xml_doc)
|
||||||
{
|
{
|
||||||
// get XML node <usi:data>
|
// get XML node <usi:data>
|
||||||
pugi::xml_node tdmdata = xml_doc.child("usi:tdm").child("usi:data");
|
pugi::xml_node tdmdata = xml_doc.child("usi:tdm").child("usi:data");
|
||||||
@ -435,7 +435,7 @@ void tdm_reaper::process_localcolumns(bool showlog, pugi::xml_document& xml_doc)
|
|||||||
|
|
||||||
// -------------------------------------------------------------------------- //
|
// -------------------------------------------------------------------------- //
|
||||||
|
|
||||||
std::string tdm_reaper::get_channel_overview(format chformatter)
|
std::string tdm_termite::get_channel_overview(format chformatter)
|
||||||
{
|
{
|
||||||
// summarize all output in single string
|
// summarize all output in single string
|
||||||
std::string channels_summary;
|
std::string channels_summary;
|
||||||
@ -474,7 +474,7 @@ std::string tdm_reaper::get_channel_overview(format chformatter)
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<typename tdmelement>
|
template<typename tdmelement>
|
||||||
std::string tdm_reaper::get_overview(format formatter)
|
std::string tdm_termite::get_overview(format formatter)
|
||||||
{
|
{
|
||||||
// summarize all output in single string
|
// summarize all output in single string
|
||||||
std::string summary;
|
std::string summary;
|
||||||
@ -500,12 +500,12 @@ std::string tdm_reaper::get_overview(format formatter)
|
|||||||
return summary;
|
return summary;
|
||||||
}
|
}
|
||||||
|
|
||||||
template std::string tdm_reaper::get_overview<tdm_channelgroup>(format formatter);
|
template std::string tdm_termite::get_overview<tdm_channelgroup>(format formatter);
|
||||||
template std::string tdm_reaper::get_overview<submatrix>(format formatter);
|
template std::string tdm_termite::get_overview<submatrix>(format formatter);
|
||||||
template std::string tdm_reaper::get_overview<localcolumn>(format formatter);
|
template std::string tdm_termite::get_overview<localcolumn>(format formatter);
|
||||||
template std::string tdm_reaper::get_overview<block>(format formatter);
|
template std::string tdm_termite::get_overview<block>(format formatter);
|
||||||
|
|
||||||
void tdm_reaper::summarize_member(tdm_channelgroup chp, std::string& summary, format& formatter)
|
void tdm_termite::summarize_member(tdm_channelgroup chp, std::string& summary, format& formatter)
|
||||||
{
|
{
|
||||||
for ( std::map<std::string,tdm_channelgroup>::iterator it=this->tdmchannelgroups_.begin();
|
for ( std::map<std::string,tdm_channelgroup>::iterator it=this->tdmchannelgroups_.begin();
|
||||||
it!=this->tdmchannelgroups_.end(); ++it)
|
it!=this->tdmchannelgroups_.end(); ++it)
|
||||||
@ -515,7 +515,7 @@ void tdm_reaper::summarize_member(tdm_channelgroup chp, std::string& summary, fo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void tdm_reaper::summarize_member(submatrix sbm, std::string& summary, format& formatter)
|
void tdm_termite::summarize_member(submatrix sbm, std::string& summary, format& formatter)
|
||||||
{
|
{
|
||||||
for ( std::map<std::string,submatrix>::iterator it=this->submatrices_.begin();
|
for ( std::map<std::string,submatrix>::iterator it=this->submatrices_.begin();
|
||||||
it!=this->submatrices_.end(); ++it)
|
it!=this->submatrices_.end(); ++it)
|
||||||
@ -525,7 +525,7 @@ void tdm_reaper::summarize_member(submatrix sbm, std::string& summary, format& f
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void tdm_reaper::summarize_member(localcolumn lcc, std::string& summary, format& formatter)
|
void tdm_termite::summarize_member(localcolumn lcc, std::string& summary, format& formatter)
|
||||||
{
|
{
|
||||||
for ( std::map<std::string,localcolumn>::iterator it=this->localcolumns_.begin();
|
for ( std::map<std::string,localcolumn>::iterator it=this->localcolumns_.begin();
|
||||||
it!=this->localcolumns_.end(); ++it)
|
it!=this->localcolumns_.end(); ++it)
|
||||||
@ -535,7 +535,7 @@ void tdm_reaper::summarize_member(localcolumn lcc, std::string& summary, format&
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void tdm_reaper::summarize_member(block blk, std::string& summary, format& formatter)
|
void tdm_termite::summarize_member(block blk, std::string& summary, format& formatter)
|
||||||
{
|
{
|
||||||
for ( std::map<std::string,block>::iterator it=this->tdx_blocks_.begin();
|
for ( std::map<std::string,block>::iterator it=this->tdx_blocks_.begin();
|
||||||
it!=this->tdx_blocks_.end(); ++it)
|
it!=this->tdx_blocks_.end(); ++it)
|
||||||
@ -548,7 +548,7 @@ void tdm_reaper::summarize_member(block blk, std::string& summary, format& forma
|
|||||||
// -------------------------------------------------------------------------- //
|
// -------------------------------------------------------------------------- //
|
||||||
|
|
||||||
// extract channel by id
|
// extract channel by id
|
||||||
std::vector<tdmdatatype> tdm_reaper::get_channel(std::string& id)
|
std::vector<tdmdatatype> tdm_termite::get_channel(std::string& id)
|
||||||
{
|
{
|
||||||
// check for existence of required channel id (=key)
|
// check for existence of required channel id (=key)
|
||||||
if ( tdmchannels_.count(id) == 1 )
|
if ( tdmchannels_.count(id) == 1 )
|
||||||
@ -653,7 +653,7 @@ std::vector<tdmdatatype> tdm_reaper::get_channel(std::string& id)
|
|||||||
|
|
||||||
// -------------------------------------------------------------------------- //
|
// -------------------------------------------------------------------------- //
|
||||||
|
|
||||||
void tdm_reaper::print_channel(std::string &id, const char* filename, bool include_meta)
|
void tdm_termite::print_channel(std::string &id, const char* filename, bool include_meta)
|
||||||
{
|
{
|
||||||
// check required path
|
// check required path
|
||||||
this->check_filename_path(filename);
|
this->check_filename_path(filename);
|
||||||
@ -698,7 +698,7 @@ void tdm_reaper::print_channel(std::string &id, const char* filename, bool inclu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void tdm_reaper::print_group(std::string &id, const char* filename, bool include_meta,
|
void tdm_termite::print_group(std::string &id, const char* filename, bool include_meta,
|
||||||
char sep, std::string column_header)
|
char sep, std::string column_header)
|
||||||
{
|
{
|
||||||
// check required path
|
// check required path
|
||||||
@ -834,7 +834,7 @@ void tdm_reaper::print_group(std::string &id, const char* filename, bool include
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void tdm_reaper::check_filename_path(const char* filename)
|
void tdm_termite::check_filename_path(const char* filename)
|
||||||
{
|
{
|
||||||
// declare filesystem path instance from filename
|
// declare filesystem path instance from filename
|
||||||
std::filesystem::path pt(filename);
|
std::filesystem::path pt(filename);
|
||||||
@ -850,7 +850,7 @@ void tdm_reaper::check_filename_path(const char* filename)
|
|||||||
|
|
||||||
// -------------------------------------------------------------------------- //
|
// -------------------------------------------------------------------------- //
|
||||||
|
|
||||||
void tdm_reaper::check_local_datatypes()
|
void tdm_termite::check_local_datatypes()
|
||||||
{
|
{
|
||||||
std::cout<<"\nmachine's C++ datatypes:\n";
|
std::cout<<"\nmachine's C++ datatypes:\n";
|
||||||
std::cout<<std::setw(25)<<std::left<<"char:"
|
std::cout<<std::setw(25)<<std::left<<"char:"
|
||||||
@ -881,7 +881,7 @@ void tdm_reaper::check_local_datatypes()
|
|||||||
<<std::setw(5)<<std::left<<sizeof(long double)<<"byte(s)\n\n";
|
<<std::setw(5)<<std::left<<sizeof(long double)<<"byte(s)\n\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
void tdm_reaper::check_datatype_consistency()
|
void tdm_termite::check_datatype_consistency()
|
||||||
{
|
{
|
||||||
// check datatype consistency, i.e. "local" representation of datatypes
|
// check datatype consistency, i.e. "local" representation of datatypes
|
||||||
for ( tdm_datatype el: tdm_datatypes )
|
for ( tdm_datatype el: tdm_datatypes )
|
||||||
@ -924,7 +924,7 @@ void tdm_reaper::check_datatype_consistency()
|
|||||||
// -------------------------------------------------------------------------- //
|
// -------------------------------------------------------------------------- //
|
||||||
|
|
||||||
template<typename datatype>
|
template<typename datatype>
|
||||||
void tdm_reaper::convert_data_to_type(std::vector<unsigned char> &buffer,
|
void tdm_termite::convert_data_to_type(std::vector<unsigned char> &buffer,
|
||||||
std::vector<tdmdatatype> &channel)
|
std::vector<tdmdatatype> &channel)
|
||||||
{
|
{
|
||||||
// check number of elements of type "datatype" in buffer
|
// check number of elements of type "datatype" in buffer
|
@ -1,7 +1,7 @@
|
|||||||
// ------------------------------------------------------------------------- //
|
// ------------------------------------------------------------------------- //
|
||||||
|
|
||||||
#ifndef TDM_REAPER
|
#ifndef TDM_TERMITE
|
||||||
#define TDM_REAPER
|
#define TDM_TERMITE
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
// -------------------------------------------------------------------------- //
|
// -------------------------------------------------------------------------- //
|
||||||
|
|
||||||
class tdm_reaper
|
class tdm_termite
|
||||||
{
|
{
|
||||||
// .tdm and .tdx paths/filenames
|
// .tdm and .tdx paths/filenames
|
||||||
std::string tdmfile_;
|
std::string tdmfile_;
|
||||||
@ -115,11 +115,11 @@ class tdm_reaper
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
// encoding
|
// encoding
|
||||||
// tdm_reaper(std::vector<std::string> csvfile);
|
// tdm_termite(std::vector<std::string> csvfile);
|
||||||
|
|
||||||
// decoding
|
// decoding
|
||||||
tdm_reaper();
|
tdm_termite();
|
||||||
tdm_reaper(std::string tdmfile, std::string tdxfile = std::string(""),
|
tdm_termite(std::string tdmfile, std::string tdxfile = std::string(""),
|
||||||
bool showlog = false);
|
bool showlog = false);
|
||||||
|
|
||||||
// provide (tdm,tdx) files
|
// provide (tdm,tdx) files
|
14
makefile
14
makefile
@ -1,10 +1,10 @@
|
|||||||
# --------------------------------------------------------------------------- #
|
# --------------------------------------------------------------------------- #
|
||||||
|
|
||||||
# declare name of executable
|
# declare name of executable
|
||||||
EXE = tdmreaper
|
EXE = tdmtermite
|
||||||
|
|
||||||
# sources and headers
|
# sources and headers
|
||||||
SRC := tdm_reaper
|
SRC := tdm_termite
|
||||||
HPP = $(wildcard lib/*.hpp)
|
HPP = $(wildcard lib/*.hpp)
|
||||||
|
|
||||||
# compiler and C++ standard
|
# compiler and C++ standard
|
||||||
@ -77,16 +77,16 @@ cython-help : cython/setup.py
|
|||||||
cython-list : cython/setup.py
|
cython-list : cython/setup.py
|
||||||
python3 $< --name --description --author --author-email --url
|
python3 $< --name --description --author --author-email --url
|
||||||
|
|
||||||
cython-build : cython/setup.py cython/tdm_reaper.pxd cython/py_tdm_reaper.pyx $(HPP) lib/tdm_reaper.cpp
|
cython-build : cython/setup.py cython/tdm_termite.pxd cython/py_tdm_termite.pyx $(HPP) lib/tdm_termite.cpp
|
||||||
python3 $< build_ext --inplace
|
python3 $< build_ext --inplace
|
||||||
cp -v tdm_reaper.cpython-*.so python/
|
cp -v tdm_termite.cpython-*.so python/
|
||||||
|
|
||||||
cython-install : cython/setup.py cython/tdm_reaper.pxd cython/py_tdm_reaper.pyx $(HPP) lib/tdm_reaper.cpp
|
cython-install : cython/setup.py cython/tdm_termite.pxd cython/py_tdm_termite.pyx $(HPP) lib/tdm_termite.cpp
|
||||||
python3 $< install
|
python3 $< install
|
||||||
|
|
||||||
clean-cython :
|
clean-cython :
|
||||||
rm -vf cython/py_tdm_reaper.cpp
|
rm -vf cython/py_tdm_termite.cpp
|
||||||
rm -vf tdm_reaper.cpython-*.so python/tdm_reaper.cpython-*.so
|
rm -vf tdm_termite.cpython-*.so python/tdm_termite.cpython-*.so
|
||||||
rm -rf build
|
rm -rf build
|
||||||
|
|
||||||
# --------------------------------------------------------------------------- #
|
# --------------------------------------------------------------------------- #
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
|
|
||||||
import tdm_reaper
|
import tdm_termite
|
||||||
import json
|
import json
|
||||||
import re
|
import re
|
||||||
|
|
||||||
# create 'tdm_reaper' instance object
|
# create 'tdm_termite' instance object
|
||||||
try :
|
try :
|
||||||
jack = tdm_reaper.tdmreaper(b'samples/SineData.tdm',b'samples/SineData.tdx')
|
jack = tdm_termite.tdmtermite(b'samples/SineData.tdm',b'samples/SineData.tdx')
|
||||||
except RuntimeError as e :
|
except RuntimeError as e :
|
||||||
print("failed to load/decode TDM files: " + str(e))
|
print("failed to load/decode TDM files: " + str(e))
|
||||||
|
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
|
|
||||||
import tdm_reaper
|
import tdm_termite
|
||||||
|
|
||||||
# create 'tdm_reaper' instance object
|
# create 'tdm_termite' instance object
|
||||||
try :
|
try :
|
||||||
jack = tdm_reaper.tdmreaper(b'samples/SineData.tdm',b'samples/SineData.tdx')
|
jack = tdm_termite.tdmtermite(b'samples/SineData.tdm',b'samples/SineData.tdx')
|
||||||
# list ids of channelgroups
|
# list ids of channelgroups
|
||||||
grpids = jack.get_channelgroup_ids()
|
grpids = jack.get_channelgroup_ids()
|
||||||
# iterate through groups
|
# iterate through groups
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
|
|
||||||
import tdm_reaper
|
import tdm_termite
|
||||||
# import numpy as np
|
# import numpy as np
|
||||||
import json
|
import json
|
||||||
import re
|
import re
|
||||||
|
|
||||||
# create 'tdm_reaper' instance object
|
# create 'tdm_termite' instance object
|
||||||
try :
|
try :
|
||||||
jack = tdm_reaper.tdmreaper(b'samples/SineData.tdm',b'samples/SineData.tdx')
|
jack = tdm_termite.tdmtermite(b'samples/SineData.tdm',b'samples/SineData.tdx')
|
||||||
except RuntimeError as e :
|
except RuntimeError as e :
|
||||||
print("failed to load/decode TDM files: " + str(e))
|
print("failed to load/decode TDM files: " + str(e))
|
||||||
|
|
||||||
|
14
src/main.cpp
14
src/main.cpp
@ -1,6 +1,6 @@
|
|||||||
// ------------------------------------------------------------------------- //
|
// ------------------------------------------------------------------------- //
|
||||||
|
|
||||||
#include "tdm_reaper.hpp"
|
#include "tdm_termite.hpp"
|
||||||
|
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
#include <regex>
|
#include <regex>
|
||||||
@ -15,12 +15,12 @@ const std::string githash("HASHSTRING");
|
|||||||
void show_usage()
|
void show_usage()
|
||||||
{
|
{
|
||||||
std::cout<<"\n"
|
std::cout<<"\n"
|
||||||
<<"tdmreaper ["<<gittag<<"-g"<<githash<<"] (github.com/RecordEvolution/tdm_ripper.git)"
|
<<"tdmtermite ["<<gittag<<"-g"<<githash<<"] (github.com/RecordEvolution/TDMtermite.git)"
|
||||||
<<"\n\n"
|
<<"\n\n"
|
||||||
<<"Decode TDM/TDX files and dump data as *.csv"
|
<<"Decode TDM/TDX files and dump data as *.csv"
|
||||||
<<"\n\n"
|
<<"\n\n"
|
||||||
<<"Usage:\n\n"
|
<<"Usage:\n\n"
|
||||||
<<" tdmreaper <tdm-file> <tdx-file> [options]"
|
<<" tdmtermite <tdm-file> <tdx-file> [options]"
|
||||||
<<"\n\n"
|
<<"\n\n"
|
||||||
<<"Options:"
|
<<"Options:"
|
||||||
<<"\n\n"
|
<<"\n\n"
|
||||||
@ -55,7 +55,7 @@ void show_usage()
|
|||||||
typedef std::map<std::string,std::string> optkeys;
|
typedef std::map<std::string,std::string> optkeys;
|
||||||
|
|
||||||
const std::string argmsg = std::string("both .tdm and .tdx file must be provided!");
|
const std::string argmsg = std::string("both .tdm and .tdx file must be provided!");
|
||||||
const std::string arguse = std::string("see $ tdmreaper --help for usage");
|
const std::string arguse = std::string("see $ tdmtermite --help for usage");
|
||||||
|
|
||||||
optkeys parse_args(int argc, char* argv[], bool showargs = false)
|
optkeys parse_args(int argc, char* argv[], bool showargs = false)
|
||||||
{
|
{
|
||||||
@ -78,7 +78,7 @@ optkeys parse_args(int argc, char* argv[], bool showargs = false)
|
|||||||
else if ( std::string(argv[1]) == std::string("--version")
|
else if ( std::string(argv[1]) == std::string("--version")
|
||||||
|| std::string(argv[1]) == std::string("-v") )
|
|| std::string(argv[1]) == std::string("-v") )
|
||||||
{
|
{
|
||||||
std::cout<<"tdmreaper "<<gittag<<"-g"<<githash<<"\n";
|
std::cout<<"tdmtermite "<<gittag<<"-g"<<githash<<"\n";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -270,8 +270,8 @@ int main(int argc, char* argv[])
|
|||||||
std::string csvsep = cfgopts.count("csvsep") == 1 ? cfgopts.at("csvsep")
|
std::string csvsep = cfgopts.count("csvsep") == 1 ? cfgopts.at("csvsep")
|
||||||
: std::string(",");
|
: std::string(",");
|
||||||
|
|
||||||
// declare and initialize tdm_reaper instance
|
// declare and initialize tdm_termite instance
|
||||||
tdm_reaper jack;
|
tdm_termite jack;
|
||||||
try {
|
try {
|
||||||
jack.submit_files(cfgopts.at("tdm"),cfgopts.at("tdx"),false);
|
jack.submit_files(cfgopts.at("tdm"),cfgopts.at("tdx"),false);
|
||||||
} catch (const std::exception& e) {
|
} catch (const std::exception& e) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user