13. 付録

13.1. チェックリスト一覧

第1章

  • PsychoPyを起動できる。

  • CoderやRunnerのウィンドウからBuilderのウィンドウを開くことができる。

  • ExcelまたはLibreOffice Calcのどちらかを起動できる。

  • ファイルの拡張子を表示できる。

  • BuilderとRunnerの役割を説明できる。

  • スクリプトという語の意味を説明できる。

  • ローカル実験とオンライン実験の違いを説明できる。

  • BuilderがPythonとJavaScriptの2種類のスクリプト変換に対応している理由を説明できる。

第2章

  • ルーチンペインにコンポーネントを配置できる。

  • Pilotモードと実行モードを切り替えできる。Runボタンの色の違いから現在どちらのモードなのか判断できる。

  • Builderの実験ファイルの拡張子を答えられる。

  • 作成した実験を実行できる。

  • Polygonコンポーネントを用いて三角形と長方形を表示できる。

  • コンポーネントをルーチンから削除することができる。

  • 本書で項目名を [ ] で囲んだ表記が何を表しているかを説明できる。

  • PsychoPyにおける座標系の原点と水平、垂直軸の正の方向を答えられる。

  • heightが単位の状態で [位置 [x, y] $][サイズ [w, h] $][位置揃え] を使って任意の大きさの多角形を任意の位置に表示させることができる。

  • Polygonコンポーネントで正五角形以上の正多角形を描画できる。

  • Polygonコンポーネントで [頂点数] が5以上の時に [位置 [x, y] $] が例外的に図形のどの位置に対応するかを答えることができる。

  • cm、deg、norm、heightという単位を説明できる。

  • 複数のコンポーネントをルーチンペインに配置できる。

  • [位置揃え] の働きを説明できる。

  • [回転角度 $] に適切な値を設定して図形を回転させて表示させることができる。

  • 図形の正の回転方向を答えられる。

  • 単位がnormの時に図形を回転させた時に生じる図形のひずみを説明できる。

  • Textコンポーネントを用いて文字列を表示できる。

  • 文字列を指定された位置に表示できる。

  • 文字列を指定された大きさで表示できる。

  • 文字列を上下反転、左右反転表示することができる。

  • 文字列の自動折り返し幅を設定できる。どのような文字列では自動折り返しが起きないか説明できる。

  • web/X11 color nameによる色指定で文字列の色を白、灰色、黒、赤、オレンジ色、黄色、黄緑色、緑、水色、青、ピンク、紫にすることができる。

  • [色空間] をrgbに設定して、数値指定によって文字列の色を白、灰色、黒、赤、黄色、緑色、青色にすることができる。

  • Polygonコンポーネントを用いて内部が塗りつぶされていない枠線だけの多角形を描画することができる。

  • Polygonコンポーネントを用いて枠線がない多角形を描画することができる。

  • ルーチンペイン上における視覚刺激コンポーネントの順番とスクリーン上での重ね順の関係を説明できる。

  • ルーチンペイン上におけるコンポーネントの順番を変更できる。

  • 視覚刺激コンポーネントの透明度を設定して完全な透明、完全な不透明とその中間の透明度で刺激を表示させることができる。

  • 刺激の表示開始時刻と表示時間を指定して表示させることができる。

  • 刺激の表示開始時刻と表示終了時刻を指定して表示させることができる。

  • 刺激の表示終了時刻を定めずに表示させることができる。

  • 実行中の実験を強制的に終了させることができる。

  • foo_lastrun.py (fooはpsyexp実験ファイル名)の役割を説明することができる。

  • dataフォルダの役割を説明することができる。

  • 実験結果を保存する必要がない場合、どのファイルを削除しても問題ないかを判断できる。

  • 作製済みのpsyexpファイルをBuilderで開くことができる。

  • psyexpファイルを別の名前で保存することができる。

  • 実験設定ダイアログを開くことができる。

  • 実験開始時に実験情報ダイアログを表示させるか否かを設定することができる。

  • 登録済みのモニターのうちどれを実験に使用するかを実験設定ダイアログで設定できる。

  • 実験をフルスクリーンモードで実行するか否かを設定することができる。

  • フルスクリーンモードを使用しない時に、視覚刺激提示ウィンドウの幅と高さを指定できる。

  • 視覚提示ウィンドウの背景色を指定できる。

  • 「実験の設定に従う」で参照される単位を指定することができる。

  • ESCキーによる実験の強制終了を有効にするか無効にするかを指定することができる。

  • 実験記録のファイルを保存するフォルダ名を指定することができる。

  • フルスクリーンモード時にマウスカーソルを表示するか否かを指定することができる。

  • Pilotモード時のウィンドウサイズの設定を変更できる。

  • モニターセンターを開くことができる。

  • モニターセンターに新しいモニターを登録することができる。

  • モニターの観察距離、解像度、スクリーン幅を登録することができる。

第3章

  • 新たに実験を作成するときは、その実験のためのフォルダを用意してその中にpsyexpファイルを保存する習慣をつける。

  • [キーボードバックエンド] はioHubの機能が必要な実験でなければPsychToolboxにする。

  • Polygonコンポーネントを用いて円をスクリーン上に提示することができる。

  • Polygonコンポーネントを用いて十字をスクリーン上に提示することができる。

  • ルーチン実行中にキー押しが有効となる時間帯を指定できる。

  • キーが押されると直ちにルーチンを中断するように設定することができる。

  • 有効とするキーを指定できる。

  • すべてのキーを有効にするように設定することができる。

  • ExcelまたはLibreOffice Calcを用いて、実験に用いるパラメータを列挙した条件ファイルを作成することができる。

  • 実験のパラメータを表現するためにPsychoPyで使用できる名前を決めることができる。

  • psyexpファイルを保存しているフォルダをBuilderから開くことができる。

  • フローペインでループの挿入を開始できる。

  • ループを挿入する際、フローペインの矢印上に表示される黒い円の意味を説明できる。

  • ループのプロパティ設定ダイアログで条件ファイルを指定し、表示された条件ファイルの概要が適切か確認できる。

  • [Loopの種類] のsequential、random、fullRandomの違いを説明できる。

  • [繰り返し回数 $] の値、条件ファイルに含まれる条件数、ルーチンが繰り返される回数の関係を説明できる。

  • [乱数のシード $] に値を設定するとどのような効果が得られるか説明できる。

  • 条件ファイルを [条件] に指定する前にpsyexpファイルを保存すべき理由を説明できる。

  • 条件ファイルで定義したパラメータを用いてコンポーネントのプロパティ値を更新できるように設定できる。

  • コンポーネントのプロパティ名の最後に$が付いているものと付いてないものの違いを説明できる。

  • expInfoのparticipantに設定した文字列が記録ファイル名にどのように反映されるかを説明できる。

  • dataフォルダに作成される拡張子logとpsydatのファイルに何が記録されているか、概要を説明することができる。

  • CSVファイルのCSVとは何の略であり、何を意味しているか説明することができる。

  • trial-by-trial記録ファイルから、各試行で用いられたパラメータの値を読み取ることができる。

  • trial-by-trial記録ファイルから、各試行において押されたキーのキー名と反応時間を読み取ることができる。

  • trial-by-trial記録ファイルに記録されている反応時間の計測開始時点(0.0秒になる時点)がどのように決まるか答えることができる。

  • trial-by-trial記録ファイルから実験情報ダイアログで入力した値を読み取ることができる。

  • trial-by-trial記録ファイルから実験実行時のフレームレートを読み取ることができる。

  • 分析時に未変更の記録ファイルを保存しておいた方がよい理由を説明できる。

  • 正答/誤答を記録するようにKeyboardコンポーネントを設定することができる。

  • キーを押さないことが正答となるように設定することができる。

  • 正答となるキー名を条件ファイルから読み込んで繰り返し毎に更新することができる。

  • trial-by-trial記録ファイルから、各試行の正答/誤答を読み取ることができる。

  • ルーチンを新たに作成してフローに追加することができる。

  • 既存のルーチンをフローに追加することができる。

  • フローからルーチンを削除することができる。

  • フローペインの赤いルーチンと緑のルーチンが何に対応しているか説明することができる。

  • 特定のKeyboardコンポーネントが検出したキー押しを記録しないように設定することができる。

  • 既存のルーチンと同一の内容を持つ新しいルーチンをコピー&ペーストの機能を使って作成することができる。

第4章

  • Gratingコンポーネントを用いて長方形、または楕円形に縞模様が描かれた刺激を提示することができる。

  • Gratingコンポーネントで [空間の単位] がcm、deg、pix、norm、heightのいずれの場合においても、「幅xに対してy周期分の縞模様」を描けるように [空間周波数 $] の値を決定できる(x、yは正の数値)。

  • Gratingコンポーネントで描かれる縞模様を初期設定の状態からずらして描画することができる。

  • Gratingコンポーネントで描画処理の負担を軽くするためにテクスチャの解像度を下げることができる。

  • Gratingコンポーネントを大きく表示するときに画質を高めるためにテクスチャの解像度を上げることができる。

  • Gratingコンポーネントの色を指定したときに、何色の縞模様が描かれるのかをこたえることができる。

  • 恒常法の実験において、正答率がそのまま心理物理曲線の縦軸の値として使用できるように正答を定義できる。

  • 実験情報ダイアログの項目を追加、削除することができる。

  • 実験情報ダイアログの項目の初期値を設定することができる。

  • 実験情報ダイアログの項目名から、その値を利用するためのBuilder内における表記に変換することができる。

  • 条件ファイル名を実験情報ダイアログの項目から取り出してループのプロパティに設定することができる。

  • 実験情報ダイアログの項目をドロップダウンメニューにできる。

  • 多重繰り返しを挿入できる。

  • 多重繰り返しの内側のループで条件ファイル名を外側のループの条件ファイルから読み込んで設定することができる。

  • 一時的に、特定のルーチンを実行しないようにすることができる。

  • ルーチンを、まだ実行中のコンポーネントが残っていても指定した実行時間で強制的に中断させることができる。

  • 一時的に、特定のループを実行しないようにすることができる。

  • Counterbalanceルーチンにおけるグループとスロットの意味を説明できる。

  • Counterbalanceルーチンで各グループに異なるスロット数を設定できる。

  • xlsxファイルでグループとスロットを定義する際に、追加で定義したパラメータの値を利用することができる。

  • Counterbalanceルーチンで管理している各グループのスロットの残りをリセットすることができる。

第5章

  • 変数の役割を説明できる。

  • 関数の役割を、引数、戻り値という用語を用いながら説明できる。

  • Builderで使用できる数学関数を挙げることができる

  • 関数の引数に別の関数の戻り値を使うことができる。

  • 条件ファイルから読み込んだパラメータ値を関数の引数に使うことができる。

  • Pythonの算術演算子8つ挙げてその働きを説明することができる。

  • 現在のルーチンが開始してから経過した時間を保持しているBuilderの内部変数を答えられる。

  • 現在のルーチンが開始してから描画したフレーム数を保持しているBuilderの内部変数を答えられる。

  • 現在のルーチンが開始してから経過した時間の値を用いて、時間の経過とともに色や位置が変化する実験を作成することができる。

  • 実験情報ダイアログに入力されたデータの型を答えることができる。

  • データを整数型、浮動小数点型、文字列型、リストに変換することができる。

  • 実験情報ダイアログを用いて刺激の大きさや位置などの値を実験開始時に指定するように実験を作ることができる。

  • Codeコンポーネントを用いてPythonのコードをルーチンに配置することができる。

  • Codeコンポーネントのプロパティである [実験初期化中][実験開始時][Routine開始時][フレーム毎][Routine終了時][実験終了時] の違いを説明できる。

  • CodeコンポーネントにPython用のコード入力欄だけを表示するように設定できる。

  • ルーチンにおけるCodeコンポーネントと他のコンポーネントの実行順序を説明できる。

  • 変数に値を代入する式を書くことができる。

第6章

  • 画像ファイルをスクリーン上に提示することができる。

  • 画像ファイルを上下、または左右に反転させて提示することができる。

  • 画像ファイルや条件ファイル等の位置を絶対パスで指定することができる。

  • 画像ファイルや条件ファイル等の位置を相対パスで指定することができる。

  • OSによるパスの書き方の違いを説明できる。

  • 複数のOSで実行できるBuilderの実験を作成するためにはどの記法でパスを記述したらよいか答えられる。

  • 複数の文字列を結合した文字列を得る式を書くことができる。

  • 条件ファイルや実験情報ダイアログから読み込んだ文字列が組み込まれた文を提示することができる。

  • Textコンポーネントの [文字列] にPythonの式を書いた時に、表示する文字列を改行させることができる。

  • 条件に応じて処理を分岐させるPythonコードを書くことができる。

  • 数値の大小や一致・不一致に応じて処理を分岐させることができる。

  • 文字列の一致・不一致に応じて処理を分岐させることができる。

  • Pythonの比較演算子を6つ挙げてそれらの働きを説明することができる。

  • Pythonの論理演算子を3つ挙げてそれらの働きを説明することができる。

  • クラスとインスタンスの違いを説明することができる。

  • データ属性とは何かを説明することができる。

  • 変数xに格納されたインスタンスのデータ属性fooに値を代入したり値を参照したりするときのPythonの式を書くことができる。

  • BuilderKeyResponseのデータ属性を参照して押されたキー名を知ることができる。

第7章

  • 3通り以上の分岐を処理させるif文を書くことができる。

  • リストの中にある要素が含まれているか否かで処理を分岐させることができる。

  • Codeコンポーネントからルーチンを終了させることができる。

  • TrialHandlerのインスタンスから現在ループの何回目の繰り返しを実行中かを取得できる。

  • TrialHandlerのインスタンスから現在ループの繰り返し回数が残り何回かを取得できる。

  • TrialHandlerのインスタンスから現在ループの総繰り返し回数を取得できる。

  • 上記3項目の値を使って「現在第n試行」、「残りn試行」、「全n試行」といったメッセージをスクリーン上に提示できる。

  • Codeコンポーネントを用いて、実験記録ファイルに出力するデータを追加することができる。

  • 現在実行中の繰り返しのn回前、n回後に使われるパラメータを取得するコードを記述することができる。

  • if文の中に入れ子上にif文を組み込んだコードを記述することができる。

  • ifやelifの条件式が真であった時に実行されるコードがどこまで続いているかを判断することができる。if、elifの条件式が全て偽でelseまで進んだときに実行されるコードがどこまで続いているかを判断することができる。

  • 一連のif-elif-elseの組み合わせがどこまで続いているかを判断することができる。

  • 論理演算子を用いて複数の条件式をひとつの式にまとめることができる。

第8章

  • Buttonコンポーネントで作成したボタンをクリックすることでルーチンを終了することができる。

  • Buttonコンポーネントで作成したボタン上でマウスのボタンを押し続けることでフレーム毎に処理を実行させることができる。

  • Buttonコンポーネントで作成したボタン上でマウスのボタンを1回押すごとに1回処理を実行させることができる。

  • Buttonコンポーネントで作成したボタンに日本語の文字を表示させることができる。

  • Sliderコンポーネントで縦向き・横向きのスライダーを描画できる。

  • Sliderコンポーネントでラジオボタンを用いた多肢選択を描画できる。

  • Sliderコンポーネントで数値を回答させる際にマーカーの最小間隔を設定できる。

  • Sliderコンポーネントで参加者の回答を取得するコードを書ける。

  • Formコンポーネントで複数の質問項目とスライダーのペアをルーチンに配置することができる。

  • Formコンポーネントのすべての項目に回答したらルーチン終了のボタンを表示させることができる。

  • Formコンポーネントのすべての項目に回答したらフォームを終了させることができる。

  • ループの中でFormコンポーネントを使う時に繰り返しのたびに反応を初期化することができる。

第9章

  • ルーチン終了時のマウスカーソルの位置およびマウスのボタンの状態を記録することができる。

  • ボタンが押された時点のマウスカーソルの位置およびマウスのボタンの状態を記録することができる。

  • 実験記録ファイルにマウスカーソルの座標やボタンの状態がリストとして複数件出力されている時に、個々のデータの座標値やその取得時刻を判断できる。

  • Codeコンポーネントでマウスカーソルの座標を取得するコードを記述できる。

  • Codeコンポーネントでマウスのボタンの状態を取得するコードを記述できる。

  • getPressed()メソッドを用いて取得したマウスのボタンの状態を示すリストの各要素がどのボタンに対応しているか答えられる。また、リストの各要素の値とボタンの状態の関係を答えられる。

  • Codeコンポーネントを用いずにマウスカーソルの位置に刺激を描画することができる。

  • シーケンス型のデータから要素をひとつ取り出して他の変数に代入したり関数の引数に使ったりすることができる。

  • シーケンス型データの前からN番目の要素を取り出す時の式を答えられる。

  • シーケンス型データの後ろからN番目の要素を取り出す時の式を答えられる。

  • 関数を用いてシーケンス型データに含まれる要素数を調べることができる。

  • シーケンス型のデータが入れ子構造になっている時に、要素であるシーケンス型データや、さらにその要素を取り出すことができる。

  • 文字列の中からN番目の文字を取り出して変数に代入したり関数の引数に使ったりすることができる。

  • [1,2,3][0]といった具合に[から始まって、]の後に[ ]演算子が続く式を評価した時の値を答えられる。

  • ある座標がPolygonコンポーネントで描画した多角形の内側に含まれているか判定するコードを書くことができる。

  • Polygonコンポーネントで描画した二つの多角形に重なっている部分があるが判定するコードを書くことができる。

  • マウスカーソルの位置を設定するコードを書くことができる

  • マウスカーソルの表示ON/OFFを切り替えるコードを書くことができる。

  • ある変数に格納されている値だけが異なる処理を繰り返し実行しなければいけない時に、for文を用いて記述することができる。

  • for文を継続する必要がなくなった時に直ちに終了させることができる。

  • for文で現在処理中の要素に対してこれ以上処理を続ける必要がなくなった時に、次の要素の処理へ直ちに移行するコードを書くことができる。

  • ルーチン内に含まれるコンポーネントの一覧を格納したBuilderの内部変数の名前を答えられる。

  • オブジェクトがある名前のデータ属性(たとえば'foo')を持っているか判別するコードを書くことができる。

  • ある文字列が別の文字列の中に含まれているか(例えば'psych'が'psychophysics'に含まれるか)判別するコードを書くことができる。

  • リストにデータを追加するメソッドであるappend( )とextend( )の違いを説明できる。

  • 中身が空のリストを作成することができる。

  • ルーチン内でのみ必要なデータを蓄積するリストを作成するコードはどの時点で初期化すべきか判断できる。

  • %演算子を用いてNフレーム(N=2,3,4,…)に1回の頻度で処理を実行させることができる。

  • 2次元配列の要素のインデックスから、その要素が何行目、何列目にあるかを計算することができる。

  • 関数やメソッドの戻り値に直接[ ]演算子を適用した式を理解できる。

  • Polygonコンポーネントで描画した多角形にマウスカーソルを重ねてクリックするとルーチンの終了や反応の記録などの処理を行うコードを書くことができる。

第10章

  • 無圧縮WAV形式の音声ファイルを再生できる。

  • 指定された周波数の音を鳴らすことができる。

  • 指定されたキーコードの音を鳴らすことができる。

  • 音声のボリュームを指定できる。

  • 音声ファイルの再生を指定された時刻に途中終了できる。

  • 様々な再生時間の音声ファイルの再生開始、終了に合わせて他のコンポーネントを開始または終了させることができる。

  • 短時間に複数のSoundコンポーネントを鳴らそうとした時に期待した結果が得られない理由を説明できる。

  • 異なるサンプリングレートの音声ファイルをひとつの実験で混ぜて使用してはいけない理由を説明できる。

  • 動画ファイルを拡大縮小して再生することができる。

  • 動画ファイルを音声なしで再生することができる。

第11章

  • 指定した条件に当てはまる時にルーチンの実行をスキップさせることができる。

  • 試行毎にシーケンスからひとつの値を無作為に選択するコードを書くことができる。

  • low以上high未満の整数を範囲とする一様乱数のサンプルをひとつ得るコードを書くことができる。(low、highは整数)

  • range( )を用いて、0からn (n>0)までの整数を順番に取り出すrangeオブジェクトを作成することができる。

  • range( )を用いて、mからn (n>m)までの整数を順番に取り出すrangeオブジェクトを作成することができる。

  • range( )を用いて、mからnまで、sの間隔で整数を順番に取り出すrangeオブジェクトを作成することができる。ただしm、nは互いに異なる整数、sは非0の整数である。

  • リストの要素を無作為に並べ替えることができる。

  • m個の要素を持つリストから、n個の要素(m>n)を重複なく無作為に抽出することができる。

  • ルーチンに配置された視覚刺激コンポーネントをスクリーン上に描画させないようにすることができる。

  • スライスを用いて、あるリストから連続する要素を抽出したリストを作り出すことができる。

  • リストの先頭から要素を抽出する場合のスライスの省略記法を用いることができる。

  • リストの末尾までの要素を抽出する場合のスライスの省略記法を用いることができる。

第12章

  • ループ内で反応の正誤を順番にならべたリストを作ることができる。

  • リストの末尾から指定された個数の値を取り出せる。

  • ループを中断することができる。

  • 実験実行時に条件に応じてループの実行をスキップできる。

  • ループを活用して、フローで条件分岐を実現できる。

  • ループを中断することができる。

  • 実験開始からの経過時間を取得することができる。

  • 開始から一定時間経過したら終了するループを組むことができる。

  • 小数点以下の桁数を指定して数値を文字列に埋め込める。

  • ひとつの文字列に複数の数値や文字列を位置を指定して埋め込める。

  • PsychoPyのユーザー設定フォルダを開くことができる。

  • Builderにルーチンのテンプレートを追加することができる。

  • ルーチンテンプレートのカテゴリ名を設定することができる。

  • 複数のルーチンテンプレートをカテゴリにまとめることができる。

  • テンプレートの [説明] にテンプレート使用の際の注意点を記入しておくことができる。

13.2. 本文未解説コンポーネント

PsychoPy Builder 2024.2.5で利用できるコンポーネントのうち、本文で取り上げなかったものの概要を示します。

Apertureコンポーネント (ローカルのみ)

画面を「穴」で切り抜くコンポーネントです。このコンポーネントはルーチンペインにおける描画順序の影響を受けません。つまり、Apertureコンポーネントの上に他の刺激を重ね書きしようとしてもApertureコンポーネントに切り抜かれてしまいます。

Dotsコンポーネント (ローカルのみ)

一様に運動する小さな点を大量に描くコンポーネントです。運動視の研究などに用います。Polygonコンポーネントを大量に用いるよりPCへの負担が軽く、高速に描画できます。以下の解説では、点が描画される範囲をフィールドと呼んでいます。また、指定された方向に動く点をターゲット、それ以外の方向に動く点をノイズと呼んでいます。

Panoramaコンポーネント (ローカルのみ)

パノラマ画像を表示するコンポーネントです。キーボードやマウスで視点操作できます。

