[visionegg] Re: trigger: parallel port works

  • From: Andrew Straw <andrew.straw@xxxxxxxxxxxxxxx>
  • To: visionegg@xxxxxxxxxxxxx
  • Date: Tue, 18 Feb 2003 14:11:21 +1030

Hi Christoph,

Thanks to your email, I found a bug in the linux parallel port code, which is now fixed. Download either the bleeding edge release (updated today) or the CVS version.

Cheers!
Andrew

On Tuesday, February 18, 2003, at 03:10 AM, Christoph Lehmann wrote:

Dear Andrew
After changing in the bios the address for the parallel port from 0x3BC
to 0x378...(strange IBM..) I could get some code from christophe pallier
(lpt polling) to work.


but nevertheless I don't succeed with VE. it seems that reading from
parallel port doesn't work with VE. even the daq example trigger_in.py
doesn't work:

it opens the screen and stays empty with the grey background- no
grating, even if I change pin nr 12 from high to low, or from low to
high.. (ground is pin 18).

currently the parallel port is in EPP mode...

I would be very grateful for your help.


thanks


christoph
------



thanks,
christoph#!/usr/bin/env python
"""Load a picture from a file."""

############################
#  Import various modules  #
############################


#remark 17.12.2002: with the latest cvs release, texture.orig.size had to be changed to texture.size

from random import *
import os
from VisionEgg import *
from VisionEgg.Core import *
from VisionEgg.Textures import *
from math import *
import pygame #to get the mouse button responses
import types #to check if a variable is of type float
from VisionEgg.DaqLPT import raw_lpt_module #for parallel port polling

path =
"/home/christoph/work/programming/my_ve_projects/load_picture/data/"
#the path the images are in

photo = []
photoX = []

# present them in random order
for filename in os.listdir(path):
    photo.append(filename)
length = len(photo)
for i in range(0, length):
    ran = randint(0, len(photo)-1)
    file = photo[ran]
    photoX.append(file)
    photo.pop(ran)

os.chdir(path)

screen = get_default_screen()

duration_per_image = 1 # seconds
num_images = len(photoX)



# Create list of stimuli
preloaded_stimulus_list = [] # empty at first
for i in range(num_images):
    # Read the texture file
    texture = TextureFromFile(photoX[i])

    x = screen.size[0]/2 - texture.size[0]/2
    y = screen.size[1]/2 - texture.size[1]/2

    # Load the texture to OpenGL, prepare for display
    stimulus = TextureStimulus(texture = texture,
                               size = texture.size,
                               lowerleft=(x,y))

    # Add to list of stimuli
    preloaded_stimulus_list.append( stimulus )


log_list = [] log = [] last_image = -1 first_stim_flag = 1

#def image_selector( t ):
#    global last_image, start_time, timestamp, last_timestamp,
first_stim_flag, log
#    time.sleep(0.0001)                        #purposefully yield the
processor, so that during max priority mode, mouse can be tracked
#    i = int(t/duration_per_image)
#    if first_stim_flag == 1:
#        start_time = VisionEgg.timing_func()
#        timestamp = start_time
#        log = (timestamp - start_time, photoX[i], -1, -1) #create next
new log
#        first_stim_flag = 0
#    elif i <> last_image:
#        log_list.append(log) #append last log
#        timestamp = VisionEgg.timing_func()
#        log = (timestamp - start_time, photoX[i], -1, -1) #create next
new log
#    last_image = i
#    return [ preloaded_stimulus_list[i] ]

my_debug_msg = []

start_wait_for_trig = 0.1 #0.1 sec before the duration_per_image has
been spend, start waiting for trigger (start polling the LPT)
def image_selector( t ):
global last_image, start_time, timestamp, last_timestamp,
first_stim_flag, log, start_wait_for_trig
time.sleep(0.0001) #purposefully yield the processor, so
that during max priority mode, mouse can be tracked
i = int(t/duration_per_image)
#i = int(t/((last_image-1)*duration_per_image + duration_per_image -
start_wait_for_trig))
if first_stim_flag == 1:
start_time = VisionEgg.timing_func()
timestamp = start_time
log = (timestamp - start_time, photoX[i], -1, -1) #create next
new log
first_stim_flag = 0
elif i <> last_image: #time reached, where we start waiting for the
MR trigger
# poll the LPT for the TTL trigger, sent by the MR scanner
input_value = 0
while (input_value == 0):
my_debug_msg.append('before<' + str(input_value) +
'>lastimage <' + str(last_image) + '>')
input_value = raw_lpt_module.inp(0x379) & 0x20
my_debug_msg.append('after<' + str(input_value) +
'>lastimage <' + str(last_image) + '>')
log_list.append(log) #append last log
timestamp = VisionEgg.timing_func()
log = (timestamp - start_time, photoX[i], -1, -1) #create next
new log


    last_image = i
    return [ preloaded_stimulus_list[i] ]


viewport = Viewport(screen=screen)




#############################################
#  Create event handler callback functions  #
#############################################



def mousebuttondown(event):
    global log, timestamp
    if event.button == 1:
        log = (timestamp - start_time, photoX[last_image],
VisionEgg.timing_func() - timestamp, 'left') #overwrite actual log
    elif event.button == 3:
        log = (timestamp - start_time, photoX[last_image],
VisionEgg.timing_func() - timestamp, 'right') #overwrite actual log


handle_event_callbacks = [(pygame.locals.MOUSEBUTTONDOWN, mousebuttondown)]

p = Presentation(go_duration=(duration_per_image *
num_images,'seconds'),
                 viewports=[viewport],
                 check_events=1,
                 handle_event_callbacks=handle_event_callbacks)

#############################################################
#  Connect the controllers with the variables they control  #
#############################################################

p.add_controller(viewport,'stimuli',
                 FunctionController(during_go_func=image_selector) )

#######################
#  Run the stimulus!  #
#######################

p.go()
log_list.append(log) #append last log

############################################
#  write the button press times to a file  #
############################################

f=open('/home/christoph/work/programming/my_ve_projects/load_picture/ my_debug_msg.txt', 'w')
f.write('_______________________________________________________' +
'\n')
for x in my_debug_msg:
if (type(x) == types.FloatType):
f.write("%010.2f " % x)
else:
f.write(str(x) + " ")
f.write('\n')
f.write('_______________________________________________________' +
'\n')
f.close()




f=open('/home/christoph/work/programming/my_ve_projects/load_picture/ exp_log_file.txt', 'w')
f.write('index onset stim RT response' +
'\n')
f.write('_______________________________________________________' +
'\n')
cnt = 1
for x in log_list:
f.write("%04.0f " % cnt)
for y in x:
if (type(y) == types.FloatType):
f.write("%010.2f " % (y * 1000))
else:
f.write(str(y) + " ")


    f.write('\n')
    cnt = cnt + 1
f.write('_______________________________________________________' +
'\n')
f.close()

last_onset = 0
last_diff = 0

f=open('/home/christoph/work/programming/my_ve_projects/load_picture/ exp_log_file_verb.txt', 'w')
f.write('index onset_t diff_t stim RT
response' + '\n')
f.write('______________________________________________________________ _____________________' + '\n')


x = 0
while x < len(log_list):
y = 0
while y < len(log_list[x]):
if (type(log_list[x][y]) == types.FloatType):
if y == 0: # y =
0: onset_time of the stimulus
f.write("%04.0f " % x) #index
f.write("%010.2f " % (log_list[x][y] * 1000)) #onset
time of the stimulus
diff = (1000 * ( log_list[x][y] - x * duration_per_image
) )
f.write("%010.2f " % diff)
#difference between should and is onset
else:
f.write("%010.2f " % (log_list[x][y] * 1000)) #RT
else:
f.write(str(log_list[x][y]) + " ") #mouse
response (left/right)
y = y + 1
last_onset = log_list[x][0]
f.write('\n')
x = x + 1
f.write('______________________________________________________________ _____________________' + '\n')


f.close()

======================================
The Vision Egg mailing list
Archives: //www.freelists.org/archives/visionegg
Website: http://www.visionegg.org/mailinglist.html


====================================== The Vision Egg mailing list Archives: //www.freelists.org/archives/visionegg Website: http://www.visionegg.org/mailinglist.html

Other related posts: