46 const MatrixXi& events,
48 const QMap<int, QString>& eventDescriptions,
53 if (events.rows() == 0 || events.cols() < 3) {
58 qWarning(
"annotationsFromEvents: sfreq must be positive, got %f", sfreq);
62 for (
int i = 0; i < static_cast<int>(events.rows()); ++i) {
63 const int sample = events(i, 0);
64 const int eventId = events(i, 2);
66 const double onset =
static_cast<double>(sample - firstSample) / sfreq;
69 if (eventDescriptions.contains(eventId)) {
70 description = eventDescriptions.value(eventId);
72 description = QString::number(eventId);
75 annotations.
append(onset, 0.0, description);
86 const QMap<QString, int>& eventIds,
90 return MatrixXi(0, 3);
94 qWarning(
"eventsFromAnnotations: sfreq must be positive, got %f", sfreq);
95 return MatrixXi(0, 3);
98 const int n = annotations.
size();
99 MatrixXi result(n, 3);
101 for (
int i = 0; i < n; ++i) {
104 const int sample =
static_cast<int>(std::round(a.
onset * sfreq)) + firstSample;
117 result(i, 0) = sample;
119 result(i, 2) = eventId;
129 QMap<QString, int> counts;
131 for (
int i = 0; i < annotations.
size(); ++i) {
132 counts[annotations[i].description] += 1;
Conversion helpers between FIFF annotations and the integer stim-channel event list used by epoching ...
FIFF file I/O, in-memory data structures and high-level readers/writers.
Eigen::MatrixXi eventsFromAnnotations(const FiffAnnotations &annotations, double sfreq, const QMap< QString, int > &eventIds=QMap< QString, int >(), int firstSample=0)
QMap< QString, int > countAnnotations(const FiffAnnotations &annotations)
FiffAnnotations annotationsFromEvents(const Eigen::MatrixXi &events, double sfreq, const QMap< int, QString > &eventDescriptions=QMap< int, QString >(), int firstSample=0)
One FIFF / MNE annotation: onset (s), duration (s) and description string.
Container for FiffAnnotation entries with FIFF, JSON and CSV serializers.
void append(const FiffAnnotation &annotation)