Table of Contents

Interface to the read_xxx functions

FieldTrip has a flexible way of supporting dataformats. It uses three wrapper functions that provide a common interface to all file formats: ft_read_header, ft_read_data and ft_read_event. There are also still the old read_fcdc_xxx functions, but these are merely wrappers around the new functions and are only supplied for backward compatibility support.

These ft_read_xxx functions detect the file format and subsequently will call the appropriate low-level function for each file format. Some of the low-level functions are written by ourselves, some are supplied by the manufacturers and some are obtained from other open source toolboxes.

The objective of supplying the low-level EEG and MEG reading functions as a seperate module/toolbox are to

  1. facilitate the reuse of the ft_read_xxx functions in other open-source projects (e.g. EEGLAB, SPM)
  2. facilitate the implementation and support for new data formats, esp. for external users/contributors
  3. facilitate the implementation of advanced features (e.g. real-time acquisition)

A list of the data formats that are supported is given here. The low-level reading functions are combined in the fileio toolbox, which is released together with FieldTrip but can also be downloaded here as separate toolbox.

Module layout

The fileio module contains high-level functions that are publicly available for the end-user. The functionality of the functions within this module depends on low-level functions for reading particular data formats from varying aquisition systems and are not available for the end-user and combined in a private directory.

Features

The following features are implemented in the fileio module



Other options that have been suggested, but that are not implemented yet are

Definition of the function-calls (API)

The API allows for reading header information, event information, and blocks of data. The API consists of two parts: a clearly defined function call, and a clearly defined output of that function call.

hdr    = ft_read_header(filename), this returns a structure with the header information
event  = ft_read_event(filename), this returns a structure with the event information, (i.e. the triggers) 
dat    = ft_read_data(filename, ...), this returns a 2-D or 3-D array with the data

The data-reading function has additional variable input arguments for selecting segments and channels.

The motivation for separating the reading into header/event/data is (among others) inspired by the CTF and by the BrainVision data formats. Based on the header, you want to decide how to approach reading the data, i.e. read everything for an average ERP, read an epoch for trial-based data, read a segment for continuous data. Based on the events (triggers and such), you want to decide which segments of data to read, i.e. read a pre/post-stimulus data segment around each trigger. These decisions are part of the FieldTrip/SPM/EEGLAB/enduser code.

Header format

In order to make the API transparent to the final application, the header structure by default only contains those elements that are common to all file types

Additional header information that is present for only specific file formats is stored in a substructure (“orig”). An example header for a CTF MEG dataset looks like this

hdr = 
           Fs: 600                 % sampling rate in Hz
       nChans: 218                 % number of channels, in this case 151 channel MEG with some additional EEG 
     nSamples: 6000                % number of samples per trial, in this case each trial is 10 seconds long
  nSamplesPre: 0                   % baseline period in each trial
      nTrials: 49                  % number of trials
        label: {218x1 cell}        % channel labels 
         grad: [1x1 struct]        % structure with details on the position and orientation of the MEG sensors 
         orig: [1x1 struct]        % the original CTF header structure

Event format

The event structure allows for various events, that can be coded as numbers (trigger values) or as strings (annotations and trial classifications). Events have a location in the file (sample number) and may have a duration. In the end-user application, it should be easy to search for events of a particular type. Selected events should be used to fetch the data of interest from the file.

An example event structure for a CTF MEG dataset looks like this

>> event
event = 
1x577 struct array with fields:
    type
    sample
    value
    offset
    duration

>> event(1)   
ans = 
        type: 'trial'
      sample: 1
       value: []
      offset: 0
    duration: 6000

>> event(2)
ans = 
        type: 'backpanel trigger'
      sample: 1451
       value: 4
      offset: []
    duration: []

In case of events with duration that define trials event.sample is the first sample of a trial and event.offset is the offset of the trigger with respect to the trial. An offset of 0 means that the first sample of the trial corresponds to the trigger. A positive offset indicates that the first sample is later than the trigger, a negative offset indicates that the trial begins before the trigger.

