14. 付録

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

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

Apertureコンポーネント

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

Dotsコンポーネント

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

EnvelopeGratingコンポーネント

キャリアとエンベロープという2つの周期的なテクスチャをブレンドした刺激を描くコンポーネントです。

Noiseコンポーネント

様々なノイズ画像を描くコンポーネントです。ノイズの種類やパラメータ、更新タイミングなどを指定できます。

Brushコンポーネント

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

cedrusButtonBoxコンポーネント

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

ioLabsButtonBoxコンポーネント

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

JoyButtonコンポーネント

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

Joystickコンポーネント

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

ResourceManagerコンポーネント

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

EmotivMarkingコンポーネント

Emotive製のEEGにマーカーを送信するコンポーネントです。

EmotivRecordingコンポーネント

Emotive製のEEGで記録を行うコンポーネントです。

Unknownコンポーネント

新しいバージョンのBuilderで追加されたコンポーネントを使った実験を古いバージョンのBuilderで開いた時など、使用中のBuilderで利用できないコンポーネントが実験に含まれてる場合があります。このような時、利用できないコンポーネントがUnknownコンポーネントとして表示されます。実験を作成する際にこのコンポーネントを配置しても何も起きません。

ParallelOutコンポーネント

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

SerialOutコンポーネント

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

EyeTreackerCalibrationコンポーネント

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

EyeTreackerValidationコンポーネント

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

EyeTreackerRecordコンポーネント

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

RegionOfInterestコンポーネント

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

PeristalticPumpコンポーネント

LabeoTech社のディスペンサーを制御するコンポーネントです。

QmixPumpコンポーネント

Qmixライブラリ対応のシリンジユニットを制御するコンポーネントです。

14.2. 予約語

14.2.1. Pythonの予約語 (Python 3.7)

Pythonインタプリタを起動してkeywordをimportすると、keyword.kwlistというリストにPython予約語の一覧が格納されます。以下にPython3.7の予約語を示します。これらの語は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

14.2.2. PsychoPyの予約語(2020.2.9)

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

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

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

ENVIRON, FINISHED, FOREVER, NOT_STARTED, PAUSED, PLAYING, PRESSED, PSYCHOPY_USERAGENT, PY3, RELEASED, SKIP, STARTED, STOPPED, __builtins__, __cached__, __doc__, __file__, __loader__, __name__, __package__, __spec__, _gitStandalonePath, absolute_import, abspath, copy, gitExe, join, os, print_function, sys

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

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

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

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

14.2.3. Builderの内部変数(2020.2.9)

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

予約語

概要

KeyResponse

予約されています。

_thisDir

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

buttons

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

component

予約されています。

continueRoutine

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

currentLoop

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

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を選択したときに使用されます。→ 第11章

logFile

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

paramName

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

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はルーチン名)

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

trialClock (trialはルーチン名)

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

14.3. ログファイル

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)

14.4. PsychoPy設定ダイアログ

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

14.4.1. 一般

[ウィンドウ描画ライブラリ]

ウィンドウの描画に使うライブラリを指定します。pyglet、glfw、pygameが選択できますが、pygameは旧バージョンで作成した実験との互換性のために残されているものなので、これからPsychoPyを使う人は選択すべきではありません。

[単位]

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

[フルスクリーン]

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

[GUIを使用]

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

[パス]

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

[fracオーディオ圧縮]

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

[実験終了キー]

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

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

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

[ガンマエラーの処理]

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

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

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

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

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

14.4.2. アプリケーション

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

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

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

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

[設定の初期化]

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

[設定の自動保存]

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

[デバッグモード]

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

[ロケール]

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

[エラーダイアログ]

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

[テーマ]

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

[前回の実験を開く]

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

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

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

[名前空間の整理]

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

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

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

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

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

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

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

[デモのディレクトリ]

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

[データ保存フォルダ]

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

[Builderのレイアウト]

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

[常にreadmeを表示]

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

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

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

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

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

[読み込み専用で開く]

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

[出力用フォント]

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

[コード用フォント]

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

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

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

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

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

[行間スペース]

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

[文字数ガイドの位置]

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

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

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

[出力パネルを表示]

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

[自動補完]

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

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

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

[優先するシェル]

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

14.4.3. キー設定

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

14.4.4. ハードウェア

[オーディオライブラリ]

音声刺激の再生に使用するライブラリを列挙します。実験の設定ダイアログで「PsychoPyの設定を用いる」を選択した場合、ここに列挙されたものを順番にロードして最初にロードできたものを利用します。

[オーディオレイテンシの設定]

PsychToolboxのオーディオを使用する際に、レイテンシの設定を選択します。

[オーディオドライバ]

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

[オーディオデバイス]

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

[パラレルポート]

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

[Qmixの設定]

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

14.4.5. ネットワーク

[プロキシ]

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

[プロキシの自動構成]

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

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

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

[更新の確認]

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

[タイムアウト]

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

14.5. PsychoPy 2024.1.0 の新機能

PsychoPy 2024.1.0では非常に重要な機能がいくつかついており、本来なら本書全体を修正する必要があるのですが、十分な時間が確保できないためひとまず付録という形で紹介しておきます。

14.5.1. Pilotモードとrushモード

本実験に入る前の動作確認に使用するPilotモードが追加されました。BuilderやCoderの画面上にあるリボン(リボンについては後述)や「実験の設定」ダイアログの「基本」タブにある [実行モード] から、従来の実行モードである「実行モード」と「Pilotモード」を切り替えることができます。

_images/202411_pilot_mode.png

図14.1 BuilderおよびCoderのリボンに表示されているスイッチで現在のモードの確認と切り替えができます。

従来の実行モードでは、フルスクリーンで実行した実験に問題があってハングアップしてしまった場合、実験を停止させるのに苦労することがありました。Pilotモードでは強制的にウィンドウモードで実行されますので、ハングアップしてしまったときにも、簡単にRunnerウィンドウの「終了」ボタンをクリックして実験を停止させることができます。Pilotモードではウィンドウにオレンジ色の枠が描かれ、左下に"PILOTING: Switch to run mode before testing."と表示されますので、どちらのモードで実行しているのかがすぐわかります。 「 3.11.1:自分のキーボードで使えるキー名を確かめる 」で紹介したキー名を表示させる実験などは、Pilotモードで実行するのがおすすめです。

_images/202411_pilot_frame.png

図14.2 Pilotモードで実験を実行するとウィンドウモードで実行され、オレンジ色の枠が描画されます。

Pilotモードでのウィンドウモード強制やオレンジ色の枠の描画は、「PsychoPyの設定」ダイアログに追加された「Pilotモード」で無効にすることができます。ここでは他にもログファイルに出力される情報の変更(標準では最も詳細な動作情報が出力されるdebugに設定されている)や、後述のrushモードを利用するか否かを切り替えることができます。通常、これらの設定を変更する必要はないでしょう。

_images/202411_pilot_settings.png

図14.3 PsychoPyの設定ダイアログでPilotモードの動作を変更できます。

rushモードというのは、実験プログラムの優先度を高めるモードです。WindowsにせよMacOSにせよ、現代のOSでは、さまざまな便利な機能を実現するために、ユーザー側からは見えない数多くのプロセスが実行されています。実験の実行中に他のプロセスが処理時間を要する作業を始めると、実験の時間精度に悪影響を与えることがあります。rushモードをONにすると、PsychoPyは実験実行時に実験のプロセスをできる限り高い優先度で実行しようとします。rushモードを使うかどうかは「実験の設定」ダイアログの「基本」タブにある [rushモード] で実験ごとに指定できます。

14.5.2. フレームレート測定機能のON/OFF

Builderは実験の時間精度を確保するために、実験実行環境のフレームレートの実測値に基づいて刺激を制御しています。少し前のバージョンのBuilderより、実験を実行すると最初に"Attempting to measure frame rate of screen, please wait..."というメッセージが表示されるようになりましたが、この時にフレームレートの測定を行っています。どの程度の時間精度が必要かは実験の内容に寄りますが、時間精度が高すぎて困るということはないでしょうから、原則としてこの機能はONにしておくべきです。 しかし、マルチモニター環境など、一部の実行環境でフレームレート測定機能のせいで実験がうまく開始されないことがあるため、フレームレート測定をOFFにする機能が追加されました。

「実験の設定」ダイアログの「スクリーン」タブに [フレームレートの測定] という項目があり、その下に [フレームレート測定時のメッセージ] という項目があります。 [フレームレートの測定] のチェックをOFFにすると、 [フレームレート測定時のメッセージ][フレームレート] に変わります。これでフレームレート測定がOFFになりましたが、Builderの実験は フレームレートが与えられないと正常に動作しない ため、 [フレームレート] にフレームレートを得るための式を書かなければいけません。60Hzのモニターを使っているのなら60と直接入力してもよいでしょうし(仕様通りに動作するとは限らないからこそ実測するのですが、それほど時間精度が必要ないなら十分でしょう)、フレームレートを得るための独自の式を書いても構いません。

_images/202411_framerate_settings.png

図14.4 フレームレート測定機能をOFFにすることができます。

なお、フレームレート測定機能がONのとき、 [フレームレート測定時のメッセージ] を編集すれば画面上に表示されるメッセージを変更できます。ただし、バージョン2024.1.1の時点でフォントの種類や大きさを変更することができません。日本語の文字などの非ASCII文字は文字化けする可能性が高いのでご注意ください。

14.5.3. ルーチンごとのスクリーン設定/ルーチンのスキップ

Routineペインの左上に[Routineの設定]が追加され、ルーチン毎に設定を切り替えられるようになりました。ルーチンの設定ダイアログには「基本」、「Flow」、「ウィンドウ」、「データ」、「テスト」のタブがあります。「データ」と「テスト」はコンポーネントのプロパティ設定ダイアログと同じです。「基本」ではルーチンの名前を変更できるほか、ルーチンについての説明を記入しておくことができます。ルーチンを使いまわす時などのためにいろいろとメモしておくとよいでしょう。

「ウィンドウ」タブにある [このルーチン固有のスクリーン設定を使用] をチェックすると、 図14.5 のようにスクリーンの背景色と背景画像に関する項目が表示されます。これらは実験の設定ダイアログの「スクリーン」タブにある同名の項目と同じ働きをしますが、このルーチンに対してだけ有効です。

_images/202411_routine_screen.png

図14.5 ルーチンごとに背景色と背景画像を設定できます。

「Flow」タブには [タイムアウト][条件に合致する場合はスキップ...] という項目があります。

_images/202411_routine_flow.png

図14.6 [Flow]タブではルーチンの終了時刻を設定したり、ルーチンをスキップする条件を設定したりできます

[タイムアウト] は通常のコンポーネントの [終了] と同様ですが、ルーチン内にまだ終了していないコンポーネントがあっても強制的に終了させることができます。 図14.7 ではkey_respとpolygonの [終了] を空白にして終了しないようにしていますが、ルーチンの設定の [タイムアウト] を2秒に設定しています。タイムラインの2秒のところにオレンジの線が引かれて、それより右側ではkey_respとpolygonの実行期間を示すバーがグレーになっているのがわかります。 おそらくこの機能が真価を発揮するのは、何らかの条件により繰り返しのたびに制限時間が変化するルーチンを作成する必要がある時です。従来なら、ルーチン内の(制限時間の変化を受ける)すべてのコンポーネントの終了時刻を変数にする必要がありましたが、この [タイムアウト] を使うと一か所設定するだけで済みます。他には、実験の動作確認を短時間で行うために、重要ではないルーチンの [タイムアウト] を0.5秒や1秒に設定すれば、そのルーチンをきちんと表示させつつ短時間で先のルーチンへ進めることができます。

_images/202411_routine_flow_limit.png

図14.7 [タイムアウト] を設定すると、それより長時間実行されるよう設定されているコンポーネントがあっても強制的にルーチンが終了します。

[条件に合致する場合はスキップ...] は非常に重要な機能です。 例えば200試行を繰り返すループがあって、50試行ごとにキーを押すまで先へ進まない休憩用の画面を表示したいとします。従来、このような手続きはループの繰り返し回数に0を設定するテクニックとCodeコンポーネントを組み合わせるか、Codeコンポーネントを使って1フレームも描画する前にルーチンを抜ける必要がありましたが、このような「泥臭い」方法を使わずに実現できるようになります。 具体例として、 図14.8 のようにtrialsループ内にtrialとrestというルーチンがあって、繰り返し50回毎にrestを表示したいとします。 このとき、tralsループのデータ属性thisNには現在の繰り返し回数を表す整数が格納されているので(最初の繰り返しが0)、trials.thisN % 50とすれば現在の繰り返し回数を50で割った余りが得られます。 trials.thisN % 50 != 0とすれば余りが0でない時にスキップされるので、結果として50回の繰り返しに1度だけルーチンが実行されます。 「 8.11:軌跡データを間引きしよう 」も参考にしてください。