Progressコンポーネント

プログレスバーを描画します。

TextBoxコンポーネント

枠線を付けたり背景を塗りつぶしたりしたテキストボックスを描画しますが、特筆すべきはテキストを編集可能にできる点です。「 13.7:実験中に日本語文字入力をさせたい方のために:「オンライン実験」をローカル環境でで実行する 」をご覧ください。

Brushコンポーネント

画面上にマウスカーソルの軌跡を描けるようにするコンポーネントです。今のところ描いた軌跡を簡単に保存する方法がないので、使いどころが難しいかもしれません。

ButtonBoxコンポーネント (ローカルのみ)

PsychoPyがサポートするハードウェアボタンボックスを利用するコンポーネントです。各ボックスのドライバはプラグインとしてインストールする必要があります。Keyboardコンポーネントのように検出するボタンを指定してルーチンを終了させたりすることができます。

JoyButtonコンポーネント

ジョイスティックで反応を記録するコンポーネントです。Keyboardコンポーネントのように検出するボタンを指定してルーチンを終了させたりすることができます。

Joystickコンポーネント

ジョイスティックで反応を記録するコンポーネントです。JoyButtonコンポーネントと異なり、ボタンのみではなくスティックの状態も記録されます。ルーチンの実行中にジョイスティックの状態にアクセスするにはCodeコンポーネントを使ってJoystickオブジェクトにアクセスする必要があります。

Surveyルーチン (オンラインのみ)

Pavloviaを用いたオンライン調査を実施するためのルーチンです。Counterbalanceルーチンのように、コンポーネントとして配置するのではなくこれ自体が独立したルーチンとなります。

ResourceManagerコンポーネント

オンライン実験用のコンポーネントです。実験に使用するリソース(画像ファイルなど)をダウンロードするタイミングを制御します。

ParallelOutコンポーネント

パラレルポートからのトリガー出力を行うためのコンポーネントです。

SerialOutコンポーネント

シリアルポートでの入出力を行うためのコンポーネントです。

EyeTreackerCalibrationルーチン

アイトラッカーのキャリブレーションを行います。通常のコンポーネントではなく単独でルーチンとしてフローに組み込んで使用します。PsychoPyがサポートするアイトラッカーのプラグインをインストールしたうえで、実験設定ダイアログの「アイトラッキング」タブでアイトラッカー選択して使用します。

EyeTreackerValidationルーチン

アイトラッカーのバリデーション(キャリブレーション精度の確認)を行います。通常のコンポーネントではなく単独でルーチンとしてフローに組み込んで使用します。

EyeTreackerRecordコンポーネント

アイトラッカーによる記録の開始、終了を制御するコンポーネントです。

RegionOfInterestコンポーネント

ROIを定義し、視線の停留などを記録するコンポーネントです。

13.3. パッケージとプラグイン

特殊な実験機器とPsychoPyを連携させる必要がある場合や、実験に伴う何らかの処理のためにPsychoPyに含まれていないPythonのパッケージを必要する場合があります。 PsychoPyにやこういった用途の支援のためにプラグインという仕組みがあります。 本書では、この機能はあまり完成度が高くないうえに仕様が何度か変わってきたので取り上げていなかったのですが、最近は動作が安定してきたことや、バージョン2024でそれ以前のバージョンではPsychoPyに組み込まれていた機能がプラグインとして分離されたことなどから、附録で少し解説しておくことにしました。

_images/open-plugin-manager.png

図13.1 プラグイン/パッケージマネージャーを開く

プラグインの管理は「プラグイン/パッケージマネージャー」でおこないます。プラグイン/パッケージマネージャーはBuilderまたはCoderのメニューの「ツール」から「プラグイン/パッケージマネージャー...」を選択するか、コンポーネントペインの一番上にある緑色のプラスマークに「追加...」と書かれているボタンをクリックして起動します( 図13.1 )。 特に初回はダイアログが開くまで時間がかかりますのでそのつもりでお待ちください。

_images/plugin-manager.png

図13.2 左: プラグインの管理とインストール 右: パッケージの管理とインストール

プラグイン/パッケージマネージャーダイアログには「プラグイン」、「パッケージ」、「出力」のタブがあります( 図13.2 )。「プラグイン」タブには、PsychoPyがサポートするプラグインがリストアップされています。プラグインはPythonのパッケージの一種ですが、PsychoPyで利用するために特別な仕様に従って作られています。主にBuilderに新しいコンポーネントを追加したり、PsychoPyがサポートするハードウェアを使用できるようにしたりするために使用します。2025年4月現在のプラグインを示します。

  • Camblidge Research Systems (psychopy-crs)

  • Cedrus Support (psychopy-cedrus)

  • PsychoPy VPixx (psychopy-pixx)

  • Black Box Toolkit Support (psychopy-bbtk)

  • LabHackers Research Equipment (psychopy-labhackers)

  • ioLabs Systems Button Box (psychopy-iolabs)

  • Brain Products GmbH Device (psychopy-brainproducts)

  • Gamma Scientific Inc. Support (psychopy-gammasci)

  • Photo Research Inc. Support (psychopy-photoresearch)

  • Labjack Support (psychopy-labjack)

  • Konica Minolta Support (psychopy-minolta)

  • MRI Emulator (psychopy-mri-emurator)

  • Qmix Syringe Pump Support (psychopy-qmix)

  • LabeoTech device support (psychopy-labeotech)

  • Audio playback support using the SoundDevicew library (psychopy-sounddevice)

  • Audio playback support using the Pyo library (psychopy-pyo)

  • Emotive EEG (psychopy-emotiv)

  • Advanced Vision Science (psychopy-visionscience)

  • Tobii Eyetracker Support (psychopy-eyetracker-tobii)

  • Pupil Labs Eyetracker Support (psychopy-eyetracker-pupil-labs)

  • GazePoint Eyetracker Support (psychopy-eyetracker-gazepoint)

  • EyeLogic Eyetracker Support (psychopy-eyetracker-eyelogic)

  • Whisper Speech-to-Text (psychopy-whisper)

  • SR Resarch Eyetracker Support (psychopy-eyetracker-sr-research)

  • PsychoPy Legacy (psychopy-legacy)

  • PsychoPy Monkeys (psychopy-monkeys)

  • PsychoPy BIDS (psychopy-bids)

ボタンボックスやアイトラッカーなどの特殊なハードウェアをサポートするためのパッケージが数多くありますが、注目しておきたいのがPsychoPy LegacyとPsychoPy Vision Scienceです。 これらは従来のバージョンのBuilderでは標準で組み込まれていて2024では削除されたコンポーネントを含んでいます。 また、オーディオ関係のプラグインのうち、Audio playback support using the SoundDevicew libraryとAudio playback support using the Pyo libraryはそれぞれ以前のバージョンで標準のサウンドバックエンドであったことああるsounddeviceとpyoをサポートするためのものです。 以前のバージョンで作成した実験を実行する際には必要になるかもしれません。

「プラグイン」タブは、プラグインの仕様ではないPythonのパッケージをインストールするときに使います。現時点でインストールされている追加パッケージの一覧(PsychoPyのインストール後に何も追加していなければ 図13.1 右のように空欄)が示されており、その下に「ファイルからインストール」「pipターミナルを開く」というボタンがあります。 追加したいパッケージがzipやtar.gzなどのアーカイブファイルとして提供されている場合は、「ファイルからインストール」を選択してそのファイルを選択するとインストールできます。 pipでweb上からインストールできるパッケージであれば、「pipターミナルを開く」をクリックして、pipのコマンドを入力すればインストールすることができます。

プラグインおよび追加パッケージは、PsychoPyのユーザー設定フォルダ(「 12.7:テンプレートにしてみよう 」参照)のpackagesフォルダ内に保存されます。ですから、PCに他のPythonがインストールされていても、そちらには影響を与えません。

13.4. 予約語

13.4.1. Pythonの予約語 (Python 3.10)

Pythonインタプリタを起動してkeywordをimportすると、keyword.kwlistというリストにPython予約語の一覧が格納されます。以下にPython3.10の予約語を示します。これらの語はBuilderにおいて [名前] や変数名として使用することはできません。

False, None, True, and, as, assert, async, await, break, class, continue, def, del, elif, else, except, finally, for, from, global, if, import, in, is, lambda, nonlocal, not, or, pass, raise, return, try, while, with, yield,

__builtin__という内部モジュールに含まれる以下の語はPythonの予約語ではありませんが、予約語と同様に扱われます(つまり [名前] や変数名として使用することはできません)。

ArithmeticError, AssertionError, AttributeError, BaseException, BlockingIOError, BrokenPipeError, BufferError, BytesWarning, ChildProcessError, ConnectionAbortedError, ConnectionError, ConnectionRefusedError, ConnectionResetError, DeprecationWarning, EOFError, Ellipsis, EnvironmentError, Exception, False, FileExistsError, FileNotFoundError, FloatingPointError, FutureWarning, GeneratorExit, IOError, ImportError, ImportWarning, IndentationError, IndexError, InterruptedError, IsADirectoryError, KeyError, KeyboardInterrupt, LookupError, MemoryError, ModuleNotFoundError, NameError, None, NotADirectoryError, NotImplemented, NotImplementedError, OSError, OverflowError, PendingDeprecationWarning, PermissionError, ProcessLookupError, RecursionError, ReferenceError, ResourceWarning, RuntimeError, RuntimeWarning, StopAsyncIteration, StopIteration, SyntaxError, SyntaxWarning, SystemError, SystemExit, TabError, TimeoutError, True, TypeError, UnboundLocalError, UnicodeDecodeError, UnicodeEncodeError, UnicodeError, UnicodeTranslateError, UnicodeWarning, UserWarning, ValueError, Warning, WindowsError, ZeroDivisionError, _, __build_class__, __debug__, __doc__, __import__, __loader__, __name__, __package__, __spec__, abs, all, anyascii, bin, bool, bytearray, bytes, callable, chr, classmethod, compile, complex, copyright, credits, delattr, dict, dir, divmod, enumerate, eval, exec, exit, filter, float, format, frozenset, getattr, globals, hasattr, hash, help, hex, id, input, int, isinstance, issubclass, iter, len, license, list, locals, map, max, memoryview, min, next, object, oct, open, ord, pow, print, property, quit, range, repr, reversed, round, set, setattr, slice, sorted, staticmethod, str, sum, super, tuple, type, vars, zip

13.4.2. PsychoPyの予約語(2024.2.5)

以下の語はPsychoPyで利用するモジュール名のため、Builderにおいて [名前] や変数名として使用することができません。

core, data, event, gui, microphone, misc, os, psychopy, sound, visual

以下の語はPsychoPyで予約されているため、Builderにおいて [名前] や変数名として使用することができません。これらの他に__で始まる名前が数多く登録されていますが、本文で述べた通り__で始まる名前はそもそも使用するべきではないので省略しています。

clear, copy, fromkeys, get, items, keys, pop, popitem, self, setdefault, update, values

以下の語はBuilderで予約されているため、Builderにおいて [名前] や変数名として使用することができません。

KeyResponse, _thisDir, buttons, component, continueRoutine, currentLoop, dlg, endExpNow, expInfo, expName, filename, frameDur, frameN, globalClock, keyboard, level, logFile, paramName, routineTimer, t, theseKeys, thisComponent, thisExp, win, x, y

以下の語はnumpyおよびnumpy.randomからimportされるのでBuilderにおいて [名前] や変数名として使用することはできません。

asarray, average, randchoice, cos, deg2rad, linspace, log, log10, normal, np, pi, rad2deg, randint, random, shuffle, sin, sqrt, std, tan

13.4.3. Builderの内部変数(2024.2.5)

Builderで使用されている内部変数の概要を示します。

予約語

概要

KeyResponse

予約されています。

_thisDir

Builderを実行するときにカレントフォルダをpsyexpファイルがある場所に移動するために使用されます。

buttons

最後に取得したマウスのボタンの状態を示すリストが格納されています。

component

予約されています。

continueRoutine

実行中のルーチンを継続するか否かを示す真偽値が格納されています。→ 第7章

currentLoop

Loopの種類でstaircase、interleaved staircasesを選択したときに使用されます。→ 第3章

dlg

expInfoダイアログを作成するために使用します。

endExpNow

ESCキーによる実験の中断を有効にしているときに、この変数を利用してESCキー以外のキーで実験を終了できます。

expInfo

expInfoダイアログの項目と値が辞書オブジェクトとして格納されています。→ 第4章第5章

expName

実験設定ダイアログの [実験の名前] に入力した実験名が格納されています。

filename

各種実験記録ファイルやログファイルのファイル名を生成するために利用されます。

frameDur

フレームレートの実測値を保持しています。計測に失敗した場合は1/60secにセットされます。

frameN

現在のフレーム番号を格納しています。→ 第5章

globalClock

実験開始からの経過時間を計測するためのpsychopy.core.Clockのインスタンスが格納されています。→ 第12章

keyboard

キーボード用のライブラリの読み込みのために使用されています。

level

Loopの種類でstaircase、interleaved staircasesを選択したときに使用されます。→ 第3章

logFile

ログファイルを作成するためのpsychopy.logging.LogFileのインスタンスが格納されています。

paramName

Loopの種類でinterleaved staircasesを選択したときに使用されます。→ 第3章

routineTimer

ルーチン終了までの残り時間を計測するためのpsychopy.core.CountdownTimerのインスタンスが格納されています。

t

ルーチンが開始してからの経過時間を格納しています。→ 第5章

theseKeys

最後に取得したキーの状態を示すリストを格納しています。→ 第7章

thisComponent

現在処理中のコンポーネントに対応するインスタンスが格納されています。

thisExp

フローの制御ややデータの保存に関与するpsychopy.data.ExperimentHandlerのインスタンスが格納されています。

win

刺激提示スクリーン本体であるpsychopy.visual.Windowのインスタンスを格納しています。

x

最後に取得したマウスカーソルのX座標を格納しています。Mouseコンポーネントの [マウスの状態を保存] の設定によって単独の値であったりリストであったりします。

y

最後に取得したマウスカーソルのY座標を格納しています。Mouseコンポーネントの [マウスの状態を保存] の設定によって単独の値であったりリストであったりします。

以上に加えて、以下の語は正常なルーチンの実行に必須の変数名と一致するのでBuilderにおいて [名前] や変数名として使用することはできません。

trialComponents (trialはルーチン名)

当該ルーチンでフレーム毎に処理する必要があるコンポーネントのインスタンスを並べたリストが格納されています。→ 第9章

trialClock (trialはルーチン名)

当該ルーチンが開始されてからの経過時間を計測するpsychopy.core.Clockのインスタンスが格納されています。→ 第8章

13.5. ログファイル

PsychoPy Builderで実験を実行すると、拡張子 .log のログファイルが作成されます。実験が十分な精度で実行されているかどうかを確認したい場合や、どうも意図している通りに刺激が提示されないといった問題が生じている時に、このログファイルから情報が得られる場合があります。ただし、Builderの実験がどのようなコードにコンパイルされて実行されるのかある程度知識がないと対策をとることまでは難しいかも知れません。

ログには以下のレベルがあります。実験設定ダイアログでログの出力レベルを選択すると、選択されたレベル以上のログがログファイルに出力されます。例えばwarningを選択すると、waringとerrorのレベルのログが出力されます。infoを選択すると、info、exp、data、warning、errorのレベルのログが出力されます。

  1. error

  2. warning

  3. data

  4. exp

  5. info

  6. debug

