[Eeglablist] converting .set data back to .cnt or .eeg neuroscandata file

Sehatpour, Pejman PSehatpour at NKI.RFMH.ORG
Tue Jan 25 12:32:40 PST 2005


Hi qi yang,

You need to use a little trick. 

1-First open the original .eeg file in neuroscan (before any
manipulations in EEGLAB) and save it as .dat.

2-Then do your work in EEGLAB and save the eeglab .set data as ASCII or
a .txt file. (make sure that the data has the same orientation
eg:rows=points)

3-Paste this new data in place of the data that you saved originally and
save this as a new .dat file. (this will allow you to have the correct
header information for neuroscan). Just note that if you made
manipulations such as changing the dig.-rate etc. in EEGLAB, then you
will have to make the appropriate changes in the neuroscan header as
well.

4- Open this .dat file in neuroscan and save it as .eeg

 

There might also be a direct way to export the .set file to the .eeg or
.cnt format of neuroscan; so if anyone knows about it please email.

Best,

Pejman.

 

-----Original Message-----
From: eeglablist-bounces at sccn.ucsd.edu
[mailto:eeglablist-bounces at sccn.ucsd.edu] On Behalf Of Yang, Qi
Sent: Tuesday, January 25, 2005 12:13 PM
To: eeglablist at sccn.ucsd.edu
Subject: [Eeglablist] converting .set data back to .cnt or .eeg
neuroscandata file

 

Hi, 

I think this topic has been touched before. 
I want to convert the eeglab .set data into .cnt or .eeg neuroscan 
file for further analysis in other software.
There are some codes uploaded before (as following) .
But it seems not work? 

The input 'dataset' is the CNT-dataset you 
already have or a blank structure? 
This works for converting to .eeg data? 

Anybody has implemented those code?
or anybody has any other good suggestions?
  

Thank you very much! 

Regards, 

qi yang 





% writecnt() - Write a Neuroscan continuous signal file. 
% 
% Usage: 
%   >> writecnt(filename, CNT-dataset, varargin) 
% 
% Inputs: 
%   filename - name of the file with extension 
%   dataset -  name of the CNT-dataset, a structure with the following
fields 
%                   cntdataset.header 
%                   cntdataset.electloc 
%                   cntdataset.data 
%                   cntdataset.Teeg 
%                   cntdataset.event 
%                   cntdataset.tag 
%                   cntdataset.endtag 
% 
% Optional inputs: 
%  't1'         - start at time t1, default 0 
%  'sample1'    - start at sample1, default 0, overrides t1 
%  'lddur'      - duration of segment to load, default = whole file 
%  'ldnsamples' - number of samples to load, default = whole file, 
%                 overrides lddur 
%  'scale'      - ['on'|'off'] scale data to microvolt (default:'on') 
%  'dataformat' - ['int16'|'int32'] default is 'int16' for 16-bit data. 
%                 Use 'int32' for 32-bit data. 
% 
% Outputs: 
%  file         - file containing NeuroScan CNT file with the continuous

%                 data and other information 
% 
% Authors:   Sean Fitzgibbon, Arnaud Delorme, Michiel Vestjens 2000-2004

% 
% Known limitations: 
%  For more see http://www.cnl.salk.edu/~arno/cntload/index.html    

%12345678901234567890123456789012345678901234567890123456789012345678901
2 

% Copyright (C) 2000 Sean Fitzgibbon, <psspf at id.psy.flinders.edu.au> 
% Copyright (C) 2003 Arnaud Delorme, Salk Institute, arno at salk.edu 
% 
% This program is free software; you can redistribute it and/or modify 
% it under the terms of the GNU General Public License as published by 
% the Free Software Foundation; either version 2 of the License, or 
% (at your option) any later version. 
% 
% This program is distributed in the hope that it will be useful, 
% but WITHOUT ANY WARRANTY; without even the implied warranty of 
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
% GNU General Public License for more details. 
% 
% You should have received a copy of the GNU General Public License 
% along with this program; if not, write to the Free Software 
% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
USA 

function f = writecnt(filename,cntdataset,varargin) 

if ~isempty(varargin) 
         WriteOptions=struct(varargin{:}); 
else WriteOptions = []; 
end; 

try, WriteOptions.t1;         catch, WriteOptions.t1=0; end 
try, WriteOptions.sample1;    catch, WriteOptions.sample1=[]; end 
try, WriteOptions.lddur;      catch, WriteOptions.lddur=[]; end 
try, WriteOptions.ldnsamples; catch, WriteOptions.ldnsamples=[]; end 
try, WriteOptions.scale;      catch, WriteOptions.scale='on'; end 
try, WriteOptions.dataformat;  catch, WriteOptions.dataformat='int16';
end 

sizeEvent1 = 8  ; %%% 8  bytes for Event1  
sizeEvent2 = 19 ; %%% 19 bytes for Event2 

type='cnt'; 
if nargin ==1 
    scan=0; 
end     

h   = cntdataset.header; 
e   = cntdataset.electloc; 
dat = cntdataset.data; 
eT  = cntdataset.Teeg; 
ev2 = cntdataset.event; 
t   = cntdataset.tag; 
endtag=cntdataset.endtag; 

 

fid = fopen(filename,'w'); 
disp(['Writing file ' filename ' ...']) 

% HEADER : 900 bytes => Starts at 0h, finishes with 383h. 

fwrite(fid,h.rev,'char'); 
fwrite(fid,h.nextfile,'long'); 
fwrite(fid,h.prevfile,'long'); 
fwrite(fid,h.type,'char'); 
fwrite(fid,h.id,'char'); 
fwrite(fid,h.oper,'char'); 
fwrite(fid,h.doctor,'char'); 
fwrite(fid,h.referral,'char'); 
fwrite(fid,h.hospital,'char'); 
fwrite(fid,h.patient,'char'); 
fwrite(fid,h.age,'short'); 
fwrite(fid,h.sex,'char'); 
fwrite(fid,h.hand,'char'); 
fwrite(fid,h.med,'char'); 
fwrite(fid,h.category,'char'); 
fwrite(fid,h.state,'char'); 
fwrite(fid,h.label,'char'); 
fwrite(fid,h.date,'char'); 
fwrite(fid,h.time,'char'); 
fwrite(fid,h.mean_age,'float'); 
fwrite(fid,h.stdev,'float'); 
fwrite(fid,h.n,'short'); 
fwrite(fid,h.compfile,'char'); 
fwrite(fid,h.spectwincomp,'float'); 
fwrite(fid,h.meanaccuracy,'float'); 
fwrite(fid,h.meanlatency,'float'); 
fwrite(fid,h.sortfile,'char'); 
fwrite(fid,h.numevents,'int'); 
fwrite(fid,h.compoper,'char'); 
fwrite(fid,h.avgmode,'char'); 
fwrite(fid,h.review,'char'); 
fwrite(fid,h.nsweeps,'ushort'); 
fwrite(fid,h.compsweeps,'ushort'); 
fwrite(fid,h.acceptcnt,'ushort'); 
fwrite(fid,h.rejectcnt,'ushort'); 
fwrite(fid,h.pnts,'ushort'); 
fwrite(fid,h.nchannels,'ushort'); 
fwrite(fid,h.avgupdate,'ushort'); 
fwrite(fid,h.domain,'char'); 
fwrite(fid,h.variance,'char'); 
fwrite(fid,h.rate,'ushort'); 
fwrite(fid,h.scale,'double'); 
fwrite(fid,h.veogcorrect,'char'); 
fwrite(fid,h.heogcorrect,'char'); 
fwrite(fid,h.aux1correct,'char'); 
fwrite(fid,h.aux2correct,'char'); 
fwrite(fid,h.veogtrig,'float'); 
fwrite(fid,h.heogtrig,'float'); 
fwrite(fid,h.aux1trig,'float'); 
fwrite(fid,h.aux2trig,'float'); 
fwrite(fid,h.heogchnl,'short'); 
fwrite(fid,h.veogchnl,'short'); 
fwrite(fid,h.aux1chnl,'short'); 
fwrite(fid,h.aux2chnl,'short'); 
fwrite(fid,h.veogdir,'char'); 
fwrite(fid,h.heogdir,'char'); 
fwrite(fid,h.aux1dir,'char'); 
fwrite(fid,h.aux2dir,'char'); 
fwrite(fid,h.veog_n,'short'); 
fwrite(fid,h.heog_n,'short'); 
fwrite(fid,h.aux1_n,'short'); 
fwrite(fid,h.aux2_n,'short'); 
fwrite(fid,h.veogmaxcnt,'short'); 
fwrite(fid,h.heogmaxcnt,'short'); 
fwrite(fid,h.aux1maxcnt,'short'); 
fwrite(fid,h.aux2maxcnt,'short'); 
fwrite(fid,h.veogmethod,'char'); 
fwrite(fid,h.heogmethod,'char'); 
fwrite(fid,h.aux1method,'char'); 
fwrite(fid,h.aux2method,'char'); 
fwrite(fid,h.ampsensitivity,'float'); 
fwrite(fid,h.lowpass,'char'); 
fwrite(fid,h.highpass,'char'); 
fwrite(fid,h.notch,'char'); 
fwrite(fid,h.autoclipadd,'char'); 
fwrite(fid,h.baseline,'char'); 
fwrite(fid,h.offstart,'float'); 
fwrite(fid,h.offstop,'float'); 
fwrite(fid,h.reject,'char'); 
fwrite(fid,h.rejstart,'float'); 
fwrite(fid,h.rejstop,'float'); 
fwrite(fid,h.rejmin,'float'); 
fwrite(fid,h.rejmax,'float'); 
fwrite(fid,h.trigtype,'char'); 
fwrite(fid,h.trigval,'float'); 
fwrite(fid,h.trigchnl,'char'); 
fwrite(fid,h.trigmask,'short'); 
fwrite(fid,h.trigisi,'float'); 
fwrite(fid,h.trigmin,'float'); 
fwrite(fid,h.trigmax,'float'); 
fwrite(fid,h.trigdir,'char'); 
fwrite(fid,h.autoscale,'char'); 
fwrite(fid,h.n2,'short'); 
fwrite(fid,h.dir,'char'); 
fwrite(fid,h.dispmin,'float'); 
fwrite(fid,h.dispmax,'float'); 
fwrite(fid,h.xmin,'float'); 
fwrite(fid,h.xmax,'float'); 
fwrite(fid,h.automin,'float'); 
fwrite(fid,h.automax,'float'); 
fwrite(fid,h.zmin,'float'); 
fwrite(fid,h.zmax,'float'); 
fwrite(fid,h.lowcut,'float'); 
fwrite(fid,h.highcut,'float'); 
fwrite(fid,h.common,'char'); 
fwrite(fid,h.savemode,'char'); 
fwrite(fid,h.manmode,'char'); 
fwrite(fid,h.ref,'char'); 
fwrite(fid,h.rectify,'char'); 
fwrite(fid,h.displayxmin,'float'); 
fwrite(fid,h.displayxmax,'float'); 
fwrite(fid,h.phase,'char'); 
fwrite(fid,h.screen,'char'); 
fwrite(fid,h.calmode,'short'); 
fwrite(fid,h.calmethod,'short'); 
fwrite(fid,h.calupdate,'short'); 
fwrite(fid,h.calbaseline,'short'); 
fwrite(fid,h.calsweeps,'short'); 
fwrite(fid,h.calattenuator,'float'); 
fwrite(fid,h.calpulsevolt,'float'); 
fwrite(fid,h.calpulsestart,'float'); 
fwrite(fid,h.calpulsestop,'float'); 
fwrite(fid,h.calfreq,'float'); 
fwrite(fid,h.taskfile,'char'); 
fwrite(fid,h.seqfile,'char'); 
fwrite(fid,h.spectmethod,'char'); 
fwrite(fid,h.spectscaling,'char'); 
fwrite(fid,h.spectwindow,'char'); 
fwrite(fid,h.spectwinlength,'float'); 
fwrite(fid,h.spectorder,'char'); 
fwrite(fid,h.notchfilter,'char'); 
fwrite(fid,h.headgain,'short'); 
fwrite(fid,h.additionalfiles,'int'); 
fwrite(fid,h.unused,'char'); 
fwrite(fid,h.fspstopmethod,'short'); 
fwrite(fid,h.fspstopmode,'short'); 
fwrite(fid,h.fspfvalue,'float'); 
fwrite(fid,h.fsppoint,'short'); 
fwrite(fid,h.fspblocksize,'short'); 
fwrite(fid,h.fspp1,'ushort'); 
fwrite(fid,h.fspp2,'ushort'); 
fwrite(fid,h.fspalpha,'float'); 
fwrite(fid,h.fspnoise,'float'); 
fwrite(fid,h.fspv1,'short'); 
fwrite(fid,h.montage,'char'); 
fwrite(fid,h.eventfile,'char'); 
fwrite(fid,h.fratio,'float'); 
fwrite(fid,h.minor_rev,'char'); 
fwrite(fid,h.eegupdate,'short'); 
fwrite(fid,h.compressed,'char'); 
fwrite(fid,h.xscale,'float'); 
fwrite(fid,h.yscale,'float'); 
fwrite(fid,h.xsize,'float'); 
fwrite(fid,h.ysize,'float'); 
fwrite(fid,h.acmode,'char'); 
fwrite(fid,h.commonchnl,'uchar'); 
fwrite(fid,h.xtics,'char'); 
fwrite(fid,h.xrange,'char'); 
fwrite(fid,h.ytics,'char'); 
fwrite(fid,h.yrange,'char'); 
fwrite(fid,h.xscalevalue,'float'); 
fwrite(fid,h.xscaleinterval,'float'); 
fwrite(fid,h.yscalevalue,'float'); 
fwrite(fid,h.yscaleinterval,'float'); 
fwrite(fid,h.scaletoolx1,'float'); 
fwrite(fid,h.scaletooly1,'float'); 
fwrite(fid,h.scaletoolx2,'float'); 
fwrite(fid,h.scaletooly2,'float'); 
fwrite(fid,h.port,'short'); 
fwrite(fid,h.numsamples,'ulong'); 
fwrite(fid,h.filterflag,'char'); 
fwrite(fid,h.lowcutoff,'float'); 
fwrite(fid,h.lowpoles,'short'); 
fwrite(fid,h.highcutoff,'float'); 
fwrite(fid,h.highpoles,'short'); 
fwrite(fid,h.filtertype,'char'); 
fwrite(fid,h.filterdomain,'char'); 
fwrite(fid,h.snrflag,'char'); 
fwrite(fid,h.coherenceflag,'char'); 
fwrite(fid,h.continuoustype,'char'); 
fwrite(fid,h.eventtablepos,'long'); 
fwrite(fid,h.continuousseconds,'float'); 
fwrite(fid,h.channeloffset,'long'); 
fwrite(fid,h.autocorrectflag,'char'); 
fwrite(fid,h.dcthreshold,'uchar');  % = 383H 

% ELECT.DESCRIPTIONS : 75*n.channels bytes. 
% Starts with 384h, finishes with (899+75*nchannels)dec 
% 10 channels: 671h   % 12 channels: 707h 
% 24 channels: A8Bh   % 32 channels: CE3h 
% 64 channels: 1643h  % 128 channels: 2903h 

for n = 1:h.nchannels 
    fwrite(fid,e(n).lab,'char'); 
    fwrite(fid,e(n).reference,'char'); 
    fwrite(fid,e(n).skip,'char'); 
    fwrite(fid,e(n).reject,'char'); 
    fwrite(fid,e(n).display,'char'); 
    fwrite(fid,e(n).bad,'char'); 
    fwrite(fid,e(n).n,'ushort'); 
    fwrite(fid,e(n).avg_reference,'char'); 
    fwrite(fid,e(n).clipadd,'char'); 
    fwrite(fid,e(n).x_coord,'float'); 
    fwrite(fid,e(n).y_coord,'float'); 
    fwrite(fid,e(n).veog_wt,'float'); 
    fwrite(fid,e(n).veog_std,'float'); 
    fwrite(fid,e(n).snr,'float'); 
    fwrite(fid,e(n).heog_wt,'float'); 
    fwrite(fid,e(n).heog_std,'float'); 
    fwrite(fid,e(n).baseline,'short'); 
    fwrite(fid,e(n).filtered,'char'); 
    fwrite(fid,e(n).fsp,'char'); 
    fwrite(fid,e(n).aux1_wt,'float'); 
    fwrite(fid,e(n).aux1_std,'float'); 
    fwrite(fid,e(n).senstivity,'float'); 
    fwrite(fid,e(n).gain,'char'); 
    fwrite(fid,e(n).hipass,'char'); 
    fwrite(fid,e(n).lopass,'char'); 
    fwrite(fid,e(n).page,'uchar'); 
    fwrite(fid,e(n).size,'uchar'); 
    fwrite(fid,e(n).impedance,'uchar'); 
    fwrite(fid,e(n).physicalchnl,'uchar'); 
    fwrite(fid,e(n).rectify,'char'); 
    fwrite(fid,e(n).calib,'float'); 