_images/202411_routine_flow_skip.png

図14.8 [条件に合致する場合はスキップ...] を使うと繰り返し中の特定の回だけ実行されるルーチンを簡単に作成できます。

14.5.4. CounterBalanceルーチン

これも非常に重要な新機能であり、従来は難しかった参加者間のカウンターバランスを取ることが可能となります。 CounterBalanceルーチンは、Componentペインの「カスタム」カテゴリの中にあります( 図14.9 参照)。 Componentペインにあるアイテムは通常「Codeコンポーネント」のように「コンポーネント」と呼ばれますが、CounterBalanceルーチンは「ルーチン」と呼ばれている点にご注意ください。 CounterBalanceルーチンは他のコンポーネントのように「ルーチンの中に配置する」のではなく、それ自体が独立したルーチンとして働きます。 ですので、CounterBalanceルーチンのアイコンをクリックすると、図14.9 のようにcounterbalaranceというルーチンが追加されます。 そしてcounterbalanceルーチンは通常のルーチンのようにタイムラインが表示されず、counterbalanceルーチンの動作を決定する項目が表示されます。 作成されたCounterBalanceルーチンは、図14.9 のFlowペインのようにフロー内に1回挿入することによって有効になります。

_images/202411_counterbalance.png

図14.9 CounterBalanceルーチンを挿入した様子

CounterBalanceルーチンは、初期状態で 図14.9 のように [グループの定義...] が「グループ数」に設定されています。 この設定のときのCounterBalanceルーチンの動作を 図14.10 に示します。 図上段の左端は、 [グループ数] を2、 [グループごとのスロット] (以下スロット)を5、 [繰り返し回数] を1に設定した後、最初に実験を実行した直後の状態を示しています。 [グループ数] で設定した個数の箱のようなものが用意され、順番に0, 1と番号がつけられています。 それぞれの箱には [グループごとのスロット] で設定した個数のボール(とでもしておきましょう)が入っています。 実験が1回実行されるたびに、いずれかのグループがランダムに選択され、そのグループからボールがひとつ取り出されていきます。 選択されたグループは、counterbalance.group(counterbalanceの部分はCounterBalanceコンポーネントの [名前])というデータ属性で参照できます。 各グループの残り個数は実験のフォルダに自動的に作成される shelf.jsonというファイルに保存されます。 そして、すべてのグループのボールがなくなると、グループを選択することができないためcounterbalance.groupの値はNoneになります。 [使いつくした場合に実験を終了] をチェックしておくと、すべてのグループのボールが残っていない場合に自動的に実験が終了します。

_images/202411_counterbalance_behav.png

図14.10 CounterBalanceルーチンの働き

図14.10 の下段は [繰り返し回数] の働きを示しています。 [繰り返し回数] を2以上の整数にすると、すべてのスロットが満ちている状態から空になるまでの動作を設定された回数だけ繰り返します。 したがって、 [グループごとのスロット] を6、 [繰り返し回数] を1に設定した場合も、 [グループごとのスロット] を3、 [繰り返し回数] を2に設定した場合も、各グループは6回実行されます。 ただし、前者の場合はグループ0が6回連続した後にグループ1が6回連続するということが稀とはいえ起こり得ますが、後者の場合は各グループ3回までしか連続することがありません。 「 3.5:繰り返しを設定しよう 」におけるfullRandomとrandomの違いに似ていると言えるでしょう。

なお、現在の実行状況を保存しているshelf.jsonというファイルはJSONという形式のテキストファイルであり、一般的なテキストエディタで内容を確認することができます。 JSONについてここでは詳しく触れませんが、だいたい想像がつくのではないかと思います。

{
 "counterbalance": {
  "_reps": 1,
  "0": 5,
  "1": 4
 }
}

