diff --git a/README.md b/README.md index e94b609..7a50263 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ ## Introduction -Libxdf is a cross-platform C++ library for loading multimodal, multi-rate signals stored in [XDF](https://github.com/sccn/xdf/wiki/Specifications "Extensible Data Format") files. +Libxdf is a cross-platform C++ library for loading multi-modal, multi-rate signals stored in [XDF](https://github.com/sccn/xdf/wiki/Specifications "Extensible Data Format") files. Libxdf is used in the biosignal viewing application [SigViewer](https://github.com/cbrnr/sigviewer). It can also be integrated into other C++ applications. @@ -57,35 +57,32 @@ Example: ```C++ #include "xdf.h" -Xdf XDFdata; -XDFdata.load_xdf("C:/example.xdf"); +Xdf xdf; +xdf.load_xdf("C:/example.xdf"); ``` -To resample the signals to e.g. 100Hz: +To resample the signals, e.g. to 100Hz: ```C++ -XDFdata.resample(100); +xdf.resample(100); ``` -The functions in libxdf must be called following a certain order. For instance, if you call the `subtractMean` function before you load any data, it will cause undefined behavior. +The methods in libxdf must be called following a certain order. For instance, if you call the `detrend` method before you load any data, it will cause undefined behavior. The recommended order is shown here. Only `load_xdf` is mandatory. ```C++ -XDFdata.load_xdf(std::string filepath); -XDFdata.subtractMean(); -XDFdata.createLabels(); -XDFdata.resample(int sampleRate); -XDFdata.freeUpTimeStamps(); +xdf.load_xdf(std::string filepath); +xdf.detrend(); +xdf.create_labels(); +xdf.resample(int sampling_rate); +xdf.free_up_time_stamps(); ``` Libxdf depends on third party libraries [Pugixml v1.8](http://pugixml.org/) for XML parsing and [Smarc](http://audio-smarc.sourceforge.net/) for resampling. ## Documentation -Detailed documentation was generated via [Doxygen](http://www.stack.nl/~dimitri/doxygen/index.html) and is available [here](docs/html/class_xdf.html). - -## SigViewer Online Repo -SigViewer Online Repository is [here](repository/Updates.xml). +[Documentation](docs/html/class_xdf.html) was generated via [Doxygen](http://www.stack.nl/~dimitri/doxygen/index.html). ## Support diff --git a/docs/html/annotated.html b/docs/html/annotated.html index 1796cb7..75b3253 100644 --- a/docs/html/annotated.html +++ b/docs/html/annotated.html @@ -1,21 +1,14 @@ - +
- + -
+ 1.8.18
+
diff --git a/docs/html/class_xdf-members.html b/docs/html/class_xdf-members.html
index 3634bf4..b266cde 100644
--- a/docs/html/class_xdf-members.html
+++ b/docs/html/class_xdf-members.html
@@ -1,21 +1,14 @@
-
+
-
+
-This is the complete list of members for Xdf, including all inherited members.
+ 1.8.18
+
diff --git a/docs/html/class_xdf.html b/docs/html/class_xdf.html
index 41c7802..d0d0e24 100644
--- a/docs/html/class_xdf.html
+++ b/docs/html/class_xdf.html
@@ -1,21 +1,14 @@
-
+
-
+
-Public Types | |
| typedef std::string | eventName |
Used as std::vector<std::pair<std::pair<eventName, eventTimeStamp>, int> > in eventMap. More... | |
| typedef float | eventTimeStamp |
Used as std::vector<std::pair<std::pair<eventName, eventTimeStamp>, int> > in eventMap. More... | |
| typedef std::string | event_name_ |
| An alias of std::string type used on event names. More... | |
| typedef double | event_timestamp_ |
| An alias of double type used on event timestamps. More... | |
Public Member Functions | |
| Xdf () | |
| Default constructor with no parameter. More... | |
| + | Xdf () |
| Default constructor with no parameter. | |
| void | adjustTotalLength () |
Adjust totalLen to avoid possible deviation. More... | |
| void | calcTotalLength (int sampleRate) |
| Calculate the globle length (in samples). More... | |
| void | createLabels () |
| Create labels for each channel and store them in labels vector. More... | |
| void | adjust_total_length () |
Adjusts total_len_ to avoid possible deviation. More... | |
| void | calculate_total_length (int sampling_rate) |
| Calculates the global length (in samples). More... | |
| void | create_labels () |
Creates labels for each channel and stores them in labels_. More... | |
| void | detrend () |
| Subtract the entire channel by its mean. More... | |
| Subtracts all data in a channel by the mean. More... | |
| void | freeUpTimeStamps () |
| Delete the time stamps vectors when no longer needed to release some memory. More... | |
| void | free_up_timestamps () |
Deletes Stream::time_stamps when no longer needed (to release memory). More... | |
| int | load_xdf (std::string filename) |
| The main function of loading an XDF file. More... | |
| Loads an XDF file. More... | |
| void | resample (int userSrate) |
| Resample all streams and channel to a chosen sample rate. More... | |
| int | writeEventsToXDF (std::string file_path) |
| writeEventsToXDF More... | |
| void | resample (int sampling_rate) |
Resamples all streams and channels to sampling_rate. More... | |
| +void | sync_timestamps () |
| Sync the timestamps. | |
| +int | write_events_to_xdf (std::string file_path) |
| Writes events to the XDF file. Used when user added markups and/or events in SigViewer, this method stores the newly created events to the XDF file in a new stream. | |
Public Attributes | |
| std::vector< Stream > | streams |
| float | version |
| uint64_t | totalLen = 0 |
| float | minTS = 0 |
| float | maxTS = 0 |
| size_t | totalCh = 0 |
| int | majSR = 0 |
| int | maxSR = 0 |
| std::vector< int > | streamMap |
| std::vector< std::pair< std::pair< eventName, eventTimeStamp >, int > > | eventMap |
| std::vector< std::string > | dictionary |
| std::vector< uint16_t > | eventType |
| std::vector< std::string > | labels |
| std::set< double > | sampleRateMap |
| std::vector< float > | offsets |
| std::string | fileHeader |
| int | userAddedStream { 0 } |
| std::vector< std::pair< std::string, double > > | userCreatedEvents |
| std::vector< Stream > | streams_ |
| float | version_ |
| uint64_t | total_len_ = 0 |
| double | min_timestamp_ = 0 |
| double | max_timestamp_ = 0 |
| size_t | channel_count_ = 0 |
| int | major_sampling_rate_ = 0 |
| int | max_sampling_rate_ = 0 |
| std::vector< double > | effective_sampling_rates_ |
| double | file_effective_sampling_rate_ = 0 |
| std::vector< int > | stream_map_ |
| std::vector< std::pair< std::pair< event_name_, event_timestamp_ >, int > > | event_map_ |
| std::vector< std::string > | dictionary_ |
| std::vector< uint16_t > | event_type_ |
| std::vector< std::string > | labels_ |
| std::set< double > | sampling_rate_map_ |
| std::vector< float > | offsets_ |
| std::string | file_header_ |
| int | user_added_stream_ {0} |
| std::vector< std::pair< std::string, double > > | user_created_events_ |
Xdf class is designed to store the data of an entire XDF file. It comes with methods to read XDF files and containers to store the data, as well as some additional methods e.g. resampling etc.
+Xdf class stores the data of an XDF file. It contains methods to read XDF files, store the data, and additional functionalities such as resampling etc.
| typedef std::string Xdf::eventName | +typedef std::string Xdf::event_name_ |
Used as std::vector<std::pair<std::pair<eventName, eventTimeStamp>, int> > in eventMap.
An alias of std::string type used on event names.
+| typedef float Xdf::eventTimeStamp | +typedef double Xdf::event_timestamp_ |
Used as std::vector<std::pair<std::pair<eventName, eventTimeStamp>, int> > in eventMap.
| Xdf::Xdf | -( | -) | -- |
Default constructor with no parameter.
+An alias of double type used on event timestamps.
+| void Xdf::adjustTotalLength | +void Xdf::adjust_total_length | ( | ) | @@ -250,47 +221,47 @@ |
| void Xdf::calcTotalLength | +void Xdf::calculate_total_length | ( | int | -sampleRate | ) | +sampling_rate | ) |
Calculate the globle length (in samples).
-This is calculated by multiplying the rage from the earliest time stamp to the last time stamp across all channels by the parameter sampleRate.
+Calculates the global length (in samples).
+This is calculated by multiplying the rage from min_timestamp_ to max_timestamp_ across all channels by sampling_rate.
| sampleRate | is the sample rate you wish to use to calculate the total length. |
| sampling_rate | The sampling rate used to calculate the total length. |
| void Xdf::createLabels | +void Xdf::create_labels | ( | ) | @@ -298,13 +269,13 @@ |
| void Xdf::freeUpTimeStamps | +void Xdf::free_up_timestamps | ( | ) | @@ -339,13 +310,13 @@ | ( | int | -userSrate | ) | +sampling_rate | ) |
Resample all streams and channel to a chosen sample rate.
+Resamples all streams and channels to sampling_rate.
| userSrate | is recommended to be between integer 1 and the highest sample rate of the current file. |
| <tt>sampling_rate</tt> | in general should be between 1 and the highest sampling rate of the current file. |
| int Xdf::writeEventsToXDF | -( | -std::string | -file_path | ) | -+ | size_t Xdf::channel_count_ = 0 |
The total number of channels.
-writeEventsToXDF
-If user added some markups and events in Sigviewer, this function can store those user created events back to the XDF file in a new stream
+| std::vector<std::string> Xdf::dictionary_ | +
Stores unique event types with no repetitions.
| std::vector<std::string> Xdf::dictionary | +std::vector<double> Xdf::effective_sampling_rates_ |
The vector to store unique event types with no repetitions.
Effective sampling rates of streams.
| std::vector<std::pair<std::pair<eventName, eventTimeStamp>, int> > Xdf::eventMap | +std::vector<std::pair<std::pair<event_name_, event_timestamp_>, int> > Xdf::event_map_ |
The vector to store all the events across all streams. The format is <<events, timestamps>, streamNum>.
+Stores all events across all streams.
| std::vector<uint16_t> Xdf::eventType | +std::vector<uint16_t> Xdf::event_type_ |
The vector to store events by their index in the dictionary.
Stores events by their indices in the dictionary.
| std::string Xdf::fileHeader | +double Xdf::file_effective_sampling_rate_ = 0 |
Raw XML of the file header.
+If effective_sampling_rates_ in all the streams are the same, this is the value.
| std::vector<std::string> Xdf::labels | +std::string Xdf::file_header_ |
The vector to store descriptive labels of each channel.
+Raw XML of the file header.
| int Xdf::majSR = 0 | +std::vector<std::string> Xdf::labels_ |
The sample rate that has the most channels across all streams.
+Stores descriptive labels of each channel.
| int Xdf::maxSR = 0 | +int Xdf::major_sampling_rate_ = 0 |
Highest sample rate across all streams.
+The sampling rate that was used by the most channels across all streams.
| float Xdf::maxTS = 0 | +int Xdf::max_sampling_rate_ = 0 |
The largest time stamp across all streams.
+Max sampling rate across all streams.
| float Xdf::minTS = 0 | +double Xdf::max_timestamp_ = 0 |
The smallest time stamp across all streams.
+The max timestamp across all streams.
| std::vector<float> Xdf::offsets | +double Xdf::min_timestamp_ = 0 |
Offsets of each channel after using subtractMean() function
+The min timestamp across all streams.
| std::set<double> Xdf::sampleRateMap | +std::vector<float> Xdf::offsets_ |
The vector to store all sample rates across all the streams.
+Offsets of each channel after using the detrend method.
| std::vector<int> Xdf::streamMap | +std::set<double> Xdf::sampling_rate_map_ |
A vector indexes which channels belong to which stream. The index is the same as channel number; the actual content is the stream Number
+Stores sampling rates of all the streams.
| std::vector<Stream> Xdf::streams | +std::vector<int> Xdf::stream_map_ |
A vector to store all the streams of the current XDF file.
+Indexes which channels belong to which stream. The keys are channel numbers, the values are stream numbers.
| size_t Xdf::totalCh = 0 | +std::vector<Stream> Xdf::streams_ |
The total number of channel count.
+Stores all streams of the current XDF file.
| uint64_t Xdf::totalLen = 0 | +uint64_t Xdf::total_len_ = 0 |
The total length is the product of the range between the smallest time stamp and the largest multiplied by the major sample rate.
+The total length is the product of the range between the min timestamp and the max timestamp multiplied by major_sampling_rate_.
| int Xdf::userAddedStream { 0 } | +int Xdf::user_added_stream_ {0} |
For Sigviewer only: if user manually added events in Sigviewer, the events will be stored in a new stream after all current streams. The index will be userAddedStream.
+Used by SigViewer only: if user manually added events in SigViewer, the events will be stored in a new stream after all current streams with index user_added_stream_.
| std::vector<std::pair<std::string, double> > Xdf::userCreatedEvents | +std::vector<std::pair<std::string, double> > Xdf::user_created_events_ |
User created events in Sigviewer.
+Events created by user in SigViewer.
| float Xdf::version | +float Xdf::version_ |
The version of XDF file
+The version of the XDF file.
+ 1.8.18
+
diff --git a/docs/html/classes.html b/docs/html/classes.html
index eeb2709..0591d7a 100644
--- a/docs/html/classes.html
+++ b/docs/html/classes.html
@@ -1,21 +1,14 @@
-
+
-
+
-
+ 1.8.18
+
diff --git a/docs/html/doxygen.css b/docs/html/doxygen.css
index a2cf15f..5e35db3 100644
--- a/docs/html/doxygen.css
+++ b/docs/html/doxygen.css
@@ -1,9 +1,13 @@
-/* The standard CSS for doxygen 1.8.12 */
+/* The standard CSS for doxygen 1.8.18 */
body, table, div, p, dl {
font: 400 14px/22px Roboto,sans-serif;
}
+p.reference, p.definition {
+ font: 400 14px/22px Roboto,sans-serif;
+}
+
/* @group Heading Levels */
h1.groupheader {
@@ -49,17 +53,24 @@ dt {
font-weight: bold;
}
-div.multicol {
+ul.multicol {
-moz-column-gap: 1em;
-webkit-column-gap: 1em;
+ column-gap: 1em;
-moz-column-count: 3;
-webkit-column-count: 3;
+ column-count: 3;
}
p.startli, p.startdd {
margin-top: 2px;
}
+th p.starttd, p.intertd, p.endtd {
+ font-size: 100%;
+ font-weight: 700;
+}
+
p.starttd {
margin-top: 0px;
}
@@ -76,6 +87,15 @@ p.endtd {
margin-bottom: 2px;
}
+p.interli {
+}
+
+p.interdd {
+}
+
+p.intertd {
+}
+
/* @end */
caption {
@@ -130,12 +150,12 @@ a.qindex {
a.qindexHL {
font-weight: bold;
background-color: #9CAFD4;
- color: #ffffff;
+ color: #FFFFFF;
border: 1px double #869DCA;
}
.contents a.qindexHL:visited {
- color: #ffffff;
+ color: #FFFFFF;
}
a.el {
@@ -159,6 +179,25 @@ dl.el {
margin-left: -1cm;
}
+ul {
+ overflow: hidden; /*Fixed: list item bullets overlap floating elements*/
+}
+
+#side-nav ul {
+ overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */
+}
+
+#main-nav ul {
+ overflow: visible; /* reset ul rule for the navigation bar drop down lists */
+}
+
+.fragment {
+ text-align: left;
+ direction: ltr;
+ overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/
+ overflow-y: hidden;
+}
+
pre.fragment {
border: 1px solid #C4CFE5;
background-color: #FBFCFD;
@@ -173,8 +212,8 @@ pre.fragment {
}
div.fragment {
- padding: 0px;
- margin: 4px 8px 4px 2px;
+ padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/
+ margin: 4px 8px 4px 2px;
background-color: #FBFCFD;
border: 1px solid #C4CFE5;
}
@@ -244,7 +283,7 @@ span.lineno a:hover {
div.ah, span.ah {
background-color: black;
font-weight: bold;
- color: #ffffff;
+ color: #FFFFFF;
margin-bottom: 3px;
margin-top: 3px;
padding: 0.2em;
@@ -320,7 +359,7 @@ img.formulaDsp {
}
-img.formulaInl {
+img.formulaInl, img.inline {
vertical-align: middle;
}
@@ -398,6 +437,13 @@ blockquote {
padding: 0 12px 0 16px;
}
+blockquote.DocNodeRTL {
+ border-left: 0;
+ border-right: 2px solid #9CAFD4;
+ margin: 0 4px 0 24px;
+ padding: 0 16px 0 12px;
+}
+
/* @end */
/*
@@ -494,7 +540,7 @@ table.memberdecls {
white-space: nowrap;
}
-.memItemRight {
+.memItemRight, .memTemplItemRight {
width: 100%;
}
@@ -662,17 +708,17 @@ dl.reflist dd {
padding-left: 0px;
}
-.params .paramname, .retval .paramname {
+.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname {
font-weight: bold;
vertical-align: top;
}
-.params .paramtype {
+.params .paramtype, .tparams .paramtype {
font-style: italic;
vertical-align: top;
}
-.params .paramdir {
+.params .paramdir, .tparams .paramdir {
font-family: "courier new",courier,monospace;
vertical-align: top;
}
@@ -1077,72 +1123,143 @@ div.headertitle
padding: 5px 5px 5px 10px;
}
-dl
-{
- padding: 0 0 0 10px;
+.PageDocRTL-title div.headertitle {
+ text-align: right;
+ direction: rtl;
}
-/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */
-dl.section
-{
+dl {
+ padding: 0 0 0 0;
+}
+
+/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */
+dl.section {
margin-left: 0px;
padding-left: 0px;
}
-dl.note
-{
- margin-left:-7px;
- padding-left: 3px;
- border-left:4px solid;
- border-color: #D0C000;
+dl.section.DocNodeRTL {
+ margin-right: 0px;
+ padding-right: 0px;
}
-dl.warning, dl.attention
-{
- margin-left:-7px;
- padding-left: 3px;
- border-left:4px solid;
- border-color: #FF0000;
+dl.note {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #D0C000;
}
-dl.pre, dl.post, dl.invariant
-{
- margin-left:-7px;
- padding-left: 3px;
- border-left:4px solid;
- border-color: #00D000;
+dl.note.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #D0C000;
+}
+
+dl.warning, dl.attention {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #FF0000;
}
-dl.deprecated
-{
- margin-left:-7px;
- padding-left: 3px;
- border-left:4px solid;
- border-color: #505050;
+dl.warning.DocNodeRTL, dl.attention.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #FF0000;
}
-dl.todo
-{
- margin-left:-7px;
- padding-left: 3px;
- border-left:4px solid;
- border-color: #00C0E0;
+dl.pre, dl.post, dl.invariant {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #00D000;
}
-dl.test
-{
- margin-left:-7px;
- padding-left: 3px;
- border-left:4px solid;
- border-color: #3030E0;
+dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #00D000;
}
-dl.bug
-{
- margin-left:-7px;
- padding-left: 3px;
- border-left:4px solid;
- border-color: #C08050;
+dl.deprecated {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #505050;
+}
+
+dl.deprecated.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #505050;
+}
+
+dl.todo {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #00C0E0;
+}
+
+dl.todo.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #00C0E0;
+}
+
+dl.test {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #3030E0;
+}
+
+dl.test.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #3030E0;
+}
+
+dl.bug {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #C08050;
+}
+
+dl.bug.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #C08050;
}
dl.section dd {
@@ -1211,6 +1328,11 @@ dl.section dd {
text-align: center;
}
+.plantumlgraph
+{
+ text-align: center;
+}
+
.diagraph
{
text-align: center;
@@ -1254,6 +1376,11 @@ div.toc {
width: 200px;
}
+.PageDocRTL-title div.toc {
+ float: left !important;
+ text-align: right;
+}
+
div.toc li {
background: url("bdwn.png") no-repeat scroll 0 5px transparent;
font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
@@ -1262,6 +1389,12 @@ div.toc li {
padding-top: 2px;
}
+.PageDocRTL-title div.toc li {
+ background-position-x: right !important;
+ padding-left: 0 !important;
+ padding-right: 10px;
+}
+
div.toc h3 {
font: bold 12px/1.2 Arial,FreeSans,sans-serif;
color: #4665A2;
@@ -1291,6 +1424,26 @@ div.toc li.level4 {
margin-left: 45px;
}
+.PageDocRTL-title div.toc li.level1 {
+ margin-left: 0 !important;
+ margin-right: 0;
+}
+
+.PageDocRTL-title div.toc li.level2 {
+ margin-left: 0 !important;
+ margin-right: 15px;
+}
+
+.PageDocRTL-title div.toc li.level3 {
+ margin-left: 0 !important;
+ margin-right: 30px;
+}
+
+.PageDocRTL-title div.toc li.level4 {
+ margin-left: 0 !important;
+ margin-right: 45px;
+}
+
.inherit_header {
font-weight: bold;
color: gray;
@@ -1404,7 +1557,7 @@ tr.heading h2 {
}
#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {
- border-top-color: #ffffff;
+ border-top-color: #FFFFFF;
border-width: 10px;
margin: 0px -10px;
}
@@ -1432,7 +1585,7 @@ tr.heading h2 {
}
#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {
- border-bottom-color: #ffffff;
+ border-bottom-color: #FFFFFF;
border-width: 10px;
margin: 0px -10px;
}
@@ -1459,7 +1612,7 @@ tr.heading h2 {
left: 100%;
}
#powerTip.e:after {
- border-left-color: #ffffff;
+ border-left-color: #FFFFFF;
border-width: 10px;
top: 50%;
margin-top: -10px;
@@ -1475,7 +1628,7 @@ tr.heading h2 {
right: 100%;
}
#powerTip.w:after {
- border-right-color: #ffffff;
+ border-right-color: #FFFFFF;
border-width: 10px;
top: 50%;
margin-top: -10px;
@@ -1506,3 +1659,72 @@ tr.heading h2 {
}
}
+/* @group Markdown */
+
+table.markdownTable {
+ border-collapse:collapse;
+ margin-top: 4px;
+ margin-bottom: 4px;
+}
+
+table.markdownTable td, table.markdownTable th {
+ border: 1px solid #2D4068;
+ padding: 3px 7px 2px;
+}
+
+table.markdownTable tr {
+}
+
+th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone {
+ background-color: #374F7F;
+ color: #FFFFFF;
+ font-size: 110%;
+ padding-bottom: 4px;
+ padding-top: 5px;
+}
+
+th.markdownTableHeadLeft, td.markdownTableBodyLeft {
+ text-align: left
+}
+
+th.markdownTableHeadRight, td.markdownTableBodyRight {
+ text-align: right
+}
+
+th.markdownTableHeadCenter, td.markdownTableBodyCenter {
+ text-align: center
+}
+
+.DocNodeRTL {
+ text-align: right;
+ direction: rtl;
+}
+
+.DocNodeLTR {
+ text-align: left;
+ direction: ltr;
+}
+
+table.DocNodeRTL {
+ width: auto;
+ margin-right: 0;
+ margin-left: auto;
+}
+
+table.DocNodeLTR {
+ width: auto;
+ margin-right: auto;
+ margin-left: 0;
+}
+
+tt, code, kbd, samp
+{
+ display: inline-block;
+ direction:ltr;
+}
+/* @end */
+
+u {
+ text-decoration: underline;
+}
+
diff --git a/docs/html/dynsections.js b/docs/html/dynsections.js
index 85e1836..3174bd7 100644
--- a/docs/html/dynsections.js
+++ b/docs/html/dynsections.js
@@ -1,3 +1,27 @@
+/*
+ @licstart The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend The above is the entire license notice for the JavaScript code in this file
+ */
function toggleVisibility(linkObj)
{
var base = $(linkObj).attr('id');
@@ -15,7 +39,7 @@ function toggleVisibility(linkObj)
summary.hide();
$(linkObj).removeClass('closed').addClass('opened');
$(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
- }
+ }
return false;
}
@@ -94,4 +118,4 @@ function toggleInherit(id)
$(img).attr('src',src.substring(0,src.length-10)+'open.png');
}
}
-
+/* @license-end */
diff --git a/docs/html/files.html b/docs/html/files.html
index 0e25f7d..8080c0a 100644
--- a/docs/html/files.html
+++ b/docs/html/files.html
@@ -1,21 +1,14 @@
-
+
-
+
-| ▼ Documents | |
| ▼ GitHub | |
| ▼ libxdf | |
| ▼ libxdf | |
| xdf.cpp | |
| xdf.h | The header file of Xdf class |
|
- libxdf
- 0.92
+ Libxdf
- A static C++ library for loading XDF files
+ A C++ library for loading XDF files
|
+ 1.8.18
+
diff --git a/docs/html/functions_func.html b/docs/html/functions_func.html
index f538984..cdcf6c7 100644
--- a/docs/html/functions_func.html
+++ b/docs/html/functions_func.html
@@ -1,21 +1,14 @@
-
+
-
+
-
+ 1.8.18
+
diff --git a/docs/html/functions_type.html b/docs/html/functions_type.html
index fe5d4f8..c2ea584 100644
--- a/docs/html/functions_type.html
+++ b/docs/html/functions_type.html
@@ -1,21 +1,14 @@
-
+
-
+
-
+ 1.8.18
+
diff --git a/docs/html/functions_vars.html b/docs/html/functions_vars.html
index 5e89b7f..5c3eba1 100644
--- a/docs/html/functions_vars.html
+++ b/docs/html/functions_vars.html
@@ -1,21 +1,14 @@
-
+
-
+
-
+ 1.8.18
+
diff --git a/docs/html/index.html b/docs/html/index.html
index 3f07825..e9a68fa 100644
--- a/docs/html/index.html
+++ b/docs/html/index.html
@@ -1,21 +1,14 @@
-
+
-
+
-
+ 1.8.18
+
diff --git a/docs/html/jquery.js b/docs/html/jquery.js
index f5343ed..103c32d 100644
--- a/docs/html/jquery.js
+++ b/docs/html/jquery.js
@@ -1,71 +1,26 @@
+/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0|
+ Libxdf
+
+ A C++ library for loading XDF files
+ |
+
Libxdf is a cross-platform C++ library for loading multi-modal, multi-rate signals stored in XDF files. Libxdf is used in the biosignal viewing application SigViewer. It can also be integrated into other C++ applications.
+Libxdf is open-source, free, and actively maintained.
+Libxdf can be conveniently built either using qmake or cmake. Configuration files for both build tools are included with the source.
cmake builds a static library by default, but you can build a shared library by setting the BUILD_SHARED_LIBS variable (e.g. -DBUILD_SHARED_LIBS=ON).
Libxdf is a built-in component of SigViewer. If you wish to build SigViewer from source, follow these steps:
+xdf.h and libxdf.a from the release page.xdf.h into sigviewer/external/includelibxdf.a into sigviewer/external/lib
Example: SigViewer using libxdf to display signals in an XDF file.
+Xdf class and call the load_xdf method.Example:
+To resample the signals, e.g. to 100Hz:
+The methods in libxdf must be called following a certain order. For instance, if you call the detrend method before you load any data, it will cause undefined behavior.
The recommended order is shown here. Only load_xdf is mandatory.
Libxdf depends on third party libraries Pugixml v1.8 for XML parsing and Smarc for resampling.
+Documentation was generated via Doxygen.
+Email author or report a new issue.
+
+ 1.8.18
+
+
+