[visionegg] help on viewport

Hello Everyone,
I have a script that shows two grating stimuli. Ideally, at first the gratings
stay still and after one second they start flickering. This routine has
to be repeated, say, four times. I have a "for" loop to do that but the
gratings remain still just the first run and they, instead to appear still,
disappear for the following three runs. Being a "for" loop the "viewport"
for the first part is the same; I don't understand why the first time it
works and the followings it doesn't ...
I have attached the script below.
Any help is really appreciated!
Cheers!
Alessandra

import os
import VisionEgg
import VisionEgg.Daq
import random
VisionEgg.start_default_logging(); VisionEgg.watch_exceptions()
#VisionEgg.logger.setLevel( VisionEgg.logging.DEBUG )
from VisionEgg.Core import *
from VisionEgg.FlowControl import Presentation
from VisionEgg.Gratings import *
from VisionEgg.Textures import *
from VisionEgg.MoreStimuli import *
from math import *
from VisionEgg.DaqLPT import *
import VisionEgg.ParameterTypes as ve_types
import time
from VisionEgg.Text import *

screen = get_default_screen()
screen.parameters.bgcolor = (0,0,0,1.0)

ecc=150
temporal_freq1 = 8
temporal_freq2 = 12
LPT1 = 0x378
BIT0 = 0x01 # pin 2 on DB25 connector
BIT1 = 0x02 # pin 3 on DB25 connector
BIT2 = 0x04 # pin 4 on DB25 connector
bit0_set = False
bit1_set = False
bit2_set = False

fixation_p = FixationCross(position= (screen.size[0]/2,screen.size[1]/2),
                           size=(25,25),
                           texture_size=(30,30))

fixation_p2 = FixationCross(position= (screen.size[0]/2,screen.size[1]/2),
                           size=(25,25),
                           texture_size=(30,30))

grating_ds = SinGrating2D( contrast         = 0.75,
                           position         = ((screen.size[0]/2+ecc), 
(screen.size[1]/2+ecc)),
                           size             = ( 150 , 150 ),
                           spatial_freq     = 0.02,
                           orientation      = 90.0,
                           temporal_freq_hz = 0.0,)

grating_sx = SinGrating2D( contrast         = 0.75,
                           position         = ((screen.size[0]/2-ecc), 
(screen.size[1]/2+ecc)),
                           size             = ( 150 , 150 ),
                           spatial_freq     = 0.02,
                           orientation      = 90.0,
                           temporal_freq_hz = 0.0,)

filename_cue_sx = 
os.path.join(VisionEgg.config.VISIONEGG_SYSTEM_DIR,"data","cue_v_quadr.png")
texture_cue_sx = Texture(filename_cue_sx)
cue_sx = TextureStimulus(texture=texture_cue_sx,
                         position = 
((screen.size[0]/2)-15,(screen.size[1]/2)+15),
                         anchor = 'center',
                         size = (10.0,10.0),
                         shrink_texture_ok = 1)

filename_cue_ds = 
os.path.join(VisionEgg.config.VISIONEGG_SYSTEM_DIR,"data","cue_v_quadr.png")
texture_cue_ds = Texture(filename_cue_ds)
cue_ds = TextureStimulus(texture=texture_cue_ds,
                         position = 
((screen.size[0]/2)+15,(screen.size[1]/2)+15),
                         anchor = 'center',
                         size = (10.0,10.0),
                         shrink_texture_ok = 1)

filename_quad = 
os.path.join(VisionEgg.config.VISIONEGG_SYSTEM_DIR,"data","quadrato.png")
texture_quad = Texture(filename_quad)
quad = TextureStimulus(texture=texture_quad,
                         position = 
((screen.size[0]/2)-15,(screen.size[1]/2)+15),
                         anchor = 'center',
                         size = (10.0,10.0),
                         shrink_texture_ok = 1)

filename_quad1 = 
os.path.join(VisionEgg.config.VISIONEGG_SYSTEM_DIR,"data","quadrato.png")
texture_quad1 = Texture(filename_quad1)
quad1 = TextureStimulus(texture=texture_quad1,
                         position = 
((screen.size[0]/2)+15,(screen.size[1]/2)+15),
                         anchor = 'center',
                         size = (10.0,10.0),
                         shrink_texture_ok = 1)

