def startTrial(NUMBER, OPERATOR): #fixcross.preload() exp = design.Experiment("MATH") control.initialize(exp) control.start() fixcross = stimuli.FixCross() txt_input = io.TextInput("= ") stimuli.TextScreen("MATH GAME", "STARTING in 10 secs", heading_size=40, text_size=60).present() exp.clock.wait(2000) #stim -1 fixcross.preload() fixcross.present() exp.clock.wait(10000) b = design.Block() for i in range(0, 10): #FOR 10 TRIALS b.clear_trials() b = design.Block() print(i) tr = atl.arithmetictriall1(NUMBER, OPERATOR) print(tr) for trel in tr[0]: t = design.Trial() s = stimuli.TextLine(text=str(trel), text_size=120, text_colour=misc.constants.C_GREEN) t.add_stimulus(s) b.add_trial(t) #print(b.trials) exp.add_block(b) #START TEST: ONSCREEN for b in exp.blocks: fixcross.present() exp.clock.wait(100) for t in b.trials: t.stimuli[0].present() exp.clock.wait(1000) print(b) exp.clock.reset_stopwatch() answer = txt_input.get() try: answer = int(answer) if answer == tr[1]: print("Correct") else: print("incorrect") except: print("incorrect")
def mount_design(self): """ Creates a list of expyriment.design.Block objects, creates trials and loads the experimental stim according to the class parameters Returns ------- exp_design: list of expyriment.design.Block objects list containing the blocks, trials and stimuli ready to run """ block_list = [design.Block(name='run%d' % block + 1 for block in range(self.n_block))] run_list = [open(filename) for filename in sorted(os.listdir(self.stim_list))] for block in range(self.n_block): for line in run_list[block].readlines(): trial = design.Trial() stim = stimuli.TextLine("+") trial.add_stimulus(stim) block_list[block].add_trial(trial) self.exp.add_block(block_list[block])
def run_block(self, block_id=None): block = design.Block() if block_id: block._id = block_id block.set_factor('starting_length', self.exp.config.getforblock('DESIGN', 'starting_length', block_id-1, cast=int)) block.set_factor('reverse', int(self.exp.config.getforblock('DESIGN', 'reverse', block_id-1, cast=bool))) block.set_factor('sequence_type', self.exp.config.getforblock('DESIGN', 'sequence_type', block_id-1)) seq_length = block.get_factor('starting_length') instructions_changed = False if block_id > 1 and block.get_factor('reverse') != \ int(self.exp.config.getforblock('DESIGN','reverse', block_id-2, cast=bool)): instructions_changed = True self.exp._show_message('instruction_title_changed' if instructions_changed else 'instruction_title', 'instruction_reverse' if block.get_factor('reverse') else 'instruction', stall=8000, heading_bold=True, heading_colour=(255,0,0) if instructions_changed else None) block.set_factor('trials', self.exp.config.getforblock('DESIGN', 'trials', block_id-1, cast=int)) for t in range(block.get_factor('trials')): correct = self.run_trial(block, seq_length, trial_id=t+1) seq_length += 1 if correct else -1 seq_length = max(seq_length, 1) self.exp.add_block(block) self.exp._log_block(block)
def prepare_block(self, id): block = design.Block() block.set_factor('num_targets', self.exp.config.getforblock('DESIGN', 'num_targets', id, cast=int)) block.set_factor('target_titles', self.exp.config.getforblock( 'DESIGN', 'target_titles', id)) block.set_factor('timeout', self.exp.config.getforblock('DESIGN', 'timeout', id, cast=int)) for t in range(self.exp.config.getforblock('DESIGN', 'trials', id, cast=int)): block.add_trial(self.prepare_trial(block)) self.exp.add_block(block)
def trial_generator(task, N): if task[0] == "mixed_task": N = N // 2 b = design.Block() b.set_factor("task_type", task[0]) for specific_task in task[1]: for my_trial in specific_task: t = design.Trial() t.set_factor("shape", my_trial[0]) t.set_factor("filling", my_trial[1]) s = stimuli.Picture(my_trial[2]) t.add_stimulus(s) b.add_trial(t, copies=N) b.shuffle_trials() return b
def createBlock(COLORS, blockname, exp): # i/p list 'COLORS' and RETURNS a stimuli block 'b' #for level in ["LEVEL 1"]:#,"LEVEL 2"]: #print(level) b = design.Block(name=blockname) b.set_factor("level", blockname) #blockname as level for color in COLORS: t = design.Trial() t.set_factor("COLOR", color[0]) #print(type(color[1])) #print(color[0]) s = stimuli.Rectangle([200, 200], position=[0, 0], colour=color[1]) t.add_stimulus(s) b.add_trial(t, copies=1) #b.shuffle_trials() #never use this line #print(b.trials) exp.add_block(b) return b # b IS AN EXPERIMENT TRIAL <INPUT LIST 'COLORS' is coverted to Experiment object>
def design_experiment(exp, positions, colors, pairings): """Designs a Simon Task experiment.""" for pair_name, pairing in pairings.items(): b = design.Block() b.set_factor("pairing", pair_name) for pos_name, position in positions.items(): for color_name, color in colors.items(): t = design.Trial() t.set_factor("position", pos_name) t.set_factor("color", color_name) s = stimuli.Rectangle((50, 50), position=position, colour=color) t.add_stimulus(s) b.add_trial(t, copies=2) b.shuffle_trials() exp.add_block(b) return exp
#!/usr/bin/env python # -*- coding: utf-8 -*- """ Save design to csv file """ from __future__ import print_function from expyriment import design exp = design.Experiment(name="SNARC") # Design: 2 response mappings x 8 stimuli x 10 repetitions for response_mapping in ["left_odd", "right_odd"]: block = design.Block() block.set_factor("mapping", response_mapping) #add trials to block for digit in [1, 2, 3, 4, 6, 7, 8, 9]: trial = design.Trial() trial.set_factor("digit", digit) block.add_trial(trial, copies=10) block.shuffle_trials() exp.add_block(block) exp.add_experiment_info("This a just a SNARC experiment.") #add between subject factors exp.add_bws_factor('mapping_order', ['left_odd_first', 'right_odd_first']) #prepare data output exp.data_variable_names = [ "block", "mapping", "trial", "digit", "ISI", "btn", "RT", "error" ]
c1 = stimuli.BlankScreen() blank.plot(c1) c1.preload() c2 = stimuli.BlankScreen() fix.plot(c2) c2.preload() c3 = stimuli.BlankScreen() fix.plot(c3) rect_b.plot(c3) c3.preload() txt_input = io.TextInput("") # DESIGN b = design.Block() for trial in range(len(StimList)): t = design.Trial() # blank screen t.add_stimulus(c1) # fixation dot t.add_stimulus(c2) # rectangles t.add_stimulus(c3)
from expyriment import design, control, stimuli, misc, io import random control.set_develop_mode(True) exp = design.Experiment(name="My Experiment") control.initialize(exp) fixcross = stimuli.FixCross() fixcross.preload() blankscreen = stimuli.BlankScreen() blankscreen.preload() b = design.Block(name="Only Block") for i in range(10): waiting_time = random.randint(200, 2000) t = design.Trial() t.set_factor("waiting_time", waiting_time) s = stimuli.Circle(50) t.add_stimulus(s) b.add_trial(t) exp.add_block(b) exp.data_variable_names = ["Waiting Time", "Response Time"] control.start() for block in exp.blocks: for trial in block.trials: fixcross.present() exp.clock.wait( trial.get_factor("waiting_time") - trial.stimuli[0].preload())
myFilenames = [] csvReader = reader(open(stimTextFilename, 'rb')) for row in csvReader: myFilenames.append(row) myFilenames = np.swapaxes(myFilenames, 0, 1) conditionNames = [ "facesUpright", "facesInverted", "scenesUpright", "scenesInverted" ] conditionNames.extend(conditionNames) imageLocation = "%s/Images" % stimTextFilePath for blockNumber in range(0, 8): b = design.Block(name=conditionNames[blockNumber]) b.set_factor("Condition", conditionNames[blockNumber]) firstImageList = [ os.path.join(imageLocation, f) for f in [ myFilenames[blockNumber][i] for i in range(len(myFilenames[blockNumber])) if i % 2 == 0 ] ] secondImageList = [ os.path.join(imageLocation, f) for f in [ myFilenames[blockNumber][i] for i in range(len(myFilenames[blockNumber])) if i % 2 == 1 ] ]
Press the space bar to start.""") ###### 1.A --> Definition of the only two possible trials made up of two stimuli "Blue/Red" #Stimulus red visual_trial_red = design.Trial() visual_trial_red.add_stimulus(stimuli.Circle(radius=100, colour=(255, 0, 0))) #Stimulus blue visual_trial_blue = design.Trial() visual_trial_blue.add_stimulus(stimuli.Circle(radius=100, colour=(0, 0, 255))) ###### 1.B --> Definition of Associated Blocks "Blue/Red" visual_block_red = design.Block("red") # Buidlding red block with 5 stimuli for i in range(NTRIALS): visual_block_red.add_trial(visual_trial_red) exp.add_block(visual_block_red) # Adding red block to experiment # Building blue block with 5 stimuli visual_block_blue = design.Block("blue") for i in range(NTRIALS):
'task', 'reactionTime', 'stimulus', 'response', 'isCorrect', 'blockName', 'isSwitchTrial']) # creating blocks experiment.clear_blocks() for blockNo in expDesign.block_cnt.unique(): rows = expDesign[expDesign.block_cnt == blockNo] blockName = rows.blockName.unique()[0] block = design.Block(blockName) for row in rows.iterrows(): trial = design.Trial() task = row[1].task if task == 'odd-even': bgColor = misc.constants.C_WHITE else: bgColor = misc.constants.C_DARKGREY trial.set_factor('task', task) stimulus = stimuli.TextLine(text=str(row[1].stimulus), text_size=22, text_font='Courier New', text_bold=True)
from expyriment import design, control, stimuli, misc, io control.set_develop_mode(True) exp = design.Experiment(name="My Experiment") control.initialize(exp) for name, color in [["green", misc.constants.C_GREEN], ["red", misc.constants.C_RED]]: block = design.Block(name=name.capitalize()+" Stimuli") block.set_factor("Color", name) for where in [["left", -300], ["right", 300]]: t = design.Trial() t.set_factor("Position", where[0]) s = stimuli.Rectangle([50, 50], position=[where[1], 0], colour=color) t.add_stimulus(s) block.add_trial(t) exp.add_block(block) control.start() for block in exp.blocks: for trial in block.trials: trial.stimuli[0].present() exp.clock.wait(1000) control.end()
control.start(exp) fixcross = stimuli.FixCross(size=(30, 30), line_width=3, colour=(0, 255, 0)) fixcross.preload() fixcross2 = stimuli.FixCross(size=(30, 30), line_width=2, colour=(128, 128, 128)) fixcross2.preload() liste = "list%d.csv" % (2 - exp.subject % 2) listname = os.path.join("lists", liste) sequences = [i for i in csv.reader(open(listname))] block = design.Block(name="block1") for line in sequences: trial = design.Trial() trial.set_factor("Condition", line[0]) stim = [] for w in line[1:]: if sys.version_info > (3, 0): s = w else: s = w.decode('utf-8') stim = stimuli.TextLine(s, text_font=FONT, text_size=FONT_SIZE) trial.add_stimulus(stim) block.add_trial(trial)
ITI = 1000 # inter trial interval MAX_RESPONSE_TIME = 2000 AUDIO_STIMULUS = 'click.wav' exp = design.Experiment(name="AudioVisual Detection") control.initialize(exp) blankscreen = stimuli.BlankScreen() visual_trial = design.Trial() visual_trial.add_stimulus(stimuli.FixCross(size=(50, 50), line_width=4)) audio_trial = design.Trial() audio_trial.add_stimulus(stimuli.Audio(AUDIO_STIMULUS)) visual_block = design.Block("visual") for i in range(NTRIALS): visual_block.add_trial(visual_trial) exp.add_block(visual_block) audio_block = design.Block("audio") for i in range(NTRIALS): audio_block.add_trial(audio_trial) exp.add_block(audio_block) audiovisual_block = design.Block("audiovisual") for i in range(NTRIALS // 2): audiovisual_block.add_trial(audio_trial) audiovisual_block.add_trial(visual_trial) audiovisual_block.shuffle_trials() exp.add_block(audiovisual_block)
def startTrial(NUMBER,OPERATOR): w, h = 10, 3; Matrix = [[0 for x in range(w)] for y in range(h)] # Define 2D array #fixcross.preload() exp = design.Experiment("MATH") control.initialize(exp) control.start() fixcross = stimuli.FixCross(size=(40,40),colour=misc.constants.C_WHITE,position=(0,200)) txt_input=io.TextInput("= ") inputNAME=io.TextInput("ENTER NAME: ") VolunteerNAME = inputNAME.get() # First input by volunteer Matrix[2][1]=VolunteerNAME stimuli.TextScreen("MATH GAME -LEVEL 1",". . . RELAX . . .\n\n\n\n\n\n+\n\nlook at fixcross\n\n\nSTARTS IN 10 SECONDS",heading_size=40,text_size=20,heading_colour=misc.constants.C_WHITE,text_colour=misc.constants.C_WHITE).present() exp.clock.wait(10000) #stim -1 REMOVE # ON COMMISSION fixcross.preload() fixcross.present() exp.clock.wait(10000) # REMOVE # ON COMMISSION b = design.Block() for i in range (0,10): # cOMMISSION : 3->10 #FOR 10 TRIALS b.clear_trials() b = design.Block() print(i) tr=atl.arithmetictriall1(NUMBER,OPERATOR) print(tr) for trel in tr[0]: t=design.Trial() s = stimuli.TextLine(text=str(trel),text_size=200,text_colour=misc.constants.C_GREEN) t.add_stimulus(s) b.add_trial(t) #print(b.trials) exp.add_block(b) #START TEST: ONSCREEN #tx0=time.time() fixcross.present() exp.clock.wait(1000) #tx1=time.time()-tx0 #print("ttt %d"%tx1) #xcount = 1 #debug fixcross timings (previously increasing time b=1) for b in exp.blocks: for t in b.trials: t.stimuli[0].present() exp.clock.wait(800) #>1000 #xcount=0 print(b) #exp.clock.reset_stopwatch() t0=time.time() answer = txt_input.get() responsetime=time.time()-t0 #response time try: answer=int(answer) if answer==tr[1]: print("Correct") Matrix[0][i]=5 Matrix[1][i]=responsetime else: print("incorrect") Matrix[0][i]=-5 Matrix[1][i]=responsetime except: print("incorrect") Matrix[0][i]=-5 Matrix[1][i]=responsetime fixcross.present() exp.clock.wait(5000) control.end() #print(Matrix) return Matrix
def get_subject_sex(): sex_question.present() key, rt = exp_1.keyboard.wait(keys=[MALE_SEX_KEY, FEMALE_SEX_KEY]) if key == MALE_SEX_KEY: sex = 'Male' elif key == FEMALE_SEX_KEY: sex = 'Female' return (sex) STIM_DIR = 'Stimuli/' #I decided not to implement a loop for these three blocks, since I would need to use a dictionary to create variable names from strings. The popular opinion is that it is not advisable pure_shape_block = design.Block() for shape in ['diamond', 'square']: for number in [2, 3]: trial = design.Trial() trial.set_factor('block', 'pure_shape') trial.set_factor('task', 'shape') trial.set_factor('shape', shape) trial.set_factor('number_of_circles', number) pngname = os.path.join(STIM_DIR, 'shape_{}_{}_circles.png'.format(shape, number)) trial.add_stimulus(stimuli.Picture(pngname)) pure_shape_block.add_trial(trial) pure_shape_block.shuffle_trials() pure_filling_block = design.Block() for shape in ['diamond', 'square']:
def prepare_block(self): block = design.Block() # block.set_factor('block_factor', self.exp.config.getint('DESIGN', 'block_factor')) for t in range(self.exp.config.getint('DESIGN', 'trials')): block.add_trial(self.prepare_trial(block)) self.exp.add_block(block)
from expyriment import design, control, stimuli control.defaults.window_mode = True control.defaults.window_size = [800,600] design.defaults.experiment_background_colour = (230,230,70) exp = design.Experiment(name="Cool Experiment") control.initialize(exp) block_one = design.Block(name="Our only block") tmp_trial = design.Trial() cross = stimuli.FixCross() cross.preload() # define stimulus positions positions = [-400, -200, 0, 200, 400] # go through all positions for xpos in positions: # create circle accordingly stim = stimuli.Circle(radius=25, colour=(0,0,0),position=[xpos,0]) stim.preload() tmp_trial.add_stimulus(stim) tmp_trial.add_stimulus(cross) block_one.add_trial(tmp_trial) tmp_trial = tmp_trial.copy() tmp_trial.clear_stimuli() exp.add_block(block_one) control.start()
# DESIGN exp = design.Experiment("Stroop Task (Colour)") exp.add_data_variable_names(["TrialID, Condition, Text, Colour, Key, RT, Correct"]) control.initialize(exp) out_protocol = StimulationProtocol("time") out_protocol.add_condition("congruent") out_protocol.add_condition("incongruent") out_protocol.add_condition("error") fixcross = stimuli.FixCross() fixcross.preload() main = design.Block() for r in range(REPETITIONS): for name in ("RED", "GREEN"): for colour in (misc.constants.C_RED, misc.constants.C_GREEN): trial = design.Trial() if (name == "RED" and colour == misc.constants.C_RED) or \ (name == "GREEN" and colour == misc.constants.C_GREEN): trial.set_factor("Condition", "congruent") else: trial.set_factor("Condition", "incongruent") stim = stimuli.TextLine(name, text_size=70, text_font="monospace", text_colour=colour)
# Prep stimuli directories stimuliPaths = [] subDirectories = ["faces", "objects", "scenes", "scrambled"] design.randomize.shuffle_list(subDirectories) subDirectories.extend(subDirectories[::-1]) for directory in subDirectories: stimuliPaths.append(os.path.join("/Users/samweiller/Desktop/localizerStimuli", directory)) for condition in stimuliPaths: validImages = 0 conditionName = subDirectories[stimuliPaths.index(condition)] b = design.Block(name=conditionName) b.set_factor("Condition", conditionName) imageNames = [os.path.join(condition, f) for f in os.listdir(condition)] imageRandomizer = design.randomize.rand_int_sequence(0, imagesPerBlock) for imageNumber in imageRandomizer: if validImages < imagesPerBlock: if imageNames[imageNumber].endswith('jpg'): t = design.Trial() soloName = os.path.split(imageNames[imageNumber])[1] t.set_factor("Image Name", soloName) s = stimuli.Picture(imageNames[imageNumber], (0,0)) s.scale(scaleFactor) t.add_stimulus(s) b.add_trial(t, copies=1, random_position=True)
def prepare_block(self, id, prev_block={}): block = design.Block() if type(id) is int: block._id = id + 1 block = self.exp._load_block_settings(block, [('trials', int), ('num_boxes', int)]) block = self.exp._load_block_settings(block, [('canvas_size', float)], section='APPEARANCE') button_height = self.exp._unit( self.exp.config.get('APPEARANCE', 'button_height')) self.canvas_size = int( min(self.exp.screen.window_size[0], self.exp.screen.window_size[1] - button_height * 2) * block.get_factor('canvas_size')) self.num_boxes = block.get_factor('num_boxes') if self.exp.config.getboolean('DESIGN', 'reaction_time_only'): block.set_factor('reaction_time_only', 'true') block.set_factor('nback', 1) block.set_factor('nback_mode', 'P') if self.exp.config.has_option('DESIGN', 'repeat_probability'): block = self.exp._load_block_settings( block, [('repeat_probability', float)]) else: block.set_factor('repeat_probability', 1) else: block = self.exp._load_block_settings( block, [('nback', int), ('nback_mode', str), ('repeat_probability', float)]) self.grid = self.prepare_grid_stimulus() self.trial_options = { 'P': list(range(self.num_boxes)), 'C': self.exp._colours(self.exp.config.get('DESIGN', 'colours')) } # allow for one colour only if type(self.trial_options['C'][0]) is int: self.trial_options['C'] = [self.trial_options['C']] self.modes = {'P': 'mode_position', 'C': 'mode_colour'} if not block.get_factor('reaction_time_only'): mode_text = (_('mode_connector') + ' ').join(', '.join([ _(self.modes[M]) for M in block.get_factor('nback_mode') ]).rsplit(', ', 1)) block.set_factor('mode_text', mode_text) if prev_block and self.exp.config.getboolean('DESIGN', 'change_nback_level'): block.set_factor( 'nback', max( 1, prev_block['nback'] + prev_block['correct_ratio'] >= self.exp.config.getfloat( 'DESIGN', 'increase_nback_correct_ratio') - prev_block['correct_ratio'] < self.exp.config.getfloat( 'DESIGN', 'decrease_nback_correct_ratio'))) for i, trial_item in enumerate( NBack.compute_trial_items(block, self.trial_options)): block.add_trial(self.prepare_trial(block, trial_item, i + 1)) self.exp.add_block(block) return (block)
from expyriment import design, control, stimuli control.defaults.window_mode = True control.defaults.window_size = [800, 600] design.defaults.experiment_background_colour = (230, 230, 70) exp = design.Experiment(name="Cool Experiment") control.initialize(exp) block_one = design.Block("Our only block") tmp_trial = design.Trial() cross = stimuli.FixCross(colour=(0, 0, 0)) cross.preload() tmp_trial.add_stimulus(cross) block_one.add_trial(tmp_trial) exp.add_block(block_one) control.start() for b in exp.blocks: for t in b.trials: t.stimuli[0].present() exp.keyboard.wait() control.end()
df.index = df.index.astype('Int32') return df control.set_develop_mode(False) control.defaults.window_mode = True control.defaults.window_size = [800, 600] control.defaults.initialize_delay = 0 exp = design.Experiment(name="My Experiment") control.initialize(exp) conditions = load_df("../bws_study.csv").dropna().groupby("Condition") print() #[data for nr, data in conditions] for nr, data in conditions: block = design.Block(name="Condition" + str(int(nr))) block.set_factor("Condition", nr) for nr, sents in data.iterrows(): t = design.Trial() t.set_factor("ItemNum", sents["Item"]) for sent in ["S1", "S2", "S3", "S4", "S5", "S6", "S7"]: s = stimuli.TextLine(text=sents[sent], text_size=20) t.add_stimulus(s) block.add_trial(t) exp.add_block(block) exp.add_bws_factor("FallsWennCondition", ["Wenn-Condition", "Falls-Condition"]) exp.add_bws_factor("GabGabCondition", ["GabGab-Condition", "GabnichtGab-Condition"]) print() #exp control.start()
df = df.dropna(subset=['Exp']) return df control.set_develop_mode(False) control.defaults.window_mode = True control.defaults.window_size = [800, 600] control.defaults.initialize_delay = 0 # you shouldn't set this to zero but it annoys me and I don't care about timing. exp = design.Experiment(name="My Experiment") control.initialize(exp) conditions = load_df("../bws_study.csv").dropna().groupby("Condition") print() #[data for nr, data in conditions] for nr, data in conditions: block = design.Block(name=f"Condition{nr}") block.set_factor("Condition", nr) for nr, sents in data.iterrows(): t = design.Trial() t.set_factor("ItemNum", sents["Item"]) for sent in ["S1", "S2", "S3", "S4", "S5", "S6", "S7"]: s = stimuli.TextLine(text=sents[sent], text_size=20) t.add_stimulus(s) block.add_trial(t) exp.add_block(block) #right now, we have ALL conditions for all subjects... exp.add_bws_factor("FallsWennCondition", ["Wenn-Condition", "Falls-Condition"]) exp.add_bws_factor("GabGabCondition", ["GabGab-Condition", "GabnichtGab-Condition"]) print() #exp, exp.n_bws_factor_conditions