*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