def update_lpt():
   global bit0_set, bit1_set, bit2_set
   out_value = ((bit0_set and BIT0) | (bit1_set and BIT1) |
                (bit2_set and BIT2))
   raw_lpt_module.out(LPT1,out_value)

def get_target_color_ds(t):
    val0 = 0.75+0.25*sin((temporal_freq1*2)*pi*t)
    if (val0 >= 0.75):
       val1 = 1
    elif (val0 < 0.75):
         val1 = 0
    return (val1,val1,val1,1.0)

def get_target_color_sx(t):
    val0 = 0.75+0.25*sin((temporal_freq2*2)*pi*t)
    if (val0 >= 0.75):
       val1 = 1
    elif (val0 < 0.75):
         val1 = 0
    return (val1,val1,val1,1.0)

def on_go_loop_enter_exit_controller_fp(**kw):
   global bit0_set
   entering_go_loop = bool( len(kw))
   if entering_go_loop:
      bit0_set = 1
      update_lpt()
   else:
      bit0_set = 0
      update_lpt()

def on_go_loop_enter_exit_controller_ds(**kw):
   global bit1_set
   entering_go_loop = bool( len(kw))
   if entering_go_loop:
      bit1_set = 1
      update_lpt()
   else:
      bit1_set = 0
      update_lpt()

def on_go_loop_enter_exit_controller_sx(**kw):
   global bit2_set
   entering_go_loop = bool( len(kw))
   if entering_go_loop:
      bit2_set = 1
      update_lpt()
   else:
      bit2_set = 0
      update_lpt()

def add_trigger_controllers(p):
   viewports = p.parameters.viewports
   for viewport in viewports:
      if cue_ds in viewport.parameters.stimuli:
         
p.add_controller(None,None,FunctionController(during_go_func=on_go_loop_enter_exit_controller_ds,
                                                       
between_go_func=on_go_loop_enter_exit_controller_ds,
                                                       eval_frequency =
VisionEgg.FlowControl.TRANSITIONS,
                                                       return_type = 
ve_types.get_type(None),

                                                       ))
         break
   for viewport in viewports:
      if cue_sx in viewport.parameters.stimuli:
         
p.add_controller(None,None,FunctionController(during_go_func=on_go_loop_enter_exit_controller_sx,
                                                       
between_go_func=on_go_loop_enter_exit_controller_sx,
                                                       eval_frequency =
VisionEgg.FlowControl.TRANSITIONS,
                                                       return_type = 
ve_types.get_type(None),

                                                       ))
         break
   for viewport in viewports:
      if fixation_p2 in viewport.parameters.stimuli:
         
p.add_controller(None,None,FunctionController(during_go_func=on_go_loop_enter_exit_controller_fp,
                                                       
between_go_func=on_go_loop_enter_exit_controller_fp,
                                                       eval_frequency =
VisionEgg.FlowControl.TRANSITIONS,
                                                       return_type = 
ve_types.get_type(None),

                                                       ))
         break

viewport1 = Viewport( screen=screen, stimuli=[grating_ds, grating_sx,fixation_p,
quad, quad1] )
viewport2 = Viewport( screen=screen, stimuli=[grating_ds, 
grating_sx,fixation_p2,
quad, quad1] )
viewport3 = Viewport( screen=screen, stimuli=[grating_ds, grating_sx,fixation_p,
cue_ds, quad] )
viewport4 = Viewport( screen=screen, stimuli=[grating_ds, grating_sx,fixation_p,
quad1, cue_sx] )

lista = [viewport3,viewport4]
for i in range (1,4):

    a = Presentation(go_duration=(1,'seconds'),viewports=[viewport1])
    a.go()

    b = Presentation(go_duration=(2,'seconds'),viewports=[viewport2])
    add_trigger_controllers(b)
    
b.add_controller(grating_ds,'color1',FunctionController(during_go_func=get_target_color_ds))
    
b.add_controller(grating_sx,'color1',FunctionController(during_go_func=get_target_color_sx))
    b.go()

    c = Presentation(go_duration=(3,'seconds'),viewports=[random.choice(lista)])
    add_trigger_controllers(c)
    
c.add_controller(grating_ds,'color1',FunctionController(during_go_func=get_target_color_ds))
    
c.add_controller(grating_sx,'color1',FunctionController(during_go_func=get_target_color_sx))
    c.go()

a = Presentation(go_duration=(1,'seconds'),viewports=[viewport1])
a.go()


import os
import VisionEgg
import VisionEgg.Daq
import random
VisionEgg.start_default_logging(); VisionEgg.watch_exceptions()
#VisionEgg.logger.setLevel( VisionEgg.logging.DEBUG )
from VisionEgg.Core import *
from VisionEgg.FlowControl import Presentation
from VisionEgg.Gratings import *
from VisionEgg.Textures import *
from VisionEgg.MoreStimuli import *
from math import *
from VisionEgg.DaqLPT import *
import VisionEgg.ParameterTypes as ve_types
import time
from VisionEgg.Text import *

# attenzione : risoluzione monitor 1280x1024

screen = get_default_screen()
screen.parameters.bgcolor = (0,0,0,1.0)

ecc=150
temporal_freq1 = 8 
temporal_freq2 = 12
LPT1 = 0x378 
BIT0 = 0x01 # pin 2 on DB25 connector
BIT1 = 0x02 # pin 3 on DB25 connector
BIT2 = 0x04 # pin 4 on DB25 connector
bit0_set = False
bit1_set = False
bit2_set = False

fixation_p = FixationCross(position= (screen.size[0]/2,screen.size[1]/2),
                           size=(25,25),
                           texture_size=(30,30))

fixation_p2 = FixationCross(position= (screen.size[0]/2,screen.size[1]/2),
                           size=(25,25),
                           texture_size=(30,30))

grating_ds = SinGrating2D( contrast         = 0.75,
                           position         = ((screen.size[0]/2+ecc), 
(screen.size[1]/2+ecc)),
                           size             = ( 150 , 150 ),
                           spatial_freq     = 0.02, 
                           orientation      = 90.0,
                           temporal_freq_hz = 0.0,)

grating_sx = SinGrating2D( contrast         = 0.75,
                           position         = ((screen.size[0]/2-ecc), 
(screen.size[1]/2+ecc)),
                           size             = ( 150 , 150 ),
                           spatial_freq     = 0.02, 
                           orientation      = 90.0,
                           temporal_freq_hz = 0.0,)

filename_cue_sx = 
os.path.join(VisionEgg.config.VISIONEGG_SYSTEM_DIR,"data","cue_v_quadr.png")
texture_cue_sx = Texture(filename_cue_sx)
cue_sx = TextureStimulus(texture=texture_cue_sx,
                         position = 
((screen.size[0]/2)-15,(screen.size[1]/2)+15),
                         anchor = 'center',
                         size = (10.0,10.0),
                         shrink_texture_ok = 1)

filename_cue_ds = 
os.path.join(VisionEgg.config.VISIONEGG_SYSTEM_DIR,"data","cue_v_quadr.png")
texture_cue_ds = Texture(filename_cue_ds)
cue_ds = TextureStimulus(texture=texture_cue_ds,
                         position = 
((screen.size[0]/2)+15,(screen.size[1]/2)+15),
                         anchor = 'center',
                         size = (10.0,10.0),
                         shrink_texture_ok = 1)

filename_quad = 
os.path.join(VisionEgg.config.VISIONEGG_SYSTEM_DIR,"data","quadrato.png")
texture_quad = Texture(filename_quad)
quad = TextureStimulus(texture=texture_quad,
                         position = 
((screen.size[0]/2)-15,(screen.size[1]/2)+15),
                         anchor = 'center',
                         size = (10.0,10.0),
                         shrink_texture_ok = 1)

filename_quad1 = 
os.path.join(VisionEgg.config.VISIONEGG_SYSTEM_DIR,"data","quadrato.png")
texture_quad1 = Texture(filename_quad1)
quad1 = TextureStimulus(texture=texture_quad1,
                         position = 
((screen.size[0]/2)+15,(screen.size[1]/2)+15),
                         anchor = 'center',
                         size = (10.0,10.0),
                         shrink_texture_ok = 1)

def update_lpt():
   global bit0_set, bit1_set, bit2_set
   out_value = ((bit0_set and BIT0) | (bit1_set and BIT1) |
                (bit2_set and BIT2))
   raw_lpt_module.out(LPT1,out_value)
   
