*maxfilterをかけるコマンド

例1:maxfilter -v -f raw3.fif -origin fit -frame head -st 10 -corr 0.980 -autobad on

例2:maxfilter -v -f Raw3.fif -origin -4.4 7.0 52.8 -frame head -st 20 -lpfilt 47.0 -corr 0.980 -force -format short

上 のraw3.fif(ファイル名)を変えれば よい 。するとraw3_tsss.fifができる

基本例1の構文でいいと思う。-originのセットが不要になるので。

例2では-originのあとはparameterをいれてある。

-lpfiltのあとはlowpassをいれてある。60Hzでなく少し下げている。

オプション(ハイフン+いろいろな文字で設定することをlinux業界でオプションというようです)の意味

1. -v (verboseの意味): warningとか処理経過を画面に出してくれる。慣れないうちはつけたほうがよいと思われる。

が、たくさん表示がでてうざったいので最後に >log.txtつけてなどでログに落とすと後から見返しやすい。

例:maxfilter -v -f raw3.fif -origin fit -frame head -st 10 -corr 0.980 -autobad on > log3.txt

ちなみに >log3.txtの">" は"bash リダイレクト"あたりでググるとよいでしょう。

2. -f: 処理するファイル。これに_sss.fifか_tsss.fifの名前で処理、出力される

3. -origin: 球モデルをfitさせるのに中心座標(たぶん初期値)が必要

オプション1: -origin fitでdigitizer (polhemus)のデータから中心座標を自動計算する

オプション2: -origin -0.5 9.0 35.0とかだとx,y,zを決め打ちする。mrilabとかで脳を使ってbemのデータがあればそれで出てくる中心座標がよいらしい

あとデフォルトで0 0 40に指定することもあるようだが、あまりメリットはないように思われる。

4. -frame: 座標系のことらしい. オプションは headかdeviceか. 通常headで問題ない(はず)

5. -st: tsss(時間も考慮して計算してくれるらしい)を使う時のオプション。一応明示した方がよさげ。

後の数字は処理するブロックの長さ(秒)。指定しないと10 秒単位で(v2.1では)処理される。

ハイパス(ローカット)フィルタの効果も生じるとのこと:4だと1/4(Hz)のローカット。10だと1/10(Hz)てな感じ。

大きくするとメモリがたくさん必要とのこと。1kHzサンプリングのデータで10にすると400MB、4だと50MB使うとのこと(マニュアルより)

6. -format: 出力するファイルの小数点の違い?short (16-bit short packing), float (32-bit float packing) or

long (32-bit integer packing)のどれかを指定。shortだとデータが小さくなる。気にしなければつけなくてよい。

7. -corr 0.980: なんかの相関係数。意味不明。0.98以下は特に理由がなければ避けるように書いてある。

つけなくてもよいっぽいオプション

7. -force: warningが出ても処理が止まらないようにする。基本つけなくてよいと思われる。既に一度処理してて上書きするとき-forceをつけないと処理がとまるようなので、そのくらいか。

8. -autobad on: bad channelを自動で指定してくれるオプション。注:どうもtsssの時(-st 10の時)は無視されるぽいです。

9. -magbad: magnetometerをbad channelにする。たぶんgradiometerだけで信号を再構築するぽい。magnetometerのデータが役に立たない(アーチファクトだらけ)で皮質の信号を主に見るとき(深部からの信号はmagnetometerで検出しやすいとの噂)はつけるとよいかも。

時に役に立つかもしれないオプション

10. -trans trans_file.fif:頭の位置をtrans_file.fifの位置に合わせる。複数のファイルをまとめて処理するときに有用と思われる。maxmoveの機能。該当部分のマニュアルを見たかったらマニュアルのpdfで"-trans"を検索。

continuous HPIオンでなくても使用可能。continuous HPIのデータを使った補正はまた別にあるぽい(-movecomp)

おまけ1: フォルダの中の"_raw.fif"にmaxfilterをかけていくコマンド(シェルスクリプト)

たくさんある_raw.fifにmaxfilterをかけていきます。fifファイルのあるディレクトリにcdして走らせてください

*ログ:スクリプトみたらなんとなくわかると思いますが、maxfilter_log.log、エラーログをmaxfilter_err.logに置くようにしてます

## 使い方 ##

# まず下記2行を走らせて、適切にファイルが選ばれているか確認します。うまくいかない場合はファイルがあるディレクトリにちゃんとcdしてるかlsとかpwdとかで確認してください。

files="*raw*.fif"

echo $files

# 出力されるファイル名のリストに問題がなければ以下の5行(doneまで)を走らせます。こぴぺでいけます

for filepath in ${files}

do

echo ${filepath}

maxfilter -v -f ${filepath} -origin fit -frame head -st 10 -corr 0.980 -autobad on > maxfilter_log.log 2>maxfilter_err.log

done

おまけ2: ファイルがいくつか分かれている時、頭の位置をmaxmoveで揃えるコマンド(シェルスクリプト)

おまけ1と同様にfifファイルのあるディレクトリにcdしてから走らせます。出力ファイルは"_trans_tsss.fif"がつくようです

*前提:ファイル名に例えば"SEF_rt_little云々_raw.fif" (云々は1,2,3..みたいな感じ)とついているとします。

*ちょっぴり注意点: 頭の位置の基準になるファイルは echo ${file_array[0]}で出てくるファイルです。それを変えたかったら-trans ${file_array[0])の数字を変えると行けます。数字を変えたら、どのファイルになるか確認しましょう例えば3だったらecho ${file_array[3]}でファイル名を確認できます。

*ログ:スクリプト見たらなんとなくわかると思いますが、maxfilter_log.log、エラーログをmaxfilter_err.logに置いてます。ログ内にPosition changeみたいな記載があり、maxmoveによる移動距離を指していると推察します。

* maxmoveでノイズが増えたように見えることがあります。たぶんここの記述が1つ関係していると思います。

## 使い方 ##

# まず下記3行を走らせて、適切にファイルが選ばれているか確認します。SEF_rt_little*_raw.fifは処理したいファイルに応じて変えましょう。*の意味がわからない人は「bash ワイルドカード」とかでググって勉強しましょう(参照例:www.atmarkit.co.jp/ait/articles/0203/12/news001.html)。

# SEF_rt_little云々_raw.fifという名前をまとめて処理したいときは下の行

# files="SEF_rt_little*_raw.fif"

files="*raw*.fif"

file_array=($files)

echo ${file_array[@]}

# 出力されるファイル名のリストに問題がなければ以下の6行(doneまで)を走らせます。こぴぺでいけます

for filepath in ${file_array[@]}

do

echo ${filepath}

maxfilter -v -f ${filepath} -origin fit -frame head -st 10 -corr 0.980 -autobad on -trans ${file_array[0]} > maxfilter_log.log 2>maxfilter_err.log

done

おまけ3:フォルダの中のfiffファイルにもれなくmaxfilterをかけていくmatlabスクリプト

ある大元のディレクトリ内に各被験者のディレクトリがあり、その中に日付の名前のディレクトリがあってfiffファイルが入っていることを想定しています。

%% MEGの計測データをまとめたディレクトリを検索してraw.fifに

%% maxfilterをかける

%% 1日1回走らせることを想定して、日付のディレクトリのみファイルを

%% チェックしていく

%% 設定項目

sDirRoot='/net/hogehoegroot';%MEGのデータをまとめたディレクトリ

sNameDate=datestr(date,'yymmdd');%120605とか日付にマッチしたディレ

%クトリの名前

%% 設定終わり

cd(sDirRoot);

strDir=dir;

for ii=1:length(strDir)

cd(sDirRoot);

sNameDir=strDir(ii).name;

if sNameDir(1)=='.' || ~strDir(ii).isdir

continue;%ディレクトリ名の最初に'.'が来てたら.もしくはディレク

%トリでなかったらスキップ

end

cd(sNameDir);%各被験者のディレクトリに入る

if ~isdir(sNameDate)

disp('skip');

continue;%ディレクトリに本日の日付のディレクトリがなかったらス

%キップ

end

cd(sNameDate);%本日の日付のディレクトリに入る

strRawName=dir('*.fif');%raw.fifのファイルを拾い出す

for jj=1:length(strRawName)

sNameFif=strRawName(jj).name;

if ~[isempty(strfind(sNameFif,'_tsss')) & isempty(strfind(sNameFif,'ave')) & isempty(strfind(sNameFif,'avg'))]

continue;

end

if ~[isempty(strfind(sNameFif,'-eve')) & isempty(strfind(sNameFif,'cov'))]

continue;

end

[sPath sNameRaw sExtension]=fileparts(strRawName(jj).name);%rawファイル名

sNameTsss=[sNameRaw,'_tsss.fif'];%maxfilter後のファイル名

if exist(sNameTsss)

continue;%tsssのファイルが既にあればスキップ

else

sMaxfilter=['!maxfilter -v -f ',sNameRaw,sExtension,...

' -origin fit -frame head -st 10 -corr 0.980 -format short -autobad on'];

eval(sMaxfilter);

end

end

end