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"));
41 QList<BidsEvent> events;
42 events.reserve(rawRows.size());
44 for(
const auto& row : rawRows) {
48 ev.
onset = row.value(QStringLiteral(
"onset"), QStringLiteral(
"0")).toFloat();
51 QString dur = row.value(QStringLiteral(
"duration"), QStringLiteral(
"0"));
52 ev.
duration = (dur == QStringLiteral(
"n/a")) ? 0.0f : dur.toFloat();
56 ev.
sample = row.value(QStringLiteral(
"sample"), QStringLiteral(
"0")).toInt();
59 QString val = row.value(QStringLiteral(
"value"), QStringLiteral(
"0"));
60 ev.
value = (val == QStringLiteral(
"n/a")) ? 0 : val.toInt();
64 ev.
trialType = row.value(QStringLiteral(
"trial_type"));
78 const QList<BidsEvent>& events)
80 QStringList headers = {
81 QStringLiteral(
"onset"),
82 QStringLiteral(
"duration"),
83 QStringLiteral(
"trial_type"),
84 QStringLiteral(
"value"),
85 QStringLiteral(
"sample"),
88 QList<BidsTsvRow> rows;
89 rows.reserve(events.size());
91 for(
const auto& ev : events) {
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);
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
Single event annotation, typically parsed from or written to *_events.tsv.
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)
static bool writeTsv(const QString &sFilePath, const QStringList &headers, const QList< BidsTsvRow > &rows)