def get_target_color_ds(t):
    val0 = 0.75+0.25*sin((temporal_freq1*2)*pi*t)
    if (val0 >= 0.75):
       val1 = 1
    elif (val0 < 0.75):
         val1 = 0
    return (val1,val1,val1,1.0)

def get_target_color_sx(t):
    val0 = 0.75+0.25*sin((temporal_freq2*2)*pi*t)
    if (val0 >= 0.75):
       val1 = 1
    elif (val0 < 0.75):
         val1 = 0
    return (val1,val1,val1,1.0)

def on_go_loop_enter_exit_controller_fp(**kw):
   global bit0_set
   entering_go_loop = bool( len(kw))
   if entering_go_loop:
      bit0_set = 1
      update_lpt()
   else:
      bit0_set = 0
      update_lpt()
      
def on_go_loop_enter_exit_controller_ds(**kw):
   global bit1_set
   entering_go_loop = bool( len(kw))
   if entering_go_loop:
      bit1_set = 1
      update_lpt()
   else:
      bit1_set = 0
      update_lpt()
      
def on_go_loop_enter_exit_controller_sx(**kw):
   global bit2_set
   entering_go_loop = bool( len(kw))
   if entering_go_loop:
      bit2_set = 1
      update_lpt()
   else:
      bit2_set = 0
      update_lpt()

def add_trigger_controllers(p):
   viewports = p.parameters.viewports
   for viewport in viewports:
      if cue_ds in viewport.parameters.stimuli:
         
p.add_controller(None,None,FunctionController(during_go_func=on_go_loop_enter_exit_controller_ds,
                                                       
between_go_func=on_go_loop_enter_exit_controller_ds,
                                                       eval_frequency = 
VisionEgg.FlowControl.TRANSITIONS,
                                                       return_type = 
ve_types.get_type(None), 
                                                       ))
         break
   for viewport in viewports:
      if cue_sx in viewport.parameters.stimuli:
         
p.add_controller(None,None,FunctionController(during_go_func=on_go_loop_enter_exit_controller_sx,
                                                       
between_go_func=on_go_loop_enter_exit_controller_sx,
                                                       eval_frequency = 
VisionEgg.FlowControl.TRANSITIONS,
                                                       return_type = 
ve_types.get_type(None), 
                                                       ))
         break
   for viewport in viewports:
      if fixation_p2 in viewport.parameters.stimuli:
         
p.add_controller(None,None,FunctionController(during_go_func=on_go_loop_enter_exit_controller_fp,
                                                       
between_go_func=on_go_loop_enter_exit_controller_fp,
                                                       eval_frequency = 
VisionEgg.FlowControl.TRANSITIONS,
                                                       return_type = 
ve_types.get_type(None), 
                                                       ))
         break

viewport1 = Viewport( screen=screen, stimuli=[grating_ds, 
grating_sx,fixation_p, quad, quad1] )
viewport2 = Viewport( screen=screen, stimuli=[grating_ds, 
grating_sx,fixation_p2, quad, quad1] )
viewport3 = Viewport( screen=screen, stimuli=[grating_ds, 
grating_sx,fixation_p, cue_ds, quad] )
viewport4 = Viewport( screen=screen, stimuli=[grating_ds, 
grating_sx,fixation_p, quad1, cue_sx] )

lista = [viewport3,viewport4]
for i in range (1,4):
 
    a = Presentation(go_duration=(1,'seconds'),viewports=[viewport1])
    a.go()

    b = Presentation(go_duration=(2,'seconds'),viewports=[viewport2])
    add_trigger_controllers(b)
    
b.add_controller(grating_ds,'color1',FunctionController(during_go_func=get_target_color_ds))
    
b.add_controller(grating_sx,'color1',FunctionController(during_go_func=get_target_color_sx))
    b.go()

    c = Presentation(go_duration=(3,'seconds'),viewports=[random.choice(lista)])
    add_trigger_controllers(c)
    
c.add_controller(grating_ds,'color1',FunctionController(during_go_func=get_target_color_ds))
    
c.add_controller(grating_sx,'color1',FunctionController(during_go_func=get_target_color_sx))
    c.go()

a = Presentation(go_duration=(1,'seconds'),viewports=[viewport1])
a.go()

Other related posts: