=====  VBMEG リリースノート

バージョン：0.5-1.a.0
CVSタグ：version_0_5_1_a_0

=====  CVS情報

CVSROOT
  :pserver:username@lobule2:/home/cbi/rhayashi/cvs_repository/vbmeg_genesis

===== 前バージョン(0.5-0.b.0)からの修正・追加項目一覧

(★)は関数インタフェイスの変更、パラメータの変更、ファイルフォーマットの変更

■項目一覧
1.brain
  1-1.(★)job_brainへの機能追加とそれに伴うatlas2vbツール関数群の仕様変更
2.fmri
3.meg
  3-1.(★)megmatファイル書式変更
  3-2.load_meg関数EEG対応
  3-3.(★)EEGデータのcalibration機能追加
  3-4.(★)12/16bit横河MEGデータに対応
4.basis
  4-1.(★)job_leadfield再構成
  4-2.(★)EEGリードフィールド三層ヘッド対応
  4-3.多層境界面モデルによる境界面係数行列の補正関数修正
5.bayes
  5-1.(★)空間平滑化フィルタの半値幅と最大半径を与えられるようにする修正
  5-2.MEG電源推定プログラム仕様変更
6.current
  6-1.電流計算時に空間平滑化で拡張された領域を含めないようにする修正
  6-2.job_current, job_current_trにcurrent_parmを保存する処理を追加
  6-3.電流方向計算関数の修正
7.GUI
  7-1.(★)job_plot_megの機能追加
  7-2.推定GUIの変更(Rfilter, Rfilter_globalの書式変更対応)
  7-3.job_select_areaの仕様変更
  7-4.(★)project_mgr機能追加
  7-5.job_plot_currentmapの電流時系列表示に関する修正
  7-6.brainGUIのFreeSurfer対応
  7-7.電流計算用のGUIを追加
  7-8.Activity map 編集用GUI(job_edit_act)を追加
  7-9.MRI点の選択保存GUIを追加
8.その他変更
  8-1.(★)皮質表面や頭蓋表面のスライス断面表示方法の変更
  8-2.面平滑化アルゴリズムの変更
  8-3.(★)Curry データからMatlab面情報作成の高速化
  8-4.atlas関連の修正
  8-5.(★)change_file_basename()関数の仕様変更
  8-6.(★)ダイポール推定関連モジュールの修正
  8-7.plot関数の追加・修正
  8-8.モルフォロジーで面を拡張・平滑化後, バネモデルで表面平滑化する関数追加
  8-9.頂点リストから連結領域を取り出す関数追加
  8-10.get_class_color()関数の追加
  8-11.load_analyze_noflip()関数の追加
  8-12.使用可能なメモリ空間の表示ツール(for MATLAB6.5)追加
  8-13.ダイポール推定関連モジュールの追加
  8-14.MNIテンプレート画像追加
  8-15.MEG/EEGベースライン補正ユーティリティ関数の新規作成
  8-16.meg.matファイル結合関数の新規作成
  8-17.関数plot_brain_inflate_new.mの追加
  8-18.surface, maskデータの処理関数追加・修正
  8-19.標準脳皮質ラベルを個人脳に写像する関数群を追加
  8-20.座標系変換関数追加
  8-21.グラフィックスユーティリティ関数追加
  8-22.stack関数追加
  8-23.(★)dipole関数修正
  8-24.拡張ダイポールモジュール追加
  8-25.(★)load_cortex()改修
  8-26.HEAD-MATファイルとheadデータ操作関数追加
  8-27.無効な座標値を操作する関数群を追加
  8-28.eeg位置合わせ関数の追加
  8-29.Script-Mファイルディレクトリの作成
  8-30.文字列配列比較関数の追加
  8-31.転置関数の追加
  8-32.2次元近傍点サーチ関数追加
  8-33.surf_file, analyze_fileからbrain,area,actfileを作成する関数追加

9.バグ修正
  9-1.ポリゴンモデル連結面取り出し関数のバグ修正
  9-2.vbmeg_current_reconstruct_tr.m のディレクトリ削除処理を除去
  9-3.job_plot_currentmap, job_edit_areaの脳モデル表示に関する不具合修正
  9-4.job_preprocess_meg3のバグ修正
  9-5.job_view_cortexバグ修正
  9-6.surface, maskデータ処理関数のバグ修正
  9-7.推定GUIの不具合修正
  9-8.job_plot_currentmapの不具合修正

===== 詳細

■項目詳細
1.brain
  1-1.(★)job_brainへの機能追加とそれに伴うatlas2vbツール関数群の仕様変更

    brain_parm.spm_normalization_fileが指定された時
     1. job_brainにMNI座標、Talairach座標を計算する機能を追加した。
     2. 解剖分割エリアファイルを生成する機能を加えた。

    [変更]
      job/
        job_brain.m, 
      tool_box/atlas2vb/
        calc_mni_coord.m,
        atlas2vb.m,
        atlas2vb_aal.m,
        script_atlas2vb.m, 
      brain/
        make_brain_data.m,
        make_brain_data2.m
    [追加]
      tool_box/atlas2vb/
        spm_dctmtx.m

    [パラメータ変更]
       brain_parm
            : brain_parm.spm_normalization_file(オプショナル)を追加。
       atlas2vb.m, atlas2vb_aal.m, calc_mni_coord
            : parm.save_xyzfile  を廃止
    [ファイル書式変更]
       brainfile:
         変数  Vmni, Vtal, derrを追加。
         Vmni,Vtalは、個人脳皮質頂点におけるMNI座標とTalairach座標。
         derrは、個人脳皮質頂点と標準脳のボクセルの最近傍点との距離。
         それぞれ単位はメートル。
    [備考]
       MNI座標やTalairach座標は、以前の別ファイル(xyzfile)に書き出して
       いた形式から、brainfileに変数として書き込むようになったので、
       atlas2vb ユーザーは注意すること。