end 

% finding if 32-bits of 16-bits file 
% ---------------------------------- 
begdata = ftell(fid); 
enddata = h.eventtablepos;   % after data 
if strcmpi(WriteOptions.dataformat, 'int16') 
     nums    = (enddata-begdata)/h.nchannels/2; 
else nums    = (enddata-begdata)/h.nchannels/4; 
end; 

% number of sample to write 
% ------------------------- 
if ~isempty(WriteOptions.sample1) 
   WriteOptions.t1      = WriteOptions.sample1/h.rate; 
else 
   WriteOptions.sample1 = WriteOptions.t1*h.rate; 
end; 
if strcmpi(WriteOptions.dataformat, 'int16') 
     startpos = WriteOptions.t1*h.rate*2*h.nchannels; 
else startpos = WriteOptions.t1*h.rate*4*h.nchannels; 
end; 
if isempty(WriteOptions.ldnsamples) 
     if ~isempty(WriteOptions.lddur) 
          WriteOptions.ldnsamples = round(WriteOptions.lddur*h.rate); 
     else WriteOptions.ldnsamples = nums; 
     end; 
end; 

% scaling data from microvolts 
% ---------------------------- 
if strcmpi(WriteOptions.scale, 'on') 
    disp('Scaling data .....') 
    for i=1:h.nchannels 
       bas=e(i).baseline; 
       sen=e(i).senstivity; 
       cal=e(i).calib; 
       mf=sen*(cal/204.8); 
       dat(i,:)=(dat(i,:)/mf)+bas; 
   end 
end 

 

% write data 
% ---------- 
disp('Writing data .....') 
if type == 'cnt' 
    channel_off = h.channeloffset/2; 
  
      fseek(fid, startpos, 0); 
          if channel_off <= 1 
          for temploop =1:WriteOptions.ldnsamples; 
              fwrite(fid, dat(1:h.nchannels, temploop),
WriteOptions.dataformat)'; 
          end; 
          else 
          for temploop =1:h.nchannels; 
              fwrite(fid, dat(temploop, 1:channel_off),
WriteOptions.dataformat)'; 
          end; 
          
                  counter = 1;  
                  while counter*channel_off < WriteOptions.ldnsamples 

              for temploop =1:h.nchannels; 
                fwrite(fid, dat(temploop,
counter*channel_off+1:counter*channel_off+channel_off),
WriteOptions.dataformat)';

              end; 
              counter = counter + 1; 
                  end; 
          end;  
      
      % write event table 
      % ----------------- 
      frewind(fid); 
      fseek(fid,h.eventtablepos,'bof'); 

      disp('Writing Event Table...') 
      fwrite(fid,eT.teeg,'uchar'); 
      fwrite(fid,eT.size,'ulong'); 
      fwrite(fid,eT.offset,'ulong'); 

      if eT.teeg==2 
          nevents=eT.size/sizeEvent2; 
      elseif eT.teeg==1 
          nevents=eT.size/sizeEvent1; 
      else 
          disp('No !!! teeg <> 2 and teeg <> 1'); 
          ev2 = []; 
      end     
  
     %%%% to change offset in points back to bytes 
     if ~isempty(ev2) 
          ev2p=ev2; 
          ioff=900+(h.nchannels*75); %% initial offset : header +
electordes desc 
          for i=1:nevents 
              ev2p(i).offset=((ev2p(i).offset +
WriteOptions.sample1)*2*h.nchannels) +ioff; %% 2 short int end 
          end     
          ev2 = ev2p; 
     end; 

     if eT.teeg==2 
          nevents=eT.size/sizeEvent2; 
          for i=1:nevents 
              ev2(i).stimtype      =
fwrite(fid,ev2(i).stimtype,'ushort'); 
              ev2(i).keyboard      = fwrite(fid,ev2(i).keyboard,'char');

              ev2(i).keypad_accept =
fwrite(fid,ev2(i).keypad_accept,'char'); 
              ev2(i).offset        = fwrite(fid,ev2(i).offset,'long'); 
              ev2(i).type          = fwrite(fid,ev2(i).type,'short'); 
              ev2(i).code          = fwrite(fid,ev2(i).code,'short'); 
              ev2(i).latency       = fwrite(fid,ev2(i).latency,'float');

              ev2(i).epochevent    =
fwrite(fid,ev2(i).epochevent,'char'); 
              ev2(i).accept        = fwrite(fid,ev2(i).accept,'char'); 
              ev2(i).accuracy      = fwrite(fid,ev2(i).accuracy,'char');

          end     
      elseif eT.teeg==1 
          nevents=eT.size/sizeEvent1; 
          for i=1:nevents 
              ev2(i).stimtype      =
fwrite(fid,ev2(i).stimtype,'ushort'); 
              ev2(i).keyboard      = fwrite(fid,ev2(i).keyboard,'char');

              ev2(i).keypad_accept =
fwrite(fid,ev2(i).keypad_accept,'char'); 
              ev2(i).offset        = fwrite(fid,ev2(i).offset,'long'); 
          end; 
      else 
          disp('No !!! teeg <> 2 and teeg <> 1'); 
          ev2 = []; 
      end     
end 

if size(endtag,1)>1 
    fwrite(fid,endtag); 
else 
    fwrite(fid,t,'char'); 
end 

fclose(fid); 
disp(['Finished writing file ' filename ' ...']) 





------------------------------------------------------------------------
------
Confidentiality Note: This message is intended for use only by the
individual or entity to which it is addressed and may contain
information that is privileged, confidential, and exempt from disclosure
under applicable law. If the reader of this message is not the intended
recipient or the employee or agent responsible for delivering the
message to the intended recipient, you are hereby notified that any
dissemination, distribution or copying of this communication is strictly
prohibited. If you have received this communication in error, please
contact the sender immediately and destroy the material in its entirety,
whether electronic or hard copy. Thank you.
------------
Visit us online at our award-winning www.clevelandclinic.org for a
complete listing of Cleveland Clinic services, staff and locations from
one of the country's leading hospitals.
========================================================================
======


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://sccn.ucsd.edu/pipermail/eeglablist/attachments/20050125/2fd51502/attachment-0001.htm


More information about the eeglablist mailing list