Home > functions > device > meg > yokogawa > vb_meg_yokogawa_make_data.m

vb_meg_yokogawa_make_data

PURPOSE ^

Read MEG data saved on Yokogawa system and convert it to .meg.mat file.

SYNOPSIS ^

function [err] = vb_meg_yokogawa_make_data(proj_root, meg_parm)

DESCRIPTION ^

 Read MEG data saved on Yokogawa system and convert it to .meg.mat file. 

 [usage]
   [err] = vb_meg_yokogawa_make_data(proj_root, meg_parm)

 [input]
   proj_root : <required> Project root directory
    meg_parm : <required> <<struct>> structure with following field
             :     <<fields>>
             :   .yokogawa_file : <required> <<file>> YOKOGAWA-MEG file
             :                  :  .con | .ave | .raw
             :   .meg_file      : <required> Output MEG file.
             :                  :  This is used in connecting to proj_root.
             :                  : [proj_root '/' <meg_parm.meg_file>] : 
             :   .pos_file      : <optional> <<file>> POS-MAT file
             :                  :   the members of which are as follows
             :                  :    mri_key   - hash key [x1 string]
             :                  :    coord_type- coordinate type [x1 string]
             :                  :    pos       - coordinate [Nch x3 double]
             :                  :    name      - channel name [Nch x1 string]
             :                  :    trans_mri - transform matrix [4x4 double]
             :                  :    header    - header information <<struct>>
             :                  :      .digit_file_name : <optional>
             :                  :      .meg_market_id : <optional>
             :   .ex_ch_gain    : <optional> gain of extra channel[]
             :   .memory_max    : <optional> const.DEFAULT_MEMORY_MAX(10000000)
             :   .saveman       : <optional> <<struct>>
             :                  : .data_dir : ['./(name of .meg_file)_bin']
             :                  :  - directory where the data will be stored
             :                  :  - relative path from the path of .meg_file
             :                  : .precision : ['float64']
             :                  :  - precision which is used for fwrite

 [output]
         err : error code
             :      0) success
             :  not 0) failure

 [note]
   1) If pos member in POS-MAT file is empty, only import MEG data

   2) This function transform coordinates by using trans_mri matrix

   3) data format of output file MEG-MAT is as follows
      <<MEG-MAT>>
       pick(n,      1:3) : position of detector coils.
           (n+1:2n, 1:3) : position of conpensation detector coils.
       Qpick             : vector of pick [Nch x3]
       ref_pick          : position of reference channels [N_ref_ch x3]
       ref_Qpick         : vector of ref_pick [N_ref_ch x3]
       Measurement       : <<string>> measurement code 'MEG'
       CoordType         : <<string>> coordinate type which all the 
                         :  coordinates in MEG-MAT file apply
       PositionFile      : <<string>> position file (POS-MAT file) name
       MEGinfo           : <<struct>> with MEG acquisition information

      <<MEGinfo>>
     .Measurement        : <<string>> measurement code 'MEG'
     .device             : device name (e.g. 'YOKOGAWA')
     .sensor_weight      : weight to calculate lead field
             : sensor_weight = n-th coil weight for m-th sensor channel
             : basis(channel,dipole) = sensor_weight * basis(coil,dipole)
     .Nchannel           : number of active gardiometers
     .Nsample            : number of sampling data
     .Pretrigger         : number of sampling data before trigger
     .SampleFreq         : sampling frequency
     .Nrepeat            : number of trial
     .Trial              : <<struct>> trial information [Ntrial x 1]
                         :  .number : trial number (index)
                         :  .sample : [Nsample x 1] sample list
     .Vcenter            : [3 x 1] origin of sphere model [m]
     .MEG_ID             : MEG system ID(meg filename with no extension)
     .MRI_ID             : MRI key (hash key)
     .MEGch_name         : Active MEG channel name
     .MEGch_id           : Active MEG channel index
     .saveman            : <<struct>> saving specifications

     .device_info        : <<struct>> device dependent information
       .sensor_weight_ref: 
       .TransInfo        : <<struct>> transform information
       .acq_type         : acquisition type
                         :  (e.g.'Continuous_Raw', 'Evoked_Ave', 'Evoked_Raw')
       .acq_info         : <<struct>> acquisition information

 [history]
   2007-07-05 (Sako) initial version
   2008-03-13 (Sako) thoroughly rewrote according to the new specification
   2009-07-14 (Sako) modified to store data as external file inevitably
   2010-02-04 (Sako) removed invalid setting of bit_len
   2011-02-17 (Sako) changed default value of saveman.data_dir
   2011-02-17 (Sako) got rid of old data fields 'bexp' 'bexp_ext', 'refmg'
   2011-02-24 (Sako) supported in case ref channels are empty
   2011-02-24 (Sako) supported in case memory_max is given but empty
   2011-05-26 (Sako) modified according to the new data format
   2011-06-22 (Sako) changed the order of load_calibinfo

 Copyright (C) 2011, ATR All Rights Reserved.
 License : New BSD License(see VBMEG_LICENSE.txt)

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SUBFUNCTIONS ^

SOURCE CODE ^

0001 function [err] = vb_meg_yokogawa_make_data(proj_root, meg_parm)
0002 % Read MEG data saved on Yokogawa system and convert it to .meg.mat file.
0003 %
0004 % [usage]
0005 %   [err] = vb_meg_yokogawa_make_data(proj_root, meg_parm)
0006 %
0007 % [input]
0008 %   proj_root : <required> Project root directory
0009 %    meg_parm : <required> <<struct>> structure with following field
0010 %             :     <<fields>>
0011 %             :   .yokogawa_file : <required> <<file>> YOKOGAWA-MEG file
0012 %             :                  :  .con | .ave | .raw
0013 %             :   .meg_file      : <required> Output MEG file.
0014 %             :                  :  This is used in connecting to proj_root.
0015 %             :                  : [proj_root '/' <meg_parm.meg_file>] :
0016 %             :   .pos_file      : <optional> <<file>> POS-MAT file
0017 %             :                  :   the members of which are as follows
0018 %             :                  :    mri_key   - hash key [x1 string]
0019 %             :                  :    coord_type- coordinate type [x1 string]
0020 %             :                  :    pos       - coordinate [Nch x3 double]
0021 %             :                  :    name      - channel name [Nch x1 string]
0022 %             :                  :    trans_mri - transform matrix [4x4 double]
0023 %             :                  :    header    - header information <<struct>>
0024 %             :                  :      .digit_file_name : <optional>
0025 %             :                  :      .meg_market_id : <optional>
0026 %             :   .ex_ch_gain    : <optional> gain of extra channel[]
0027 %             :   .memory_max    : <optional> const.DEFAULT_MEMORY_MAX(10000000)
0028 %             :   .saveman       : <optional> <<struct>>
0029 %             :                  : .data_dir : ['./(name of .meg_file)_bin']
0030 %             :                  :  - directory where the data will be stored
0031 %             :                  :  - relative path from the path of .meg_file
0032 %             :                  : .precision : ['float64']
0033 %             :                  :  - precision which is used for fwrite
0034 %
0035 % [output]
0036 %         err : error code
0037 %             :      0) success
0038 %             :  not 0) failure
0039 %
0040 % [note]
0041 %   1) If pos member in POS-MAT file is empty, only import MEG data
0042 %
0043 %   2) This function transform coordinates by using trans_mri matrix
0044 %
0045 %   3) data format of output file MEG-MAT is as follows
0046 %      <<MEG-MAT>>
0047 %       pick(n,      1:3) : position of detector coils.
0048 %           (n+1:2n, 1:3) : position of conpensation detector coils.
0049 %       Qpick             : vector of pick [Nch x3]
0050 %       ref_pick          : position of reference channels [N_ref_ch x3]
0051 %       ref_Qpick         : vector of ref_pick [N_ref_ch x3]
0052 %       Measurement       : <<string>> measurement code 'MEG'
0053 %       CoordType         : <<string>> coordinate type which all the
0054 %                         :  coordinates in MEG-MAT file apply
0055 %       PositionFile      : <<string>> position file (POS-MAT file) name
0056 %       MEGinfo           : <<struct>> with MEG acquisition information
0057 %
0058 %      <<MEGinfo>>
0059 %     .Measurement        : <<string>> measurement code 'MEG'
0060 %     .device             : device name (e.g. 'YOKOGAWA')
0061 %     .sensor_weight      : weight to calculate lead field
0062 %             : sensor_weight = n-th coil weight for m-th sensor channel
0063 %             : basis(channel,dipole) = sensor_weight * basis(coil,dipole)
0064 %     .Nchannel           : number of active gardiometers
0065 %     .Nsample            : number of sampling data
0066 %     .Pretrigger         : number of sampling data before trigger
0067 %     .SampleFreq         : sampling frequency
0068 %     .Nrepeat            : number of trial
0069 %     .Trial              : <<struct>> trial information [Ntrial x 1]
0070 %                         :  .number : trial number (index)
0071 %                         :  .sample : [Nsample x 1] sample list
0072 %     .Vcenter            : [3 x 1] origin of sphere model [m]
0073 %     .MEG_ID             : MEG system ID(meg filename with no extension)
0074 %     .MRI_ID             : MRI key (hash key)
0075 %     .MEGch_name         : Active MEG channel name
0076 %     .MEGch_id           : Active MEG channel index
0077 %     .saveman            : <<struct>> saving specifications
0078 %
0079 %     .device_info        : <<struct>> device dependent information
0080 %       .sensor_weight_ref:
0081 %       .TransInfo        : <<struct>> transform information
0082 %       .acq_type         : acquisition type
0083 %                         :  (e.g.'Continuous_Raw', 'Evoked_Ave', 'Evoked_Raw')
0084 %       .acq_info         : <<struct>> acquisition information
0085 %
0086 % [history]
0087 %   2007-07-05 (Sako) initial version
0088 %   2008-03-13 (Sako) thoroughly rewrote according to the new specification
0089 %   2009-07-14 (Sako) modified to store data as external file inevitably
0090 %   2010-02-04 (Sako) removed invalid setting of bit_len
0091 %   2011-02-17 (Sako) changed default value of saveman.data_dir
0092 %   2011-02-17 (Sako) got rid of old data fields 'bexp' 'bexp_ext', 'refmg'
0093 %   2011-02-24 (Sako) supported in case ref channels are empty
0094 %   2011-02-24 (Sako) supported in case memory_max is given but empty
0095 %   2011-05-26 (Sako) modified according to the new data format
0096 %   2011-06-22 (Sako) changed the order of load_calibinfo
0097 %
0098 % Copyright (C) 2011, ATR All Rights Reserved.
0099 % License : New BSD License(see VBMEG_LICENSE.txt)
0100   
0101 % --- CHECK ARGUMENTS --- %
0102 if ~exist('proj_root', 'var'), proj_root = []; end
0103 if ~exist('meg_parm', 'var'), meg_parm = []; end
0104 [proj_root, meg_parm, ykgwfile, posfile, out_file, meg_info] = ...
0105     inner_check_arguments(proj_root, meg_parm);
0106 
0107 % --- MAIN PROCEDURE --------------------------------------------------------- %
0108 %
0109 err = 0;  % success
0110 
0111 % --- new spec - meg_info has acqfile field
0112 [meg_info] = vb_meginfo_set_acqfile(meg_info, ykgwfile);
0113 % <at this moment> determined fields of meg_info are ...
0114 %   device_info.acq_info.data_file     % acquisition file path
0115 
0116 
0117 [pick, Qpick, ref_pick, ref_Qpick, CoordType, meg_info] = ...
0118   vb_ykgwfile_load_meg_channel_info(ykgwfile, meg_info);
0119 % only load hardware coordinate here
0120 % later, apply appropriate coordinate system
0121 % <at this moment> determined fields of meg_info are ...
0122 %   MEGch_id      % Active MEG channel index
0123 %   MEGch_name    % Active MEG channel name
0124 %   Nchannel      % number of active axialmeters
0125 %   nch0          % number of axialmeters
0126 %   sensor_weight % coil weight
0127 %   ActiveChannel % active channel flag
0128 
0129 
0130 [meg_info] = vb_ykgwfile_load_header(ykgwfile, meg_info);
0131 % <at this moment> newly determined fields of meg_info are ...
0132 %   MEG_ID      % MEG filename (non extention)
0133 %   device      % 'YOKOGAWA' <-- hard-coded
0134 %   coord_type
0135 %   acq_type
0136 %   Nsample     % sampling number of measurement
0137 %   Pretrigger  % number of sample before trigger
0138 %   SampleFreq  % sampling frequency
0139 %   Nrepeat     % repeat number
0140 %   Trial       % struct of trial information
0141 
0142 
0143 [meg_info] = vb_ykgwfile_load_extra_channel_info(ykgwfile, meg_info);
0144 % <at this moment> newly determined fields of meg_info are ...
0145 %   ExtraChannelInfo  % <<struct>> extra channels' information
0146 
0147 
0148 [meg_info] = vb_info_add_posfile_info(meg_info, posfile);
0149 % <at this moment> fields of meg_info which may be newly determined are ...
0150 %   Vcenter
0151 %   Vradius
0152 %   MRI_ID
0153 %   TransInfo
0154 
0155 
0156 % --- load calibrate and separate data
0157 [out_path] = vb_get_file_parts(out_file);
0158 [meg_info] = vb_ykgwfile_load_data(ykgwfile, meg_info, out_path);
0159 % <at this moment> fields of meg_info which may be newly determined are ...
0160 %   MEGch_id
0161 
0162 
0163 % --- convert information struct ---> MEGinfo
0164 [MEGinfo] = vb_meginfo_convert_raw2vbmeg(meg_info);
0165 
0166 
0167 % --- affine transform 'pick', 'Qpick', 'ref_pick', 'ref_Qpick'
0168 if ~isempty(ref_pick) && ~isempty(ref_Qpick)
0169   [ref_pick, ref_Qpick] = ...
0170     vb_meg_transform_coordinate(ref_pick, ref_Qpick, CoordType, posfile);
0171 end
0172 
0173 [pick, Qpick, CoordType] = ...
0174   vb_meg_transform_coordinate(pick, Qpick, CoordType, posfile);
0175 
0176 % store data
0177 % !!! if you use vb_save, it is very slower than using vb_fsave !!!
0178 Measurement = 'MEG';
0179 MEGinfo.Measurement = Measurement;
0180 PositionFile = posfile;
0181 bexp = [];
0182 bexp_ext = [];
0183 
0184 vb_fsave(out_file, 'pick', 'Qpick', ...
0185   'ref_pick', 'ref_Qpick', 'CoordType', ...
0186   'Measurement', 'PositionFile', ...
0187   'MEGinfo', 'bexp', 'bexp_ext');
0188 
0189 fprintf('---\n--- make %s\n---\n', out_file);
0190 return;
0191 %
0192 % --- END OF MAIN PROCEDURE -------------------------------------------------- %
0193 
0194 % --- INNER FUNCTIONS -------------------------------------------------------- %
0195 %
0196 % --- inner_check_arguments()
0197 %
0198 function [proj_root, meg_parm, ykgwfile, posfile, outfile, meginfo] = ...
0199    inner_check_arguments(proj_root, meg_parm)
0200 func_ = mfilename;
0201 
0202 const = vb_define_yokogawa;
0203 
0204 % --- check parameters
0205 if isempty(proj_root)
0206   error('(%s)proj_root is a required parameter', func_);
0207 end
0208 
0209 if isempty(meg_parm)
0210   error('(%s)meg_parm is a required parameter', func_);
0211 end
0212 
0213 % --- check fields of file
0214 if ~isfield(meg_parm, 'yokogawa_file')
0215   error('(%s)yokogawa_file is a required field of meg_parm', func_);
0216 end
0217 
0218 if ~isfield(meg_parm, 'pos_file')
0219   meg_parm.pos_file = '';
0220 %   error('(%s)pos_file is a required field of meg_parm', func_);
0221 end
0222 
0223 % --- check files
0224 if exist(meg_parm.yokogawa_file, 'file') ~= 2
0225   error('(%s)cannot find yokogawa_file : %s', func_, meg_parm.yokogawa_file);
0226 end
0227 
0228 if exist(meg_parm.pos_file, 'file') ~= 2
0229   fprintf('--- (%s)pos_file is invalid in meg_parm\n', func_);
0230   meg_parm.pos_file = '';
0231 %   error('(%s)cannot find pos_file : %s', func_, meg_parm.pos_file);
0232 end
0233 
0234 ykgwfile = meg_parm.yokogawa_file;
0235 posfile  = meg_parm.pos_file;
0236 
0237 % --- MEGinfo
0238 meginfo = [];
0239 
0240 % --- EEG GAIN
0241 if isfield(meg_parm, 'ex_ch_gain')
0242   meginfo = vb_meginfo_set_extra_ch_gain(meginfo, meg_parm.ex_ch_gain);
0243 else
0244   meginfo = vb_meginfo_set_extra_ch_gain(meginfo, []);
0245 end
0246 
0247 % --- OUTPUT FILE
0248 outfile = [proj_root filesep meg_parm.meg_file];
0249 
0250 % --- SAVING SPECIFICATION
0251 DEFAULT_PRECISION = 'float64';
0252 
0253 real_dir = '';
0254 
0255 % --- check and fill saveman if necessary
0256 if ~isfield(meg_parm, 'saveman') ...
0257   || isempty(meg_parm.saveman)
0258 
0259   [DEFAULT_DATA_DIR, real_dir] = vb_device_make_data_dir(outfile);
0260   meg_parm.saveman.data_dir = DEFAULT_DATA_DIR;
0261   meg_parm.saveman.precision = DEFAULT_PRECISION;
0262 
0263 elseif ~isfield(meg_parm.saveman, 'data_dir') ...
0264   || isempty(meg_parm.saveman.data_dir)
0265 
0266   [DEFAULT_DATA_DIR, real_dir] = vb_device_make_data_dir(outfile);
0267   meg_parm.saveman.data_dir = DEFAULT_DATA_DIR;
0268 
0269 elseif ~isfield(meg_parm.saveman, 'precision') ...
0270   || isempty(meg_parm.saveman.precision)
0271 
0272   meg_parm.saveman.precision = DEFAULT_PRECISION;
0273 end
0274 
0275 if isempty(real_dir)
0276   base_dir = vb_get_file_parts(outfile);
0277   real_dir = [base_dir '/' meg_parm.saveman.data_dir];
0278 end
0279 
0280 % --- check real directory
0281 if exist(real_dir, 'dir') ~= 7
0282   vb_mkdir(real_dir);
0283 end
0284 
0285 meginfo.saveman = meg_parm.saveman;
0286 
0287 if isfield(meg_parm, 'memory_max') && ~isempty(meg_parm.memory_max)
0288   meginfo.memory_max = meg_parm.memory_max;
0289 else
0290   meginfo.memory_max = const.DEFAULT_MEMORY_MAX;
0291 end
0292 return;
0293 %
0294 % --- end of inner_check_arguments()
0295 %
0296 % --- END OF INNER FUNCTIONS ------------------------------------------------- %
0297 
0298 %--- END OF FILE ---%

Generated on Tue 27-Aug-2013 11:46:04 by m2html © 2005