2.fmri
3.meg
  3-1.(★)MEGinfoの書式変更
    - MEGinfo.MEGch_name, MEGinfo.EEGinfo.*_ch_nameに
      実際のセンサ番号より+1した値が入っていたのを修正した。
    - リファレンスセンサ情報をeegデータとして保存するようにした
      (追加)
        MEGinfo.EEGinfo.refmg_ch_name
                       .refmg_ch_ix
    - MEG-MATファイル(.meg.mat)に、Measurementという変数を追加した。
        Measurement = 'MEG';

    [修正]
      device/meg/yokogawa
          load_yokogawa_meg_header.m make_yokogawa_meg_data.m 
      device/meg/yokogawa/readfunc
          read_yokogawa_channel_def.m read_yokogawa_data.m

    [関数インタフェイスの変更]
      ・戻り値にch_nameを追加
      [channel_def] = read_yokogawa_channel_def(fid);
                      ↓
      [channel_def, ch_name] = read_yokogawa_channel_def(fid);

  3-2.load_meg関数EEG対応
    load_meg_data および load_meg_info 関数にeeg-mat(.eeg.mat)ファイルを
    渡せるよう仕様追加した。
    [修正]
      common/loadfunc/
        load_meg_data.m, load_meg_info.m
    [追加]
      common/loadfunc/
        load_measurement_info.m
    [備考] load_meg_infoでは、eeg-matファイルを与えてもMEGinfo形式で値を返す。

  3-3.(★)EEGデータのcalibration機能追加
     MEGでEEGのデータを記録する際、データにはそのゲイン情報が渡らないため、
    電圧値に戻すことができない。そこで、ゲイン情報を入力するためのGUIを
    作成し、yokogawa用MEGデータインポートGUIから、ゲイン情報を入力できるようにした。
    meg_parm.eeg_gainに対してチャンネル名とゲイン値(uV/V)を指定することで、
    make_meg_data内でデータのcalibrationを行う。
    
    [修正・追加]
     ■データ取得・処理部
      template/
        Modified Files:
          set_yokogawa_meg_parm_test.m set_yokogawa_meg_parm.m
      device/meg/yokogawa
        Modified Files:
          (★)load_yokogawa_meg.m load_yokogawa_meg_header.m 
          make_yokogawa_meg_data.m
        Added Files:
          calibrate_yokogawa_eeg_data.m define_yokogawa.m 
          load_yokogawa_calibrated_eeg_data.m load_yokogawa_eeg_header.m 
      device/meg/yokogawa/readfunc
        Modified Files:
          read_yokogawa_data.m

      ■ゲイン入力GUI
       Added Directory:
          gui/eeg_gain_input
        Added Files:
          gui/eeg_gain_input
          eeg_gain_input.fig eeg_gain_input.m

      ■yokogawa用MEGデータインポートGUI
        preAnalysis/callback_func
          Modified Files:
            pa_yokogawa_meg_callback.m pa_yokogawa_meg_gui_util.m
        preAnalysis/create_func
          Modified Files:
            pa_yokogawa_meg.fig 
        preAnalysis/init_func
          Modified Files:
            pa_init_yokogawa_meg_gui.m
    [パラメータ変更]
      meg_parm.eeg_gainを追加。
        eeg_gain(:, 1) = Nx1 : 調整するEEGチャンネル番号(MEGのチャンネル番号)
        eeg_gain(:, 1) = Nx1 : ゲイン値(単位:uV/V)
    [ファイル書式変更]
      MEG-matファイル(.meg.mat)内の変数：eegについて、
      以下の通り変更になった
      (今まで)
         デジタル値として記録。
      (これから)
        ゲイン調整を行わなかった場合：MEGに入力された電圧値(アナログ値)をボルトで保存
        ゲイン調整を行った場合:EEGの電圧値をボルトで保存

  3-4.12/16bit横河MEGデータに対応
    12bit/16bit横河MEGデータファイルを読み込めるように修正した。
    [変更]
      device/meg/yokogawa/
        define_yokogawa.m
        load_yokogawa_calibrated_eeg_data.m 
        (★)load_yokogawa_meg.m 
    [追加]
      device/meg/yokogawa/yokogawa_lib
        GetMeg160ADbitInfoM.p

