reading EGI data
Joseph Dien
jdien07 at MAC.COM
Sat Apr 17 08:58:26 CEST 2010
Try this as a replacement for the read_sbin_data.m file. It fixes the problem (which, contrary to what I just said, is that the unsegmented data code someone added was assuming the files are always int16 whereas your data is single, so it wasn't skipping the correct number of bytes). It's based on the fieldtrip-20100406 release rather than today's release but should be good enough until I can get the fix posted. Let me know if there are any further problems.
function [trialData] = read_sbin_data(filename, hdr, begtrial, endtrial, chanindx)
% READ_SBIN_DATA reads the data from an EGI segmented simple binary format file
%
% Use as
% [trialData] = read_sbin_data(filename, hdr, begtrial, endtrial, chanindx)
% with
% filename name of the input file
% hdr header structure, see READ_HEADER
% begtrial first trial to read, mutually exclusive with begsample+endsample
% endtrial last trial to read, mutually exclusive with begsample+endsample
% chanindx list with channel indices to read
%
% This function returns a 3-D matrix of size Nchans*Nsamples*Ntrials.
%_______________________________________________________________________
%
%
% Modified from EGI's readEGLY.m with permission 2008-03-31 Joseph Dien
%
% Subversion does not use the Log keyword, use 'svn log <filename>' or 'svn -v log | less' to get detailled information
fh=fopen([filename],'r');
if fh==-1
error('wrong filename')
end
version = fread(fh,1,'int32');
%check byteorder
[str,maxsize,cEndian]=computer;
if version < 7
if cEndian == 'B'
endian = 'ieee-be';
elseif cEndian == 'L'
endian = 'ieee-le';
end;
elseif (version > 6) && ~bitand(version,6)
if cEndian == 'B'
endian = 'ieee-le';
elseif cEndian == 'L'
endian = 'ieee-be';
end;
version = swapbytes(uint32(version)); %hdr.orig.header_array is already byte-swapped
else
error('ERROR: This is not a simple binary file. Note that NetStation does not successfully directly convert EGIS files to simple binary format.\n');
end;
if bitand(version,1) == 0
unsegmented = 1;
else
unsegmented = 0;
end;
precision = bitand(version,6);
Nevents=hdr.orig.header_array(17);
switch precision
case 2
trialLength=2*hdr.nSamples*(hdr.nChans+Nevents)+6;
dataType='int16';
dataLength=2;
case 4
trialLength=4*hdr.nSamples*(hdr.nChans+Nevents)+6;
dataType='single';
dataLength=4;
case 6
trialLength=8*hdr.nSamples*(hdr.nChans+Nevents)+6;
dataType='double';
dataLength=8;
end
if unsegmented
%interpret begtrial and endtrial as sample indices
fseek(fh, 36+Nevents*4, 'bof'); %skip over header
fseek(fh, ((begtrial-1)*(hdr.nChans+Nevents)*dataLength), 'cof'); %skip previous trials
nSamples = endtrial-begtrial+1;
trialData = fread(fh, [hdr.nChans+Nevents, nSamples],dataType,endian);
else
fseek(fh, 40+length(hdr.orig.CatLengths)+sum(hdr.orig.CatLengths)+Nevents*4, 'bof'); %skip over header
fseek(fh, (begtrial-1)*trialLength, 'cof'); %skip over initial segments
trialData=zeros(hdr.nChans,hdr.nSamples,endtrial-begtrial+1);
for segment=1:(endtrial-begtrial+1)
fseek(fh, 6, 'cof'); %skip over segment info
temp = fread(fh, [(hdr.nChans+Nevents), hdr.nSamples],dataType,endian);
trialData(:,:,segment) = temp(1:hdr.nChans,:);
end
end
trialData=trialData(chanindx, :,:);
fclose(fh);
On Apr 17, 2010, at 2:41 AM, Joseph Dien wrote:
> Hi,
> yeah, there's a bug in the code. When someone added support for unsegmented files to my EGI simple binary file format code, it appears they didn't test it very well. There's been a number of problems. In this case, instead of just skipping the first sample, it's skipping hdr.nChans+Nevents samples, resulting in mangled data.
>
> I'm at a conference right now but as soon as I get home I'll post a fix and let you know that it's done. Sigh...
>
> Joe
>
>
>
> On Apr 16, 2010, at 12:09 PM, Giovanni Piantoni wrote:
>
>> Dear all,
>>
>> I get this incredible error when I try to read EGI data. If the first
>> data point is odd, it works well (EGI_data_odd.png), while if the
>> first data point is even, then the result doesn't make much sense
>> (EGI_data_even.png).
>> You can replicate it with this data:
>> http://bit.ly/cdqzZH
>>
>> and the following code:
>>
>> cfg = [];
>> cfg.dataset = 'EGIrecording.raw';
>> cfg.trialdef.triallength = Inf;
>> def = ft_definetrial(cfg);
>> data = ft_preprocessing(def);
>> plot(data.trial{1}(1,:)) % odd
>>
>> def.trl(1) = 2;
>> data = ft_preprocessing(def);
>> plot(data.trial{1}(1,:)) % even
>>
>> Does anybody have an idea on what's going on?
>>
>> Thanks,
>> Gio
>>
>> -------------------------------------------------------------------------------------
>> MATLAB Version 7.9.0.529 (R2009b)
>> Operating System: Linux 2.6.31-20-generic #58-Ubuntu SMP Fri Mar 12
>> 04:38:19 UTC 2010 x86_64
>> Java VM Version: Java 1.6.0_12-b04 with Sun Microsystems Inc. Java
>> HotSpot(TM) 64-Bit Server VM mixed mode
>> -------------------------------------------------------------------------------------
>>
>> --
>> Giovanni Piantoni, Ph.D. student
>> Dept. Sleep & Cognition
>> Netherlands Institute for Neuroscience
>> Meibergdreef 47
>> 1105 BA Amsterdam (NL)
>>
>> +31 (0)20 5665492
>> g.piantoni at nin.knaw.nl
>> www.nin.knaw.nl/research_groups/van_someren_group/
>>
>> ----------------------------------
>> The aim of this list is to facilitate the discussion between users of the FieldTrip toolbox, to share experiences and to discuss new ideas for MEG and EEG analysis. See also http://listserv.surfnet.nl/archives/fieldtrip.html and http://www.ru.nl/neuroimaging/fieldtrip.
>> <EGI_data_odd.png><EGI_data_even.png>
>
> ----------------------------------
> The aim of this list is to facilitate the discussion between users of the FieldTrip toolbox, to share experiences and to discuss new ideas for MEG and EEG analysis. See also http://listserv.surfnet.nl/archives/fieldtrip.html and http://www.ru.nl/neuroimaging/fieldtrip.
----------------------------------
The aim of this list is to facilitate the discussion between users of the FieldTrip toolbox, to share experiences and to discuss new ideas for MEG and EEG analysis. See also http://listserv.surfnet.nl/archives/fieldtrip.html and http://www.ru.nl/neuroimaging/fieldtrip.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.science.ru.nl/pipermail/fieldtrip/attachments/20100417/acf24e83/attachment-0002.html>
More information about the fieldtrip
mailing list