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"));
63 QList<BidsEvent> events;
64 events.reserve(rawRows.size());
66 for(
const auto& row : rawRows) {
70 ev.
onset = row.value(QStringLiteral(
"onset"), QStringLiteral(
"0")).toFloat();
73 QString dur = row.value(QStringLiteral(
"duration"), QStringLiteral(
"0"));
74 ev.
duration = (dur == QStringLiteral(
"n/a")) ? 0.0f : dur.toFloat();
78 ev.
sample = row.value(QStringLiteral(
"sample"), QStringLiteral(
"0")).toInt();
81 QString val = row.value(QStringLiteral(
"value"), QStringLiteral(
"0"));
82 ev.
value = (val == QStringLiteral(
"n/a")) ? 0 : val.toInt();
86 ev.
trialType = row.value(QStringLiteral(
"trial_type"));
100 const QList<BidsEvent>& events)
102 QStringList headers = {
103 QStringLiteral(
"onset"),
104 QStringLiteral(
"duration"),
105 QStringLiteral(
"trial_type"),
106 QStringLiteral(
"value"),
107 QStringLiteral(
"sample"),
110 QList<BidsTsvRow> rows;
111 rows.reserve(events.size());
113 for(
const auto& ev : events) {
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);