実験の作成中、一度動作確認した後に [グループ数][グループごとのスロット] を変更しても、変更が反映されず以前の設定のままとなることがあります。 その場合は shelf.jsonを削除すれば次回の実行時に変更後の設定でshelf.jsonが作成されます。

本文中でこのCounterBalanceルーチンを紹介するとすれば、もっともふさわしいのは 第4章 でしょう。 「 4.6:実験情報ダイアログで条件ファイルを指定しよう 」では20度と70度の2種類のコンテキスト刺激のどちらを使用するかを実験情報ダイアログで選ぶようにしました。 ここで実験情報ダイアログに項目を追加せず、代わりにCounterBalanceルーチンを作成してフローの先頭(厳密にはグループ名を必要とするルーチンやループより前)に挿入し、 [グループ数] を2にします(初期値のまま)。 [グループごとのスロット][繰り返し回数] は募集する参加者数に応じて決めます。 そして、条件ファイル名(exp04_20.xlsxとexp04_70.xlsx)をexp04_group0.xlsx、exp04_group1.xlsxのように グループ番号だけが異なる名前 にします。 先述の通り、選択されたグループ名は counterbalance.group で得られるのですから、trialsループに指定する条件ファイルを以下のようにすれば、グループに応じて条件ファイルを切り替えられます。グループ名は0や1といった数値ですがデータ型はstrであることに注意してください(あと$も忘れずに!)。

'exp04_group'+counterbalance.group+'.xlsx'

グループごとに不均等な回数を割り当てる必要がある場合や、グループごとに切り替えたいパラメータがある場合は、 [グループの定義...] で「条件ファイル」を選択します。 この条件ファイルには以下のパラメータが必要です。

group

グループ名。日本語の文字などの非ASCII文字も使えます。

cap

各グループに割り当てる回数。

これら以外のパラメータが与えられた場合、実験内ではcounterbalance.params['パラメータ名']という式で値を参照することができます。 具体例として、 図14.11 のような条件ファイルを考えます。

_images/202411_counterbalance_cndfile.png

図14.11 CounterBalanceルーチン用の条件ファイルの例

「70度条件」グループに10回、「20度条件」グループに40回を割り振っていますので、50回実験を行うと10回(20%)が70度条件、40回(80%)が20度条件になります。 さらにconditionsFileというパラメータを用意して対応する条件ファイル名を定義していますので、ループの条件ファイルは以下のように書くことができます。 先の例のようにexp04_group0.xlsx, exp04_group1.xlsxといった番号順の条件ファイル名よりも、内容がわかりやすくて管理しやすいでしょう。

'counterbalance.params['conditionsFile']

14.5.5. ユーザーインターフェースの変更

Builder, Coder, Runnerの各ウィンドウにあったツールバーが、Microsoft Officeのようなリボンに変更されました。 とはいえOfficeのようにリボンにタブがあるわけではないので使い勝手はあまり変わりません。 アイコングループごとに「ファイル」や「編集」といったラベルが表示されるようになったので少しわかりやすくなったといえるでしょう。

Runnerは大きくレイアウトが変更され、ウィンドウ内に大きなペインが二つ並ぶようになりました。左側は登録されている実験のリストで、右側に「注意」や「出力」などがタブ切り替えで表示されます。 「注意」や「出力」の欄が格段に大きくなり、読みやすくなりました。 また、Pavlovia関係のメッセージが表示される「Pavlovia」というタブが新設されています。

続いて2点、 Builderの使い勝手を大きく左右する機能が2つ追加されています。 ひとつめはBuilderの「ファイル」メニューに追加された「ファイルエクスプローラで開く」です( 図14.12 )。この項目を選択すると、現在Builderで編集中の実験のフォルダがOSの標準ファイルエクスプローラーで開きます。

_images/202411_UI_reveal_in_explorer.png

図14.12 「ファイルエクスプローラで開く」メニュー

「実験の条件ファイルや刺激として使用する画像ファイルなどを、実験のフォルダに移動させる」という作業はBuilderを使用していると度々必要となります。 実験のフォルダをフォルダ階層の深い位置に置いていると開くのが面倒ですが、「ファイルエクスプローラで開く」を使うと一発で開くことが出来ます。 なにより「Builderを習い始めた人が、自分が作っている実験のフォルダがどこなのかわからない」というトラブルがぐっと軽減されると思われます。 Builderの使いかたを教える人は、できるだけ早い段階(本書で言うと2章か3章)でこの機能を紹介し、4章や6章など、複数の条件ファイルや画像ファイルを扱う作業を行うたびに強調するとよいと思います。

