はじめに

本資料は,fMRI実験などで使用されることが多いPresentationについて解説した資料です。作成したのが2012年くらいで,その後,国里がPresentationを使わなくなったこともあり,更新がされていません。内容が古い可能性もありますので,予めご了承ください。

Presentationとは

NeurobehavioralSystems社の実験用刺激呈示ソフト。USB認証のライセンスが比較的便利になります。プログラミングが必要ですが,fMRIのトリガーの扱いが便利で,柔軟性に富むソフトです。ちなみに,Windowsのみで動作するので,Macユーザーは,BootcampでWindowsをいれて,そこでPresenatationを使うと良いかもしれません。

NeurobehavioralSystems社のHP(http://www.neurobs.com/)

日本での代理店のHP(http://www.physio-tech.co.jp/products/nbs/nbs.htm)

まず,日本語の資料として, 国際電気通信基礎技術研究所の脳活動イメージングセンタの資料を参考にしてください。現行のPresentationでは変更された機能もありますが,大まかに理解出来ますし,プログラムをつくる良いとっかかりになると思います。

インストール

Neurobehavioral Systemsのサイトからダウンロードできます。アカウント登録しておけば,インストールまでは簡単にできます。しかし,使用するには,USB型のライセンスキーが必要になります。最初の1ヶ月は,お試しで利用することもできます。

ファイルの種類

Presentationは複数のファイルを利用します。 - Experiment File(*.exp): 実験のプロジェクトファイルです。実験に関する設定(使用するファイル・刺激やログファイルの保存場所,使用するボタンの指定)などを保存しておく場所です。

  • Scenario File(*.sce): 呈示に関するシナリオファイルです。このシナリオに沿って実験は進められます。どのような刺激を何秒呈示するとか,反応をとるとかについて指定します。 イメージとしては,実験中の作業(教示呈示,刺激呈示,反応採取)を個別のパーツとして作成することになります。

  • PCL File(*.pcl): プレゼンテーションをコントロールするファイルです。シナリオファイルだけでもプレゼンテーションすることは出来るのですが、 実験が複雑になってきたときや、テンプレートの一部を修正して実験を行うときに利用します。イメージとしては,Scenarioファイルで作成したパーツを組み合わせて実験を組み立てるような作業になります。

なお,このファイルを利用する場合は、シナリオファイルで「pcl_file = “pclファイル名.pcl”;」のようにファイルを指定する必要があります。しかし,シナリオファイルないにPCLファイルを組み込む方法もあるので,その場合は,必要ないです。

  • Log File(*.log): ログファイルです。テキストファイルです。刺激を呈示した時間とか,被験者の反応とかが記録されます。sdfに従って記録されます。

おもに,上の4つのファイルを使用して,脳機能画像研究での刺激呈示はなされます。

  • Template File(*.tem): 再利用の為のテンプレートファイルです。シナリオや、オブジェクト、トライアルなどを書いておきます。主に、シナリオ用(シナリオとオブジェクト)と、トライアル用の2種類に分けることができます。

  • Set Definition File(*.sdf): ログファイルに記録される内容をコントロールするファイルです。とくに作成しなければ、Presentationをインストールしたフォルダにあるdefault.sdfが使われます。発生したイベント(レスポンス)ごとの記録するログの定義の他、 測定値の平均や分散といった解析も行うことができるようです。

課題作成のヒント

刺激呈示の仕方や反応の取り方などを設定する。私自身のイメージとしては,実験を行う際の一連の作業を分解して設定すること。シナリオファイルは,シナリオヘッダとシナリオに分かれる。シナリオヘッダには主に設定に関する命令をする。シナリオは実験に関わるパーツに関する命令をする。

pcl_file = "task.pcl";
scenario = "task";

#シナリオヘッダ
active_buttons = 2;
button_codes = 1,2;
target_button_codes = 1,2;
default_font_size = 20;
default_text_color = 255, 255, 255;
default_picture_duration = next_picture;

#シナリオ
begin;

picture {text{caption="+";font_size=40;};x=0;y=0;}default;

trial{         
   stimulus_event{
             picture { bitmap { filename = "st2.jpg"; }; x = 0; y = 0;};
      duration=2500;
      code="start inst";
      }stinst_event; 
}stinst_trial;

シナリオファイルで,実験に関する設定や区切られた動作(「刺激Aを出す」→「ボタン押しを待つ」など)をtrialとして作成して。そのパーツを並べたり,中の刺激を変更したりするのをPCLで設定して実験課題を作る感じです。

PCLをScenarioファイルに埋め込むことができる。PCLが始まる前に, begin_pcl;と打ってから始めるので良い。

演習課題

最初にPresentationを使うときに,助教の先生が演習課題を作ってくれて,練習したことがあります。私も後輩が使いたいといった時には以下の演習課題をしていただいています。比較的短時間で,大体の実験が作れるようになるかと思います。

課題1

まずは,シナリオファイルのみを使って,1秒毎に「1」から「5」まで画面に提示する課題を作成してみましょう。

課題2

課題1で出した「1」〜「5」の数字を3回繰り返すプログラムを作成しましょう。ただし,シナリオのtrialはそのままで,PCLで制御するようにしましょう。

※ヒント:PCLの記述をする場合は,シナリオの記述が終わったところに, 「begin_pcl;」と書いてください。繰り返す場合は,loopを使います。 以下の場合は,kという変数を作って,そのkが 15になるまで繰り返すという命令になります。

loop int k=1;until k>15 begin
命令(数字を提示するなど) 
k=k+1;
end;

なお,kは繰り返す度に増やさないと,延々とk=1の ままになるので,1回命令する度にk=k+1;というコマンドを動かします。

課題3

「あ」「い」「う」「え」「お」を3回繰り返す

課題4

それでは,次のステップとして,PCLでだらだらと呈示するテキストを指定するのではなくて,配列を組んでおいて,その配列(or変数)をつかって,PCLをつくることにしましょう。 まず,変数の型には,intとstringがあります。intは整数(数字)で, stringは文字(「あ」とか「い」とか)です。 変数の宣言は普通は以下のようにやります。

int kurikaeshi=0;
# int形式のkurikaeshiという変数作って,0を代入した。 
string kanji;
# string形式のkanjiという変数を作った。stringは文字なので,0とか代入しない。

ただし,今回は,呈示する刺激(文字)を並べた配列形式の変数が必要です。 たとえば,「あいうえお」と「かきくけこ」と「さしすせそ」を並べる配列だと以下のようになります。

array<string>hiragana[5][3];
hiragana[1][1]="あ";hiragana[1][2]="か";hiragana[1][3]="さ";
hiragana[2][1]="い";hiragana[2][2]="き";hiragana[2][3]="し";
hiragana[3][1]="う";hiragana[3][2]="く";hiragana[3][3]="す";
hiragana[4][1]="え";hiragana[4][2]="け";hiragana[4][3]="せ";
hiragana[5][1]="お";hiragana[5][2]="こ";hiragana[5][3]="そ";

こういう配列をつくっておくと.set_captionの時に,hiragana[4][2]と指定すると「け」が出るようになります。一見面倒くさいように思うかもしれませんが, 心理実験だと同じ刺激を繰り返し使うことは少ないので,配列を作っていて, [1][1]は条件1の1回目を表し,[3][4]は条件3の4回目を表すと考えると楽になることが多いです。

課題5

配列を使って,「あ」から「そ」まで呈示してみましょう。 なお,あ行が1ブロック目,か行が2ブロック目, さ行が3ブロック目と考えるようにしてください。

※ヒント:ループを2つ使うと便利です。色々試行錯誤してみましょう。

なお,今回の課題とは関係ないのですが,以下は数字の場合の配列です。 こうやって,条件の設定や呈示時間やITIを設定することができます。

array<int>suuji[5][3]; 
suuji[1][1]=1;suuji[1][2]=1;suuji[1][3]=1;
suuji[2][1]=2;suuji[2][2]=2;suuji[2][3]=2;
suuji[3][1]=3;suuji[3][2]=3;suuji[3][3]=3;
suuji[4][1]=4;suuji[4][2]=4;suuji[4][3]=4;
suuji[5][1]=5;suuji[5][2]=5;suuji[5][3]=5;

課題6

思い出写真のスライドショーを作成すること。 それぞれ2秒間呈示する。

※ヒント:画像はbitmapを使います。

trial{         
   stimulus_event{
   picture{bitmap{filename="A.bmp";}p1; x = 0; y = 0;}inst_pic;
      }inst_event; 
}inst_trial;

画像も配列を作れます。しかしシナリオの部分に書きます。

array{
bitmap{filename="A.jpg";}pic1;
bitmap{filename="B.jpg";}pic2;
bitmap{filename="C.jpg";}pic3;
bitmap{filename="D.jpg";}pic4;
bitmap{filename="E.jpg";}pic5;
}memory_pic;

課題7

画面に「マウスをクリックしてください」という教示を だして,マウスがクリックされるのを待つ課題を作ってください。 これは,主にシナリオでの制御になります。helpを見てみて,作ってみてください。

課題8

こんどは,反応によって分岐するタイプの課題になります。 (1)最初に,「課題が始まります」と教示が5秒でます。 (2)その後,「右クリックしてください」と教示します。 (3)実際に右クリックだったら,「正解です」と3秒出してください。 左クリックしていたら,「不正解です」と3秒出してください。 (2)から(3)を3回繰り返してください。

今回は,if文を使ったプログラムになります。基本形は以下のように なります。

if (X==A)then
     C
elseif(X==B)then
  D
else
  E
end;

AだったらCをし,BだったらDをします。そして,AでもBでもないなら Eをします。

ここまで来たら,あとは,自分で工夫して既存の実験課題を作ってみよう! !!

PresentationでNIRS実験

あまりNIRS実験をすることはないのですが,少し測定の同期の問題が気になった時に調べた内容です。NIRS実験に関しては,NIRSでの測定を行いながら,どこで刺激が出たのかNIRS側で記録(マーカー)をしていく必要があります。それは,Presentationを使って,USB-シリアル接続で簡単にできたので,メモを残しておきます。

NIRSやfMRIのパルスボックスなどのシリアル接続タイプの外部機器との同期する場で,USBポートしか無い場合は,USB-シリアルケーブルでも接続可能です(バッファローコクヨのUSBシリアルケーブルがオススメです)。USB-シリアルケーブルでPCとNIRSを接続したら,以下の操作をすることでPresentationからマーカーなどをNIRSに送ることができるようになります。

PresentationからUSB-Serial接続で,NIRSにトリガーを送る方法

Port設定で,接続したUSB-Serial機器を設定します(設定はNIRSの会社が作成したマニュアル参照)。PCLに最初に以下のように接続していない場合の警告とPortを定義します。

if (output_port_manager.port_count() == 0) then

term.print( "Forgot to add an output port!" ) end;

output_port oport = output_port_manager.get_port( 1 );

あとは,NIRSにMarkを入れたいところで以下のように書き込みます(以下は「A」をMarkに入れる場合です。“”内に,A+スペース+エンターのアスキーコードが入っています)

oport.send_string( "A 0x0d");

※Presentationでのエンターキーはアスキーコードで0x0dになることを,早稲田大学人間科学研究科の光山君より教えていただきました。一部,修正を加えました(2013/9/23)。