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.