From 2336393f736963431b751fd1f021d3af5d87911f Mon Sep 17 00:00:00 2001
From: Dung Truong
Date: Wed, 6 Oct 2021 23:50:30 -0700
Subject: [PATCH] update HED export mechanism for HED-3G
---
pop_eventinfo.m | 54 +++++++++++++++++++++++++++++++++----------------
1 file changed, 37 insertions(+), 17 deletions(-)
diff --git a/pop_eventinfo.m b/pop_eventinfo.m
index 2a15f1a..8cef76f 100644
--- a/pop_eventinfo.m
+++ b/pop_eventinfo.m
@@ -48,7 +48,7 @@
warning('There is mismatch in number of fields in EEG.event structures. Using fields of EEG(%d) which has the highest number of fields (%d).', index, num);
end
end
- bidsFields = {'onset', 'duration', 'trial_type','value','stim_file','sample','response_time','HED'};
+ bidsFields = {'onset', 'duration', 'trial_type','value','stim_file','sample','response_time'};%,'HED'};
eventFields = setdiff(eventFields, 'latency');
% define global variables
% -----------------------
@@ -201,6 +201,10 @@ function done()
% prepare return struct
fields = fieldnames(eventBIDS);
+ if isfield(EEG.etc,'tags')
+ hedTags = EEG.etc.tags;
+ fMap = fieldMap.createfMapFromStruct(hedTags);
+ end
for k=1:length(fields)
bidsField = fields{k};
if ~isfield(eventBIDS.(bidsField), 'EEGField')
@@ -225,6 +229,22 @@ function done()
if isfield(eventBIDS.(bidsField),'Levels') && ~isempty(eventBIDS.(bidsField).Levels) && ~strcmp(eventBIDS.(bidsField).Levels,'n/a')
eInfoDesc.(bidsField).Levels = eventBIDS.(bidsField).Levels;
end
+ % parse HED
+ if isfield(EEG.etc,'tags')
+ tMap = fMap.getMap(eegField);
+ if ~isempty(tMap)
+ codes = tMap.getCodes();
+ if numel(codes) == 1 && strcmp(codes{1},'HED')
+ tList = tMap.getValue('HED');
+ eInfoDesc.(bidsField).HED = tagList.stringify(tList.getTags());
+ else
+ for c=1:numel(codes)
+ tList = tMap.getValue(codes{c});
+ eInfoDesc.(bidsField).HED.(codes{c}) = tagList.stringify(tList.getTags());
+ end
+ end
+ end
+ end
if isfield(eventBIDS.(bidsField), 'TermURL') && ~isempty(eventBIDS.(bidsField).TermURL)
eInfoDesc.(bidsField).TermURL = eventBIDS.(bidsField).TermURL;
end
@@ -599,23 +619,23 @@ function removeLevelUI()
event.value.Units = '';
event.value.Levels = [];
event.value.TermURL = '';
- elseif strcmp(fields{idx}, 'HED') && any(strcmp(eventFields, 'usertags'))
- if isfield(EEG(1).event, 'usertags')
- event.HED.EEGField = 'usertags';
- else
- event.HED.EEGField = '';
- end
- event.HED.LongName = 'Hierarchical Event Descriptor';
- event.HED.Description = 'Tags describing the nature of the event';
- event.HED.Levels = [];
- event.HED.Units = '';
- event.HED.TermURL = '';
+% elseif strcmp(fields{idx}, 'HED') && any(strcmp(eventFields, 'usertags'))
+% if isfield(EEG(1).event, 'usertags')
+% event.HED.EEGField = 'usertags';
+% else
+% event.HED.EEGField = '';
+% end
+% event.HED.LongName = 'Hierarchical Event Descriptor';
+% event.HED.Description = 'Tags describing the nature of the event';
+% event.HED.Levels = [];
+% event.HED.Units = '';
+% event.HED.TermURL = '';
elseif strcmp(fields{idx}, 'duration')
- if isfield(EEG(1).event, 'duration')
- event.HED.EEGField = 'duration';
- else
- event.HED.EEGField = '';
- end
+% if isfield(EEG(1).event, 'duration')
+% event.HED.EEGField = 'duration';
+% else
+% event.HED.EEGField = '';
+% end
event.duration.LongName = 'Event duration';
event.duration.Description = 'Duration of the event (measured from onset) in seconds. Must always be either zero or positive. A "duration" value of zero implies that the delta function or event is so short as to be effectively modeled as an impulse.';
event.duration.Units = 'second';