Data format

The data is returned as a Nchans X Nsamples matrix (for continuous data), or a Nchans X Nsamples X Ntrials matrix (for trial based data).

Example use of the read_xxx functions

The following piece of code will read each trial in an trial-based dataset that has a trigger with value “1”

hdr   = ft_read_header(filename);
event = ft_read_event(filename);
trig1 = find(cell2mat({event.value})==1);
for i=1:length(trig1)
  dat(i,:,:) = ft_read_data(filename, 'trial', trig1(i));
end

The following piece of code will read all trial with trigger value “1” all at once

hdr   = ft_read_header(filename);
event = ft_read_event(filename);
trig1 = find(cell2mat({event.value})==1);
dat   = ft_read_data(filename, 'trial', trig1);

The following piece of code will read the first 10 seconds data from a continuous file

hdr = ft_read_header(filename);
dat = ft_read_data(filename, 'begsample', 1, 'endsample', 10*hdr.fsample);

The following piece of code will read a one-second segment of data from a continuous dataset around the first trigger with value “4”

hdr   = ft_read_header(filename);
event = ft_read_event(filename);
sel   = [];
for i=1:length(event)
  % test each event, we are looking for a trigger with value 4
  if isequal(event(i).type, 'trigger') && isequal(event(i).value, 4)
    sel = [sel; i];
  end
end
sel       = sel(1);                             % select only the first trigger that was found
begsample = event(sel(1)).sample - 0.3*hdr.Fs;  % select 300ms before the sample of the trigger
endsample = event(sel(1)).sample + 0.7*hdr.Fs;  % select 700ms after the sample of the trigger
dat       = ft_read_data(filename, 'begsample', begsample, 'endsample', endsample);

Guidelines for adding support for other file formats

The ft_read_data, ft_read_header and ft_read_event functions strongly depend on the ft_filetype helper function. That function automatically determines the format of the file, for example by looking at the extension, by looking at the first few bytes of the file or any other caracteristic feature. So adding support for a new file format also requires that new fileformat to be added to the filetype function.

The filetype function is often called like this (e.g. in ft_read_data):

var = ft_filetype(filename)
if strcmp(var, something)
  % do something
elseif strcmp(var, something_else)
  % do something else
...

The reason for this is that ft_filetype does the checks in one long if-elseif-elseif ladder, which makes it relatively slow. Therefore it is called only once to speed up ft_read_data, and the type of the file is remembered in a variable. However, that does make it order sensitive: the first match in ft_filetype will be the one returned. So for common file extensions like “*.dat” it can be problematic. The solution for identical file extensions is to have the most stringent check first (e.g. “extension is *.dat and header contains a few magic bytes”) followed by the less stringent check (“extension is *.dat”).

Note furthermore that you can use context, i.e. the simultaneous presence of multiple files. That is used for example in BrainAnalyzer, which usually has a set of three files (an ascii *.vhdr, another ascii *.vmrk and one binary file with extension dat, eeg or seg). The *.dat file in then easy to recognize because it is always accompanied by the others.

Recent changes to the code

2010-07-22 07:03  jansch

	* private/read_ctf_mri.m, private/read_ctf_mri4.m: Disabled left-right flip by replacing if
	  true by if false. prior to this change, the volumes returned were left-right flipped,
	  leading to a left-handed coordinate system. As such this was incorrect

2010-07-20 07:32  roboos

	* ft_filetype.m: speed up the detection of Matlab files by looking at initial MATLAB string
	  in file
	  moved spmeeg_mat detection into subfunction

2010-07-19 02:21  josdie

	* ft_read_event.m: fixed typo in just submitted egi_sbin code. Oops.

2010-07-18 04:38  josdie

	* ft_read_event.m: egi_sbin (EGI simple binary format) only dubs an event a "trial" type if
	  its duration is the same as the segment.
	  Also, only adds "trial" type events based on segHdr if it doesn't already have a "trial"
	  type even for every segment.

