From 6d7628afad12059c4d7a54637bfc484e651823ff Mon Sep 17 00:00:00 2001 From: tiborauer <tibor.auer@gmail.com> Date: Tue, 12 Nov 2019 02:44:47 +0000 Subject: [PATCH] INITIAL --- three-back.psyexp | 36 ++++++++---------------------------- three-back.py | 32 ++++++++++++++++++-------------- three-back_lastrun.py | 31 +++++++++++++++++-------------- 3 files changed, 43 insertions(+), 56 deletions(-) diff --git a/three-back.psyexp b/three-back.psyexp index d2b8a4e..b756bdf 100644 --- a/three-back.psyexp +++ b/three-back.psyexp @@ -1,18 +1,18 @@ <?xml version="1.0" ?> -<PsychoPy2experiment encoding="utf-8" version="3.2.0"> +<PsychoPy2experiment encoding="utf-8" version="3.2.4"> <Settings> <Param name="Audio latency priority" updates="None" val="use prefs" valType="str"/> <Param name="Audio lib" updates="None" val="use prefs" valType="str"/> <Param name="Completed URL" updates="None" val="" valType="str"/> <Param name="Data filename" updates="None" val="u'data/%s_%s_%s' % (expInfo['participant'], expName, expInfo['date'])" valType="code"/> <Param name="Enable Escape" updates="None" val="True" valType="bool"/> - <Param name="Experiment info" updates="None" val="{'n-Back': '3', 'probability': '0.2', 'participant': '', 'session': '001'}" valType="code"/> + <Param name="Experiment info" updates="None" val="{'backN': '3', 'probability': '0.2', 'participant': '', 'session': '001'}" valType="code"/> <Param name="Force stereo" updates="None" val="True" valType="bool"/> <Param name="Full-screen window" updates="None" val="False" valType="bool"/> <Param name="HTML path" updates="None" val="html" valType="str"/> <Param name="Incomplete URL" updates="None" val="" valType="str"/> <Param name="JS libs" updates="None" val="packaged" valType="str"/> - <Param name="Monitor" updates="None" val="Alienware Laptop Monitor" valType="str"/> + <Param name="Monitor" updates="None" val="Monitor" valType="str"/> <Param name="Save csv file" updates="None" val="False" valType="bool"/> <Param name="Save excel file" updates="None" val="False" valType="bool"/> <Param name="Save log file" updates="None" val="True" valType="bool"/> @@ -86,27 +86,7 @@ <Param name="saveStartRoutine" updates="constant" val="False" valType="bool"/> <Param name="saveStartStop" updates="None" val="True" valType="bool"/> <Param name="startEstim" updates="None" val="" valType="code"/> - <Param name="startExpValue" updates="constant" val="['A','B','C','D','E','F','G','H']" valType="code"/> - <Param name="startFrameValue" updates="None" val="" valType="code"/> - <Param name="startRoutineValue" updates="constant" val="" valType="code"/> - <Param name="startType" updates="None" val="time (s)" valType="str"/> - <Param name="startVal" updates="None" val="" valType="code"/> - <Param name="stopType" updates="None" val="duration (s)" valType="str"/> - <Param name="stopVal" updates="constant" val="" valType="code"/> - <Param name="syncScreenRefresh" updates="None" val="False" valType="bool"/> - </VariableComponent> - <VariableComponent name="prevN"> - <Param name="disabled" updates="None" val="False" valType="bool"/> - <Param name="durationEstim" updates="None" val="" valType="code"/> - <Param name="name" updates="None" val="prevN" valType="code"/> - <Param name="saveEndExp" updates="constant" val="False" valType="bool"/> - <Param name="saveEndRoutine" updates="constant" val="True" valType="bool"/> - <Param name="saveFrameValue" updates="constant" val="never" valType="str"/> - <Param name="saveStartExp" updates="constant" val="False" valType="bool"/> - <Param name="saveStartRoutine" updates="constant" val="False" valType="bool"/> - <Param name="saveStartStop" updates="None" val="True" valType="bool"/> - <Param name="startEstim" updates="None" val="" valType="code"/> - <Param name="startExpValue" updates="constant" val="np.random.choice(stimuli,int(expInfo['n-Back']))" valType="code"/> + <Param name="startExpValue" updates="constant" val="np.array(['A','B','C','D','E','F','G','H'])" valType="code"/> <Param name="startFrameValue" updates="None" val="" valType="code"/> <Param name="startRoutineValue" updates="constant" val="" valType="code"/> <Param name="startType" updates="None" val="time (s)" valType="str"/> @@ -118,17 +98,17 @@ </Routine> <Routine name="trial_n"> <CodeComponent name="trial_n_code"> - <Param name="Begin Experiment" updates="constant" val="" valType="extendedCode"/> + <Param name="Begin Experiment" updates="constant" val="prevN = np.array([])" valType="extendedCode"/> <Param name="Begin JS Experiment" updates="constant" val="" valType="extendedCode"/> <Param name="Begin JS Routine" updates="constant" val="" valType="extendedCode"/> - <Param name="Begin Routine" updates="constant" val="stimleft = np.delete(stimuli,[np.argwhere(stimuli==i) for i in prevN])&#10;stimulus = np.random.choice(stimleft)" valType="extendedCode"/> + <Param name="Begin Routine" updates="constant" val="if (currentLoop.thisN < int(expInfo['backN'])) or (np.random.uniform() > float(expInfo['probability'])):&#10; stimleft = np.delete(stimuli,[np.argwhere(stimuli==i) for i in prevN])&#10; stimulus = np.random.choice(stimleft)&#10;else:&#10; stimulus = prevN[-int(expInfo['backN'])]" valType="extendedCode"/> <Param name="Code Type" updates="None" val="Py" valType="str"/> <Param name="Each Frame" updates="constant" val="" valType="extendedCode"/> <Param name="Each JS Frame" updates="constant" val="" valType="extendedCode"/> <Param name="End Experiment" updates="constant" val="" valType="extendedCode"/> <Param name="End JS Experiment" updates="constant" val="" valType="extendedCode"/> <Param name="End JS Routine" updates="constant" val="" valType="extendedCode"/> - <Param name="End Routine" updates="constant" val="prevN = np.hstack((prevN[1:],stimulus))" valType="extendedCode"/> + <Param name="End Routine" updates="constant" val="thisExp.addData('tial_n_letter.stim', stimulus)&#10;prevN = np.hstack((prevN,stimulus))&#10;prevN = prevN[-3:]" valType="extendedCode"/> <Param name="disabled" updates="None" val="False" valType="bool"/> <Param name="name" updates="None" val="trial_n_code" valType="code"/> </CodeComponent> @@ -218,7 +198,7 @@ <Param name="endPoints" updates="None" val="[0, 1]" valType="num"/> <Param name="isTrials" updates="None" val="True" valType="bool"/> <Param name="loopType" updates="None" val="sequential" valType="str"/> - <Param name="nReps" updates="None" val="expInfo['n-Back']" valType="code"/> + <Param name="nReps" updates="None" val="20" valType="code"/> <Param name="name" updates="None" val="loop_n" valType="code"/> <Param name="random seed" updates="None" val="" valType="code"/> </LoopInitiator> diff --git a/three-back.py b/three-back.py index 3fbf43b..91b4b78 100644 --- a/three-back.py +++ b/three-back.py @@ -1,8 +1,8 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- """ -This experiment was created using PsychoPy3 Experiment Builder (v3.2.0), - on November 11, 2019, at 19:58 +This experiment was created using PsychoPy3 Experiment Builder (v3.2.4), + on november 12, 2019, at 02:43 If you publish work using this script the most relevant publication is: Peirce J, Gray JR, Simpson S, MacAskill M, Höchenberger R, Sogo H, Kastman E, Lindeløv JK. (2019) @@ -33,9 +33,9 @@ _thisDir = os.path.dirname(os.path.abspath(__file__)) os.chdir(_thisDir) # Store info about the experiment session -psychopyVersion = '3.2.0' +psychopyVersion = '3.2.4' expName = 'three-back' # from the Builder filename that created this script -expInfo = {'n-Back': '3', 'probability': '0.2', 'participant': '', 'session': '001'} +expInfo = {'backN': '3', 'probability': '0.2', 'participant': '', 'session': '001'} dlg = gui.DlgFromDict(dictionary=expInfo, sortKeys=False, title=expName) if dlg.OK == False: core.quit() # user pressed cancel @@ -65,7 +65,7 @@ frameTolerance = 0.001 # how close to onset before 'same' frame win = visual.Window( size=[1600, 900], fullscr=False, screen=0, winType='pyglet', allowGUI=True, allowStencil=False, - monitor='Alienware Laptop Monitor', color=[-1,-1,-1], colorSpace='rgb', + monitor='Monitor', color=[-1,-1,-1], colorSpace='rgb', blendMode='avg', useFBO=True, units='deg') # store frame rate of monitor if we can measure it @@ -80,24 +80,21 @@ defaultKeyboard = keyboard.Keyboard() # Initialize components for Routine "Instructions" InstructionsClock = core.Clock() -from numpy.random import choice instructions = visual.TextStim(win=win, name='instructions', text='Press SPACE to start', font='Arial', pos=(0, 0), height=2.4, wrapWidth=None, ori=0, color='white', colorSpace='rgb', opacity=1, languageStyle='LTR', - depth=-1.0); + depth=0.0); key_start = keyboard.Keyboard() # Set experiment start values for variable component stimuli -stimuli = ['A','B','C','D','E','F','G','H'] +stimuli = np.array(['A','B','C','D','E','F','G','H']) stimuliContainer = [] -# Set experiment start values for variable component trialInit -trialInit = choice(stimuli,int(expInfo[n-Back])) -trialInitContainer = [] # Initialize components for Routine "trial_n" trial_nClock = core.Clock() +prevN = np.array([]) trial_n_screen = visual.Rect( win=win, name='trial_n_screen',units='norm', width=(2, 2)[0], height=(2, 2)[1], @@ -221,7 +218,7 @@ thisExp.nextEntry() routineTimer.reset() # set up handler to look after randomisation of conditions etc -loop_n = data.TrialHandler(nReps=expInfo['n-Back'], method='sequential', +loop_n = data.TrialHandler(nReps=20, method='sequential', extraInfo=expInfo, originPath=-1, trialList=[None], seed=None, name='loop_n') @@ -242,7 +239,11 @@ for thisLoop_n in loop_n: # ------Prepare to start Routine "trial_n"------- routineTimer.add(2.000000) # update component parameters for each repeat - stimulus=choice(stimuli) + if (currentLoop.thisN < int(expInfo['backN'])) or (np.random.uniform() > float(expInfo['probability'])): + stimleft = np.delete(stimuli,[np.argwhere(stimuli==i) for i in prevN]) + stimulus = np.random.choice(stimleft) + else: + stimulus = prevN[-int(expInfo['backN'])] tial_n_letter.setText(stimulus) # keep track of which components have finished trial_nComponents = [trial_n_screen, tial_n_letter] @@ -324,13 +325,16 @@ for thisLoop_n in loop_n: for thisComponent in trial_nComponents: if hasattr(thisComponent, "setAutoDraw"): thisComponent.setAutoDraw(False) + thisExp.addData('tial_n_letter.stim', stimulus) + prevN = np.hstack((prevN,stimulus)) + prevN = prevN[-3:] loop_n.addData('trial_n_screen.started', trial_n_screen.tStartRefresh) loop_n.addData('trial_n_screen.stopped', trial_n_screen.tStopRefresh) loop_n.addData('tial_n_letter.started', tial_n_letter.tStartRefresh) loop_n.addData('tial_n_letter.stopped', tial_n_letter.tStopRefresh) thisExp.nextEntry() -# completed expInfo['n-Back'] repeats of 'loop_n' +# completed 20 repeats of 'loop_n' # Flip one final time so any remaining win.callOnFlip() diff --git a/three-back_lastrun.py b/three-back_lastrun.py index 8168bd7..4a69b10 100644 --- a/three-back_lastrun.py +++ b/three-back_lastrun.py @@ -1,8 +1,8 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- """ -This experiment was created using PsychoPy3 Experiment Builder (v3.2.0), - on November 11, 2019, at 20:14 +This experiment was created using PsychoPy3 Experiment Builder (v3.2.4), + on november 12, 2019, at 02:41 If you publish work using this script the most relevant publication is: Peirce J, Gray JR, Simpson S, MacAskill M, Höchenberger R, Sogo H, Kastman E, Lindeløv JK. (2019) @@ -33,9 +33,9 @@ _thisDir = os.path.dirname(os.path.abspath(__file__)) os.chdir(_thisDir) # Store info about the experiment session -psychopyVersion = '3.2.0' +psychopyVersion = '3.2.4' expName = 'three-back' # from the Builder filename that created this script -expInfo = {'n-Back': '3', 'probability': '0.2', 'participant': '', 'session': '001'} +expInfo = {'backN': '3', 'probability': '0.2', 'participant': '', 'session': '001'} dlg = gui.DlgFromDict(dictionary=expInfo, sortKeys=False, title=expName) if dlg.OK == False: core.quit() # user pressed cancel @@ -65,7 +65,7 @@ frameTolerance = 0.001 # how close to onset before 'same' frame win = visual.Window( size=[1600, 900], fullscr=False, screen=0, winType='pyglet', allowGUI=True, allowStencil=False, - monitor='Alienware Laptop Monitor', color=[-1,-1,-1], colorSpace='rgb', + monitor='Monitor', color=[-1,-1,-1], colorSpace='rgb', blendMode='avg', useFBO=True, units='deg') # store frame rate of monitor if we can measure it @@ -89,14 +89,12 @@ instructions = visual.TextStim(win=win, name='instructions', depth=0.0); key_start = keyboard.Keyboard() # Set experiment start values for variable component stimuli -stimuli = ['A','B','C','D','E','F','G','H'] +stimuli = np.array(['A','B','C','D','E','F','G','H']) stimuliContainer = [] -# Set experiment start values for variable component prevN -prevN = np.random.choice(stimuli,int(expInfo['n-Back'])) -prevNContainer = [] # Initialize components for Routine "trial_n" trial_nClock = core.Clock() +prevN = np.array([]) trial_n_screen = visual.Rect( win=win, name='trial_n_screen',units='norm', width=(2, 2)[0], height=(2, 2)[1], @@ -220,7 +218,7 @@ thisExp.nextEntry() routineTimer.reset() # set up handler to look after randomisation of conditions etc -loop_n = data.TrialHandler(nReps=expInfo['n-Back'], method='sequential', +loop_n = data.TrialHandler(nReps=20, method='sequential', extraInfo=expInfo, originPath=-1, trialList=[None], seed=None, name='loop_n') @@ -241,8 +239,11 @@ for thisLoop_n in loop_n: # ------Prepare to start Routine "trial_n"------- routineTimer.add(2.000000) # update component parameters for each repeat - stimleft = np.delete(stimuli,[np.argwhere(stimuli==i) for i in prevN]) - stimulus = np.random.choice(stimleft) + if (currentLoop.thisN < int(expInfo['backN'])) or (np.random.uniform() > float(expInfo['probability'])): + stimleft = np.delete(stimuli,[np.argwhere(stimuli==i) for i in prevN]) + stimulus = np.random.choice(stimleft) + else: + stimulus = prevN[-int(expInfo['backN'])] tial_n_letter.setText(stimulus) # keep track of which components have finished trial_nComponents = [trial_n_screen, tial_n_letter] @@ -324,14 +325,16 @@ for thisLoop_n in loop_n: for thisComponent in trial_nComponents: if hasattr(thisComponent, "setAutoDraw"): thisComponent.setAutoDraw(False) - prevN = np.hstack((prevN[1:],stimulus)) + thisExp.addData('tial_n_letter.stim', stimulus) + prevN = np.hstack((prevN,stimulus)) + prevN = prevN[-3:] loop_n.addData('trial_n_screen.started', trial_n_screen.tStartRefresh) loop_n.addData('trial_n_screen.stopped', trial_n_screen.tStopRefresh) loop_n.addData('tial_n_letter.started', tial_n_letter.tStartRefresh) loop_n.addData('tial_n_letter.stopped', tial_n_letter.tStopRefresh) thisExp.nextEntry() -# completed expInfo['n-Back'] repeats of 'loop_n' +# completed 20 repeats of 'loop_n' # Flip one final time so any remaining win.callOnFlip() -- GitLab