diff --git a/matlab/fiff_define_constants.m b/matlab/fiff_define_constants.m index 0dd5e80..0a5bb5d 100644 --- a/matlab/fiff_define_constants.m +++ b/matlab/fiff_define_constants.m @@ -1,9 +1,16 @@ function [FIFF, FWD] = fiff_define_constants() % Authors: Alexandre Gramfort -% Matti Hamalainen +% Matti Hämäläinen % -% License: BSD (3-clause) +% License: BSD-3-Clause +% Copyright the MNE-Python contributors. +% +% FIFF version number in use +% +FIFF.FIFFC_MAJOR_VERSION = 1; +FIFF.FIFFC_MINOR_VERSION = 4; +FIFF.FIFFC_VERSION = FIFF.FIFFC_MAJOR_VERSION < 16 | FIFF.FIFFC_MINOR_VERSION; % % Blocks % @@ -16,12 +23,12 @@ FIFF.FIFFB_ASPECT = 105; FIFF.FIFFB_SUBJECT = 106; FIFF.FIFFB_ISOTRAK = 107; -FIFF.FIFFB_HPI_MEAS = 108; % HPI measurement -FIFF.FIFFB_HPI_RESULT = 109; % Result of a HPI fitting procedure -FIFF.FIFFB_HPI_COIL = 110; % Data acquired from one HPI coil +FIFF.FIFFB_HPI_MEAS = 108; % HPI measurement +FIFF.FIFFB_HPI_RESULT = 109; % Result of a HPI fitting procedure +FIFF.FIFFB_HPI_COIL = 110; % Data acquired from one HPI coil FIFF.FIFFB_PROJECT = 111; FIFF.FIFFB_CONTINUOUS_DATA = 112; -FIFF.FIFFB_CH_INFO = 113; +FIFF.FIFFB_CH_INFO = 113; % Extra channel information FIFF.FIFFB_VOID = 114; FIFF.FIFFB_EVENTS = 115; FIFF.FIFFB_INDEX = 116; @@ -30,25 +37,25 @@ FIFF.FIFFB_IAS_RAW_DATA = 119; FIFF.FIFFB_IAS_ASPECT = 120; FIFF.FIFFB_HPI_SUBSYSTEM = 121; -% FIFF.FIFFB_PHANTOM_SUBSYSTEM = 122; -% FIFF.FIFFB_STATUS_SUBSYSTEM = 123; +% FIFF.FIFFB_PHANTOM_SUBSYSTEM = 122 +% FIFF.FIFFB_STATUS_SUBSYSTEM = 123 FIFF.FIFFB_DEVICE = 124; FIFF.FIFFB_HELIUM = 125; FIFF.FIFFB_CHANNEL_INFO = 126; -FIFF.FIFFB_SPHERE = 300; % Concentric sphere model related -FIFF.FIFFB_BEM = 310; % Boundary-element method -FIFF.FIFFB_BEM_SURF = 311; % Boundary-element method surfaces -FIFF.FIFFB_CONDUCTOR_MODEL = 312; % One conductor model definition +FIFF.FIFFB_SPHERE = 300; % Concentric sphere model related +FIFF.FIFFB_BEM = 310; % Boundary-element method +FIFF.FIFFB_BEM_SURF = 311; % Boundary-element method surfaces +FIFF.FIFFB_CONDUCTOR_MODEL = 312; % One conductor model definition FIFF.FIFFB_PROJ = 313; FIFF.FIFFB_PROJ_ITEM = 314; FIFF.FIFFB_MRI = 200; FIFF.FIFFB_MRI_SET = 201; FIFF.FIFFB_MRI_SLICE = 202; -FIFF.FIFFB_MRI_SCENERY = 203; % These are for writing unrelated 'slices' -FIFF.FIFFB_MRI_SCENE = 204; % Which are actually 3D scenes... -FIFF.FIFFB_MRI_SEG = 205; % MRI segmentation data -FIFF.FIFFB_MRI_SEG_REGION = 206; % One MRI segmentation region +FIFF.FIFFB_MRI_SCENERY = 203; % These are for writing unrelated 'slices' +FIFF.FIFFB_MRI_SCENE = 204; % Which are actually 3D scenes... +FIFF.FIFFB_MRI_SEG = 205; % MRI segmentation data +FIFF.FIFFB_MRI_SEG_REGION = 206; % One MRI segmentation region FIFF.FIFFB_PROCESSING_HISTORY = 900; FIFF.FIFFB_PROCESSING_RECORD = 901; @@ -62,273 +69,276 @@ % % Of general interest % -FIFF.FIFF_FILE_ID = 100; -FIFF.FIFF_DIR_POINTER = 101; -FIFF.FIFF_BLOCK_ID = 103; -FIFF.FIFF_BLOCK_START = 104; -FIFF.FIFF_BLOCK_END = 105; -FIFF.FIFF_FREE_LIST = 106; -FIFF.FIFF_FREE_BLOCK = 107; -FIFF.FIFF_NOP = 108; -FIFF.FIFF_PARENT_FILE_ID = 109; -FIFF.FIFF_PARENT_BLOCK_ID = 110; -FIFF.FIFF_BLOCK_NAME = 111; -FIFF.FIFF_BLOCK_VERSION = 112; -FIFF.FIFF_CREATOR = 113; % Program that created the file (string) -FIFF.FIFF_MODIFIER = 114; % Program that modified the file (string) -FIFF.FIFF_REF_ROLE = 115; -FIFF.FIFF_REF_FILE_ID = 116; -FIFF.FIFF_REF_FILE_NUM = 117; -FIFF.FIFF_REF_FILE_NAME = 118; +FIFF.FIFF_FILE_ID = 100; +FIFF.FIFF_DIR_POINTER = 101; +FIFF.FIFF_BLOCK_ID = 103; +FIFF.FIFF_BLOCK_START = 104; +FIFF.FIFF_BLOCK_END = 105; +FIFF.FIFF_FREE_LIST = 106; +FIFF.FIFF_FREE_BLOCK = 107; +FIFF.FIFF_NOP = 108; +FIFF.FIFF_PARENT_FILE_ID = 109; +FIFF.FIFF_PARENT_BLOCK_ID = 110; +FIFF.FIFF_BLOCK_NAME = 111; +FIFF.FIFF_BLOCK_VERSION = 112; +FIFF.FIFF_CREATOR = 113; % Program that created the file (string) +FIFF.FIFF_MODIFIER = 114; % Program that modified the file (string) +FIFF.FIFF_REF_ROLE = 115; +FIFF.FIFF_REF_FILE_ID = 116; +FIFF.FIFF_REF_FILE_NUM = 117; +FIFF.FIFF_REF_FILE_NAME = 118; % % Megacq saves the parameters in these tags % -FIFF.FIFF_DACQ_PARS = 150; -FIFF.FIFF_DACQ_STIM = 151; - -FIFF.FIFF_DEVICE_TYPE = 152; -FIFF.FIFF_DEVICE_MODEL = 153; -FIFF.FIFF_DEVICE_SERIAL = 154; -FIFF.FIFF_DEVICE_SITE = 155; - -FIFF.FIFF_HE_LEVEL_RAW = 156; -FIFF.FIFF_HELIUM_LEVEL = 157; -FIFF.FIFF_ORIG_FILE_GUID = 158; -FIFF.FIFF_UTC_OFFSET = 159; - -FIFF.FIFF_NCHAN = 200; -FIFF.FIFF_SFREQ = 201; -FIFF.FIFF_DATA_PACK = 202; -FIFF.FIFF_CH_INFO = 203; -FIFF.FIFF_MEAS_DATE = 204; -FIFF.FIFF_SUBJECT = 205; -FIFF.FIFF_COMMENT = 206; -FIFF.FIFF_NAVE = 207; -FIFF.FIFF_FIRST_SAMPLE = 208; % The first sample of an epoch -FIFF.FIFF_LAST_SAMPLE = 209; % The last sample of an epoch -FIFF.FIFF_ASPECT_KIND = 210; -FIFF.FIFF_REF_EVENT = 211; -FIFF.FIFF_EXPERIMENTER = 212; -FIFF.FIFF_DIG_POINT = 213; -FIFF.FIFF_CH_POS = 214; -FIFF.FIFF_HPI_SLOPES = 215; % HPI data -FIFF.FIFF_HPI_NCOIL = 216; -FIFF.FIFF_REQ_EVENT = 217; -FIFF.FIFF_REQ_LIMIT = 218; -FIFF.FIFF_LOWPASS = 219; -FIFF.FIFF_BAD_CHS = 220; -FIFF.FIFF_ARTEF_REMOVAL = 221; -FIFF.FIFF_COORD_TRANS = 222; -FIFF.FIFF_HIGHPASS = 223; -FIFF.FIFF_CH_CALS = 224; % This will not occur in new files -FIFF.FIFF_HPI_BAD_CHS = 225; % List of channels considered to be bad in hpi -FIFF.FIFF_HPI_CORR_COEFF = 226; % HPI curve fit correlations -FIFF.FIFF_EVENT_COMMENT = 227; % Comment about the events used in averaging -FIFF.FIFF_NO_SAMPLES = 228; % Number of samples in an epoch -FIFF.FIFF_FIRST_TIME = 229; % Time scale minimum - -FIFF.FIFF_SUBAVE_SIZE = 230; % Size of a subaverage -FIFF.FIFF_SUBAVE_FIRST = 231; % The first epoch % contained in the subaverage -FIFF.FIFF_NAME = 233; % Intended to be a short name. -FIFF.FIFF_DESCRIPTION = FIFF.FIFF_COMMENT; % (Textual) Description of an object -FIFF.FIFF_DIG_STRING = 234; % String of digitized points -FIFF.FIFF_LINE_FREQ = 235; % Line frequency -FIFF.FIFF_GANTRY_ANGLE = 282; % Tilt angle of the gantry in degrees. - +FIFF.FIFF_DACQ_PARS = 150; +FIFF.FIFF_DACQ_STIM = 151; + +FIFF.FIFF_DEVICE_TYPE = 152; +FIFF.FIFF_DEVICE_MODEL = 153; +FIFF.FIFF_DEVICE_SERIAL = 154; +FIFF.FIFF_DEVICE_SITE = 155; + +FIFF.FIFF_HE_LEVEL_RAW = 156; +FIFF.FIFF_HELIUM_LEVEL = 157; +FIFF.FIFF_ORIG_FILE_GUID = 158; +FIFF.FIFF_UTC_OFFSET = 159; + +FIFF.FIFF_NCHAN = 200; +FIFF.FIFF_SFREQ = 201; +FIFF.FIFF_DATA_PACK = 202; +FIFF.FIFF_CH_INFO = 203; +FIFF.FIFF_MEAS_DATE = 204; +FIFF.FIFF_SUBJECT = 205; +FIFF.FIFF_COMMENT = 206; +FIFF.FIFF_NAVE = 207; +FIFF.FIFF_FIRST_SAMPLE = 208; % The first sample of an epoch +FIFF.FIFF_LAST_SAMPLE = 209; % The last sample of an epoch +FIFF.FIFF_ASPECT_KIND = 210; +FIFF.FIFF_REF_EVENT = 211; +FIFF.FIFF_EXPERIMENTER = 212; +FIFF.FIFF_DIG_POINT = 213; +FIFF.FIFF_CH_POS = 214; +FIFF.FIFF_HPI_SLOPES = 215; % HPI data +FIFF.FIFF_HPI_NCOIL = 216; +FIFF.FIFF_REQ_EVENT = 217; +FIFF.FIFF_REQ_LIMIT = 218; +FIFF.FIFF_LOWPASS = 219; +FIFF.FIFF_BAD_CHS = 220; +FIFF.FIFF_ARTEF_REMOVAL = 221; +FIFF.FIFF_COORD_TRANS = 222; +FIFF.FIFF_HIGHPASS = 223; +FIFF.FIFF_CH_CALS = 224; % This will not occur in new files +FIFF.FIFF_HPI_BAD_CHS = 225; % List of channels considered to be bad in hpi +FIFF.FIFF_HPI_CORR_COEFF = 226; % HPI curve fit correlations +FIFF.FIFF_EVENT_COMMENT = 227; % Comment about the events used in averaging +FIFF.FIFF_NO_SAMPLES = 228; % Number of samples in an epoch +FIFF.FIFF_FIRST_TIME = 229; % Time scale minimum + +FIFF.FIFF_SUBAVE_SIZE = 230; % Size of a subaverage +FIFF.FIFF_SUBAVE_FIRST = 231; % The first epoch % contained in the subaverage +FIFF.FIFF_NAME = 233; % Intended to be a short name. +FIFF.FIFF_DESCRIPTION = FIFF.FIFF_COMMENT; % (Textual) Description of an object +FIFF.FIFF_DIG_STRING = 234; % String of digitized points +FIFF.FIFF_LINE_FREQ = 235; % Line frequency +FIFF.FIFF_GANTRY_ANGLE = 282; % Tilt angle of the gantry in degrees. % % HPI fitting program tags % -FIFF.FIFF_HPI_COIL_FREQ = 236; % HPI coil excitation frequency -FIFF.FIFF_HPI_COIL_MOMENTS = 240; % Estimated moment vectors for the HPI coil magnetic dipoles -FIFF.FIFF_HPI_FIT_GOODNESS = 241; % Three floats indicating the goodness of fit -FIFF.FIFF_HPI_FIT_ACCEPT = 242; % Bitmask indicating acceptance (see below) -FIFF.FIFF_HPI_FIT_GOOD_LIMIT = 243; % Limit for the goodness-of-fit -FIFF.FIFF_HPI_FIT_DIST_LIMIT = 244; % Limit for the coil distance difference -FIFF.FIFF_HPI_COIL_NO = 245; % Coil number listed by HPI measurement -FIFF.FIFF_HPI_COILS_USED = 246; % List of coils finally used when the transformation was computed -FIFF.FIFF_HPI_DIGITIZATION_ORDER = 247; % Which Isotrak digitization point corresponds to each of the coils energized - +FIFF.FIFF_HPI_COIL_FREQ = 236; % HPI coil excitation frequency +FIFF.FIFF_HPI_COIL_MOMENTS = 240; % Estimated moment vectors for the HPI coil magnetic dipoles +FIFF.FIFF_HPI_FIT_GOODNESS = 241; % Three floats indicating the goodness of fit +FIFF.FIFF_HPI_FIT_ACCEPT = 242; % Bitmask indicating acceptance (see below) +FIFF.FIFF_HPI_FIT_GOOD_LIMIT = 243; % Limit for the goodness-of-fit +FIFF.FIFF_HPI_FIT_DIST_LIMIT = 244; % Limit for the coil distance difference +FIFF.FIFF_HPI_COIL_NO = 245; % Coil number listed by HPI measurement +FIFF.FIFF_HPI_COILS_USED = 246; % List of coils finally used when the transformation was computed +FIFF.FIFF_HPI_DIGITIZATION_ORDER = 247; % Which Isotrak digitization point corresponds to each of the coils energized % % Tags used for storing channel info % -FIFF.FIFF_CH_SCAN_NO = 250; % Channel scan number. Corresponds to fiffChInfoRec.scanNo field -FIFF.FIFF_CH_LOGICAL_NO = 251; % Channel logical number. Corresponds to fiffChInfoRec.logNo field -FIFF.FIFF_CH_KIND = 252; % Channel type. Corresponds to fiffChInfoRec.kind field" -FIFF.FIFF_CH_RANGE = 253; % Conversion from recorded number to (possibly virtual) voltage at the output" -FIFF.FIFF_CH_CAL = 254; % Calibration coefficient from output voltage to some real units -FIFF.FIFF_CH_LOC = 255; % Channel loc -FIFF.FIFF_CH_UNIT = 256; % Unit of the data -FIFF.FIFF_CH_UNIT_MUL = 257; % Unit multiplier exponent -FIFF.FIFF_CH_DACQ_NAME = 258; % Name of the channel in the data acquisition system. Corresponds to fiffChInfoRec.name. -FIFF.FIFF_CH_COIL_TYPE = 350; % Coil type in coil_def.dat -FIFF.FIFF_CH_COORD_FRAME = 351; % Coordinate frame (integer) - +FIFF.FIFF_CH_SCAN_NO = 250; % Channel scan number. Corresponds to fiffChInfoRec.scanNo field +FIFF.FIFF_CH_LOGICAL_NO = 251; % Channel logical number. Corresponds to fiffChInfoRec.logNo field +FIFF.FIFF_CH_KIND = 252; % Channel type. Corresponds to fiffChInfoRec.kind field" +FIFF.FIFF_CH_RANGE = 253; % Conversion from recorded number to (possibly virtual) voltage at the output" +FIFF.FIFF_CH_CAL = 254; % Calibration coefficient from output voltage to some real units +FIFF.FIFF_CH_LOC = 255; % Channel loc +FIFF.FIFF_CH_UNIT = 256; % Unit of the data +FIFF.FIFF_CH_UNIT_MUL = 257; % Unit multiplier exponent +FIFF.FIFF_CH_DACQ_NAME = 258; % Name of the channel in the data acquisition system. Corresponds to fiffChInfoRec.name. +FIFF.FIFF_CH_COIL_TYPE = 350; % Coil type in coil_def.dat +FIFF.FIFF_CH_COORD_FRAME = 351; % Coordinate frame (integer) % % Pointers % -FIFF.FIFFV_NEXT_SEQ = 0; -FIFF.FIFFV_NEXT_NONE = -1; +FIFF.FIFFV_NEXT_SEQ = 0; +FIFF.FIFFV_NEXT_NONE = -1; % % Channel types % -FIFF.FIFFV_BIO_CH = 102; -FIFF.FIFFV_MEG_CH = 1; -FIFF.FIFFV_REF_MEG_CH = 301; -FIFF.FIFFV_EEG_CH = 2; -FIFF.FIFFV_MCG_CH = 201; -FIFF.FIFFV_STIM_CH = 3; -FIFF.FIFFV_EOG_CH = 202; -FIFF.FIFFV_EMG_CH = 302; -FIFF.FIFFV_ECG_CH = 402; -FIFF.FIFFV_MISC_CH = 502; -FIFF.FIFFV_RESP_CH = 602; % Respiration monitoring -FIFF.FIFFV_SEEG_CH = 802; % stereotactic EEG -FIFF.FIFFV_SYST_CH = 900; % some system status information (on Triux systems only) -FIFF.FIFFV_ECOG_CH = 902; -FIFF.FIFFV_IAS_CH = 910; % Internal Active Shielding data (maybe on Triux only) -FIFF.FIFFV_EXCI_CH = 920; % flux excitation channel used to be a stimulus channel -FIFF.FIFFV_DIPOLE_WAVE = 1000; % Dipole time curve (xplotter/xfit) -FIFF.FIFFV_GOODNESS_FIT = 1001; % Goodness of fit (xplotter/xfit) -FIFF.FIFFV_FNIRS_CH = 1100; % Functional near-infrared spectroscopy +FIFF.FIFFV_BIO_CH = 102; +FIFF.FIFFV_MEG_CH = 1; +FIFF.FIFFV_REF_MEG_CH = 301; +FIFF.FIFFV_EEG_CH = 2; +FIFF.FIFFV_MCG_CH = 201; +FIFF.FIFFV_STIM_CH = 3; +FIFF.FIFFV_EOG_CH = 202; +FIFF.FIFFV_EMG_CH = 302; +FIFF.FIFFV_ECG_CH = 402; +FIFF.FIFFV_MISC_CH = 502; +FIFF.FIFFV_RESP_CH = 602; % Respiration monitoring +FIFF.FIFFV_SEEG_CH = 802; % Stereotactic EEG +FIFF.FIFFV_DBS_CH = 803; % Deep brain stimulation +FIFF.FIFFV_SYST_CH = 900; % Some system status information (on Triux systems only) +FIFF.FIFFV_ECOG_CH = 902; +FIFF.FIFFV_IAS_CH = 910; % Internal Active Shielding data (maybe on Triux only) +FIFF.FIFFV_EXCI_CH = 920; % Flux excitation channel used to be a stimulus channel +FIFF.FIFFV_DIPOLE_WAVE = 1000; % Dipole time curve (xplotter/xfit) +FIFF.FIFFV_GOODNESS_FIT = 1001; % Goodness of fit (xplotter/xfit) +FIFF.FIFFV_FNIRS_CH = 1100; % Functional near-infrared spectroscopy +FIFF.FIFFV_TEMPERATURE_CH = 1200; % Functional near-infrared spectroscopy +FIFF.FIFFV_GALVANIC_CH = 1300; % Galvanic skin response +FIFF.FIFFV_EYETRACK_CH = 1400; % Eye-tracking % % Quaternion channels for head position monitoring % -FIFF.FIFFV_QUAT_0 = 700; % Quaternion param q0 obsolete for unit quaternion -FIFF.FIFFV_QUAT_1 = 701; % Quaternion param q1 rotation -FIFF.FIFFV_QUAT_2 = 702; % Quaternion param q2 rotation -FIFF.FIFFV_QUAT_3 = 703; % Quaternion param q3 rotation -FIFF.FIFFV_QUAT_4 = 704; % Quaternion param q4 translation -FIFF.FIFFV_QUAT_5 = 705; % Quaternion param q5 translation -FIFF.FIFFV_QUAT_6 = 706; % Quaternion param q6 translation -FIFF.FIFFV_HPI_G = 707; % Goodness-of-fit in continuous hpi -FIFF.FIFFV_HPI_ERR = 708; % Estimation error in continuous hpi -FIFF.FIFFV_HPI_MOV = 709; % Estimated head movement speed in continuous hpi +FIFF.FIFFV_QUAT_0 = 700; % Quaternion param q0 obsolete for unit quaternion +FIFF.FIFFV_QUAT_1 = 701; % Quaternion param q1 rotation +FIFF.FIFFV_QUAT_2 = 702; % Quaternion param q2 rotation +FIFF.FIFFV_QUAT_3 = 703; % Quaternion param q3 rotation +FIFF.FIFFV_QUAT_4 = 704; % Quaternion param q4 translation +FIFF.FIFFV_QUAT_5 = 705; % Quaternion param q5 translation +FIFF.FIFFV_QUAT_6 = 706; % Quaternion param q6 translation +FIFF.FIFFV_HPI_G = 707; % Goodness-of-fit in continuous hpi +FIFF.FIFFV_HPI_ERR = 708; % Estimation error in continuous hpi +FIFF.FIFFV_HPI_MOV = 709; % Estimated head movement speed in continuous hpi % % Coordinate frames % -FIFF.FIFFV_COORD_UNKNOWN = 0; -FIFF.FIFFV_COORD_DEVICE = 1; -FIFF.FIFFV_COORD_ISOTRAK = 2; -FIFF.FIFFV_COORD_HPI = 3; -FIFF.FIFFV_COORD_HEAD = 4; -FIFF.FIFFV_COORD_MRI = 5; -FIFF.FIFFV_COORD_MRI_SLICE = 6; -FIFF.FIFFV_COORD_MRI_DISPLAY = 7; -FIFF.FIFFV_COORD_DICOM_DEVICE = 8; +FIFF.FIFFV_COORD_UNKNOWN = 0; +FIFF.FIFFV_COORD_DEVICE = 1; +FIFF.FIFFV_COORD_ISOTRAK = 2; +FIFF.FIFFV_COORD_HPI = 3; +FIFF.FIFFV_COORD_HEAD = 4; +FIFF.FIFFV_COORD_MRI = 5; +FIFF.FIFFV_COORD_MRI_SLICE = 6; +FIFF.FIFFV_COORD_MRI_DISPLAY = 7; +FIFF.FIFFV_COORD_DICOM_DEVICE = 8; FIFF.FIFFV_COORD_IMAGING_DEVICE = 9; + % % Needed for raw and evoked-response data % -FIFF.FIFF_DATA_BUFFER = 300; % Buffer containing measurement data -FIFF.FIFF_DATA_SKIP = 301; % Data skip in buffers -FIFF.FIFF_EPOCH = 302; % Buffer containing one epoch and channel -FIFF.FIFF_DATA_SKIP_SAMP = 303; % Data skip in samples +FIFF.FIFF_DATA_BUFFER = 300; % Buffer containing measurement data +FIFF.FIFF_DATA_SKIP = 301; % Data skip in buffers +FIFF.FIFF_EPOCH = 302; % Buffer containing one epoch and channel +FIFF.FIFF_DATA_SKIP_SAMP = 303; % Data skip in samples % % Info on subject % -FIFF.FIFF_SUBJ_ID = 400; % Subject ID -FIFF.FIFF_SUBJ_FIRST_NAME = 401; % First name of the subject -FIFF.FIFF_SUBJ_MIDDLE_NAME = 402; % Middle name of the subject -FIFF.FIFF_SUBJ_LAST_NAME = 403; % Last name of the subject -FIFF.FIFF_SUBJ_BIRTH_DAY = 404; % Birthday of the subject -FIFF.FIFF_SUBJ_SEX = 405; % Sex of the subject -FIFF.FIFF_SUBJ_HAND = 406; % Handedness of the subject -FIFF.FIFF_SUBJ_WEIGHT = 407; % Weight of the subject in kg -FIFF.FIFF_SUBJ_HEIGHT = 408; % Height of the subject in m -FIFF.FIFF_SUBJ_COMMENT = 409; % Comment about the subject -FIFF.FIFF_SUBJ_HIS_ID = 410; % ID used in the Hospital Information System - -FIFF.FIFFV_SUBJ_HAND_RIGHT = 1; % Righthanded -FIFF.FIFFV_SUBJ_HAND_LEFT = 2; % Lefthanded - -FIFF.FIFFV_SUBJ_SEX_UNKNOWN = 0; % Unknown gender -FIFF.FIFFV_SUBJ_SEX_MALE = 1; % Male -FIFF.FIFFV_SUBJ_SEX_FEMALE = 2; % Female - -FIFF.FIFF_PROJ_ID = 500; -FIFF.FIFF_PROJ_NAME = 501; -FIFF.FIFF_PROJ_AIM = 502; -FIFF.FIFF_PROJ_PERSONS = 503; -FIFF.FIFF_PROJ_COMMENT = 504; - -FIFF.FIFF_EVENT_CHANNELS = 600; % Event channel numbers -FIFF.FIFF_EVENT_LIST = 601; % List of events (integers: -FIFF.FIFF_EVENT_CHANNEL = 602; % Event channel -FIFF.FIFF_EVENT_BITS = 603; % Event bits array +FIFF.FIFF_SUBJ_ID = 400; % Subject ID +FIFF.FIFF_SUBJ_FIRST_NAME = 401; % First name of the subject +FIFF.FIFF_SUBJ_MIDDLE_NAME = 402; % Middle name of the subject +FIFF.FIFF_SUBJ_LAST_NAME = 403; % Last name of the subject +FIFF.FIFF_SUBJ_BIRTH_DAY = 404; % Birthday of the subject +FIFF.FIFF_SUBJ_SEX = 405; % Sex of the subject +FIFF.FIFF_SUBJ_HAND = 406; % Handedness of the subject +FIFF.FIFF_SUBJ_WEIGHT = 407; % Weight of the subject in kg +FIFF.FIFF_SUBJ_HEIGHT = 408; % Height of the subject in m +FIFF.FIFF_SUBJ_COMMENT = 409; % Comment about the subject +FIFF.FIFF_SUBJ_HIS_ID = 410; % ID used in the Hospital Information System + +FIFF.FIFFV_SUBJ_HAND_RIGHT = 1; % Righthanded +FIFF.FIFFV_SUBJ_HAND_LEFT = 2; % Lefthanded +FIFF.FIFFV_SUBJ_HAND_AMBI = 3; % Ambidextrous + +FIFF.FIFFV_SUBJ_SEX_UNKNOWN = 0; % Unknown gender +FIFF.FIFFV_SUBJ_SEX_MALE = 1; % Male +FIFF.FIFFV_SUBJ_SEX_FEMALE = 2; % Female + +FIFF.FIFF_PROJ_ID = 500; +FIFF.FIFF_PROJ_NAME = 501; +FIFF.FIFF_PROJ_AIM = 502; +FIFF.FIFF_PROJ_PERSONS = 503; +FIFF.FIFF_PROJ_COMMENT = 504; + +FIFF.FIFF_EVENT_CHANNELS = 600; % Event channel numbers +FIFF.FIFF_EVENT_LIST = 601; % List of events (integers: +FIFF.FIFF_EVENT_CHANNEL = 602; % Event channel +FIFF.FIFF_EVENT_BITS = 603; % Event bits array % % Tags used in saving SQUID characteristics etc. % -FIFF.FIFF_SQUID_BIAS = 701; -FIFF.FIFF_SQUID_OFFSET = 702; -FIFF.FIFF_SQUID_GATE = 703; +FIFF.FIFF_SQUID_BIAS = 701; +FIFF.FIFF_SQUID_OFFSET = 702; +FIFF.FIFF_SQUID_GATE = 703; % -% Aspect values used to save charactersitic curves of SQUIDs. (mjk) +% Aspect values used to save characteristic curves of SQUIDs. (mjk) % -FIFF.FIFFV_ASPECT_IFII_LOW = 1100; -FIFF.FIFFV_ASPECT_IFII_HIGH = 1101; -FIFF.FIFFV_ASPECT_GATE = 1102; +FIFF.FIFFV_ASPECT_IFII_LOW = 1100; +FIFF.FIFFV_ASPECT_IFII_HIGH = 1101; +FIFF.FIFFV_ASPECT_GATE = 1102; % % Values for file references % -FIFF.FIFFV_ROLE_PREV_FILE = 1; -FIFF.FIFFV_ROLE_NEXT_FILE = 2; +FIFF.FIFFV_ROLE_PREV_FILE = 1; +FIFF.FIFFV_ROLE_NEXT_FILE = 2; % % References % -FIFF.FIFF_REF_PATH = 1101; +FIFF.FIFF_REF_PATH = 1101; % % Different aspects of data % -FIFF.FIFFV_ASPECT_AVERAGE = 100; % Normal average of epochs -FIFF.FIFFV_ASPECT_STD_ERR = 101; % Std. error of mean -FIFF.FIFFV_ASPECT_SINGLE = 102; % Single epoch cut out from the continuous data -FIFF.FIFFV_ASPECT_SUBAVERAGE = 103; % Partial average (subaverage) -FIFF.FIFFV_ASPECT_ALTAVERAGE = 104; % Alternating subaverage -FIFF.FIFFV_ASPECT_SAMPLE = 105; % A sample cut out by graph -FIFF.FIFFV_ASPECT_POWER_DENSITY = 106; % Power density spectrum -FIFF.FIFFV_ASPECT_DIPOLE_WAVE = 200; % Dipole amplitude curve +FIFF.FIFFV_ASPECT_AVERAGE = 100; % Normal average of epochs +FIFF.FIFFV_ASPECT_STD_ERR = 101; % Std. error of mean +FIFF.FIFFV_ASPECT_SINGLE = 102; % Single epoch cut out from the continuous data +FIFF.FIFFV_ASPECT_SUBAVERAGE = 103; % Partial average (subaverage) +FIFF.FIFFV_ASPECT_ALTAVERAGE = 104; % Alternating subaverage +FIFF.FIFFV_ASPECT_SAMPLE = 105; % A sample cut out by graph +FIFF.FIFFV_ASPECT_POWER_DENSITY = 106; % Power density spectrum +FIFF.FIFFV_ASPECT_DIPOLE_WAVE = 200; % Dipole amplitude curve % % BEM surface IDs % -FIFF.FIFFV_BEM_SURF_ID_UNKNOWN = -1; -FIFF.FIFFV_BEM_SURF_ID_NOT_KNOWN = 0; -FIFF.FIFFV_BEM_SURF_ID_BRAIN = 1; -FIFF.FIFFV_BEM_SURF_ID_CSF = 2; -FIFF.FIFFV_BEM_SURF_ID_SKULL = 3; -FIFF.FIFFV_BEM_SURF_ID_HEAD = 4; +FIFF.FIFFV_BEM_SURF_ID_UNKNOWN = -1; +FIFF.FIFFV_BEM_SURF_ID_NOT_KNOWN = 0; +FIFF.FIFFV_BEM_SURF_ID_BRAIN = 1; +FIFF.FIFFV_BEM_SURF_ID_CSF = 2; +FIFF.FIFFV_BEM_SURF_ID_SKULL = 3; +FIFF.FIFFV_BEM_SURF_ID_HEAD = 4; -FIFF.FIFF_SPHERE_ORIGIN = 3001; -FIFF.FIFF_SPHERE_RADIUS = 3002; +FIFF.FIFF_SPHERE_ORIGIN = 3001; +FIFF.FIFF_SPHERE_RADIUS = 3002; -FIFF.FIFF_BEM_SURF_ID = 3101; % int surface number -FIFF.FIFF_BEM_SURF_NAME = 3102; % string surface name -FIFF.FIFF_BEM_SURF_NNODE = 3103; % int number of nodes on a surface -FIFF.FIFF_BEM_SURF_NTRI = 3104; % int number of triangles on a surface -FIFF.FIFF_BEM_SURF_NODES = 3105; % float surface nodes (nnode,3) -FIFF.FIFF_BEM_SURF_TRIANGLES = 3106; % int surface triangles (ntri,3) -FIFF.FIFF_BEM_SURF_NORMALS = 3107; % float surface node normal unit vectors +FIFF.FIFF_BEM_SURF_ID = 3101; % int surface number +FIFF.FIFF_BEM_SURF_NAME = 3102; % string surface name +FIFF.FIFF_BEM_SURF_NNODE = 3103; % int number of nodes on a surface +FIFF.FIFF_BEM_SURF_NTRI = 3104; % int number of triangles on a surface +FIFF.FIFF_BEM_SURF_NODES = 3105; % float surface nodes (nnode,3) +FIFF.FIFF_BEM_SURF_TRIANGLES = 3106; % int surface triangles (ntri,3) +FIFF.FIFF_BEM_SURF_NORMALS = 3107; % float surface node normal unit vectors -FIFF.FIFF_BEM_POT_SOLUTION = 3110; % float ** The solution matrix -FIFF.FIFF_BEM_APPROX = 3111; % int approximation method, see below -FIFF.FIFF_BEM_COORD_FRAME = 3112; % The coordinate frame of the model -FIFF.FIFF_BEM_SIGMA = 3113; % Conductivity of a compartment -FIFF.FIFFV_BEM_APPROX_CONST = 1; % The constant potential approach -FIFF.FIFFV_BEM_APPROX_LINEAR = 2; % The linear potential approach +FIFF.FIFF_BEM_POT_SOLUTION = 3110; % float ** The solution matrix +FIFF.FIFF_BEM_APPROX = 3111; % int approximation method, see below +FIFF.FIFF_BEM_COORD_FRAME = 3112; % The coordinate frame of the model +FIFF.FIFF_BEM_SIGMA = 3113; % Conductivity of a compartment +FIFF.FIFFV_BEM_APPROX_CONST = 1; % The constant potential approach +FIFF.FIFFV_BEM_APPROX_LINEAR = 2; % The linear potential approach % % More of those defined in MNE % -FIFF.FIFFV_MNE_SURF_UNKNOWN = -1; -FIFF.FIFFV_MNE_SURF_LEFT_HEMI = 101; -FIFF.FIFFV_MNE_SURF_RIGHT_HEMI = 102; -FIFF.FIFFV_MNE_SURF_MEG_HELMET = 201; % Use this irrespective of the system +FIFF.FIFFV_MNE_SURF_UNKNOWN = -1; +FIFF.FIFFV_MNE_SURF_LEFT_HEMI = 101; +FIFF.FIFFV_MNE_SURF_RIGHT_HEMI = 102; +FIFF.FIFFV_MNE_SURF_MEG_HELMET = 201; % Use this irrespective of the system % % These relate to the Isotrak data (enum(point)) % @@ -338,13 +348,15 @@ FIFF.FIFFV_POINT_ECG = FIFF.FIFFV_POINT_EEG; FIFF.FIFFV_POINT_EXTRA = 4; FIFF.FIFFV_POINT_HEAD = 5; % Point on the surface of the head + % % Cardinal point types (enum(cardinal_point)) % -FIFF.FIFFV_POINT_LPA = 1; +FIFF.FIFFV_POINT_LPA = 1; FIFF.FIFFV_POINT_NASION = 2; -FIFF.FIFFV_POINT_RPA = 3; -FIFF.FIFFV_POINT_INION = 4; +FIFF.FIFFV_POINT_RPA = 3; +FIFF.FIFFV_POINT_INION = 4; + % % SSP % @@ -355,27 +367,27 @@ FIFF.FIFF_PROJ_ITEM_DEFINITION = 3416; FIFF.FIFF_PROJ_ITEM_CH_NAME_LIST = 3417; % XPlotter -FIFF.FIFF_XPLOTTER_LAYOUT = 3501; % string - "Xplotter layout tag" +FIFF.FIFF_XPLOTTER_LAYOUT = 3501; % string - "Xplotter layout tag" % % MRIs % -FIFF.FIFF_MRI_SOURCE_PATH = FIFF.FIFF_REF_PATH; -FIFF.FIFF_MRI_SOURCE_FORMAT = 2002; -FIFF.FIFF_MRI_PIXEL_ENCODING = 2003; -FIFF.FIFF_MRI_PIXEL_DATA_OFFSET = 2004; -FIFF.FIFF_MRI_PIXEL_SCALE = 2005; -FIFF.FIFF_MRI_PIXEL_DATA = 2006; +FIFF.FIFF_MRI_SOURCE_PATH = FIFF.FIFF_REF_PATH; +FIFF.FIFF_MRI_SOURCE_FORMAT = 2002; +FIFF.FIFF_MRI_PIXEL_ENCODING = 2003; +FIFF.FIFF_MRI_PIXEL_DATA_OFFSET = 2004; +FIFF.FIFF_MRI_PIXEL_SCALE = 2005; +FIFF.FIFF_MRI_PIXEL_DATA = 2006; FIFF.FIFF_MRI_PIXEL_OVERLAY_ENCODING = 2007; FIFF.FIFF_MRI_PIXEL_OVERLAY_DATA = 2008; FIFF.FIFF_MRI_BOUNDING_BOX = 2009; -FIFF.FIFF_MRI_WIDTH = 2010; -FIFF.FIFF_MRI_WIDTH_M = 2011; -FIFF.FIFF_MRI_HEIGHT = 2012; -FIFF.FIFF_MRI_HEIGHT_M = 2013; -FIFF.FIFF_MRI_DEPTH = 2014; -FIFF.FIFF_MRI_DEPTH_M = 2015; -FIFF.FIFF_MRI_THICKNESS = 2016; -FIFF.FIFF_MRI_SCENE_AIM = 2017; +FIFF.FIFF_MRI_WIDTH = 2010; +FIFF.FIFF_MRI_WIDTH_M = 2011; +FIFF.FIFF_MRI_HEIGHT = 2012; +FIFF.FIFF_MRI_HEIGHT_M = 2013; +FIFF.FIFF_MRI_DEPTH = 2014; +FIFF.FIFF_MRI_DEPTH_M = 2015; +FIFF.FIFF_MRI_THICKNESS = 2016; +FIFF.FIFF_MRI_SCENE_AIM = 2017; FIFF.FIFF_MRI_ORIG_SOURCE_PATH = 2020; FIFF.FIFF_MRI_ORIG_SOURCE_FORMAT = 2021; FIFF.FIFF_MRI_ORIG_PIXEL_ENCODING = 2022; @@ -385,11 +397,11 @@ FIFF.FIFF_MRI_MRILAB_SETUP = 2100; FIFF.FIFF_MRI_SEG_REGION_ID = 2200; % -FIFF.FIFFV_MRI_PIXEL_UNKNOWN = 0; -FIFF.FIFFV_MRI_PIXEL_BYTE = 1; -FIFF.FIFFV_MRI_PIXEL_WORD = 2; -FIFF.FIFFV_MRI_PIXEL_SWAP_WORD = 3; -FIFF.FIFFV_MRI_PIXEL_FLOAT = 4; +FIFF.FIFFV_MRI_PIXEL_UNKNOWN = 0; +FIFF.FIFFV_MRI_PIXEL_BYTE = 1; +FIFF.FIFFV_MRI_PIXEL_WORD = 2; +FIFF.FIFFV_MRI_PIXEL_SWAP_WORD = 3; +FIFF.FIFFV_MRI_PIXEL_FLOAT = 4; FIFF.FIFFV_MRI_PIXEL_BYTE_INDEXED_COLOR = 5; FIFF.FIFFV_MRI_PIXEL_BYTE_RGB_COLOR = 6; FIFF.FIFFV_MRI_PIXEL_BYTE_RLE_RGB_COLOR = 7; @@ -397,97 +409,96 @@ % % These are the MNE fiff definitions (range 350-390 reserved for MNE) % -FIFF.FIFFB_MNE = 350; -FIFF.FIFFB_MNE_SOURCE_SPACE = 351; -FIFF.FIFFB_MNE_FORWARD_SOLUTION = 352; -FIFF.FIFFB_MNE_PARENT_MRI_FILE = 353; -FIFF.FIFFB_MNE_PARENT_MEAS_FILE = 354; -FIFF.FIFFB_MNE_COV = 355; -FIFF.FIFFB_MNE_INVERSE_SOLUTION = 356; -FIFF.FIFFB_MNE_NAMED_MATRIX = 357; -FIFF.FIFFB_MNE_ENV = 358; -FIFF.FIFFB_MNE_BAD_CHANNELS = 359; -FIFF.FIFFB_MNE_VERTEX_MAP = 360; -FIFF.FIFFB_MNE_EVENTS = 361; -FIFF.FIFFB_MNE_MORPH_MAP = 362; -FIFF.FIFFB_MNE_SURFACE_MAP = 363; -FIFF.FIFFB_MNE_SURFACE_MAP_GROUP = 364; +FIFF.FIFFB_MNE = 350; +FIFF.FIFFB_MNE_SOURCE_SPACE = 351; +FIFF.FIFFB_MNE_FORWARD_SOLUTION = 352; +FIFF.FIFFB_MNE_PARENT_MRI_FILE = 353; +FIFF.FIFFB_MNE_PARENT_MEAS_FILE = 354; +FIFF.FIFFB_MNE_COV = 355; +FIFF.FIFFB_MNE_INVERSE_SOLUTION = 356; +FIFF.FIFFB_MNE_NAMED_MATRIX = 357; +FIFF.FIFFB_MNE_ENV = 358; +FIFF.FIFFB_MNE_BAD_CHANNELS = 359; +FIFF.FIFFB_MNE_VERTEX_MAP = 360; +FIFF.FIFFB_MNE_EVENTS = 361; +FIFF.FIFFB_MNE_MORPH_MAP = 362; +FIFF.FIFFB_MNE_SURFACE_MAP = 363; +FIFF.FIFFB_MNE_SURFACE_MAP_GROUP = 364; % % CTF compensation data % -FIFF.FIFFB_MNE_CTF_COMP = 370; -FIFF.FIFFB_MNE_CTF_COMP_DATA = 371; -FIFF.FIFFB_MNE_DERIVATIONS = 372; +FIFF.FIFFB_MNE_CTF_COMP = 370; +FIFF.FIFFB_MNE_CTF_COMP_DATA = 371; +FIFF.FIFFB_MNE_DERIVATIONS = 372; -FIFF.FIFFB_MNE_EPOCHS = 373; -FIFF.FIFFB_MNE_ICA = 374; +FIFF.FIFFB_MNE_EPOCHS = 373; +FIFF.FIFFB_MNE_ICA = 374; % % Fiff tags associated with MNE computations (3500...) % % % 3500... Bookkeeping % -FIFF.FIFF_MNE_ROW_NAMES = 3502; -FIFF.FIFF_MNE_COL_NAMES = 3503; -FIFF.FIFF_MNE_NROW = 3504; -FIFF.FIFF_MNE_NCOL = 3505; -FIFF.FIFF_MNE_COORD_FRAME = 3506; % Coordinate frame employed. Defaults: +FIFF.FIFF_MNE_ROW_NAMES = 3502; +FIFF.FIFF_MNE_COL_NAMES = 3503; +FIFF.FIFF_MNE_NROW = 3504; +FIFF.FIFF_MNE_NCOL = 3505; +FIFF.FIFF_MNE_COORD_FRAME = 3506; % Coordinate frame employed. Defaults: % FIFFB_MNE_SOURCE_SPACE FIFFV_COORD_MRI % FIFFB_MNE_FORWARD_SOLUTION FIFFV_COORD_HEAD % FIFFB_MNE_INVERSE_SOLUTION FIFFV_COORD_HEAD -FIFF.FIFF_MNE_CH_NAME_LIST = 3507; -FIFF.FIFF_MNE_FILE_NAME = 3508; % This removes the collision with fiff_file.h (used to be 3501) +FIFF.FIFF_MNE_CH_NAME_LIST = 3507; +FIFF.FIFF_MNE_FILE_NAME = 3508; % This removes the collision with fiff_file.h (used to be 3501) % % 3510... 3590... Source space or surface % -FIFF.FIFF_MNE_SOURCE_SPACE_POINTS = 3510; % The vertices -FIFF.FIFF_MNE_SOURCE_SPACE_NORMALS = 3511; % The vertex normals -FIFF.FIFF_MNE_SOURCE_SPACE_NPOINTS = 3512; % How many vertices -FIFF.FIFF_MNE_SOURCE_SPACE_SELECTION = 3513; % Which are selected to the source space -FIFF.FIFF_MNE_SOURCE_SPACE_NUSE = 3514; % How many are in use -FIFF.FIFF_MNE_SOURCE_SPACE_NEAREST = 3515; % Nearest source space vertex for all vertices -FIFF.FIFF_MNE_SOURCE_SPACE_NEAREST_DIST = 3516; % Distance to the Nearest source space vertex for all vertices -FIFF.FIFF_MNE_SOURCE_SPACE_ID = 3517; % Identifier -FIFF.FIFF_MNE_SOURCE_SPACE_TYPE = 3518; % Surface or volume -FIFF.FIFF_MNE_SOURCE_SPACE_VERTICES = 3519; % List of vertices (zero based) - -FIFF.FIFF_MNE_SOURCE_SPACE_VOXEL_DIMS = 3596; % Voxel space dimensions in a volume source space -FIFF.FIFF_MNE_SOURCE_SPACE_INTERPOLATOR = 3597; % Matrix to interpolate a volume source space into a mri volume -FIFF.FIFF_MNE_SOURCE_SPACE_MRI_FILE = 3598; % MRI file used in the interpolation - -FIFF.FIFF_MNE_SOURCE_SPACE_NTRI = 3590; % Number of triangles -FIFF.FIFF_MNE_SOURCE_SPACE_TRIANGLES = 3591; % The triangulation -FIFF.FIFF_MNE_SOURCE_SPACE_NUSE_TRI = 3592; % Number of triangles corresponding to the number of vertices in use -FIFF.FIFF_MNE_SOURCE_SPACE_USE_TRIANGLES = 3593; % The triangulation of the used vertices in the source space -FIFF.FIFF_MNE_SOURCE_SPACE_NNEIGHBORS = 3594; % Number of neighbors for each source space point (used for volume source spaces) -FIFF.FIFF_MNE_SOURCE_SPACE_NEIGHBORS = 3595; % Neighbors for each source space point (used for volume source spaces) - -FIFF.FIFF_MNE_SOURCE_SPACE_DIST = 3599; % Distances between vertices in use (along the surface) -FIFF.FIFF_MNE_SOURCE_SPACE_DIST_LIMIT = 3600; % If distance is above this limit (in the volume) it has not been calculated - -FIFF.FIFF_MNE_SURFACE_MAP_DATA = 3610; % Surface map data -FIFF.FIFF_MNE_SURFACE_MAP_KIND = 3611; % Type of map +FIFF.FIFF_MNE_SOURCE_SPACE_POINTS = 3510; % The vertices +FIFF.FIFF_MNE_SOURCE_SPACE_NORMALS = 3511; % The vertex normals +FIFF.FIFF_MNE_SOURCE_SPACE_NPOINTS = 3512; % How many vertices +FIFF.FIFF_MNE_SOURCE_SPACE_SELECTION = 3513; % Which are selected to the source space +FIFF.FIFF_MNE_SOURCE_SPACE_NUSE = 3514; % How many are in use +FIFF.FIFF_MNE_SOURCE_SPACE_NEAREST = 3515; % Nearest source space vertex for all vertices +FIFF.FIFF_MNE_SOURCE_SPACE_NEAREST_DIST = 3516; % Distance to the Nearest source space vertex for all vertices +FIFF.FIFF_MNE_SOURCE_SPACE_ID = 3517; % Identifier +FIFF.FIFF_MNE_SOURCE_SPACE_TYPE = 3518; % Surface or volume +FIFF.FIFF_MNE_SOURCE_SPACE_VERTICES = 3519; % List of vertices (zero based) + +FIFF.FIFF_MNE_SOURCE_SPACE_VOXEL_DIMS = 3596; % Voxel space dimensions in a volume source space +FIFF.FIFF_MNE_SOURCE_SPACE_INTERPOLATOR = 3597; % Matrix to interpolate a volume source space into a mri volume +FIFF.FIFF_MNE_SOURCE_SPACE_MRI_FILE = 3598; % MRI file used in the interpolation + +FIFF.FIFF_MNE_SOURCE_SPACE_NTRI = 3590; % Number of triangles +FIFF.FIFF_MNE_SOURCE_SPACE_TRIANGLES = 3591; % The triangulation +FIFF.FIFF_MNE_SOURCE_SPACE_NUSE_TRI = 3592; % Number of triangles corresponding to the number of vertices in use +FIFF.FIFF_MNE_SOURCE_SPACE_USE_TRIANGLES = 3593;% The triangulation of the used vertices in the source space +FIFF.FIFF_MNE_SOURCE_SPACE_NNEIGHBORS = 3594; % Number of neighbors for each source space point (used for volume source spaces) +FIFF.FIFF_MNE_SOURCE_SPACE_NEIGHBORS = 3595; % Neighbors for each source space point (used for volume source spaces +FIFF.FIFF_MNE_SOURCE_SPACE_DIST = 3599; % Distances between vertices in use (along the surface) +FIFF.FIFF_MNE_SOURCE_SPACE_DIST_LIMIT = 3600; % If distance is above this limit (in the volume) it has not been calculate + +FIFF.FIFF_MNE_SURFACE_MAP_DATA = 3610; % Surface map data +FIFF.FIFF_MNE_SURFACE_MAP_KIND = 3611; % Type of map % % 3520... Forward solution % -FIFF.FIFF_MNE_FORWARD_SOLUTION = 3520; -FIFF.FIFF_MNE_SOURCE_ORIENTATION = 3521; % Fixed or free -FIFF.FIFF_MNE_INCLUDED_METHODS = 3522; -FIFF.FIFF_MNE_FORWARD_SOLUTION_GRAD = 3523; +FIFF.FIFF_MNE_FORWARD_SOLUTION = 3520; +FIFF.FIFF_MNE_SOURCE_ORIENTATION = 3521; % Fixed or free +FIFF.FIFF_MNE_INCLUDED_METHODS = 3522; +FIFF.FIFF_MNE_FORWARD_SOLUTION_GRAD = 3523; % % 3530... Covariance matrix % -FIFF.FIFF_MNE_COV_KIND = 3530; % What kind of a covariance matrix -FIFF.FIFF_MNE_COV_DIM = 3531; % Matrix dimension -FIFF.FIFF_MNE_COV = 3532; % Full matrix in packed representation (lower triangle) -FIFF.FIFF_MNE_COV_DIAG = 3533; % Diagonal matrix -FIFF.FIFF_MNE_COV_EIGENVALUES = 3534; % Eigenvalues and eigenvectors of the above -FIFF.FIFF_MNE_COV_EIGENVECTORS = 3535; -FIFF.FIFF_MNE_COV_NFREE = 3536; % Number of degrees of freedom -FIFF.FIFF_MNE_COV_METHOD = 3537; % The estimator used -FIFF.FIFF_MNE_COV_SCORE = 3538; % Negative log-likelihood +FIFF.FIFF_MNE_COV_KIND = 3530; % What kind of a covariance matrix +FIFF.FIFF_MNE_COV_DIM = 3531; % Matrix dimension +FIFF.FIFF_MNE_COV = 3532; % Full matrix in packed representation (lower triangle) +FIFF.FIFF_MNE_COV_DIAG = 3533; % Diagonal matrix +FIFF.FIFF_MNE_COV_EIGENVALUES = 3534; % Eigenvalues and eigenvectors of the above +FIFF.FIFF_MNE_COV_EIGENVECTORS = 3535; +FIFF.FIFF_MNE_COV_NFREE = 3536; % Number of degrees of freedom +FIFF.FIFF_MNE_COV_METHOD = 3537; % The estimator used +FIFF.FIFF_MNE_COV_SCORE = 3538; % Negative log-likelihood % % 3540... Inverse operator @@ -495,124 +506,124 @@ % We store the inverse operator as the eigenleads, eigenfields, % and weights % -FIFF.FIFF_MNE_INVERSE_LEADS = 3540; % The eigenleads -FIFF.FIFF_MNE_INVERSE_LEADS_WEIGHTED = 3546; % The eigenleads (already weighted with R^0.5) -FIFF.FIFF_MNE_INVERSE_FIELDS = 3541; % The eigenfields -FIFF.FIFF_MNE_INVERSE_SING = 3542; % The singular values -FIFF.FIFF_MNE_PRIORS_USED = 3543; % Which kind of priors have been used for the source covariance matrix -FIFF.FIFF_MNE_INVERSE_FULL = 3544; % Inverse operator as one matrix - % This matrix includes the whitening operator as well - % The regularization is applied -FIFF.FIFF_MNE_INVERSE_SOURCE_ORIENTATIONS = 3545; % Contains the orientation of one source per row - % The source orientations must be expressed in the coordinate system - % given by FIFF_MNE_COORD_FRAME -FIFF.FIFF_MNE_INVERSE_SOURCE_UNIT = 3547; % Are the sources given in Am or Am/m^2 ? +FIFF.FIFF_MNE_INVERSE_LEADS = 3540; % The eigenleads +FIFF.FIFF_MNE_INVERSE_LEADS_WEIGHTED = 3546; % The eigenleads (already weighted with R^0.5) +FIFF.FIFF_MNE_INVERSE_FIELDS = 3541; % The eigenfields +FIFF.FIFF_MNE_INVERSE_SING = 3542; % The singular values +FIFF.FIFF_MNE_PRIORS_USED = 3543; % Which kind of priors have been used for the source covariance matrix +FIFF.FIFF_MNE_INVERSE_FULL = 3544; % Inverse operator as one matrix +% This matrix includes the whitening operator as well +% The regularization is applied +FIFF.FIFF_MNE_INVERSE_SOURCE_ORIENTATIONS = 3545; % Contains the orientation of one source per row +% The source orientations must be expressed in the coordinate system +% given by FIFF_MNE_COORD_FRAME +FIFF.FIFF_MNE_INVERSE_SOURCE_UNIT = 3547; % Are the sources given in Am or Am/m^2 ? % % 3550... Saved environment info % -FIFF.FIFF_MNE_ENV_WORKING_DIR = 3550; % Working directory where the file was created -FIFF.FIFF_MNE_ENV_COMMAND_LINE = 3551; % The command used to create the file -FIFF.FIFF_MNE_EXTERNAL_BIG_ENDIAN = 3552; % Reference to an external binary file (big-endian) */ -FIFF.FIFF_MNE_EXTERNAL_LITTLE_ENDIAN = 3553; % Reference to an external binary file (little-endian) */ +FIFF.FIFF_MNE_ENV_WORKING_DIR = 3550; % Working directory where the file was created +FIFF.FIFF_MNE_ENV_COMMAND_LINE = 3551; % The command used to create the file +FIFF.FIFF_MNE_EXTERNAL_BIG_ENDIAN = 3552; % Reference to an external binary file (big-endian) */ +FIFF.FIFF_MNE_EXTERNAL_LITTLE_ENDIAN = 3553; % Reference to an external binary file (little-endian) */ % % 3560... Miscellaneous % -FIFF.FIFF_MNE_PROJ_ITEM_ACTIVE = 3560; % Is this projection item active? -FIFF.FIFF_MNE_EVENT_LIST = 3561; % An event list (for STI101 / STI 014) -FIFF.FIFF_MNE_HEMI = 3562; % Hemisphere association for general purposes -FIFF.FIFF_MNE_DATA_SKIP_NOP = 3563; % A data skip turned off in the raw data -FIFF.FIFF_MNE_ORIG_CH_INFO = 3564; % Channel information before any changes -FIFF.FIFF_MNE_EVENT_TRIGGER_MASK = 3565; % Mask applied to the trigger channel values -FIFF.FIFF_MNE_EVENT_COMMENTS = 3566; % Event comments merged into one long string -FIFF.FIFF_MNE_CUSTOM_REF = 3567; % Whether a custom reference was applied to the data -FIFF.FIFF_MNE_BASELINE_MIN = 3568; % Time of baseline beginning -FIFF.FIFF_MNE_BASELINE_MAX = 3569; % Time of baseline end +FIFF.FIFF_MNE_PROJ_ITEM_ACTIVE = 3560; % Is this projection item active? +FIFF.FIFF_MNE_EVENT_LIST = 3561; % An event list (for STI101 / STI 014) +FIFF.FIFF_MNE_HEMI = 3562; % Hemisphere association for general purposes +FIFF.FIFF_MNE_DATA_SKIP_NOP = 3563; % A data skip turned off in the raw data +FIFF.FIFF_MNE_ORIG_CH_INFO = 3564; % Channel information before any changes +FIFF.FIFF_MNE_EVENT_TRIGGER_MASK = 3565; % Mask applied to the trigger channel values +FIFF.FIFF_MNE_EVENT_COMMENTS = 3566; % Event comments merged into one long string +FIFF.FIFF_MNE_CUSTOM_REF = 3567; % Whether a custom reference was applied to the data +FIFF.FIFF_MNE_BASELINE_MIN = 3568; % Time of baseline beginning +FIFF.FIFF_MNE_BASELINE_MAX = 3569; % Time of baseline end % % 3570... Morphing maps % -FIFF.FIFF_MNE_MORPH_MAP = 3570; % Mapping of closest vertices on the sphere -FIFF.FIFF_MNE_MORPH_MAP_FROM = 3571; % Which subject is this map from -FIFF.FIFF_MNE_MORPH_MAP_TO = 3572; % Which subject is this map to +FIFF.FIFF_MNE_MORPH_MAP = 3570; % Mapping of closest vertices on the sphere +FIFF.FIFF_MNE_MORPH_MAP_FROM = 3571; % Which subject is this map from +FIFF.FIFF_MNE_MORPH_MAP_TO = 3572; % Which subject is this map to % % 3580... CTF compensation data % -FIFF.FIFF_MNE_CTF_COMP_KIND = 3580; % What kind of compensation -FIFF.FIFF_MNE_CTF_COMP_DATA = 3581; % The compensation data itself -FIFF.FIFF_MNE_CTF_COMP_CALIBRATED = 3582; % Are the coefficients calibrated? +FIFF.FIFF_MNE_CTF_COMP_KIND = 3580; % What kind of compensation +FIFF.FIFF_MNE_CTF_COMP_DATA = 3581; % The compensation data itself +FIFF.FIFF_MNE_CTF_COMP_CALIBRATED = 3582; % Are the coefficients calibrated? -FIFF.FIFF_MNE_DERIVATION_DATA = 3585; % Used to store information about EEG and other derivations +FIFF.FIFF_MNE_DERIVATION_DATA = 3585; % Used to store information about EEG and other derivations= % % 3601... values associated with ICA decomposition % -FIFF.FIFF_MNE_ICA_INTERFACE_PARAMS = 3601; % ICA interface parameters -FIFF.FIFF_MNE_ICA_CHANNEL_NAMES = 3602; % ICA channel names -FIFF.FIFF_MNE_ICA_WHITENER = 3603; % ICA whitener -FIFF.FIFF_MNE_ICA_PCA_COMPONENTS = 3604; % PCA components -FIFF.FIFF_MNE_ICA_PCA_EXPLAINED_VAR = 3605; % PCA explained variance -FIFF.FIFF_MNE_ICA_PCA_MEAN = 3606; % PCA mean -FIFF.FIFF_MNE_ICA_MATRIX = 3607; % ICA unmixing matrix -FIFF.FIFF_MNE_ICA_BADS = 3608; % ICA bad sources -FIFF.FIFF_MNE_ICA_MISC_PARAMS = 3609; % ICA misc params +FIFF.FIFF_MNE_ICA_INTERFACE_PARAMS = 3601; % ICA interface parameters +FIFF.FIFF_MNE_ICA_CHANNEL_NAMES = 3602; % ICA channel names +FIFF.FIFF_MNE_ICA_WHITENER = 3603; % ICA whitener +FIFF.FIFF_MNE_ICA_PCA_COMPONENTS = 3604; % PCA components +FIFF.FIFF_MNE_ICA_PCA_EXPLAINED_VAR = 3605; % PCA explained variance +FIFF.FIFF_MNE_ICA_PCA_MEAN = 3606; % PCA mean +FIFF.FIFF_MNE_ICA_MATRIX = 3607; % ICA unmixing matrix +FIFF.FIFF_MNE_ICA_BADS = 3608; % ICA bad sources +FIFF.FIFF_MNE_ICA_MISC_PARAMS = 3609; % ICA misc params % % Miscellaneous % -FIFF.FIFF_MNE_KIT_SYSTEM_ID = 3612; % Unique ID assigned to KIT systems +FIFF.FIFF_MNE_KIT_SYSTEM_ID = 3612; % Unique ID assigned to KIT systems % % Maxfilter tags % -FIFF.FIFF_SSS_FRAME = 263; -FIFF.FIFF_SSS_JOB = 264; -FIFF.FIFF_SSS_ORIGIN = 265; -FIFF.FIFF_SSS_ORD_IN = 266; -FIFF.FIFF_SSS_ORD_OUT = 267; -FIFF.FIFF_SSS_NMAG = 268; -FIFF.FIFF_SSS_COMPONENTS = 269; -FIFF.FIFF_SSS_CAL_CHANS = 270; -FIFF.FIFF_SSS_CAL_CORRS = 271; -FIFF.FIFF_SSS_ST_CORR = 272; -FIFF.FIFF_SSS_NFREE = 278; -FIFF.FIFF_SSS_ST_LENGTH = 279; -FIFF.FIFF_DECOUPLER_MATRIX = 800; +FIFF.FIFF_SSS_FRAME = 263; +FIFF.FIFF_SSS_JOB = 264; +FIFF.FIFF_SSS_ORIGIN = 265; +FIFF.FIFF_SSS_ORD_IN = 266; +FIFF.FIFF_SSS_ORD_OUT = 267; +FIFF.FIFF_SSS_NMAG = 268; +FIFF.FIFF_SSS_COMPONENTS = 269; +FIFF.FIFF_SSS_CAL_CHANS = 270; +FIFF.FIFF_SSS_CAL_CORRS = 271; +FIFF.FIFF_SSS_ST_CORR = 272; +FIFF.FIFF_SSS_NFREE = 278; +FIFF.FIFF_SSS_ST_LENGTH = 279; +FIFF.FIFF_DECOUPLER_MATRIX = 800; % % Fiff values associated with MNE computations % -FIFF.FIFFV_MNE_UNKNOWN_ORI = 0; -FIFF.FIFFV_MNE_FIXED_ORI = 1; -FIFF.FIFFV_MNE_FREE_ORI = 2; +FIFF.FIFFV_MNE_UNKNOWN_ORI = 0; +FIFF.FIFFV_MNE_FIXED_ORI = 1; +FIFF.FIFFV_MNE_FREE_ORI = 2; -FIFF.FIFFV_MNE_MEG = 1; -FIFF.FIFFV_MNE_EEG = 2; -FIFF.FIFFV_MNE_MEG_EEG = 3; +FIFF.FIFFV_MNE_MEG = 1; +FIFF.FIFFV_MNE_EEG = 2; +FIFF.FIFFV_MNE_MEG_EEG = 3; -FIFF.FIFFV_MNE_PRIORS_NONE = 0; -FIFF.FIFFV_MNE_PRIORS_DEPTH = 1; -FIFF.FIFFV_MNE_PRIORS_LORETA = 2; -FIFF.FIFFV_MNE_PRIORS_SULCI = 3; +FIFF.FIFFV_MNE_PRIORS_NONE = 0; +FIFF.FIFFV_MNE_PRIORS_DEPTH = 1; +FIFF.FIFFV_MNE_PRIORS_LORETA = 2; +FIFF.FIFFV_MNE_PRIORS_SULCI = 3; -FIFF.FIFFV_MNE_UNKNOWN_COV = 0; -FIFF.FIFFV_MNE_SENSOR_COV = 1; -FIFF.FIFFV_MNE_NOISE_COV = 1; % This is what it should have been called -FIFF.FIFFV_MNE_SOURCE_COV = 2; -FIFF.FIFFV_MNE_FMRI_PRIOR_COV = 3; -FIFF.FIFFV_MNE_SIGNAL_COV = 4; % This will be potentially employed in beamformers -FIFF.FIFFV_MNE_DEPTH_PRIOR_COV = 5; % The depth weighting prior -FIFF.FIFFV_MNE_ORIENT_PRIOR_COV = 6; % The orientation prior +FIFF.FIFFV_MNE_UNKNOWN_COV = 0; +FIFF.FIFFV_MNE_SENSOR_COV = 1; +FIFF.FIFFV_MNE_NOISE_COV = 1; % This is what it should have been called +FIFF.FIFFV_MNE_SOURCE_COV = 2; +FIFF.FIFFV_MNE_FMRI_PRIOR_COV = 3; +FIFF.FIFFV_MNE_SIGNAL_COV = 4; % This will be potentially employed in beamformers +FIFF.FIFFV_MNE_DEPTH_PRIOR_COV = 5; % The depth weighting prior +FIFF.FIFFV_MNE_ORIENT_PRIOR_COV = 6; % The orientation prior % % Output map types % -FIFF.FIFFV_MNE_MAP_UNKNOWN = -1; % Unspecified -FIFF.FIFFV_MNE_MAP_SCALAR_CURRENT = 1; % Scalar current value -FIFF.FIFFV_MNE_MAP_SCALAR_CURRENT_SIZE = 2; % Absolute value of the above -FIFF.FIFFV_MNE_MAP_VECTOR_CURRENT = 3; % Current vector components -FIFF.FIFFV_MNE_MAP_VECTOR_CURRENT_SIZE = 4; % Vector current size -FIFF.FIFFV_MNE_MAP_T_STAT = 5; % Student's t statistic -FIFF.FIFFV_MNE_MAP_F_STAT = 6; % F statistic -FIFF.FIFFV_MNE_MAP_F_STAT_SQRT = 7; % Square root of the F statistic -FIFF.FIFFV_MNE_MAP_CHI2_STAT = 8; % (Approximate) chi^2 statistic -FIFF.FIFFV_MNE_MAP_CHI2_STAT_SQRT = 9; % Square root of the (approximate) chi^2 statistic -FIFF.FIFFV_MNE_MAP_SCALAR_CURRENT_NOISE = 10; % Current noise approximation (scalar) -FIFF.FIFFV_MNE_MAP_VECTOR_CURRENT_NOISE = 11; % Current noise approximation (vector) +FIFF.FIFFV_MNE_MAP_UNKNOWN = -1; % Unspecified +FIFF.FIFFV_MNE_MAP_SCALAR_CURRENT = 1; % Scalar current value +FIFF.FIFFV_MNE_MAP_SCALAR_CURRENT_SIZE = 2; % Absolute value of the above +FIFF.FIFFV_MNE_MAP_VECTOR_CURRENT = 3; % Current vector components +FIFF.FIFFV_MNE_MAP_VECTOR_CURRENT_SIZE = 4; % Vector current size +FIFF.FIFFV_MNE_MAP_T_STAT = 5; % Student's t statistic +FIFF.FIFFV_MNE_MAP_F_STAT = 6; % F statistic +FIFF.FIFFV_MNE_MAP_F_STAT_SQRT = 7; % Square root of the F statistic +FIFF.FIFFV_MNE_MAP_CHI2_STAT = 8; % (Approximate) chi^2 statistic +FIFF.FIFFV_MNE_MAP_CHI2_STAT_SQRT = 9; % Square root of the (approximate) chi^2 statistic +FIFF.FIFFV_MNE_MAP_SCALAR_CURRENT_NOISE = 10; % Current noise approximation (scalar) +FIFF.FIFFV_MNE_MAP_VECTOR_CURRENT_NOISE = 11; % Current noise approximation (vector) % % Source space types (values of FIFF_MNE_SOURCE_SPACE_TYPE) % @@ -623,88 +634,67 @@ % % Covariance matrix channel classification % -FIFF.FIFFV_MNE_COV_CH_UNKNOWN = -1; % No idea -FIFF.FIFFV_MNE_COV_CH_MEG_MAG = 0; % Axial gradiometer or magnetometer [T] -FIFF.FIFFV_MNE_COV_CH_MEG_GRAD = 1; % Planar gradiometer [T/m] -FIFF.FIFFV_MNE_COV_CH_EEG = 2; % EEG [V] +FIFF.FIFFV_MNE_COV_CH_UNKNOWN = -1; % No idea +FIFF.FIFFV_MNE_COV_CH_MEG_MAG = 0; % Axial gradiometer or magnetometer [T] +FIFF.FIFFV_MNE_COV_CH_MEG_GRAD = 1; % Planar gradiometer [T/m] +FIFF.FIFFV_MNE_COV_CH_EEG = 2; % EEG [V] % % Projection item kinds % -FIFF.FIFFV_PROJ_ITEM_NONE = 0; -FIFF.FIFFV_PROJ_ITEM_FIELD = 1; -FIFF.FIFFV_PROJ_ITEM_DIP_FIX = 2; -FIFF.FIFFV_PROJ_ITEM_DIP_ROT = 3; -FIFF.FIFFV_PROJ_ITEM_HOMOG_GRAD = 4; -FIFF.FIFFV_PROJ_ITEM_HOMOG_FIELD = 5; -FIFF.FIFFV_PROJ_ITEM_EEG_AVREF = 10; % Linear projection related to EEG average reference -FIFF.FIFFV_MNE_PROJ_ITEM_EEG_AVREF = FIFF.FIFFV_PROJ_ITEM_EEG_AVREF; % backward compat alias +FIFF.FIFFV_PROJ_ITEM_NONE = 0; +FIFF.FIFFV_PROJ_ITEM_FIELD = 1; +FIFF.FIFFV_PROJ_ITEM_DIP_FIX = 2; +FIFF.FIFFV_PROJ_ITEM_DIP_ROT = 3; +FIFF.FIFFV_PROJ_ITEM_HOMOG_GRAD = 4; +FIFF.FIFFV_PROJ_ITEM_HOMOG_FIELD = 5; +FIFF.FIFFV_PROJ_ITEM_EEG_AVREF = 10; % Linear projection related to EEG average reference +FIFF.FIFFV_MNE_PROJ_ITEM_EEG_AVREF = FIFF.FIFFV_PROJ_ITEM_EEG_AVREF; % backward compat alias +% +% Custom EEG references +% +FIFF.FIFFV_MNE_CUSTOM_REF_OFF = 0; +FIFF.FIFFV_MNE_CUSTOM_REF_ON = 1; +FIFF.FIFFV_MNE_CUSTOM_REF_CSD = 2; % % SSS job options % -FIFF.FIFFV_SSS_JOB_NOTHING = 0; % No SSS, just copy input to output -FIFF.FIFFV_SSS_JOB_CTC = 1; % No SSS, only cross-talk correction -FIFF.FIFFV_SSS_JOB_FILTER = 2; % Spatial maxwell filtering -FIFF.FIFFV_SSS_JOB_VIRT = 3; % Transform data to another sensor array -FIFF.FIFFV_SSS_JOB_HEAD_POS = 4; % Estimate head positions, no SSS -FIFF.FIFFV_SSS_JOB_MOVEC_FIT = 5; % Estimate and compensate head movement -FIFF.FIFFV_SSS_JOB_MOVEC_QUA = 6; % Compensate head movement from previously estimated head positions -FIFF.FIFFV_SSS_JOB_REC_ALL = 7; % Reconstruct inside and outside signals -FIFF.FIFFV_SSS_JOB_REC_IN = 8; % Reconstruct inside signals -FIFF.FIFFV_SSS_JOB_REC_OUT = 9; % Reconstruct outside signals -FIFF.FIFFV_SSS_JOB_ST = 10; % Spatio-temporal maxwell filtering -FIFF.FIFFV_SSS_JOB_TPROJ = 11; % Temporal projection, no SSS -FIFF.FIFFV_SSS_JOB_XSSS = 12; % Cross-validation SSS -FIFF.FIFFV_SSS_JOB_XSUB = 13; % Cross-validation subtraction, no SSS -FIFF.FIFFV_SSS_JOB_XWAV = 14; % Cross-validation noise waveforms -FIFF.FIFFV_SSS_JOB_NCOV = 15; % Noise covariance estimation -FIFF.FIFFV_SSS_JOB_SCOV = 16; % SSS sample covariance estimation -%} +FIFF.FIFFV_SSS_JOB_NOTHING = 0; % No SSS, just copy input to output +FIFF.FIFFV_SSS_JOB_CTC = 1; % No SSS, only cross-talk correction +FIFF.FIFFV_SSS_JOB_FILTER = 2; % Spatial maxwell filtering +FIFF.FIFFV_SSS_JOB_VIRT = 3; % Transform data to another sensor array +FIFF.FIFFV_SSS_JOB_HEAD_POS = 4; % Estimate head positions, no SSS +FIFF.FIFFV_SSS_JOB_MOVEC_FIT = 5; % Estimate and compensate head movement +FIFF.FIFFV_SSS_JOB_MOVEC_QUA = 6; % Compensate head movement from previously estimated head positions +FIFF.FIFFV_SSS_JOB_REC_ALL = 7; % Reconstruct inside and outside signals +FIFF.FIFFV_SSS_JOB_REC_IN = 8; % Reconstruct inside signals +FIFF.FIFFV_SSS_JOB_REC_OUT = 9; % Reconstruct outside signals +FIFF.FIFFV_SSS_JOB_ST = 10; % Spatio-temporal maxwell filtering +FIFF.FIFFV_SSS_JOB_TPROJ = 11; % Temporal projection, no SSS +FIFF.FIFFV_SSS_JOB_XSSS = 12; % Cross-validation SSS +FIFF.FIFFV_SSS_JOB_XSUB = 13; % Cross-validation subtraction, no SSS +FIFF.FIFFV_SSS_JOB_XWAV = 14; % Cross-validation noise waveforms +FIFF.FIFFV_SSS_JOB_NCOV = 15; % Noise covariance estimation +FIFF.FIFFV_SSS_JOB_SCOV = 16; % SSS sample covariance estimation % % Additional coordinate frames % -FIFF.FIFFV_MNE_COORD_TUFTS_EEG = 300; % For Tufts EEG data -FIFF.FIFFV_MNE_COORD_CTF_DEVICE = 1001; % CTF device coordinates -FIFF.FIFFV_MNE_COORD_CTF_HEAD = 1004; % CTF head coordinates +FIFF.FIFFV_MNE_COORD_TUFTS_EEG = 300; % For Tufts EEG data +FIFF.FIFFV_MNE_COORD_CTF_DEVICE = 1001; % CTF device coordinates +FIFF.FIFFV_MNE_COORD_CTF_HEAD = 1004; % CTF head coordinates FIFF.FIFFV_MNE_COORD_DIGITIZER = FIFF.FIFFV_COORD_ISOTRAK; % Original (Polhemus) digitizer coordinates FIFF.FIFFV_MNE_COORD_SURFACE_RAS = FIFF.FIFFV_COORD_MRI; % The surface RAS coordinates -FIFF.FIFFV_MNE_COORD_MRI_VOXEL = 2001; % The MRI voxel coordinates -FIFF.FIFFV_MNE_COORD_RAS = 2002; % Surface RAS coordinates with non-zero origin -FIFF.FIFFV_MNE_COORD_MNI_TAL = 2003; % MNI Talairach coordinates -FIFF.FIFFV_MNE_COORD_FS_TAL_GTZ = 2004; % FreeSurfer Talairach coordinates (MNI z > 0) -FIFF.FIFFV_MNE_COORD_FS_TAL_LTZ = 2005; % FreeSurfer Talairach coordinates (MNI z < 0) -FIFF.FIFFV_MNE_COORD_FS_TAL = 2006; % FreeSurfer Talairach coordinates +FIFF.FIFFV_MNE_COORD_MRI_VOXEL = 2001; % The MRI voxel coordinates +FIFF.FIFFV_MNE_COORD_RAS = 2002; % Surface RAS coordinates with non-zero origin +FIFF.FIFFV_MNE_COORD_MNI_TAL = 2003; % MNI Talairach coordinates +FIFF.FIFFV_MNE_COORD_FS_TAL_GTZ = 2004; % FreeSurfer Talairach coordinates (MNI z > 0) +FIFF.FIFFV_MNE_COORD_FS_TAL_LTZ = 2005; % FreeSurfer Talairach coordinates (MNI z < 0) +FIFF.FIFFV_MNE_COORD_FS_TAL = 2006; % FreeSurfer Talairach coordinates % % 4D and KIT use the same head coordinate system definition as CTF % -FIFF.FIFFV_MNE_COORD_4D_HEAD = FIFF.FIFFV_MNE_COORD_CTF_HEAD; -FIFF.FIFFV_MNE_COORD_KIT_HEAD = FIFF.FIFFV_MNE_COORD_CTF_HEAD; - -% -% FWD Types -% - -FWD.COIL_UNKNOWN = 0; -FWD.COILC_UNKNOWN = 0; -FWD.COILC_EEG = 1000; -FWD.COILC_MAG = 1; -FWD.COILC_AXIAL_GRAD = 2; -FWD.COILC_PLANAR_GRAD = 3; -FWD.COILC_AXIAL_GRAD2 = 4; - -FWD.COIL_ACCURACY_POINT = 0; -FWD.COIL_ACCURACY_NORMAL = 1; -FWD.COIL_ACCURACY_ACCURATE = 2; - -FWD.BEM_UNKNOWN = -1; -FWD.BEM_CONSTANT_COLL = 1; -FWD.BEM_LINEAR_COLL = 2; - -FWD.BEM_IP_APPROACH_LIMIT = 0.1; - -FWD.BEM_LIN_FIELD_SIMPLE = 1; -FWD.BEM_LIN_FIELD_FERGUSON = 2; -FWD.BEM_LIN_FIELD_URANKAR = 3; +FIFF.FIFFV_MNE_COORD_4D_HEAD = FIFF.FIFFV_MNE_COORD_CTF_HEAD; +FIFF.FIFFV_MNE_COORD_KIT_HEAD = FIFF.FIFFV_MNE_COORD_CTF_HEAD; % % Data types @@ -735,145 +725,163 @@ FIFF.FIFFT_COORD_TRANS_STRUCT = 35; FIFF.FIFFT_DIG_STRING_STRUCT = 36; FIFF.FIFFT_STREAM_SEGMENT_STRUCT = 37; +FIFF.FIFFT_MATRIX = 0x40000000; % 1073741824, 1 << 30 +FIFF.FIFFT_SPARSE_CCS_MATRIX = 0x00100000; % 1048576 +FIFF.FIFFT_SPARSE_RCS_MATRIX = 0x00200000; % 2097152 + % % Units of measurement % -FIFF.FIFF_UNIT_NONE = -1; +FIFF.FIFF_UNIT_NONE = -1; % % SI base units % FIFF.FIFF_UNIT_UNITLESS = 0; -FIFF.FIFF_UNIT_M = 1; % meter -FIFF.FIFF_UNIT_KG = 2; % kilogram -FIFF.FIFF_UNIT_SEC = 3; % second -FIFF.FIFF_UNIT_A = 4; % ampere -FIFF.FIFF_UNIT_K = 5; % Kelvin -FIFF.FIFF_UNIT_MOL = 6; % mole +FIFF.FIFF_UNIT_M = 1; % meter +FIFF.FIFF_UNIT_KG = 2; % kilogram +FIFF.FIFF_UNIT_SEC = 3; % second +FIFF.FIFF_UNIT_A = 4; % ampere +FIFF.FIFF_UNIT_K = 5; % Kelvin +FIFF.FIFF_UNIT_MOL = 6; % mole % % SI Supplementary units % -FIFF.FIFF_UNIT_RAD = 7; % radian -FIFF.FIFF_UNIT_SR = 8; % steradian +FIFF.FIFF_UNIT_RAD = 7; % radian +FIFF.FIFF_UNIT_SR = 8; % steradian % % SI base candela % -FIFF.FIFF_UNIT_CD = 9; % candela +FIFF.FIFF_UNIT_CD = 9; % candela % % SI derived units % -FIFF.FIFF_UNIT_MOL_M3 = 10; % mol/m^3 -FIFF.FIFF_UNIT_HZ = 101; % hertz -FIFF.FIFF_UNIT_N = 102; % Newton -FIFF.FIFF_UNIT_PA = 103; % pascal -FIFF.FIFF_UNIT_J = 104; % joule -FIFF.FIFF_UNIT_W = 105; % watt -FIFF.FIFF_UNIT_C = 106; % coulomb -FIFF.FIFF_UNIT_V = 107; % volt -FIFF.FIFF_UNIT_F = 108; % farad -FIFF.FIFF_UNIT_OHM = 109; % ohm -FIFF.FIFF_UNIT_MHO = 110; % one per ohm -FIFF.FIFF_UNIT_WB = 111; % weber -FIFF.FIFF_UNIT_T = 112; % tesla -FIFF.FIFF_UNIT_H = 113; % Henry -FIFF.FIFF_UNIT_CEL = 114; % celsius -FIFF.FIFF_UNIT_LM = 115; % lumen -FIFF.FIFF_UNIT_LX = 116; % lux +FIFF.FIFF_UNIT_MOL_M3 = 10; % mol/m^3 +FIFF.FIFF_UNIT_HZ = 101; % hertz +FIFF.FIFF_UNIT_N = 102; % Newton +FIFF.FIFF_UNIT_PA = 103; % pascal +FIFF.FIFF_UNIT_J = 104; % joule +FIFF.FIFF_UNIT_W = 105; % watt +FIFF.FIFF_UNIT_C = 106; % coulomb +FIFF.FIFF_UNIT_V = 107; % volt +FIFF.FIFF_UNIT_F = 108; % farad +FIFF.FIFF_UNIT_OHM = 109; % ohm +FIFF.FIFF_UNIT_MHO = 110; % one per ohm +FIFF.FIFF_UNIT_S = 110; % Siemens (same as Mho, what fiff-constants calls it) +FIFF.FIFF_UNIT_WB = 111; % weber +FIFF.FIFF_UNIT_T = 112; % tesla +FIFF.FIFF_UNIT_H = 113; % Henry +FIFF.FIFF_UNIT_CEL = 114; % celsius +FIFF.FIFF_UNIT_LM = 115; % lumen +FIFF.FIFF_UNIT_LX = 116; % lux +FIFF.FIFF_UNIT_V_M2 = 117; % V/m^2 % % Others we need % -FIFF.FIFF_UNIT_T_M = 201; % T/m -FIFF.FIFF_UNIT_AM = 202; % Am -FIFF.FIFF_UNIT_AM_M2 = 203; % Am/m^2 -FIFF.FIFF_UNIT_AM_M3 = 204; % Am/m^3 +FIFF.FIFF_UNIT_T_M = 201; % T/m +FIFF.FIFF_UNIT_AM = 202; % Am +FIFF.FIFF_UNIT_AM_M2 = 203; % Am/m^2 +FIFF.FIFF_UNIT_AM_M3 = 204; % Am/m^3 + +FIFF.FIFF_UNIT_PX = 210; % Pixel + % % Multipliers % -FIFF.FIFF_UNITM_E = 18; -FIFF.FIFF_UNITM_PET = 15; -FIFF.FIFF_UNITM_T = 12; -FIFF.FIFF_UNITM_GIG = 9; -FIFF.FIFF_UNITM_MEG = 6; -FIFF.FIFF_UNITM_K = 3; -FIFF.FIFF_UNITM_H = 2; -FIFF.FIFF_UNITM_DA = 1; -FIFF.FIFF_UNITM_NONE = 0; -FIFF.FIFF_UNITM_D = -1; -FIFF.FIFF_UNITM_C = -2; -FIFF.FIFF_UNITM_M = -3; -FIFF.FIFF_UNITM_MU = -6; -FIFF.FIFF_UNITM_N = -9; -FIFF.FIFF_UNITM_P = -12; -FIFF.FIFF_UNITM_F = -15; -FIFF.FIFF_UNITM_A = -18; +FIFF.FIFF_UNITM_E = 18; +FIFF.FIFF_UNITM_PET = 15; +FIFF.FIFF_UNITM_T = 12; +FIFF.FIFF_UNITM_GIG = 9; +FIFF.FIFF_UNITM_MEG = 6; +FIFF.FIFF_UNITM_K = 3; +FIFF.FIFF_UNITM_H = 2; +FIFF.FIFF_UNITM_DA = 1; +FIFF.FIFF_UNITM_NONE = 0; +FIFF.FIFF_UNITM_D = -1; +FIFF.FIFF_UNITM_C = -2; +FIFF.FIFF_UNITM_M = -3; +FIFF.FIFF_UNITM_MU = -6; +FIFF.FIFF_UNITM_N = -9; +FIFF.FIFF_UNITM_P = -12; +FIFF.FIFF_UNITM_F = -15; +FIFF.FIFF_UNITM_A = -18; % % Coil types % -FIFF.FIFFV_COIL_NONE = 0; % The location info contains no data -FIFF.FIFFV_COIL_EEG = 1; % EEG electrode position in r0 -FIFF.FIFFV_COIL_NM_122 = 2; % Neuromag 122 coils -FIFF.FIFFV_COIL_NM_24 = 3; % Old 24 channel system in HUT -FIFF.FIFFV_COIL_NM_MCG_AXIAL = 4; % The axial devices in the HUCS MCG system -FIFF.FIFFV_COIL_EEG_BIPOLAR = 5; % Bipolar EEG lead +FIFF.FIFFV_COIL_NONE = 0; % The location info contains no data +FIFF.FIFFV_COIL_EEG = 1; % EEG electrode position in r0 +FIFF.FIFFV_COIL_NM_122 = 2; % Neuromag 122 coils +FIFF.FIFFV_COIL_NM_24 = 3; % Old 24 channel system in HUT +FIFF.FIFFV_COIL_NM_MCG_AXIAL = 4; % The axial devices in the HUCS MCG system +FIFF.FIFFV_COIL_EEG_BIPOLAR = 5; % Bipolar EEG lead +FIFF.FIFFV_COIL_EEG_CSD = 6; % CSD-transformed EEG lead -FIFF.FIFFV_COIL_DIPOLE = 200; % Time-varying dipole definition +FIFF.FIFFV_COIL_DIPOLE = 200; % Time-varying dipole definition % The coil info contains dipole location (r0) and % direction (ex) -FIFF.FIFFV_COIL_FNIRS_HBO = 300; % fNIRS oxyhemoglobin -FIFF.FIFFV_COIL_FNIRS_HBR = 301; % fNIRS deoxyhemoglobin -FIFF.FIFFV_COIL_FNIRS_RAW = 302; % fNIRS raw light intensity -FIFF.FIFFV_COIL_FNIRS_OD = 303; % fNIRS optical density - -FIFF.FIFFV_COIL_MCG_42 = 1000; % For testing the MCG software - -FIFF.FIFFV_COIL_POINT_MAGNETOMETER = 2000; % Simple point magnetometer -FIFF.FIFFV_COIL_AXIAL_GRAD_5CM = 2001; % Generic axial gradiometer - -FIFF.FIFFV_COIL_VV_PLANAR_W = 3011; % VV prototype wirewound planar sensor -FIFF.FIFFV_COIL_VV_PLANAR_T1 = 3012; % Vectorview SQ20483N planar gradiometer -FIFF.FIFFV_COIL_VV_PLANAR_T2 = 3013; % Vectorview SQ20483N-A planar gradiometer -FIFF.FIFFV_COIL_VV_PLANAR_T3 = 3014; % Vectorview SQ20950N planar gradiometer -FIFF.FIFFV_COIL_VV_PLANAR_T4 = 3015; % Vectorview planar gradiometer (MEG-MRI) -FIFF.FIFFV_COIL_VV_MAG_W = 3021; % VV prototype wirewound magnetometer -FIFF.FIFFV_COIL_VV_MAG_T1 = 3022; % Vectorview SQ20483N magnetometer -FIFF.FIFFV_COIL_VV_MAG_T2 = 3023; % Vectorview SQ20483-A magnetometer -FIFF.FIFFV_COIL_VV_MAG_T3 = 3024; % Vectorview SQ20950N magnetometer -FIFF.FIFFV_COIL_VV_MAG_T4 = 3025; % Vectorview magnetometer (MEG-MRI) - -FIFF.FIFFV_COIL_MAGNES_MAG = 4001; % Magnes WH magnetometer -FIFF.FIFFV_COIL_MAGNES_GRAD = 4002; % Magnes WH gradiometer +FIFF.FIFFV_COIL_FNIRS_HBO = 300; % fNIRS oxyhemoglobin +FIFF.FIFFV_COIL_FNIRS_HBR = 301; % fNIRS deoxyhemoglobin +FIFF.FIFFV_COIL_FNIRS_CW_AMPLITUDE = 302; % fNIRS continuous wave amplitude +FIFF.FIFFV_COIL_FNIRS_OD = 303; % fNIRS optical density +FIFF.FIFFV_COIL_FNIRS_FD_AC_AMPLITUDE = 304; % fNIRS frequency domain AC amplitude +FIFF.FIFFV_COIL_FNIRS_FD_PHASE = 305; % fNIRS frequency domain phase +FIFF.FIFFV_COIL_FNIRS_RAW = FIFF.FIFFV_COIL_FNIRS_CW_AMPLITUDE; % old alias +FIFF.FIFFV_COIL_FNIRS_TD_GATED_AMPLITUDE = 306; % fNIRS time-domain gated amplitude +FIFF.FIFFV_COIL_FNIRS_TD_MOMENTS_AMPLITUDE = 307; % fNIRS time-domain moments amplitude + +FIFF.FIFFV_COIL_EYETRACK_POS = 400; % Eye-tracking gaze position +FIFF.FIFFV_COIL_EYETRACK_PUPIL = 401; % Eye-tracking pupil size + +FIFF.FIFFV_COIL_MCG_42 = 1000; % For testing the MCG software + +FIFF.FIFFV_COIL_POINT_MAGNETOMETER = 2000; % Simple point magnetometer +FIFF.FIFFV_COIL_AXIAL_GRAD_5CM = 2001; % Generic axial gradiometer + +FIFF.FIFFV_COIL_VV_PLANAR_W = 3011; % VV prototype wirewound planar sensor +FIFF.FIFFV_COIL_VV_PLANAR_T1 = 3012; % Vectorview SQ20483N planar gradiometer +FIFF.FIFFV_COIL_VV_PLANAR_T2 = 3013; % Vectorview SQ20483N-A planar gradiometer +FIFF.FIFFV_COIL_VV_PLANAR_T3 = 3014; % Vectorview SQ20950N planar gradiometer +FIFF.FIFFV_COIL_VV_PLANAR_T4 = 3015; % Vectorview planar gradiometer (MEG-MRI) +FIFF.FIFFV_COIL_VV_MAG_W = 3021; % VV prototype wirewound magnetometer +FIFF.FIFFV_COIL_VV_MAG_T1 = 3022; % Vectorview SQ20483N magnetometer +FIFF.FIFFV_COIL_VV_MAG_T2 = 3023; % Vectorview SQ20483-A magnetometer +FIFF.FIFFV_COIL_VV_MAG_T3 = 3024; % Vectorview SQ20950N magnetometer +FIFF.FIFFV_COIL_VV_MAG_T4 = 3025; % Vectorview magnetometer (MEG-MRI) + +FIFF.FIFFV_COIL_MAGNES_MAG = 4001; % Magnes WH magnetometer +FIFF.FIFFV_COIL_MAGNES_GRAD = 4002; % Magnes WH gradiometer % % Magnes reference sensors % FIFF.FIFFV_COIL_MAGNES_REF_MAG = 4003; FIFF.FIFFV_COIL_MAGNES_REF_GRAD = 4004; FIFF.FIFFV_COIL_MAGNES_OFFDIAG_REF_GRAD = 4005; -FIFF.FIFFV_COIL_MAGNES_R_MAG = FIFF.FIFFV_COIL_MAGNES_REF_MAG; -FIFF.FIFFV_COIL_MAGNES_R_GRAD = FIFF.FIFFV_COIL_MAGNES_REF_GRAD; -FIFF.FIFFV_COIL_MAGNES_R_GRAD_OFF = FIFF.FIFFV_COIL_MAGNES_OFFDIAG_REF_GRAD; +FIFF.FIFFV_COIL_MAGNES_R_MAG = FIFF.FIFFV_COIL_MAGNES_REF_MAG; +FIFF.FIFFV_COIL_MAGNES_R_GRAD = FIFF.FIFFV_COIL_MAGNES_REF_GRAD; +FIFF.FIFFV_COIL_MAGNES_R_GRAD_OFF = FIFF.FIFFV_COIL_MAGNES_OFFDIAG_REF_GRAD; % % CTF coil and channel types % -FIFF.FIFFV_COIL_CTF_GRAD = 5001; -FIFF.FIFFV_COIL_CTF_REF_MAG = 5002; -FIFF.FIFFV_COIL_CTF_REF_GRAD = 5003; -FIFF.FIFFV_COIL_CTF_OFFDIAG_REF_GRAD = 5004; +FIFF.FIFFV_COIL_CTF_GRAD = 5001; +FIFF.FIFFV_COIL_CTF_REF_MAG = 5002; +FIFF.FIFFV_COIL_CTF_REF_GRAD = 5003; +FIFF.FIFFV_COIL_CTF_OFFDIAG_REF_GRAD = 5004; % % KIT system coil types % -FIFF.FIFFV_COIL_KIT_GRAD = 6001; -FIFF.FIFFV_COIL_KIT_REF_MAG = 6002; +FIFF.FIFFV_COIL_KIT_GRAD = 6001; +FIFF.FIFFV_COIL_KIT_REF_MAG = 6002; % % BabySQUID sensors % -FIFF.FIFFV_COIL_BABY_GRAD = 7001; +FIFF.FIFFV_COIL_BABY_GRAD = 7001; % % BabyMEG sensors % -FIFF.FIFFV_COIL_BABY_MAG = 7002; -FIFF.FIFFV_COIL_BABY_REF_MAG = 7003; -FIFF.FIFFV_COIL_BABY_REF_MAG2 = 7004; +FIFF.FIFFV_COIL_BABY_MAG = 7002; +FIFF.FIFFV_COIL_BABY_REF_MAG = 7003; +FIFF.FIFFV_COIL_BABY_REF_MAG2 = 7004; % % Artemis123 sensors % @@ -883,30 +891,85 @@ % % QuSpin sensors % -FIFF.FIFFV_COIL_QUSPIN_ZFOPM_MAG = 8001; -FIFF.FIFFV_COIL_QUSPIN_ZFOPM_MAG2 = 8002; +FIFF.FIFFV_COIL_QUSPIN_ZFOPM_MAG = 8001; +FIFF.FIFFV_COIL_QUSPIN_ZFOPM_MAG2 = 8002; +% +% FieldLine sensors +% +FIFF.FIFFV_COIL_FIELDLINE_OPM_MAG_GEN1 = 8101; +% +% Kernel sensors +% +FIFF.FIFFV_COIL_KERNEL_OPM_MAG_GEN1 = 8201; % % KRISS sensors % -FIFF.FIFFV_COIL_KRISS_GRAD = 9001; +FIFF.FIFFV_COIL_KRISS_GRAD = 9001; % % Compumedics adult/pediatric gradiometer % -FIFF.FIFFV_COIL_COMPUMEDICS_ADULT_GRAD = 9101; -FIFF.FIFFV_COIL_COMPUMEDICS_PEDIATRIC_GRAD = 9102; +FIFF.FIFFV_COIL_COMPUMEDICS_ADULT_GRAD = 9101; +FIFF.FIFFV_COIL_COMPUMEDICS_PEDIATRIC_GRAD = 9102; % MNE RealTime -FIFF.FIFF_MNE_RT_COMMAND = 3700; % realtime command -FIFF.FIFF_MNE_RT_CLIENT_ID = 3701; % realtime client +FIFF.FIFF_MNE_RT_COMMAND = 3700; % realtime command +FIFF.FIFF_MNE_RT_CLIENT_ID = 3701; % realtime client % MNE epochs bookkeeping -FIFF.FIFF_MNE_EPOCHS_SELECTION = 3800; % the epochs selection -FIFF.FIFF_MNE_EPOCHS_DROP_LOG = 3801; % the drop log -FIFF.FIFF_MNE_EPOCHS_REJECT_FLAT = 3802; % rejection and flat params -FIFF.FIFF_MNE_EPOCHS_RAW_SFREQ = 3803; % original raw sfreq +FIFF.FIFF_MNE_EPOCHS_SELECTION = 3800; % the epochs selection +FIFF.FIFF_MNE_EPOCHS_DROP_LOG = 3801; % the drop log +FIFF.FIFF_MNE_EPOCHS_REJECT_FLAT = 3802; % rejection and flat params +FIFF.FIFF_MNE_EPOCHS_RAW_SFREQ = 3803; % original raw sfreq % MNE annotations -FIFF.FIFFB_MNE_ANNOTATIONS = 3810; % annotations block +FIFF.FIFFB_MNE_ANNOTATIONS = 3810; % annotations block % MNE Metadata Dataframes -FIFF.FIFFB_MNE_METADATA = 3811; % metadata dataframes block +FIFF.FIFFB_MNE_METADATA = 3811; % metadata dataframes block + + +% +% FWD Types +% +FWD.COIL_UNKNOWN = 0; +FWD.COILC_UNKNOWN = 0; +FWD.COILC_EEG = 1000; +FWD.COILC_MAG = 1; +FWD.COILC_AXIAL_GRAD = 2; +FWD.COILC_PLANAR_GRAD = 3; +FWD.COILC_AXIAL_GRAD2 = 4; + +FWD.COIL_ACCURACY_POINT = 0; +FWD.COIL_ACCURACY_NORMAL = 1; +FWD.COIL_ACCURACY_ACCURATE = 2; + +FWD.BEM_IP_APPROACH_LIMIT = 0.1; + +FWD.BEM_LIN_FIELD_SIMPLE = 1; +FWD.BEM_LIN_FIELD_FERGUSON = 2; +FWD.BEM_LIN_FIELD_URANKAR = 3; + +% % Table to match unrecognized channel location names to their known aliases +% CHANNEL_LOC_ALIASES = { +% % this set of aliases are published in doi:10.1097/WNP.0000000000000316 and +% % doi:10.1016/S1388-2457(00)00527-7. +% "Cb1": "POO7", +% "Cb2": "POO8", +% "CB1": "POO7", +% "CB2": "POO8", +% "T1": "T9", +% "T2": "T10", +% "T3": "T7", +% "T4": "T8", +% "T5": "T9", +% "T6": "T10", +% "M1": "TP9", +% "M2": "TP10", +% % EGI ref chan is named VREF/Vertex Ref. +% % In the standard montages for EGI, the ref is named Cz +% "VREF": "Cz", +% "Vertex Reference": "Cz" +% % add a comment here (with doi of a published source) above any new +% % aliases, as they are added +% }; + diff --git a/matlab/fiff_read_epochs.m b/matlab/fiff_read_epochs.m index 3c96381..488d61f 100644 --- a/matlab/fiff_read_epochs.m +++ b/matlab/fiff_read_epochs.m @@ -2,7 +2,7 @@ % % [epochs] = fiff_read_epochs(fname,setno) % -% Read eochs from file +% Read epochs from file % % % Author : Martin Luessi, MGH Martinos Center @@ -71,12 +71,16 @@ case FIFF.FIFF_MNE_BASELINE_MAX tag = fiff_read_tag(fid,pos); bmax = tag.data; - case FIFF.FIFFB_MNE_EPOCHS_SELECTION + case FIFF.FIFF_MNE_EPOCHS_SELECTION tag = fiff_read_tag(fid,pos); selection = tag.data; - case FIFF.FIFFB_MNE_EPOCHS_DROP_LOG + case FIFF.FIFF_MNE_EPOCHS_DROP_LOG tag = fiff_read_tag(fid,pos); drop_log = tag.data; + %FIXME consider support for the below + %FIFF.FIFF_MNE_EPOCHS_REJECT_FLAT; % rejection and flat params + %FIFF.FIFF_MNE_EPOCHS_RAW_SFREQ; % original raw sfreq + end end diff --git a/matlab/fiff_read_evoked.m b/matlab/fiff_read_evoked.m index ca34338..c3740c3 100644 --- a/matlab/fiff_read_evoked.m +++ b/matlab/fiff_read_evoked.m @@ -100,7 +100,7 @@ is_smsh = [ is_smsh zeros(1,sets(k).naspect) ]; naspect = naspect + sets(k).naspect; end - saspects = fiff_dir_tree_find(evoked(k), FIFF.FIFFB_SMSH_ASPECT); + saspects = fiff_dir_tree_find(evoked(k), FIFF.FIFFB_IAS_ASPECT); nsaspects = length(saspects); if nsaspects > 0 sets(k).naspect = sets(k).naspect + nsaspects; diff --git a/matlab/fiff_read_evoked_all.m b/matlab/fiff_read_evoked_all.m index 886650c..39292bd 100644 --- a/matlab/fiff_read_evoked_all.m +++ b/matlab/fiff_read_evoked_all.m @@ -80,7 +80,7 @@ is_smsh = [ is_smsh zeros(1,sets(k).naspect) ]; naspect = naspect + sets(k).naspect; end - saspects = fiff_dir_tree_find(evoked(k), FIFF.FIFFB_SMSH_ASPECT); + saspects = fiff_dir_tree_find(evoked(k), FIFF.FIFFB_IAS_ASPECT); nsaspects = length(saspects); if nsaspects > 0 sets(k).naspect = sets(k).naspect + nsaspects; diff --git a/matlab/fiff_setup_read_raw.m b/matlab/fiff_setup_read_raw.m index 3b3fc81..72b03b7 100644 --- a/matlab/fiff_setup_read_raw.m +++ b/matlab/fiff_setup_read_raw.m @@ -88,7 +88,7 @@ raw = fiff_dir_tree_find(meas,FIFF.FIFFB_CONTINUOUS_DATA); end if isempty(raw) && allow_maxshield - raw = fiff_dir_tree_find(meas,FIFF.FIFFB_SMSH_RAW_DATA); + raw = fiff_dir_tree_find(meas,FIFF.FIFFB_IAS_RAW_DATA); if ~isempty(raw) disp([10 '--------' 10 ... 'WARNING: This file contains raw Internal Active Shielding data. It may be distorted.' 10 ... diff --git a/matlab/fiff_write_complex.m b/matlab/fiff_write_complex.m index 3a57dc4..66931b8 100644 --- a/matlab/fiff_write_complex.m +++ b/matlab/fiff_write_complex.m @@ -45,15 +45,10 @@ function fiff_write_complex(fid,kind,data) if count ~= 1 error(me,'write failed'); end -for k = 1:nel - count = fwrite(fid,real(data(k)),'single'); - if count ~= 1 - error(me,'write failed'); - end - count = fwrite(fid,imag(data(k)),'single'); - if count ~= 1 - error(me,'write failed'); - end +data = reshape(single([real(data(:)) imag(data(:))]).', [], 1); +count = fwrite(fid, data, 'single'); +if count ~= nel*2 + error(me, 'write failed'); end return; diff --git a/matlab/fiff_write_complex_matrix.m b/matlab/fiff_write_complex_matrix.m index ef5fd0b..134926e 100644 --- a/matlab/fiff_write_complex_matrix.m +++ b/matlab/fiff_write_complex_matrix.m @@ -23,7 +23,12 @@ function fiff_write_complex_matrix(fid,kind,mat) me='MNE:fiff_write_complex_matrix'; if nargin ~= 3 - error(me,'Incorrect number of arguments'); + error(me,'Incorrect number of arguments'); +end + +ndim = ndims(mat); +if ndim < 2 || ndim > 3 + error(me,'Input should be a two-dimensional or three-dimensional matrix'); end FIFFT_COMPLEX_FLOAT = 20; @@ -31,7 +36,7 @@ function fiff_write_complex_matrix(fid,kind,mat) FIFFT_MATRIX_COMPLEX = bitor(FIFFT_COMPLEX_FLOAT,FIFFT_MATRIX); FIFFV_NEXT_SEQ=0; -datasize = 2*4*numel(mat) + 4*3; +datasize = 2*4*numel(mat) + 4*(ndim+1); count = fwrite(fid,int32(kind),'int32'); if count ~= 1 @@ -49,27 +54,47 @@ function fiff_write_complex_matrix(fid,kind,mat) if count ~= 1 error(me,'write failed'); end -nrow = size(mat,1); -ncol = size(mat,2); -for j = 1:nrow - for k = 1:ncol - count = fwrite(fid,real(mat(j,k)),'single'); - if count ~= 1 - error(me,'write failed'); - end - count = fwrite(fid,imag(mat(j,k)),'single'); - if count ~= 1 - error(me,'write failed'); - end - end -end -dims(1) = size(mat,2); -dims(2) = size(mat,1); -dims(3) = 2; -count = fwrite(fid,int32(dims),'int32'); -if count ~= 3 +% nrow = size(mat,1); +% ncol = size(mat,2); +% for j = 1:nrow +% for k = 1:ncol +% count = fwrite(fid,real(mat(j,k)),'single'); +% if count ~= 1 +% error(me,'write failed'); +% end +% count = fwrite(fid,imag(mat(j,k)),'single'); +% if count ~= 1 +% error(me,'write failed'); +% end +% end +% end + +% the matrix is written last dimension first, and then each element's real part followed by its imaginary part +siz = size(mat); +mat = permute(mat,ndim:-1:1); +mat = [real(mat(:)) imag(mat(:))]'; +count = fwrite(fid,single(mat(:)),'single'); +if count ~= numel(mat) error(me,'write failed'); end +if ndim==2 + dims(1) = siz(2); + dims(2) = siz(1); + dims(3) = 2; + count = fwrite(fid,int32(dims),'int32'); + if count ~= 3 + error(me,'write failed'); + end +elseif ndim==3 + dims(1) = siz(3); + dims(2) = siz(2); + dims(3) = siz(1); + dims(4) = 3; + count = fwrite(fid,int32(dims),'int32'); + if count ~= 4 + error(me,'write failed'); + end +end return; diff --git a/matlab/fiff_write_double_complex.m b/matlab/fiff_write_double_complex.m index b81d9ea..583dccb 100644 --- a/matlab/fiff_write_double_complex.m +++ b/matlab/fiff_write_double_complex.m @@ -45,15 +45,10 @@ function fiff_write_double_complex(fid,kind,data) if count ~= 1 error(me,'write failed'); end -for k = 1:nel - count = fwrite(fid,real(data(k)),'double'); - if count ~= 1 - error(me,'write failed'); - end - count = fwrite(fid,imag(data(k)),'double'); - if count ~= 1 - error(me,'write failed'); - end +data = reshape([real(data(:)) imag(data(:))].', [], 1); +count = fwrite(fid, data, 'double'); +if count ~= nel*2 + error(me, 'write failed'); end return; diff --git a/matlab/fiff_write_double_complex_matrix.m b/matlab/fiff_write_double_complex_matrix.m index fbe9d21..8fb4ca5 100644 --- a/matlab/fiff_write_double_complex_matrix.m +++ b/matlab/fiff_write_double_complex_matrix.m @@ -23,7 +23,12 @@ function fiff_write_double_complex_matrix(fid,kind,mat) me='MNE:fiff_write_double_complex_matrix'; if nargin ~= 3 - error(me,'Incorrect number of arguments'); + error(me,'Incorrect number of arguments'); +end + +ndim = ndims(mat); +if ndim < 2 || ndim > 3 + error(me,'Input should be a two-dimensional or three-dimensional matrix'); end FIFFT_COMPLEX_DOUBLE = 21; @@ -31,7 +36,7 @@ function fiff_write_double_complex_matrix(fid,kind,mat) FIFFT_MATRIX_COMPLEX_DOUBLE = bitor(FIFFT_COMPLEX_DOUBLE,FIFFT_MATRIX); FIFFV_NEXT_SEQ=0; -datasize = 2*8*numel(mat) + 4*3; +datasize = 2*8*numel(mat) + 4*(ndim+1); count = fwrite(fid,int32(kind),'int32'); if count ~= 1 @@ -49,27 +54,47 @@ function fiff_write_double_complex_matrix(fid,kind,mat) if count ~= 1 error(me,'write failed'); end -nrow = size(mat,1); -ncol = size(mat,2); -for j = 1:nrow - for k = 1:ncol - count = fwrite(fid,real(mat(j,k)),'double'); - if count ~= 1 - error(me,'write failed'); - end - count = fwrite(fid,imag(mat(j,k)),'double'); - if count ~= 1 - error(me,'write failed'); - end - end -end -dims(1) = size(mat,2); -dims(2) = size(mat,1); -dims(3) = 2; -count = fwrite(fid,int32(dims),'int32'); -if count ~= 3 +% nrow = size(mat,1); +% ncol = size(mat,2); +% for j = 1:nrow +% for k = 1:ncol +% count = fwrite(fid,real(mat(j,k)),'double'); +% if count ~= 1 +% error(me,'write failed'); +% end +% count = fwrite(fid,imag(mat(j,k)),'double'); +% if count ~= 1 +% error(me,'write failed'); +% end +% end +% end + +% the matrix is written last dimension first, and then each element's real part followed by its imaginary part +siz = size(mat); +mat = permute(mat,ndim:-1:1); +mat = [real(mat(:)) imag(mat(:))]'; +count = fwrite(fid,double(mat(:)),'double'); +if count ~= numel(mat) error(me,'write failed'); end +if ndim==2 + dims(1) = siz(2); + dims(2) = siz(1); + dims(3) = 2; + count = fwrite(fid,int32(dims),'int32'); + if count ~= 3 + error(me,'write failed'); + end +elseif ndim==3 + dims(1) = siz(3); + dims(2) = siz(2); + dims(3) = siz(1); + dims(4) = 3; + count = fwrite(fid,int32(dims),'int32'); + if count ~= 4 + error(me,'write failed'); + end +end return; diff --git a/matlab/fiff_write_double_matrix.m b/matlab/fiff_write_double_matrix.m index ec95c03..7067d4f 100644 --- a/matlab/fiff_write_double_matrix.m +++ b/matlab/fiff_write_double_matrix.m @@ -26,8 +26,9 @@ function fiff_write_double_matrix(fid,kind,mat) error(me,'Incorrect number of arguments'); end -if length(size(mat)) ~= 2 - error(me,'Input should be a two-dimensional matrix'); +ndim = ndims(mat); +if ndim < 2 || ndim > 3 + error(me,'Input should be a two-dimensional or three-dimensional matrix'); end FIFFT_DOUBLE = 5; @@ -35,7 +36,7 @@ function fiff_write_double_matrix(fid,kind,mat) FIFFT_MATRIX_DOUBLE = bitor(FIFFT_DOUBLE,FIFFT_MATRIX); FIFFV_NEXT_SEQ=0; -datasize = 8*numel(mat) + 4*3; +datasize = 8*numel(mat) + 4*(ndim+1); count = fwrite(fid,int32(kind),'int32'); if count ~= 1 @@ -53,16 +54,27 @@ function fiff_write_double_matrix(fid,kind,mat) if count ~= 1 error(me,'write failed'); end -count = fwrite(fid,double(mat'),'double'); +count = fwrite(fid,double(permute(mat,ndim:-1:1)),'double'); if count ~= numel(mat) error(me,'write failed'); end -dims(1) = size(mat,2); -dims(2) = size(mat,1); -dims(3) = 2; -count = fwrite(fid,int32(dims),'int32'); -if count ~= 3 - error(me,'write failed'); +if ndim==2 + dims(1) = size(mat,2); + dims(2) = size(mat,1); + dims(3) = 2; + count = fwrite(fid,int32(dims),'int32'); + if count ~= 3 + error(me,'write failed'); + end +elseif ndim==3 + dims(1) = size(mat,3); + dims(2) = size(mat,2); + dims(3) = size(mat,1); + dims(4) = 3; + count = fwrite(fid,int32(dims),'int32'); + if count ~= 4 + error(me,'write failed'); + end end return; diff --git a/matlab/fiff_write_epochs.m b/matlab/fiff_write_epochs.m new file mode 100644 index 0000000..bd52ced --- /dev/null +++ b/matlab/fiff_write_epochs.m @@ -0,0 +1,236 @@ +function fiff_write_epochs(name,data,datatype) +% +% function fiff_write_epochs(name,data) +% +% name filename +% data the data structure returned from fiff_write_evoked +% +% + +% This function has been adjusted by Jan-Mathijs Schoffelen, inspired by the +% fiff_write_evoked function, in order to achieve some more symmetry with +% respect to the reading and writing of epoched data files. +% +% Author : Matti Hamalainen, MGH Martinos Center +% License : BSD 3-clause +% +% Revision 1.14 2009/03/31 01:12:30 msh +% Improved ID handling +% +% Revision 1.13 2009/03/30 11:37:37 msh +% Added copying of measurement info blocks from the original like in mne_browse_raw +% +% Revision 1.12 2008/03/13 19:18:07 msh +% Read and write FIFF_MEAS_DATE from/to FIFFB_MEAS_INFO as appropriate +% +% Revision 1.11 2006/10/04 20:12:37 msh +% Added fiff_read_evoked_all +% Modified fiff_pick_channels_evoked to handle multiple data sets +% Added bad channel writing to fiff_write_evoked +% +% Revision 1.10 2006/09/26 23:20:23 msh +% Moved block ID and parent block id to the meas block. +% +% Revision 1.9 2006/06/14 05:32:43 msh +% Added missing FIFF_NAVE to each aspect written. +% +% Revision 1.8 2006/05/29 16:57:32 msh +% Make sure that scan numbers are correct. +% +% Revision 1.7 2006/04/23 15:29:40 msh +% Added MGH to the copyright +% +% Revision 1.6 2006/04/18 20:44:46 msh +% Added reading of forward solution. +% Use length instead of size when appropriate +% +% Revision 1.5 2006/04/14 15:49:49 msh +% Improved the channel selection code and added ch_names to measurement info. +% +% Revision 1.4 2006/04/14 11:03:57 msh +% Changed fiff_write_id write a given id. +% Added parent id writing. +% +% Revision 1.3 2006/04/13 23:09:46 msh +% Further streamlining of the coordinate transformations. +% +% Revision 1.2 2006/04/12 13:13:51 msh +% Added fiff_find_evoked.m +% Use aspect_kind field name instead of aspect_type +% +% Revision 1.1 2006/04/12 10:29:02 msh +% Made evoked data writing compatible with the structures returned in reading. +% +% +me='MNE:mne_write_epochs'; +if nargin < 2 + error(me,'File name and data required as an arguments'); +end + +% +FIFF = fiff_define_constants(); +if nargin < 3 || isempty(datatype) + datatype = FIFF.FIFFT_FLOAT; +end + +if datatype ~= FIFF.FIFFT_FLOAT + warning(me, 'reading and writing of data in numeric precision ~= float is only supported in FieldTrip and MNE-Python'); +end + +% +% Create the file and save the essentials +% +fid = fiff_start_file(name); +fiff_start_block(fid,FIFF.FIFFB_MEAS); +fiff_write_id(fid,FIFF.FIFF_BLOCK_ID); +if ~isempty(data.info.meas_id) + fiff_write_id(fid,FIFF.FIFF_PARENT_BLOCK_ID,data.info.meas_id); +end +% +% Measurement info +% +fiff_start_block(fid,FIFF.FIFFB_MEAS_INFO); +% +% Blocks from the original +% +blocks = [ FIFF.FIFFB_SUBJECT FIFF.FIFFB_HPI_MEAS FIFF.FIFFB_HPI_RESULT FIFF.FIFFB_ISOTRAK FIFF.FIFFB_PROCESSING_HISTORY ]; +have_hpi_result = false; +have_isotrak = false; +if ~isempty(blocks) && isfield(data.info,'filename') && ~isempty(data.info.filename) + [ fid2, tree ] = fiff_open(data.info.filename); + for k = 1:length(blocks) + nodes = fiff_dir_tree_find(tree,blocks(k)); + fiff_copy_tree(fid2,tree.id,nodes,fid); + if blocks(k) == FIFF.FIFFB_HPI_RESULT && isempty(nodes) + have_hpi_result = true; + end + if blocks(k) == FIFF.FIFFB_ISOTRAK && ~isempty(nodes) + have_isotrak = true; + end + end + fclose(fid2); +end +% +% General +% +fiff_write_float(fid,FIFF.FIFF_SFREQ,data.info.sfreq); +fiff_write_float(fid,FIFF.FIFF_HIGHPASS,data.info.highpass); +fiff_write_float(fid,FIFF.FIFF_LOWPASS,data.info.lowpass); +fiff_write_int(fid,FIFF.FIFF_NCHAN,data.info.nchan); +if ~isempty(data.info.meas_date) + fiff_write_int(fid,FIFF.FIFF_MEAS_DATE,data.info.meas_date); +end +% +% Coordinate transformations if the HPI result block was not there +% +if ~have_hpi_result + if ~isempty(data.info.dev_head_t) + fiff_write_coord_trans(fid,data.info.dev_head_t); + end + if ~isempty(data.info.ctf_head_t) + fiff_write_coord_trans(fid,data.info.ctf_head_t); + end +end +% +% Channel information +% +ch_rename = fiff_make_ch_rename(data.info.chs); +fiff_write_ch_infos(fid,data.info.chs,false,ch_rename); +% +% Polhemus data +% +if ~isempty(data.info.dig) && ~have_isotrak + fiff_start_block(fid,FIFF.FIFFB_ISOTRAK); + for k = 1:length(data.info.dig) + fiff_write_dig_point(fid,data.info.dig(k)) + end + fiff_end_block(fid,FIFF.FIFFB_ISOTRAK); +end +% +% Projectors +% +fiff_write_proj(fid,data.info.projs,ch_rename); +% +% CTF compensation info +% +fiff_write_ctf_comp(fid,data.info.comps,ch_rename); +% +% Bad channels +% +if ~isempty(data.info.bads) + fiff_start_block(fid,FIFF.FIFFB_MNE_BAD_CHANNELS); + fiff_write_name_list(fid,FIFF.FIFF_MNE_CH_NAME_LIST,data.info.bads); + fiff_end_block(fid,FIFF.FIFFB_MNE_BAD_CHANNELS); +end +% +% +fiff_end_block(fid,FIFF.FIFFB_MEAS_INFO); + +% +% Events +% +eventlist = data.epoch.events'; +fiff_start_block(fid,FIFF.FIFFB_MNE_EVENTS); +fiff_write_int(fid,FIFF.FIFF_MNE_EVENT_LIST,eventlist(:)); +fiff_write_string(fid,FIFF.FIFF_DESCRIPTION,data.epoch.event_id); +fiff_end_block(fid,FIFF.FIFFB_MNE_EVENTS); + +% +% One or more evoked data sets +% +fiff_start_block(fid,FIFF.FIFFB_PROCESSED_DATA); +% +fiff_start_block(fid,FIFF.FIFFB_MNE_EPOCHS); + +% +% Comment is optional +% +if size(data.epoch.comment,2) > 0 + fiff_write_string(fid,FIFF.FIFF_COMMENT,data.epoch.comment); +end +% +% First and last sample +% +fiff_write_int(fid,FIFF.FIFF_FIRST_SAMPLE,data.epoch.tmin); +fiff_write_int(fid,FIFF.FIFF_LAST_SAMPLE,data.epoch.tmax); +% +% The epochs +% +for k = 1:numel(data.info.chs) + decal = 1./data.info.chs(k).cal; + if decal~=1 + data.epoch.epochs(:,k,:) = data.epoch.epochs(:,k,:).*decal; + end +end +switch datatype + case FIFF.FIFFT_FLOAT + fiff_write_float_matrix(fid,FIFF.FIFF_EPOCH,data.epoch.epoch); + case FIFF.FIFFT_DOUBLE + fiff_write_double_matrix(fid,FIFF.FIFF_EPOCH,data.epoch.epoch); + case FIFF.FIFFT_COMPLEX_FLOAT + fiff_write_complex_matrix(fid,FIFF.FIFF_EPOCH,data.epoch.epoch); + case FIFF.FIFFT_COMPLEX_DOUBLE + fiff_write_double_complex_matrix(fid,FIFF.FIFF_EPOCH,data.epoch.epoch); + otherwise + error(me,'unsupported datatype requested for writing of the epoch data matrix'); +end + +% +% Add some other metadata that belongs to the MNE epochs object +% +if ~isempty(data.epoch.baseline) + fiff_write_float(fid,FIFF.FIFF_MNE_BASELINE_MIN,data.epoch.baseline(1)); + fiff_write_float(fid,FIFF.FIFF_MNE_BASELINE_MAX,data.epoch.baseline(2)); +end +fiff_write_int(fid,FIFF.FIFF_MNE_EPOCHS_SELECTION,data.epoch.selection); +fiff_write_string(fid,FIFF.FIFF_COMMENT,data.epoch.comment); +fiff_write_string(fid,FIFF.FIFF_MNE_EPOCHS_DROP_LOG,data.epoch.drop_log); + +fiff_end_block(fid,FIFF.FIFFB_MNE_EPOCHS); + +fiff_end_block(fid,FIFF.FIFFB_PROCESSED_DATA); + +fiff_end_block(fid,FIFF.FIFFB_MEAS); + +fiff_end_file(fid); +return; diff --git a/matlab/fiff_write_events.m b/matlab/fiff_write_events.m new file mode 100644 index 0000000..6001178 --- /dev/null +++ b/matlab/fiff_write_events.m @@ -0,0 +1,49 @@ +function fiff_write_events(filename,eventlist,mappings) +% +% fiff_write_events(filename,eventlist,mappings) +% +% Write an event list into a fif file, and include an optional description +% of the event ids. This function has been adjusted by Jan Mathijs Schoffelen +% from mne_write_events, with the intention to make a writing function that +% is symmetric in its behavior w.r.t. fiff_read_events (which can read the +% mappings) +% + +% +% Author : Matti Hamalainen, MGH Martinos Center +% License : BSD 3-clause +% +% Revision 1.2 2008/10/31 13:07:05 msh +% Added mne_make_combined_event_file function +% +% Revision 1.1 2008/06/16 17:27:50 msh +% Added mne_read_events and mne_write_events functions +% + +global FIFF; +if isempty(FIFF) + FIFF = fiff_define_constants(); +end + +me='MNE:fiff_write_events'; + +if nargin < 3 + mappings = ''; +end + +eventlist = reshape(eventlist',numel(eventlist),1); +% +% Start writing... +% +fid = fiff_start_file(filename); + +fiff_start_block(fid,FIFF.FIFFB_MNE_EVENTS); + +fiff_write_int(fid,FIFF.FIFF_MNE_EVENT_LIST,eventlist); +if ~isempty(mappings) + fiff_write_string(fid,FIFF.FIFF_DESCRIPTION,mappings); +end + +fiff_end_block(fid,FIFF.FIFFB_MNE_EVENTS); + +fiff_end_file(fid); diff --git a/matlab/fiff_write_evoked.m b/matlab/fiff_write_evoked.m index adf926c..427df10 100644 --- a/matlab/fiff_write_evoked.m +++ b/matlab/fiff_write_evoked.m @@ -1,6 +1,6 @@ -function fiff_write_evoked(name,data) +function fiff_write_evoked(name,data,datatype) % -% function fiff_write_evoked(name,data) +% function fiff_write_evoked(name,data,datatype) % % name filename % data the data structure returned from fiff_read_evoked @@ -60,7 +60,7 @@ function fiff_write_evoked(name,data) % % me='MNE:fiff_write_evoked'; -if nargin ~= 2 +if nargin < 2 error(me,'File name and data required as an arguments'); end % @@ -68,34 +68,43 @@ function fiff_write_evoked(name,data) if isempty(FIFF) FIFF = fiff_define_constants(); end + +if nargin < 3 || isempty(datatype) + datatype = FIFF.FIFFT_FLOAT; +end + +if datatype ~= FIFF.FIFFT_FLOAT + warning(me, 'reading and writing of data in numeric precision ~= float is only supported in FieldTrip and MNE-Python'); +end + % % Create the file and save the essentials % fid = fiff_start_file(name); -fiff_start_block(fid,FIFF.FIFFB_MEAS); -fiff_write_id(fid,FIFF.FIFF_BLOCK_ID); +fiff_start_block(fid, FIFF.FIFFB_MEAS); +fiff_write_id(fid, FIFF.FIFF_BLOCK_ID); if ~isempty(data.info.meas_id) - fiff_write_id(fid,FIFF.FIFF_PARENT_BLOCK_ID,data.info.meas_id); + fiff_write_id(fid, FIFF.FIFF_PARENT_BLOCK_ID, data.info.meas_id); end % % Measurement info % -fiff_start_block(fid,FIFF.FIFFB_MEAS_INFO); +fiff_start_block(fid, FIFF.FIFFB_MEAS_INFO); % % Blocks from the original % blocks = [ FIFF.FIFFB_SUBJECT FIFF.FIFFB_HPI_MEAS FIFF.FIFFB_HPI_RESULT FIFF.FIFFB_ISOTRAK FIFF.FIFFB_PROCESSING_HISTORY ]; have_hpi_result = false; have_isotrak = false; -if length(blocks) > 0 && isfield(data.info,'filename') && ~isempty(data.info.filename) +if ~isempty(blocks) && isfield(data.info,'filename') && ~isempty(data.info.filename) [ fid2, tree ] = fiff_open(data.info.filename); for k = 1:length(blocks) nodes = fiff_dir_tree_find(tree,blocks(k)); fiff_copy_tree(fid2,tree.id,nodes,fid); - if blocks(k) == FIFF.FIFFB_HPI_RESULT && length(nodes) > 0 + if blocks(k) == FIFF.FIFFB_HPI_RESULT && ~isempty(nodes) have_hpi_result = true; end - if blocks(k) == FIFF.FIFFB_ISOTRAK && length(nodes) > 0 + if blocks(k) == FIFF.FIFFB_ISOTRAK && ~isempty(nodes) have_isotrak = true; end end @@ -104,96 +113,107 @@ function fiff_write_evoked(name,data) % % General % -fiff_write_float(fid,FIFF.FIFF_SFREQ,data.info.sfreq); -fiff_write_float(fid,FIFF.FIFF_HIGHPASS,data.info.highpass); -fiff_write_float(fid,FIFF.FIFF_LOWPASS,data.info.lowpass); -fiff_write_int(fid,FIFF.FIFF_NCHAN,data.info.nchan); -if [ ~isempty(data.info.meas_date) ] - fiff_write_int(fid,FIFF.FIFF_MEAS_DATE,data.info.meas_date); +fiff_write_float(fid, FIFF.FIFF_SFREQ, data.info.sfreq); +fiff_write_float(fid, FIFF.FIFF_HIGHPASS, data.info.highpass); +fiff_write_float(fid, FIFF.FIFF_LOWPASS, data.info.lowpass); +fiff_write_int(fid, FIFF.FIFF_NCHAN, data.info.nchan); +if ~isempty(data.info.meas_date) + fiff_write_int(fid, FIFF.FIFF_MEAS_DATE, data.info.meas_date); end % % Coordinate transformations if the HPI result block was not there % if ~have_hpi_result if ~isempty(data.info.dev_head_t) - fiff_write_coord_trans(fid,data.info.dev_head_t); + fiff_write_coord_trans(fid, data.info.dev_head_t); end if ~isempty(data.info.ctf_head_t) - fiff_write_coord_trans(fid,data.info.ctf_head_t); + fiff_write_coord_trans(fid, data.info.ctf_head_t); end end % % Channel information % ch_rename = fiff_make_ch_rename(data.info.chs); -fiff_write_ch_infos(fid,data.info,false,ch_rename); +fiff_write_ch_infos(fid,data.info.chs,false,ch_rename); % % Polhemus data % if ~isempty(data.info.dig) && ~have_isotrak - fiff_start_block(fid,FIFF.FIFFB_ISOTRAK); + fiff_start_block(fid, FIFF.FIFFB_ISOTRAK); for k = 1:length(data.info.dig) - fiff_write_dig_point(fid,data.info.dig(k)) + fiff_write_dig_point(fid, data.info.dig(k)) end - fiff_end_block(fid,FIFF.FIFFB_ISOTRAK); + fiff_end_block(fid, FIFF.FIFFB_ISOTRAK); end % % Projectors % -fiff_write_proj(fid,data.info.projs,ch_rename); +fiff_write_proj(fid, data.info.projs, ch_rename); % % CTF compensation info % -fiff_write_ctf_comp(fid,data.info.comps,ch_rename); +fiff_write_ctf_comp(fid, data.info.comps, ch_rename); % % Bad channels % -if length(data.info.bads) > 0 - fiff_start_block(fid,FIFF.FIFFB_MNE_BAD_CHANNELS); - fiff_write_name_list(fid,FIFF.FIFF_MNE_CH_NAME_LIST,data.info.bads); - fiff_end_block(fid,FIFF.FIFFB_MNE_BAD_CHANNELS); +if ~isempty(data.info.bads) + fiff_start_block(fid, FIFF.FIFFB_MNE_BAD_CHANNELS); + fiff_write_name_list(fid, FIFF.FIFF_MNE_CH_NAME_LIST, data.info.bads); + fiff_end_block(fid, FIFF.FIFFB_MNE_BAD_CHANNELS); end % % -fiff_end_block(fid,FIFF.FIFFB_MEAS_INFO); +fiff_end_block(fid, FIFF.FIFFB_MEAS_INFO); % % One or more evoked data sets % -fiff_start_block(fid,FIFF.FIFFB_PROCESSED_DATA); +fiff_start_block(fid, FIFF.FIFFB_PROCESSED_DATA); for set = 1:length(data.evoked) - fiff_start_block(fid,FIFF.FIFFB_EVOKED); + fiff_start_block(fid, FIFF.FIFFB_EVOKED); % % Comment is optional % if size(data.evoked(set).comment,2) > 0 - fiff_write_string(fid,FIFF.FIFF_COMMENT,data.evoked(set).comment); + fiff_write_string(fid, FIFF.FIFF_COMMENT, data.evoked(set).comment); end % % First and last sample % - fiff_write_int(fid,FIFF.FIFF_FIRST_SAMPLE,data.evoked(set).first); - fiff_write_int(fid,FIFF.FIFF_LAST_SAMPLE,data.evoked(set).last); + fiff_write_int(fid, FIFF.FIFF_FIRST_SAMPLE, data.evoked(set).first); + fiff_write_int(fid, FIFF.FIFF_LAST_SAMPLE, data.evoked(set).last); % % The epoch itself % - fiff_start_block(fid,FIFF.FIFFB_ASPECT); + fiff_start_block(fid, FIFF.FIFFB_ASPECT); % - fiff_write_int(fid,FIFF.FIFF_ASPECT_KIND, ... - data.evoked(set).aspect_kind); - fiff_write_int(fid,FIFF.FIFF_NAVE,data.evoked(set).nave); - decal = zeros(data.info.nchan,data.info.nchan); + fiff_write_int(fid, FIFF.FIFF_ASPECT_KIND, data.evoked(set).aspect_kind); + fiff_write_int(fid, FIFF.FIFF_NAVE, data.evoked(set).nave); + decal = zeros(data.info.nchan, data.info.nchan); for k = 1:data.info.nchan decal(k,k) = 1.0/(data.info.chs(k).cal); end - fiff_write_float_matrix(fid,FIFF.FIFF_EPOCH,decal*data.evoked(set).epochs); + switch datatype + case FIFF.FIFFT_FLOAT + fiff_write_float_matrix(fid, FIFF.FIFF_EPOCH, decal*data.evoked(set).epochs); + case FIFF.FIFFT_DOUBLE + fiff_write_double_matrix(fid, FIFF.FIFF_EPOCH, decal*data.evoked(set).epochs); + case FIFF.FIFFT_COMPLEX_FLOAT + fiff_write_complex_matrix(fid, FIFF.FIFF_EPOCH, decal*data.evoked(set).epochs); + case FIFF.FIFFT_COMPLEX_DOUBLE + fiff_write_double_complex_matrix(fid, FIFF.FIFF_EPOCH, decal*data.evoked(set).epochs); + otherwise + error(me,'unsupported datatype requested for writing of the epoch data matrix'); + end + % - fiff_end_block(fid,FIFF.FIFFB_ASPECT); + fiff_end_block(fid, FIFF.FIFFB_ASPECT); % - fiff_end_block(fid,FIFF.FIFFB_EVOKED); + fiff_end_block(fid, FIFF.FIFFB_EVOKED); end -fiff_end_block(fid,FIFF.FIFFB_PROCESSED_DATA); +fiff_end_block(fid, FIFF.FIFFB_PROCESSED_DATA); -fiff_end_block(fid,FIFF.FIFFB_MEAS); +fiff_end_block(fid, FIFF.FIFFB_MEAS); fiff_end_file(fid); return; diff --git a/matlab/fiff_write_float_matrix.m b/matlab/fiff_write_float_matrix.m index cf23d75..19017b5 100644 --- a/matlab/fiff_write_float_matrix.m +++ b/matlab/fiff_write_float_matrix.m @@ -31,8 +31,9 @@ function fiff_write_float_matrix(fid,kind,mat) error(me,'Incorrect number of arguments'); end -if length(size(mat)) ~= 2 - error(me,'Input should be a two-dimensional matrix'); +ndim = ndims(mat); +if ndim < 2 || ndim > 3 + error(me,'Input should be a two-dimensional or three-dimensional matrix'); end FIFFT_FLOAT = 4; @@ -40,7 +41,7 @@ function fiff_write_float_matrix(fid,kind,mat) FIFFT_MATRIX_FLOAT = bitor(FIFFT_FLOAT,FIFFT_MATRIX); FIFFV_NEXT_SEQ=0; -datasize = 4*numel(mat) + 4*3; +datasize = 4*numel(mat) + 4*(ndim+1); count = fwrite(fid,int32(kind),'int32'); if count ~= 1 @@ -58,16 +59,27 @@ function fiff_write_float_matrix(fid,kind,mat) if count ~= 1 error(me,'write failed'); end -count = fwrite(fid,single(mat'),'single'); +count = fwrite(fid,single(permute(mat,ndim:-1:1)),'single'); if count ~= numel(mat) error(me,'write failed'); end -dims(1) = size(mat,2); -dims(2) = size(mat,1); -dims(3) = 2; -count = fwrite(fid,int32(dims),'int32'); -if count ~= 3 - error(me,'write failed'); +if ndim==2 + dims(1) = size(mat,2); + dims(2) = size(mat,1); + dims(3) = 2; + count = fwrite(fid,int32(dims),'int32'); + if count ~= 3 + error(me,'write failed'); + end +elseif ndim==3 + dims(1) = size(mat,3); + dims(2) = size(mat,2); + dims(3) = size(mat,1); + dims(4) = 3; + count = fwrite(fid,int32(dims),'int32'); + if count ~= 4 + error(me,'write failed'); + end end return; diff --git a/matlab/fiff_write_raw_buffer.m b/matlab/fiff_write_raw_buffer.m index a701925..4300f83 100644 --- a/matlab/fiff_write_raw_buffer.m +++ b/matlab/fiff_write_raw_buffer.m @@ -35,7 +35,7 @@ function fiff_write_raw_buffer(fid,buf,cals,datatype) datatype = FIFF.FIFFT_FLOAT; end -if datatype ~= FIFF.FIFFT_FLOAT; +if datatype ~= FIFF.FIFFT_FLOAT warning(me, 'reading and writing of data in numeric precision ~= float is only supported in FieldTrip and MNE-Python'); end diff --git a/matlab/test/test_fiff_define_constants.m b/matlab/test/test_fiff_define_constants.m index 709e7d1..c5a819b 100644 --- a/matlab/test/test_fiff_define_constants.m +++ b/matlab/test/test_fiff_define_constants.m @@ -14,7 +14,13 @@ function test_fiff_define_constants_() end p = fileparts(mfilename('fullpath')); -if ~isempty(p), cd(p); end +if ~isempty(p) + % this is assumed to end with '/test'; + if numel(p)>4 && strcmp(p(end-3:end), 'test') + p = strrep(p, [filesep 'test'], ''); + end + cd(p); +end % create temporary files that holds the fiff constants from all m-files % together, and one that holds the fiff constants from the definition file @@ -33,7 +39,4 @@ function test_fiff_define_constants_() delete('c2'); delete('delta'); -%FIXME this can go, once the set of unit tests has been merged, and once it -%is safe to start improving the current codebase, which - based on the -%failing assertion below - is internally inconsistent -%assertEqual(deblank(count), '0'); +assertEqual(deblank(count), '0'); diff --git a/matlab/test/test_fiff_make_dir_tree.m b/matlab/test/test_fiff_make_dir_tree.m index 0351fb2..91e8631 100644 --- a/matlab/test/test_fiff_make_dir_tree.m +++ b/matlab/test/test_fiff_make_dir_tree.m @@ -6,6 +6,46 @@ function test_fiff_make_dir_tree_() % Test fiff_make_dir_tree.m % -% This is just a placeholder file, referencing the below test function, -% which should fail if fiff_make_dir_tree does not work properly -test_fiff_open +% This actually the same functionality as test_fiff_open + +if ispc + % I don't know what happens with the unit testing actually, if the + % function returns without actually testing anything + return; +end + +p = fileparts(mfilename('fullpath')); + +% load the reference trees +load(fullfile(p, 'data', 'test_fiftrees_ref.mat')); + +fname = fullfile(p, 'data', 'test_raw.fif'); +[fid, tree, dir] = fiff_open(fname); +fclose(fid); +assert(isequal(tree, trees.raw)); + +fname = fullfile(p, 'data', 'test_long_raw.fif'); +[fid, tree, dir] = fiff_open(fname); +fclose(fid); +assert(isequal(tree, trees.longraw)); + +fname = fullfile(p, 'data', 'test_raw-eve.fif'); +[fid, tree, dir] = fiff_open(fname); +fclose(fid); +assert(isequal(tree, trees.raweve)); + +fname = fullfile(p, 'data', 'test-eve.fif'); +[fid, tree, dir] = fiff_open(fname); +fclose(fid); +assert(isequal(tree, trees.eve)); + +fname = fullfile(p, 'data', 'test-ave.fif'); +[fid, tree, dir] = fiff_open(fname); +fclose(fid); +assert(isequal(tree, trees.ave)); + +fname = fullfile(p, 'data', 'test-cov.fif'); +[fid, tree, dir] = fiff_open(fname); +fclose(fid); +assert(isequal(tree, trees.cov)); + diff --git a/matlab/test/test_fiff_read_tag_info.m b/matlab/test/test_fiff_read_tag_info.m index 328b22c..d5f8d60 100644 --- a/matlab/test/test_fiff_read_tag_info.m +++ b/matlab/test/test_fiff_read_tag_info.m @@ -6,6 +6,45 @@ function test_fiff_read_tag_info_() % Test fiff_read_tag_info.m % -% This is a placeholder function, referencing the below test function, -% which should fail if fiff_read_tag_info does not work properly -test_fiff_open +% This actually the same functionality as test_fiff_open + +if ispc + % I don't know what happens with the unit testing actually, if the + % function returns without actually testing anything + return; +end + +p = fileparts(mfilename('fullpath')); + +% load the reference trees +load(fullfile(p, 'data', 'test_fiftrees_ref.mat')); + +fname = fullfile(p, 'data', 'test_raw.fif'); +[fid, tree, dir] = fiff_open(fname); +fclose(fid); +assert(isequal(tree, trees.raw)); + +fname = fullfile(p, 'data', 'test_long_raw.fif'); +[fid, tree, dir] = fiff_open(fname); +fclose(fid); +assert(isequal(tree, trees.longraw)); + +fname = fullfile(p, 'data', 'test_raw-eve.fif'); +[fid, tree, dir] = fiff_open(fname); +fclose(fid); +assert(isequal(tree, trees.raweve)); + +fname = fullfile(p, 'data', 'test-eve.fif'); +[fid, tree, dir] = fiff_open(fname); +fclose(fid); +assert(isequal(tree, trees.eve)); + +fname = fullfile(p, 'data', 'test-ave.fif'); +[fid, tree, dir] = fiff_open(fname); +fclose(fid); +assert(isequal(tree, trees.ave)); + +fname = fullfile(p, 'data', 'test-cov.fif'); +[fid, tree, dir] = fiff_open(fname); +fclose(fid); +assert(isequal(tree, trees.cov)); diff --git a/matlab/test/test_fiff_readwrite.m b/matlab/test/test_fiff_readwrite.m index 7165010..92a56c6 100644 --- a/matlab/test/test_fiff_readwrite.m +++ b/matlab/test/test_fiff_readwrite.m @@ -43,3 +43,167 @@ function test_fiff_readwrite_raw_() % clean up delete(fnamenew); +function test_fiff_readwrite_raw_double_() +% Test a round trip of reading and writing raw data in double precision +% this function calls the following relevant m-files: +% - fiff_read_meas_info +% - fiff_setup_read_raw +% - fiff_read_raw_segment +% - fiff_start_writing_raw +% - fiff_write_int +% - fiff_write_raw_buffer +% - fiff_finish_writing_raw + +FIFF = fiff_define_constants; + +% read +pathstr = fileparts(mfilename('fullpath')); +fname = fullfile(pathstr, 'data', 'test_raw.fif'); +info = fiff_read_meas_info(fname); +raw = fiff_setup_read_raw(fname); +[data, times] = fiff_read_raw_segment(raw); + +% write -> note that the original data was in 24 chunks of 600 samples, the +% data is saved out as a single chunk of 14400 samples +fnamenew = strrep(fname, 'test_', 'testoutd_'); +[outfid, cals] = fiff_start_writing_raw(fnamenew, info, [], 'double'); +fiff_write_int(outfid, FIFF.FIFF_FIRST_SAMPLE, raw.first_samp); +fiff_write_int(outfid, FIFF.FIFF_DATA_SKIP, 0); +fiff_write_raw_buffer(outfid, data, cals, FIFF.FIFFT_DOUBLE); +fiff_finish_writing_raw(outfid); + +% read the new file +rawnew = fiff_setup_read_raw(fnamenew); +[datanew, timesnew] = fiff_read_raw_segment(rawnew); + +% compare, with some tolerance, because for unknown reasons the fiff code +% adjusts the cal/range factors upon writing, which anecdotally may yield +% differences (in the round trip) up to eps, but for the given test data +% only for the EEG channels, MEG is numerically equal +assertElementsAlmostEqual(data, datanew, 'relative', eps); +assertElementsAlmostEqual(times, timesnew, 'relative', eps); + +% clean up +delete(fnamenew); + +function test_fiff_readwrite_raw_complex_() +% Test a round trip of reading and writing raw data in complex single precision +% this function calls the following relevant m-files: +% - fiff_read_meas_info +% - fiff_setup_read_raw +% - fiff_read_raw_segment +% - fiff_start_writing_raw +% - fiff_write_int +% - fiff_write_raw_buffer +% - fiff_finish_writing_raw + +FIFF = fiff_define_constants; + +% read +pathstr = fileparts(mfilename('fullpath')); +fname = fullfile(pathstr, 'data', 'test_raw.fif'); +info = fiff_read_meas_info(fname); +raw = fiff_setup_read_raw(fname); +[data, times] = fiff_read_raw_segment(raw); +data = data + 1i.*data; + +% write -> note that the original data was in 24 chunks of 600 samples, the +% data is saved out as a single chunk of 14400 samples +fnamenew = strrep(fname, 'test_', 'testoutc_'); +[outfid, cals] = fiff_start_writing_raw(fnamenew, info, [], 'single_complex'); +fiff_write_int(outfid, FIFF.FIFF_FIRST_SAMPLE, raw.first_samp); +fiff_write_int(outfid, FIFF.FIFF_DATA_SKIP, 0); +fiff_write_raw_buffer(outfid, data, cals, FIFF.FIFFT_COMPLEX_FLOAT); +fiff_finish_writing_raw(outfid); + +% read the new file +rawnew = fiff_setup_read_raw(fnamenew); +[datanew, timesnew] = fiff_read_raw_segment(rawnew); + +% compare, with some tolerance, because for unknown reasons the fiff code +% adjusts the cal/range factors upon writing, which anecdotally may yield +% differences (in the round trip) up to eps, but for the given test data +% only for the EEG channels, MEG is numerically equal +assertElementsAlmostEqual(data, datanew, 'relative', eps); +assertElementsAlmostEqual(times, timesnew, 'relative', eps); + +% clean up +delete(fnamenew); + +function test_fiff_readwrite_raw_complex_double_() +% Test a round trip of reading and writing raw data in complex double precision +% this function calls the following relevant m-files: +% - fiff_read_meas_info +% - fiff_setup_read_raw +% - fiff_read_raw_segment +% - fiff_start_writing_raw +% - fiff_write_int +% - fiff_write_raw_buffer +% - fiff_finish_writing_raw + +FIFF = fiff_define_constants; + +% read +pathstr = fileparts(mfilename('fullpath')); +fname = fullfile(pathstr, 'data', 'test_raw.fif'); +info = fiff_read_meas_info(fname); +raw = fiff_setup_read_raw(fname); +[data, times] = fiff_read_raw_segment(raw); +data = data + 1i.*data; + +% write -> note that the original data was in 24 chunks of 600 samples, the +% data is saved out as a single chunk of 14400 samples +fnamenew = strrep(fname, 'test_', 'testoutc_'); +[outfid, cals] = fiff_start_writing_raw(fnamenew, info, [], 'double_complex'); +fiff_write_int(outfid, FIFF.FIFF_FIRST_SAMPLE, raw.first_samp); +fiff_write_int(outfid, FIFF.FIFF_DATA_SKIP, 0); +fiff_write_raw_buffer(outfid, data, cals, FIFF.FIFFT_COMPLEX_DOUBLE); +fiff_finish_writing_raw(outfid); + +% read the new file +rawnew = fiff_setup_read_raw(fnamenew); +[datanew, timesnew] = fiff_read_raw_segment(rawnew); + +% compare, with some tolerance, because for unknown reasons the fiff code +% adjusts the cal/range factors upon writing, which anecdotally may yield +% differences (in the round trip) up to eps, but for the given test data +% only for the EEG channels, MEG is numerically equal +assertElementsAlmostEqual(data, datanew, 'relative', eps); +assertElementsAlmostEqual(times, timesnew, 'relative', eps); + +% clean up +delete(fnamenew); + +function test_fiff_readwrite_evoked_() +% Test a round trip of reading and writing evoked data + +% read +pathstr = fileparts(mfilename('fullpath')); +fname = fullfile(pathstr, 'data', 'test-ave.fif'); +evoked = fiff_read_evoked(fname); + +fnamenew = strrep(fname, 'test-', 'testout-'); +fiff_write_evoked(fnamenew, evoked); +evokednew = fiff_read_evoked(fnamenew); + +assertEqual(evoked.evoked, evokednew.evoked); + +% clean up +delete(fnamenew); + +function test_fiff_readwrite_evoked_all_() +% Test a round trip of reading and writing evoked data + +% read +pathstr = fileparts(mfilename('fullpath')); +fname = fullfile(pathstr, 'data', 'test-ave.fif'); +evoked = fiff_read_evoked_all(fname); + +fnamenew = strrep(fname, 'test-', 'testout-'); +fiff_write_evoked(fnamenew, evoked); +evokednew = fiff_read_evoked_all(fnamenew); + +assertEqual(evoked.evoked, evokednew.evoked); + +% clean up +delete(fnamenew);