2010-07-15 10:46  vlalit

	* private/fif2grad.m, private/mne2grad.m: Change the sign of planar gradient as it was
	  discovered by Laurence that the sign is wrong.

2010-07-14 09:55  roboos

	* private/read_vtk.m, private/write_vtk.m: moved from CVS repository to SVN repository

2010-07-13 18:35  vlalit

	* ft_read_event.m: Moved reading the header to individual cases as agreed with Robert

2010-07-13 14:02  vlalit

	* ft_read_event.m, private/read_spmeeg_event.m: Bug fixes

2010-07-12 20:11  roboos

	* ft_read_event.m: removed the creation of trial-events in case hdr.nTrials>1 for some
	  specific formats, and added it at the end of the code so that it is done for all formats
	  with multiple trials

2010-07-12 13:18  vlalit

	* ft_read_header.m: set nSamplesPre to 0 for continuous data converted with MNE toolbox (as
	  agreed with Laurence)

2010-07-10 09:12  roboos

	* private/tokenize.m: added persistent variable for caching input/output when repeated calls
	  have same input args

2010-07-09 11:16  jansch

	* ft_read_header.m: fixed bug in dealing with ctf balancing coefficients (introduced by me
	  earlier)

2010-07-09 06:59  jansch

	* ft_read_header.m: inserted workaround to avoid trying to read ctf balancing coefficients
	  if these are not present in the data. results in significant speed up

2010-07-07 15:25  stekla

	* private/buffer.mexa64, private/buffer.mexglx: Recompiled MEX file for 32- and 64-bit Linux
	  (Matlab75), added support for writing CTF_RES4 chunk.

2010-07-07 15:20  stekla

	* ft_read_header.m, ft_write_data.m, private/buffer.mexw32: Added writing of CTF_RES4 chunk
	  to FieldTrip buffer if present as hdr.ctf_res4 (uint8), added decoding of attached
	  CTF_RES4 chunk in ft_read_header, recompiled MEX file for Windows (MinGW).

2010-07-06 09:50  stekla

	* private/buffer.mexa64, private/buffer.mexglx, private/buffer.mexw32: Recompiled buffer MEX
	  file on Windows (MinGW) and Linux (32+64 bit, Matlab75) with added support for checking
	  closed connections.

2010-07-06 09:04  roboos

	* private/loadcnt.m, private/read_ctf_ascii.m, private/read_ctf_mri4.m: use explicit warning
	  state when switching warning off and ensure that it is reverted to the original state

2010-07-06 08:36  roboos

	* private/read_asa_elc.m: updated code to make compatible with more recent elc files
	  also read Positions2D from file, ensure that labels are column vector
	  see http://bugzilla.fcdonders.nl/show_bug.cgi?id=87

2010-07-05 06:59  roboos

	* private/write_brainvision_eeg.m: explicitely use \r\n for line endings in the *.vhdr ascii
	  header file

2010-07-01 15:54  roboos

	* ft_read_header.m: give channels a unique label in case that the dataset contains channels
	  with the same label (e.g. chan-1, chan-2)
	  otherwise ft_channelselection fails (because of a more stringent check)

2010-06-30 19:49  roboos

	* private: added headcoordinates (again) as file-external

2010-06-30 19:47  roboos

	* private/headcoordinates.m: deleted headcoordinates as real file

2010-06-30 19:42  roboos

	* private: deleted file-external for headcoordinates

2010-06-29 14:38  roboos

	* ft_read_event.m, ft_write_event.m: changed the reading and writing of events in the
	  m-files to reflect the updated mex files (thanks to Stefan)
	  the mex files now convert the structure to a serialized network-ready stream and write
	  them, previously the conversion was done in the m-file

2010-06-29 14:31  roboos

	* private/buffer.mexa64, private/buffer.mexglx, private/buffer.mexmaci,
	  private/buffer.mexw32: recompiled on windows (thanks to Stefan) and on OSX (with
	  matlab76/2008a on MacBook Pro)

2010-06-29 14:24  roboos

	* ft_read_event.m: only detect triggers from trigger channels in itab/chieti MEG data in
	  case the eventtable (from the *.mhd) is empty

2010-06-29 14:22  roboos

	* private/itab2grad.m: improved implementation of itab2grad, now not only works for
	  magnetometers, but also gradiometers (tested on the 28-channel Rome system)

2010-06-29 14:20  roboos

	* ft_chantype.m: added chieti/itab based on original header details
	  changed some whitespace (esp. for the yokogawa section)

2010-06-29 14:19  roboos

	* ft_read_headshape.m: only convert labels into column if labels are present
	  removed whitespace

2010-06-29 14:17  roboos

	* ft_filetype.m: added some chieti/itab formats

2010-06-22 15:09  roboos

	* ft_filetype.m, ft_read_data.m, ft_read_event.m, ft_read_header.m, private/itab2grad.m,
	  private/read_itab_mhd.m: added native matlab implementation for reading ITAB MEG data
	  (used to be win32 dll mex file)
	  added itab153 for planar computations and type detection
	  replaced chieti153 by itab153

2010-06-17 09:35  tilsan

	* private/yokogawa2grad.m: fixed bug in relation to magnetometers and grad structure:
	  magnetometer index has to be relative to overall grad
	  index.

2010-06-17 08:12  tilsan

	* private/yokogawa2grad.m: support added for reference channels in grad-structure

2010-06-16 16:03  roboos

	* private/filetype_check_extension.m, private/filetype_check_header.m,
	  private/filetype_check_uri.m: added persistent variable to speed up subsequent checks on
	  the same input arguments

2010-06-16 13:54  stekla

	* private/sap2matlab.m, private/sap2matlab.mexw32: Added sap2matlab.m for documentation and
	  auto-compilation of MEX-file.

2010-06-15 14:09  roboos

	* private/yokogawa2vol.m: moved yokogawa2vol from fieldtrip/private to fileio/private

2010-06-14 14:33  roboos

	* private/read_edf.m: added support for reading EGI files that ave been converted to EDF+
	  these files have an annotation channel as last one with a deviant sampling frequency
	  only channels with a consistent sampling frequency will be read by read_header and
	  read_data

2010-06-14 09:14  stekla

	* private/sap2matlab.mexw32: Recompiled sap2matlab MEX file on Windows (MinGW).

2010-06-14 09:11  stekla

	* private/decode_nifti1.m, private/encode_nifti1.m, private/sap2matlab.mexa64,
	  private/sap2matlab.mexglx: Added sap2matlab MEX files (compiled using Matlab R2007b on
	  mentat069/213) and NIFTI-1 encoding function.

2010-05-28 13:51  vlalit

	* ft_read_headshape.m, private/yokogawa2grad.m: Fixing some problems and simplifying the
	  Yokogawa code

2010-05-28 09:06  tilsan

	* ft_read_headshape.m: changed support for Yokogawa marker file reading

2010-05-26 13:01  tilsan

	* private/yokogawa2grad.m: added support for magnetometers

2010-05-22 21:11  vlalit

	* ft_read_event.m: One more fix to brainvision handling

2010-05-22 20:47  vlalit

	* ft_filetype.m: Fix of a problem created by the previous fix which did not distinguish
	  between brainvision_eeg and brainvision_dat (thanks to Marco Rotonda)

2010-05-20 12:13  roboos

	* private/read_zebris.m: added missing function

2010-05-20 08:51  tilsan

	* private/yokogawa2grad.m: major update to this function:
	  - checks for proper Yokogawa toolbox
	  - uses new indexing for gradiometer parameters due to new toolbox
	  - bug removed to account for discontinuous channels lists, important
	  if channels have been marked as bad in the recording software
	  - exports the correct labels for mixed axial/planar gradiometer systems
	  - transforms the gradiometers to headcoordinates if a marker file is
	  found

2010-05-20 08:46  tilsan

	* ft_read_headshape.m: reads fiducials from Yokogawa marker files and matching information,
	  if present

2010-05-20 08:38  tilsan

	* ft_read_header.m: recognizes Yokogawa marker file type

2010-05-20 08:37  tilsan

	* ft_filetype.m: recognizes Yokogawa marker file type

2010-05-20 08:36  tilsan

	* private/read_yokogawa_event.m: checks for proper Yokogawa toolbox

2010-05-20 08:35  tilsan

	* private/read_yokogawa_data.m: checks for proper Yokogawa toolbox, calculates ad_range from
	  AD bit
	  resolution

2010-05-20 08:33  tilsan

	* private/read_yokogawa_header.m: checks for proper Yokogawa toolbox, reads AD bit
	  resolution

2010-05-20 08:25  tilsan

	* private/headcoordinates.m: headcoordinates is needed by yokogawa2grad
	  Diese und die folgenden Zeilen werden ignoriert --
	  
	  A headcoordinates.m

2010-05-20 07:43  jansch

	* ft_read_mri.m: changed conditional statement to allow for correct handling of .mnc files

2010-05-19 15:55  roboos

	* ft_chantype.m: small change in help, nothing functional

2010-05-18 13:32  stekla

	* private/buffer.mexa64, private/buffer.mexglx: Compiled buffer MEX file (includes support
	  for automatic endian conversion) on Mentat069 + Mentat213 (32/64 bit Linux), using R2007b.

2010-05-18 13:27  stekla

	* private/buffer.mexw32: Recompiled buffer.mexw32, fixes for handling chunks + endian
	  conversion.

2010-05-17 20:23  roboos

	* ft_filetype.m, ft_read_data.m, ft_read_event.m, ft_read_header.m: Added file type
	  detection for gdf, if biosig is supported it will be used for reading the header and data.
	  Reading events using biosig is not yet supported, because it is not clear yet how
	  sopen+sread represent the events in a file format independent manner.

2010-05-17 10:43  roboos

	* ft_read_data.m: fixed bug (again) in caching when the channel labels have changed (i.e.
	  when other data is being cached), thanks to Philip

2010-05-13 11:01  vlalit

	* ft_filetype.m, ft_read_event.m: This should complete the fix for recognizing of any of the
	  3 files in a brainvision dataset, in particular for reading events.

2010-05-13 10:50  vlalit

	* ft_read_header.m: Bug fix from Laurence Hunt

2010-05-12 16:19  marlal

	* private/read_ctf_mri.m, private/read_ctf_mri4.m: Fixed "one voxel off" bug when flipping
	  data along x. Use header image size instead of hardcoded 256. Flip along x (left-right) is
	  "isolated" and can easily be turned off while maintaining consistency between data,
	  transform matrix and fiducials, probably should be if no other code depends on it.
	  
	  In read_ctf_mri only: Added reading in latin1 encoding, some files need it (perhaps system
	  dependent). Now verifies clipping range (in header) and reads data as int16 instead of
	  uint16 if appropriate (think this is always the case for 16 bit data).

2010-05-12 15:26  marlal

	* ft_read_mri.m, private/read_ctf_svl.m: Added reading of CTF SAM image (.svl) files.

2010-05-09 11:32  roboos

	* ft_chantype.m, ft_read_headshape.m, ft_read_sens.m, private,
	  private/read_yokogawa_header.m, private/yokogawa2grad.m: added ft_ prefix to all externals
	  originating from fieldtrip/forward
	  changed some functions to reflect the new prefixed helper functions

2010-05-09 11:21  roboos

	* private/bti2grad.m, private/ctf2grad.m: updated some main and private functions to reflect
	  the name change of apply_montage to ft_apply_montage

2010-05-09 11:15  roboos

	* private: renamed apply_montage to ft_apply_montage, updated external in fileio/private

2010-05-07 12:00  stekla

	* private/buffer.mexa64, private/buffer.mexglx: Compile buffer MEX file (includes support
	  for some of the new 'chunks' and WAIT_DAT) on Mentat069 + Mentat213 (32/64 bit Linux),
	  using R2007b.

2010-05-07 10:54  stekla

	* ft_poll_buffer.m, private/buffer.mexw32: Added ft_poll_buffer for quickly getting sample
	  and event numbers, and optionally waiting for a given amount of milliseconds. Also
	  compiled buffer mex file accordingly (Windows / MinGW)

2010-05-07 07:22  roboos

	* private/read_ctf_mri.m: added some comments to clarify the 202 or 204 byte padding issue
	  explicitely read uint8 and typecast to char

2010-05-06 10:09  roboos

	* ft_filetype.m: use full filename (MarkerFile.mrk) for ctf_mrk to avoid confusion with
	  yokogawa

2010-05-04 15:51  stekla

	* private: Added external for fetch_data (in fileio/private), small fix in fMRI demo
	  clients.

2010-05-04 13:58  stekla

	* ft_write_data.m, private/buffer.mexw32: Added initial support for writing meta data to the
	  FieldTrip buffer from Matlab, updated rt_frmiproxy to reflect these changes.

2010-05-04 12:23  stekla

	* ft_read_header.m, private/buffer.mexw32, private/decode_nifti1.m,
	  private/sap2matlab.mexw32: Moved functions for decoding NIFTI-1 header and parsing Siemens
	  protocol data into fileio/private. Compiled updated buffer.mexw32 using MinGW. Modified
	  rt_fmriviewer to use the updated header structure.

2010-05-03 12:31  stekla

	* @uint64/abs.mexw64, @uint64/max.mexw64, @uint64/min.mexw64, @uint64/minus.mexw64,
	  @uint64/plus.mexw64, @uint64/rdivide.mexw64, @uint64/times.mexw64, ft_write_data.m,
	  private/mxDeserialize.mexw64, private/mxSerialize.mexw64, private/read_16bit.mexw64,
	  private/read_24bit.mexw64: Added .mexw64 files as provided by Guillaume Flandin, added
	  "blob" element to header in ft_write_data for the rt_fmriproxy -- this will be changed
	  again once properly formatted header information is contained in Fieldtrip buffer.

2010-04-29 23:41  marlal

	* ft_read_header.m, private/ctf2grad.m: Added reading of 'G3AR' adaptive balancing
	  coefficients. No warning from ft_read_header.m since these may not be commonly used.
	  getCTFBalanceCoefs.m notifies when they aren't found though.

2010-04-29 14:43  roboos

	* ft_read_event.m: documented the dataformat and headerformat options

2010-04-28 14:21  stekla

	* private/buffer.mexw32.pdb: Deleted debug information (.pdb) file for buffer. This is too
	  system-specific, and if people want to start debugging C code, they should be able to
	  compile the MEX file themselves anyway.

2010-04-28 14:14  stekla

	* private: Modified externals (convert... & estimate_units) again - this time include ft_
	  prefix.

2010-04-28 14:09  stekla

	* private: Modified externals (convert_units + estimate_units): now point at ../../forward,
	  where the original files have been moved to by Robert.

2010-04-28 12:18  roevdmei

	* private/read_neuralynx_ds.m: added ft_ prefix to filetype calls

2010-04-23 08:31  roboos

	* private/read_yokogawa_event.m: re-added the varargin argument and fixed a bug in the
	  naming of a variable

2010-04-23 03:23  josdie

	* private/read_sbin_data.m: Fixed begsample/endsample option for unsegmented files where the
	  precision is single or double.

2010-04-22 15:21  vlalit

	* private/read_trigger.m: Fixes for problems that popped up immediately after re-integrating
	  Fieldtrip and SPM8

2010-04-22 07:11  jansch

	* ft_read_mri.m: fixed bug for fiff-mri using mne toolbox reported by Jan Hirschmann (long
	  ago)

2010-04-21 17:41  roboos

	* private/ama2vol.m, private/appendevent.m, private/bigendian.m, private/bti2grad.m,
	  private/cstructdecode.m, private/ctf2grad.m, private/fif2grad.m,
	  private/filetype_check_extension.m, private/filetype_check_header.m,
	  private/filetype_check_uri.m, private/itab2grad.m, private/littleendian.m,
	  private/loadama.m, private/mne2grad.m, private/mxDeserialize.m, private/mxSerialize.m,
	  private/neuralynx_crc.m, private/neuralynx_getheader.m, private/neuralynx_numrecords.m,
	  private/neuralynx_timestamp.m, private/read_16bit.m, private/read_24bit.m,
	  private/read_4d_hdr.m, private/read_asa.m, private/read_asa_bnd.m, private/read_asa_dip.m,
	  private/read_asa_elc.m, private/read_asa_mri.m, private/read_asa_msr.m,
	  private/read_asa_vol.m, private/read_besa_avr.m, private/read_besa_mul.m,
	  private/read_besa_pdg.m, private/read_besa_src.m, private/read_besa_swf.m,
	  private/read_besa_tfc.m, private/read_bham.m, private/read_biff.m,
	  private/read_biosemi_bdf.m, private/read_biosig_data.m, private/read_biosig_header.m,
	  private/read_brainvision_eeg.m, private/read_brainvision_marker.m,
	  private/read_brainvision_pos.m, private/read_brainvision_vhdr.m,
	  private/read_brainvision_vmrk.m, private/read_bti_ascii.m, private/read_bti_hs.m,
	  private/read_bti_m4d.m, private/read_bv_srf.m, private/read_ced_son.m,
	  private/read_combined_ds.m, private/read_ctf_ascii.m, private/read_ctf_cls.m,
	  private/read_ctf_coef.m, private/read_ctf_dat.m, private/read_ctf_hc.m,
	  private/read_ctf_hdm.m, private/read_ctf_meg4.m, private/read_ctf_mri.m,
	  private/read_ctf_mri4.m, private/read_ctf_res4.m, private/read_ctf_sens.m,
	  private/read_ctf_shape.m, private/read_ctf_shm.m, private/read_ctf_trigger.m,
	  private/read_curry.m, private/read_edf.m, private/read_eeglabdata.m,
	  private/read_eeglabevent.m, private/read_eeglabheader.m, private/read_egis_data.m,
	  private/read_egis_header.m, private/read_elec.m, private/read_eyelink_asc.m,
	  private/read_fcdc_trl.m, private/read_labview_dtlg.m, private/read_lay.m,
	  private/read_mat.m, private/read_mpi_dap.m, private/read_mpi_ds.m,
	  private/read_neuralynx_bin.m, private/read_neuralynx_cds.m, private/read_neuralynx_dma.m,
	  private/read_neuralynx_ds.m, private/read_neuralynx_ncs.m, private/read_neuralynx_nev.m,
	  private/read_neuralynx_nse.m, private/read_neuralynx_nst.m, private/read_neuralynx_nts.m,
	  private/read_neuralynx_ntt.m, private/read_neuralynx_sdma.m, private/read_neuralynx_tsh.m,
	  private/read_neuralynx_tsl.m, private/read_neuralynx_ttl.m, private/read_neuroshare.m,
	  private/read_nex_data.m, private/read_nex_event.m, private/read_nex_header.m,
	  private/read_nexstim_event.m, private/read_nexstim_nxe.m, private/read_nimh_cortex.m,
	  private/read_nmc_archive_k_data.m, private/read_nmc_archive_k_event.m,
	  private/read_nmc_archive_k_hdr.m, private/read_ns_avg.m, private/read_ns_eeg.m,
	  private/read_ns_hdr.m, private/read_off.m, private/read_plexon_ddt.m,
	  private/read_plexon_ds.m, private/read_plexon_nex.m, private/read_plexon_plx.m,
	  private/read_polhemus_fil.m, private/read_sbin_data.m, private/read_sbin_events.m,
	  private/read_sbin_header.m, private/read_serial_event.m, private/read_shm_data.m,
	  private/read_shm_event.m, private/read_shm_header.m, private/read_spike6mat_data.m,
	  private/read_spmeeg_data.m, private/read_stl.m, private/read_tdt_tsq.m,
	  private/read_trigger.m, private/read_yokogawa_data.m, private/read_yokogawa_event.m,
	  private/read_yokogawa_header.m, private/timestamp_neuralynx.m, private/timestamp_plexon.m,
	  private/tokenize.m, private/warp_apply.m, private/write_brainvision_eeg.m,
	  private/write_ctf_shm.m, private/write_neuralynx_ncs.m, private/write_neuralynx_nts.m,
	  private/write_plexon_nex.m, private/write_serial_event.m, private/write_stl.m,
	  private/yokogawa2grad.m: added full GPL copyright statement and svn ID tag for
	  fileio/private functions
	  cleaned up comments and help in some functions
	  no functional change

2010-04-21 16:08  roboos

	* ft_create_buffer.m, ft_destroy_buffer.m, ft_filetype.m, ft_filter_event.m,
	  ft_flush_data.m, ft_flush_event.m, ft_flush_header.m, ft_read_data.m, ft_read_event.m,
	  ft_read_header.m, ft_read_headshape.m, ft_read_mri.m, ft_read_sens.m, ft_read_spike.m,
	  ft_read_vol.m, ft_write_data.m, ft_write_event.m: added full copyrights and svn ID tag

2010-04-21 16:01  roboos

	* ft_chantype.m: added full copyright statement and svn ID tag

2010-04-21 12:39  roboos

	* ft_read_event.m, ft_read_header.m, private/read_eyelink_asc.m, private/read_trigger.m:
	  some improvements for the eyelink_asc format

2010-04-20 11:32  roboos

	* ft_read_header.m: corrected the number of timestamps per sample for eyelink (should be 2
	  instead of 1)

2010-04-20 11:23  roboos

	* ft_read_event.m: fixed bug: make sure that header is present when reading eyelink input
	  events

2010-04-20 11:15  roboos

	* ft_filetype.m, ft_read_data.m, ft_read_event.m, ft_read_header.m,
	  private/read_eyelink_asc.m: added support for eyelink_asc, using caching in hdr.orig to
	  speed it up
	  some changes in whitespace in other sections of the code

2010-04-19 15:05  jansch

	* ft_read_data.m, ft_write_data.m: added support for fcdc_matbin with the data
	  representation being single precision. the header contains a field cfg.precision

2010-04-16 13:28  timeng

	* ft_read_headshape.m, ft_read_sens.m: ft_ prefix adapted in code. In particular inverse and
	  fileio modules are now independentof compat

2010-04-16 08:20  timeng

	* ft_write_data.m: ft_ prefixes adapted in code for functionality without compat.

2010-04-14 15:28  stekla

	* private/buffer.mexw32: Recompiled buffer.mexw32 using MinGW compiler instead of Visual
	  Studio due to problems with dependencies on too recent runtimes (MSVCRT90).

2010-04-14 15:24  vlalit

	* ft_read_vol.m: Changes to enable re-integration of Fieldtrip and SPM8. Mostly changes in
	  prefixes that have not been done before.

2010-04-09 13:47  timeng

	* ft_write_event.m: ft prefix added to help sections and in the codes only for functions
	  called within the preproc and forward module. Compat now still necessary called from main
	  FieldTrip functions

2010-04-08 15:44  timeng

	* ft_chantype.m, ft_create_buffer.m, ft_destroy_buffer.m, ft_filetype.m, ft_filter_event.m,
	  ft_flush_data.m, ft_flush_event.m, ft_flush_header.m, ft_read_data.m, ft_read_event.m,
	  ft_read_header.m, ft_read_headshape.m, ft_read_mri.m, ft_read_sens.m, ft_read_spike.m,
	  ft_read_vol.m, ft_write_data.m, ft_write_event.m: ft prefix added to help sections and in
	  the codes only for functions called within the fileio module.

2010-04-08 11:50  roboos

	* @uint64: moved uint64 object into fileio directory

2010-04-08 11:44  roboos

	* @uint64: removed symbolic link

Related documentation


Related projects on electrophysiology (EEG, MEG) data I/O are


Lists of EEG and MEG file formats can be found here: