Back to the main page.

Bug 506 - Suggestion for reading gdf events

Status CLOSED FIXED
Reported 2011-02-25 13:31:00 +0100
Modified 2011-03-31 14:13:54 +0200
Product: FieldTrip
Component: fileio
Version: unspecified
Hardware: All
Operating System: Mac OS
Importance: P1 enhancement
Assigned to: Robert Oostenveld
URL:
Tags:
Depends on:
Blocks:
See also:

Philip van den Broek - 2011-02-25 13:31:14 +0100

Created attachment 26 solution to reading events from biosem2ft generated gdf-file Reading events from file formats that do not have a fixed representation of events might be achieved by allowing users to write their own event reading function (event = eventfun(filename, cfg)). The ft_read_event function should then accept eventfun as an input argument. I included a rough but working example of how to readout events from a gdf-file generated by biosemi2ft. The code below should replace the code in ft_read_event. The attached file shows the example eventfun function read_biosig_biosemi_events. Allowing the user to specify customized event reading functions, might also be made an option to all other file formats. ---------------------------------- case {'biosig', 'gdf'} %Ph: allow users to specify their own read_event function (eventfun)? % NOTE: FIXED FUNCTION UNTIL A GENERALLY ACCEPTED SOLUTION IS FOUND !!! % Should become something like: cfg.eventfun.gdf = 'read_biosig_biosemi_events'?? % and generally applicable to all other file formats, i.e., take default or % user eventfun if specified eventfun = 'read_biosig_biosemi_events'; if ~isempty(eventfun) && ~isempty(which(eventfun)) if isempty(hdr) hdr = ft_read_header(filename); end cfg.eventformat = eventformat; cfg.hdr = hdr; cfg.detectflank = detectflank; cfg.trigshift = trigshift; cfg.trigindx = trigindx; cfg.headerformat = headerformat; cfg.dataformat = dataformat; cfg.flt_type = flt_type; cfg.flt_value = flt_value; cfg.flt_minsample = flt_minsample; cfg.flt_maxsample = flt_maxsample; cfg.flt_mintimestamp = flt_mintimestamp; cfg.flt_maxtimestamp = flt_maxtimestamp; cfg.flt_minnumber = flt_minnumber; cfg.flt_maxnumber = flt_maxnumber; % read events via user specified function event = feval(eventfun,filename,cfg); else % FIXME it would be nice to figure out how sopen/sread return events % for all possible fileformats that can be processed with biosig warning('BIOSIG does not have a consistent event representation, skipping events') event = []; end


Robert Oostenveld - 2011-03-16 22:52:03 +0100

Het probleem en de oplossing is specifiek voor de combinatie GDF met een biosemi versterker. Het is niet een algemeen biosig probleem, dus hoeft het ook niet voor biosig opgelost te worden. mijn voorstel is om een read_gdf_event te maken die 1) checkt dat een STATUS kanaal aanwezig is 2) ft_read_data aanroept om het STATUS kanaal te lezen (dat gebruikt dan automatisch biosig) 3) de flank detectie en bitshifts doet zoals in je code vervolgens in ft_read_event case 'gdf' % this will read the STATUS channel, which indicates that it is recorded on a biosemi amplifier % it will give a warning if no STATUS channel is present event = read_gdf_event(filename) case 'biosig' % FIXME it would be nice to figure out how sopen/sread return events % for all possible fileformats that can be processed with biosig warning('BIOSIG does not have a consistent event representation, skipping events') event = [];


Philip van den Broek - 2011-03-21 15:29:15 +0100

In het geval van het neurosky thinkgear device hebben we idd geen STATUS kanaal. Als de warning een identifier krijgt kunnen we in het geval op voorhand bekend is dat er geen events te lezen zijn deze warning uitschakelen. Verder hebben we in het verleden de (achteraf onhandige) keuze gemaakt om het statuskanaal voor de biosemi amp. te splitsen in een stimulus en response kanaal. Hierdoor zitten we vwb uitlezen van deze events met een compabiliteitsprobleem. Ik heb dat nu lokaal gewijzigd, maar is geen goede oplossing. Dat was o.a. ook de reden voor de suggestie om custom read_event functies toe te staan. Heb je hier een goede oplossing voor?


Robert Oostenveld - 2011-03-29 14:05:39 +0200

manzana> svn commit Sending fileio/ft_read_event.m Sending fileio/ft_read_header.m Sending fileio/private/read_trigger.m Transmitting file data ... Committed revision 3241.


Robert Oostenveld - 2011-03-31 14:13:54 +0200

changed the status of most recently resolved/fixed bugs into "CLOSED"