以下にdebugを選択した場合のログファイルの先頭部分の例を示します。非常に長い行は中略してあります。 各行の最初の数値が実験開始からの経過時間(秒)、続いてログのレベルが示されています。レベルに続いてその時刻に生じたイベントの内容が書かれています。

3.0528  WARNING  Movie2 stim could not be imported and won't be available
7.8399  INFO  Loaded monitor calibration from ['2015_06_02 16:25']
8.9837  EXP  Created window1 = Window(allowGUI=False, allowStencil=False, ... ()
8.9838  EXP  window1: recordFrameIntervals = False
9.1467  EXP  window1: recordFrameIntervals = True
9.3343  DEBUG  Screen (0) actual frame rate measured at 58.77
9.3344  EXP  window1: recordFrameIntervals = False
9.9161  EXP  Created text = TextStim(alignHoriz='center', alignVert= ... ()
9.9274  EXP  Created stimulus = Polygon(autoDraw=False, autoLog=True, ... ()
9.9286  EXP  <method-wrapper '__getattribute__' of attributeSetter object ... ()
(中略)
13.8202  EXP  Created sequence: fullRandom, trialTypes=4, nReps=25, seed=None
13.8229  EXP  New trial (rep=0, index=0): {u'correct_ans': u'slash', ... ()
13.8499  EXP  text: autoDraw = False
13.8499  EXP  stimulus: fillColor = u'green (named)'
13.8499  EXP  stimulus: pos = array([-400.,    0.])
13.8499  EXP  stimulus: lineColor = u'green (named)'
13.8499  EXP  cross1: autoDraw = True
13.8499  EXP  cross2: autoDraw = True
14.8756  EXP  stimulus: autoDraw = True
15.4022  DATA  Keypress: slash
15.4382  EXP  New trial (rep=0, index=1): {u'correct_ans': u'slash', ... ()
15.4778  EXP  stimulus: autoDraw = False
15.4778  EXP  cross1: autoDraw = False
15.4778  EXP  cross2: autoDraw = False
15.4778  EXP  stimulus: fillColor = u'green (named)'
15.4778  EXP  stimulus: pos = array([-400.,    0.])
15.4778  EXP  stimulus: lineColor = u'green (named)'
15.4778  EXP  cross1: autoDraw = True
15.4778  EXP  cross2: autoDraw = True
16.4711  EXP  stimulus: autoDraw = True
17.0442  DATA  Keypress: slash

もしこの実験をログレベル exp で実行していたら、exp以上のレベルのみが出力されるので、以下のような出力になります。上の例の2行目のINFOと6行目のDEBUGが抜けている点にご注意ください。

3.0528  WARNING  Movie2 stim could not be imported and won't be available
8.9837  EXP  Created window1 = Window(allowGUI=False, allowStencil=False, ... ()
8.9838  EXP  window1: recordFrameIntervals = False
9.1467  EXP  window1: recordFrameIntervals = True
9.3344  EXP  window1: recordFrameIntervals = False
9.9161  EXP  Created text = TextStim(alignHoriz='center', alignVert= ... ()
9.9274  EXP  Created stimulus = Polygon(autoDraw=False, autoLog=True, ... ()
9.9286  EXP  <method-wrapper '__getattribute__' of attributeSetter object ... ()
(中略)
13.8202  EXP  Created sequence: fullRandom, trialTypes=4, nReps=25, seed=None
13.8229  EXP  New trial (rep=0, index=0): {u'correct_ans': u'slash', ... ()
13.8499  EXP  text: autoDraw = False
13.8499  EXP  stimulus: fillColor = u'green (named)'
13.8499  EXP  stimulus: pos = array([-400.,    0.])
13.8499  EXP  stimulus: lineColor = u'green (named)'
13.8499  EXP  cross1: autoDraw = True
13.8499  EXP  cross2: autoDraw = True
14.8756  EXP  stimulus: autoDraw = True
15.4022  DATA Keypress: slash
15.4382  EXP  New trial (rep=0, index=1): {u'correct_ans': u'slash', ... ()
15.4778  EXP  stimulus: autoDraw = False
15.4778  EXP  cross1: autoDraw = False
15.4778  EXP  cross2: autoDraw = False
15.4778  EXP  stimulus: fillColor = u'green (named)'
15.4778  EXP  stimulus: pos = array([-400.,    0.])
15.4778  EXP  stimulus: lineColor = u'green (named)'
15.4778  EXP  cross1: autoDraw = True
15.4778  EXP  cross2: autoDraw = True
16.4711  EXP  stimulus: autoDraw = True
17.0442  DATA Keypress: slash

ログレベルがwarningなら、以下のような出力になります。

3.0528  WARNING  Movie2 stim could not be imported and won't be available

infoやdebugのレベルのログはBuilderの新機能の開発などの際に便利な内容が多く、おそらく一般ユーザーが必要とすることは少ないでしょう。expのレベルは刺激オブジェクトの作成やパラメーターの変更、ループの実行状況などに関する情報が出力されます。dataのレベルは実験記録ファイルへのデータ出力に関する情報が出力されます。expのログの時刻を確認したら、もしかすると刺激提示のタイミングなどに関するトラブルの情報が得られる可能性があります。

warningのレベルでは、致命的ではないかも知れないけれども問題が生じていることが報告されます。上の例ではMovieStim2が利用できないという問題が報告されています。今実行している実験の中で動画刺激を使用していなければ問題ありませんが、今後動画刺激を使いたいと思った時には利用できるようにインストールの問題などを解決しなければいけないことを示しています。

warningのレベルで最も注意すべきは、以下のようにlast frame was XX msというログが出力されている場合です。このようなログが出力されている場合は、フレームの描画に問題があって一定のスピードで描画ができていません。アニメーションする刺激の描画がカクカクしてしまったり、刺激の出現、消去のタイミングがずれてしまっている可能性があります。常駐プログラムの停止、グラフィックデバイスドライバの更新や、高性能グラフィックボードの追加などの対策が必要となる可能性があります。

16.5660  WARNING  t of last frame was 30.22ms (=1/33)
16.5974  WARNING  t of last frame was 31.41ms (=1/31)
16.6285  WARNING  t of last frame was 31.09ms (=1/32)

13.6. PsychoPy設定ダイアログ

PsychoPy設定ダイアログの各項目について簡単にまとめました。

13.6.1. 一般

[単位]

実験の設定ダイアログで [単位] を「PsychoPyの設定を用いる」に設定した場合、ここで選択した単位が使用されます。

[フルスクリーン]

チェックしておくと標準でフルスクリーンウィンドウで刺激を描画しようとします。実験の設定ダイアログで「フルスクリーンウィンドウ」のチェックを外している場合は、実験の設定ダイアログが優先されます。

[GUIを使用]

チェックしておくと標準でマウス等を有効にします。

[パス]

独自のPythonモジュールを使用したい場合、モジュールが置かれているパスをここに列挙しておくとimportできます。

[fracオーディオ圧縮]

fracを利用したい場合、ここへfracへのパスを設定します。

[実験終了キー]

実験を終了させるキーをESC以外にしたい時にここに指定します。pygletのキー名でなければいけません。

[実験終了キーのモディファイア]

「Shiftを押しながらESC」のようにモディファイアキーを押しながら終了するようにしたい時にここに指定します。

[ガンマエラーの処理]

ガンマ補正が出来なかった時に終了するか警告するかを指定します。

[スタートアッププラグイン]

PsychoPy起動時に追加で読み込むプラグインを指定します。

[スタートアッププラグイン]

音声文字変換でGoogle Cloud APIを使用する際に、Google Cloud APIキーが格納されたJSONファイルをここに指定します。

13.6.2. アプリケーション

[起動時にチップを表示]

チェックしておくとPsychoPy Builder/Coderを起動したときに「今日のチップ」を表示します。

[標準で開くウィンドウ]

PsychoPyを起動したときに開くウィンドウを指定します。

[設定の初期化]

設定を初期化したいときは、ここにチェックをしてPsychoPyを再起動してください。

[設定の自動保存]

ウィンドウを閉じるときに、未保存の設定を自動的に保存します。

[デバッグモード]

PsychoPyのデバッグ用機能を有効化します。PsychoPyそのもののデバッグであって、ユーザーが作成した実験スクリプトのデバッグではありません。

[ロケール]

PsychoPyのメニュー等の表示に使う言語を選択します。「システムの言語設定」にしておくと、OSの言語の設定を利用します。

[エラーダイアログ]

PsychoPyの動作中にエラーが生じた際にダイアログを表示します。バグの報告をする際はこのダイアログの情報を伝えると開発チームによる問題の把握に役立ちます。

[テーマ]

起動時に適用するテーマを指定します。旧バージョンの見た目に近づけたい場合はClassicを選択するとよいでしょう。

[スプラッシュを表示]

起動時にスプラッシュウィンドウを表示するか否かを指定します。

13.6.2.1. Builder関連

[前回の実験を開く]

チェックしておくと、前回開いていた実験を自動的に開きます。

[Codeコンポーネントの言語]

Codeコンポーネントの標準のコードタイプを指定します。JavaScriptへの自動変換に問題がある場合や、JavaScript用入力欄が不要な場合などに設定を変更してください。

[名前空間の整理]

コードのコンパイルに関連するオプションです。通常は変更する必要はないでしょう。

[コンポーネントフォルダ]

パスを列挙したリストを指定します。パス内に含まれる拡張子.pyのファイルをBuilderのコンポーネントとして読み込みます。

[コンポーネント表示制限]

BuilderにおいてPythonによるローカル実験、PsychoJSによるオンライン実験それぞれに対応したコンポーネントのみを表示したい場合にここで設定します。

[表示しないコンポーネント]

特定のハードウェア用コンポーネントなど、使用しないコンポーネントの名前をここに書いておくと、コンポーネントペインに表示されなくなります。ロケールが日本語に設定されていて、プロパティ設定ダイアログのタイトルバーに「Fooコンポーネント」と表示されているコンポーネントを非表示にしたい場合はFooComponentと書く必要があります。

[長いコンポーネント名を省略]

コンポーネントをルーチンに配置する際、 [名前] に長い文字列を指定すると、名前を表示するスペースを確保するためにタイムラインの表示幅が狭くなってしまいます。 この項目をチェックしておくと、 [名前] が長いときに一部を省略して表示します。

[デモのディレクトリ]

Builderのデモが展開されているディレクトリを指定します。Builderウィンドウのメニューの「デモ」メニューから「デモを展開...」すると自動的に設定されます。展開されたデモを手作業で別の場所に移したりしない限り、通常は変更する必要はありません。

[データ保存フォルダ]

Builderの実験を実行したときに、記録ファイルやログファイルが保存されるフォルダ名を指定します。

[Builderのレイアウト]

Builderの各ペインの配置を指定します。

[常にreadmeを表示]

psyexpファイルと同一のフォルダにreadme.txtというファイルが存在している場合、この項目をチェックしておくとreadme.txtの内容が表示されます。

[お気に入りの最大登録数]

コンポーネントペインの「お気に入り」に登録できるコンポーネント数の上限を指定します。

[Routineを閉じるときの確認]

Routineのタブを閉じるときに確認ダイアログを表示するかどうかを指定します。

13.6.2.2. Coder関連

[読み込み専用で開く]

実験を実施する際に、不用意にコードが変更されてしまうのを防ぎたいときにチェックします。

[出力用フォント]

出力パネルの表示に使用するフォント名を指定します。複数のフォントを列挙すると、最初に読み込むことができたフォントを使用します。

[コード用フォント]

コードの表示に使用するフォント名を指定します。複数のフォントを列挙すると、最初に読み込むことができたフォントを使用します。

[コード用フォントサイズ]

フォントサイズを6から24の整数で指定します。

[出力用フォントサイズ]

フォントサイズを6から24の整数で指定します。

[行間スペース]

行間を整数で指定します。

[文字数ガイドの位置]

1行の長さの目安となる縦線を引く位置を文字数で指定します。

[ソースアシスタントを表示]

チェックするとCoder起動時にソースアシスタントを表示します。変数に格納されているクラスのヘルプなどが表示されます。

[出力パネルを表示]

チェックを外してPsychoPyを再起動すると、Coderウィンドウの下部に出力パネルが表示されません。

[自動補完]

入力時にコード補完の候補と関数呼び出しのヒントを表示するか否かを指定します。

[前回のファイルを開く]

前回終了時に開いていたファイルを自動的に開きます。

[優先するシェル]

Coderウィンドウ下部のシェルパネルで優先するシェルを指定します。

13.6.3. Pilotモード

Pilotモードに関する設定を行います。「 2.10:Pilotモードのウィンドウサイズを設定しよう 」も参照してください。

[ウィンドウモードを強制]

Pilotモード時に強制的にウィンドウモードで実行します。実験設定ダイアログの [フルスクリーンウィンドウ] の設定は無視されます。

[ウィンドサイズを強制]

Pilotモード時に強制的にウィンドウをここで指定したサイズにします。実験設定ダイアログの [ウィンドウの大きさ (pix) $] は無視されます。

[Pilotモードのログレベル(ファイル)]

Pilotモード時にログファイルに出力されるログのレベルを指定します。

[Pilotモードのログレベル(コンソール/アプリ)]

Pilotモード時にコンソールやアプリに出力されるログのレベルを指定します。

[Pilotモードインジケーターの表示]

Pilotモード時にインジケーター(画面を囲むオレンジ色の枠+左下のメッセージ)を表示するか否かを指定します。

[Rushモード無効化]

Pilotモード時にRushモードを無効にするか否かを指定します。

13.6.4. キー設定

ショートカットキーを編集することができます。個々の項目については省略します。

13.6.5. ハードウェア

[オーディオドライバ]

音声刺激の再生に使用するドライバを列挙します。最初にロードできたものを利用します。

[オーディオデバイス]

音声刺激の再生に使用するデバイスを指定します。PCに複数のオーディオデバイスがある場合、適切なものを選択しないと音声が再生されないので注意してください。

[パラレルポート]

パラレルポートのアドレスを列挙します。ここへアドレスを記入しておかないとParallelOutコンポーネントでアドレスを選択できません。

[Qmixの設定]

Qmix pump(シリンジ制御ライブラリ)の設定を指定します。

13.6.6. ネットワーク

[プロキシ]

ネットワークアクセスにプロキシが必要な場合、ここへアドレスとポートを記入します。

[プロキシの自動構成]

自動的にプロキシを構成しようとします。自動構成が利用可能な場合は「プロキシ」の設定に優先します。

[利用統計の送信を許可]

PsychoPy開発チームへ利用統計を送信することを許可します。開発の参考にするため、可能な限りチェックしておいてください。

[更新の確認]

起動時に新しいバージョンのPsychoPyが公開されていないか確認します。

[タイムアウト]

ネットワーク接続のタイムアウト時間を指定します。

13.7. 実験中に日本語文字入力をさせたい方のために:「オンライン実験」をローカル環境でで実行する

題目の通り、実験の手続き上、フリーテキストで日本語文字入力をさせたい方向けの情報です。 今後のバージョンアップでTextboxコンポーネントやFormコンポーネントでの日本語入力がローカル実験でも使用できるようになった場合は不要になる内容なので、附録として収録しておきます。

  • 準備作業
    • このデモのためのフォルダを作成して、その中にdemo_textinput.psyexpという名前で新しい実験を保存する。

    • 実験設定ダイアログの「スクリーン」タブの [マウスカーソルを表示] をチェックし、 [単位] がheightであることを確認する。

  • trialルーチン

    • TextBoxコンポーネント(「反応」カテゴリにある)をひとつ配置し、以下のように設定する。

      • 「基本」タブの [開始] を0.5、 [終了] を空欄にする。 [編集可能] をチェックし、 [文字列] を空欄にする。

      • 「レイアウト」タブの [オーバーフロー] を スクロール にする。

      • 「外観」タブの [塗りつぶしの色] をdarkgrayに、 [枠線の色] をwhiteにする。

      • 「書式」タブの [行揃え] を 左上 にする。

    • Buttonコンポーネントをひとつ配置し、以下のように設定する。

      • 「基本」タブの [開始] を0.5、 [終了] を空欄にし、 [ボタンのテキスト] を OK にする。

      • 「レイアウト」タブの [サイズ [w, h] $] を (0.1, 0.05) に、 [位置 [x, y] $] を (0.3, -0.4) にする。

      • 「書式」タブの [文字の高さ $] を0.03にする。

作業ができたら、Builderのウィンドウ上部のリボンを見てください。「ブラウザ」というカテゴリがあり、 図13.3 に示す「ブラウザで動作確認」ボタンがあるはずです。 もしこのボタンが緑色ならPilotモードになっていないので、Pilotモードに切り替えてください。 このボタンをクリックすると、自動的にwebブラウザが開いて、ブラウザの中で実験が動作します。バージョン2024.2.5の時点で、Pilotモードの諸設定はブラウザ上で実行する場合無効になるので、Pilotモードを示すオレンジ色の枠線とメッセージも表示されませんし、ウィンドウモードの強制もされません。ブラウザで実行すると、Textboxに文字を入力する際に日本語入力に切り替えても自然に入力、漢字変換できることを確認してください。

_images/test-on-browser.png

図13.3 実験をローカルブラウザ上で動作確認する

このように、実験を「オンライン実験」の「ローカルブラウザ上での動作確認」として実行することで、事実上ローカル環境で実行することができます。これを利用すると、TextBoxコンポーネントやFormコンポーネントのフリーテキスト入力で日本語を問題なく入力できます。

この方法のデメリットは、オンライン実験に対応しているコンポーネントしか使用できないことです。オンライン実験に対応しているコンポーネントを確認するには、Builderのコンポーネントペインの一番上にあるフィルターボタン( 図13.4 )を使用します。もし表示されていなければ、コンポーネントペインを一番上までスクロールしてください。「お気に入り」カテゴリの上にあるはずです。 フィルターボタンをクリックすると、 図13.4 の左下あたりに示されている小さなダイアログが開きます。 ここで「PsychoJS (online)」をクリックすると、オンライン実験に対応しているコンポーネントのみがコンポーネントペインに表示されるようになります(PsychoPy設定ダイアログの [コンポーネント表示制限] と連動しています)。ちなみに「PsychoPy (local)」はローカル実験に対応しているもののみ、「Both」はオンラインとローカルの両方に対応しているもののみに表示を制限します。「Any」にするとすべてのコンポーネントが表示されます。文字入力をおこないたい実験で他に使いたいコンポーネントがオンライン実験に対応しているか確認してください。

_images/filter-components.png

図13.4 表示するコンポーネントをオンライン実験に対応するもののみに制限する

あともうひとつ、デメリットというほどの事ではないかも知れませんが、この方法で実験をおこなうと、実験終了時にデータが「ダウンロード」されるので、データはブラウザの標準のダウンロードフォルダに出力されます。「実験に使用するファイルや記録されたデータファイルはすべてpsyexpファイルがあるフォルダにまとめる」というBuilderの設計思想から外れた挙動となるので注意してください。 実験の時間精度に関しては、最近のwebブラウザはその中でリアルタイムな操作が求められるアクションゲームを実行できるような性能を持っており、一般的な心理実験で問題になることはほとんどないでしょう。

13.8. ちょっとしたデータの整理

Builderの弱点はいろいろありますが、そのひとつに「実験記録ファイルのフォーマットが扱いづらい」というものがあります。各コンポーネントの開始、終了時刻がデフォルトで出力されるようになってからやたらと列数が多いこと、列名が長くてExcelなどで表示すると冒頭部しか表示されないこと(slider.started, slider.stopped, slider.response, slider.rt,... と冒頭部が同じ列が続くときは特に)、ループが複数ある実験では空白のセルがやたらと多くなることなど、挙げればきりがありません。

データ処理は個人の好みが強く出るものだと思いますし、実験内容によってどのように処理するのが望ましいか大きく異なるので、「このように整理するとよい」という例を示すのは難しいですが、ここではExcelにせよRにせよ、他のソフトウェアへ引き継ぐことを前提に必要なデータを抜き出す例をひとつ挙げます。

まず、教示や練習試行など、分析の対象としない出力がたくさんあって、どこかのループに分析対象となる出力がある実験データから、分析対象部分だけを取り出してくるパターンです。 sliderという名前のSliderコンポーネントで反応を測定していて、刺激画像を表すパラメータstim_imageと、sliderによる評定値(slider.response)と反応時間(slider.rt)が分析対象とします。 参加者を区別するためにparticipantの情報も必要でしょう。 psyexpファイルと同じフォルダにdataと言うフォルダが出来ていて、そこにCSV形式の実験記録ファイルが蓄積されているとします。 この状況で、以下のコードをpsyexpファイルと同じフォルダに作成してPsychoPy Coderで実行すると、全参加者の反応をまとめたものがalldata.csvというファイルが作成されます。

# coding: utf-8
# #で始まる行はコメントです。 1行目の # coding: はスクリプトの文字コードを表します。
# コード内に非ASCII文字がある場合は文字コードを指定する必要があります。
# psychopyのCoderは文字コードとしてUTF-8を使うのでUTF-8と宣言しています。
import pandas as pd
import glob

# columsに抜き出す列名をカンマ区切りで並べます。
# target_columnが空欄の行は出力しません。分析の対象としたい列、
# たとえば参加者の反応が記録された列を指定するといいでしょう。
columns = ['participant','stim_image', 'slider.response', 'slider.rt']
target_column = 'slider.response'

# 実行フォルダ内にあるdataフォルダに含まれる拡張子.csvファイルを読み込んで
# columnsに挙げられた列のデータをalldataに追加していきます。
alldata = []

# globは引数に合致するファイルのパスを順番に取り出す関数で、forと組み合わせると
# 取り出されたファイルを順番に処理していくことができます。
for datafile in glob.glob('data/*.csv'):
    # pandasのread_csv()でcsvファイルを開きます。
    df = pd.read_csv(datafile)
    # target_columnがnaでない(=空白でない)行を抜き出してalldataに追加します。
    alldata.append(df.loc[~df[target_column].isna(), columns])

# alldataに追加されたデータをconcat()でひとつに結合して、
# to_csv()でCSVファイルに出力します。
pd.concat(alldata).to_csv('alldata.csv', index=False)

コメント(コード内の # から行末までの部分)を多めに入れておいたので、コメントを読んでいただければおおよその動作はわかると思います。 columnsとtarget_columnを編集すれば他の実験にも使用できるでしょう。

実験内に2つ以上のループがあって、それぞれのループでの反応を出力しないといけない場合、どういった形でデータを整頓したいかによって話がかわってきますが、ループごとに別々のデータファイルになっていいなら、上記コード冒頭のimport文以降の処理全体をfor文で囲んで、columns、target_columnと出力ファイル名を変更しながら繰り返せば手っ取り早いです。 実験記録ファイルの読み込みにpandasというパッケージを使っているのですが、pandasを使うと条件別に平均を計算したりといった処理が簡単におこなえるので、興味がある人はpandasの使い方を勉強してください。