v2.0.0
Loading...
Searching...
No Matches
bids_event.cpp
Go to the documentation of this file.
1//=============================================================================================================
34
35//=============================================================================================================
36// INCLUDES
37//=============================================================================================================
38
39#include "bids_event.h"
40#include "bids_tsv.h"
41
42//=============================================================================================================
43// USED NAMESPACES
44//=============================================================================================================
45
46using namespace BIDSLIB;
47
48//=============================================================================================================
49// STATIC METHODS
50//=============================================================================================================
51
52QList<BidsEvent> BidsEvent::readTsv(const QString& sFilePath)
53{
54 QStringList headers;
55 QList<BidsTsvRow> rawRows = BidsTsv::readTsv(sFilePath, headers);
56
57 bool hasOnset = headers.contains(QStringLiteral("onset"));
58 bool hasDuration = headers.contains(QStringLiteral("duration"));
59 bool hasSample = headers.contains(QStringLiteral("sample"));
60 bool hasValue = headers.contains(QStringLiteral("value"));
61 bool hasTrialType = headers.contains(QStringLiteral("trial_type"));
62
63 QList<BidsEvent> events;
64 events.reserve(rawRows.size());
65
66 for(const auto& row : rawRows) {
67 BidsEvent ev;
68
69 if(hasOnset)
70 ev.onset = row.value(QStringLiteral("onset"), QStringLiteral("0")).toFloat();
71
72 if(hasDuration) {
73 QString dur = row.value(QStringLiteral("duration"), QStringLiteral("0"));
74 ev.duration = (dur == QStringLiteral("n/a")) ? 0.0f : dur.toFloat();
75 }
76
77 if(hasSample)
78 ev.sample = row.value(QStringLiteral("sample"), QStringLiteral("0")).toInt();
79
80 if(hasValue) {
81 QString val = row.value(QStringLiteral("value"), QStringLiteral("0"));
82 ev.value = (val == QStringLiteral("n/a")) ? 0 : val.toInt();
83 }
84
85 if(hasTrialType) {
86 ev.trialType = row.value(QStringLiteral("trial_type"));
87 if(ev.trialType == QStringLiteral("n/a"))
88 ev.trialType.clear();
89 }
90
91 events.append(ev);
92 }
93
94 return events;
95}
96
97//=============================================================================================================
98
99bool BidsEvent::writeTsv(const QString& sFilePath,
100 const QList<BidsEvent>& events)
101{
102 QStringList headers = {
103 QStringLiteral("onset"),
104 QStringLiteral("duration"),
105 QStringLiteral("trial_type"),
106 QStringLiteral("value"),
107 QStringLiteral("sample"),
108 };
109
110 QList<BidsTsvRow> rows;
111 rows.reserve(events.size());
112
113 for(const auto& ev : events) {
114 BidsTsvRow row;
115 row[QStringLiteral("onset")] = QString::number(static_cast<double>(ev.onset), 'f', 6);
116 row[QStringLiteral("duration")] = QString::number(static_cast<double>(ev.duration), 'f', 6);
117 row[QStringLiteral("trial_type")] = ev.trialType.isEmpty() ? QStringLiteral("n/a") : ev.trialType;
118 row[QStringLiteral("value")] = QString::number(ev.value);
119 row[QStringLiteral("sample")] = QString::number(ev.sample);
120 rows.append(row);
121 }
122
123 return BidsTsv::writeTsv(sFilePath, headers, rows);
124}
BidsTsv class declaration — generic BIDS TSV file reading and writing.
BidsEvent struct declaration — a single BIDS event annotation.
BIDS dataset reading, writing, path construction, and sidecar metadata handling for iEEG/EEG/MEG.
QMap< QString, QString > BidsTsvRow
Definition bids_tsv.h:65
Single event annotation, typically parsed from or written to *_events.tsv.
Definition bids_event.h:66
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:82
static bool writeTsv(const QString &sFilePath, const QStringList &headers, const QList< BidsTsvRow > &rows)
Definition bids_tsv.cpp:123