4.basis
  4-1.(★)job_leadfield再構成
      ・リードフィールド計算関数の構成を見直した。
      ・EEG３層球モデルを使う時に半径の値をチェックして
        条件を満たす半径を使う。
      ・job_leadfield_eeg_bemがエラーになる
    [追加]
      leadfield/
          job_leadfield_meg_sphere.m
          job_leadfield_meg_bem.m
          job_leadfield_meg_harmonics.m
          job_leadfield_eeg_sphere.m
          job_leadfield_eeg_bem.m
          lf_preprocess.m
      leadfield/head
          calc_consistent_eeg_radius.m
    [修正]
       旧 job_leadfield を job/replaced/job_leadfield_old として移動
       旧 job_leadfieldから呼び出していた次の関数を leadfield/relaced/へ移動
          prepare_lead_field.m
          prepare_bem.m
          calc_lead_field.m

    [ファイル書式変更]
       MEG球面関数計算後に更新されるMEG-MATファイルにhead_file情報を追加。
       追加先は MEGinfo.SPHinfo です。

       <<新 MEGinfo.SPHinfo>>
       ------------------------------------
        harmo_coef: [1295x416 double]
        func_order: 35
            radius: 0.0796
         head_file: 'sample.head.mat'        <<< 新規追加フィールド
        ------------------------------------

  4-2.(★)EEGリードフィールド三層ヘッド対応
    EEGリードフィールド計算処理(EEG-SPHERE, EEG-BEM)に、headデータとして三層モデルを与える。
    [修正]
      leadfield/
          prepare_lead_field.m prepare_bem.m
      common/loadfunc/
          load_sensor.m
      template/
          set_basis_parm.m, set_basis_parm_test.m
    [追加]
      common/loadfunc/
          load_device.m load_eeg_data.m load_eeg_sensor.m
      device/eeg/biosemi/ (new directory)
          load_eeg_data_biosemi.m load_eeg_sensor_biosemi.m
      common/utility/
          util_get_file_body.m util_distance_of_points.m
          util_check_head_shell_info.m
      leadfield/head/ (new directory)
          util_calc_head_radius.m util_make_joined_head_file.m
          util_make_omega_file.m, util_get_specified_layer_headinfo
      device/eeg/
          eeginfo_get_sensor_position.m eeginfo_set_sensor_position.m
    [ファイル書式変更]
       '.eeg.mat'ファイル追加

  4-3.多層境界面モデルによる境界面係数行列の補正関数修正
    単層ヘッドにも対応した。
    [修正]
      leadfield/eeg/
        bem_matrix.m

5.bayes
  5-1.(★)空間平滑化フィルタの半値幅と最大半径を与えられるようにする修正
    空間平滑化フィルタの半値幅と最大半径を外から与えられるようにした。
    Rfilt がスカラーの時半値幅
    Rfilt=[R, Rmax] の形で最大半径を与える

    [修正]
      estimation/bayes
          prepare_leadfield.m
      template/
          set_bayes_default_parameters.m 

    [パラメータ変更]
      (変更前)  bayes_parm.Rfilt        = 6e-3;
                bayes_parm.Rfilt_global = bayes_parm.Rfilt
      (変更後)  bayes_parm.Rfilt        = [6e-3, 6e-3];
                bayes_parm.Rfilt_global = 0;

  5-2.MEG電源推定プログラム仕様変更
      従来のプログラムでは、事前電流分散を計算する際、パラメータによって
      focal modelとglobal modelのいずれかが用いられていた。しかし、focal 
      modelのダイポール数がfMRI情報によって変わるため、常にglobal modelを
      用いるようにして、推定結果が安定するようにした。また、事前電流分散を
      計算するためにVBアルゴリズムを実行する際、これまでに用いていた高速
      学習則を止めて、通常学習則のみ使用するようにした。
    [変更]
      job/
        job_vb.m
      estimation/bayes/
        vb_baseline_variance_acquisition.m 

6.current
  6-1.電流計算時に空間平滑化で拡張された領域を含めないようにする修正
    VB推定時にエリア情報で指定された頂点のみを計算
    [修正]
      estimation/bayes/
          vb_load_result.m

  6-2.job_current, job_current_trにcurrent_parmを保存する処理を追加
    プロジェクトファイル(.prj.mat)にcurrent_parmを保存する処理を追加した
    [修正]
      job/
          job_current_tr.m job_current.m

  6-3.電流方向計算関数の修正
    xxが空行列でLmode=3の際の挙動が変更になった
    [V,xx] = current_vector(V,xx,Lmode)

    if xx == [] &  Lmode = 3 
        xx(n       ,:) =  [1 0 0]
        xx(n + NV  ,:) =  [0 1 0]
        xx(n + 2*NV,:) =  [0 0 1]

    [修正]
      leadfield/
          current_vector.m

7.GUI
  7-1.(★)job_plot_megの機能追加
    - 時間窓をグラフ上で選択し、関数呼び出し元にindexを返す機能を実装した。
    - 時系列データの描画を多少早くした。
    - 表示されるMEG等磁場線図表示の見栄えを修正した。
      (MATLAB ver.6/7の両方をサポートする。)


    [関数インタフェイスの変更]
      (旧)                            job_plot_meg(megfile, mode)

      (新)[twin_meg, gui_cancelled] = job_plot_meg(megfile, mode, twin_lim, twin_ini)

      twin_meg : 選択された時間窓(MEGdataのsampleindex)
      gui_cancelled : true/false(closeボタンを押下するとtrue。それ以外ではfalse)

      twin_lim : 選択可能な時間窓の範囲(MEGdataのsampleindexで指定する)
      twin_ini : 最初から選択されている範囲を指定する(MEGdataのsampleindexで指定する)

    [修正]
      job/job_plot_meg/
          job_plot_meg_update_timecourse.m 
          job_plot_meg_update_spatialpattern.m 
          job_plot_meg_change_trial.m job_plot_meg.m job_plot_meg.fig 
    [追加]
      job/job_plot_meg/
          define_job_plot_meg_const.m

  7-2.推定GUIの変更(Rfilter, Rfilter_globalの書式変更対応)
    bayes_parm.Rfilter, Rfilter_globalの書式変更に対応した。
    [修正]
      gui/bayes_parm_editor
          bayes_parm_editor_advanced.fig bayes_parm_advanced_gui.m 

  7-3.job_select_areaの仕様変更
    job_select_areaの*.bayes.mat読み込みを、*.curr.mat読み込みに変更した。
    (ファイルフォーマットが変更になり、読み込むファイルが変更になった)
    また、TimeWindowを指定できるようにした。
    [追加]
      job/job_select_area
          select_time_window_gui.m, select_time_window.m,
          select_time_window_gui.fig
    [変更]
      plotfunc/
          select_area.m

  7-4.(★)project_mgr機能追加
    1.前処理GUI,推定GUI,電流計算GUIにコメント入力機能を実装。
    2.project_mgrから以下のアプリケーションを起動できるようにした。
          job_view_cortex       脳モデル表示
          job_plot_meg          MEG時系列・等高線表示
          job_plot_currentmap   推定電流表示
          job_edit_area         エリア情報の作成・修正
          job_select_area       エリア情報の作成・修正
          job_edit_act          Activity mapの編集
      起動方法
      (a)project_mgrのHistory表示行を1つ選んで右クリックして
         表示されるメニューから、アプリケーション名を選択する
      (b)project_mgrのToolsメニューからアプリケーションを選択し、
         表示されたダイアログに必要なファイルを選択して入力、OKボタンを押下する。
    [追加]
       gui/project_mgr/tool_launcher(ツール起動用GUI)
    [変更]
       ・コメント入力機能追加
         gui/bayes/parm_editor(推定GUI)
            /current_gui(電流計算GUI)
            /preAnalysis(前処理GUI)
       ・アプリケーションとの連携機能追加
         gui/project_mgr
    [パラメータ変更]
      GUIが生成するパラメータのフィールドに以下を追加

      keyword = ファイル名自動生成に使用
      comment = 処理に関するコメント保存に使用

      brain_parm.keyword
                .comment
      fmri_parm.comment
      meg_parm.keyword
              .comment
      basis_parm.keyword
                .comment
      bayes_parm.comment
      current_parm.comment

  7-5.job_plot_currentmapの電流時系列表示に関する修正
    - patch_norm=ONの場合に、電流時系列の単位表示を変えるようにした。
    - 従来は、選択した空間窓(選択した頂点の周辺)の電流強度の総和を
      表示していたが、平均を表示するように変更した。
    - 関数load_current()を用いるように、プログラムを修正した。
    [修正]
      job/job_plot_currentmap/
          job_plot_currentmap.m
          job_plot_cmap_update_timecourse.m

  7-6.brainGUIのFreeSurfer対応
    brainのGUIにFreeSurferのファイルを指定する機能を追加した。
    [修正]
      gui/preAnalysis/create_func/
          pa_brain.fig
      gui/preAnalysis/init_func
          pa_init_brain_gui.m 
      gui/preAnalysis/callback_func/
          pa_brain_callback.m pa_brain_gui_util.m 

  7-7.電流計算用のGUIを追加
    ・電流計算を行うGUIを追加しました。 
    ・vbmeg_current_reconstruct_tr.mで行われているディレクトリ削除処理は 
      誤ったディレクトリを指定した際に危険なため行うため、消去しました。
    [修正]
      gui/project_mgr
          project_mgr.m project_mgr.fig project_file_mgr.m
    [追加]
      gui/current_gui
          current_gui.m current_gui.fig

  7-8.Activity map 編集用GUI(job_edit_act)を追加
    Activity mapを編集するためのユーティリティjob_edit_actを追加。
    活動マップに対する二種類の平滑化(ガウス関数、ステップ関数)を実装。
    [追加]
      job/job_edit_act以下の関数
      brain/
          step_filter.m
    [備考]
      未実装の機能がありますが、ある程度の編集作業はできる状態。
      job_edit_act_spatial_gauss_filter.mは、将来、汎用的な関数に置き換える。

  7-9.MRI点の選択保存GUIを追加
    analyzeファイルを読み込んでMRIスライスを表示し、
    マウスで任意の点を選択して、その座標値をファイル保存するGUIを追加。
    [追加]
      tool_box/mri_toolbox/mri_point_select/
                                           /mps_pointlist
                                           /mps_fileio
                                           /analyze_info

8.その他変更
  8-1.(★)皮質表面や頭蓋表面のスライス断面表示方法の変更
    皮質表面や頭蓋表面の形をチェックするために
    MRIスライス画像上に面の断面を表示する関数を作った
    (注：これまでは、スライスの幅に入る点を表示していた)
    これに伴い、皮質表面や頭蓋表面をスライス表示するこれまでの関数を修正した。
    [修正]
      plotfunc/
          plot_slice_fit.m plot_slice.m plot_fit_vivid.m plot_fit_scan.m 
          plot_fit.m
      plotfunc/check_model/
          check_brain_model.m
    [関数インタフェイスの変更]
        plot_slice( B, V, zindx, vertex_mode, Nsubfig, Msize)
                                 ↓
        plot_slice( B, V, zindx, xymode, Nsubfig, Msize)
    [備考]
        check_brain_modelが変更になっているので、job_brain抽出後の画面が前
        バージョンと異なる

  8-2.面平滑化アルゴリズムの変更
    [修正]
      common/boundary/
          surf_smooth_fit.m surf_smooth.m
  8-3.(★)Curry データからMatlab面情報作成の高速化
      create_curry_patchを使用して、read_curry_surfaceを高速化。

    [関数インターフェイスの変更]

      (変更前)[F,V,xx] = read_curry_surface(curryfile,avwfile)
      (変更後)[F,V,xx,Ninfo] = read_curry_surface(curryfile)

      (変更前)job_curry2vbmeg(curryfile,avwfile,headfile)
      (変更後)job_curry2vbmeg(curryfile,headfile)

    [修正]
      job/
          job_curry2vbmeg.m
      leadfield/curry/
          read_curry_surface.m

    [追加]
      leadfield/curry/
          create_curry_patch.m

  8-4.atlas関連の修正
    1.エリアファイルを保存するときに問い合わせないようにした
    2.アトラスラベルの穴や小島を修正
    3.バグ修正
    4.皮質アトラス表示の追加と修正
      plot_atlas(brainfile,atlasfile,atlas_id)
      plot_atlas2(brainfile,Atlas)
      plot_atlas_area(brainfile,Atlas)

    [修正]
      tool_box/atlas2vb/以下(多数のため記述省略)

  8-5.(★)change_file_basename仕様変更
    [関数インターフェイスの変更]
        (旧)[fname ,basename, ext] = change_file_basename(fold, addname)
        (新)[fname ,basename, ext] = change_file_basename(fold, addname, ext)

    [修正]
      common/utility/
          change_file_basename.m

    [関数仕様]
      change basename of file for predefined extension
       [fname ,basename, ext] = change_file_basename(fold, addname)
       [fname ,basename, ext] = change_file_basename(fold, addname, ext)
      --- Input
      fold    : old file name = [ old_basename  extension ]
      addname : this string is added to the basename of the file name
      --- Optional input
      ext     : extension
         If this variable is not specified, 
         predefined extensions is used
      --- Output
      basename = [ old_basename  addname ]
      fname    : new file name = [ basename  extension ]
      ext      : extension

  8-6.ダイポール推定関連モジュールの修正
    皮質上の拘束条件を付けないダイポール推定法
    MATLABの非線形最適化関数使用
    ダイポール数は任意に指定できる
    初期値として与える点の数になる
    大脳皮質電流推定のためのサルバスモデルによる誤差評価と
    眼球アーチファクトや心拍アーチファクトを推定するための
    ビオサバール方程式を使う誤差評価を選べる
    サンプルスクリプト job_test_dipole.m を参照

    [変更]
      estimation/dipole/
          (★)dipole_search.m
              ダイポールの位置探索関数
          (★)dipole_current.m, (★)dipole_basis.m
              ダイポールの位置推定後電流時系列計算
          (★)dipole_error.m 
              眼球アーチファクトや心拍アーチファクトを推定するための
              ビオサバール方程式を使う誤差評価

  8-7.plot関数の追加・修正
    [追加]
      plotfunc/
        plot_2d_image.m
        plot_3d_image.m
        plot_cross_section.m
          get_cross_section.m
        plot_slice_surf.m
        plot_slice_head.m
        plot_head_surf.m
        plot_cross_section.m
        plot_compare_brain.m
        plot_boundary_edge.m
        plot_brain_mask.m
    [修正]
      plotfunc/
        plot_slice_fit.m    エラーチェックを追加
        plot_marker.m       マーカー名を追加プロットする機能を追加
        
  8-8.モルフォロジーで面を拡張・平滑化後, バネモデルで表面平滑化する関数追加
    [追加]
      common/boundary/
        surf_smooth_expand.m

  8-9.頂点リストから連結領域を取り出す関数追加
    [追加]
      common/boundary/
        connected_vertex.m

  8-10.get_class_color()関数の追加
    [追加]
      common/utility/
        rand_index.mat get_class_color.m 
    [関数仕様]：
      Make color map for class label
       cmap = get_class_color(Nclass)
      --- Input
      Nclass : # of class
      --- Output
      cmap : colormap matrix for class plot
           : [Nclass x 3]

  8-11.load_analyze_noflip()関数の追加
    [追加]
      common/loadfunc/
        load_analyze_noflip.m
    [関数仕様]
      load analize image without L-R flip
      Use to read Right-hand analyze image for plot
       [B, Vdim, Vsize] = load_analyze_noflip(analyzefile)
      --- Input
      analyzefile - Analyze filename 
      --- Output
      B     : 3D image data  [Xdim, Ydim, Zdim ]
      Vdim  : image size  [Xdim  Ydim  Zdim ] (voxels)
      Vsize : voxel size  [x y z ] (mm)

  8-12.使用可能なメモリ空間の表示ツール(for MATLAB6.5)追加
    使用可能なメモリ空間の表示ツール(for MATLAB6.5)追加
    [追加]
      common/utility/
        dumpmemmex.dll
    [備考]
      MATLAB7以降はfeature('Dump')コマンドを使う。

  8-13.ダイポール推定関連モジュールの追加
    [追加]
      leadfield/sphere/
        sarvas_sensor.m, sarvas_basis.m
              ダイポール推定用に作った球モデルのリードフィールド計算
      vbmeg/estimation/dipole
        dipole_error_sarvas.m
              大脳皮質電流推定のためのサルバスモデルによる誤差評価

    [備考]
      参照：9-6.ダイポール推定関連モジュールの修正

  8-14.MNIテンプレート画像追加
    標準脳画像を追加
    [追加]
      tool_box/atlas2vb/MNI_atlas_templates
        ch2bet.img    --- 個人脳を27回スキャンした平均画像(頭蓋付き)
        ch2bet.hdr
        ch2.img       --- 個人脳を27回スキャンした平均画像(頭蓋無し)
        ch2.hdr
        brain_mask.mat--- 標準脳の部位別マップデータ。

  8-15.MEG/EEGベースライン補正ユーティリティ関数の新規作成
    横河MEG Laboratoryでは、加算平均前のデータに対する
    ベースライン補正ができない。そのため、VBMEGでベースライン補正を
    行うためのユーティリティ関数を新規作成した。
    [追加]
      common/utility/corr_base.m
    [備考]
      現在は、指定した時間窓の時間平均による補正のみサポート。

  8-16.meg.matファイル結合関数の新規作成
    複数の.meg.matファイルを結合するためのユーティリティ関数を新規作成した。
    [追加]
      common/utility/combine_meg_files.m
    [備考]
      現在は、VBMEG ver 0.50β0のファイルフォーマットのみサポート。
      ファイルフォーマットが変われば、この関数も修正する必要がある。

  8-17.関数plot_brain_inflate_new.mの追加
    従来のplot_brain_inflate.mは内部でファイルからデータを読み込んでおり、
    効率が悪かった。そのため、必要なパラメータを見直し、新しい汎用プロット
    関数としてplot_brain_inflate_new.mを作成した。
    現状では、皮質モデル表示プログラムが、それを呼び出す関数内に書かれて
    いる場合が多い。

    [追加]
      plotfunc/plot_brain_inflate_new.m
    [備考]
      将来、この関数を使い、またplot_brain_inflate.mを
      この関数で完全に置き換えることを予定している。

  8-18.surface, maskデータの処理関数追加・修正
    表面形状編集処理の基本方針を大きく変更。下記に詳細を記述。
    [追加]
      job/
        job_import_cortex.m --- 
      common/boundary/
        boundary_edge.m  --- 曲面の境界を計算する
        close_surf.m     --- surfaceを閉じる
        close_line.m
        mask_to_surf_expand.m ---マスクデータを編集してsurfaceデータを作成
      common/morphology/
        smooth_cortex_LR.m    --- 皮質の皺を平滑化した平滑化皮質モデルを作成
        surf_to_filled_mask.m --- surfaceをマスクデータに変換
        get_3d_mask_point.m   --- マスクデータの指定スライスの点群を取得
        get_3d_mask_slice.m   --- マスクデータの指定スライスのマスク取得
        mask_image_size.m     --- 間引きステップに応じたマスクサイズを計算
        make_inner_sphere.m 

    [修正]
      job/
        job_smooth_cortex.m
        job_smooth_head.m 
      common/coordinate
        analyze_right_mm_to_spm_right.m
        analyze_right_to_spm_right.m
      common/morphology/
        smooth_cortex.m 
        cortex_fill.m
        remove_vertex_by_mask.m
        surf_extract.m
        trans_surf_to_vox.m
        trans_vox_to_surf.m 
      common/boundary
        get_boundary.m
        combine_surf.m
        surf_smooth_expand.m
        surf_smooth_fit.m 

    ■表面形状編集処理の基本方針

    １．皮質や頭蓋座標を読む時は必ず、直後にAnalize-Right-mmへ変換
        Analizeファイルを指定して trans_surf_to_vox で変換
        マスクイメージ作成は trans_surf_to_vox で求めた Dim を指定して作る
    ２．表面編集・マスクイメージ処理は Analyze_right [mm] 座標で行う
    ３．保存する時はSPM-Right-m に変換
        analyze_right_mm_to_spm_right で変換
    ４．Analizeファイル上にスライス表示をする時はAnalize-Right-voxelへ変換
        analyze_mm_to_analyze で変換
        Vana = analyze_mm_to_analyze(Vana,Vdim,Vsize)
        [B] = load_analyze_to_right(analyzefile);
        plot_slice_surf( B, Vana, F, zindx, 'z');
    ５．マスクイメージ上にスライス表示をする時は Voxel size の違いに注意
        [B] = surf_to_filled_mask(Vox, F, Dim, step)
        plot_slice_surf( B, Vox/step, F, zindx/step, 'z');

    ■ 表面座標−＞マスク座標変換: Spm_right [m] -> Analyze_right [mm]
    [Vox, Para] = trans_surf_to_vox(V, analyze_file, step)
    % Transform 3D surface coordinate to Analyze_right [mm] to make mask image
    % step  =  Voxel size of mask image [mm]
    % Vox    : voxel coordinate : Analyze_right [mm]
    % Para.Vdim   =  Voxel dimension of Analyze image
    % Para.Vsize  =  Voxel size of Analyze image [mm]
    % Para.vstep  =  Voxel size of mask image [mm] = step
    % Para.Dim    =  Dimension of mask image

    ■ マスク座標−＞表面座標変換: Analyze_right [mm] -> Spm_right [m]
    表面座標をファイルに保存する時は Spm_right [m] に変換
    V = analyze_right_mm_to_spm_right(Vox,Vdim,Vsize);

    ■ 表面編集処理は Analyze_right [mm] 座標に変換した後使う
    以下の全ての関数は V がAnalyze_right [mm] 座標であることを想定している

    --------------------------------------------------
    ■ Make smooth cortex from brain model
    [Vx,Fnew,xx,Vindx,Vinfo] = smooth_cortex(V, F, Para)

    --------------------------------------------------
    ■ Expand surface by morphology and smooth surface by spring model
    [V, F, xx, B] = surf_smooth_expand(V, F, xx, Para)

    --------------------------------------------------
    ■ Make filled mask image from surface cordinate
    [B] = surf_to_filled_mask(V, F, Dim, step, X0, Radius)

    --------------------------------------------------
    ■ 皮質面の内部を塗りつぶし３Dマスクパターンに変換
    皮質面は複雑なのでsurf_to_filled_maskでは内部を塗りつぶせない
    [B, XL, XR] = cortex_fill(V,F,step,Radius,LR_mode,Dim)

    --------------------------------------------------
    ■ Extract boundary surface from mask image
    [F, V, xx]  = surf_extract(B, step)

    ■ Fit surface to the boundary of mask
    [Vx, Fx, xx] = make_inner_sphere(V, Nvertex);     % 内接球面作成
    [Vx, Fx, xx] = surf_smooth_fit(Vx,Fx,xx, B, Para);% 境界面に膨張

  8-19.標準脳皮質ラベルを個人脳に写像する関数群を追加
    [追加]
      common/morphology/
        map_mask_image.m
        get_brain_mask.m
        make_upsample_vertex.m
        make_mask_from_vertex.m

  8-20.座標系変換関数追加
    [追加]
      common/coodinate/
        analyze_mm_to_analyze.m
        spm_right_to_analyze_right_mm.m
        analyze_to_analyze_mm.m

  8-21.グラフィックスユーティリティ関数追加
    Axes, Figureに含まれる指定した、グラフィックスオブジェクトの
    順序関係を変更する(最背面/最前面に移動する)関数。
    [追加]
      common/utility/
        gobject_send_to_back.m
        gobject_bring_to_front.m 

  8-22.stack関数追加
    Stack関数を追加した。スタックバッファを、メモリ上・ファイル上に
    配置することができる。大きなデータをスタックする場合は、ファイル上
    にスタックする。
    [追加]
      common/utility/stack
        stack_delete.m
        stack_get_length.m
        stack_new.m
        stack_pop.m 
        stack_push.m 
      common/utility/stack/tools/
        f_stack_delete.m f_stack_new.m f_stack_pop.m f_stack_push.m 
        m_stack_delete.m m_stack_new.m m_stack_pop.m m_stack_push.m 

    [使用例]
    data = 'test_data';
    % create stack(stack size=10, Memory stack)
    stk = stack_new(10, 'M'); 
    % push
    stk = stack_push(stk, data);
    % pop
    [stk, pop_data] = stack_pop(stk);
    % destroy stack(Don't forget)
    stack_delete(stk);

  8-23.(★)dipole関数修正
    現在のVBMEGのデータ構造に合うように修正
    [変更]
      leadfield/sphere/
        (★)dipole_gradio.m
      common/loadfunc
        load_basis_info.m 

  8-24.拡張ダイポールモジュール追加
    アーチファクト除去のため、拡張ダイポールの追加
    extra_dipole/ReadME.txt を見て下さい

    [追加]
      job/
        job_add_extra_dipole.m
        job_add_extra_basis.m 
      extra_dipole/
        ReadME.txt
        make_extra_basis.m
        job_add_extra_area.m 
        job_add_extra_act.m
        duplicate_extra_position.m 
        add_extra_brain.m
        add_extra_basis.m
        add_extra_area.m 
        add_extra_act.m
      template/
        set_extra_brain_parm.m
        set_extra_basis_parm.m

  8-25.(★)load_cortex()改修
    ・load_cortexのcoord_type引数に、次の二つの値を追加した。
       'Talairach'
       'MNI'
    ・ソースコードをcoord_typeによる分岐で明確にした。

    [変更]
      common/loadfunc/
        load_cortex.m
    [パラメータ変更]
      coord_type引数 - 既述
    [備考]
      動作確認は、次の三通りのみ。
      ・coord_typeに値を指定しない
      ・coord_type = 'Inflate'
      ・coord_type = 'Talairach'

  8-26.HEAD-MATファイルとheadデータ操作関数
    HEAD-MATファイルおよびその中身のデータを操作する関数を追加した。
    [追加]
      leafield/head/

  8-27.無効な座標値を操作する関数群を追加
    位置合わせ処理の過程で、無効な座標値が発生する場合がある。
    その無効な座標値を操作する関数群を追加した。
    [追加]
      common/coordinate/
        is_invalid_coordinate.m
        valid_coordinate_filter_decode.m 
        valid_coordinate_filter_encode.m

      default_param/
        INVALID_COORDINATE_3D.m
    [使い方]
      ・valid_coordinate_filter_encode と
        valid_coordinate_filter_decode との組合せで使用する
      ・有効な座標値のみを対象としたい処理を、この二つで挟む。

    <<適用例>>
    coord = digit.eeg_sensor.pos;
    [filt_spec] = valid_coordinate_filter_encode(coord);
    % filt_spec には、有効座標の抽出情報が入っている

    % 抽出した有効座標に処理を加える
    % ここでは、座標の追加削除は厳禁(後で無効座標を戻せなくなる)
    new_coord = filt_spec.valid_coord;
    new_coord(5,1) = 1.1;
    new_coord(5,2) = 1.2;
    new_coord(5,3) = 1.3;

    % filt_specの有効座標フィールドを加工後の座標と差し替える
    filt_spec.valid_coord = new_coord;
    
    [new_coord] = valid_coordinate_filter_decode(filt_spec);
    % new_coord は、無効座標＋加工後された有効座標

  8-28.eeg位置合わせ関数の追加
    [追加]
      job/job_vivid_dir/
        job_fit_eeg.m

  8-29.Script-Mファイルディレクトリの作成
    Sript-Mファイルディレクトリを作成し、VBMEG内のScript-Mファイルを
    scriptディレクトリへ移動した。
    [追加]
      script/
        curry_to_dicom.m
        demo_line.m
        demo_mri.m
        job_load_vivid.m 
        job_test_dipole.m
        job_vivid_marker.m
        script_atlas2vb.m
        set_current_V.m
        set_head_model.m 
        set_sphere_model.m
        test_berg.m
        test_morfology.m 
        proj_run.m 
    [削除]
      common/morphology
        test_morfology.m
      job/job_plot_currentmap_dir/
        job_plot_currentmap.m
      job/job_vivid_dir/
        job_load_vivid.m, job_vivid_marker.m
      template/
        proj_run.m
      leadfield/bem/
        set_head_model.m
      leadfield/curry/
        curry_to_dicom.m
      estimation/dipole
        job_test_dipole.m 
      tool_box/atlas2vb_dir/
        script_atlas2vb.m 
      tool_box/select3d_dir
        demo_line.m, demo_mri.m
      leadfield/eeg
        set_current_V.m, test_berg.m 
      leadfield/sphere
        set_sphere_model.m

  8-30.文字列配列比較関数の追加
    ２つのリストの照合結果をindexの組で返す
    [追加]
      common/utility/
        util_get_cross_checked_list.m

    [使用例]
      list_a , listb
      'aaa'    'ccc'
      'bbb'    'bbb'
      'ccc'    'aaa'
      'ddd'    'ddd'

      util_get_cross_checked_list(list_a, list_b);

      ans = [1 3;
             2 2;
             3 1;
             4 4]

  8-31.転置関数の追加
    [Nx1] or [1xN]の配列を入力すると、[1xN] or [Nx1]に変換する。
    
    [追加]
      common/utility/
        util_arrange_list.m

  8-32.2次元近傍点サーチ関数追加
    点群Aと点群Bを入力すると、点群Aの各点について、点群Bの中から
    最も近い点を探し出し、点群Bのindex番号を返す。
    [追加]
      common/coordinate/
        find_min_distance_2d.m

  8-33.surf_file, analyze_fileからbrain,area,actfileを作成する関数追加
    surf_file('V', 'F', 'xx', 'Xcenter')とanalyze_fileを入力すると、
    脳モデル平滑化を行い、brain_file, area_file, act_fileを出力する
    関数を追加した。
    [追加]
      job/
        job_import_cortex.m
      brain/
        get_cortex_info.m

9.バグ修正
  9-1.ポリゴンモデル連結面取り出し関数のバグ修正
    [修正]
      common/boundary
        separate_surf.m
        neighbor_index.m

  9-2.vbmeg_current_reconstruct_tr.m
     出力先ディレクトリが存在すれば、強制的に削除し、もう一度作成
     するという処理があったが、ディレクトリ名の指定違いがあると
     危険なため、ディレクトリがあっても、削除しないようにした。
    [修正]
      estimation/bayes/
          vbmeg_current_reconstruct_tr.m

  9-3.job_plot_currentmap, job_edit_areaの脳モデル表示に関する不具合修正
     job_plot_currentmap, job_edit_areaをMATLAB7以降で実行すると、
     脳モデルが表示されない不具合があった。
     axesに脳モデルをplotする前にaxis tightやaxis equalを実行する処理があり、
     その結果、axesのXLimMode, YLimMode, ZLimModeがMATLAB7ではmanualとなり、
     axesのサイズが固定されてしまっていた。結果、そのaxesに脳モデルをplot
     しても脳モデルが表示されていなかった。MATLAB6.5.1で表示できていたのは、
     plot前にaxis tightやaxis equalを実行しても、XlimMode, YLimMode, ZLimModeが
     autoのままだったため、plotすると必要なサイズ変更が行われ、正常に表示
     されていた。
    [修正]
      job/job_plot_currentmap
          job_plot_currentmap.m job_plot_cmap_update_spatialpattern.m 
      job/job_edit_area
          job_edit_area.m job_edit_area_update_spatialpattern.m

  9-4 job_preprocess_meg3のバグ修正
    1.EOGチャネルを参照するのにMEGinfo.MEGch_idを使用していたのをMEGch_nameに変更． 
    2.ドリフト除去方法指定パラメタ（parm.driftremovalmode）に'quodra'（typo）を
      指定するところを'quadra'に変更（'quodra'も従来どおり使用可）．
      さらに，不正パラメタを指定するとエラーを出力するよう変更．
    3.すべてのTrial/sensorがrejectされた場合の対応（エラー出力）．
    4.ファイル名入力ダイアログでキャンセルした場合の対応（エラー出力）．
    [修正]
      job/
        job_preprocess_meg3.m
  9-5.job_view_cortexバグ修正
    変数'Area'が関数areaとバッティングしてエラーになるバグを修正
    [変更]
      job/
          job_view_cortex.m
  9-6.surface, maskデータ処理関数のバグ修正
    マイナーバグ修正
    [修正]
      common/morphology/
        flood_fill_3d.m
        face_to_mask.m
        erosion_3d_int.m
        erosion_3d.m 
        dilation_3d_int.m
        dilation_3d.m 
  9-7.推定GUIの不具合修正
    MATLAB6.5.1(Linux)で推定GUIを使用すると、Advanced parameter画面の
    basisfile_global選択ダイアログにフォーカスが当たらず、ファイルを
   選択することができなかった。よって、Advanced parameter画面を
   非モーダルとした。その結果、Advanced parameter画面表示中に
   Basic parameter画面を操作できるようになり、以下の動作を追加した。
    1.Basic parameterのareaファイル、basisファイルを変更すると、
      即座にAdvanced parameter画面へ反映する。
    2.ExecボタンやLoad, Saveボタンが押下された場合は、プログラムで
      Advanced parameterのOKボタンを押下したものとして画面を閉じ、
      処理を実行する。

   [変更]
      gui/bayes_parm_editor/
        bayes_parm_editor_advanced.fig
        bayes_parm_editor.m
        bayes_parm_basic_gui.m
        bayes_parm_advanced_gui.m

  9-8.job_plot_currentmapの不具合修正
   "print temporal pattern"や"print spatial pattern"を使うと、
   アプリケーションが閉じてしまう不具合を修正した。
   [変更]
     job/job_plot_currentmap_dir/
       job_plot_cmap_print_temporalpattern.m 
       job_plot_cmap_print_spatialpattern.m 
   
