[visionegg] trigger: parallel port works
- From: Christoph Lehmann <lehmann@xxxxxxxxxxxx>
- To: visionegg@xxxxxxxxxxxxx
- Date: Mon, 17 Feb 2003 17:40:53 +0100
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: http://www.freelists.org/archives/visionegg
Website: http://www.visionegg.org/mailinglist.html
- Follow-Ups:
- [visionegg] Re: trigger: parallel port works
- From: Andrew Straw
Other related posts:
- » [visionegg] trigger: parallel port works
- » [visionegg] Re: trigger: parallel port works
- [visionegg] Re: trigger: parallel port works
- From: Andrew Straw