v2.0.0
Loading...
Searching...
No Matches
bids_event.cpp
Go to the documentation of this file.
1//=============================================================================================================
12
13//=============================================================================================================
14// INCLUDES
15//=============================================================================================================
16
17#include "bids_event.h"
18#include "bids_tsv.h"
19
20//=============================================================================================================
21// USED NAMESPACES
22//=============================================================================================================
23
24using namespace BIDSLIB;
25
26//=============================================================================================================
27// STATIC METHODS
28//=============================================================================================================
29
30QList<BidsEvent> BidsEvent::readTsv(const QString& sFilePath)
31{
32 QStringList headers;
33 QList<BidsTsvRow> rawRows = BidsTsv::readTsv(sFilePath, headers);
34
35 bool hasOnset = headers.contains(QStringLiteral("onset"));
36 bool hasDuration = headers.contains(QStringLiteral("duration"));
37 bool hasSample = headers.contains(QStringLiteral("sample"));
38 bool hasValue = headers.contains(QStringLiteral("value"));
39 bool hasTrialType = headers.contains(QStringLiteral("trial_type"));
40
41 QList<BidsEvent> events;
42 events.reserve(rawRows.size());
43
44 for(const auto& row : rawRows) {
45 BidsEvent ev;
46
47 if(hasOnset)
48 ev.onset = row.value(QStringLiteral("onset"), QStringLiteral("0")).toFloat();
49
50 if(hasDuration) {
51 QString dur = row.value(QStringLiteral("duration"), QStringLiteral("0"));
52 ev.duration = (dur == QStringLiteral("n/a")) ? 0.0f : dur.toFloat();
53 }
54
55 if(hasSample)
56 ev.sample = row.value(QStringLiteral("sample"), QStringLiteral("0")).toInt();
57
58 if(hasValue) {
59 QString val = row.value(QStringLiteral("value"), QStringLiteral("0"));
60 ev.value = (val == QStringLiteral("n/a")) ? 0 : val.toInt();
61 }
62
63 if(hasTrialType) {
64 ev.trialType = row.value(QStringLiteral("trial_type"));
65 if(ev.trialType == QStringLiteral("n/a"))
66 ev.trialType.clear();
67 }
68
69 events.append(ev);
70 }
71
72 return events;
73}
74
75//=============================================================================================================
76
77bool BidsEvent::writeTsv(const QString& sFilePath,
78 const QList<BidsEvent>& events)
79{
80 QStringList headers = {
81 QStringLiteral("onset"),
82 QStringLiteral("duration"),
83 QStringLiteral("trial_type"),
84 QStringLiteral("value"),
85 QStringLiteral("sample"),
86 };
87
88 QList<BidsTsvRow> rows;
89 rows.reserve(events.size());
90
91 for(const auto& ev : events) {
92 BidsTsvRow row;
93 row[QStringLiteral("onset")] = QString::number(static_cast<double>(ev.onset), 'f', 6);
94 row[QStringLiteral("duration")] = QString::number(static_cast<double>(ev.duration), 'f', 6);
95 row[QStringLiteral("trial_type")] = ev.trialType.isEmpty() ? QStringLiteral("n/a") : ev.trialType;
96 row[QStringLiteral("value")] = QString::number(ev.value);
97 row[QStringLiteral("sample")] = QString::number(ev.sample);
98 rows.append(row);
99 }
100
101 return BidsTsv::writeTsv(sFilePath, headers, rows);
102}
Reader/writer for the BIDS _events.tsv sidecar — discrete annotations on the time axis of a recording...
Generic tab-separated-value reader/writer for BIDS sidecars (UTF-8, LF, n/a for missing values,...
BIDS dataset reading, writing, path construction, and sidecar metadata handling for iEEG/EEG/MEG.
QMap< QString, QString > BidsTsvRow
Definition bids_tsv.h:54
Single event annotation, typically parsed from or written to *_events.tsv.
Definition bids_event.h:57
static QList< BidsEvent > readTsv(const QString &sFilePath)
Read a BIDS *_events.tsv file.
static bool writeTsv(const QString &sFilePath, const QList< BidsEvent > &events)
Write a BIDS *_events.tsv file.
static QList< BidsTsvRow > readTsv(const QString &sFilePath, QStringList &headers)
Definition bids_tsv.cpp:60
static bool writeTsv(const QString &sFilePath, const QStringList &headers, const QList< BidsTsvRow > &rows)
Definition bids_tsv.cpp:101