PDA

View Full Version : check user input using vizinfo panel


armo
01-22-2015, 02:05 AM
Dear all

I am running an experiment with a 3x2 design, so that I have two variables, one with three levels and the other one with two.
Before the experiment starts, the experimenter has to choose what sequence of two levels, each from one of the two variables, have to be presented, but I would like to create a mechanism that controls if the input sequence has already been chosen. Specifically, I posed these conditions:

- if the sequence of variables has not already been chosen, the execution flow keeps going on
- if the sequence of variables has already been chosen but the experiment wants to go on anyway, the output data are renamed to prevent overwriting.
- if the sequence of variables has already been chosen and the experimenter wants to choose another sequence, turns back to the vizinfo panel.

The first two conditions work, but the third doesn't. Specifically, the user can choose another sequence but when he hits again the run button nothing happens and so the experiment doesn't go on. Could anyone tell me where I did wrong in my code?


best regards,
armo

import viz
import vizinfo

class Experiment:
def __init__(self,title):
self.title = title

# create a class object with the current experiment data
current_exp = Experiment('current experiment')


class ExperimentalSetting:
def __init__(self, var1=None, var2=None):
self.var1 = var1
self.var2 = var2

class ExperimentalSession:
def __init__(self, phase=None, number=None):
self.phase = phase
self.number = number
self.settings = ExperimentalSetting()

def __repr__(self):
return self.phase + ' ' + str(self.number)


# create a class object with the current session data
current_session = ExperimentalSession()

viz.go()

def get_session_info():
global phase
global current_session
global current_RT_file
global current_ACC_file

import os
def check_existing_file(file_name, extension):
'''checks if a file already exists'''
if os.path.exists( file_name + extension ):
print 'file already exists...'
return True
else: return False

def add_suffix(f):
'''adds a suffix to a file.
Used when a file already exists'''
copy_suffix = 'Copy'
f = f + ' - ' + copy_suffix
return f

def rename_existing_file(file_name, extension):
'''if a file already exists, rename it with a suffix extension'''
if check_existing_file(file_name, extension):
checked_fileName = add_suffix(file_name) + extension
else: checked_fileName = file_name + extension
return checked_fileName

current_RT_file = None
current_ACC_file = None

isEqual = False
while not isEqual:
print 'displaying vizinfo box'
#Add the vizinfo box
infoBox = vizinfo.add('')
infoBox.scale(1.5,1.5)
infoBox.translate( 0.85, 0.95 )
infoBox.title('Experiment Info: ' + current_exp.title)

#Add the GUI elements to the box
phaseTrainingBox = infoBox.add(viz.RADIO,1,'Training')
phaseExperimentBox = infoBox.add(viz.RADIO,1,'Experiment')
variable1_A_Box = infoBox.add(viz.RADIO,2,'A')
variable1_B_Box = infoBox.add(viz.RADIO,2,'B')
variable1_C_Box = infoBox.add(viz.RADIO,2,'C')
variable2_1_Box = infoBox.add(viz.RADIO,3,'1')
variable2_2_Box = infoBox.add(viz.RADIO,3,'2')

runButton = infoBox.add(viz.BUTTON,'Run')

# waits for pressing the runbutton to go forward
yield viztask.waitButtonUp(runButton)

# get the current session settings
if phaseTrainingBox.get() == viz.DOWN:
current_session.phase = 'Training'
elif phaseExperimentBox.get() == viz.DOWN:
current_session.phase = 'Experiment'

if variable1_A_Box.get() == viz.DOWN:
current_session.settings.var1 = 'A'
elif variable1_B_Box.get() == viz.DOWN:
current_session.settings.var1 = 'B'
elif variable1_C_Box.get() == viz.DOWN:
current_session.settings.var1 = 'B'

if variable2_1_Box.get() == viz.DOWN:
current_session.settings.var2 = '1'
elif variable2_2_Box.get() == viz.DOWN:
current_session.settings.var2 = '2'

current_file_labels = [
current_session.phase,
current_session.settings.var1,
current_session.settings.var2,
]

# create two files object with the experiment RT and ACC data
RT_folder = 'data/RT/'
ACC_folder = 'data/ACC/'

current_RT_file_name = RT_folder + '_'.join(current_file_labels) + '_RT'
current_ACC_file_name = ACC_folder + '_'.join(current_file_labels) + '_ACC'

print current_RT_file_name

if check_existing_file(current_RT_file_name, '.txt') and check_existing_file(current_ACC_file_name, '.txt'):
answer = viz.ask('this sequence has already been chosen. Continue?')
if answer:
print 'chose to continue and rename file'
current_RT_file = open( rename_existing_file(current_RT_file_name, '.txt'),'w')
current_ACC_file = open( rename_existing_file(current_ACC_file_name, '.txt'),'w')
isEqual = True
else:
print 'chose not to continue'
return
else:
print 'the file names don\'t already exist'
current_RT_file = open( current_RT_file_name + '.txt','w')
current_ACC_file = open( current_ACC_file_name + '.txt','w')
break

infoBox.remove()

print 'current settings:', [x for x in current_file_labels]

def experimental_flow():
yield get_session_info()

import viztask
viztask.schedule(experimental_flow)