もうひとつは2024.1.1より前からある機能ですが、本書ではまだ紹介していないものです。Builderの「実験」メニューにある「実験内を検索...」という項目がそれです( 図14.13 )。

_images/202411_UI_search_menu.png

図14.13 「実験内を検索...」メニュー

「実験内を検索...」を選択すると、 図14.14 のようなダイアログが表示され、一番上の入力欄に検索語を入力すると、その文字列をプロパティに含むコンポーネント(とそのプロパティ)が一覧表示されます。 この例のorder_images_list[0], order_images_list[1],...といったように多数のコンポーネントに少しずつ異なる値を設定する必要がある(そのためコピー&ペーストだけでは作成できない)実験で入力内容に誤りがないか確認したい場合などに非常に便利な機能です。

_images/202411_UI_search_result.png

図14.14 実験の検索ダイアログ

本書では、第4章で教示画面を作成する時にこの機能の使いかたを紹介すると良いでしょうし、第8章や第13章のような実験を作成する時にも役立つでしょう。 初心者からステップアップする際には確実に使いこなせるようになっておきたい機能だと思います。

14.5.6. 実験の設定ダイアログの変更

実験の設定ダイアログの変更をまとめておきます。

  • 基本タブ

    • [実行モード] の追加

    • [rushモード] の追加

  • スクリーンタブ

    • [ウィンドウバックエンド] の追加

    • [色][背景色] に変更

    • [背景画像] の追加

    • [背景画像の伸縮] の追加

    • [フレームレートの測定] の追加

    • [フレームレート測定時のメッセージ] の追加 フレームレート測定をおこなわない場合は [フレームレート] になる

  • データタブ

    • [列の並び替え...] の追加

    • [列の優先度] の追加

    • [時刻のフォーマット] の追加

大部分はここまで紹介したものに関係していますが、「データ」タブは補足が必要でしょう。 Builderが出力するデータファイルにおける列の並び順が [列の並び替え...] で変更できるようになりました。 「アルファベット順」は文字通り列名のアルファベット順です。 「追加順」というのは実験の実行中にデータファイルに追加された順番で、従来のBuilderと同じです。 説明が必要なのは「優先度」で、これを選択すると [列の優先度] で指定した優先度にしたがって並び替えられます。 以下の定数が定義されています。定数の値は変更される可能性があるので書くべきではないかもしれませんが、一応書いておきます。

priority.CRITICAL

30

priority.HIGH

20

priority.MEDIUM

10

priority.LOW

0

priority.EXCLUDE

-10

注意が必要なのは、列名は正確にデータファイルに出力される名前でなければならないということです。 例えばtargetの出現時刻の列を指定したいのなら、targetと書くのではなくtarget.startedと書かないといけません。 あと、優先度が同じもの同士は筆者が確認した範囲では辞書の逆順に並んでいるようです。

[時刻のフォーマット] は、現時点(2024.1.1)ではログファイルに出力される時刻の形式を選択するもののようです。 例えば [時刻のフォーマット] が「実験開始時から」だと

0.0280      EXP     target: autoDraw = True
0.0280      EXP     frame: autoDraw = True
1.0253      EXP     target: autoDraw = False
1.0253      EXP     frame: autoDraw = False

のように出力されますが、「実時間」にすると

2024-04-22_10:37:37.565335  EXP     target: autoDraw = True
2024-04-22_10:37:37.565335  EXP     frame: autoDraw = True
2024-04-22_10:37:38.551738  EXP     target: autoDraw = False
2024-04-22_10:37:38.551738  EXP     frame: autoDraw = False

のように出力されます。「実験開始から」が従来の動作です。

14.5.7. 翻訳の問題

「スクリーン」タブの [色][背景色] に変更されたのはすでに述べた通りですが、他にもLoopのプロパティの [繰り返し条件][条件] に変更されました。 原語は"Conditions"で変更ないのですが、CounterBalanceルーチンの追加により"Conditions"が必ずしも繰り返しの条件を指定するものではなくなったためです。