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])&amp;#10;stimulus = np.random.choice(stimleft)" valType="extendedCode"/>
+        <Param name="Begin Routine" updates="constant" val="if (currentLoop.thisN &lt; int(expInfo['backN'])) or (np.random.uniform() &gt; float(expInfo['probability'])):&amp;#10;    stimleft = np.delete(stimuli,[np.argwhere(stimuli==i) for i in prevN])&amp;#10;    stimulus = np.random.choice(stimleft)&amp;#10;else:&amp;#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)&amp;#10;prevN = np.hstack((prevN,stimulus))&amp;#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