先週あたりで、卒業論文の実験のための各学生のプログラム(HSP)がほぼできあがった。実験をはじめている学生もいるが、これまでのTipsを以下に。
(1)刺激を空間的にランダムな位置に提示する。いくつかの方法があるが、ここでは複雑な視覚刺激の場合を想定する。刺激セットをひとつに画像ファイルにして、そこからランダムに各刺戟を抽出して刺激系列をつくる。これを空間的に配置し、提示する。
1 刺激を縦あるいは横にならべる。以下例では8つを横にならべた画像ファイルを用意。
2 ランダムに並べかえる。
3 画面(n行、l列)に配置する。以下では、2行4列。
; make display
x=ginfo_dispx
y=ginfo_dispy
screen 0,x,y,1,0,0
a=8 ; Number of Stimuli
buffer 2 ; ID 2 に仮想ウィンドウに
picload "image4.jpg" ; 画像を保存
dy=100; height of one stimulus
dx=100; width
pc=4 ; 列数
pl=2 ; 行数
pn=pc*pl ; 提示画像数
dim st,pn ; 画像コード
gsel 0 ; ID 0 のウィンドウに、描画先指定
gosub *srnd ; 並べ替え
repeat pn
st.cnt=buf.0.cnt
loop
; 提示
repeat a
if cnt<=3 {
pos x/2-2*dx+cnt*dx, y/2-dy
gcopy 2,0,dy*st.cnt,dx,dy } ; ID 2 の画像の ( 左上角 )位置から、幅 dx、高さ dy の範囲をコピーしてID 0 に表示
if cnt>3 {
pos x/2-2*dx+(cnt-4)*dx, y/2
gcopy 2,0,dy*st.cnt,dx,dy } ; ID 2 の画像の ( 左上角 )位置から、幅 dx、高さ dy の範囲をコピーしてID 0 に表示
loop
; 以下、反応取得、データ記録などの部分を追加
; 以下、ランダム化のサブルーチン
*srnd
n=8 // 変数nに乱数の個数と範囲を代入(n未満)
// 2次元配列bufの宣言(buf.0.xは数値格納用、buf.1.xは重複チェック用)
dim buf,2,n
randomize
repeat n
rd=rnd(n) // n未満の乱数を生成し、変数rdに代入
buf.0.cnt=rd // buf.0.cntに変数rdの値を代入
if buf.1.rd=1{ // もしbuf.1.rdの値が1であれば…
continue cnt // 3行目にジャンプ(cntの値を変更せずに再度乱数を生成)
}
buf.1.rd=1 // buf.1.rdに1を代入し、使用済みのフラグを立てる
loop
// 以下は画面への出力処理
;pos 0,0
repeat n
;mes buf.0.cnt
loop
return
(2)被験者番号などを入力して(させて)、データファイル名に追加する。
log=""
notesel log ; ログをメモリーノートパッドにとる
sbj=""
input sbj
objsel 0
repeat
await
stick key
if key&32 :break ; enter キーで先へ
loop
cls
;実験部分
;
notesave "dataEx0"+sbj+".txt"
(1)刺激を空間的にランダムな位置に提示する。いくつかの方法があるが、ここでは複雑な視覚刺激の場合を想定する。刺激セットをひとつに画像ファイルにして、そこからランダムに各刺戟を抽出して刺激系列をつくる。これを空間的に配置し、提示する。
1 刺激を縦あるいは横にならべる。以下例では8つを横にならべた画像ファイルを用意。
2 ランダムに並べかえる。
3 画面(n行、l列)に配置する。以下では、2行4列。
; make display
x=ginfo_dispx
y=ginfo_dispy
screen 0,x,y,1,0,0
a=8 ; Number of Stimuli
buffer 2 ; ID 2 に仮想ウィンドウに
picload "image4.jpg" ; 画像を保存
dy=100; height of one stimulus
dx=100; width
pc=4 ; 列数
pl=2 ; 行数
pn=pc*pl ; 提示画像数
dim st,pn ; 画像コード
gsel 0 ; ID 0 のウィンドウに、描画先指定
gosub *srnd ; 並べ替え
repeat pn
st.cnt=buf.0.cnt
loop
; 提示
repeat a
if cnt<=3 {
pos x/2-2*dx+cnt*dx, y/2-dy
gcopy 2,0,dy*st.cnt,dx,dy } ; ID 2 の画像の ( 左上角 )位置から、幅 dx、高さ dy の範囲をコピーしてID 0 に表示
if cnt>3 {
pos x/2-2*dx+(cnt-4)*dx, y/2
gcopy 2,0,dy*st.cnt,dx,dy } ; ID 2 の画像の ( 左上角 )位置から、幅 dx、高さ dy の範囲をコピーしてID 0 に表示
loop
; 以下、反応取得、データ記録などの部分を追加
; 以下、ランダム化のサブルーチン
*srnd
n=8 // 変数nに乱数の個数と範囲を代入(n未満)
// 2次元配列bufの宣言(buf.0.xは数値格納用、buf.1.xは重複チェック用)
dim buf,2,n
randomize
repeat n
rd=rnd(n) // n未満の乱数を生成し、変数rdに代入
buf.0.cnt=rd // buf.0.cntに変数rdの値を代入
if buf.1.rd=1{ // もしbuf.1.rdの値が1であれば…
continue cnt // 3行目にジャンプ(cntの値を変更せずに再度乱数を生成)
}
buf.1.rd=1 // buf.1.rdに1を代入し、使用済みのフラグを立てる
loop
// 以下は画面への出力処理
;pos 0,0
repeat n
;mes buf.0.cnt
loop
return
(2)被験者番号などを入力して(させて)、データファイル名に追加する。
log=""
notesel log ; ログをメモリーノートパッドにとる
sbj=""
input sbj
objsel 0
repeat
await
stick key
if key&32 :break ; enter キーで先へ
loop
cls
;実験部分
;
notesave "dataEx0"+sbj+".txt"