Skip to content

Commit 16bb4be

Browse files
unknownventhur
unknown
authored andcommitted
Changes in VisualOddballVE.py and VisualOddballVE_CNV.py
1 parent d19d3d8 commit 16bb4be

File tree

2 files changed

+36
-39
lines changed

2 files changed

+36
-39
lines changed

src/Feedbacks/Oddball/Visual/VisualOddballVE.py

+27-37
Original file line numberDiff line numberDiff line change
@@ -68,32 +68,30 @@ class VisualOddballVE(VisionEggFeedback):
6868

6969

7070
def init_parameters(self):
71-
print "in init"
7271

73-
#self.geometry = [100, 100, 800, 550]
74-
self.center = [self.geometry[2]/2, self.geometry[3]/2]
72+
#self.geometry = [100, 100, 800, 550]
7573
self.nTrials = 16
7674
self.nTrials_per_block = 8
7775
self.dev_perc = 0.25
7876
self.countdown_start = 2
7977
self.show_standards = True
80-
self.show_fixation_cross = False
78+
self.show_fixation_cross = True
8179
self.give_feedback = True # will be ignored if self.response=='none'
8280
self.group_stim_markers = False
8381
self.dd_dist = 0 # no constraint if deviant-deviant distance is 0 (cf. constraint_stim_sequence() )
8482

8583
self.DIR_DEV = 'C:\img_oddball\dev'
8684
self.DIR_STD= 'C:\img_oddball\std'
87-
self.logfilename = 'C:\img_oddball\log.txt'
85+
self.logfilename = ''
8886
# stimuli_opts = ['load', 'predefined']
8987
# self.stimuli = stimuli_opts[1]
9088

9189
# response options
92-
self.eob_response = True # type in e.g. number of deviants after each block?
90+
self.eob_response = False # type in e.g. number of deviants after each block?
9391
response_opts = ['none', 'dev_only', 'both'] # none: subject should not press a key
9492
# dev_only: subject should press only for deviants
9593
# both: subject response for both stds and devs
96-
self.response = response_opts[0]
94+
self.response = response_opts[2]
9795
self.rsp_key_dev = 'f'
9896
self.rsp_key_std = 'j'
9997
self.hitstr = 'Hit'
@@ -105,17 +103,15 @@ def init_parameters(self):
105103
self.prestim_ival = 1.
106104
#self.fixation_cross_time = self.prestim_ival
107105
self.stim_duration = 1.
108-
self.responsetime_duration = 0 # 2.
106+
self.responsetime_duration = 2.
109107
self.feedback_duration = 2.
110-
111-
#self.gameover_duration = 3000
112-
#self.shortpauseDuration = 10000
108+
113109

114110
self.VEstimuli = True
115111
if self.VEstimuli:
116112
self.std, self.dev = self.define_stimuli()
117113
else:
118-
self.std, self.dev = self.load_stimuli()
114+
self.std, self.dev = self.load_stimuli()
119115

120116
self.bg_color = 'grey'
121117

@@ -124,7 +120,7 @@ def init_parameters(self):
124120

125121

126122
def run(self):
127-
123+
128124
nBlocks = int(ceil(1.0*self.nTrials/self.nTrials_per_block))
129125
self.create_log()
130126

@@ -137,10 +133,8 @@ def run(self):
137133
self.create_stim_seq()
138134

139135
# Init image and text object
140-
self.image = self.add_image_stimulus(position=self.center)
141-
self.text = self.add_text_stimulus(position=(self.geometry[2]/2,self.geometry[3]/2),on=False) #self.center)
142-
#self.im = self.add_image('C:\img_oddball\dev\deviant.jpg',anchor='center',position=self.center)
143-
#self.text = self.add_text('',position=self.center,on=False)
136+
self.image = self.add_image_stimulus(position=[self.geometry[2]/2, self.geometry[3]/2])
137+
self.text = self.add_text_stimulus(position=(self.geometry[2]/2,self.geometry[3]/2),on=False) #[self.geometry[2]/2, self.geometry[3]/2])
144138

145139
# This feedback uses a generator function for controlling the stimulus
146140
# transition. Note that the function has to be called before passing
@@ -149,14 +143,12 @@ def run(self):
149143
# Pass the transition function and the pre-stimulus display durations
150144
# to the stimulus sequence factory.
151145
if self.give_feedback:
152-
s = self.stimulus_sequence(generator, [self.prestim_ival, 0.001, self.stim_duration, self.responsetime_duration, 0.01, self.feedback_duration])
146+
s = self.stimulus_sequence(generator, [self.prestim_ival, self.stim_duration, self.responsetime_duration, 0.01, self.feedback_duration])
153147
else:
154-
s = self.stimulus_sequence(generator, [self.prestim_ival, 0.001, self.stim_duration, self.responsetime_duration, 0.01])
148+
s = self.stimulus_sequence(generator, [self.prestim_ival, self.stim_duration, self.responsetime_duration, 0.01])
155149

156150
self._view.countdown()
157151

158-
#self._view.present_center_word('test',1)
159-
160152
# Start the stimulus sequence
161153
s.run()
162154

@@ -189,28 +181,27 @@ def prepare(self):
189181
for n, stim in enumerate(self.stim_pres_seq):
190182

191183
# Init Trial
192-
#self.send_parallel(marker.TRIAL_START)
193184
self.responded = False
194185
if self.stim_seq[n] == 1:
195186
self.isdeviant = True
196187
else:
197188
self.isdeviant = False
198189

199-
# Prestimulus interval
190+
# Prestimulus interval
200191
if self.show_fixation_cross:
201-
self._trigger(marker.FIXATION_START)
192+
self._trigger(marker.FIXATION_START, wait=True)
202193
self.text.set(text='+',on=True)
203194
yield
204195
if self.show_fixation_cross:
205-
self.text.set(text='',on=False)
206-
# self._trigger(marker.FIXATION_END)
207-
yield
196+
self.text.set(text='',on=False)
197+
self._view.update()
198+
208199
# Present Stimulus
209200
self.response = True
210201
if self.isdeviant:
211-
self._trigger(self.DEVIANT)
202+
self._trigger(self.DEVIANT, wait=False)
212203
else:
213-
self._trigger(self.STANDARD)
204+
self._trigger(self.STANDARD, wait=False)
214205
if self.show_standards or self.isdeviant:
215206
if self.VEstimuli:
216207
self.set_stimuli(stim)
@@ -226,19 +217,18 @@ def prepare(self):
226217
self.image.set(on=False)
227218
yield
228219
yield
220+
229221
self.response = False
230222

231-
# Give Feedback
223+
# Give Feedback about Response
232224
if self.give_feedback:
233-
self._trigger(marker.FEEDBACK_START)
234225
if not self.responded:
235226
self.text.set(text=self.norespstr,on=True)
236227
else:
237228
self.text.set(on=True)
238229
yield
239-
self._trigger(marker.FEEDBACK_END)
240-
self.text.set(on=False)
241-
#self.send_parallel(marker.TRIAL_END)
230+
self.text.set(on=False)
231+
self._view.update()
242232

243233

244234
def create_stim_seq(self,nTrials=None):
@@ -321,9 +311,9 @@ def define_stimuli(self):
321311
Creates standard and deviant stimuli.
322312
"""
323313
# The stimului. This can be anything compatible with VisionEgg
324-
dev = FilledCircle(color=(0,1.0,0), position=self.center, radius=100)
325-
std1 = Target2D(color=(0,0,1.0), position=self.center, size=(200,200))
326-
std2=std1
314+
dev = FilledCircle(color=(0,1.0,0), position=[self.geometry[2]/2, self.geometry[3]/2], radius=100)
315+
std1 = Target2D(color=(0,0,1.0), position=[self.geometry[2]/2, self.geometry[3]/2], size=(200,200))
316+
std2= Target2D(color=(1.0,0,0), position=[self.geometry[2]/2, self.geometry[3]/2], size=(200,200))
327317
#dev = Text(text='Deviant', font_size=72, position=(300, 200), anchor='center')
328318
#std1 = Text(text='Standard I', font_size=72, position=(300, 200), anchor='center')
329319
#std2 = Text(text='Standard II', font_size=72, position=(300, 200), anchor='center')

src/Feedbacks/Oddball/Visual/VisualOddballVE_CNV.py

+9-2
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ class VisualOddballVE_CNV(VisualOddballVE.VisualOddballVE):
4646

4747
#RUN_START, RUN_END = 252,253
4848
#COUNTDOWN_START, COUNTDOWN_END = 40,41
49-
STANDARD, DEVIANT = list(),list()
49+
S1, S2 = 10, 11
50+
IVAL_S1_S2, IVAL_S2_S1 = 20, 21
5051
# standards have markers 10,11,12,... ; deviants 30,31,32,... (cf. get_stimuli())
5152
# if self.group_stim_markers==True, then there exist only two markers, one for
5253
# group standard (10), and one for group deviant (20)
@@ -128,7 +129,7 @@ def run(self):
128129

129130
# User Input
130131
self.eob_responded = False
131-
self.text.set(text='Type in #Watermarks',on=True)
132+
self.text.set(text='Type in #Deviants',on=True)
132133
while not self.eob_responded:
133134
self._view.update()
134135
self.text.set(text='',on=False)
@@ -138,7 +139,9 @@ def run(self):
138139
if n == nBlocks-1:
139140
self._view.present_center_word('End of Session', 10)
140141
else:
142+
self._trigger(marker.PAUSE_START, wait=True)
141143
self._view.present_center_word('Short Break', 10)
144+
self._trigger(marker.PAUSE_END, wait=True)
142145

143146
# Close logfile and exit the feedback main loop
144147
self.close_log()
@@ -155,17 +158,21 @@ def prepare(self):
155158
for n in range(0,len(self.stim_pres_seq),2):
156159
# s1-stimulus presentation
157160
self.image.set_file(self.stim_pres_seq[n])#, texture=VisionEgg.Textures.Texture(stim))
161+
self._trigger(self.S1, wait=True)
158162
self.image.set(on=True)
159163
yield
160164
# s1-s2 interstimulus interval
161165
self.image.set(on=False)
166+
self._trigger(self.IVAL_S1_S2, wait=True)
162167
yield
163168
# s2-stimulus presentation
164169
self.image.set_file(self.stim_pres_seq[n+1])
165170
self.image.set(on=True)
171+
self._trigger(self.S2, wait=True)
166172
yield
167173
# s2-s1 interstimulus interval
168174
self.image.set(on=False)
175+
self._trigger(self.IVAL_S2_S1, wait=True)
169176
yield
170177

171178

0 commit comments

Comments
 (0)