Fiff2MatFileの説明

Fiff2MatFileはニューロマグ社のファイルFIFF fileを米国MathWorks社製信号処理ソフトMatlabのMAT fileに変換するソフトです。 Microsoft Windows XPのみで動作確認しています。得られた変数について簡単に説明します。ただし ソフトを使用して生じたいかなる結果に対しても当方は責任を負いません。自己責任で使用してください。
Fiff2MatFileの活用例は 国立精神・神経センター武蔵病院 金子裕先生のホームページを参照ください。


evoked dataの場合

evoked dataを読むとWorkspaceに

と表示されます。変数の意味は以下のとおりです。

変数名意味
ChInformチャンネル情報
ExamDate検査日
BadChanl不良チャンネル
ChanNameチャンネル名
Examinee被験者名
DigitPtsポルヘムスで認識した点
PCA_00XXSSP情報
MEG2HEAD座標変換行列
ave_00XX誘発データ情報


raw dataの場合

raw dataを読むとWorkspaceに

と表示されます。変数の意味は以下のとおりです。

変数名意味
ChInformチャンネル情報
ExamDate検査日
ChanNameチャンネル名
CalXRnge係数
Examinee被験者名
DigitPtsポルヘムスで認識した点
PCA_00XXSSP情報
raw_data生データ情報
MEG2HEAD座標変換行列
raw dataはファイルサイズがかなり大きくなり、MATLABでは認識できないことがあるので、 FIFF fileで圧縮してあるとおり、係数×正負16bitで保存してあります。 ch10の情報を引き出すには
CalXRnge(10)*double(raw_data(10,:))
とします。
またサンプリング周波数は
CalXRnge(end)=600.6150
として取り出します。


xfit_wavesの場合

Source ModellingのSource waveformsをfiff fileで保存したものをMat化して読み込むと

と表示されます。変数の意味は以下のとおりです。

変数名意味
ChInformチャンネル情報
ChanNameチャンネル名
ExamDate作成日
ave_0001波形データ

ChInform(1:3,1:(end-2))はdipoleの位置(m)
ChInform(4:6,1:(end-2))はdipoleの単位ベクトル化された方向
を意味します。
ave_0001(:,1:(end-2))は電流の大きさ(nA)
ave_0001(:,(end-1))はGOF(%)
ave_0001(:,end)は時間(msec)を意味します。



xxx.bdipの場合

xxx.bdipをMat化して、読みこむとWorkspaceに

と表示されます。変数の意味は以下のとおりです。

変数名意味
binaryDPdipole情報



xxx.meshの場合

SegLabで作成したxxx.meshをMat化して、読みこむとWorkspaceに

と表示されます。変数の意味は以下のとおりです。

変数名意味
triangleメッシュ点の三角形の組み合わせ
NodesPtsメッシュ点の座標と法線方向



sets内のfiffの場合

sets内のfiff fileをmat変換後に読むとWorkspaceに

と表示されます。変数の意味は以下のとおりです。

変数名意味
HEAD2MRI座標変換行列
slice2MR座標変換行列
ここではslices内のDICOM fileが86枚あること示しています。


xxx_3D.fifの場合

ここでxxx_3D.fifとはSegLabで脳の切り出しsegmentationを行ったデータを想定しています。 このfileをmat化後に読むとWorkspaceに

と表示されます。 変数の意味は以下のとおりです。

変数名意味
Volume3DDICOMの3次元情報
HEAD2MRI座標変換行列
slice2MR座標変換行列


xxx-bem.fifの場合

ここでxxx_bem.fifとはSource Modellingで作成された境界要素モデルboundary element modelを想定しています。 このfileをMat化し、読み込むとWorkspaceに

と表示されます。 変数の意味は以下のとおりです。

変数名意味
triangleメッシュ点の三角形の組み合わせ
NormNodeメッシュ点上の法線方向
BEMnodesメッシュ点の位置


xxx-bem-sol.fifの場合

ここでxxx_bem-sol.fifとはSource Modellingで作成された境界要素モデルboundary element modelを想定しています。 このfileをMat化し、読み込むとWorkspaceに

と表示されます。 変数の意味は以下のとおりです。

変数名意味
triangleメッシュ点の三角形の組み合わせ
BEMnodesメッシュ点の位置
PtntlMtxBEMモデルの電圧計算用行列?
最後のPtntlMtx = potential solution matrixは何のことだかわかりません。 もっとも境界要素法、有限要素法自体を理解していませんが。


...-bem.trinet.mat

trinetという変数だけですが、実は構造体になっています。
変数名意味
tn_id?
creator作者
datafile元になったbem.fif
originalpath付datafile
commentコメント
nodesメッシュ点の座標
trianglesメッシュ点の三角形の組み合わせ
ntri三角形の数
nnodesメッシュ点の数
subj_id?


...-bem_pointsetXX.mat

pointsetという変数だけですが、実は構造体になっています。
変数名意味
points格子点の座標
commentコメント
r0球モデルの中心座標
lattice格子点間の距離
minr格子点を除去した球の半径
ps_idpointsetのID
tn_id?
creator作者
proj格子点の値をメッシュ点に投射する行列
modeltype球モデル(BEMモデル)
subj_id?
ori格子点の接平面ベクトル
originalps?
trans?
createtime作成日時+時刻
MCE version 1.3は球モデルを使っています。
MCE version 1.4は境界要素モデルが使えるという噂。


ave_00XX

誘発データ情報です。誘発データには本来固有の名前がついているのですが、 MATLABの変数として使えない文字があるので便宜的にAVE_00XXとしています。 Neuromag System (306Ch)+脳波21chの場合 を意味します。

binaryDP

binaryで保存されたdipoleの情報です。
CalXRnge

raw dataにかける係数です。例えば10chのデータを得るときには
CalXRnge(10)*double(raw_data(10,:))
などとします。
ただし、CalXRnge(end)はサンプリング周波数を意味します。
広島大学病院の場合、係数は以下のとおりになっています。
要するにraw_dataは約9.6fT単位で四捨五入されています。

ChInform

Neuromag System (306Ch)+脳波21Chの場合は以下のとおりです。 を意味します。

センサーの表示は以下のとおりです。
wd=14/1000; % センサー幅の半分
P=ChInform(1:3,1:3:304); % センサーの中心
X=wd*ChInform(4:6,1:3:304); % センサーの横幅の半分
Y=wd*ChInform(7:9,1:3:304); % センサーの縦幅の半分
V=zeros(4,3,102); % あらかじめ領域確保
V(1,:,:)=P+X+Y;V(2,:,:)=P+X-Y;V(3,:,:)=P-X-Y;V(4,:,:)=P-X+Y;% センサーの4隅の座標
fill3(squeeze(V(:,1,:)),squeeze(V(:,2,:)),squeeze(V(:,3,:)),zeros(4,102));
daspect([1,1,1]); % 縦・横・高さ比を1:1:1にする。
rotate3d; % マウスで画像を回転させる

とすれば図のようにセンサーが表示されます。

Neuromagはチャンネル名を解剖名と無関係につけているのでチャンネル名がどの位置かわかりません。 そこで
ChanName=ChanName{1:3:304};
ChanName=strrep(ChanName,'MEG ',''); % 文字列'MEG 'を除去
hold on; % 重ねがき許可
for x=1:102;...
Ch=str2num(ChanName{x});... % 文字列を整数に変換
Ch=floor(Ch/10);... % 下一桁を除去
Ch=num2str(Ch);... % 整数を文字列に変換
text(P(1,x),P(2,x),P(3,x),Ch);end;
とすれば下図のようになります。


DigitPts

ポルヘムスで認識した点の位置を示します。座標はhead座標です。 HPI coil 4個使用、脳波電極の位置認識なしの時の場合は以下のとおりです。 を意味します。
plot3(DigitPts(1:3,1),DigitPts(1:3,2),DigitPts(1:3,3),'k.'); % 基準点は黒
hold on; % 重ねがき許可
plot3(DigitPts(4:7,1),DigitPts(4:7,2),DigitPts(4:7,3),'b.'); % HPIコイルは青
plot3(DigitPts(8:end,1),DigitPts(8:end,2),DigitPts(8:end,3); % その他の点は赤
view([-110,20]); % 見る角度の指定
daspect([1,1,1]); % 縦・横・高さの比率
とすると下図のように表示されます。


HEAD2MRI

head座標とMRI座標の変換行列とその逆行列を意味します。具体的には となります。
MEG2HEAD

device座標とhead座標の変換行列とその逆行列を意味します。具体的には となります。
PCA_00XX

SSPの個々の固有ベクトルを意味します。 SSPの固有ベクトルにはそれぞれfiffで名前がついているのですが、Matlabでは使えない文字があるので、 便宜上PCA_00XXとしています。32bit浮動小数点の情報を64bit浮動小数点にしただけですので精度が悪く、例えば
PCA_0001'*PCA_0002=-4.01020e-0008
とゼロになりません。
Neuromag System (306Ch)の場合 SSPを作るとき、平面型グラジオメーターとマグネトメーターの固有ベクトルは別々に作成されます。 マグネトメーターの固有ベクトルがPCA_0004の時、
sum(PCA_0004(3:3:306).^2)=1.0000
となりますが、
sum(PCA_0004(1:3:304).^2+PCA_004(2:3:305).^2)=0
となります。
不良channelを除外してSSPが作られた場合、 PCA_000Xのサイズが204x1や306x1になりません。

raw_data

raw dataの情報です。正負付16bit整数、すなわち-32768〜32767の整数で保存されています。 係数CalXRngeをかけてデータを復元します。

slice2MR

MRI座標と/slices内DICOMファイル1枚1枚の画素との変換行列とその逆行列を意味します。具体的には となります。
Volume3D

SegLabでxxx_3D.fifとして保存したfileをMat化した場合
3D脳表画像を作成してxxx_3D.scenes.fifとして保存したfileをMat化した場合