*beamformer関連:brainstemなしのBEMを作る

--変更履歴--

2012/09/03 追加:brainstemありのbemを作る方法を追加

2012/07/19 中変更:メッセージのウィンドウの使い方がわかったので、活用してみました。

メッセージが多くなるとローマ字ではかえって読みにくい気がしたので英語にしました。

残念ながら日本語でメッセージを出すのはmatlab linux(2007a)ではかなり難しいです。

matlabからbashにコマンドを送るのではなく、一旦bashのスクリプトを作ってまとめてgnome-terminal

に送るようにしました。動作安定することを期待してます。

2011/12/12 小変更:スクリプトの途中で止まったときにどこまで走ったか参考になるようcfgMainを最初に定義しています。処理が進むとcfgMain.doneの中身が変わっていくのでどこまで行って止まったか参考になるかと思います。

2011/11/14 小変更:mne_analyzeでMRIのskin surfaceを表示させたときスムーズ過ぎて外耳口がわかりにくいのをいじりました。

既に1度作業をしてて困っていたらMNEのマニュアル7.16.1 Using a high-resolution head surface tessellationを参照するか、ここへ。

2011/11/01 new versionです。スクリプトは1つになりました。matlabで走らせます。

---------------------------------------------------------------------------

-------------------- 脳幹ありでよければこちら -----------------------------------

---------------------------------------------------------------------------

--前提--

要freesurfer(脳みそ削りだし), matlab (含fieldtrip)(skullと脳幹外すとこ), MNE(位置合わせとか)

ファイルはここ。createNostemCORfif_gterm.mを使います。

古いファイルはここ。createNostemCORfif.m

--段取り--

1. matlabのスクリプトでT1.mgzからnostem.fifを作る。スクリプトの最後のステップでCOR.fifを置き換える

やることは、スクリプトのディレクトリを設定して走らせるだけ。途中1回nasion,LPA,RPAの位置を指定する画面が出る

2. mne_analyzeでnasion, LPA, RPAの位置合わせをしてMRIのfiffファイルを作る

3. seglabでメッシュにする

段取り1:

T1.mgzからnostem.fifを作る

1-1. 準備:保存先とかのディレクトリを決める。

mneとかfreesurferのコマンドをmatlabから呼び出すので$SUBJECTS_DIRとか$SUBJECTの内容を決める必要がある。

*実際の設定はmatlabから行うので、export云々みたいな操作は不要。

*注意点:$SUBJECTS_DIR=/hogehoge/hoge/subjectsの後の/は不要

ていうかつけるとエラーになるかも知れない

$SUBJECTS_DIR=/hogehoge/hoge/subjects/ はだめということ

変更:スクリプトの途中でチェックして"/"があったら削除するようにしました。

1-2. matlabのスクリプトに1-1の情報を反映させる。設定部分の説明はここ

1-2-1. cfgMain.MRIdirectoryがMRIデータをまとめるディレクトリ。$SUBJECTS_DIRに引き継がれる

1-2-2. cfgMain.Subjはsubjectの名前で、この名前のディレクトリ中のデータを読みにいく、なければ作る。

$SUBJECTに引き継がれる

1-2-3. dicom_dirはdicomのファイルがあるディレクトリ。使わない時は無視される。

1-2-4. あと処理の途中で完了メールを飛ばすことができる。設定部分を確認。

1-3. スクリプトを走らせる。

1-3-1. 最初に説明がポップアップする。内容はこのページと同じ。OKで閉じると処理が始まる。

1-3-2. うまく処理が進めばT1.mgzをfieldtripで読み込んで画像がポップアップする。

もう1枚説明がポップアップする。内容は下記と同じ。

LPAが'l',RPAが'r',nasionが'n'に割り当てられてるので、それぞれの点のところでキーボードを叩く。

終わったら'q'を叩くと画面が閉じて処理が進む。recon-all(freesurfer)が結構時間がかかる。数時間。

!!注意:左右がぱっと見わからないが、通常のMRIと同様axialは向かって右が左のようである。

1-3-3. 全部終わったら、mne_analyzeと説明がポップアップする。内容は段取り2の説明。

1-3-4. 途中でエラーで止まったりしたら

cfgMainの中身を確認して、間違いがないか確認。cfgMain.subj4BFが作られていたらreconAll -allの部分は終わっているはず=一番時間のかかる処理は済んでいるはず。

もう少し細かいとこでは、cfgMain.doneの中身を確認して、どの辺で止まったか確認。ちゃんと終わった部分の結果を確認して、問題点を修正したら、その後のスクリプトからコピペしても走ると思われる。

悩んだら最初からやった方が早いかも知れない:reconAll -allが済んでいればsurfの中のデータがあり、そこの処理はスキップされるので、最初からやり直しても2-3時間で終わると思われる。

ただ、処理中にcfgMainの中身が書き換えられてたりするので、設定の部分は(間違ってなければ)飛ばした方が無難

必要時間(たぶん)

$SUBJECT(上の1-2-2参照)に読みに行くデータがなければreconAll -allが走るので最初のfreesurferの作業に半日程度(12時間くらい?)

fieldtripの画像がポップアップして(1-3-2参照)、作業後閉じたら、それからまた3時間くらい。

CPUとHDDのスピードが関係するのであくまで目安。ちなみに自分の環境はCore i7 2.8GHzくらい、データはNAS上にある。

段取り2:

seglabでメッシュにする:こちらも参照(mneのtutorial)

ここは作業はわかっていませんが、triangulate 3Dでエラーが出る件のtipsだけ。

メッシュにするときtriangulate3Dの画面で

sidelengthが10になっていますが、Okした後Mesh Info のTopolに"Fail"が出るようであれば、上のsidelengthを大きくしたり(15とか20とか)小さくしたりしてみましょう。大きくすると粗いメッシュ、小さくすると細かいメッシュになって、エラーが消えたりすることがあるようです。

あと先にdilate3Dをしておくとうまく行くことがあります。

*関連がありそうな記述を見つけたので追記(130329): xfitマニュアル(section 5.7.2 preparation of meshes)より

段取り3:

mne_analyzeでMRIの位置合わせした-trans.fifを作成(head->MRI transfer matrixを入れ込む)はこっち

段取り4:

xfit (source modeling)を開いて、-bem-sol.fifを作成

estimates - prepare new BEM model で段取り2で作った.meshに段取り3で作ったCOR-日時.fifの座標系情報を追加してする。

Prepareを押すと/neuro/databases/bemに

被験者-5120-bem.fifと被験者-5120-bem-sol.fif(こっちを使う)が出力されます。

注意点

これで出力されるhead coordinateを入れた-bem-sol.fifは、どのMEGデータに対応する-bem-sol.fifかわかるようにファイル名を注意してつけましょう。

/neuro/databases/bemに似たような名前の-bem-sol.fifが大量になって収集がつかなくなります。

追加情報(2011.11.18)

①自動で脳幹・小脳を削ったあとに残っている頭皮をmanualで削る(そうすると、mesh10mmでもIteration...のエラーが出なくなることがある(ただしloose verticesの数はなかなか減らない。) )

②loose verticesと表示された場合、その数が60~70程度ならBeamformerのプログラムがうまく走るようです。

③もしloose ventricesが数百の場合はうまくいきません。Beamformerのプログラムを走らせたときにWarningが繰り返し表示され、Hotspotが検出されません。そのような場合は、loose ventricesをdiscardすることや、それに加えてBoolean supportやBoolean quadricsをTrueに変更するとうまくいくことがありました。

追加情報(2012.6.6)

Seglabでメッシュにするときしばしばうまくいかずに試行錯誤するのでSeglabをスキップする方法がないか考えました。

結果いずれもだめですが、メモに残しときます。

1. mne_watershed_bemでmri -> bemを出力する

mne_watershed_bem --subject $SUBJECTでT1.mgzから-bem.fifを出力してくれるので、このT1.mgzをnostem.mgz(脳幹なしmri)で置き換えたが、エラー。skullがないためかsegmentationがうまくいかないと。あとbrainstemもないとだめっぽい。

2. mne_surf2bemでsurfファイル(surfディレクトリ以下にあるファイル)からbem.fifを作る->mne_prepare_bem_modelで-bem-sol.fifを作る

surf以下のディレクトリはlhとrhが分かれていて結合が必要-> やり方がわからない

mgzからsurfを作る方法があった。意味は不明。mriを二値化してmeshに置き換える、とかいう感じ?

参考:ttp://www.mail-archive.com/freesurfer@nmr.mgh.harvard.edu/msg09665.html

cd $SUBJECTS_DIR/$SUBJECT

mri_binarize --i mri/nostem.mgz --min .0001 --o mri/tmp.mgh

mri_tessellate mri/tmp.mgh 1 surf/lh.both

mris_smooth -nw surf/lh.both surf/lh.smboth

tksurfer $SUBJECT lh smboth

これを活用してsurfファイルまではできた。出力されるファイルはlh.smboth

このsurf (例lh.smboth)を使って

mne_surf2bem --surf lh.smboth --check --fif nostem-bem.fif --sigma 0.3 --id 1

とするとnostem-bem.fifが無事出力。sigmaは伝導率(inner skullにどっか0.3と書いてあったが自信なし) id 1はinner skullの意味。brain surfaceの指定はない。

しかし、これから-bem-sol.fifにするプロセス(たぶんcomputing the bem geometry data :MNEマニュアルchapter 5.7)がエラー。segmention faultとかなんとか、全く意味のわからないメッセージ

mne_prepare_bem_model --bem nostem-bem.fif でだめだった

3. -bem.fifからseglabを経由せずmeshファイルを作る

nostem-bem.fifまではできたので、seglabを経由せずに.meshを作られればXfitの作業は単純なのでよいだろうと。

mne_list_bemで-bem.fifをtext formatに変えられると(MNEマニュアル chapter 9.6 listing bem mesh data)

mne_list_bem --bem nostem-bem.fif --out nostem.mesh --id 1 --xfit

でnostem.meshを出力できた。id 1はinner skullの意味。xfitはXFit(source modeling)に対応するformatにしてくれるという意味。

しかしxfitで読み込むとエラー。フォーマットが違うぽい。実際seglabで出力したmeshとエディタで見ると中が違っている。

ということで今のところうまく行きません。

追加情報(2012.6.6)

beamformerでは-bem-sol.fifを使うということになっていますが、-bem.fifとの違いはよくわかりませんでした。

実はbeamformerマニュアルの5.1.2 MRI preprocessingに書いてありました。

-bem-sol.fifはhead coordinate、-bem.fifはMRI coordinateで、head coordinateが必要なので-bem-sol.fifを使え、だそうです。

-bem.fifでもhead coordinateが入っていればよいようです。

疑問:mne_watershed_bem -> mne_prepare_bem_modelで-bem.fif、-bem-sol.fifを作る流れではT1.mgzから作られるのでhead coordinateが入るプロセスがない(と思う)。どのように解決しているのか?