Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Marc Posthuma
Bachelor Stage
Commits
b108bc2a
Commit
b108bc2a
authored
May 28, 2021
by
mposthuma
Browse files
Added unfinished experiment file generating script
parent
9630189d
Changes
1
Hide whitespace changes
Inline
Side-by-side
experiment_file_main.m
0 → 100644
View file @
b108bc2a
%% Initialization
% Clear, empty, default imputs
pb_clean
;
disp
(
'>> GENERATING VC EXPERIMENT <<'
);
disp
(
' ...'
)
cfn
=
0
;
% Get Filename
st
=
dbstack
;
sname
=
st
.
name
;
ind
=
strfind
(
sname
,
'_'
);
if
isempty
(
ind
);
ind
=
0
;
end
fn
=
sname
(
max
(
ind
)
+
1
:
end
);
showexp
=
pb_keyval
(
'showexp'
,
varargin
,
true
);
expfile
=
pb_keyval
(
'fname'
,
varargin
,[
fn
'.exp'
]);
datdir
=
pb_keyval
(
'datdir'
,
varargin
,
'DEFAULT'
);
cdir
=
pb_keyval
(
'cdir'
,
varargin
,
userpath
);
cd
(
cdir
);
%% Desired azimuth and elevation
% Define hemisphere
% Select target ranges
maxAbsAz
=
45
;
maxAbsEl
=
35
;
% Possible targets
dAz
=
-
45
:
05
:
45
;
dEl
=
-
35
:
10
:
35
;
[
dAz
,
dEl
]
=
meshgrid
(
dAz
,
dEl
);
dAz
=
dAz
(:);
dEl
=
dEl
(:);
sel1
=
(
abs
(
dAz
)
+
abs
(
dEl
))
<=
maxAbsAz
&
abs
(
dEl
)
<=
maxAbsEl
;
sel2
=
iseven
(
dAz
)
&
dEl
~=
0
;
sel
=
sel1
&
sel2
;
dAz
=
dAz
(
sel
);
dEl
=
dEl
(
sel
);
nloc
=
numel
(
dAz
);
%% Select target positions used in experiment
% Get targets.
targetl
=
length
(
dAz
);
targetInd
=
randperm
(
targetl
);
dAz
=
dAz
(
sort
(
targetInd
(
1
:
targetl
)));
dEl
=
dEl
(
sort
(
targetInd
(
1
:
targetl
)));
%% Actual azimuth and elevation
% The actual speaker positions are not perfectly aligned with 5 deg
cfg
=
pb_vLookup
;
% sphere positions
channel
=
cfg
.
interpolant
(
dAz
',dEl'
);
X
=
cfg
.
lookup
(
channel
+
1
,
4
);
Y
=
cfg
.
lookup
(
channel
+
1
,
5
);
%% Graphics
if
showexp
cfn
=
pb_newfig
(
cfn
);
hold
on
;
plot
(
dAz
,
dEl
,
'o'
)
hold
on
plot
(
X
,
Y
,
'x'
)
axis
([
-
60
60
-
60
60
]);
axis
square
set
(
gca
,
'TickDir'
,
'out'
);
xlabel
(
'Azimuth (deg)'
);
ylabel
(
'Elevation (deg)'
);
pb_nicegraph
;
end
%% Stimulus Condition
% FIXATION LED
fixled
.
bool
=
false
;
% do you want a fixation light?
fixled
.
x
=
0
;
fixled
.
y
=
0
;
fixled
.
dur
=
1000
;
fixled
.
pause
=
1000
;
modality
=
2
;
% 2=VISUAL
int
=
[
50
];
% w/ [i1, i2, i3...]
dur
=
2.
^
(
0
:
7
)
*
0.5
;
% stim duration in ms 2.^(0:7)*.5
col
=
[
1
];
% w/ [R,G]
[
X
,
~
,
~
]
=
ndgrid
(
X
,
0
,
col
,
int
,
dur
);
[
Y
,
~
,
col
,
int
,
dur
]
=
ndgrid
(
Y
,
0
,
col
,
int
,
dur
);
X
=
X
(:);
Y
=
Y
(:);
int
=
int
(:);
col
=
col
(:);
dur
=
dur
(:);
%% Number and size
Sz
=
size
(
X
);
N
=
Sz
(
1
);
% number of trials
maxtrialdur
=
fixled
.
bool
*
(
fixled
.
dur
+
fixled
.
pause
)
+
max
(
dur
);
maxtrialdur
=
ceil
(
maxtrialdur
/
500
)/
2
;
%% Vestibular blocks
blockdur
=
150
;
% block duration in seconds
bdureff
=
blockdur
-
(
8
*
pi
);
% start & stop
trialsinblock
=
bdureff
/
(
maxtrialdur
+
1
);
% trials per block
totaltime
=
ceil
(
N
*
(
maxtrialdur
+
1
))
+
8
*
pi
;
blockconditions
=
[];
nblockreps
=
N
/
trialsinblock
;
block
.
Horizontal
=
struct
(
'Amplitude'
,
0
,
'Signal'
,
1
,
'Duration'
,
blockdur
,
'Frequency'
,
.
16
);
block
.
Vertical
=
struct
(
'Amplitude'
,
70
,
'Signal'
,
2
,
'Duration'
,
blockdur
,
'Frequency'
,
.
16
);
writeexp
(
expfile
,
datdir
,
X
,
Y
,
int
,
dur
,
block
,
fixled
);
% see below, these are helper functions to write an exp-file line by line / stimulus by stimulus
%% Show the exp-file in Wordpad
% for PCs
if
showexp
if
ispc
dos
([
'"C:\Program Files\Windows NT\Accessories\wordpad.exe" '
expfile
' &'
]);
elseif
ismac
system
([
'open -a TextWrangler '
cd
filesep
expfile
]);
end
end
function
writeexp
(
expfile
,
datdir
,
theta
,
phi
,
int
,
dur
,
block
,
fixled
)
% Save known trial-configurations in exp-file
%
% WRITEEXP WRITEEXP(FNAME,DATDIR,THETA,PHI,ID,LEDON)
%
% WRITEEXP(FNAME,THETA,PHI,ID,LEDON)
%
% Write exp-file with file-name FNAME.
expfile
=
fcheckext
(
expfile
,
'.exp'
);
% check whether the extension exp is included
fid
=
fopen
(
expfile
,
'wt+'
);
% this is the way to write date to a new file
trialsz
=
numel
(
theta
);
% number of trials
tdurexp
=
2.1
*
trialsz
+
(
sum
(
dur
)/
1000
);
effblockdur
=
200
-
(
4
*
pi
);
blocksz
=
ceil
(
tdurexp
/
effblockdur
);
% xnumber of blocks
leftover
=
ceil
(
mod
(
tdurexp
,
effblockdur
)
+
4
*
pi
);
trlIdx
=
1
;
% trial count
ITI
=
[
0
0
];
% useless, but required in header
Rep
=
1
;
% we have 0 repetitions, so insert 1...
Rnd
=
0
;
% we randomized ourselves already
Mtr
=
'n'
;
% the motor should be on
pb_vWriteHeader
(
fid
,
datdir
,
ITI
,
blocksz
,
blocksz
*
trialsz
*
Rep
,
Rep
,
Rnd
,
Mtr
,
'Lab'
,
5
);
% helper-function
pl
=
randperm
(
trialsz
);
% randomize trialorder in blocks
newBlock
=
true
;
totalDur
=
0
;
iBlock
=
1
;
for
iTrial
=
1
:
trialsz
% Write trials
if
newBlock
==
true
% Write blocks
if
iBlock
==
blocksz
block
.
Vertical
.
Duration
=
leftover
;
block
.
Horizontal
.
Duration
=
leftover
;
end
pb_vWriteBlock
(
fid
,
iBlock
);
pb_vWriteSignal
(
fid
,
block
);
newBlock
=
false
;
iBlock
=
iBlock
+
1
;
end
pb_vWriteTrial
(
fid
,
trlIdx
);
VIS
=
[];
VIS
.
LED
=
'LED'
;
VIS
.
X
=
theta
(
pl
(
iTrial
));
VIS
.
Y
=
phi
(
pl
(
iTrial
));
VIS
.
Int
=
int
(
pl
(
iTrial
));
VIS
.
EventOn
=
0
;
VIS
.
Onset
=
500
+
randi
(
100
,
1
,
1
)
-
50
;
VIS
.
EventOff
=
0
;
VIS
.
Offset
=
VIS
.
Onset
+
dur
(
pl
(
iTrial
));
VIS
=
pb_vFixLed
(
VIS
,
fixled
,
'x'
,
fixled
.
x
,
'y'
,
fixled
.
y
,
'dur'
,
fixled
.
dur
,
'pause'
,
fixled
.
pause
);
pb_vWriteStim
(
fid
,
2
,[],
VIS
);
totalDur
=
totalDur
+
VIS
.
Offset
+
1600
;
% some extra time for running each trial
if
totalDur
>=
(
200
-
(
4
*
pi
))
*
1000
;
totalDur
=
0
;
newBlock
=
true
;
end
trlIdx
=
trlIdx
+
1
;
end
fclose
(
fid
);
end
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment